From 43a92957899b0f14c1c60cb533f298d08c16a72b Mon Sep 17 00:00:00 2001 From: Rangi Date: Mon, 6 Jul 2020 16:53:05 -0400 Subject: [PATCH] add_tm, add_hm, and add_mt define TM##_MOVE, HM##_MOVE, and MT##_MOVE constants, to avoid repeating the move names in tmhm_moves.asm --- constants.asm | 4 +- constants/item_constants.asm | 44 ++++++++++++++- data/moves/tmhm_moves.asm | 100 ++++++++++++++--------------------- engine/events/move_tutor.asm | 6 +-- 4 files changed, 87 insertions(+), 67 deletions(-) diff --git a/constants.asm b/constants.asm index 59248078f..71bd2c4dc 100644 --- a/constants.asm +++ b/constants.asm @@ -19,8 +19,6 @@ INCLUDE "constants/cry_constants.asm" INCLUDE "constants/engine_flags.asm" INCLUDE "constants/event_flags.asm" INCLUDE "constants/icon_constants.asm" -INCLUDE "constants/item_constants.asm" -INCLUDE "constants/item_data_constants.asm" INCLUDE "constants/landmark_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_data_constants.asm" @@ -31,6 +29,8 @@ INCLUDE "constants/menu_constants.asm" INCLUDE "constants/mobile_constants.asm" INCLUDE "constants/move_constants.asm" INCLUDE "constants/move_effect_constants.asm" +INCLUDE "constants/item_constants.asm" +INCLUDE "constants/item_data_constants.asm" INCLUDE "constants/music_constants.asm" INCLUDE "constants/npc_trade_constants.asm" INCLUDE "constants/phone_constants.asm" diff --git a/constants/item_constants.asm b/constants/item_constants.asm index 98493a5a0..fa2b1a4d0 100644 --- a/constants/item_constants.asm +++ b/constants/item_constants.asm @@ -198,10 +198,22 @@ const ITEM_BE ; be add_tm: MACRO +; Defines three constants: +; - TM_\1: the item id, starting at $bf +; - \1_TMNUM: the learnable TM/HM flag, starting at 1 +; - TM##_MOVE: alias for the move id, equal to the value of \1 +; The first usage also defines TM01 as the first TM item id. if !DEF(TM01) TM01 EQU const_value enum_start 1 endc +if __enum__ < 10 +MOVE_FOR_TM EQUS "TM0{d:__enum__}_MOVE" +else +MOVE_FOR_TM EQUS "TM{d:__enum__}_MOVE" +endc +MOVE_FOR_TM = \1 +PURGE MOVE_FOR_TM const TM_\1 enum \1_TMNUM ENDM @@ -259,12 +271,26 @@ ENDM add_tm FIRE_PUNCH ; f0 add_tm FURY_CUTTER ; f1 add_tm NIGHTMARE ; f2 -NUM_TMS EQU const_value - TM01 - 2 ; discount ITEM_C3 and ITEM_DC +NUM_TMS EQU __enum__ - 1 add_hm: MACRO +; Defines three constants: +; - HM_\1: the item id, starting at $f3 +; - \1_TMNUM: the learnable TM/HM flag, starting at 51 +; - HM##_MOVE: alias for the move id, equal to the value of \1 +; The first usage also defines HM01 as the first TM item id. if !DEF(HM01) HM01 EQU const_value endc +HM_VALUE EQU __enum__ - NUM_TMS +if HM_VALUE < 10 +MOVE_FOR_HM EQUS "HM0{d:HM_VALUE}_MOVE" +else +MOVE_FOR_HM EQUS "HM{d:HM_VALUE}_MOVE" +endc +MOVE_FOR_HM = \1 +PURGE MOVE_FOR_HM +PURGE HM_VALUE const HM_\1 enum \1_TMNUM ENDM @@ -276,15 +302,29 @@ ENDM add_hm FLASH ; f7 add_hm WHIRLPOOL ; f8 add_hm WATERFALL ; f9 -NUM_HMS EQU const_value - HM01 +NUM_HMS EQU __enum__ - NUM_TMS - 1 add_mt: MACRO +; Defines two constants: +; - \1_TMNUM: the learnable TM/HM flag, starting at 58 +; - MT##_MOVE: alias for the move id, equal to the value of \1 +MT_VALUE EQU __enum__ - NUM_TMS - NUM_HMS +if MT_VALUE < 10 +MOVE_FOR_MT EQUS "MT0{d:MT_VALUE}_MOVE" +else +MOVE_FOR_MT EQUS "MT{d:MT_VALUE}_MOVE" +endc +MOVE_FOR_MT = \1 +PURGE MOVE_FOR_MT +PURGE MT_VALUE enum \1_TMNUM ENDM add_mt FLAMETHROWER add_mt THUNDERBOLT add_mt ICE_BEAM +NUM_TUTORS = __enum__ - NUM_TMS - NUM_HMS - 1 + NUM_TM_HM_TUTOR EQU __enum__ - 1 const ITEM_FA ; fa diff --git a/data/moves/tmhm_moves.asm b/data/moves/tmhm_moves.asm index 339f6a5a6..9742a6e73 100644 --- a/data/moves/tmhm_moves.asm +++ b/data/moves/tmhm_moves.asm @@ -1,66 +1,46 @@ +; The add_tm, add_hm, and add_mt macros in constants/item_constants.asm simultaneously +; define constants for the item IDs and for the corresponding move values. + TMHMMoves: ; entries correspond to *_TMNUM enums (see constants/item_constants.asm) + ; TMs - db DYNAMICPUNCH - db HEADBUTT - db CURSE - db ROLLOUT - db ROAR - db TOXIC - db ZAP_CANNON - db ROCK_SMASH - db PSYCH_UP - db HIDDEN_POWER - db SUNNY_DAY - db SWEET_SCENT - db SNORE - db BLIZZARD - db HYPER_BEAM - db ICY_WIND - db PROTECT - db RAIN_DANCE - db GIGA_DRAIN - db ENDURE - db FRUSTRATION - db SOLARBEAM - db IRON_TAIL - db DRAGONBREATH - db THUNDER - db EARTHQUAKE - db RETURN - db DIG - db PSYCHIC_M - db SHADOW_BALL - db MUD_SLAP - db DOUBLE_TEAM - db ICE_PUNCH - db SWAGGER - db SLEEP_TALK - db SLUDGE_BOMB - db SANDSTORM - db FIRE_BLAST - db SWIFT - db DEFENSE_CURL - db THUNDERPUNCH - db DREAM_EATER - db DETECT - db REST - db ATTRACT - db THIEF - db STEEL_WING - db FIRE_PUNCH - db FURY_CUTTER - db NIGHTMARE +n = 1 +rept NUM_TMS +if n < 10 +MOVE_FOR_TM EQUS "TM0{d:n}_MOVE" +else +MOVE_FOR_TM EQUS "TM{d:n}_MOVE" +endc + db MOVE_FOR_TM +PURGE MOVE_FOR_TM +n = n + 1 +endr + ; HMs - db CUT - db FLY - db SURF - db STRENGTH - db FLASH - db WHIRLPOOL - db WATERFALL +n = 1 +rept NUM_HMS +if n < 10 +MOVE_FOR_HM EQUS "HM0{d:n}_MOVE" +else +MOVE_FOR_HM EQUS "HM{d:n}_MOVE" +endc + db MOVE_FOR_HM +PURGE MOVE_FOR_HM +n = n + 1 +endr + ; Move tutor - db FLAMETHROWER - db THUNDERBOLT - db ICE_BEAM +n = 1 +rept NUM_TUTORS +if n < 10 +MOVE_FOR_MT EQUS "MT0{d:n}_MOVE" +else +MOVE_FOR_MT EQUS "MT{d:n}_MOVE" +endc + db MOVE_FOR_MT +PURGE MOVE_FOR_MT +n = n + 1 +endr + db 0 ; end diff --git a/engine/events/move_tutor.asm b/engine/events/move_tutor.asm index 8f1640a4f..11d9d3fb0 100644 --- a/engine/events/move_tutor.asm +++ b/engine/events/move_tutor.asm @@ -40,15 +40,15 @@ MoveTutor: cp MOVETUTOR_THUNDERBOLT jr z, .thunderbolt ; MOVETUTOR_ICE_BEAM - ld a, ICE_BEAM + ld a, MT03_MOVE ; ICE_BEAM ret .flamethrower - ld a, FLAMETHROWER + ld a, MT01_MOVE ; FLAMETHROWER ret .thunderbolt - ld a, THUNDERBOLT + ld a, MT02_MOVE ; THUNDERBOLT ret CheckCanLearnMoveTutorMove: