From dd08b8dd6b526cb191e921ba5a7b0b64d04d911f Mon Sep 17 00:00:00 2001 From: Rangi Date: Mon, 6 Jul 2020 21:13:17 -0400 Subject: Use labels for HRAM and VRAM --- constants/gfx_constants.asm | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'constants') diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 0cc0d98d..6446a51f 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -20,3 +20,12 @@ SPRITEBUFFERSIZE EQU 7 * 7 * LEN_1BPP_TILE HP_BAR_GREEN EQU 0 HP_BAR_YELLOW EQU 1 HP_BAR_RED EQU 2 + +; hAutoBGTransferEnabled +TRANSFERTOP EQU 0 +TRANSFERMIDDLE EQU 1 +TRANSFERBOTTOM EQU 2 + +; hRedrawRowOrColumnMode +REDRAW_COL EQU 1 +REDRAW_ROW EQU 2 -- cgit v1.3.1-sl0p From bbc257476f9aac8d04d75a8036d412caa8f7d515 Mon Sep 17 00:00:00 2001 From: Rangi Date: Tue, 7 Jul 2020 10:54:05 -0400 Subject: PSYCHIC -> PSYCHIC_TYPE (PSYCHIC is ambiguous with PSYCHIC_M) --- constants/battle_constants.asm | 7 + constants/type_constants.asm | 32 ++-- data/moves/moves.asm | 330 +++++++++++++++++----------------- data/pokemon/base_stats/abra.asm | 2 +- data/pokemon/base_stats/alakazam.asm | 2 +- data/pokemon/base_stats/drowzee.asm | 2 +- data/pokemon/base_stats/exeggcute.asm | 2 +- data/pokemon/base_stats/exeggutor.asm | 2 +- data/pokemon/base_stats/hypno.asm | 2 +- data/pokemon/base_stats/jynx.asm | 2 +- data/pokemon/base_stats/kadabra.asm | 2 +- data/pokemon/base_stats/mew.asm | 2 +- data/pokemon/base_stats/mewtwo.asm | 2 +- data/pokemon/base_stats/mrmime.asm | 2 +- data/pokemon/base_stats/slowbro.asm | 2 +- data/pokemon/base_stats/slowpoke.asm | 2 +- data/pokemon/base_stats/starmie.asm | 2 +- data/types/type_matchups.asm | 172 +++++++++--------- 18 files changed, 286 insertions(+), 283 deletions(-) (limited to 'constants') diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index bdcd2b98..ba5d6c68 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -21,6 +21,13 @@ MAX_NEUTRAL_DAMAGE EQU 999 SONICBOOM_DAMAGE EQU 20 DRAGON_RAGE_DAMAGE EQU 40 +; type effectiveness factors, scaled by 10 +SUPER_EFFECTIVE EQU 20 +MORE_EFFECTIVE EQU 15 +EFFECTIVE EQU 10 +NOT_VERY_EFFECTIVE EQU 05 +NO_EFFECT EQU 00 + ; non-volatile statuses SLP EQU %111 ; sleep counter PSN EQU 3 diff --git a/constants/type_constants.asm b/constants/type_constants.asm index c94d5c39..d1a1a73e 100755 --- a/constants/type_constants.asm +++ b/constants/type_constants.asm @@ -1,23 +1,23 @@ const_def PHYSICAL EQU const_value - const NORMAL ; $00 - const FIGHTING ; $01 - const FLYING ; $02 - const POISON ; $03 - const GROUND ; $04 - const ROCK ; $05 - const BIRD ; $06 - const BUG ; $07 - const GHOST ; $08 + const NORMAL ; $00 + const FIGHTING ; $01 + const FLYING ; $02 + const POISON ; $03 + const GROUND ; $04 + const ROCK ; $05 + const BIRD ; $06 + const BUG ; $07 + const GHOST ; $08 const_value = $14 SPECIAL EQU const_value - const FIRE ; $14 - const WATER ; $15 - const GRASS ; $16 - const ELECTRIC ; $17 - const PSYCHIC ; $18 - const ICE ; $19 - const DRAGON ; $1A + const FIRE ; $14 + const WATER ; $15 + const GRASS ; $16 + const ELECTRIC ; $17 + const PSYCHIC_TYPE ; $18 + const ICE ; $19 + const DRAGON ; $1A diff --git a/data/moves/moves.asm b/data/moves/moves.asm index 183243e9..85b6dcfc 100755 --- a/data/moves/moves.asm +++ b/data/moves/moves.asm @@ -10,169 +10,169 @@ move: MACRO db \6 ; pp ENDM - move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 + move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 MoveEnd: - move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25 - move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10 - move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15 - move MEGA_PUNCH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 85, 20 - move PAY_DAY, PAY_DAY_EFFECT, 40, NORMAL, 100, 20 - move FIRE_PUNCH, BURN_SIDE_EFFECT1, 75, FIRE, 100, 15 - move ICE_PUNCH, FREEZE_SIDE_EFFECT, 75, ICE, 100, 15 - move THUNDERPUNCH, PARALYZE_SIDE_EFFECT1, 75, ELECTRIC, 100, 15 - move SCRATCH, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 - move VICEGRIP, NO_ADDITIONAL_EFFECT, 55, NORMAL, 100, 30 - move GUILLOTINE, OHKO_EFFECT, 1, NORMAL, 30, 5 - move RAZOR_WIND, CHARGE_EFFECT, 80, NORMAL, 75, 10 - move SWORDS_DANCE, ATTACK_UP2_EFFECT, 0, NORMAL, 100, 30 - move CUT, NO_ADDITIONAL_EFFECT, 50, NORMAL, 95, 30 - move GUST, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 - move WING_ATTACK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35 - move WHIRLWIND, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 85, 20 - move FLY, FLY_EFFECT, 70, FLYING, 95, 15 - move BIND, TRAPPING_EFFECT, 15, NORMAL, 75, 20 - move SLAM, NO_ADDITIONAL_EFFECT, 80, NORMAL, 75, 20 - move VINE_WHIP, NO_ADDITIONAL_EFFECT, 35, GRASS, 100, 10 - move STOMP, FLINCH_SIDE_EFFECT2, 65, NORMAL, 100, 20 - move DOUBLE_KICK, ATTACK_TWICE_EFFECT, 30, FIGHTING, 100, 30 - move MEGA_KICK, NO_ADDITIONAL_EFFECT, 120, NORMAL, 75, 5 - move JUMP_KICK, JUMP_KICK_EFFECT, 70, FIGHTING, 95, 25 - move ROLLING_KICK, FLINCH_SIDE_EFFECT2, 60, FIGHTING, 85, 15 - move SAND_ATTACK, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 15 - move HEADBUTT, FLINCH_SIDE_EFFECT2, 70, NORMAL, 100, 15 - move HORN_ATTACK, NO_ADDITIONAL_EFFECT, 65, NORMAL, 100, 25 - move FURY_ATTACK, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20 - move HORN_DRILL, OHKO_EFFECT, 1, NORMAL, 30, 5 - move TACKLE, NO_ADDITIONAL_EFFECT, 35, NORMAL, 95, 35 - move BODY_SLAM, PARALYZE_SIDE_EFFECT2, 85, NORMAL, 100, 15 - move WRAP, TRAPPING_EFFECT, 15, NORMAL, 85, 20 - move TAKE_DOWN, RECOIL_EFFECT, 90, NORMAL, 85, 20 - move THRASH, THRASH_PETAL_DANCE_EFFECT, 90, NORMAL, 100, 20 - move DOUBLE_EDGE, RECOIL_EFFECT, 100, NORMAL, 100, 15 - move TAIL_WHIP, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30 - move POISON_STING, POISON_SIDE_EFFECT1, 15, POISON, 100, 35 - move TWINEEDLE, TWINEEDLE_EFFECT, 25, BUG, 100, 20 - move PIN_MISSILE, TWO_TO_FIVE_ATTACKS_EFFECT, 14, BUG, 85, 20 - move LEER, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30 - move BITE, FLINCH_SIDE_EFFECT1, 60, NORMAL, 100, 25 - move GROWL, ATTACK_DOWN1_EFFECT, 0, NORMAL, 100, 40 - move ROAR, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 100, 20 - move SING, SLEEP_EFFECT, 0, NORMAL, 55, 15 - move SUPERSONIC, CONFUSION_EFFECT, 0, NORMAL, 55, 20 - move SONICBOOM, SPECIAL_DAMAGE_EFFECT, 1, NORMAL, 90, 20 - move DISABLE, DISABLE_EFFECT, 0, NORMAL, 55, 20 - move ACID, DEFENSE_DOWN_SIDE_EFFECT, 40, POISON, 100, 30 - move EMBER, BURN_SIDE_EFFECT1, 40, FIRE, 100, 25 - move FLAMETHROWER, BURN_SIDE_EFFECT1, 95, FIRE, 100, 15 - move MIST, MIST_EFFECT, 0, ICE, 100, 30 - move WATER_GUN, NO_ADDITIONAL_EFFECT, 40, WATER, 100, 25 - move HYDRO_PUMP, NO_ADDITIONAL_EFFECT, 120, WATER, 80, 5 - move SURF, NO_ADDITIONAL_EFFECT, 95, WATER, 100, 15 - move ICE_BEAM, FREEZE_SIDE_EFFECT, 95, ICE, 100, 10 - move BLIZZARD, FREEZE_SIDE_EFFECT, 120, ICE, 90, 5 - move PSYBEAM, CONFUSION_SIDE_EFFECT, 65, PSYCHIC, 100, 20 - move BUBBLEBEAM, SPEED_DOWN_SIDE_EFFECT, 65, WATER, 100, 20 - move AURORA_BEAM, ATTACK_DOWN_SIDE_EFFECT, 65, ICE, 100, 20 - move HYPER_BEAM, HYPER_BEAM_EFFECT, 150, NORMAL, 90, 5 - move PECK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35 - move DRILL_PECK, NO_ADDITIONAL_EFFECT, 80, FLYING, 100, 20 - move SUBMISSION, RECOIL_EFFECT, 80, FIGHTING, 80, 25 - move LOW_KICK, FLINCH_SIDE_EFFECT2, 50, FIGHTING, 90, 20 - move COUNTER, NO_ADDITIONAL_EFFECT, 1, FIGHTING, 100, 20 - move SEISMIC_TOSS, SPECIAL_DAMAGE_EFFECT, 1, FIGHTING, 100, 20 - move STRENGTH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 15 - move ABSORB, DRAIN_HP_EFFECT, 20, GRASS, 100, 20 - move MEGA_DRAIN, DRAIN_HP_EFFECT, 40, GRASS, 100, 10 - move LEECH_SEED, LEECH_SEED_EFFECT, 0, GRASS, 90, 10 - move GROWTH, SPECIAL_UP1_EFFECT, 0, NORMAL, 100, 40 - move RAZOR_LEAF, NO_ADDITIONAL_EFFECT, 55, GRASS, 95, 25 - move SOLARBEAM, CHARGE_EFFECT, 120, GRASS, 100, 10 - move POISONPOWDER, POISON_EFFECT, 0, POISON, 75, 35 - move STUN_SPORE, PARALYZE_EFFECT, 0, GRASS, 75, 30 - move SLEEP_POWDER, SLEEP_EFFECT, 0, GRASS, 75, 15 - move PETAL_DANCE, THRASH_PETAL_DANCE_EFFECT, 70, GRASS, 100, 20 - move STRING_SHOT, SPEED_DOWN1_EFFECT, 0, BUG, 95, 40 - move DRAGON_RAGE, SPECIAL_DAMAGE_EFFECT, 1, DRAGON, 100, 10 - move FIRE_SPIN, TRAPPING_EFFECT, 15, FIRE, 70, 15 - move THUNDERSHOCK, PARALYZE_SIDE_EFFECT1, 40, ELECTRIC, 100, 30 - move THUNDERBOLT, PARALYZE_SIDE_EFFECT1, 95, ELECTRIC, 100, 15 - move THUNDER_WAVE, PARALYZE_EFFECT, 0, ELECTRIC, 100, 20 - move THUNDER, PARALYZE_SIDE_EFFECT1, 120, ELECTRIC, 70, 10 - move ROCK_THROW, NO_ADDITIONAL_EFFECT, 50, ROCK, 65, 15 - move EARTHQUAKE, NO_ADDITIONAL_EFFECT, 100, GROUND, 100, 10 - move FISSURE, OHKO_EFFECT, 1, GROUND, 30, 5 - move DIG, CHARGE_EFFECT, 100, GROUND, 100, 10 - move TOXIC, POISON_EFFECT, 0, POISON, 85, 10 - move CONFUSION, CONFUSION_SIDE_EFFECT, 50, PSYCHIC, 100, 25 - move PSYCHIC_M, SPECIAL_DOWN_SIDE_EFFECT, 90, PSYCHIC, 100, 10 - move HYPNOSIS, SLEEP_EFFECT, 0, PSYCHIC, 60, 20 - move MEDITATE, ATTACK_UP1_EFFECT, 0, PSYCHIC, 100, 40 - move AGILITY, SPEED_UP2_EFFECT, 0, PSYCHIC, 100, 30 - move QUICK_ATTACK, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 30 - move RAGE, RAGE_EFFECT, 20, NORMAL, 100, 20 - move TELEPORT, SWITCH_AND_TELEPORT_EFFECT, 0, PSYCHIC, 100, 20 - move NIGHT_SHADE, SPECIAL_DAMAGE_EFFECT, 0, GHOST, 100, 15 - move MIMIC, MIMIC_EFFECT, 0, NORMAL, 100, 10 - move SCREECH, DEFENSE_DOWN2_EFFECT, 0, NORMAL, 85, 40 - move DOUBLE_TEAM, EVASION_UP1_EFFECT, 0, NORMAL, 100, 15 - move RECOVER, HEAL_EFFECT, 0, NORMAL, 100, 20 - move HARDEN, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 30 - move MINIMIZE, EVASION_UP1_EFFECT, 0, NORMAL, 100, 20 - move SMOKESCREEN, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 20 - move CONFUSE_RAY, CONFUSION_EFFECT, 0, GHOST, 100, 10 - move WITHDRAW, DEFENSE_UP1_EFFECT, 0, WATER, 100, 40 - move DEFENSE_CURL, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 40 - move BARRIER, DEFENSE_UP2_EFFECT, 0, PSYCHIC, 100, 30 - move LIGHT_SCREEN, LIGHT_SCREEN_EFFECT, 0, PSYCHIC, 100, 30 - move HAZE, HAZE_EFFECT, 0, ICE, 100, 30 - move REFLECT, REFLECT_EFFECT, 0, PSYCHIC, 100, 20 - move FOCUS_ENERGY, FOCUS_ENERGY_EFFECT, 0, NORMAL, 100, 30 - move BIDE, BIDE_EFFECT, 0, NORMAL, 100, 10 - move METRONOME, METRONOME_EFFECT, 0, NORMAL, 100, 10 - move MIRROR_MOVE, MIRROR_MOVE_EFFECT, 0, FLYING, 100, 20 - move SELFDESTRUCT, EXPLODE_EFFECT, 130, NORMAL, 100, 5 - move EGG_BOMB, NO_ADDITIONAL_EFFECT, 100, NORMAL, 75, 10 - move LICK, PARALYZE_SIDE_EFFECT2, 20, GHOST, 100, 30 - move SMOG, POISON_SIDE_EFFECT2, 20, POISON, 70, 20 - move SLUDGE, POISON_SIDE_EFFECT2, 65, POISON, 100, 20 - move BONE_CLUB, FLINCH_SIDE_EFFECT1, 65, GROUND, 85, 20 - move FIRE_BLAST, BURN_SIDE_EFFECT2, 120, FIRE, 85, 5 - move WATERFALL, NO_ADDITIONAL_EFFECT, 80, WATER, 100, 15 - move CLAMP, TRAPPING_EFFECT, 35, WATER, 75, 10 - move SWIFT, SWIFT_EFFECT, 60, NORMAL, 100, 20 - move SKULL_BASH, CHARGE_EFFECT, 100, NORMAL, 100, 15 - move SPIKE_CANNON, TWO_TO_FIVE_ATTACKS_EFFECT, 20, NORMAL, 100, 15 - move CONSTRICT, SPEED_DOWN_SIDE_EFFECT, 10, NORMAL, 100, 35 - move AMNESIA, SPECIAL_UP2_EFFECT, 0, PSYCHIC, 100, 20 - move KINESIS, ACCURACY_DOWN1_EFFECT, 0, PSYCHIC, 80, 15 - move SOFTBOILED, HEAL_EFFECT, 0, NORMAL, 100, 10 - move HI_JUMP_KICK, JUMP_KICK_EFFECT, 85, FIGHTING, 90, 20 - move GLARE, PARALYZE_EFFECT, 0, NORMAL, 75, 30 - move DREAM_EATER, DREAM_EATER_EFFECT, 100, PSYCHIC, 100, 15 - move POISON_GAS, POISON_EFFECT, 0, POISON, 55, 40 - move BARRAGE, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20 - move LEECH_LIFE, DRAIN_HP_EFFECT, 20, BUG, 100, 15 - move LOVELY_KISS, SLEEP_EFFECT, 0, NORMAL, 75, 10 - move SKY_ATTACK, CHARGE_EFFECT, 140, FLYING, 90, 5 - move TRANSFORM, TRANSFORM_EFFECT, 0, NORMAL, 100, 10 - move BUBBLE, SPEED_DOWN_SIDE_EFFECT, 20, WATER, 100, 30 - move DIZZY_PUNCH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 10 - move SPORE, SLEEP_EFFECT, 0, GRASS, 100, 15 - move FLASH, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 70, 20 - move PSYWAVE, SPECIAL_DAMAGE_EFFECT, 1, PSYCHIC, 80, 15 - move SPLASH, SPLASH_EFFECT, 0, NORMAL, 100, 40 - move ACID_ARMOR, DEFENSE_UP2_EFFECT, 0, POISON, 100, 40 - move CRABHAMMER, NO_ADDITIONAL_EFFECT, 90, WATER, 85, 10 - move EXPLOSION, EXPLODE_EFFECT, 170, NORMAL, 100, 5 - move FURY_SWIPES, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 80, 15 - move BONEMERANG, ATTACK_TWICE_EFFECT, 50, GROUND, 90, 10 - move REST, HEAL_EFFECT, 0, PSYCHIC, 100, 10 - move ROCK_SLIDE, NO_ADDITIONAL_EFFECT, 75, ROCK, 90, 10 - move HYPER_FANG, FLINCH_SIDE_EFFECT1, 80, NORMAL, 90, 15 - move SHARPEN, ATTACK_UP1_EFFECT, 0, NORMAL, 100, 30 - move CONVERSION, CONVERSION_EFFECT, 0, NORMAL, 100, 30 - move TRI_ATTACK, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 10 - move SUPER_FANG, SUPER_FANG_EFFECT, 1, NORMAL, 90, 10 - move SLASH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 20 - move SUBSTITUTE, SUBSTITUTE_EFFECT, 0, NORMAL, 100, 10 - move STRUGGLE, RECOIL_EFFECT, 50, NORMAL, 100, 10 + move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25 + move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10 + move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15 + move MEGA_PUNCH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 85, 20 + move PAY_DAY, PAY_DAY_EFFECT, 40, NORMAL, 100, 20 + move FIRE_PUNCH, BURN_SIDE_EFFECT1, 75, FIRE, 100, 15 + move ICE_PUNCH, FREEZE_SIDE_EFFECT, 75, ICE, 100, 15 + move THUNDERPUNCH, PARALYZE_SIDE_EFFECT1, 75, ELECTRIC, 100, 15 + move SCRATCH, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 + move VICEGRIP, NO_ADDITIONAL_EFFECT, 55, NORMAL, 100, 30 + move GUILLOTINE, OHKO_EFFECT, 1, NORMAL, 30, 5 + move RAZOR_WIND, CHARGE_EFFECT, 80, NORMAL, 75, 10 + move SWORDS_DANCE, ATTACK_UP2_EFFECT, 0, NORMAL, 100, 30 + move CUT, NO_ADDITIONAL_EFFECT, 50, NORMAL, 95, 30 + move GUST, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35 + move WING_ATTACK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35 + move WHIRLWIND, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 85, 20 + move FLY, FLY_EFFECT, 70, FLYING, 95, 15 + move BIND, TRAPPING_EFFECT, 15, NORMAL, 75, 20 + move SLAM, NO_ADDITIONAL_EFFECT, 80, NORMAL, 75, 20 + move VINE_WHIP, NO_ADDITIONAL_EFFECT, 35, GRASS, 100, 10 + move STOMP, FLINCH_SIDE_EFFECT2, 65, NORMAL, 100, 20 + move DOUBLE_KICK, ATTACK_TWICE_EFFECT, 30, FIGHTING, 100, 30 + move MEGA_KICK, NO_ADDITIONAL_EFFECT, 120, NORMAL, 75, 5 + move JUMP_KICK, JUMP_KICK_EFFECT, 70, FIGHTING, 95, 25 + move ROLLING_KICK, FLINCH_SIDE_EFFECT2, 60, FIGHTING, 85, 15 + move SAND_ATTACK, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 15 + move HEADBUTT, FLINCH_SIDE_EFFECT2, 70, NORMAL, 100, 15 + move HORN_ATTACK, NO_ADDITIONAL_EFFECT, 65, NORMAL, 100, 25 + move FURY_ATTACK, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20 + move HORN_DRILL, OHKO_EFFECT, 1, NORMAL, 30, 5 + move TACKLE, NO_ADDITIONAL_EFFECT, 35, NORMAL, 95, 35 + move BODY_SLAM, PARALYZE_SIDE_EFFECT2, 85, NORMAL, 100, 15 + move WRAP, TRAPPING_EFFECT, 15, NORMAL, 85, 20 + move TAKE_DOWN, RECOIL_EFFECT, 90, NORMAL, 85, 20 + move THRASH, THRASH_PETAL_DANCE_EFFECT, 90, NORMAL, 100, 20 + move DOUBLE_EDGE, RECOIL_EFFECT, 100, NORMAL, 100, 15 + move TAIL_WHIP, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30 + move POISON_STING, POISON_SIDE_EFFECT1, 15, POISON, 100, 35 + move TWINEEDLE, TWINEEDLE_EFFECT, 25, BUG, 100, 20 + move PIN_MISSILE, TWO_TO_FIVE_ATTACKS_EFFECT, 14, BUG, 85, 20 + move LEER, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30 + move BITE, FLINCH_SIDE_EFFECT1, 60, NORMAL, 100, 25 + move GROWL, ATTACK_DOWN1_EFFECT, 0, NORMAL, 100, 40 + move ROAR, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 100, 20 + move SING, SLEEP_EFFECT, 0, NORMAL, 55, 15 + move SUPERSONIC, CONFUSION_EFFECT, 0, NORMAL, 55, 20 + move SONICBOOM, SPECIAL_DAMAGE_EFFECT, 1, NORMAL, 90, 20 + move DISABLE, DISABLE_EFFECT, 0, NORMAL, 55, 20 + move ACID, DEFENSE_DOWN_SIDE_EFFECT, 40, POISON, 100, 30 + move EMBER, BURN_SIDE_EFFECT1, 40, FIRE, 100, 25 + move FLAMETHROWER, BURN_SIDE_EFFECT1, 95, FIRE, 100, 15 + move MIST, MIST_EFFECT, 0, ICE, 100, 30 + move WATER_GUN, NO_ADDITIONAL_EFFECT, 40, WATER, 100, 25 + move HYDRO_PUMP, NO_ADDITIONAL_EFFECT, 120, WATER, 80, 5 + move SURF, NO_ADDITIONAL_EFFECT, 95, WATER, 100, 15 + move ICE_BEAM, FREEZE_SIDE_EFFECT, 95, ICE, 100, 10 + move BLIZZARD, FREEZE_SIDE_EFFECT, 120, ICE, 90, 5 + move PSYBEAM, CONFUSION_SIDE_EFFECT, 65, PSYCHIC_TYPE, 100, 20 + move BUBBLEBEAM, SPEED_DOWN_SIDE_EFFECT, 65, WATER, 100, 20 + move AURORA_BEAM, ATTACK_DOWN_SIDE_EFFECT, 65, ICE, 100, 20 + move HYPER_BEAM, HYPER_BEAM_EFFECT, 150, NORMAL, 90, 5 + move PECK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35 + move DRILL_PECK, NO_ADDITIONAL_EFFECT, 80, FLYING, 100, 20 + move SUBMISSION, RECOIL_EFFECT, 80, FIGHTING, 80, 25 + move LOW_KICK, FLINCH_SIDE_EFFECT2, 50, FIGHTING, 90, 20 + move COUNTER, NO_ADDITIONAL_EFFECT, 1, FIGHTING, 100, 20 + move SEISMIC_TOSS, SPECIAL_DAMAGE_EFFECT, 1, FIGHTING, 100, 20 + move STRENGTH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 15 + move ABSORB, DRAIN_HP_EFFECT, 20, GRASS, 100, 20 + move MEGA_DRAIN, DRAIN_HP_EFFECT, 40, GRASS, 100, 10 + move LEECH_SEED, LEECH_SEED_EFFECT, 0, GRASS, 90, 10 + move GROWTH, SPECIAL_UP1_EFFECT, 0, NORMAL, 100, 40 + move RAZOR_LEAF, NO_ADDITIONAL_EFFECT, 55, GRASS, 95, 25 + move SOLARBEAM, CHARGE_EFFECT, 120, GRASS, 100, 10 + move POISONPOWDER, POISON_EFFECT, 0, POISON, 75, 35 + move STUN_SPORE, PARALYZE_EFFECT, 0, GRASS, 75, 30 + move SLEEP_POWDER, SLEEP_EFFECT, 0, GRASS, 75, 15 + move PETAL_DANCE, THRASH_PETAL_DANCE_EFFECT, 70, GRASS, 100, 20 + move STRING_SHOT, SPEED_DOWN1_EFFECT, 0, BUG, 95, 40 + move DRAGON_RAGE, SPECIAL_DAMAGE_EFFECT, 1, DRAGON, 100, 10 + move FIRE_SPIN, TRAPPING_EFFECT, 15, FIRE, 70, 15 + move THUNDERSHOCK, PARALYZE_SIDE_EFFECT1, 40, ELECTRIC, 100, 30 + move THUNDERBOLT, PARALYZE_SIDE_EFFECT1, 95, ELECTRIC, 100, 15 + move THUNDER_WAVE, PARALYZE_EFFECT, 0, ELECTRIC, 100, 20 + move THUNDER, PARALYZE_SIDE_EFFECT1, 120, ELECTRIC, 70, 10 + move ROCK_THROW, NO_ADDITIONAL_EFFECT, 50, ROCK, 65, 15 + move EARTHQUAKE, NO_ADDITIONAL_EFFECT, 100, GROUND, 100, 10 + move FISSURE, OHKO_EFFECT, 1, GROUND, 30, 5 + move DIG, CHARGE_EFFECT, 100, GROUND, 100, 10 + move TOXIC, POISON_EFFECT, 0, POISON, 85, 10 + move CONFUSION, CONFUSION_SIDE_EFFECT, 50, PSYCHIC_TYPE, 100, 25 + move PSYCHIC_M, SPECIAL_DOWN_SIDE_EFFECT, 90, PSYCHIC_TYPE, 100, 10 + move HYPNOSIS, SLEEP_EFFECT, 0, PSYCHIC_TYPE, 60, 20 + move MEDITATE, ATTACK_UP1_EFFECT, 0, PSYCHIC_TYPE, 100, 40 + move AGILITY, SPEED_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 30 + move QUICK_ATTACK, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 30 + move RAGE, RAGE_EFFECT, 20, NORMAL, 100, 20 + move TELEPORT, SWITCH_AND_TELEPORT_EFFECT, 0, PSYCHIC_TYPE, 100, 20 + move NIGHT_SHADE, SPECIAL_DAMAGE_EFFECT, 0, GHOST, 100, 15 + move MIMIC, MIMIC_EFFECT, 0, NORMAL, 100, 10 + move SCREECH, DEFENSE_DOWN2_EFFECT, 0, NORMAL, 85, 40 + move DOUBLE_TEAM, EVASION_UP1_EFFECT, 0, NORMAL, 100, 15 + move RECOVER, HEAL_EFFECT, 0, NORMAL, 100, 20 + move HARDEN, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 30 + move MINIMIZE, EVASION_UP1_EFFECT, 0, NORMAL, 100, 20 + move SMOKESCREEN, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 20 + move CONFUSE_RAY, CONFUSION_EFFECT, 0, GHOST, 100, 10 + move WITHDRAW, DEFENSE_UP1_EFFECT, 0, WATER, 100, 40 + move DEFENSE_CURL, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 40 + move BARRIER, DEFENSE_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 30 + move LIGHT_SCREEN, LIGHT_SCREEN_EFFECT, 0, PSYCHIC_TYPE, 100, 30 + move HAZE, HAZE_EFFECT, 0, ICE, 100, 30 + move REFLECT, REFLECT_EFFECT, 0, PSYCHIC_TYPE, 100, 20 + move FOCUS_ENERGY, FOCUS_ENERGY_EFFECT, 0, NORMAL, 100, 30 + move BIDE, BIDE_EFFECT, 0, NORMAL, 100, 10 + move METRONOME, METRONOME_EFFECT, 0, NORMAL, 100, 10 + move MIRROR_MOVE, MIRROR_MOVE_EFFECT, 0, FLYING, 100, 20 + move SELFDESTRUCT, EXPLODE_EFFECT, 130, NORMAL, 100, 5 + move EGG_BOMB, NO_ADDITIONAL_EFFECT, 100, NORMAL, 75, 10 + move LICK, PARALYZE_SIDE_EFFECT2, 20, GHOST, 100, 30 + move SMOG, POISON_SIDE_EFFECT2, 20, POISON, 70, 20 + move SLUDGE, POISON_SIDE_EFFECT2, 65, POISON, 100, 20 + move BONE_CLUB, FLINCH_SIDE_EFFECT1, 65, GROUND, 85, 20 + move FIRE_BLAST, BURN_SIDE_EFFECT2, 120, FIRE, 85, 5 + move WATERFALL, NO_ADDITIONAL_EFFECT, 80, WATER, 100, 15 + move CLAMP, TRAPPING_EFFECT, 35, WATER, 75, 10 + move SWIFT, SWIFT_EFFECT, 60, NORMAL, 100, 20 + move SKULL_BASH, CHARGE_EFFECT, 100, NORMAL, 100, 15 + move SPIKE_CANNON, TWO_TO_FIVE_ATTACKS_EFFECT, 20, NORMAL, 100, 15 + move CONSTRICT, SPEED_DOWN_SIDE_EFFECT, 10, NORMAL, 100, 35 + move AMNESIA, SPECIAL_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 20 + move KINESIS, ACCURACY_DOWN1_EFFECT, 0, PSYCHIC_TYPE, 80, 15 + move SOFTBOILED, HEAL_EFFECT, 0, NORMAL, 100, 10 + move HI_JUMP_KICK, JUMP_KICK_EFFECT, 85, FIGHTING, 90, 20 + move GLARE, PARALYZE_EFFECT, 0, NORMAL, 75, 30 + move DREAM_EATER, DREAM_EATER_EFFECT, 100, PSYCHIC_TYPE, 100, 15 + move POISON_GAS, POISON_EFFECT, 0, POISON, 55, 40 + move BARRAGE, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20 + move LEECH_LIFE, DRAIN_HP_EFFECT, 20, BUG, 100, 15 + move LOVELY_KISS, SLEEP_EFFECT, 0, NORMAL, 75, 10 + move SKY_ATTACK, CHARGE_EFFECT, 140, FLYING, 90, 5 + move TRANSFORM, TRANSFORM_EFFECT, 0, NORMAL, 100, 10 + move BUBBLE, SPEED_DOWN_SIDE_EFFECT, 20, WATER, 100, 30 + move DIZZY_PUNCH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 10 + move SPORE, SLEEP_EFFECT, 0, GRASS, 100, 15 + move FLASH, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 70, 20 + move PSYWAVE, SPECIAL_DAMAGE_EFFECT, 1, PSYCHIC_TYPE, 80, 15 + move SPLASH, SPLASH_EFFECT, 0, NORMAL, 100, 40 + move ACID_ARMOR, DEFENSE_UP2_EFFECT, 0, POISON, 100, 40 + move CRABHAMMER, NO_ADDITIONAL_EFFECT, 90, WATER, 85, 10 + move EXPLOSION, EXPLODE_EFFECT, 170, NORMAL, 100, 5 + move FURY_SWIPES, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 80, 15 + move BONEMERANG, ATTACK_TWICE_EFFECT, 50, GROUND, 90, 10 + move REST, HEAL_EFFECT, 0, PSYCHIC_TYPE, 100, 10 + move ROCK_SLIDE, NO_ADDITIONAL_EFFECT, 75, ROCK, 90, 10 + move HYPER_FANG, FLINCH_SIDE_EFFECT1, 80, NORMAL, 90, 15 + move SHARPEN, ATTACK_UP1_EFFECT, 0, NORMAL, 100, 30 + move CONVERSION, CONVERSION_EFFECT, 0, NORMAL, 100, 30 + move TRI_ATTACK, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 10 + move SUPER_FANG, SUPER_FANG_EFFECT, 1, NORMAL, 90, 10 + move SLASH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 20 + move SUBSTITUTE, SUBSTITUTE_EFFECT, 0, NORMAL, 100, 10 + move STRUGGLE, RECOIL_EFFECT, 50, NORMAL, 100, 10 diff --git a/data/pokemon/base_stats/abra.asm b/data/pokemon/base_stats/abra.asm index 522bd0a5..97009888 100644 --- a/data/pokemon/base_stats/abra.asm +++ b/data/pokemon/base_stats/abra.asm @@ -3,7 +3,7 @@ db 25, 20, 15, 90, 105 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 200 ; catch rate db 73 ; base exp diff --git a/data/pokemon/base_stats/alakazam.asm b/data/pokemon/base_stats/alakazam.asm index d4b8296a..dd1fe126 100644 --- a/data/pokemon/base_stats/alakazam.asm +++ b/data/pokemon/base_stats/alakazam.asm @@ -3,7 +3,7 @@ db 55, 50, 45, 120, 135 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 50 ; catch rate db 186 ; base exp diff --git a/data/pokemon/base_stats/drowzee.asm b/data/pokemon/base_stats/drowzee.asm index 756c2bae..e1760ebe 100644 --- a/data/pokemon/base_stats/drowzee.asm +++ b/data/pokemon/base_stats/drowzee.asm @@ -3,7 +3,7 @@ db 60, 48, 45, 42, 90 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 190 ; catch rate db 102 ; base exp diff --git a/data/pokemon/base_stats/exeggcute.asm b/data/pokemon/base_stats/exeggcute.asm index ee91449d..3e0cb826 100644 --- a/data/pokemon/base_stats/exeggcute.asm +++ b/data/pokemon/base_stats/exeggcute.asm @@ -3,7 +3,7 @@ db 60, 40, 80, 40, 60 ; hp atk def spd spc - db GRASS, PSYCHIC ; type + db GRASS, PSYCHIC_TYPE ; type db 90 ; catch rate db 98 ; base exp diff --git a/data/pokemon/base_stats/exeggutor.asm b/data/pokemon/base_stats/exeggutor.asm index 6d12f9cb..2c68c724 100644 --- a/data/pokemon/base_stats/exeggutor.asm +++ b/data/pokemon/base_stats/exeggutor.asm @@ -3,7 +3,7 @@ db 95, 95, 85, 55, 125 ; hp atk def spd spc - db GRASS, PSYCHIC ; type + db GRASS, PSYCHIC_TYPE ; type db 45 ; catch rate db 212 ; base exp diff --git a/data/pokemon/base_stats/hypno.asm b/data/pokemon/base_stats/hypno.asm index b03cb2a0..208c5bd2 100644 --- a/data/pokemon/base_stats/hypno.asm +++ b/data/pokemon/base_stats/hypno.asm @@ -3,7 +3,7 @@ db 85, 73, 70, 67, 115 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 75 ; catch rate db 165 ; base exp diff --git a/data/pokemon/base_stats/jynx.asm b/data/pokemon/base_stats/jynx.asm index 0324d5f9..6cc52608 100644 --- a/data/pokemon/base_stats/jynx.asm +++ b/data/pokemon/base_stats/jynx.asm @@ -3,7 +3,7 @@ db 65, 50, 35, 95, 95 ; hp atk def spd spc - db ICE, PSYCHIC ; type + db ICE, PSYCHIC_TYPE ; type db 45 ; catch rate db 137 ; base exp diff --git a/data/pokemon/base_stats/kadabra.asm b/data/pokemon/base_stats/kadabra.asm index eba3878b..6ce061e8 100644 --- a/data/pokemon/base_stats/kadabra.asm +++ b/data/pokemon/base_stats/kadabra.asm @@ -3,7 +3,7 @@ db 40, 35, 30, 105, 120 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 100 ; catch rate db 145 ; base exp diff --git a/data/pokemon/base_stats/mew.asm b/data/pokemon/base_stats/mew.asm index d601c7a0..e65e45ec 100644 --- a/data/pokemon/base_stats/mew.asm +++ b/data/pokemon/base_stats/mew.asm @@ -3,7 +3,7 @@ db 100, 100, 100, 100, 100 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 45 ; catch rate db 64 ; base exp diff --git a/data/pokemon/base_stats/mewtwo.asm b/data/pokemon/base_stats/mewtwo.asm index fd77502d..4142479b 100644 --- a/data/pokemon/base_stats/mewtwo.asm +++ b/data/pokemon/base_stats/mewtwo.asm @@ -3,7 +3,7 @@ db 106, 110, 90, 130, 154 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 3 ; catch rate db 220 ; base exp diff --git a/data/pokemon/base_stats/mrmime.asm b/data/pokemon/base_stats/mrmime.asm index 44b11ad1..c4d98f79 100644 --- a/data/pokemon/base_stats/mrmime.asm +++ b/data/pokemon/base_stats/mrmime.asm @@ -3,7 +3,7 @@ db 40, 45, 65, 90, 100 ; hp atk def spd spc - db PSYCHIC, PSYCHIC ; type + db PSYCHIC_TYPE, PSYCHIC_TYPE ; type db 45 ; catch rate db 136 ; base exp diff --git a/data/pokemon/base_stats/slowbro.asm b/data/pokemon/base_stats/slowbro.asm index 939229d6..a5e067d2 100644 --- a/data/pokemon/base_stats/slowbro.asm +++ b/data/pokemon/base_stats/slowbro.asm @@ -3,7 +3,7 @@ db 95, 75, 110, 30, 80 ; hp atk def spd spc - db WATER, PSYCHIC ; type + db WATER, PSYCHIC_TYPE ; type db 75 ; catch rate db 164 ; base exp diff --git a/data/pokemon/base_stats/slowpoke.asm b/data/pokemon/base_stats/slowpoke.asm index 77c48277..acb8d0ed 100644 --- a/data/pokemon/base_stats/slowpoke.asm +++ b/data/pokemon/base_stats/slowpoke.asm @@ -3,7 +3,7 @@ db 90, 65, 65, 15, 40 ; hp atk def spd spc - db WATER, PSYCHIC ; type + db WATER, PSYCHIC_TYPE ; type db 190 ; catch rate db 99 ; base exp diff --git a/data/pokemon/base_stats/starmie.asm b/data/pokemon/base_stats/starmie.asm index 5792c21f..dfbad82d 100644 --- a/data/pokemon/base_stats/starmie.asm +++ b/data/pokemon/base_stats/starmie.asm @@ -3,7 +3,7 @@ db 60, 75, 85, 115, 100 ; hp atk def spd spc - db WATER, PSYCHIC ; type + db WATER, PSYCHIC_TYPE ; type db 60 ; catch rate db 207 ; base exp diff --git a/data/types/type_matchups.asm b/data/types/type_matchups.asm index 1321a3d9..52e3d956 100755 --- a/data/types/type_matchups.asm +++ b/data/types/type_matchups.asm @@ -1,89 +1,85 @@ TypeEffects: -; format: attacking type, defending type, damage multiplier -; the multiplier is a (decimal) fixed-point number: -; 20 is ×2.0 -; 05 is ×0.5 -; 00 is ×0 - db WATER,FIRE,20 - db FIRE,GRASS,20 - db FIRE,ICE,20 - db GRASS,WATER,20 - db ELECTRIC,WATER,20 - db WATER,ROCK,20 - db GROUND,FLYING,00 - db WATER,WATER,05 - db FIRE,FIRE,05 - db ELECTRIC,ELECTRIC,05 - db ICE,ICE,05 - db GRASS,GRASS,05 - db PSYCHIC,PSYCHIC,05 - db FIRE,WATER,05 - db GRASS,FIRE,05 - db WATER,GRASS,05 - db ELECTRIC,GRASS,05 - db NORMAL,ROCK,05 - db NORMAL,GHOST,00 - db GHOST,GHOST,20 - db FIRE,BUG,20 - db FIRE,ROCK,05 - db WATER,GROUND,20 - db ELECTRIC,GROUND,00 - db ELECTRIC,FLYING,20 - db GRASS,GROUND,20 - db GRASS,BUG,05 - db GRASS,POISON,05 - db GRASS,ROCK,20 - db GRASS,FLYING,05 - db ICE,WATER,05 - db ICE,GRASS,20 - db ICE,GROUND,20 - db ICE,FLYING,20 - db FIGHTING,NORMAL,20 - db FIGHTING,POISON,05 - db FIGHTING,FLYING,05 - db FIGHTING,PSYCHIC,05 - db FIGHTING,BUG,05 - db FIGHTING,ROCK,20 - db FIGHTING,ICE,20 - db FIGHTING,GHOST,00 - db POISON,GRASS,20 - db POISON,POISON,05 - db POISON,GROUND,05 - db POISON,BUG,20 - db POISON,ROCK,05 - db POISON,GHOST,05 - db GROUND,FIRE,20 - db GROUND,ELECTRIC,20 - db GROUND,GRASS,05 - db GROUND,BUG,05 - db GROUND,ROCK,20 - db GROUND,POISON,20 - db FLYING,ELECTRIC,05 - db FLYING,FIGHTING,20 - db FLYING,BUG,20 - db FLYING,GRASS,20 - db FLYING,ROCK,05 - db PSYCHIC,FIGHTING,20 - db PSYCHIC,POISON,20 - db BUG,FIRE,05 - db BUG,GRASS,20 - db BUG,FIGHTING,05 - db BUG,FLYING,05 - db BUG,PSYCHIC,20 - db BUG,GHOST,05 - db BUG,POISON,20 - db ROCK,FIRE,20 - db ROCK,FIGHTING,05 - db ROCK,GROUND,05 - db ROCK,FLYING,20 - db ROCK,BUG,20 - db ROCK,ICE,20 - db GHOST,NORMAL,00 - db GHOST,PSYCHIC,00 - db FIRE,DRAGON,05 - db WATER,DRAGON,05 - db ELECTRIC,DRAGON,05 - db GRASS,DRAGON,05 - db ICE,DRAGON,20 - db DRAGON,DRAGON,20 - db $FF + ; attacker, defender, *= + db WATER, FIRE, SUPER_EFFECTIVE + db FIRE, GRASS, SUPER_EFFECTIVE + db FIRE, ICE, SUPER_EFFECTIVE + db GRASS, WATER, SUPER_EFFECTIVE + db ELECTRIC, WATER, SUPER_EFFECTIVE + db WATER, ROCK, SUPER_EFFECTIVE + db GROUND, FLYING, NO_EFFECT + db WATER, WATER, NOT_VERY_EFFECTIVE + db FIRE, FIRE, NOT_VERY_EFFECTIVE + db ELECTRIC, ELECTRIC, NOT_VERY_EFFECTIVE + db ICE, ICE, NOT_VERY_EFFECTIVE + db GRASS, GRASS, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db FIRE, WATER, NOT_VERY_EFFECTIVE + db GRASS, FIRE, NOT_VERY_EFFECTIVE + db WATER, GRASS, NOT_VERY_EFFECTIVE + db ELECTRIC, GRASS, NOT_VERY_EFFECTIVE + db NORMAL, ROCK, NOT_VERY_EFFECTIVE + db NORMAL, GHOST, NO_EFFECT + db GHOST, GHOST, SUPER_EFFECTIVE + db FIRE, BUG, SUPER_EFFECTIVE + db FIRE, ROCK, NOT_VERY_EFFECTIVE + db WATER, GROUND, SUPER_EFFECTIVE + db ELECTRIC, GROUND, NO_EFFECT + db ELECTRIC, FLYING, SUPER_EFFECTIVE + db GRASS, GROUND, SUPER_EFFECTIVE + db GRASS, BUG, NOT_VERY_EFFECTIVE + db GRASS, POISON, NOT_VERY_EFFECTIVE + db GRASS, ROCK, SUPER_EFFECTIVE + db GRASS, FLYING, NOT_VERY_EFFECTIVE + db ICE, WATER, NOT_VERY_EFFECTIVE + db ICE, GRASS, SUPER_EFFECTIVE + db ICE, GROUND, SUPER_EFFECTIVE + db ICE, FLYING, SUPER_EFFECTIVE + db FIGHTING, NORMAL, SUPER_EFFECTIVE + db FIGHTING, POISON, NOT_VERY_EFFECTIVE + db FIGHTING, FLYING, NOT_VERY_EFFECTIVE + db FIGHTING, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db FIGHTING, BUG, NOT_VERY_EFFECTIVE + db FIGHTING, ROCK, SUPER_EFFECTIVE + db FIGHTING, ICE, SUPER_EFFECTIVE + db FIGHTING, GHOST, NO_EFFECT + db POISON, GRASS, SUPER_EFFECTIVE + db POISON, POISON, NOT_VERY_EFFECTIVE + db POISON, GROUND, NOT_VERY_EFFECTIVE + db POISON, BUG, SUPER_EFFECTIVE + db POISON, ROCK, NOT_VERY_EFFECTIVE + db POISON, GHOST, NOT_VERY_EFFECTIVE + db GROUND, FIRE, SUPER_EFFECTIVE + db GROUND, ELECTRIC, SUPER_EFFECTIVE + db GROUND, GRASS, NOT_VERY_EFFECTIVE + db GROUND, BUG, NOT_VERY_EFFECTIVE + db GROUND, ROCK, SUPER_EFFECTIVE + db GROUND, POISON, SUPER_EFFECTIVE + db FLYING, ELECTRIC, NOT_VERY_EFFECTIVE + db FLYING, FIGHTING, SUPER_EFFECTIVE + db FLYING, BUG, SUPER_EFFECTIVE + db FLYING, GRASS, SUPER_EFFECTIVE + db FLYING, ROCK, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, FIGHTING, SUPER_EFFECTIVE + db PSYCHIC_TYPE, POISON, SUPER_EFFECTIVE + db BUG, FIRE, NOT_VERY_EFFECTIVE + db BUG, GRASS, SUPER_EFFECTIVE + db BUG, FIGHTING, NOT_VERY_EFFECTIVE + db BUG, FLYING, NOT_VERY_EFFECTIVE + db BUG, PSYCHIC_TYPE, SUPER_EFFECTIVE + db BUG, GHOST, NOT_VERY_EFFECTIVE + db BUG, POISON, SUPER_EFFECTIVE + db ROCK, FIRE, SUPER_EFFECTIVE + db ROCK, FIGHTING, NOT_VERY_EFFECTIVE + db ROCK, GROUND, NOT_VERY_EFFECTIVE + db ROCK, FLYING, SUPER_EFFECTIVE + db ROCK, BUG, SUPER_EFFECTIVE + db ROCK, ICE, SUPER_EFFECTIVE + db GHOST, NORMAL, NO_EFFECT + db GHOST, PSYCHIC_TYPE, NO_EFFECT + db FIRE, DRAGON, NOT_VERY_EFFECTIVE + db WATER, DRAGON, NOT_VERY_EFFECTIVE + db ELECTRIC, DRAGON, NOT_VERY_EFFECTIVE + db GRASS, DRAGON, NOT_VERY_EFFECTIVE + db ICE, DRAGON, SUPER_EFFECTIVE + db DRAGON, DRAGON, SUPER_EFFECTIVE + db -1 ; end -- cgit v1.3.1-sl0p From 45ed05decf330faab4503fe8fecadc54698c9724 Mon Sep 17 00:00:00 2001 From: Rangi Date: Tue, 7 Jul 2020 11:10:29 -0400 Subject: Use HIGH() and LOW() --- constants/audio_constants.asm | 8 ++--- constants/battle_constants.asm | 2 ++ engine/battle/core.asm | 44 ++++++++++++++-------------- engine/battle/effects.asm | 15 +++++----- engine/gfx/mon_icons.asm | 2 +- engine/gfx/oam_dma.asm | 4 +-- engine/gfx/sprite_oam.asm | 8 ++--- engine/items/inventory.asm | 4 +-- engine/link/cable_club.asm | 4 +-- engine/movie/oak_speech/init_player_data.asm | 4 +-- engine/movie/title.asm | 12 ++++---- engine/movie/trade.asm | 4 +-- engine/overworld/elevator.asm | 2 +- engine/overworld/movement.asm | 22 +++++++------- engine/overworld/sprite_collisions.asm | 4 +-- engine/slots/slot_machine.asm | 10 +++---- home.asm | 2 +- home/init.asm | 4 +-- home/move_mon.asm | 10 +++---- home/uncompress.asm | 4 +-- macros/scripts/audio.asm | 3 +- scripts/SafariZoneGate.asm | 4 +-- 22 files changed, 89 insertions(+), 87 deletions(-) (limited to 'constants') diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm index 38719f92..3a1a8f5b 100644 --- a/constants/audio_constants.asm +++ b/constants/audio_constants.asm @@ -25,10 +25,10 @@ const Ch8 ; 7 ; HW sound channel register base addresses -HW_CH1_BASE EQU (rNR10 % $100) -HW_CH2_BASE EQU ((rNR21 % $100) - 1) -HW_CH3_BASE EQU (rNR30 % $100) -HW_CH4_BASE EQU ((rNR41 % $100) - 1) +HW_CH1_BASE EQU LOW(rNR10) +HW_CH2_BASE EQU LOW(rNR21) - 1 +HW_CH3_BASE EQU LOW(rNR30) +HW_CH4_BASE EQU LOW(rNR41) - 1 ; HW sound channel enable bit masks HW_CH1_ENABLE_MASK EQU %00010001 diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index ba5d6c68..bdd03e8a 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -35,6 +35,8 @@ BRN EQU 4 FRZ EQU 5 PAR EQU 6 +MAX_STAT_VALUE EQU 999 + ; volatile statuses 1 STORING_ENERGY EQU 0 ; Bide THRASHING_ABOUT EQU 1 ; e.g. Thrash diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 4d999d2a..9a66265c 100755 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -4182,8 +4182,8 @@ GetDamageVarsForPlayerAttack: ; if the enemy has used Light Screen, double the enemy's special sla c rl b -; reflect and light screen boosts do not cap the stat at 999, so weird things will happen during stats scaling if -; a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen +; reflect and light screen boosts do not cap the stat at MAX_STAT_VALUE, so weird things will happen during stats scaling +; if a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen .specialAttackCritCheck ld hl, wBattleMonSpecial ld a, [wCriticalHitOrOHKO] @@ -4295,8 +4295,8 @@ GetDamageVarsForEnemyAttack: ; if the player has used Light Screen, double the player's special sla c rl b -; reflect and light screen boosts do not cap the stat at 999, so weird things will happen during stats scaling if -; a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen +; reflect and light screen boosts do not cap the stat at MAX_STAT_VALUE, so weird things will happen during stats scaling +; if a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen .specialAttackCritCheck ld hl, wEnemyMonSpecial ld a, [wCriticalHitOrOHKO] @@ -4508,14 +4508,14 @@ CalculateDamage: jr nz, .cap ldh a, [hQuotient + 2] - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) jr c, .dont_cap_2 - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1 + cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) + 1 jr nc, .cap ldh a, [hQuotient + 3] - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100 + cp LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) jr nc, .cap .dont_cap_2 @@ -4533,21 +4533,21 @@ CalculateDamage: jr c, .cap ld a, [hl] - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) jr c, .dont_cap_3 - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1 + cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) + 1 jr nc, .cap inc hl ld a, [hld] - cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100 + cp LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) jr c, .dont_cap_3 .cap - ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) / $100 + ld a, HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) ld [hli], a - ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) % $100 + ld a, LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) ld [hld], a .dont_cap_3 @@ -6526,14 +6526,14 @@ CalculateModifiedStat: call Divide pop hl ldh a, [hDividend + 3] - sub 999 % $100 + sub LOW(MAX_STAT_VALUE) ldh a, [hDividend + 2] - sbc 999 / $100 + sbc HIGH(MAX_STAT_VALUE) jp c, .storeNewStatValue -; cap the stat at 999 - ld a, 999 / $100 +; cap the stat at MAX_STAT_VALUE (999) + ld a, HIGH(MAX_STAT_VALUE) ldh [hDividend + 2], a - ld a, 999 % $100 + ld a, LOW(MAX_STAT_VALUE) ldh [hDividend + 3], a .storeNewStatValue ldh a, [hDividend + 2] @@ -6573,7 +6573,7 @@ ApplyBadgeStatBoosts: ret ; multiply stat at hl by 1.125 -; cap stat at 999 +; cap stat at MAX_STAT_VALUE .applyBoostToStat ld a, [hli] ld d, a @@ -6591,13 +6591,13 @@ ApplyBadgeStatBoosts: adc d ld [hli], a ld a, [hld] - sub 999 % $100 + sub LOW(MAX_STAT_VALUE) ld a, [hl] - sbc 999 / $100 + sbc HIGH(MAX_STAT_VALUE) ret c - ld a, 999 / $100 + ld a, HIGH(MAX_STAT_VALUE) ld [hli], a - ld a, 999 % $100 + ld a, LOW(MAX_STAT_VALUE) ld [hld], a ret diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index fe050937..441d6c1c 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -399,11 +399,12 @@ StatModifierUpEffect: inc d ; de = unmodified (original) stat .checkIf999 pop bc + ; check if stat is already 999 ld a, [hld] - sub 999 % $100 ; check if stat is already 999 + sub LOW(MAX_STAT_VALUE) jr nz, .recalculateStat ld a, [hl] - sbc 999 / $100 + sbc HIGH(MAX_STAT_VALUE) jp z, RestoreOriginalStatModifier .recalculateStat ; recalculate affected stat ; paralysis and burn penalties, as well as badge boosts are ignored @@ -431,15 +432,15 @@ StatModifierUpEffect: ld b, $4 call Divide pop hl -; cap at 999 +; cap at MAX_STAT_VALUE (999) ldh a, [hProduct + 3] - sub 999 % $100 + sub LOW(MAX_STAT_VALUE) ldh a, [hProduct + 2] - sbc 999 / $100 + sbc HIGH(MAX_STAT_VALUE) jp c, UpdateStat - ld a, 999 / $100 + ld a, HIGH(MAX_STAT_VALUE) ldh [hMultiplicand + 1], a - ld a, 999 % $100 + ld a, LOW(MAX_STAT_VALUE) ldh [hMultiplicand + 2], a UpdateStat: diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm index 19008c05..253fca35 100755 --- a/engine/gfx/mon_icons.asm +++ b/engine/gfx/mon_icons.asm @@ -236,7 +236,7 @@ WriteMonPartySpriteOAM: ; make a copy at wMonPartySpritesSavedOAM. push af ld c, $10 - ld h, wOAMBuffer / $100 + ld h, HIGH(wOAMBuffer) ldh a, [hPartyMonIndex] swap a ld l, a diff --git a/engine/gfx/oam_dma.asm b/engine/gfx/oam_dma.asm index d8d8839a..84bb4b5c 100644 --- a/engine/gfx/oam_dma.asm +++ b/engine/gfx/oam_dma.asm @@ -1,7 +1,7 @@ WriteDMACodeToHRAM:: ; Since no other memory is available during OAM DMA, ; DMARoutine is copied to HRAM and executed there. - ld c, hDMARoutine % $100 + ld c, LOW(hDMARoutine) ld b, DMARoutineEnd - DMARoutine ld hl, DMARoutine .copy @@ -14,7 +14,7 @@ WriteDMACodeToHRAM:: DMARoutine: ; initiate DMA - ld a, wOAMBuffer / $100 + ld a, HIGH(wOAMBuffer) ldh [rDMA], a ; wait for DMA to finish diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm index 1a96286d..7e9bf739 100644 --- a/engine/gfx/sprite_oam.asm +++ b/engine/gfx/sprite_oam.asm @@ -18,7 +18,7 @@ PrepareOAMData:: .spriteLoop ldh [hSpriteOffset2], a - ld d, wSpriteStateData1 / $100 + ld d, HIGH(wSpriteStateData1) ldh a, [hSpriteOffset2] ld e, a ld a, [de] ; c1x0 @@ -79,7 +79,7 @@ PrepareOAMData:: ldh a, [hOAMBufferOffset] ld e, a - ld d, wOAMBuffer / $100 + ld d, HIGH(wOAMBuffer) .tileLoop ldh a, [hSpriteScreenY] ; temp for sprite Y position @@ -141,13 +141,13 @@ PrepareOAMData:: .nextSprite ldh a, [hSpriteOffset2] add $10 - cp $100 % $100 + cp LOW($100) jp nz, .spriteLoop ; Clear unused OAM. ldh a, [hOAMBufferOffset] ld l, a - ld h, wOAMBuffer / $100 + ld h, HIGH(wOAMBuffer) ld de, $4 ld b, $a0 ld a, [wd736] diff --git a/engine/items/inventory.asm b/engine/items/inventory.asm index 7ce61cb9..bf433175 100644 --- a/engine/items/inventory.asm +++ b/engine/items/inventory.asm @@ -12,10 +12,10 @@ AddItemToInventory_:: push hl push hl ld d, PC_ITEM_CAPACITY ; how many items the PC can hold - ld a, wNumBagItems & $FF + ld a, LOW(wNumBagItems) cp l jr nz, .checkIfInventoryFull - ld a, wNumBagItems >> 8 + ld a, HIGH(wNumBagItems) cp h jr nz, .checkIfInventoryFull ; if the destination is the bag diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index 03e1c50a..dd93ebba 100755 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -255,9 +255,9 @@ CableClub_DoBattleOrTradeAgain: ld hl, wEnemyMons + (SERIAL_PREAMBLE_BYTE - 1) dec c jr nz, .unpatchEnemyMonsLoop - ld a, wEnemyMonOT % $100 + ld a, LOW(wEnemyMonOT) ld [wUnusedCF8D], a - ld a, wEnemyMonOT / $100 + ld a, HIGH(wEnemyMonOT) ld [wUnusedCF8D + 1], a xor a ld [wTradeCenterPointerTableIndex], a diff --git a/engine/movie/oak_speech/init_player_data.asm b/engine/movie/oak_speech/init_player_data.asm index bd181bbd..53ca24f3 100644 --- a/engine/movie/oak_speech/init_player_data.asm +++ b/engine/movie/oak_speech/init_player_data.asm @@ -23,9 +23,9 @@ InitPlayerData2: START_MONEY EQU $3000 ld hl, wPlayerMoney + 1 - ld a, START_MONEY / $100 + ld a, HIGH(START_MONEY) ld [hld], a - xor a + xor a ; LOW(START_MONEY) ld [hli], a inc hl ld [hl], a diff --git a/engine/movie/title.asm b/engine/movie/title.asm index efdf2f07..00e639ae 100755 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -126,13 +126,13 @@ ENDC ld [wTitleMonSpecies], a call LoadTitleMonSprite - ld a, (vBGMap0 + $300) / $100 + ld a, HIGH(vBGMap0 + $300) call TitleScreenCopyTileMapToVRAM call SaveScreenTilesToBuffer1 ld a, $40 ldh [hWY], a call LoadScreenTilesFromBuffer2 - ld a, vBGMap0 / $100 + ld a, HIGH(vBGMap0) call TitleScreenCopyTileMapToVRAM ld b, SET_PAL_TITLE_SCREEN call RunPaletteCommand @@ -205,7 +205,7 @@ ENDC and a jr nz, .scrollTitleScreenGameVersionLoop - ld a, vBGMap1 / $100 + ld a, HIGH(vBGMap1) call TitleScreenCopyTileMapToVRAM call LoadScreenTilesFromBuffer2 call PrintGameVersionOnTitleScreen @@ -241,9 +241,9 @@ ENDC inc a ldh [hAutoBGTransferEnabled], a call ClearScreen - ld a, vBGMap0 / $100 + ld a, HIGH(vBGMap0) call TitleScreenCopyTileMapToVRAM - ld a, vBGMap1 / $100 + ld a, HIGH(vBGMap1) call TitleScreenCopyTileMapToVRAM call Delay3 call LoadGBPal @@ -258,7 +258,7 @@ ENDC farjp DoClearSaveDialogue TitleScreenPickNewMon: - ld a, vBGMap0 / $100 + ld a, HIGH(vBGMap0) call TitleScreenCopyTileMapToVRAM .loop diff --git a/engine/movie/trade.asm b/engine/movie/trade.asm index 518742aa..6aac7e23 100755 --- a/engine/movie/trade.asm +++ b/engine/movie/trade.asm @@ -237,7 +237,7 @@ Trade_ShowPlayerMon: ld c, 10 call TextBoxBorder call Trade_PrintPlayerMonInfoText - ld b, vBGMap0 / $100 + ld b, HIGH(vBGMap0) call CopyScreenTileBufferToVRAM call ClearScreen ld a, [wTradedPlayerMonSpecies] @@ -266,7 +266,7 @@ Trade_ShowPlayerMon: Trade_DrawOpenEndOfLinkCable: call Trade_ClearTileMap - ld b, vBGMap0 / $100 + ld b, HIGH(vBGMap0) call CopyScreenTileBufferToVRAM ld b, SET_PAL_GENERIC call RunPaletteCommand diff --git a/engine/overworld/elevator.asm b/engine/overworld/elevator.asm index 7a6aca85..fa404602 100755 --- a/engine/overworld/elevator.asm +++ b/engine/overworld/elevator.asm @@ -56,7 +56,7 @@ ShakeElevatorRedrawRow: add hl, de ld a, h and $3 - or vBGMap0 / $100 + or HIGH(vBGMap0) ld d, a ld a, l pop hl diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index ac7e1b46..a20b3174 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -23,7 +23,7 @@ UpdatePlayerSprite: ret .lowerLeftTileIsMapTile call DetectCollisionBetweenSprites - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ld a, [wWalkCounter] and a jr nz, .moving @@ -395,7 +395,7 @@ UpdateSpriteMovementDelay: ld l, a ld [hl], $1 ; c1x1 = 1 (mark as ready to move) notYetMoving: - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1 ld l, a @@ -450,7 +450,7 @@ InitializeSpriteStatus: ; calculates the sprite's screen position form its map position and the player position InitializeSpriteScreenPosition: - ld h, wSpriteStateData2 / $100 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData2MapY - wSpritePlayerStateData2 ld l, a @@ -478,7 +478,7 @@ CheckSpriteAvailability: ldh a, [hIsHiddenMissableObject] and a jp nz, .spriteInvisible - ld h, wSpriteStateData2 / $100 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 ld l, a @@ -526,7 +526,7 @@ CheckSpriteAvailability: cp d jr c, .spriteVisible ; standing on tile with ID >=MAP_TILESET_SIZE (top right tile) .spriteInvisible - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 ld l, a @@ -580,7 +580,7 @@ UpdateSpriteImage: ; e: X movement delta (-1, 0 or 1) ; set carry on failure, clears carry on success CanWalkOntoTile: - ld h, wSpriteStateData2 / $100 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 ld l, a @@ -608,7 +608,7 @@ CanWalkOntoTile: ld a, [hl] ; $c2x6 (movement byte 1) inc a jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld l, a @@ -627,14 +627,14 @@ CanWalkOntoTile: call DetectCollisionBetweenSprites pop bc pop de - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add $c ld l, a ld a, [hl] ; c1xc (directions in which sprite collision would occur) and b ; check against chosen direction (1,2,4 or 8) jr nz, .impassable ; collision between sprites, don't go there - ld h, wSpriteStateData2 / $100 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData2YDisplacement - wSpritePlayerStateData2 ld l, a @@ -665,7 +665,7 @@ CanWalkOntoTile: and a ; clear carry (marking success) ret .impassable - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] inc a ld l, a @@ -691,7 +691,7 @@ CanWalkOntoTile: ; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to ; hl: output pointer GetTileSpriteStandsOn: - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 ld l, a diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm index e6c415ab..6f8e3c2c 100644 --- a/engine/overworld/sprite_collisions.asm +++ b/engine/overworld/sprite_collisions.asm @@ -53,9 +53,9 @@ UpdateNonPlayerSprite: DetectCollisionBetweenSprites: nop - ld h, wSpriteStateData1 / $100 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] - add wSpriteStateData1 % $100 + add LOW(wSpriteStateData1) ld l, a ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused) diff --git a/engine/slots/slot_machine.asm b/engine/slots/slot_machine.asm index b6eda6d1..64c14997 100755 --- a/engine/slots/slot_machine.asm +++ b/engine/slots/slot_machine.asm @@ -294,7 +294,7 @@ SlotMachine_StopWheel1Early: ; Stop early if the middle symbol is not a cherry. inc hl ld a, [hl] - cp SLOTSCHERRY >> 8 + cp HIGH(SLOTSCHERRY) jr nz, .stopWheel ret ; It looks like this was intended to make the wheel stop when a 7 symbol was @@ -303,7 +303,7 @@ SlotMachine_StopWheel1Early: ld c, $3 .loop ld a, [hli] - cp SLOTS7 >> 8 + cp HIGH(SLOTS7) jr c, .stopWheel ; condition never true dec c jr nz, .loop @@ -330,7 +330,7 @@ SlotMachine_StopWheel2Early: .sevenAndBarMode call SlotMachine_FindWheel1Wheel2Matches ld a, [de] - cp (SLOTSBAR >> 8) + 1 + cp HIGH(SLOTSBAR) + 1 ret nc .stopWheel xor a @@ -427,7 +427,7 @@ SlotMachine_CheckForMatches: jr nz, .acceptMatch ; if 7/bar matches aren't enabled and the match was a 7/bar symbol, roll wheel ld a, [hl] - cp (SLOTSBAR >> 8) + 1 + cp HIGH(SLOTSBAR) + 1 jr c, .rollWheel3DownByOneSymbol .acceptMatch ld a, [hl] @@ -702,7 +702,7 @@ SlotMachine_PayCoinsToPlayer: .skip1 ld [wAnimCounter], a ld a, [wSlotMachineWinningSymbol] - cp (SLOTSBAR >> 8) + 1 + cp HIGH(SLOTSBAR) + 1 ld c, 8 jr nc, .skip2 srl c ; c = 4 (make the the coins transfer faster if the symbol was 7 or bar) diff --git a/home.asm b/home.asm index 62594b43..3e465cdf 100644 --- a/home.asm +++ b/home.asm @@ -1242,7 +1242,7 @@ StringCmp:: ; c = X coordinate of upper left corner of sprite ; de = base address of 4 tile number and attribute pairs WriteOAMBlock:: - ld h, wOAMBuffer / $100 + ld h, HIGH(wOAMBuffer) swap a ; multiply by 16 ld l, a call .writeOneEntry ; upper left diff --git a/home/init.asm b/home/init.asm index f18216ff..e3f5fdd4 100644 --- a/home/init.asm +++ b/home/init.asm @@ -82,9 +82,9 @@ rLCDC_DEFAULT EQU %11100011 ld a, CONNECTION_NOT_ESTABLISHED ldh [hSerialConnectionStatus], a - ld h, vBGMap0 / $100 + ld h, HIGH(vBGMap0) call ClearBgMap - ld h, vBGMap1 / $100 + ld h, HIGH(vBGMap1) call ClearBgMap ld a, rLCDC_DEFAULT diff --git a/home/move_mon.asm b/home/move_mon.asm index 9fe7b067..cf7213b1 100644 --- a/home/move_mon.asm +++ b/home/move_mon.asm @@ -197,17 +197,17 @@ CalcStat:: ldh [hMultiplicand+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level + 10 .noCarry4 ldh a, [hMultiplicand+1] ; check for overflow (>999) - cp 999 / $100 + 1 + cp HIGH(MAX_STAT_VALUE) + 1 jr nc, .overflow - cp 999 / $100 + cp HIGH(MAX_STAT_VALUE) jr c, .noOverflow ldh a, [hMultiplicand+2] - cp 999 % $100 + 1 + cp LOW(MAX_STAT_VALUE) + 1 jr c, .noOverflow .overflow - ld a, 999 / $100 ; overflow: cap at 999 + ld a, HIGH(MAX_STAT_VALUE) ; overflow: cap at 999 ldh [hMultiplicand+1], a - ld a, 999 % $100 + ld a, LOW(MAX_STAT_VALUE) ldh [hMultiplicand+2], a .noOverflow pop bc diff --git a/home/uncompress.asm b/home/uncompress.asm index 69d94cb0..9d08aa60 100644 --- a/home/uncompress.asm +++ b/home/uncompress.asm @@ -20,8 +20,8 @@ UncompressSpriteData:: ; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop _UncompressSpriteData:: ld hl, sSpriteBuffer1 - ld c, (2*SPRITEBUFFERSIZE) % $100 - ld b, (2*SPRITEBUFFERSIZE) / $100 + ld c, LOW(2 * SPRITEBUFFERSIZE) + ld b, HIGH(2 * SPRITEBUFFERSIZE) xor a call FillMemory ; clear sprite buffer 1 and 2 ld a, $1 diff --git a/macros/scripts/audio.asm b/macros/scripts/audio.asm index 8a250c63..4f4d084c 100755 --- a/macros/scripts/audio.asm +++ b/macros/scripts/audio.asm @@ -141,8 +141,7 @@ ENDM ; stored in big endian tempo: MACRO db $ED - db \1 / $100 - db \1 % $100 + db HIGH(\1), LOW(\1) ENDM ; arguments: left output enable mask, right output enable mask diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm index eb49ba8d..a15a5630 100755 --- a/scripts/SafariZoneGate.asm +++ b/scripts/SafariZoneGate.asm @@ -182,9 +182,9 @@ SafariZoneGate_TextPointers: call PrintText ld a, 30 ld [wNumSafariBalls], a - ld a, 502 / $100 + ld a, HIGH(502) ld [wSafariSteps], a - ld a, 502 % $100 + ld a, LOW(502) ld [wSafariSteps + 1], a ld a, D_UP ld c, 3 -- cgit v1.3.1-sl0p From 1e593d8f8cd07e1072992dc1fc962b6de7508aad Mon Sep 17 00:00:00 2001 From: Rangi Date: Tue, 7 Jul 2020 11:57:03 -0400 Subject: Remove c1x*/c2x* comments, use struct offset constants --- constants/map_object_constants.asm | 40 +++++++ engine/gfx/sprite_oam.asm | 16 +-- engine/menus/display_text_id_init.asm | 3 +- engine/overworld/map_sprites.asm | 52 +++++---- engine/overworld/movement.asm | 199 +++++++++++++++++---------------- engine/overworld/pathfinding.asm | 2 +- engine/overworld/sprite_collisions.asm | 72 ++++++------ engine/overworld/trainer_sight.asm | 64 +++++------ engine/overworld/turn_sprite.asm | 16 +-- home/overworld.asm | 16 +-- macros/wram.asm | 3 +- wram.asm | 68 +++++------ 12 files changed, 304 insertions(+), 247 deletions(-) (limited to 'constants') diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm index f5fc952b..4c44e946 100644 --- a/constants/map_object_constants.asm +++ b/constants/map_object_constants.asm @@ -1,3 +1,43 @@ +; spritestatedata1 struct members (see macros/wram.asm) + const_def + const SPRITESTATEDATA1_PICTUREID ; 0 + const SPRITESTATEDATA1_MOVEMENTSTATUS ; 1 + const SPRITESTATEDATA1_IMAGEINDEX ; 2 + const SPRITESTATEDATA1_YSTEPVECTOR ; 3 + const SPRITESTATEDATA1_YPIXELS ; 4 + const SPRITESTATEDATA1_XSTEPVECTOR ; 5 + const SPRITESTATEDATA1_XPIXELS ; 6 + const SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER ; 7 + const SPRITESTATEDATA1_ANIMFRAMECOUNTER ; 8 + const SPRITESTATEDATA1_FACINGDIRECTION ; 9 + const SPRITESTATEDATA1_YADJUSTED ; a + const SPRITESTATEDATA1_XADJUSTED ; b + const SPRITESTATEDATA1_COLLISIONDATA ; c + const SPRITESTATEDATA1_0D ; d + const SPRITESTATEDATA1_0E ; e + const SPRITESTATEDATA1_0F ; f +SPRITESTATEDATA1_LENGTH EQU const_value + +; spritestatedata2 struct members (see macros/wram.asm) + const_def + const SPRITESTATEDATA2_WALKANIMATIONCOUNTER ; 0 + const SPRITESTATEDATA2_01 ; 1 + const SPRITESTATEDATA2_YDISPLACEMENT ; 2 + const SPRITESTATEDATA2_XDISPLACEMENT ; 3 + const SPRITESTATEDATA2_MAPY ; 4 + const SPRITESTATEDATA2_MAPX ; 5 + const SPRITESTATEDATA2_MOVEMENTBYTE1 ; 6 + const SPRITESTATEDATA2_GRASSPRIORITY ; 7 + const SPRITESTATEDATA2_MOVEMENTDELAY ; 8 + const SPRITESTATEDATA2_09 ; 9 + const SPRITESTATEDATA2_0A ; a + const SPRITESTATEDATA2_0B ; b + const SPRITESTATEDATA2_0C ; c + const SPRITESTATEDATA2_PICTUREID ; d + const SPRITESTATEDATA2_IMAGEBASEOFFSET ; e + const SPRITESTATEDATA2_0F ; f +SPRITESTATEDATA2_LENGTH EQU const_value + ; different kinds of people events ITEM EQU $80 TRAINER EQU $40 diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm index 7e9bf739..b3c07ecd 100644 --- a/engine/gfx/sprite_oam.asm +++ b/engine/gfx/sprite_oam.asm @@ -21,13 +21,13 @@ PrepareOAMData:: ld d, HIGH(wSpriteStateData1) ldh a, [hSpriteOffset2] ld e, a - ld a, [de] ; c1x0 + ld a, [de] ; [x#SPRITESTATEDATA1_PICTUREID] and a jp z, .nextSprite inc e inc e - ld a, [de] ; c1x2 (facing/anim) + ld a, [de] ; [x#SPRITESTATEDATA1_IMAGEINDEX] ld [wd5cd], a cp $ff ; off-screen (don't draw) jr nz, .visible @@ -56,7 +56,7 @@ PrepareOAMData:: ld a, e add $5 ld e, a - ld a, [de] ; c2x7 + ld a, [de] ; [x#SPRITESTATEDATA2_GRASSPRIORITY] and $80 ldh [hSpritePriority], a ; temp store sprite priority pop de @@ -98,7 +98,7 @@ PrepareOAMData:: push bc ld b, a - ld a, [wd5cd] ; temp copy of c1x2 + ld a, [wd5cd] ; temp copy of [x#SPRITESTATEDATA1_IMAGEINDEX] swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs) and $f @@ -169,11 +169,11 @@ PrepareOAMData:: GetSpriteScreenXY: inc e inc e - ld a, [de] ; c1x4 + ld a, [de] ; [x#SPRITESTATEDATA1_YPIXELS] ldh [hSpriteScreenY], a inc e inc e - ld a, [de] ; c1x6 + ld a, [de] ; [x#SPRITESTATEDATA1_XPIXELS] ldh [hSpriteScreenX], a ld a, 4 add e @@ -181,9 +181,9 @@ GetSpriteScreenXY: ldh a, [hSpriteScreenY] add 4 and $f0 - ld [de], a ; c1xa (y) + ld [de], a ; [x#SPRITESTATEDATA1_YADJUSTED] inc e ldh a, [hSpriteScreenX] and $f0 - ld [de], a ; c1xb (x) + ld [de], a ; [x#SPRITESTATEDATA1_XADJUSTED] ret diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index c030e7c9..c147eaf6 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -38,7 +38,8 @@ DisplayTextIDInit:: jr nz, .skipMovingSprites call UpdateSprites .skipMovingSprites -; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite +; loop to copy [x#SPRITESTATEDATA1_FACINGDIRECTION] to [x#SPRITESTATEDATA2_09] +; for each sprite from x=01 to x=15 ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl, wSprite01StateData1FacingDirection diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index 26a8f1bb..4a68169a 100755 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -4,20 +4,21 @@ ; This is also called after displaying text because loading ; text tile patterns overwrites half of the sprite tile pattern data. ; Note on notation: -; $C1X* and $C2X* are used to denote wSpriteStateData1-wSpriteStateData1 + $ff and wSpriteStateData2 + $00-wSpriteStateData2 + $ff sprite slot -; fields, respectively, within loops. The X is the loop index. -; If there is an inner loop, Y is the inner loop index, i.e. $C1Y* and $C2Y* -; denote fields of the sprite slots iterated over in the inner loop. +; x#SPRITESTATEDATA1_* and x#SPRITESTATEDATA2_* are used to denote wSpriteStateData1 and +; wSpriteStateData2 sprite slot, respectively, within loops. The X is the loop index. +; If there is an inner loop, Y is the inner loop index, i.e. y#SPRITESTATEDATA1_* and +; y#SPRITESTATEDATA2_* denote fields of the sprite slots iterated over in the inner loop. InitMapSprites:: call InitOutsideMapSprites ret c ; return if the map is an outside map (already handled by above call) ; if the map is an inside map (i.e. mapID >= $25) ld hl, wSpritePlayerStateData1PictureID ld de, wSpritePlayerStateData2PictureID -; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns. +; Loop to copy picture IDs from [x#SPRITESTATEDATA1_PICTUREID] +; to [x#SPRITESTATEDATA2_PICTUREID] for LoadMapSpriteTilePatterns. .copyPictureIDLoop - ld a, [hl] ; $C1X0 (picture ID) - ld [de], a ; $C2XD + ld a, [hl] ; a = [x#SPRITESTATEDATA1_PICTUREID] + ld [de], a ; [x#SPRITESTATEDATA2_PICTUREID] = a ld a, $10 add e ld e, a @@ -40,9 +41,11 @@ LoadMapSpriteTilePatterns: ld hl, wSpritePlayerStateData2PictureID xor a ldh [hFourTileSpriteCount], a -.copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE - ld a, [hli] ; $C2XD (sprite picture ID) - ld [hld], a ; $C2XE +; Loop to copy picture IDs from [x#SPRITESTATEDATA2_PICTUREID] +; to [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]. +.copyPictureIDLoop + ld a, [hli] ; a = [x#SPRITESTATEDATA2_PICTUREID] + ld [hld], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a ld a, l add $10 ld l, a @@ -81,7 +84,7 @@ LoadMapSpriteTilePatterns: ld a, l cp e ; reached current slot? jr z, .foundNextVRAMSlot - ld a, [de] ; $C2YE (VRAM slot) + ld a, [de] ; y#SPRITESTATEDATA2_IMAGEBASEOFFSET cp 11 ; is it one of the first 10 slots? jr nc, .findNextVRAMSlotLoop cp b ; compare the slot being checked to the current max @@ -93,7 +96,7 @@ LoadMapSpriteTilePatterns: inc b ; increment previous max value to get next VRAM tile pattern slot ld a, b ; a = next VRAM tile pattern slot push af - ld a, [hl] ; $C2XE (sprite picture ID) + ld a, [hl] ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] ld b, a ; b = current sprite picture ID cp SPRITE_BALL ; is it a 4-tile sprite? jr c, .notFourTileSprite @@ -104,7 +107,7 @@ LoadMapSpriteTilePatterns: .notFourTileSprite pop af .storeVRAMSlot - ld [hl], a ; store VRAM slot at $C2XE + ld [hl], a ; store VRAM slot at [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] ldh [hVRAMSlot], a ; used to determine if it's 4-tile sprite later ld a, b ; a = current sprite picture ID dec a @@ -207,8 +210,8 @@ LoadMapSpriteTilePatterns: jr .nextSpriteSlot .alreadyLoaded ; if the current picture ID has already had its tile patterns loaded inc de - ld a, [de] ; a = VRAM slot for the current picture ID (from $C2YE) - ld [hl], a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE) + ld a, [de] ; a = [y#SPRITESTATEDATA2_IMAGEBASEOFFSET] + ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a .nextSpriteSlot ld a, l add $10 @@ -217,10 +220,11 @@ LoadMapSpriteTilePatterns: jp nz, .loadTilePatternLoop ld hl, wSpritePlayerStateData2PictureID ld b, $10 -; the pictures ID's stored at $C2XD are no longer needed, so zero them +; the pictures IDs stored at [x#SPRITESTATEDATA2_PICTUREID] are no longer needed, +; so zero them .zeroStoredPictureIDLoop xor a - ld [hl], a ; $C2XD + ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID] ld a, $10 add l ld l, a @@ -292,15 +296,15 @@ InitOutsideMapSprites: ld [hl], a ld bc, wSpriteSet ; Load the sprite set into RAM. -; This loop also fills $C2XD (sprite picture ID) where X is from $0 to $A -; with picture ID's. This is done so that LoadMapSpriteTilePatterns will +; This loop also fills [x#SPRITESTATEDATA2_PICTUREID] where X is from $0 to $A +; with picture IDs. This is done so that LoadMapSpriteTilePatterns will ; load tile patterns for all sprite pictures in the sprite set. .loadSpriteSetLoop ld a, $10 add l ld l, a ld a, [de] ; sprite picture ID from sprite set - ld [hl], a ; $C2XD (sprite picture ID) + ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID] ld [bc], a inc de inc bc @@ -313,7 +317,7 @@ InitOutsideMapSprites: add l ld l, a xor a - ld [hl], a ; $C2XD (sprite picture ID) + ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID] dec b jr nz, .zeroRemainingSlotsLoop ld a, [wNumSprites] @@ -330,7 +334,7 @@ InitOutsideMapSprites: ; for the current map. So, they are not needed and are zeroed by this loop. .zeroVRAMSlotsLoop xor a - ld [hl], a ; $C2XE (VRAM slot) + ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] ld a, $10 add l ld l, a @@ -347,7 +351,7 @@ InitOutsideMapSprites: ; VRAM tile pattern slot. .storeVRAMSlotsLoop ld c, 0 - ld a, [hl] ; $C1X0 (picture ID) (zero if sprite slot is not used) + ld a, [hl] ; [x#SPRITESTATEDATA1_PICTUREID] (zero if sprite slot is not used) and a ; is the sprite slot used? jr z, .skipGettingPictureIndex ; if the sprite slot is not used ld b, a ; b = picture ID @@ -367,7 +371,7 @@ InitOutsideMapSprites: add l ld l, a ld a, c ; a = VRAM slot (zero if sprite slot is not used) - ld [hl], a ; $C2XE (VRAM slot) + ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] pop hl ld a, $10 add l diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm index a2930993..58481613 100644 --- a/engine/overworld/movement.asm +++ b/engine/overworld/movement.asm @@ -121,20 +121,20 @@ UpdateNPCSprite: ld l, a ld a, [hl] ; read movement byte 2 ld [wCurSpriteMovement2], a - ld h, $c1 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] ld l, a inc l - ld a, [hl] ; c1x1 + ld a, [hl] ; x#SPRITESTATEDATA1_MOVEMENTSTATUS and a jp z, InitializeSpriteStatus call CheckSpriteAvailability ret c ; if sprite is invisible, on tile >=MAP_TILESET_SIZE, in grass or player is currently walking - ld h, $c1 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] ld l, a inc l - ld a, [hl] ; c1x1 + ld a, [hl] ; x#SPRITESTATEDATA1_MOVEMENTSTATUS bit 7, a ; is the face player flag set? jp nz, MakeNPCFacePlayer ld b, a @@ -143,9 +143,9 @@ UpdateNPCSprite: jp nz, notYetMoving ld a, b cp $2 - jp z, UpdateSpriteMovementDelay ; c1x1 == 2 + jp z, UpdateSpriteMovementDelay ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 2 cp $3 - jp z, UpdateSpriteInWalkingAnimation ; c1x1 == 3 + jp z, UpdateSpriteInWalkingAnimation ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 3 ld a, [wWalkCounter] and a ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability) @@ -154,7 +154,7 @@ UpdateNPCSprite: ldh a, [hCurrentSpriteOffset] add $6 ld l, a - ld a, [hl] ; c2x6: movement byte 1 + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 inc a jr z, .randomMovement ; value $FF inc a @@ -263,18 +263,18 @@ ChangeFacingDirection: ; set carry on failure, clears carry on success TryWalking: push hl - ld h, $c1 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add $9 ld l, a - ld [hl], c ; c1x9 (update facing direction) + ld [hl], c ; x#SPRITESTATEDATA1_FACINGDIRECTION ldh a, [hCurrentSpriteOffset] add $3 ld l, a - ld [hl], d ; c1x3 (update Y movement delta) + ld [hl], d ; x#SPRITESTATEDATA1_YSTEPVECTOR inc l inc l - ld [hl], e ; c1x5 (update X movement delta) + ld [hl], e ; x#SPRITESTATEDATA1_XSTEPVECTOR pop hl push de ld c, [hl] ; read tile to walk onto @@ -285,18 +285,18 @@ TryWalking: ldh a, [hCurrentSpriteOffset] add $4 ld l, a - ld a, [hl] ; c2x4: Y position + ld a, [hl] ; x#SPRITESTATEDATA2_MAPY add d ld [hli], a ; update Y position - ld a, [hl] ; c2x5: X position + ld a, [hl] ; x#SPRITESTATEDATA2_MAPX add e ld [hl], a ; update X position ldh a, [hCurrentSpriteOffset] ld l, a - ld [hl], $10 ; c2x0=16: walk animation counter + ld [hl], $10 ; [x#SPRITESTATEDATA2_WALKANIMATIONCOUNTER] = 16 dec h inc l - ld [hl], $3 ; c1x1: set movement status to walking + ld [hl], $3 ; x#SPRITESTATEDATA1_MOVEMENTSTATUS jp UpdateSpriteImage ; update the walking animation parameters for a sprite that is currently walking @@ -304,15 +304,15 @@ UpdateSpriteInWalkingAnimation: ldh a, [hCurrentSpriteOffset] add $7 ld l, a - ld a, [hl] ; c1x7 (counter until next walk animation frame) + ld a, [hl] ; x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER inc a - ld [hl], a ; c1x7 += 1 + ld [hl], a ; [x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER]++ cp $4 jr nz, .noNextAnimationFrame xor a - ld [hl], a ; c1x7 = 0 + ld [hl], a ; [x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER] = 0 inc l - ld a, [hl] ; c1x8 (walk animation frame) + ld a, [hl] ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER inc a and $3 ld [hl], a ; advance to next animation frame every 4 ticks (16 ticks total for one step) @@ -320,34 +320,34 @@ UpdateSpriteInWalkingAnimation: ldh a, [hCurrentSpriteOffset] add $3 ld l, a - ld a, [hli] ; c1x3 (movement Y delta) + ld a, [hli] ; x#SPRITESTATEDATA1_YSTEPVECTOR ld b, a - ld a, [hl] ; c1x4 (screen Y position) + ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS add b - ld [hli], a ; update screen Y position - ld a, [hli] ; c1x5 (movement X delta) + ld [hli], a ; update [x#SPRITESTATEDATA1_YPIXELS] + ld a, [hli] ; x#SPRITESTATEDATA1_XSTEPVECTOR ld b, a - ld a, [hl] ; c1x6 (screen X position) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS add b - ld [hl], a ; update screen X position + ld [hl], a ; update [x#SPRITESTATEDATA1_XPIXELS] ldh a, [hCurrentSpriteOffset] ld l, a inc h - ld a, [hl] ; c2x0 (walk animation counter) + ld a, [hl] ; x#SPRITESTATEDATA2_WALKANIMATIONCOUNTER dec a ld [hl], a ; update walk animation counter ret nz ld a, $6 ; walking finished, update state add l ld l, a - ld a, [hl] ; c2x6 (movement byte 1) + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 cp $fe jr nc, .initNextMovementCounter ; values $fe and $ff ldh a, [hCurrentSpriteOffset] inc a ld l, a dec h - ld [hl], $1 ; c1x1 = 1 (movement status ready) + ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (movement status ready) ret .initNextMovementCounter call Random @@ -356,29 +356,31 @@ UpdateSpriteInWalkingAnimation: ld l, a ldh a, [hRandomAdd] and $7f - ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] - dec h ; note that value 0 actually makes the delay $100 (bug?) + ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY: + ; set next movement delay to a random value in [0,$7f] + ; note that value 0 actually makes the delay $100 (bug?) + dec h ; HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] inc a ld l, a - ld [hl], $2 ; c1x1 = 2 (movement status) + ld [hl], $2 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 2 (movement status) inc l inc l xor a - ld b, [hl] ; c1x3 (movement Y delta) - ld [hli], a ; reset movement Y delta + ld b, [hl] ; x#SPRITESTATEDATA1_YSTEPVECTOR + ld [hli], a ; [x#SPRITESTATEDATA1_YSTEPVECTOR] = 0 inc l - ld c, [hl] ; c1x5 (movement X delta) - ld [hl], a ; reset movement X delta + ld c, [hl] ; x#SPRITESTATEDATA1_XSTEPVECTOR + ld [hl], a ; [x#SPRITESTATEDATA1_XSTEPVECTOR] = 0 ret -; update delay value (c2x8) for sprites in the delayed state (c1x1) +; update [x#SPRITESTATEDATA2_MOVEMENTDELAY] for sprites in the delayed state (x#SPRITESTATEDATA1_MOVEMENTSTATUS) UpdateSpriteMovementDelay: - ld h, $c2 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add $6 ld l, a - ld a, [hl] ; c2x6: movement byte 1 + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 inc l inc l cp $fe @@ -386,20 +388,20 @@ UpdateSpriteMovementDelay: ld [hl], $0 jr .moving .tickMoveCounter - dec [hl] ; c2x8: frame counter until next movement + dec [hl] ; x#SPRITESTATEDATA2_MOVEMENTDELAY jr nz, notYetMoving .moving dec h ldh a, [hCurrentSpriteOffset] inc a ld l, a - ld [hl], $1 ; c1x1 = 1 (mark as ready to move) + ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (mark as ready to move) notYetMoving: ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1 + add SPRITESTATEDATA1_ANIMFRAMECOUNTER ld l, a - ld [hl], $0 ; c1x8 = 0 (walk animation frame) + ld [hl], $0 ; [x#SPRITESTATEDATA1_ANIMFRAMECOUNTER] = 0 (walk animation frame) jp UpdateSpriteImage MakeNPCFacePlayer: @@ -432,44 +434,44 @@ MakeNPCFacePlayer: ldh a, [hCurrentSpriteOffset] add $9 ld l, a - ld [hl], c ; c1x9: set facing direction + ld [hl], c ; [x#SPRITESTATEDATA1_FACINGDIRECTION]: set facing direction jr notYetMoving InitializeSpriteStatus: - ld [hl], $1 ; $c1x1: set movement status to ready + ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = ready inc l - ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen) - inc h + ld [hl], $ff ; [x#SPRITESTATEDATA1_IMAGEINDEX] = invisible/off screen + inc h ; HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add $2 ld l, a ld a, $8 - ld [hli], a ; $c2x2: set Y displacement to 8 - ld [hl], a ; $c2x3: set X displacement to 8 + ld [hli], a ; [x#SPRITESTATEDATA2_YDISPLACEMENT] = 8 + ld [hl], a ; [x#SPRITESTATEDATA2_XDISPLACEMENT] = 8 ret -; calculates the sprite's screen position form its map position and the player position +; calculates the sprite's screen position from its map position and the player position InitializeSpriteScreenPosition: ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2MapY - wSpritePlayerStateData2 + add SPRITESTATEDATA2_MAPY ld l, a ld a, [wYCoord] ld b, a - ld a, [hl] ; c2x4 (Y position + 4) + ld a, [hl] ; x#SPRITESTATEDATA2_MAPY sub b ; relative to player position swap a ; * 16 sub $4 ; - 4 dec h - ld [hli], a ; c1x4 (screen Y position) + ld [hli], a ; [x#SPRITESTATEDATA1_YPIXELS] inc h ld a, [wXCoord] ld b, a - ld a, [hli] ; c2x6 (X position + 4) + ld a, [hli] ; x#SPRITESTATEDATA2_MAPX sub b ; relative to player position swap a ; * 16 dec h - ld [hl], a ; c1x6 (screen X position) + ld [hl], a ; [x#SPRITESTATEDATA1_XPIXELS] ret ; tests if sprite is off screen or otherwise unable to do anything @@ -480,15 +482,15 @@ CheckSpriteAvailability: jp nz, .spriteInvisible ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 + add SPRITESTATEDATA2_MOVEMENTBYTE1 ld l, a - ld a, [hl] ; c2x6: movement byte 1 + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 cp $fe jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2MapY - wSpritePlayerStateData2 + add SPRITESTATEDATA2_MAPY ld l, a - ld b, [hl] ; c2x4: Y pos (+4) + ld b, [hl] ; x#SPRITESTATEDATA2_MAPY ld a, [wYCoord] cp b jr z, .skipYVisibilityTest @@ -498,7 +500,7 @@ CheckSpriteAvailability: jr c, .spriteInvisible ; below screen region .skipYVisibilityTest inc l - ld b, [hl] ; c2x5: X pos (+4) + ld b, [hl] ; x#SPRITESTATEDATA2_MAPX ld a, [wXCoord] cp b jr z, .skipXVisibilityTest @@ -528,9 +530,9 @@ CheckSpriteAvailability: .spriteInvisible ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 + add SPRITESTATEDATA1_IMAGEINDEX ld l, a - ld [hl], $ff ; c1x2 + ld [hl], $ff ; x#SPRITESTATEDATA1_IMAGEINDEX scf jr .done .spriteVisible @@ -549,19 +551,19 @@ CheckSpriteAvailability: jr nz, .notInGrass ld a, $80 .notInGrass - ld [hl], a ; c2x7 + ld [hl], a ; x#SPRITESTATEDATA2_GRASSPRIORITY and a .done ret UpdateSpriteImage: - ld h, $c1 + ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add $8 ld l, a - ld a, [hli] ; c1x8: walk animation frame + ld a, [hli] ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER ld b, a - ld a, [hl] ; c1x9: facing direction + ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION add b ld b, a ldh a, [hTilePlayerStandingOn] @@ -570,7 +572,7 @@ UpdateSpriteImage: ldh a, [hCurrentSpriteOffset] add $2 ld l, a - ld [hl], b ; c1x2: sprite to display + ld [hl], b ; x#SPRITESTATEDATA1_IMAGEINDEX ret ; tests if sprite can walk the specified direction @@ -582,9 +584,9 @@ UpdateSpriteImage: CanWalkOntoTile: ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2 + add SPRITESTATEDATA2_MOVEMENTBYTE1 ld l, a - ld a, [hl] ; c2x6 (movement byte 1) + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 cp $fe jr nc, .notScripted ; values $fe and $ff ; always allow walking if the movement is scripted @@ -605,20 +607,20 @@ CanWalkOntoTile: ldh a, [hCurrentSpriteOffset] add $6 ld l, a - ld a, [hl] ; $c2x6 (movement byte 1) + ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 inc a jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_YPIXELS ld l, a - ld a, [hli] ; c1x4 (screen Y pos) + ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS add $4 ; align to blocks (Y pos is always 4 pixels off) add d ; add Y delta cp $80 ; if value is >$80, the destination is off screen (either $81 or $FF underflow) jr nc, .impassable ; don't walk off screen inc l - ld a, [hl] ; c1x6 (screen X pos) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS add e ; add X delta cp $90 ; if value is >$90, the destination is off screen (either $91 or $FF underflow) jr nc, .impassable ; don't walk off screen @@ -631,26 +633,31 @@ CanWalkOntoTile: ldh a, [hCurrentSpriteOffset] add $c ld l, a - ld a, [hl] ; c1xc (directions in which sprite collision would occur) + ld a, [hl] ; x#SPRITESTATEDATA1_COLLISIONDATA (directions in which sprite collision would occur) and b ; check against chosen direction (1,2,4 or 8) jr nz, .impassable ; collision between sprites, don't go there ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2YDisplacement - wSpritePlayerStateData2 + add SPRITESTATEDATA2_YDISPLACEMENT ld l, a - ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go) + ld a, [hli] ; x#SPRITESTATEDATA2_YDISPLACEMENT (initialized at $8, keep track of where a sprite did go) bit 7, d ; check if going upwards (d=$ff) jr nz, .upwards add d + ; bug: these tests against $5 probably were supposed to prevent + ; sprites from walking out too far, but this line makes sprites get + ; stuck whenever they walked upwards 5 steps + ; on the other hand, the amount a sprite can walk out to the + ; right of bottom is not limited (until the counter overflows) cp $5 - jr c, .impassable ; if c2x2+d < 5, don't go ;bug: this tests probably were supposed to prevent sprites - jr .checkHorizontal ; from walking out too far, but this line makes sprites get stuck -.upwards ; whenever they walked upwards 5 steps - sub $1 ; on the other hand, the amount a sprite can walk out to the - jr c, .impassable ; if d2x2 == 0, don't go ; right of bottom is not limited (until the counter overflows) + jr c, .impassable ; if [x#SPRITESTATEDATA2_YDISPLACEMENT]+d < 5, don't go + jr .checkHorizontal +.upwards + sub $1 + jr c, .impassable ; if [x#SPRITESTATEDATA2_YDISPLACEMENT] == 0, don't go .checkHorizontal ld d, a - ld a, [hl] ; c2x3 (sprite X displacement, initialized at $8, keep track of where a sprite did go) + ld a, [hl] ; x#SPRITESTATEDATA2_XDISPLACEMENT (initialized at $8, keep track of where a sprite did go) bit 7, e ; check if going left (e=$ff) jr nz, .left add e @@ -658,10 +665,10 @@ CanWalkOntoTile: jr .passable .left sub $1 - jr c, .impassable ; if d2x3 == 0, don't go + jr c, .impassable ; if [x#SPRITESTATEDATA2_XDISPLACEMENT] == 0, don't go .passable - ld [hld], a ; update c2x3 - ld [hl], d ; update c2x2 + ld [hld], a ; update x#SPRITESTATEDATA2_XDISPLACEMENT + ld [hl], d ; update x#SPRITESTATEDATA2_YDISPLACEMENT and a ; clear carry (marking success) ret .impassable @@ -669,13 +676,13 @@ CanWalkOntoTile: ldh a, [hCurrentSpriteOffset] inc a ld l, a - ld [hl], $2 ; c1x1 = 2 (set movement status to delayed) + ld [hl], $2 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 2 (delayed) inc l inc l xor a - ld [hli], a ; c1x3 = 0 (clear Y movement delta) + ld [hli], a ; [x#SPRITESTATEDATA1_YSTEPVECTOR] = 0 inc l - ld [hl], a ; c1x5 = 0 (clear X movement delta) + ld [hl], a ; [x#SPRITESTATEDATA1_XSTEPVECTOR] = 0 inc h ldh a, [hCurrentSpriteOffset] add $8 @@ -683,7 +690,7 @@ CanWalkOntoTile: call Random ldh a, [hRandomAdd] and $7f - ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] (again with delay $100 if value is 0) + ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY: set to a random value in [0,$7f] (again with delay $100 if value is 0) scf ; set carry (marking failure to walk) ret @@ -693,16 +700,16 @@ CanWalkOntoTile: GetTileSpriteStandsOn: ld h, HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_YPIXELS ld l, a - ld a, [hli] ; c1x4: screen Y position + ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top) and $f0 ; in case object is currently moving srl a ; screen Y tile * 4 ld c, a ld b, $0 inc l - ld a, [hl] ; c1x6: screen X position + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS srl a srl a srl a ; screen X tile @@ -807,12 +814,12 @@ InitScriptedNPCMovement: jp AnimScriptedNPCMovement GetSpriteScreenYPointer: - ld a, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + ld a, SPRITESTATEDATA1_YPIXELS ld b, a jr GetSpriteScreenXYPointerCommon GetSpriteScreenXPointer: - ld a, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 + ld a, SPRITESTATEDATA1_XPIXELS ld b, a GetSpriteScreenXYPointerCommon: @@ -826,7 +833,7 @@ GetSpriteScreenXYPointerCommon: AnimScriptedNPCMovement: ld hl, wSpriteStateData2 ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 + add SPRITESTATEDATA2_IMAGEBASEOFFSET ld l, a ld a, [hl] ; VRAM slot dec a @@ -834,7 +841,7 @@ AnimScriptedNPCMovement: ld b, a ld hl, wSpriteStateData1 ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 + add SPRITESTATEDATA1_FACINGDIRECTION ld l, a ld a, [hl] ; facing direction cp SPRITE_FACING_DOWN @@ -853,7 +860,7 @@ AnimScriptedNPCMovement: call AdvanceScriptedNPCAnimFrameCounter ld hl, wSpriteStateData1 ldh a, [hCurrentSpriteOffset] - add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 + add SPRITESTATEDATA1_IMAGEINDEX ld l, a ldh a, [hSpriteVRAMSlotAndFacing] ld b, a diff --git a/engine/overworld/pathfinding.asm b/engine/overworld/pathfinding.asm index 54cb86b9..1925dbbc 100644 --- a/engine/overworld/pathfinding.asm +++ b/engine/overworld/pathfinding.asm @@ -84,7 +84,7 @@ CalcPositionOfPlayerRelativeToNPC: ld hl, wSpriteStateData1 ldh a, [hNPCSpriteOffset] add l - add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_YPIXELS ld l, a jr nc, .noCarry inc h diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm index 6f8e3c2c..dc57d5b9 100644 --- a/engine/overworld/sprite_collisions.asm +++ b/engine/overworld/sprite_collisions.asm @@ -1,15 +1,15 @@ _UpdateSprites:: ld h, $c1 inc h - ld a, wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 + ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET .spriteLoop ld l, a - sub wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 + sub SPRITESTATEDATA2_IMAGEBASEOFFSET ld c, a ldh [hCurrentSpriteOffset], a ld a, [hl] and a - jr z, .skipSprite ; tests $c2Xe + jr z, .skipSprite ; tests SPRITESTATEDATA2_IMAGEBASEOFFSET push hl push de push bc @@ -20,7 +20,7 @@ _UpdateSprites:: .skipSprite ld a, l add $10 ; move to next sprite - cp wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 ; test for overflow (back at beginning) + cp SPRITESTATEDATA2_IMAGEBASEOFFSET ; test for overflow (back at beginning) jr nz, .spriteLoop ret .updateCurrentSprite @@ -43,11 +43,12 @@ UpdateNonPlayerSprite: ; This detects if the current sprite (whose offset is at hCurrentSpriteOffset) ; is going to collide with another sprite by looping over the other sprites. -; The current sprite's offset will be labelled with i (e.g. $c1i0). -; The loop sprite's offset will labelled with j (e.g. $c1j0). +; The current sprite's offset will be labelled with i (e.g. i#SPRITESTATEDATA1_PICTUREID). +; The loop sprite's offset will labelled with j (e.g. j#SPRITESTATEDATA1_PICTUREID). ; -; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following -; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c. +; Note that the Y coordinate of the sprite (in [k#SPRITESTATEDATA1_YPIXELS]) +; is one of the following 9 values when the sprite is aligned with the grid: +; $fc, $0c, $1c, $2c, ..., $7c. ; The reason that 4 is added below to the coordinate is to make it align with a ; multiple of $10 to make comparisons easier. DetectCollisionBetweenSprites: @@ -58,7 +59,7 @@ DetectCollisionBetweenSprites: add LOW(wSpriteStateData1) ld l, a - ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused) + ld a, [hl] ; a = [i#SPRITESTATEDATA1_PICTUREID] (0 if slot is unused) and a ; is this sprite slot slot used? ret z ; return if not used @@ -66,10 +67,10 @@ DetectCollisionBetweenSprites: add 3 ld l, a - ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1) + ld a, [hli] ; a = [i#SPRITESTATEDATA1_YSTEPVECTOR] (-1, 0, or 1) call SetSpriteCollisionValues - ld a, [hli] ; a = [$C1i4] (Y screen coordinate) + ld a, [hli] ; a = [i#SPRITESTATEDATA1_YPIXELS] add 4 ; align with multiple of $10 ; The effect of the following 3 lines is to @@ -81,9 +82,9 @@ DetectCollisionBetweenSprites: ldh [hFF90], a ; store Y coordinate adjusted for direction of movement - ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1) + ld a, [hli] ; a = [i#SPRITESTATEDATA1_XSTEPVECTOR] (-1, 0, or 1) call SetSpriteCollisionValues - ld a, [hl] ; a = [$C1i6] (X screen coordinate) + ld a, [hl] ; a = [i#SPRITESTATEDATA1_XPIXELS] ; The effect of the following 3 lines is to ; add 7 to a if moving east or @@ -99,13 +100,13 @@ DetectCollisionBetweenSprites: ld l, a xor a - ld [hld], a ; zero [$c1id] XXX what's [$c1id] for? - ld [hld], a ; zero [$c1ic] (directions in which collisions occurred) + ld [hld], a ; zero [i#SPRITESTATEDATA1_0D] XXX what's this for? + ld [hld], a ; zero [i#SPRITESTATEDATA1_COLLISIONDATA] ldh a, [hFF91] - ld [hld], a ; [$c1ib] = adjusted X coordinate + ld [hld], a ; [i#SPRITESTATEDATA1_XADJUSTED] ldh a, [hFF90] - ld [hl], a ; [$c1ia] = adjusted Y coordinate + ld [hl], a ; [i#SPRITESTATEDATA1_YADJUSTED] xor a ; zero the loop counter @@ -118,13 +119,13 @@ DetectCollisionBetweenSprites: jp z, .next ; go to the next sprite if they match ld d, h - ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused) + ld a, [de] ; a = [j#SPRITESTATEDATA1_PICTUREID] (0 if slot is unused) and a ; is this sprite slot slot used? jp z, .next ; go the next sprite if not used inc e inc e - ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen) + ld a, [de] ; a = [j#SPRITESTATEDATA1_IMAGEINDEX] ($ff means the sprite is offscreen) inc a jp z, .next ; go the next sprite if offscreen @@ -133,11 +134,11 @@ DetectCollisionBetweenSprites: ld l, a inc e - ld a, [de] ; a = [$c1j3] (delta Y) + ld a, [de] ; a = [j#SPRITESTATEDATA1_YSTEPVECTOR] call SetSpriteCollisionValues inc e - ld a, [de] ; a = [$C1j4] (Y screen coordinate) + ld a, [de] ; a = [j#SPRITESTATEDATA1_YPIXELS] add 4 ; align with multiple of $10 ; The effect of the following 3 lines is to @@ -147,7 +148,7 @@ DetectCollisionBetweenSprites: and $f0 or c - sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j + sub [hl] ; subtract [i#SPRITESTATEDATA1_YADJUSTED] from [j#SPRITESTATEDATA1_YADJUSTED] ; calculate the absolute value of the difference to get the distance jr nc, .noCarry1 @@ -157,8 +158,8 @@ DetectCollisionBetweenSprites: ldh [hFF90], a ; store the distance between the two sprites' adjusted Y values ; Use the carry flag set by the above subtraction to determine which sprite's -; Y coordinate is larger. This information is used later to set [$c1ic], -; which stores which direction the collision occurred in. +; Y coordinate is larger. This information is used later to set +; [i#SPRITESTATEDATA1_COLLISIONDATA]. ; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2. ; If sprite i's Y is larger, set lowest 2 bits of c to 10. ; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01. @@ -170,7 +171,7 @@ DetectCollisionBetweenSprites: ; If sprite i's delta Y is 0, then b = 7, else b = 9. ld b, 7 - ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate) + ld a, [hl] ; a = [i#SPRITESTATEDATA1_YADJUSTED] and $f jr z, .next1 ld b, 9 @@ -186,7 +187,7 @@ DetectCollisionBetweenSprites: ; If sprite j's delta Y is 0, then b = 7, else b = 9. ld b, 7 dec e - ld a, [de] ; a = [$c1j3] (delta Y) + ld a, [de] ; a = [j#SPRITESTATEDATA1_YSTEPVECTOR] inc e and a jr z, .next2 @@ -201,13 +202,13 @@ DetectCollisionBetweenSprites: .checkXDistance inc e inc l - ld a, [de] ; a = [$c1j5] (delta X) + ld a, [de] ; a = [j#SPRITESTATEDATA1_XSTEPVECTOR] push bc call SetSpriteCollisionValues inc e - ld a, [de] ; a = [$c1j6] (X screen coordinate) + ld a, [de] ; a = [j#SPRITESTATEDATA1_XPIXELS] ; The effect of the following 3 lines is to ; add 7 to a if moving east or @@ -218,7 +219,7 @@ DetectCollisionBetweenSprites: pop bc - sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j + sub [hl] ; subtract [i#SPRITESTATEDATA1_XADJUSTED] from [j#SPRITESTATEDATA1_XADJUSTED] ; calculate the absolute value of the difference to get the distance jr nc, .noCarry2 @@ -228,8 +229,8 @@ DetectCollisionBetweenSprites: ldh [hFF91], a ; store the distance between the two sprites' adjusted X values ; Use the carry flag set by the above subtraction to determine which sprite's -; X coordinate is larger. This information is used later to set [$c1ic], -; which stores which direction the collision occurred in. +; X coordinate is larger. This information is used later to set +; [i#SPRITESTATEDATA1_COLLISIONDATA]. ; The following 5 lines set the lowest 2 bits of c. ; If sprite i's X is larger, set lowest 2 bits of c to 10. ; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01. @@ -241,7 +242,7 @@ DetectCollisionBetweenSprites: ; If sprite i's delta X is 0, then b = 7, else b = 9. ld b, 7 - ld a, [hl] ; a = [$c1ib] (adjusted X coordinate) + ld a, [hl] ; a = [i#SPRITESTATEDATA1_XADJUSTED] and $f jr z, .next3 ld b, 9 @@ -257,7 +258,7 @@ DetectCollisionBetweenSprites: ; If sprite j's delta X is 0, then b = 7, else b = 9. ld b, 7 dec e - ld a, [de] ; a = [$c1j5] (delta X) + ld a, [de] ; a = [j#SPRITESTATEDATA1_XSTEPVECTOR] inc e and a jr z, .next4 @@ -287,11 +288,12 @@ DetectCollisionBetweenSprites: .next6 ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis) and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above - or [hl] ; or with existing collision direction bits in [$c1ic] + or [hl] ; or with existing collision direction bits in [i#SPRITESTATEDATA1_COLLISIONDATA] ld [hl], a ; store new value ld a, c ; useless code because a is overwritten before being used again -; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with +; set bit in [i#SPRITESTATEDATA1_0E] or [i#SPRITESTATEDATA1_0F] +; to indicate which sprite the collision occurred with inc l inc l ldh a, [hFF8F] ; a = loop counter diff --git a/engine/overworld/trainer_sight.asm b/engine/overworld/trainer_sight.asm index 5046f5f6..816dea7f 100755 --- a/engine/overworld/trainer_sight.asm +++ b/engine/overworld/trainer_sight.asm @@ -1,77 +1,77 @@ _GetSpritePosition1:: ld hl, wSpriteStateData1 - ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + ld de, SPRITESTATEDATA1_YPIXELS ld a, [wSpriteIndex] ldh [hSpriteIndex], a call GetSpriteDataPointer - ld a, [hli] ; c1x4 (screen Y pos) + ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS ldh [hSpriteScreenYCoord], a inc hl - ld a, [hl] ; c1x6 (screen X pos) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS ldh [hSpriteScreenXCoord], a ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de - ld a, [hli] ; c2x4 (map Y pos) + ld a, [hli] ; x#SPRITESTATEDATA2_MAPY ldh [hSpriteMapYCoord], a - ld a, [hl] ; c2x5 (map X pos) + ld a, [hl] ; x#SPRITESTATEDATA2_MAPX ldh [hSpriteMapXCoord], a ret _GetSpritePosition2:: ld hl, wSpriteStateData1 - ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + ld de, SPRITESTATEDATA1_YPIXELS ld a, [wSpriteIndex] ldh [hSpriteIndex], a call GetSpriteDataPointer - ld a, [hli] ; c1x4 (screen Y pos) + ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS ld [wSavedSpriteScreenY], a inc hl - ld a, [hl] ; c1x6 (screen X pos) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS ld [wSavedSpriteScreenX], a ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de - ld a, [hli] ; c2x4 (map Y pos) + ld a, [hli] ; x#SPRITESTATEDATA2_MAPY ld [wSavedSpriteMapY], a - ld a, [hl] ; c2x5 (map X pos) + ld a, [hl] ; x#SPRITESTATEDATA2_MAPX ld [wSavedSpriteMapX], a ret _SetSpritePosition1:: ld hl, wSpriteStateData1 - ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + ld de, SPRITESTATEDATA1_YPIXELS ld a, [wSpriteIndex] ldh [hSpriteIndex], a call GetSpriteDataPointer - ldh a, [hSpriteScreenYCoord] ; c1x4 (screen Y pos) + ldh a, [hSpriteScreenYCoord] ; x#SPRITESTATEDATA1_YPIXELS ld [hli], a inc hl - ldh a, [hSpriteScreenXCoord] ; c1x6 (screen X pos) + ldh a, [hSpriteScreenXCoord] ; x#SPRITESTATEDATA1_XPIXELS ld [hl], a ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de - ldh a, [hSpriteMapYCoord] ; c2x4 (map Y pos) + ldh a, [hSpriteMapYCoord] ; x#SPRITESTATEDATA2_MAPY ld [hli], a - ldh a, [hSpriteMapXCoord] ; c2x5 (map X pos) + ldh a, [hSpriteMapXCoord] ; x#SPRITESTATEDATA2_MAPX ld [hl], a ret _SetSpritePosition2:: ld hl, wSpriteStateData1 - ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + ld de, SPRITESTATEDATA1_YPIXELS ld a, [wSpriteIndex] ldh [hSpriteIndex], a call GetSpriteDataPointer ld a, [wSavedSpriteScreenY] - ld [hli], a ; c1x4 (screen Y pos) + ld [hli], a ; x#SPRITESTATEDATA1_YPIXELS inc hl ld a, [wSavedSpriteScreenX] - ld [hl], a ; c1x6 (screen X pos) + ld [hl], a ; x#SPRITESTATEDATA1_XPIXELS ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels add hl, de ld a, [wSavedSpriteMapY] - ld [hli], a ; c2x4 (map Y pos) + ld [hli], a ; x#SPRITESTATEDATA2_MAPY ld a, [wSavedSpriteMapX] - ld [hl], a ; c2x5 (map X pos) + ld [hl], a ; x#SPRITESTATEDATA2_MAPX ret TrainerWalkUpToPlayer:: @@ -165,23 +165,23 @@ TrainerEngage: push hl push de ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1 + add SPRITESTATEDATA1_IMAGEINDEX ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x2: sprite image index + ld a, [hl] ; x#SPRITESTATEDATA1_IMAGEINDEX sub $ff jr nz, .spriteOnScreen ; test if sprite is on screen jp .noEngage .spriteOnScreen ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1 + add SPRITESTATEDATA1_FACINGDIRECTION ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x9: facing direction + ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION ld [wTrainerFacingDirection], a call ReadTrainerScreenPosition ld a, [wTrainerScreenY] ; sprite screen Y pos @@ -234,20 +234,20 @@ TrainerEngage: ; reads trainer's Y position to wTrainerScreenY and X position to wTrainerScreenX ReadTrainerScreenPosition: ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_YPIXELS ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x4 (sprite Y pos) + ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS ld [wTrainerScreenY], a ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_XPIXELS ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x6 (sprite X pos) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS ld [wTrainerScreenX], a ret @@ -295,24 +295,24 @@ CheckPlayerIsInFrontOfSprite: cp POWER_PLANT jp z, .engage ; bypass this for power plant to get voltorb fake items to work ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_YPIXELS ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x4 (sprite screen Y pos) + ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS cp $fc jr nz, .notOnTopmostTile ; special case if sprite is on topmost tile (Y = $fc (-4)), make it come down a block ld a, $c .notOnTopmostTile ld [wTrainerScreenY], a ld a, [wTrainerSpriteOffset] - add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1 + add SPRITESTATEDATA1_XPIXELS ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de - ld a, [hl] ; c1x6 (sprite screen X pos) + ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS ld [wTrainerScreenX], a ld a, [wTrainerFacingDirection] ; facing direction cp SPRITE_FACING_DOWN diff --git a/engine/overworld/turn_sprite.asm b/engine/overworld/turn_sprite.asm index 4ff58239..7b34a03a 100755 --- a/engine/overworld/turn_sprite.asm +++ b/engine/overworld/turn_sprite.asm @@ -1,25 +1,25 @@ UpdateSpriteFacingOffsetAndDelayMovement:: - ld h, $c2 + ld h, HIGH(wSpriteStateData2) ldh a, [hCurrentSpriteOffset] add $8 ld l, a ld a, $7f ; maximum movement delay - ld [hl], a ; c2x8 (movement delay) - dec h + ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY + dec h ; HIGH(wSpriteStateData1) ldh a, [hCurrentSpriteOffset] add $9 ld l, a - ld a, [hld] ; c1x9 (facing direction) + ld a, [hld] ; x#SPRITESTATEDATA1_FACINGDIRECTION ld b, a xor a ld [hld], a - ld [hl], a ; c1x8 (walk animation frame) + ld [hl], a ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER ldh a, [hCurrentSpriteOffset] - add $2 + add SPRITESTATEDATA1_IMAGEINDEX ld l, a - ld a, [hl] ; c1x2 (facing and animation table offset) + ld a, [hl] ; x#SPRITESTATEDATA1_IMAGEINDEX or b ; or in the facing direction ld [hld], a ld a, $2 ; delayed movement status - ld [hl], a ; c1x1 (movement status) + ld [hl], a ; x#SPRITESTATEDATA1_MOVEMENTSTATUS ret diff --git a/home/overworld.asm b/home/overworld.asm index af2a79b2..acc108c7 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -678,7 +678,7 @@ CheckMapConnections:: ld b, SET_PAL_OVERWORLD call RunPaletteCommand ; Since the sprite set shouldn't change, this will just update VRAM slots at -; $C2XE without loading any tile patterns. +; x#SPRITESTATEDATA2_IMAGEBASEOFFSET without loading any tile patterns. farcall InitMapSprites call LoadTileBlockMap jp OverworldLoopLessDelay @@ -1210,7 +1210,7 @@ IsSpriteInFrontOfPlayer2:: ld a, l and $f0 inc a - ld l, a ; hl = $c1x1 + ld l, a ; hl = x#SPRITESTATEDATA1_MOVEMENTSTATUS set 7, [hl] ; set flag to make the sprite face the player ld a, e ldh [hSpriteIndexOrTextID], a @@ -2167,7 +2167,7 @@ LoadMapHeader:: ld a, [hli] ld [wNumSprites], a ; save the number of sprites push hl -; zero C110-C1FF and C210-C2FF +; zero out sprite state data for sprites 01-15 ld hl, wSprite01StateData1 ld de, wSprite01StateData2 xor a @@ -2178,7 +2178,7 @@ LoadMapHeader:: inc e dec b jr nz, .zeroSpriteDataLoop -; initialize all C100-C1FF sprite entries to disabled (other than player's) +; disable SPRITESTATEDATA1_IMAGEINDEX (set to $ff) for sprites 01-15 ld hl, wSprite01StateData1ImageIndex ld de, $10 ld c, $0f @@ -2196,19 +2196,19 @@ LoadMapHeader:: ld c, $00 .loadSpriteLoop ld a, [hli] - ld [de], a ; store picture ID at C1X0 + ld [de], a ; x#SPRITESTATEDATA1_PICTUREID inc d ld a, $04 add e ld e, a ld a, [hli] - ld [de], a ; store Y position at C2X4 + ld [de], a ; x#SPRITESTATEDATA2_MAPY inc e ld a, [hli] - ld [de], a ; store X position at C2X5 + ld [de], a ; x#SPRITESTATEDATA2_MAPX inc e ld a, [hli] - ld [de], a ; store movement byte 1 at C2X6 + ld [de], a ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hli] ldh [hLoadSpriteTemp1], a ; save movement byte 2 ld a, [hli] diff --git a/macros/wram.asm b/macros/wram.asm index 62464543..4c6b1dc6 100644 --- a/macros/wram.asm +++ b/macros/wram.asm @@ -71,7 +71,8 @@ spritestatedata1: MACRO \1IntraAnimFrameCounter:: db \1AnimFrameCounter:: db \1FacingDirection:: db - ds 2 +\1YAdjusted:: db +\1XAdjusted:: db \1CollisionData:: db ds 3 \1End:: diff --git a/wram.asm b/wram.asm index ab0d25d2..04718234 100755 --- a/wram.asm +++ b/wram.asm @@ -158,22 +158,23 @@ wSpriteStateData1:: ; data for all sprites on the current map ; holds info for 16 sprites with $10 bytes each ; player sprite is always sprite 0 -; C1x0: picture ID (fixed, loaded at map init) -; C1x1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving) -; C1x2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset) -; C1x3: Y screen position delta (-1,0 or 1; added to c1x4 on each walking animation update) -; C1x4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile) -; C1x5: X screen position delta (-1,0 or 1; added to c1x6 on each walking animation update) -; C1x6: X screen position (in pixels, snaps to grid if not currently walking) -; C1x7: intra-animation-frame counter (counting upwards to 4 until c1x8 is incremented) -; C1x8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames) -; C1x9: facing direction (0: down, 4: up, 8: left, $c: right) -; C1xA -; C1xB -; C1xC -; C1xD -; C1xE -; C1xF +; struct fields: +; - 0: picture ID (fixed, loaded at map init) +; - 1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving) +; - 2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset) +; - 3: Y screen position delta (-1,0 or 1; added to Y pixels on each walking animation update) +; - 4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile) +; - 5: X screen position delta (-1,0 or 1; added to field X pixels on each walking animation update) +; - 6: X screen position (in pixels, snaps to grid if not currently walking) +; - 7: intra-animation-frame counter (counting upwards to 4 until animation frame counter is incremented) +; - 8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames) +; - 9: facing direction ($0: down, $4: up, $8: left, $c: right) +; - A: adjusted Y coordinate +; - B: adjusted X coordinate +; - C: direction of collision +; - D +; - E +; - F wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 wSprite01StateData1:: spritestatedata1 wSprite01StateData1 wSprite02StateData1:: spritestatedata1 wSprite02StateData1 @@ -195,22 +196,23 @@ wSpriteStateData2:: ; more data for all sprites on the current map ; holds info for 16 sprites with $10 bytes each ; player sprite is always sprite 0 -; C2x0: walk animation counter (counting from $10 backwards when moving) -; C2x1: -; C2x2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) -; C2x3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) -; C2x4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4) -; C2x5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4) -; C2x6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown) -; C2x7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite) -; C2x8: delay until next movement (counted downwards, status (c1x1) is set to ready if reached 0) -; C2x9 -; C2xA -; C2xB -; C2xC -; C2xD -; C2xE: sprite image base offset (in video ram, player always has value 1, used to compute c1x2) -; C2xF +; struct fields: +; - 0: walk animation counter (counting from $10 backwards when moving) +; - 1: +; - 2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) +; - 3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged) +; - 4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4) +; - 5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4) +; - 6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown) +; - 7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite) +; - 8: delay until next movement (counted downwards, movement status is set to ready if reached 0) +; - 9 +; - A +; - B +; - C +; - D: picture ID +; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index) +; - F wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 wSprite01StateData2:: spritestatedata2 wSprite01StateData2 wSprite02StateData2:: spritestatedata2 wSprite02StateData2 @@ -2577,7 +2579,7 @@ wMissableObjectFlagsEnd:: ds 7 -wd5cd:: ds 1 ; temp copy of c1x2 (sprite facing/anim) +wd5cd:: ds 1 ; temp copy of SPRITESTATEDATA1_IMAGEINDEX (used for sprite facing/anim) wMissableObjectList:: ; each entry consists of 2 bytes -- cgit v1.3.1-sl0p From 51ac538c25f8c0a6d88101569a17f02d09855d31 Mon Sep 17 00:00:00 2001 From: Rangi Date: Tue, 7 Jul 2020 16:57:51 -0400 Subject: Identify SPRITESTATEDATA2_ORIGFACINGDIRECTION --- constants/map_object_constants.asm | 2 +- engine/menus/display_text_id_init.asm | 8 ++++---- home/text_script.asm | 6 +++--- macros/wram.asm | 3 ++- wram.asm | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) (limited to 'constants') diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm index 4c44e946..459fae4a 100644 --- a/constants/map_object_constants.asm +++ b/constants/map_object_constants.asm @@ -29,7 +29,7 @@ SPRITESTATEDATA1_LENGTH EQU const_value const SPRITESTATEDATA2_MOVEMENTBYTE1 ; 6 const SPRITESTATEDATA2_GRASSPRIORITY ; 7 const SPRITESTATEDATA2_MOVEMENTDELAY ; 8 - const SPRITESTATEDATA2_09 ; 9 + const SPRITESTATEDATA2_ORIGFACINGDIRECTION ; 9 const SPRITESTATEDATA2_0A ; a const SPRITESTATEDATA2_0B ; b const SPRITESTATEDATA2_0C ; c diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index c147eaf6..6ce76e7f 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -38,17 +38,17 @@ DisplayTextIDInit:: jr nz, .skipMovingSprites call UpdateSprites .skipMovingSprites -; loop to copy [x#SPRITESTATEDATA1_FACINGDIRECTION] to [x#SPRITESTATEDATA2_09] -; for each sprite from x=01 to x=15 +; loop to copy [x#SPRITESTATEDATA1_FACINGDIRECTION] to +; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION] for each non-player sprite ; this is done because when you talk to an NPC, they turn to look your way ; the original direction they were facing must be restored after the dialogue is over ld hl, wSprite01StateData1FacingDirection ld c, $0f ld de, $10 .spriteFacingDirectionCopyLoop - ld a, [hl] + ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION inc h - ld [hl], a + ld [hl], a ; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION] dec h add hl, de dec c diff --git a/home/text_script.asm b/home/text_script.asm index 1baa3d64..b9c3c8e4 100644 --- a/home/text_script.asm +++ b/home/text_script.asm @@ -111,13 +111,13 @@ CloseTextDisplay:: xor a ldh [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank ; loop to make sprites face the directions they originally faced before the dialogue - ld hl, wSprite01StateData2 + 9 ; should be wSprite01StateData1FacingDirection? + ld hl, wSprite01StateData2OrigFacingDirection ld c, $0f ld de, $10 .restoreSpriteFacingDirectionLoop - ld a, [hl] + ld a, [hl] ; x#SPRITESTATEDATA2_ORIGFACINGDIRECTION dec h - ld [hl], a + ld [hl], a ; [x#SPRITESTATEDATA1_FACINGDIRECTION] inc h add hl, de dec c diff --git a/macros/wram.asm b/macros/wram.asm index 4c6b1dc6..41fd1dad 100644 --- a/macros/wram.asm +++ b/macros/wram.asm @@ -88,7 +88,8 @@ spritestatedata2: MACRO \1MovementByte1:: db \1GrassPriority:: db \1MovementDelay:: db - ds 4 +\1OrigFacingDirection:: db + ds 3 \1PictureID:: db \1ImageBaseOffset:: db ds 1 diff --git a/wram.asm b/wram.asm index db5b7476..98f890fd 100755 --- a/wram.asm +++ b/wram.asm @@ -206,7 +206,7 @@ wSpriteStateData2:: ; - 6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown) ; - 7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite) ; - 8: delay until next movement (counted downwards, movement status is set to ready if reached 0) -; - 9 +; - 9: original facing direction (backed up by DisplayTextIDInit, restored by CloseTextDisplay) ; - A ; - B ; - C -- cgit v1.3.1-sl0p