shithub: pokecrystal

Download patch

ref: 8aa58dca9e18ba6e420cc55050955e9606409633
parent: 9af6d8d0f1cdfe13d5b6b028b7da2965fddaab67
author: Remy Oukaour <remy.oukaour@gmail.com>
date: Tue Jan 9 19:08:05 EST 2018

Specialized macros go with their data/code

--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -5,262 +5,285 @@
 ; - ItemAttributes (see data/items/attributes.asm)
 ; - ItemEffects (see engine/item_effects.asm)
 	const_def
-	const NO_ITEM      ; $00
-	const MASTER_BALL  ; $01
-	const ULTRA_BALL   ; $02
-	const BRIGHTPOWDER ; $03
-	const GREAT_BALL   ; $04
-	const POKE_BALL    ; $05
-	const TOWN_MAP     ; $06
-	const BICYCLE      ; $07
-	const MOON_STONE   ; $08
-	const ANTIDOTE     ; $09
-	const BURN_HEAL    ; $0A
-	const ICE_HEAL     ; $0B
-	const AWAKENING    ; $0C
-	const PARLYZ_HEAL  ; $0D
-	const FULL_RESTORE ; $0E
-	const MAX_POTION   ; $0F
-	const HYPER_POTION ; $10
-	const SUPER_POTION ; $11
-	const POTION       ; $12
-	const ESCAPE_ROPE  ; $13
-	const REPEL        ; $14
-	const MAX_ELIXER   ; $15
-	const FIRE_STONE   ; $16
-	const THUNDERSTONE ; $17
-	const WATER_STONE  ; $18
-	const ITEM_19      ; $19
-	const HP_UP        ; $1A
-	const PROTEIN      ; $1B
-	const IRON         ; $1C
-	const CARBOS       ; $1D
-	const LUCKY_PUNCH  ; $1E
-	const CALCIUM      ; $1F
-	const RARE_CANDY   ; $20
-	const X_ACCURACY   ; $21
-	const LEAF_STONE   ; $22
-	const METAL_POWDER ; $23
-	const NUGGET       ; $24
-	const POKE_DOLL    ; $25
-	const FULL_HEAL    ; $26
-	const REVIVE       ; $27
-	const MAX_REVIVE   ; $28
-	const GUARD_SPEC   ; $29
-	const SUPER_REPEL  ; $2A
-	const MAX_REPEL    ; $2B
-	const DIRE_HIT     ; $2C
-	const ITEM_2D      ; $2D
-	const FRESH_WATER  ; $2E
-	const SODA_POP     ; $2F
-	const LEMONADE     ; $30
-	const X_ATTACK     ; $31
-	const ITEM_32      ; $32
-	const X_DEFEND     ; $33
-	const X_SPEED      ; $34
-	const X_SPECIAL    ; $35
-	const COIN_CASE    ; $36
-	const ITEMFINDER   ; $37
-	const POKE_FLUTE   ; $38
-	const EXP_SHARE    ; $39
-	const OLD_ROD      ; $3A
-	const GOOD_ROD     ; $3B
-	const SILVER_LEAF  ; $3C
-	const SUPER_ROD    ; $3D
-	const PP_UP        ; $3E
-	const ETHER        ; $3F
-	const MAX_ETHER    ; $40
-	const ELIXER       ; $41
-	const RED_SCALE    ; $42
-	const SECRETPOTION ; $43
-	const S_S_TICKET   ; $44
-	const MYSTERY_EGG  ; $45
-	const CLEAR_BELL   ; $46
-	const SILVER_WING  ; $47
-	const MOOMOO_MILK  ; $48
-	const QUICK_CLAW   ; $49
-	const PSNCUREBERRY ; $4A
-	const GOLD_LEAF    ; $4B
-	const SOFT_SAND    ; $4C
-	const SHARP_BEAK   ; $4D
-	const PRZCUREBERRY ; $4E
-	const BURNT_BERRY  ; $4F
-	const ICE_BERRY    ; $50
-	const POISON_BARB  ; $51
-	const KINGS_ROCK   ; $52
-	const BITTER_BERRY ; $53
-	const MINT_BERRY   ; $54
-	const RED_APRICORN ; $55
-	const TINYMUSHROOM ; $56
-	const BIG_MUSHROOM ; $57
-	const SILVERPOWDER ; $58
-	const BLU_APRICORN ; $59
-	const ITEM_5A      ; $5A
-	const AMULET_COIN  ; $5B
-	const YLW_APRICORN ; $5C
-	const GRN_APRICORN ; $5D
-	const CLEANSE_TAG  ; $5E
-	const MYSTIC_WATER ; $5F
-	const TWISTEDSPOON ; $60
-	const WHT_APRICORN ; $61
-	const BLACKBELT    ; $62
-	const BLK_APRICORN ; $63
-	const ITEM_64      ; $64
-	const PNK_APRICORN ; $65
-	const BLACKGLASSES ; $66
-	const SLOWPOKETAIL ; $67
-	const PINK_BOW     ; $68
-	const STICK        ; $69
-	const SMOKE_BALL   ; $6A
-	const NEVERMELTICE ; $6B
-	const MAGNET       ; $6C
-	const MIRACLEBERRY ; $6D
-	const PEARL        ; $6E
-	const BIG_PEARL    ; $6F
-	const EVERSTONE    ; $70
-	const SPELL_TAG    ; $71
-	const RAGECANDYBAR ; $72
-	const GS_BALL      ; $73
-	const BLUE_CARD    ; $74
-	const MIRACLE_SEED ; $75
-	const THICK_CLUB   ; $76
-	const FOCUS_BAND   ; $77
-	const ITEM_78      ; $78
-	const ENERGYPOWDER ; $79
-	const ENERGY_ROOT  ; $7A
-	const HEAL_POWDER  ; $7B
-	const REVIVAL_HERB ; $7C
-	const HARD_STONE   ; $7D
-	const LUCKY_EGG    ; $7E
-	const CARD_KEY     ; $7F
-	const MACHINE_PART ; $80
-	const EGG_TICKET   ; $81
-	const LOST_ITEM    ; $82
-	const STARDUST     ; $83
-	const STAR_PIECE   ; $84
-	const BASEMENT_KEY ; $85
-	const PASS         ; $86
-	const ITEM_87      ; $87
-	const ITEM_88      ; $88
-	const ITEM_89      ; $89
-	const CHARCOAL     ; $8A
-	const BERRY_JUICE  ; $8B
-	const SCOPE_LENS   ; $8C
-	const ITEM_8D      ; $8D
-	const ITEM_8E      ; $8E
-	const METAL_COAT   ; $8F
-	const DRAGON_FANG  ; $90
-	const ITEM_91      ; $91
-	const LEFTOVERS    ; $92
-	const ITEM_93      ; $93
-	const ITEM_94      ; $94
-	const ITEM_95      ; $95
-	const MYSTERYBERRY ; $96
-	const DRAGON_SCALE ; $97
-	const BERSERK_GENE ; $98
-	const ITEM_99      ; $99
-	const ITEM_9A      ; $9A
-	const ITEM_9B      ; $9B
-	const SACRED_ASH   ; $9C
-	const HEAVY_BALL   ; $9D
-	const FLOWER_MAIL  ; $9E
-	const LEVEL_BALL   ; $9F
-	const LURE_BALL    ; $A0
-	const FAST_BALL    ; $A1
-	const ITEM_A2      ; $A2
-	const LIGHT_BALL   ; $A3
-	const FRIEND_BALL  ; $A4
-	const MOON_BALL    ; $A5
-	const LOVE_BALL    ; $A6
-	const NORMAL_BOX   ; $A7
-	const GORGEOUS_BOX ; $A8
-	const SUN_STONE    ; $A9
-	const POLKADOT_BOW ; $AA
-	const ITEM_AB      ; $AB
-	const UP_GRADE     ; $AC
-	const BERRY        ; $AD
-	const GOLD_BERRY   ; $AE
-	const SQUIRTBOTTLE ; $AF
-	const ITEM_B0      ; $B0
-	const PARK_BALL    ; $B1
-	const RAINBOW_WING ; $B2
-	const ITEM_B3      ; $B3
-	const BRICK_PIECE  ; $B4
-	const SURF_MAIL    ; $B5
-	const LITEBLUEMAIL ; $B6
-	const PORTRAITMAIL ; $B7
-	const LOVELY_MAIL  ; $B8
-	const EON_MAIL     ; $B9
-	const MORPH_MAIL   ; $BA
-	const BLUESKY_MAIL ; $BB
-	const MUSIC_MAIL   ; $BC
-	const MIRAGE_MAIL  ; $BD
-	const ITEM_BE      ; $BE
+	const NO_ITEM      ; 00
+	const MASTER_BALL  ; 01
+	const ULTRA_BALL   ; 02
+	const BRIGHTPOWDER ; 03
+	const GREAT_BALL   ; 04
+	const POKE_BALL    ; 05
+	const TOWN_MAP     ; 06
+	const BICYCLE      ; 07
+	const MOON_STONE   ; 08
+	const ANTIDOTE     ; 09
+	const BURN_HEAL    ; 0a
+	const ICE_HEAL     ; 0b
+	const AWAKENING    ; 0c
+	const PARLYZ_HEAL  ; 0d
+	const FULL_RESTORE ; 0e
+	const MAX_POTION   ; 0f
+	const HYPER_POTION ; 10
+	const SUPER_POTION ; 11
+	const POTION       ; 12
+	const ESCAPE_ROPE  ; 13
+	const REPEL        ; 14
+	const MAX_ELIXER   ; 15
+	const FIRE_STONE   ; 16
+	const THUNDERSTONE ; 17
+	const WATER_STONE  ; 18
+	const ITEM_19      ; 19
+	const HP_UP        ; 1a
+	const PROTEIN      ; 1b
+	const IRON         ; 1c
+	const CARBOS       ; 1d
+	const LUCKY_PUNCH  ; 1e
+	const CALCIUM      ; 1f
+	const RARE_CANDY   ; 20
+	const X_ACCURACY   ; 21
+	const LEAF_STONE   ; 22
+	const METAL_POWDER ; 23
+	const NUGGET       ; 24
+	const POKE_DOLL    ; 25
+	const FULL_HEAL    ; 26
+	const REVIVE       ; 27
+	const MAX_REVIVE   ; 28
+	const GUARD_SPEC   ; 29
+	const SUPER_REPEL  ; 2a
+	const MAX_REPEL    ; 2b
+	const DIRE_HIT     ; 2c
+	const ITEM_2D      ; 2d
+	const FRESH_WATER  ; 2e
+	const SODA_POP     ; 2f
+	const LEMONADE     ; 30
+	const X_ATTACK     ; 31
+	const ITEM_32      ; 32
+	const X_DEFEND     ; 33
+	const X_SPEED      ; 34
+	const X_SPECIAL    ; 35
+	const COIN_CASE    ; 36
+	const ITEMFINDER   ; 37
+	const POKE_FLUTE   ; 38
+	const EXP_SHARE    ; 39
+	const OLD_ROD      ; 3a
+	const GOOD_ROD     ; 3b
+	const SILVER_LEAF  ; 3c
+	const SUPER_ROD    ; 3d
+	const PP_UP        ; 3e
+	const ETHER        ; 3f
+	const MAX_ETHER    ; 40
+	const ELIXER       ; 41
+	const RED_SCALE    ; 42
+	const SECRETPOTION ; 43
+	const S_S_TICKET   ; 44
+	const MYSTERY_EGG  ; 45
+	const CLEAR_BELL   ; 46
+	const SILVER_WING  ; 47
+	const MOOMOO_MILK  ; 48
+	const QUICK_CLAW   ; 49
+	const PSNCUREBERRY ; 4a
+	const GOLD_LEAF    ; 4b
+	const SOFT_SAND    ; 4c
+	const SHARP_BEAK   ; 4d
+	const PRZCUREBERRY ; 4e
+	const BURNT_BERRY  ; 4f
+	const ICE_BERRY    ; 50
+	const POISON_BARB  ; 51
+	const KINGS_ROCK   ; 52
+	const BITTER_BERRY ; 53
+	const MINT_BERRY   ; 54
+	const RED_APRICORN ; 55
+	const TINYMUSHROOM ; 56
+	const BIG_MUSHROOM ; 57
+	const SILVERPOWDER ; 58
+	const BLU_APRICORN ; 59
+	const ITEM_5A      ; 5a
+	const AMULET_COIN  ; 5b
+	const YLW_APRICORN ; 5c
+	const GRN_APRICORN ; 5d
+	const CLEANSE_TAG  ; 5e
+	const MYSTIC_WATER ; 5f
+	const TWISTEDSPOON ; 60
+	const WHT_APRICORN ; 61
+	const BLACKBELT    ; 62
+	const BLK_APRICORN ; 63
+	const ITEM_64      ; 64
+	const PNK_APRICORN ; 65
+	const BLACKGLASSES ; 66
+	const SLOWPOKETAIL ; 67
+	const PINK_BOW     ; 68
+	const STICK        ; 69
+	const SMOKE_BALL   ; 6a
+	const NEVERMELTICE ; 6b
+	const MAGNET       ; 6c
+	const MIRACLEBERRY ; 6d
+	const PEARL        ; 6e
+	const BIG_PEARL    ; 6f
+	const EVERSTONE    ; 70
+	const SPELL_TAG    ; 71
+	const RAGECANDYBAR ; 72
+	const GS_BALL      ; 73
+	const BLUE_CARD    ; 74
+	const MIRACLE_SEED ; 75
+	const THICK_CLUB   ; 76
+	const FOCUS_BAND   ; 77
+	const ITEM_78      ; 78
+	const ENERGYPOWDER ; 79
+	const ENERGY_ROOT  ; 7a
+	const HEAL_POWDER  ; 7b
+	const REVIVAL_HERB ; 7c
+	const HARD_STONE   ; 7d
+	const LUCKY_EGG    ; 7e
+	const CARD_KEY     ; 7f
+	const MACHINE_PART ; 80
+	const EGG_TICKET   ; 81
+	const LOST_ITEM    ; 82
+	const STARDUST     ; 83
+	const STAR_PIECE   ; 84
+	const BASEMENT_KEY ; 85
+	const PASS         ; 86
+	const ITEM_87      ; 87
+	const ITEM_88      ; 88
+	const ITEM_89      ; 89
+	const CHARCOAL     ; 8a
+	const BERRY_JUICE  ; 8b
+	const SCOPE_LENS   ; 8c
+	const ITEM_8D      ; 8d
+	const ITEM_8E      ; 8e
+	const METAL_COAT   ; 8f
+	const DRAGON_FANG  ; 90
+	const ITEM_91      ; 91
+	const LEFTOVERS    ; 92
+	const ITEM_93      ; 93
+	const ITEM_94      ; 94
+	const ITEM_95      ; 95
+	const MYSTERYBERRY ; 96
+	const DRAGON_SCALE ; 97
+	const BERSERK_GENE ; 98
+	const ITEM_99      ; 99
+	const ITEM_9A      ; 9a
+	const ITEM_9B      ; 9b
+	const SACRED_ASH   ; 9c
+	const HEAVY_BALL   ; 9d
+	const FLOWER_MAIL  ; 9e
+	const LEVEL_BALL   ; 9f
+	const LURE_BALL    ; a0
+	const FAST_BALL    ; a1
+	const ITEM_A2      ; a2
+	const LIGHT_BALL   ; a3
+	const FRIEND_BALL  ; a4
+	const MOON_BALL    ; a5
+	const LOVE_BALL    ; a6
+	const NORMAL_BOX   ; a7
+	const GORGEOUS_BOX ; a8
+	const SUN_STONE    ; a9
+	const POLKADOT_BOW ; aa
+	const ITEM_AB      ; ab
+	const UP_GRADE     ; ac
+	const BERRY        ; ad
+	const GOLD_BERRY   ; ae
+	const SQUIRTBOTTLE ; af
+	const ITEM_B0      ; b0
+	const PARK_BALL    ; b1
+	const RAINBOW_WING ; b2
+	const ITEM_B3      ; b3
+	const BRICK_PIECE  ; b4
+	const SURF_MAIL    ; b5
+	const LITEBLUEMAIL ; b6
+	const PORTRAITMAIL ; b7
+	const LOVELY_MAIL  ; b8
+	const EON_MAIL     ; b9
+	const MORPH_MAIL   ; ba
+	const BLUESKY_MAIL ; bb
+	const MUSIC_MAIL   ; bc
+	const MIRAGE_MAIL  ; bd
+	const ITEM_BE      ; be
 
+add_tm: MACRO
+if !DEF(TM01)
+TM01 = const_value
+	enum_start 1
+endc
+	define _\@_1, "TM_\1"
+	const _\@_1
+	enum \1_TMNUM
+ENDM
+
+add_hm: MACRO
+if !DEF(HM01)
+HM01 = const_value
+endc
+	define _\@_1, "HM_\1"
+	const _\@_1
+	enum \1_TMNUM
+ENDM
+
+add_mt: MACRO
+	enum \1_TMNUM
+ENDM
+
 ; see data/moves/tmhm_moves.asm for moves
-	add_tm DYNAMICPUNCH ; $BF
-	add_tm HEADBUTT     ; $C0
-	add_tm CURSE        ; $C1
-	add_tm ROLLOUT      ; $C2
-	const ITEM_C3       ; $C3
-	add_tm ROAR         ; $C4
-	add_tm TOXIC        ; $C5
-	add_tm ZAP_CANNON   ; $C6
-	add_tm ROCK_SMASH   ; $C7
-	add_tm PSYCH_UP     ; $C8
-	add_tm HIDDEN_POWER ; $C9
-	add_tm SUNNY_DAY    ; $CA
-	add_tm SWEET_SCENT  ; $CB
-	add_tm SNORE        ; $CC
-	add_tm BLIZZARD     ; $CD
-	add_tm HYPER_BEAM   ; $CE
-	add_tm ICY_WIND     ; $CF
-	add_tm PROTECT      ; $D0
-	add_tm RAIN_DANCE   ; $D1
-	add_tm GIGA_DRAIN   ; $D2
-	add_tm ENDURE       ; $D3
-	add_tm FRUSTRATION  ; $D4
-	add_tm SOLARBEAM    ; $D5
-	add_tm IRON_TAIL    ; $D6
-	add_tm DRAGONBREATH ; $D7
-	add_tm THUNDER      ; $D8
-	add_tm EARTHQUAKE   ; $D9
-	add_tm RETURN       ; $DA
-	add_tm DIG          ; $DB
-	const ITEM_DC       ; $DC
-	add_tm PSYCHIC_M    ; $DD
-	add_tm SHADOW_BALL  ; $DE
-	add_tm MUD_SLAP     ; $DF
-	add_tm DOUBLE_TEAM  ; $E0
-	add_tm ICE_PUNCH    ; $E1
-	add_tm SWAGGER      ; $E2
-	add_tm SLEEP_TALK   ; $E3
-	add_tm SLUDGE_BOMB  ; $E4
-	add_tm SANDSTORM    ; $E5
-	add_tm FIRE_BLAST   ; $E6
-	add_tm SWIFT        ; $E7
-	add_tm DEFENSE_CURL ; $E8
-	add_tm THUNDERPUNCH ; $E9
-	add_tm DREAM_EATER  ; $EA
-	add_tm DETECT       ; $EB
-	add_tm REST         ; $EC
-	add_tm ATTRACT      ; $ED
-	add_tm THIEF        ; $EE
-	add_tm STEEL_WING   ; $EF
-	add_tm FIRE_PUNCH   ; $F0
-	add_tm FURY_CUTTER  ; $F1
-	add_tm NIGHTMARE    ; $F2
+	add_tm DYNAMICPUNCH ; bf
+	add_tm HEADBUTT     ; c0
+	add_tm CURSE        ; c1
+	add_tm ROLLOUT      ; c2
+	const ITEM_C3       ; c3
+	add_tm ROAR         ; c4
+	add_tm TOXIC        ; c5
+	add_tm ZAP_CANNON   ; c6
+	add_tm ROCK_SMASH   ; c7
+	add_tm PSYCH_UP     ; c8
+	add_tm HIDDEN_POWER ; c9
+	add_tm SUNNY_DAY    ; ca
+	add_tm SWEET_SCENT  ; cb
+	add_tm SNORE        ; cc
+	add_tm BLIZZARD     ; cd
+	add_tm HYPER_BEAM   ; ce
+	add_tm ICY_WIND     ; cf
+	add_tm PROTECT      ; d0
+	add_tm RAIN_DANCE   ; d1
+	add_tm GIGA_DRAIN   ; d2
+	add_tm ENDURE       ; d3
+	add_tm FRUSTRATION  ; d4
+	add_tm SOLARBEAM    ; d5
+	add_tm IRON_TAIL    ; d6
+	add_tm DRAGONBREATH ; d7
+	add_tm THUNDER      ; d8
+	add_tm EARTHQUAKE   ; d9
+	add_tm RETURN       ; da
+	add_tm DIG          ; db
+	const ITEM_DC       ; dc
+	add_tm PSYCHIC_M    ; dd
+	add_tm SHADOW_BALL  ; de
+	add_tm MUD_SLAP     ; df
+	add_tm DOUBLE_TEAM  ; e0
+	add_tm ICE_PUNCH    ; e1
+	add_tm SWAGGER      ; e2
+	add_tm SLEEP_TALK   ; e3
+	add_tm SLUDGE_BOMB  ; e4
+	add_tm SANDSTORM    ; e5
+	add_tm FIRE_BLAST   ; e6
+	add_tm SWIFT        ; e7
+	add_tm DEFENSE_CURL ; e8
+	add_tm THUNDERPUNCH ; e9
+	add_tm DREAM_EATER  ; ea
+	add_tm DETECT       ; eb
+	add_tm REST         ; ec
+	add_tm ATTRACT      ; ed
+	add_tm THIEF        ; ee
+	add_tm STEEL_WING   ; ef
+	add_tm FIRE_PUNCH   ; f0
+	add_tm FURY_CUTTER  ; f1
+	add_tm NIGHTMARE    ; f2
 NUM_TMS = const_value - TM01 - 2 ; discount ITEM_C3 and ITEM_DC
 
-	add_hm CUT          ; $F3
-	add_hm FLY          ; $F4
-	add_hm SURF         ; $F5
-	add_hm STRENGTH     ; $F6
-	add_hm FLASH        ; $F7
-	add_hm WHIRLPOOL    ; $F8
-	add_hm WATERFALL    ; $F9
+	add_hm CUT          ; f3
+	add_hm FLY          ; f4
+	add_hm SURF         ; f5
+	add_hm STRENGTH     ; f6
+	add_hm FLASH        ; f7
+	add_hm WHIRLPOOL    ; f8
+	add_hm WATERFALL    ; f9
 NUM_HMS = const_value - HM01
-	const ITEM_FA       ; $FA
+	const ITEM_FA       ; fa
 
 	add_mt FLAMETHROWER
 	add_mt THUNDERBOLT
--- a/data/pokemon/base_stats.asm
+++ b/data/pokemon/base_stats.asm
@@ -1,3 +1,36 @@
+tmhm: MACRO
+; used in data/pokemon/base_stats/*.asm
+tms1 = 0 ; TM01-TM24 (24)
+tms2 = 0 ; TM25-TM48 (24)
+tms3 = 0 ; TM49-TM50 + HM01-HM07 + MT01-MT03 (12/24)
+rept _NARG
+	if DEF(\1_TMNUM)
+	if \1_TMNUM < 24 + 1
+tms1 = tms1 | (1 << ((\1_TMNUM) - 1))
+	elif \1_TMNUM < 48 + 1
+tms2 = tms2 | (1 << ((\1_TMNUM) - 1 - 24))
+	else
+tms3 = tms3 | (1 << ((\1_TMNUM) - 1 - 48))
+	endc
+	else
+		fail "\1 is not a TM, HM, or move tutor move"
+	endc
+	shift
+endr
+rept 3 ; TM01-TM24 (24/24)
+	db tms1 & $ff
+tms1 = tms1 >> 8
+endr
+rept 3 ; TM25-TM48 (24/24)
+	db tms2 & $ff
+tms2 = tms2 >> 8
+endr
+rept 2 ; TM49-TM50 + HM01-HM07 + MT01-MT03 (12/16)
+	db tms3 & $ff
+tms3 = tms3 >> 8
+endr
+ENDM
+
 BaseData::
 INCLUDE "data/pokemon/base_stats/bulbasaur.asm"
 INCLUDE "data/pokemon/base_stats/ivysaur.asm"
--- a/macros.asm
+++ b/macros.asm
@@ -5,7 +5,6 @@
 INCLUDE "macros/code.asm"
 INCLUDE "macros/coords.asm"
 INCLUDE "macros/color.asm"
-INCLUDE "macros/tmhm.asm"
 
 INCLUDE "macros/scripts/audio.asm"
 INCLUDE "macros/scripts/maps.asm"
--- a/macros/enum.asm
+++ b/macros/enum.asm
@@ -38,3 +38,12 @@
 \1 EQU (1 << const_value)
 const_value = const_value + 1
 ENDM
+
+
+; Enumerate strings
+
+define: MACRO
+if !DEF(\1)
+\1 EQUS \2
+endc
+ENDM
--- a/macros/tmhm.asm
+++ /dev/null
@@ -1,71 +1,0 @@
-define: MACRO
-if !DEF(\1)
-\1 EQUS \2
-endc
-ENDM
-
-
-; Used in constants/item_constants.asm
-
-const_value = 0
-
-add_tm: MACRO
-if !DEF(TM01)
-TM01 = const_value
-	enum_start 1
-endc
-	define _\@_1, "TM_\1"
-	const _\@_1
-	enum \1_TMNUM
-ENDM
-
-add_hm: MACRO
-if !DEF(HM01)
-HM01 = const_value
-endc
-	define _\@_1, "HM_\1"
-	const _\@_1
-	enum \1_TMNUM
-ENDM
-
-add_mt: MACRO
-	enum \1_TMNUM
-ENDM
-
-
-; Used in data/pokemon/base_stats/*.asm
-
-; N TMs/HMs need (N+7)/8 bytes for their bit flags.
-; The rgbasm integers tms1, tms2, tms3 each hold 3 bytes, or 24 bits.
-tmhm: MACRO
-tms1 = 0
-tms2 = 0
-tms3 = 0
-rept _NARG
-	if DEF(\1_TMNUM)
-	if \1_TMNUM < 24 + 1
-tms1 = tms1 | (1 << ((\1_TMNUM) - 1))
-	elif \1_TMNUM < 48 + 1
-tms2 = tms2 | (1 << ((\1_TMNUM) - 1 - 24))
-	else
-tms3 = tms3 | (1 << ((\1_TMNUM) - 1 - 48))
-	endc
-	else
-		fail "\1 is not a TM, HM, or move tutor move"
-	endc
-	shift
-endr
-
-rept 3
-	db tms1 & $ff
-tms1 = tms1 >> 8
-endr
-rept 3
-	db tms2 & $ff
-tms2 = tms2 >> 8
-endr
-rept 2
-	db tms3 & $ff
-tms3 = tms3 >> 8
-endr
-ENDM