shithub: pokered

Download patch

ref: 405889193ed592174407599df0bfd08a2d707a1b
parent: 66ebe56adc7a6a742a413eb2adbdc369b86183d5
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Sun Jul 5 18:52:27 EDT 2020

TM/HM constants named after moves

--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -102,58 +102,82 @@
 
 const_value = $C4
 
-	const HM_01         ; $C4
-	const HM_02         ; $C5
-	const HM_03         ; $C6
-	const HM_04         ; $C7
-	const HM_05         ; $C8
-	const TM_01         ; $C9
-	const TM_02         ; $CA
-	const TM_03         ; $CB
-	const TM_04         ; $CC
-	const TM_05         ; $CD
-	const TM_06         ; $CE
-	const TM_07         ; $CF
-	const TM_08         ; $D0
-	const TM_09         ; $D1
-	const TM_10         ; $D2
-	const TM_11         ; $D3
-	const TM_12         ; $D4
-	const TM_13         ; $D5
-	const TM_14         ; $D6
-	const TM_15         ; $D7
-	const TM_16         ; $D8
-	const TM_17         ; $D9
-	const TM_18         ; $DA
-	const TM_19         ; $DB
-	const TM_20         ; $DC
-	const TM_21         ; $DD
-	const TM_22         ; $DE
-	const TM_23         ; $DF
-	const TM_24         ; $E0
-	const TM_25         ; $E1
-	const TM_26         ; $E2
-	const TM_27         ; $E3
-	const TM_28         ; $E4
-	const TM_29         ; $E5
-	const TM_30         ; $E6
-	const TM_31         ; $E7
-	const TM_32         ; $E8
-	const TM_33         ; $E9
-	const TM_34         ; $EA
-	const TM_35         ; $EB
-	const TM_36         ; $EC
-	const TM_37         ; $ED
-	const TM_38         ; $EE
-	const TM_39         ; $EF
-	const TM_40         ; $F0
-	const TM_41         ; $F1
-	const TM_42         ; $F2
-	const TM_43         ; $F3
-	const TM_44         ; $F4
-	const TM_45         ; $F5
-	const TM_46         ; $F6
-	const TM_47         ; $F7
-	const TM_48         ; $F8
-	const TM_49         ; $F9
-	const TM_50         ; $FA
+add_hm: MACRO
+if !DEF(HM01)
+HM01 EQU const_value
+	enum_start 51 ; NUM_TMS + 1
+endc
+	const HM_\1
+	enum \1_TMNUM
+ENDM
+
+	add_hm CUT          ; $C4
+	add_hm FLY          ; $C5
+	add_hm SURF         ; $C6
+	add_hm STRENGTH     ; $C7
+	add_hm FLASH        ; $C8
+NUM_HMS EQU const_value - HM01
+
+add_tm: MACRO
+if !DEF(TM01)
+TM01 EQU const_value
+	enum_start 1
+endc
+	const TM_\1
+	enum \1_TMNUM
+ENDM
+
+	add_tm MEGA_PUNCH   ; $C9
+	add_tm RAZOR_WIND   ; $CA
+	add_tm SWORDS_DANCE ; $CB
+	add_tm WHIRLWIND    ; $CC
+	add_tm MEGA_KICK    ; $CD
+	add_tm TOXIC        ; $CE
+	add_tm HORN_DRILL   ; $CF
+	add_tm BODY_SLAM    ; $D0
+	add_tm TAKE_DOWN    ; $D1
+	add_tm DOUBLE_EDGE  ; $D2
+	add_tm BUBBLEBEAM   ; $D3
+	add_tm WATER_GUN    ; $D4
+	add_tm ICE_BEAM     ; $D5
+	add_tm BLIZZARD     ; $D6
+	add_tm HYPER_BEAM   ; $D7
+	add_tm PAY_DAY      ; $D8
+	add_tm SUBMISSION   ; $D9
+	add_tm COUNTER      ; $DA
+	add_tm SEISMIC_TOSS ; $DB
+	add_tm RAGE         ; $DC
+	add_tm MEGA_DRAIN   ; $DD
+	add_tm SOLARBEAM    ; $DE
+	add_tm DRAGON_RAGE  ; $DF
+	add_tm THUNDERBOLT  ; $E0
+	add_tm THUNDER      ; $E1
+	add_tm EARTHQUAKE   ; $E2
+	add_tm FISSURE      ; $E3
+	add_tm DIG          ; $E4
+	add_tm PSYCHIC_M    ; $E5
+	add_tm TELEPORT     ; $E6
+	add_tm MIMIC        ; $E7
+	add_tm DOUBLE_TEAM  ; $E8
+	add_tm REFLECT      ; $E9
+	add_tm BIDE         ; $EA
+	add_tm METRONOME    ; $EB
+	add_tm SELFDESTRUCT ; $EC
+	add_tm EGG_BOMB     ; $ED
+	add_tm FIRE_BLAST   ; $EE
+	add_tm SWIFT        ; $EF
+	add_tm SKULL_BASH   ; $F0
+	add_tm SOFTBOILED   ; $F1
+	add_tm DREAM_EATER  ; $F2
+	add_tm SKY_ATTACK   ; $F3
+	add_tm REST         ; $F4
+	add_tm THUNDER_WAVE ; $F5
+	add_tm PSYWAVE      ; $F6
+	add_tm EXPLOSION    ; $F7
+	add_tm ROCK_SLIDE   ; $F8
+	add_tm TRI_ATTACK   ; $F9
+	add_tm SUBSTITUTE   ; $FA
+NUM_TMS EQU const_value - TM01
+
+	enum_start NUM_TMS + NUM_HMS + 1
+	enum UNUSED_TMNUM
--- a/data/events/prizes.asm
+++ b/data/events/prizes.asm
@@ -60,9 +60,9 @@
 	db "@"
 
 PrizeMenuTMsEntries:
-	db TM_23
-	db TM_15
-	db TM_50
+	db TM_DRAGON_RAGE
+	db TM_HYPER_BEAM
+	db TM_SUBSTITUTE
 	db "@"
 
 PrizeMenuTMsCost:
--- a/data/items/marts.asm
+++ b/data/items/marts.asm
@@ -30,7 +30,7 @@
 
 ; Celadon Dept. Store 2F (2)
 CeladonMart2Clerk2Text::
-	script_mart TM_32, TM_33, TM_02, TM_07, TM_37, TM_01, TM_05, TM_09, TM_17
+	script_mart TM_DOUBLE_TEAM, TM_REFLECT, TM_RAZOR_WIND, TM_HORN_DRILL, TM_EGG_BOMB, TM_MEGA_PUNCH, TM_MEGA_KICK, TM_TAKE_DOWN, TM_SUBMISSION
 
 ; Celadon Dept. Store 4F
 CeladonMart4ClerkText::
--- a/data/items/tm_prices.asm
+++ b/data/items/tm_prices.asm
@@ -1,27 +1,27 @@
 TechnicalMachinePrices:
 ; In thousands (nybbles).
-	dn 3, 2  ; TM_01, TM_02
-	dn 2, 1  ; TM_03, TM_04
-	dn 3, 4  ; TM_05, TM_06
-	dn 2, 4  ; TM_07, TM_08
-	dn 3, 4  ; TM_09, TM_10
-	dn 2, 1  ; TM_11, TM_12
-	dn 4, 5  ; TM_13, TM_14
-	dn 5, 5  ; TM_15, TM_16
-	dn 3, 2  ; TM_17, TM_18
-	dn 3, 2  ; TM_19, TM_20
-	dn 5, 5  ; TM_21, TM_22
-	dn 5, 2  ; TM_23, TM_24
-	dn 5, 4  ; TM_25, TM_26
-	dn 5, 2  ; TM_27, TM_28
-	dn 4, 1  ; TM_29, TM_30
-	dn 2, 1  ; TM_31, TM_32
-	dn 1, 2  ; TM_33, TM_34
-	dn 4, 2  ; TM_35, TM_36
-	dn 2, 5  ; TM_37, TM_38
-	dn 2, 4  ; TM_39, TM_40
-	dn 2, 2  ; TM_41, TM_42
-	dn 5, 2  ; TM_43, TM_44
-	dn 2, 4  ; TM_45, TM_46
-	dn 3, 4  ; TM_47, TM_48
-	dn 4, 2  ; TM_49, TM_50
+	dn 3, 2  ; TM01, TM02
+	dn 2, 1  ; TM03, TM04
+	dn 3, 4  ; TM05, TM06
+	dn 2, 4  ; TM07, TM08
+	dn 3, 4  ; TM09, TM10
+	dn 2, 1  ; TM11, TM12
+	dn 4, 5  ; TM13, TM14
+	dn 5, 5  ; TM15, TM16
+	dn 3, 2  ; TM17, TM18
+	dn 3, 2  ; TM19, TM20
+	dn 5, 5  ; TM21, TM22
+	dn 5, 2  ; TM23, TM24
+	dn 5, 4  ; TM25, TM26
+	dn 5, 2  ; TM27, TM28
+	dn 4, 1  ; TM29, TM30
+	dn 2, 1  ; TM31, TM32
+	dn 1, 2  ; TM33, TM34
+	dn 4, 2  ; TM35, TM36
+	dn 2, 5  ; TM37, TM38
+	dn 2, 4  ; TM39, TM40
+	dn 2, 2  ; TM41, TM42
+	dn 5, 2  ; TM43, TM44
+	dn 2, 4  ; TM45, TM46
+	dn 3, 4  ; TM47, TM48
+	dn 4, 2  ; TM49, TM50
--- a/data/maps/objects/MtMoon1F.asm
+++ b/data/maps/objects/MtMoon1F.asm
@@ -24,7 +24,7 @@
 	object SPRITE_BALL, 35, 31, STAY, NONE, 10, RARE_CANDY
 	object SPRITE_BALL, 36, 23, STAY, NONE, 11, ESCAPE_ROPE
 	object SPRITE_BALL, 20, 33, STAY, NONE, 12, POTION
-	object SPRITE_BALL, 5, 32, STAY, NONE, 13, TM_12
+	object SPRITE_BALL, 5, 32, STAY, NONE, 13, TM_WATER_GUN
 
 	; warp-to
 	warp_to 14, 35, MT_MOON_1F_WIDTH
--- a/data/maps/objects/MtMoonB2F.asm
+++ b/data/maps/objects/MtMoonB2F.asm
@@ -18,7 +18,7 @@
 	object SPRITE_OMANYTE, 12, 6, STAY, NONE, 6 ; person
 	object SPRITE_OMANYTE, 13, 6, STAY, NONE, 7 ; person
 	object SPRITE_BALL, 25, 21, STAY, NONE, 8, HP_UP
-	object SPRITE_BALL, 29, 5, STAY, NONE, 9, TM_01
+	object SPRITE_BALL, 29, 5, STAY, NONE, 9, TM_MEGA_PUNCH
 
 	; warp-to
 	warp_to 25, 9, MT_MOON_B2F_WIDTH ; MT_MOON_B1F
--- a/data/maps/objects/PokemonMansionB1F.asm
+++ b/data/maps/objects/PokemonMansionB1F.asm
@@ -11,8 +11,8 @@
 	object SPRITE_OAK_AIDE, 27, 11, STAY, DOWN, 2, OPP_SCIENTIST, 13
 	object SPRITE_BALL, 10, 2, STAY, NONE, 3, RARE_CANDY
 	object SPRITE_BALL, 1, 22, STAY, NONE, 4, FULL_RESTORE
-	object SPRITE_BALL, 19, 25, STAY, NONE, 5, TM_14
-	object SPRITE_BALL, 5, 4, STAY, NONE, 6, TM_22
+	object SPRITE_BALL, 19, 25, STAY, NONE, 5, TM_BLIZZARD
+	object SPRITE_BALL, 5, 4, STAY, NONE, 6, TM_SOLARBEAM
 	object SPRITE_BOOK_MAP_DEX, 16, 20, STAY, NONE, 7 ; person
 	object SPRITE_BALL, 5, 13, STAY, NONE, 8, SECRET_KEY
 
--- a/data/maps/objects/PowerPlant.asm
+++ b/data/maps/objects/PowerPlant.asm
@@ -21,8 +21,8 @@
 	object SPRITE_BALL, 7, 25, STAY, NONE, 10, CARBOS
 	object SPRITE_BALL, 28, 3, STAY, NONE, 11, HP_UP
 	object SPRITE_BALL, 34, 3, STAY, NONE, 12, RARE_CANDY
-	object SPRITE_BALL, 26, 32, STAY, NONE, 13, TM_25
-	object SPRITE_BALL, 20, 32, STAY, NONE, 14, TM_33
+	object SPRITE_BALL, 26, 32, STAY, NONE, 13, TM_THUNDER
+	object SPRITE_BALL, 20, 32, STAY, NONE, 14, TM_REFLECT
 
 	; warp-to
 	warp_to 4, 35, POWER_PLANT_WIDTH
--- a/data/maps/objects/RocketHideoutB2F.asm
+++ b/data/maps/objects/RocketHideoutB2F.asm
@@ -14,7 +14,7 @@
 	object SPRITE_ROCKET, 20, 12, STAY, DOWN, 1, OPP_ROCKET, 13
 	object SPRITE_BALL, 1, 11, STAY, NONE, 2, MOON_STONE
 	object SPRITE_BALL, 16, 8, STAY, NONE, 3, NUGGET
-	object SPRITE_BALL, 6, 12, STAY, NONE, 4, TM_07
+	object SPRITE_BALL, 6, 12, STAY, NONE, 4, TM_HORN_DRILL
 	object SPRITE_BALL, 3, 21, STAY, NONE, 5, SUPER_POTION
 
 	; warp-to
--- a/data/maps/objects/RocketHideoutB3F.asm
+++ b/data/maps/objects/RocketHideoutB3F.asm
@@ -10,7 +10,7 @@
 	db 4 ; objects
 	object SPRITE_ROCKET, 10, 22, STAY, RIGHT, 1, OPP_ROCKET, 14
 	object SPRITE_ROCKET, 26, 12, STAY, UP, 2, OPP_ROCKET, 15
-	object SPRITE_BALL, 26, 17, STAY, NONE, 3, TM_10
+	object SPRITE_BALL, 26, 17, STAY, NONE, 3, TM_DOUBLE_EDGE
 	object SPRITE_BALL, 20, 14, STAY, NONE, 4, RARE_CANDY
 
 	; warp-to
--- a/data/maps/objects/RocketHideoutB4F.asm
+++ b/data/maps/objects/RocketHideoutB4F.asm
@@ -14,7 +14,7 @@
 	object SPRITE_ROCKET, 26, 12, STAY, DOWN, 3, OPP_ROCKET, 17
 	object SPRITE_ROCKET, 11, 2, STAY, DOWN, 4, OPP_ROCKET, 18
 	object SPRITE_BALL, 10, 12, STAY, NONE, 5, HP_UP
-	object SPRITE_BALL, 9, 4, STAY, NONE, 6, TM_02
+	object SPRITE_BALL, 9, 4, STAY, NONE, 6, TM_RAZOR_WIND
 	object SPRITE_BALL, 12, 20, STAY, NONE, 7, IRON
 	object SPRITE_BALL, 25, 2, STAY, NONE, 8, SILPH_SCOPE
 	object SPRITE_BALL, 10, 2, STAY, NONE, 9, LIFT_KEY
--- a/data/maps/objects/Route12.asm
+++ b/data/maps/objects/Route12.asm
@@ -20,7 +20,7 @@
 	object SPRITE_FISHER2, 12, 40, STAY, LEFT, 6, OPP_FISHER, 5
 	object SPRITE_FISHER2, 9, 52, STAY, RIGHT, 7, OPP_FISHER, 6
 	object SPRITE_FISHER2, 6, 87, STAY, DOWN, 8, OPP_FISHER, 11
-	object SPRITE_BALL, 14, 35, STAY, NONE, 9, TM_16
+	object SPRITE_BALL, 14, 35, STAY, NONE, 9, TM_PAY_DAY
 	object SPRITE_BALL, 5, 89, STAY, NONE, 10, IRON
 
 	; warp-to
--- a/data/maps/objects/Route15.asm
+++ b/data/maps/objects/Route15.asm
@@ -21,7 +21,7 @@
 	object SPRITE_BIKER, 46, 10, STAY, DOWN, 8, OPP_BIKER, 4
 	object SPRITE_LASS, 37, 5, STAY, RIGHT, 9, OPP_JR_TRAINER_F, 22
 	object SPRITE_LASS, 18, 13, STAY, UP, 10, OPP_JR_TRAINER_F, 23
-	object SPRITE_BALL, 18, 5, STAY, NONE, 11, TM_20
+	object SPRITE_BALL, 18, 5, STAY, NONE, 11, TM_RAGE
 
 	; warp-to
 	warp_to 7, 8, ROUTE_15_WIDTH ; ROUTE_15_GATE_1F
--- a/data/maps/objects/Route24.asm
+++ b/data/maps/objects/Route24.asm
@@ -13,4 +13,4 @@
 	object SPRITE_BUG_CATCHER, 11, 25, STAY, LEFT, 5, OPP_YOUNGSTER, 4
 	object SPRITE_LASS, 10, 28, STAY, RIGHT, 6, OPP_LASS, 8
 	object SPRITE_BUG_CATCHER, 11, 31, STAY, LEFT, 7, OPP_BUG_CATCHER, 9
-	object SPRITE_BALL, 10, 5, STAY, NONE, 8, TM_45
+	object SPRITE_BALL, 10, 5, STAY, NONE, 8, TM_THUNDER_WAVE
--- a/data/maps/objects/Route25.asm
+++ b/data/maps/objects/Route25.asm
@@ -17,7 +17,7 @@
 	object SPRITE_HIKER, 8, 4, STAY, RIGHT, 7, OPP_HIKER, 2
 	object SPRITE_HIKER, 23, 9, STAY, UP, 8, OPP_HIKER, 3
 	object SPRITE_HIKER, 13, 7, STAY, RIGHT, 9, OPP_HIKER, 4
-	object SPRITE_BALL, 22, 2, STAY, NONE, 10, TM_19
+	object SPRITE_BALL, 22, 2, STAY, NONE, 10, TM_SEISMIC_TOSS
 
 	; warp-to
 	warp_to 45, 3, ROUTE_25_WIDTH ; BILLS_HOUSE
--- a/data/maps/objects/Route4.asm
+++ b/data/maps/objects/Route4.asm
@@ -14,7 +14,7 @@
 	db 3 ; objects
 	object SPRITE_LASS, 9, 8, WALK, 0, 1 ; person
 	object SPRITE_LASS, 63, 3, STAY, RIGHT, 2, OPP_LASS, 4
-	object SPRITE_BALL, 57, 3, STAY, NONE, 3, TM_04
+	object SPRITE_BALL, 57, 3, STAY, NONE, 3, TM_WHIRLWIND
 
 	; warp-to
 	warp_to 11, 5, ROUTE_4_WIDTH ; MT_MOON_POKECENTER
--- a/data/maps/objects/Route9.asm
+++ b/data/maps/objects/Route9.asm
@@ -16,4 +16,4 @@
 	object SPRITE_BUG_CATCHER, 22, 2, STAY, DOWN, 7, OPP_BUG_CATCHER, 13
 	object SPRITE_HIKER, 45, 15, STAY, RIGHT, 8, OPP_HIKER, 5
 	object SPRITE_BUG_CATCHER, 40, 8, STAY, RIGHT, 9, OPP_BUG_CATCHER, 14
-	object SPRITE_BALL, 10, 15, STAY, NONE, 10, TM_30
+	object SPRITE_BALL, 10, 15, STAY, NONE, 10, TM_TELEPORT
--- a/data/maps/objects/SSAnne1FRooms.asm
+++ b/data/maps/objects/SSAnne1FRooms.asm
@@ -21,7 +21,7 @@
 	object SPRITE_LITTLE_GIRL, 2, 11, STAY, DOWN, 7 ; person
 	object SPRITE_CLEFAIRY, 3, 11, STAY, DOWN, 8 ; person
 	object SPRITE_GIRL, 10, 13, STAY, RIGHT, 9 ; person
-	object SPRITE_BALL, 12, 15, STAY, NONE, 10, TM_08
+	object SPRITE_BALL, 12, 15, STAY, NONE, 10, TM_BODY_SLAM
 	object SPRITE_GENTLEMAN, 21, 13, WALK, 2, 11 ; person
 
 	; warp-to
--- a/data/maps/objects/SSAnneB1FRooms.asm
+++ b/data/maps/objects/SSAnneB1FRooms.asm
@@ -25,7 +25,7 @@
 	object SPRITE_BLACK_HAIR_BOY_2, 10, 13, STAY, RIGHT, 7 ; person
 	object SPRITE_SLOWBRO, 11, 12, STAY, NONE, 8 ; person
 	object SPRITE_BALL, 20, 2, STAY, NONE, 9, ETHER
-	object SPRITE_BALL, 10, 2, STAY, NONE, 10, TM_44
+	object SPRITE_BALL, 10, 2, STAY, NONE, 10, TM_REST
 	object SPRITE_BALL, 12, 11, STAY, NONE, 11, MAX_POTION
 
 	; warp-to
--- a/data/maps/objects/SafariZoneEast.asm
+++ b/data/maps/objects/SafariZoneEast.asm
@@ -17,7 +17,7 @@
 	object SPRITE_BALL, 21, 10, STAY, NONE, 1, FULL_RESTORE
 	object SPRITE_BALL, 3, 7, STAY, NONE, 2, MAX_POTION
 	object SPRITE_BALL, 20, 13, STAY, NONE, 3, CARBOS
-	object SPRITE_BALL, 15, 12, STAY, NONE, 4, TM_37
+	object SPRITE_BALL, 15, 12, STAY, NONE, 4, TM_EGG_BOMB
 
 	; warp-to
 	warp_to 0, 4, SAFARI_ZONE_EAST_WIDTH ; SAFARI_ZONE_NORTH
--- a/data/maps/objects/SafariZoneNorth.asm
+++ b/data/maps/objects/SafariZoneNorth.asm
@@ -21,7 +21,7 @@
 
 	db 2 ; objects
 	object SPRITE_BALL, 25, 1, STAY, NONE, 1, PROTEIN
-	object SPRITE_BALL, 19, 7, STAY, NONE, 2, TM_40
+	object SPRITE_BALL, 19, 7, STAY, NONE, 2, TM_SKULL_BASH
 
 	; warp-to
 	warp_to 2, 35, SAFARI_ZONE_NORTH_WIDTH ; SAFARI_ZONE_WEST
--- a/data/maps/objects/SafariZoneWest.asm
+++ b/data/maps/objects/SafariZoneWest.asm
@@ -19,7 +19,7 @@
 
 	db 4 ; objects
 	object SPRITE_BALL, 8, 20, STAY, NONE, 1, MAX_POTION
-	object SPRITE_BALL, 9, 7, STAY, NONE, 2, TM_32
+	object SPRITE_BALL, 9, 7, STAY, NONE, 2, TM_DOUBLE_TEAM
 	object SPRITE_BALL, 18, 18, STAY, NONE, 3, MAX_REVIVE
 	object SPRITE_BALL, 19, 7, STAY, NONE, 4, GOLD_TEETH
 
--- a/data/maps/objects/SilphCo10F.asm
+++ b/data/maps/objects/SilphCo10F.asm
@@ -15,7 +15,7 @@
 	object SPRITE_ROCKET, 1, 9, STAY, RIGHT, 1, OPP_ROCKET, 39
 	object SPRITE_OAK_AIDE, 10, 2, STAY, LEFT, 2, OPP_SCIENTIST, 11
 	object SPRITE_ERIKA, 9, 15, WALK, 0, 3 ; person
-	object SPRITE_BALL, 2, 12, STAY, NONE, 4, TM_26
+	object SPRITE_BALL, 2, 12, STAY, NONE, 4, TM_EARTHQUAKE
 	object SPRITE_BALL, 4, 14, STAY, NONE, 5, RARE_CANDY
 	object SPRITE_BALL, 5, 11, STAY, NONE, 6, CARBOS
 
--- a/data/maps/objects/SilphCo5F.asm
+++ b/data/maps/objects/SilphCo5F.asm
@@ -18,7 +18,7 @@
 	object SPRITE_OAK_AIDE, 8, 3, STAY, RIGHT, 3, OPP_SCIENTIST, 6
 	object SPRITE_ROCKER, 18, 10, STAY, UP, 4, OPP_JUGGLER, 1
 	object SPRITE_ROCKET, 28, 4, STAY, UP, 5, OPP_ROCKET, 29
-	object SPRITE_BALL, 2, 13, STAY, NONE, 6, TM_09
+	object SPRITE_BALL, 2, 13, STAY, NONE, 6, TM_TAKE_DOWN
 	object SPRITE_BALL, 4, 6, STAY, NONE, 7, PROTEIN
 	object SPRITE_BALL, 21, 16, STAY, NONE, 8, CARD_KEY
 	object SPRITE_CLIPBOARD, 22, 12, STAY, NONE, 9 ; person
--- a/data/maps/objects/SilphCo7F.asm
+++ b/data/maps/objects/SilphCo7F.asm
@@ -22,7 +22,7 @@
 	object SPRITE_ROCKET, 19, 14, STAY, RIGHT, 8, OPP_ROCKET, 34
 	object SPRITE_BLUE, 3, 7, STAY, UP, 9 ; person
 	object SPRITE_BALL, 1, 9, STAY, NONE, 10, CALCIUM
-	object SPRITE_BALL, 24, 11, STAY, NONE, 11, TM_03
+	object SPRITE_BALL, 24, 11, STAY, NONE, 11, TM_SWORDS_DANCE
 
 	; warp-to
 	warp_to 16, 0, SILPH_CO_7F_WIDTH ; SILPH_CO_8F
--- a/data/maps/objects/VictoryRoad1F.asm
+++ b/data/maps/objects/VictoryRoad1F.asm
@@ -11,7 +11,7 @@
 	db 7 ; objects
 	object SPRITE_LASS, 7, 5, STAY, RIGHT, 1, OPP_COOLTRAINER_F, 5
 	object SPRITE_BLACK_HAIR_BOY_1, 3, 2, STAY, DOWN, 2, OPP_COOLTRAINER_M, 5
-	object SPRITE_BALL, 11, 0, STAY, NONE, 3, TM_43
+	object SPRITE_BALL, 11, 0, STAY, NONE, 3, TM_SKY_ATTACK
 	object SPRITE_BALL, 9, 2, STAY, NONE, 4, RARE_CANDY
 	object SPRITE_BOULDER, 5, 15, STAY, BOULDER_MOVEMENT_BYTE_2, 5 ; person
 	object SPRITE_BOULDER, 14, 2, STAY, BOULDER_MOVEMENT_BYTE_2, 6 ; person
--- a/data/maps/objects/VictoryRoad2F.asm
+++ b/data/maps/objects/VictoryRoad2F.asm
@@ -19,9 +19,9 @@
 	object SPRITE_BLACK_HAIR_BOY_2, 4, 2, STAY, DOWN, 4, OPP_POKEMANIAC, 6
 	object SPRITE_BLACK_HAIR_BOY_2, 26, 3, STAY, LEFT, 5, OPP_JUGGLER, 5
 	object SPRITE_BIRD, 11, 5, STAY, UP, 6, MOLTRES, 50
-	object SPRITE_BALL, 27, 5, STAY, NONE, 7, TM_17
+	object SPRITE_BALL, 27, 5, STAY, NONE, 7, TM_SUBMISSION
 	object SPRITE_BALL, 18, 9, STAY, NONE, 8, FULL_HEAL
-	object SPRITE_BALL, 9, 11, STAY, NONE, 9, TM_05
+	object SPRITE_BALL, 9, 11, STAY, NONE, 9, TM_MEGA_KICK
 	object SPRITE_BALL, 11, 0, STAY, NONE, 10, GUARD_SPEC
 	object SPRITE_BOULDER, 4, 14, STAY, BOULDER_MOVEMENT_BYTE_2, 11 ; person
 	object SPRITE_BOULDER, 5, 5, STAY, BOULDER_MOVEMENT_BYTE_2, 12 ; person
--- a/data/maps/objects/VictoryRoad3F.asm
+++ b/data/maps/objects/VictoryRoad3F.asm
@@ -15,7 +15,7 @@
 	object SPRITE_BLACK_HAIR_BOY_1, 6, 14, STAY, LEFT, 3, OPP_COOLTRAINER_M, 3
 	object SPRITE_LASS, 13, 3, STAY, RIGHT, 4, OPP_COOLTRAINER_F, 3
 	object SPRITE_BALL, 26, 5, STAY, NONE, 5, MAX_REVIVE
-	object SPRITE_BALL, 7, 7, STAY, NONE, 6, TM_47
+	object SPRITE_BALL, 7, 7, STAY, NONE, 6, TM_EXPLOSION
 	object SPRITE_BOULDER, 22, 3, STAY, BOULDER_MOVEMENT_BYTE_2, 7 ; person
 	object SPRITE_BOULDER, 13, 12, STAY, BOULDER_MOVEMENT_BYTE_2, 8 ; person
 	object SPRITE_BOULDER, 24, 10, STAY, BOULDER_MOVEMENT_BYTE_2, 9 ; person
--- a/data/pokemon/base_stats/abra.asm
+++ b/data/pokemon/base_stats/abra.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 29, 30, 31, 32, 33, 34, 35, 40, 44, 45, 46, 49, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/aerodactyl.asm
+++ b/data/pokemon/base_stats/aerodactyl.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 23, 31, 32, 33, 34, 38, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, DRAGON_RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/alakazam.asm
+++ b/data/pokemon/base_stats/alakazam.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 28, 29, 30, 31, 32, 33, 34, 35, 40, 44, 45, 46, 49, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/arbok.asm
+++ b/data/pokemon/base_stats/arbok.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 21, 26, 27, 28, 31, 32, 34, 40, 44, 48, 50, 54
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/arcanine.asm
+++ b/data/pokemon/base_stats/arcanine.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 23, 28, 30, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, DRAGON_RAGE, DIG, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/articuno.asm
+++ b/data/pokemon/base_stats/articuno.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 11, 12, 13, 14, 15, 20, 31, 32, 33, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/beedrill.asm
+++ b/data/pokemon/base_stats/beedrill.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 15, 20, 21, 31, 32, 33, 34, 39, 40, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/bellsprout.asm
+++ b/data/pokemon/base_stats/bellsprout.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/blastoise.asm
+++ b/data/pokemon/base_stats/blastoise.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 26, 27, 28, 31, 32, 33, 34, 40, 44, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/bulbasaur.asm
+++ b/data/pokemon/base_stats/bulbasaur.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/butterfree.asm
+++ b/data/pokemon/base_stats/butterfree.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 21, 22, 29, 30, 31, 32, 33, 34, 39, 44, 46, 50
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, REST, PSYWAVE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/chansey.asm
+++ b/data/pokemon/base_stats/chansey.asm
@@ -14,7 +14,7 @@
 	db 4 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 35, 37, 38, 40, 41, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, EGG_BOMB, FIRE_BLAST, SKULL_BASH, SOFTBOILED, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/charizard.asm
+++ b/data/pokemon/base_stats/charizard.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 3, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 23, 26, 27, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50, 51, 54
+	tmhm MEGA_PUNCH, SWORDS_DANCE, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DRAGON_RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/charmander.asm
+++ b/data/pokemon/base_stats/charmander.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 3, 5, 6, 8, 9, 10, 17, 18, 19, 20, 23, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50, 51, 54
+	tmhm MEGA_PUNCH, SWORDS_DANCE, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DRAGON_RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/charmeleon.asm
+++ b/data/pokemon/base_stats/charmeleon.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 3, 5, 6, 8, 9, 10, 17, 18, 19, 20, 23, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50, 51, 54
+	tmhm MEGA_PUNCH, SWORDS_DANCE, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DRAGON_RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/clefable.asm
+++ b/data/pokemon/base_stats/clefable.asm
@@ -14,7 +14,7 @@
 	db 4 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 35, 38, 40, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/clefairy.asm
+++ b/data/pokemon/base_stats/clefairy.asm
@@ -14,7 +14,7 @@
 	db 4 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 35, 38, 40, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/cloyster.asm
+++ b/data/pokemon/base_stats/cloyster.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 15, 20, 30, 31, 32, 33, 34, 36, 39, 44, 47, 49, 50, 53
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, SWIFT, REST, EXPLOSION, TRI_ATTACK, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/cubone.asm
+++ b/data/pokemon/base_stats/cubone.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 38, 40, 44, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dewgong.asm
+++ b/data/pokemon/base_stats/dewgong.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 31, 32, 34, 40, 44, 50, 53, 54
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/diglett.asm
+++ b/data/pokemon/base_stats/diglett.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 26, 27, 28, 31, 32, 34, 44, 48, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, REST, ROCK_SLIDE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dodrio.asm
+++ b/data/pokemon/base_stats/dodrio.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 4, 6, 8, 9, 10, 15, 20, 31, 32, 33, 34, 40, 43, 44, 49, 50, 52
+	tmhm WHIRLWIND, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, SKY_ATTACK, REST, TRI_ATTACK, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/doduo.asm
+++ b/data/pokemon/base_stats/doduo.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 4, 6, 8, 9, 10, 20, 31, 32, 33, 34, 40, 43, 44, 49, 50, 52
+	tmhm WHIRLWIND, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, SKY_ATTACK, REST, TRI_ATTACK, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dragonair.asm
+++ b/data/pokemon/base_stats/dragonair.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 23, 24, 25, 31, 32, 33, 34, 38, 39, 40, 44, 45, 50, 53
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, DRAGON_RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dragonite.asm
+++ b/data/pokemon/base_stats/dragonite.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 23, 24, 25, 31, 32, 33, 34, 38, 39, 40, 44, 45, 50, 53, 54
+	tmhm RAZOR_WIND, TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, DRAGON_RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dratini.asm
+++ b/data/pokemon/base_stats/dratini.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 20, 23, 24, 25, 31, 32, 33, 34, 38, 39, 40, 44, 45, 50, 53
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, DRAGON_RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/drowzee.asm
+++ b/data/pokemon/base_stats/drowzee.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 29, 30, 31, 32, 33, 34, 35, 40, 42, 44, 45, 46, 49, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, DREAM_EATER, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/dugtrio.asm
+++ b/data/pokemon/base_stats/dugtrio.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 26, 27, 28, 31, 32, 34, 44, 48, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, REST, ROCK_SLIDE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/eevee.asm
+++ b/data/pokemon/base_stats/eevee.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 31, 32, 33, 34, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/ekans.asm
+++ b/data/pokemon/base_stats/ekans.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 21, 26, 27, 28, 31, 32, 34, 40, 44, 48, 50, 54
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/electabuzz.asm
+++ b/data/pokemon/base_stats/electabuzz.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 24, 25, 29, 30, 31, 32, 33, 34, 35, 39, 40, 44, 45, 46, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/electrode.asm
+++ b/data/pokemon/base_stats/electrode.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 15, 20, 24, 25, 30, 31, 32, 33, 34, 36, 39, 40, 44, 45, 47, 50, 55
+	tmhm TOXIC, TAKE_DOWN, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, EXPLOSION, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/exeggcute.asm
+++ b/data/pokemon/base_stats/exeggcute.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 20, 29, 30, 31, 32, 33, 34, 36, 37, 44, 46, 47, 50
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, EGG_BOMB, REST, PSYWAVE, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/exeggutor.asm
+++ b/data/pokemon/base_stats/exeggutor.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 15, 20, 21, 22, 29, 30, 31, 32, 33, 34, 36, 37, 44, 46, 47, 50, 54
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, EGG_BOMB, REST, PSYWAVE, EXPLOSION, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/farfetchd.asm
+++ b/data/pokemon/base_stats/farfetchd.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 3, 4, 6, 8, 9, 10, 20, 31, 32, 33, 34, 39, 40, 44, 50, 51, 52
+	tmhm RAZOR_WIND, SWORDS_DANCE, WHIRLWIND, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/fearow.asm
+++ b/data/pokemon/base_stats/fearow.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 31, 32, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/flareon.asm
+++ b/data/pokemon/base_stats/flareon.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/gastly.asm
+++ b/data/pokemon/base_stats/gastly.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 20, 21, 24, 25, 29, 31, 32, 34, 36, 42, 44, 46, 47, 50
+	tmhm TOXIC, RAGE, MEGA_DRAIN, THUNDERBOLT, THUNDER, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, DREAM_EATER, REST, PSYWAVE, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/gengar.asm
+++ b/data/pokemon/base_stats/gengar.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 21, 24, 25, 29, 31, 32, 34, 35, 36, 40, 42, 44, 46, 47, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, MEGA_DRAIN, THUNDERBOLT, THUNDER, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SELFDESTRUCT, SKULL_BASH, DREAM_EATER, REST, PSYWAVE, EXPLOSION, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/geodude.asm
+++ b/data/pokemon/base_stats/geodude.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 6, 8, 9, 10, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 36, 38, 44, 47, 48, 50, 54
+	tmhm MEGA_PUNCH, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/gloom.asm
+++ b/data/pokemon/base_stats/gloom.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/golbat.asm
+++ b/data/pokemon/base_stats/golbat.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 21, 31, 32, 34, 39, 44, 50
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/goldeen.asm
+++ b/data/pokemon/base_stats/goldeen.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 9, 10, 11, 12, 13, 14, 20, 31, 32, 34, 39, 40, 44, 50, 53
+	tmhm TOXIC, HORN_DRILL, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/golduck.asm
+++ b/data/pokemon/base_stats/golduck.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 28, 31, 32, 34, 39, 40, 44, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/golem.asm
+++ b/data/pokemon/base_stats/golem.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 36, 38, 44, 47, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/graveler.asm
+++ b/data/pokemon/base_stats/graveler.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 6, 8, 9, 10, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 36, 38, 44, 47, 48, 50, 54
+	tmhm MEGA_PUNCH, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/grimer.asm
+++ b/data/pokemon/base_stats/grimer.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 20, 21, 24, 25, 31, 32, 34, 36, 38, 44, 47, 50
+	tmhm TOXIC, BODY_SLAM, RAGE, MEGA_DRAIN, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/growlithe.asm
+++ b/data/pokemon/base_stats/growlithe.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 23, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, DRAGON_RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/gyarados.asm
+++ b/data/pokemon/base_stats/gyarados.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 15, 20, 23, 24, 25, 31, 32, 33, 34, 38, 40, 44, 50, 53, 54
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, DRAGON_RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/haunter.asm
+++ b/data/pokemon/base_stats/haunter.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 20, 21, 24, 25, 29, 31, 32, 34, 36, 42, 44, 46, 47, 50
+	tmhm TOXIC, RAGE, MEGA_DRAIN, THUNDERBOLT, THUNDER, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, DREAM_EATER, REST, PSYWAVE, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/hitmonchan.asm
+++ b/data/pokemon/base_stats/hitmonchan.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 31, 32, 34, 35, 39, 40, 44, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SWIFT, SKULL_BASH, REST, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/hitmonlee.asm
+++ b/data/pokemon/base_stats/hitmonlee.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 31, 32, 34, 35, 39, 40, 44, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SWIFT, SKULL_BASH, REST, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/horsea.asm
+++ b/data/pokemon/base_stats/horsea.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 20, 31, 32, 34, 39, 40, 44, 50, 53
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/hypno.asm
+++ b/data/pokemon/base_stats/hypno.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 29, 30, 31, 32, 33, 34, 35, 40, 42, 44, 45, 46, 49, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, DREAM_EATER, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/ivysaur.asm
+++ b/data/pokemon/base_stats/ivysaur.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/jigglypuff.asm
+++ b/data/pokemon/base_stats/jigglypuff.asm
@@ -14,7 +14,7 @@
 	db 4 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 38, 40, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/jolteon.asm
+++ b/data/pokemon/base_stats/jolteon.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 24, 25, 31, 32, 33, 34, 39, 40, 44, 45, 50, 55
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/jynx.asm
+++ b/data/pokemon/base_stats/jynx.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 29, 30, 31, 32, 33, 34, 35, 40, 44, 46, 50
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/kabuto.asm
+++ b/data/pokemon/base_stats/kabuto.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 20, 31, 32, 33, 34, 44, 50, 53
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/kabutops.asm
+++ b/data/pokemon/base_stats/kabutops.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 20, 31, 32, 33, 34, 40, 44, 50, 53
+	tmhm RAZOR_WIND, SWORDS_DANCE, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, SEISMIC_TOSS, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/kadabra.asm
+++ b/data/pokemon/base_stats/kadabra.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 28, 29, 30, 31, 32, 33, 34, 35, 40, 44, 45, 46, 49, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/kangaskhan.asm
+++ b/data/pokemon/base_stats/kangaskhan.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 24, 25, 26, 27, 31, 32, 34, 38, 40, 44, 48, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/kingler.asm
+++ b/data/pokemon/base_stats/kingler.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 20, 31, 32, 34, 44, 50, 51, 53, 54
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, BIDE, REST, SUBSTITUTE, CUT, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/koffing.asm
+++ b/data/pokemon/base_stats/koffing.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 20, 24, 25, 31, 32, 34, 36, 38, 44, 47, 50
+	tmhm TOXIC, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/krabby.asm
+++ b/data/pokemon/base_stats/krabby.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 11, 12, 13, 14, 20, 31, 32, 34, 44, 50, 51, 53, 54
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MIMIC, DOUBLE_TEAM, BIDE, REST, SUBSTITUTE, CUT, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/lapras.asm
+++ b/data/pokemon/base_stats/lapras.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 22, 23, 24, 25, 29, 31, 32, 33, 34, 40, 44, 46, 50, 53, 54
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, SOLARBEAM, DRAGON_RAGE, THUNDERBOLT, THUNDER, PSYCHIC_M, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/lickitung.asm
+++ b/data/pokemon/base_stats/lickitung.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 24, 25, 26, 27, 31, 32, 34, 38, 40, 44, 50, 51, 53, 54
+	tmhm MEGA_PUNCH, SWORDS_DANCE, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, SUBSTITUTE, CUT, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/machamp.asm
+++ b/data/pokemon/base_stats/machamp.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 38, 40, 44, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/machoke.asm
+++ b/data/pokemon/base_stats/machoke.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 38, 40, 44, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/machop.asm
+++ b/data/pokemon/base_stats/machop.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 35, 38, 40, 44, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/magmar.asm
+++ b/data/pokemon/base_stats/magmar.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 29, 30, 31, 32, 34, 35, 38, 40, 44, 46, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, FIRE_BLAST, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/magnemite.asm
+++ b/data/pokemon/base_stats/magnemite.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 20, 24, 25, 30, 31, 32, 33, 34, 39, 44, 45, 50, 55
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, THUNDERBOLT, THUNDER, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, REST, THUNDER_WAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/magneton.asm
+++ b/data/pokemon/base_stats/magneton.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 15, 20, 24, 25, 30, 31, 32, 33, 34, 39, 44, 45, 50, 55
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, REST, THUNDER_WAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/mankey.asm
+++ b/data/pokemon/base_stats/mankey.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 16, 17, 18, 19, 20, 24, 25, 28, 31, 32, 34, 35, 39, 40, 44, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SWIFT, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/marowak.asm
+++ b/data/pokemon/base_stats/marowak.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 26, 27, 28, 31, 32, 34, 38, 40, 44, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/meowth.asm
+++ b/data/pokemon/base_stats/meowth.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 16, 20, 24, 25, 31, 32, 34, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, PAY_DAY, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/mew.asm
+++ b/data/pokemon/base_stats/mew.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56
+	tmhm MEGA_PUNCH, RAZOR_WIND, SWORDS_DANCE, WHIRLWIND, MEGA_KICK, TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, MEGA_DRAIN, SOLARBEAM, DRAGON_RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, DIG, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SELFDESTRUCT, EGG_BOMB, FIRE_BLAST, SWIFT, SKULL_BASH, SOFTBOILED, DREAM_EATER, SKY_ATTACK, REST, THUNDER_WAVE, PSYWAVE, EXPLOSION, ROCK_SLIDE, TRI_ATTACK, SUBSTITUTE, CUT, FLY, SURF, STRENGTH, FLASH, UNUSED
 	; end
 
 	db %11111111 ; padding
--- a/data/pokemon/base_stats/mewtwo.asm
+++ b/data/pokemon/base_stats/mewtwo.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 35, 36, 38, 40, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SELFDESTRUCT, FIRE_BLAST, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/moltres.asm
+++ b/data/pokemon/base_stats/moltres.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 31, 32, 33, 34, 38, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/mrmime.asm
+++ b/data/pokemon/base_stats/mrmime.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 35, 40, 44, 45, 46, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/muk.asm
+++ b/data/pokemon/base_stats/muk.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 15, 20, 21, 24, 25, 31, 32, 34, 36, 38, 44, 47, 50
+	tmhm TOXIC, BODY_SLAM, HYPER_BEAM, RAGE, MEGA_DRAIN, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidoking.asm
+++ b/data/pokemon/base_stats/nidoking.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 31, 32, 33, 34, 38, 40, 44, 48, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidoqueen.asm
+++ b/data/pokemon/base_stats/nidoqueen.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 31, 32, 33, 34, 38, 40, 44, 48, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidoranf.asm
+++ b/data/pokemon/base_stats/nidoranf.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 14, 20, 24, 25, 31, 32, 33, 34, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidoranm.asm
+++ b/data/pokemon/base_stats/nidoranm.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 14, 20, 24, 25, 31, 32, 33, 34, 40, 44, 50
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidorina.asm
+++ b/data/pokemon/base_stats/nidorina.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 24, 25, 31, 32, 33, 34, 40, 44, 50
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/nidorino.asm
+++ b/data/pokemon/base_stats/nidorino.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 24, 25, 31, 32, 33, 34, 40, 44, 50
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/ninetales.asm
+++ b/data/pokemon/base_stats/ninetales.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 15, 20, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/oddish.asm
+++ b/data/pokemon/base_stats/oddish.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/omanyte.asm
+++ b/data/pokemon/base_stats/omanyte.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 20, 31, 32, 33, 34, 44, 50, 53
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/omastar.asm
+++ b/data/pokemon/base_stats/omastar.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 20, 31, 32, 33, 34, 40, 44, 50, 53
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, SEISMIC_TOSS, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/onix.asm
+++ b/data/pokemon/base_stats/onix.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 26, 27, 28, 31, 32, 34, 36, 40, 44, 47, 48, 50, 54
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, SKULL_BASH, REST, EXPLOSION, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/paras.asm
+++ b/data/pokemon/base_stats/paras.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 20, 21, 22, 28, 31, 32, 33, 34, 40, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/parasect.asm
+++ b/data/pokemon/base_stats/parasect.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 20, 21, 22, 28, 31, 32, 33, 34, 40, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/persian.asm
+++ b/data/pokemon/base_stats/persian.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 15, 16, 20, 24, 25, 31, 32, 34, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, HYPER_BEAM, PAY_DAY, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/pidgeot.asm
+++ b/data/pokemon/base_stats/pidgeot.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 31, 32, 33, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/pidgeotto.asm
+++ b/data/pokemon/base_stats/pidgeotto.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 20, 31, 32, 33, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/pidgey.asm
+++ b/data/pokemon/base_stats/pidgey.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 20, 31, 32, 33, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/pikachu.asm
+++ b/data/pokemon/base_stats/pikachu.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 16, 17, 19, 20, 24, 25, 31, 32, 33, 34, 39, 40, 44, 45, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, PAY_DAY, SUBMISSION, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/pinsir.asm
+++ b/data/pokemon/base_stats/pinsir.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 17, 19, 20, 31, 32, 34, 44, 50, 51, 54
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, SEISMIC_TOSS, RAGE, MIMIC, DOUBLE_TEAM, BIDE, REST, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/poliwag.asm
+++ b/data/pokemon/base_stats/poliwag.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 20, 29, 31, 32, 34, 40, 44, 46, 50, 53
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/poliwhirl.asm
+++ b/data/pokemon/base_stats/poliwhirl.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 26, 27, 29, 31, 32, 34, 35, 40, 44, 46, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/poliwrath.asm
+++ b/data/pokemon/base_stats/poliwrath.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 26, 27, 29, 31, 32, 34, 35, 40, 44, 46, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, PSYCHIC_M, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SKULL_BASH, REST, PSYWAVE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/ponyta.asm
+++ b/data/pokemon/base_stats/ponyta.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 20, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/porygon.asm
+++ b/data/pokemon/base_stats/porygon.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 13, 14, 15, 20, 24, 25, 29, 30, 31, 32, 33, 34, 39, 40, 44, 45, 46, 49, 50, 55
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/primeape.asm
+++ b/data/pokemon/base_stats/primeape.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 16, 17, 18, 19, 20, 24, 25, 28, 31, 32, 34, 35, 39, 40, 44, 48, 50, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, DIG, MIMIC, DOUBLE_TEAM, BIDE, METRONOME, SWIFT, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/psyduck.asm
+++ b/data/pokemon/base_stats/psyduck.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 28, 31, 32, 34, 39, 40, 44, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/raichu.asm
+++ b/data/pokemon/base_stats/raichu.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 15, 16, 17, 19, 20, 24, 25, 31, 32, 33, 34, 39, 40, 44, 45, 50, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, PAY_DAY, SUBMISSION, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/rapidash.asm
+++ b/data/pokemon/base_stats/rapidash.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 15, 20, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/raticate.asm
+++ b/data/pokemon/base_stats/raticate.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 15, 20, 24, 25, 28, 31, 32, 34, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/rattata.asm
+++ b/data/pokemon/base_stats/rattata.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 14, 20, 24, 25, 28, 31, 32, 34, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/rhydon.asm
+++ b/data/pokemon/base_stats/rhydon.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 31, 32, 34, 38, 40, 44, 48, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/rhyhorn.asm
+++ b/data/pokemon/base_stats/rhyhorn.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 20, 24, 25, 26, 27, 28, 31, 32, 34, 38, 40, 44, 48, 50, 54
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/sandshrew.asm
+++ b/data/pokemon/base_stats/sandshrew.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 17, 19, 20, 26, 27, 28, 31, 32, 34, 39, 40, 44, 48, 50, 51, 54
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, SUBMISSION, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/sandslash.asm
+++ b/data/pokemon/base_stats/sandslash.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 17, 19, 20, 26, 27, 28, 31, 32, 34, 39, 40, 44, 48, 50, 51, 54
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, SUBMISSION, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, ROCK_SLIDE, SUBSTITUTE, CUT, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/scyther.asm
+++ b/data/pokemon/base_stats/scyther.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 15, 20, 31, 32, 34, 39, 40, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/seadra.asm
+++ b/data/pokemon/base_stats/seadra.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 15, 20, 31, 32, 34, 39, 40, 44, 50, 53
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/seaking.asm
+++ b/data/pokemon/base_stats/seaking.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 9, 10, 11, 12, 13, 14, 15, 20, 31, 32, 34, 39, 40, 44, 50, 53
+	tmhm TOXIC, HORN_DRILL, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/seel.asm
+++ b/data/pokemon/base_stats/seel.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 20, 31, 32, 34, 40, 44, 50, 53, 54
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, PAY_DAY, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/shellder.asm
+++ b/data/pokemon/base_stats/shellder.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 20, 30, 31, 32, 33, 34, 36, 39, 44, 47, 49, 50, 53
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, SWIFT, REST, EXPLOSION, TRI_ATTACK, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/slowbro.asm
+++ b/data/pokemon/base_stats/slowbro.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 27, 28, 29, 30, 31, 32, 33, 34, 38, 39, 40, 44, 45, 46, 49, 50, 53, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, EARTHQUAKE, FISSURE, DIG, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, SURF, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/slowpoke.asm
+++ b/data/pokemon/base_stats/slowpoke.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 16, 20, 26, 27, 28, 29, 30, 31, 32, 33, 34, 38, 39, 40, 44, 45, 46, 49, 50, 53, 54, 55
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, PAY_DAY, RAGE, EARTHQUAKE, FISSURE, DIG, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, SURF, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/snorlax.asm
+++ b/data/pokemon/base_stats/snorlax.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 29, 31, 32, 33, 34, 35, 36, 38, 40, 44, 46, 48, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, PAY_DAY, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, PSYCHIC_M, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, METRONOME, SELFDESTRUCT, FIRE_BLAST, SKULL_BASH, REST, PSYWAVE, ROCK_SLIDE, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/spearow.asm
+++ b/data/pokemon/base_stats/spearow.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 20, 31, 32, 34, 39, 43, 44, 50, 52
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, SKY_ATTACK, REST, SUBSTITUTE, FLY
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/squirtle.asm
+++ b/data/pokemon/base_stats/squirtle.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 28, 31, 32, 33, 34, 40, 44, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/starmie.asm
+++ b/data/pokemon/base_stats/starmie.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 15, 20, 24, 25, 29, 30, 31, 32, 33, 34, 39, 40, 44, 45, 46, 49, 50, 53, 55
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, SURF, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/staryu.asm
+++ b/data/pokemon/base_stats/staryu.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 11, 12, 13, 14, 20, 24, 25, 29, 30, 31, 32, 33, 34, 39, 40, 44, 45, 46, 49, 50, 53, 55
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, SURF, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/tangela.asm
+++ b/data/pokemon/base_stats/tangela.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 20, 21, 22, 31, 32, 34, 40, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, BIDE, SKULL_BASH, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/tauros.asm
+++ b/data/pokemon/base_stats/tauros.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 7, 8, 9, 10, 13, 14, 15, 20, 24, 25, 26, 27, 31, 32, 34, 38, 40, 44, 50, 54
+	tmhm TOXIC, HORN_DRILL, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, EARTHQUAKE, FISSURE, MIMIC, DOUBLE_TEAM, BIDE, FIRE_BLAST, SKULL_BASH, REST, SUBSTITUTE, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/tentacool.asm
+++ b/data/pokemon/base_stats/tentacool.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 11, 12, 13, 14, 20, 21, 31, 32, 33, 34, 40, 44, 50, 51, 53
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, RAGE, MEGA_DRAIN, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, CUT, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/tentacruel.asm
+++ b/data/pokemon/base_stats/tentacruel.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 11, 12, 13, 14, 15, 20, 21, 31, 32, 33, 34, 40, 44, 50, 51, 53
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MEGA_DRAIN, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, CUT, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/vaporeon.asm
+++ b/data/pokemon/base_stats/vaporeon.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 11, 12, 13, 14, 15, 20, 31, 32, 33, 34, 39, 40, 44, 50, 53
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, RAGE, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKULL_BASH, REST, SUBSTITUTE, SURF
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/venomoth.asm
+++ b/data/pokemon/base_stats/venomoth.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 21, 22, 29, 30, 31, 32, 33, 34, 39, 44, 46, 50
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, REST, PSYWAVE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/venonat.asm
+++ b/data/pokemon/base_stats/venonat.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 10, 20, 21, 22, 29, 31, 32, 33, 34, 44, 46, 50
+	tmhm TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, PSYCHIC_M, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, PSYWAVE, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/venusaur.asm
+++ b/data/pokemon/base_stats/venusaur.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/victreebel.asm
+++ b/data/pokemon/base_stats/victreebel.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/vileplume.asm
+++ b/data/pokemon/base_stats/vileplume.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 8, 9, 10, 15, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/voltorb.asm
+++ b/data/pokemon/base_stats/voltorb.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 9, 20, 24, 25, 30, 31, 32, 33, 34, 36, 39, 44, 45, 47, 50, 55
+	tmhm TOXIC, TAKE_DOWN, RAGE, THUNDERBOLT, THUNDER, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SELFDESTRUCT, SWIFT, REST, THUNDER_WAVE, EXPLOSION, SUBSTITUTE, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/vulpix.asm
+++ b/data/pokemon/base_stats/vulpix.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 8, 9, 10, 20, 28, 31, 32, 33, 34, 38, 39, 40, 44, 50
+	tmhm TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SWIFT, SKULL_BASH, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/wartortle.asm
+++ b/data/pokemon/base_stats/wartortle.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 28, 31, 32, 33, 34, 40, 44, 50, 53, 54
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, DIG, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SKULL_BASH, REST, SUBSTITUTE, SURF, STRENGTH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/weepinbell.asm
+++ b/data/pokemon/base_stats/weepinbell.asm
@@ -14,7 +14,7 @@
 	db 3 ; growth rate
 
 	; tm/hm learnset
-	tmhm 3, 6, 9, 10, 20, 21, 22, 31, 32, 33, 34, 44, 50, 51
+	tmhm SWORDS_DANCE, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, SOLARBEAM, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, REST, SUBSTITUTE, CUT
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/weezing.asm
+++ b/data/pokemon/base_stats/weezing.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 6, 15, 20, 24, 25, 31, 32, 34, 36, 38, 44, 47, 50
+	tmhm TOXIC, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, BIDE, SELFDESTRUCT, FIRE_BLAST, REST, EXPLOSION, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/wigglytuff.asm
+++ b/data/pokemon/base_stats/wigglytuff.asm
@@ -14,7 +14,7 @@
 	db 4 ; growth rate
 
 	; tm/hm learnset
-	tmhm 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 24, 25, 29, 30, 31, 32, 33, 34, 38, 40, 44, 45, 46, 49, 50, 54, 55
+	tmhm MEGA_PUNCH, MEGA_KICK, TOXIC, BODY_SLAM, TAKE_DOWN, DOUBLE_EDGE, BUBBLEBEAM, WATER_GUN, ICE_BEAM, BLIZZARD, HYPER_BEAM, SUBMISSION, COUNTER, SEISMIC_TOSS, RAGE, SOLARBEAM, THUNDERBOLT, THUNDER, PSYCHIC_M, TELEPORT, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, FIRE_BLAST, SKULL_BASH, REST, THUNDER_WAVE, PSYWAVE, TRI_ATTACK, SUBSTITUTE, STRENGTH, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/zapdos.asm
+++ b/data/pokemon/base_stats/zapdos.asm
@@ -14,7 +14,7 @@
 	db 5 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 15, 20, 24, 25, 31, 32, 33, 34, 39, 43, 44, 45, 50, 52, 55
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, HYPER_BEAM, RAGE, THUNDERBOLT, THUNDER, MIMIC, DOUBLE_TEAM, REFLECT, BIDE, SWIFT, SKY_ATTACK, REST, THUNDER_WAVE, SUBSTITUTE, FLY, FLASH
 	; end
 
 	db 0 ; padding
--- a/data/pokemon/base_stats/zubat.asm
+++ b/data/pokemon/base_stats/zubat.asm
@@ -14,7 +14,7 @@
 	db 0 ; growth rate
 
 	; tm/hm learnset
-	tmhm 2, 4, 6, 9, 10, 20, 21, 31, 32, 34, 39, 44, 50
+	tmhm RAZOR_WIND, WHIRLWIND, TOXIC, TAKE_DOWN, DOUBLE_EDGE, RAGE, MEGA_DRAIN, MIMIC, DOUBLE_TEAM, BIDE, SWIFT, REST, SUBSTITUTE
 	; end
 
 	db 0 ; padding
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -2,7 +2,7 @@
 	ld a, 1
 	ld [wActionResultOrTookBattleTurn], a ; initialise to success value
 	ld a, [wcf91] ;contains item_ID
-	cp HM_01
+	cp HM01
 	jp nc, ItemUseTMHM
 	ld hl, ItemUsePtrTable
 	dec a
@@ -2201,10 +2201,10 @@
 	and a
 	jp nz, ItemUseNotTime
 	ld a, [wcf91]
-	sub TM_01
+	sub TM01 ; underflows below 0 for HM items (before TM items)
 	push af
 	jr nc, .skipAdding
-	add 55 ; if item is an HM, add 55
+	add NUM_TMS + NUM_HMS ; adjust HM IDs to come after TM IDs
 .skipAdding
 	inc a
 	ld [wd11e], a
@@ -2661,7 +2661,7 @@
 	ld a, $01
 	ld [wIsKeyItem], a
 	ld a, [wcf91]
-	cp HM_01 ; is the item an HM or TM?
+	cp HM01 ; is the item an HM or TM?
 	jr nc, .checkIfItemIsHM
 ; if the item is not an HM or TM
 	push af
--- a/engine/items/tm_prices.asm
+++ b/engine/items/tm_prices.asm
@@ -2,8 +2,8 @@
 ; Input:  [wcf91] = Item Id of a TM
 ; Output: Stores the TM price at hItemPrice
 	ld a, [wcf91] ; a contains TM item id
-	sub TM_01
-	ret c
+	sub TM01 ; underflows below 0 for HM items (before TM items)
+	ret c ; HMs are priceless
 	ld d, a
 	ld hl, TechnicalMachinePrices
 	srl a
--- a/engine/menus/start_sub_menus.asm
+++ b/engine/menus/start_sub_menus.asm
@@ -384,7 +384,7 @@
 ; use item
 	ld [wPseudoItemID], a ; a must be 0 due to above conditional jump
 	ld a, [wcf91]
-	cp HM_01
+	cp HM01
 	jr nc, .useItem_partyMenu
 	ld hl, UsableItems_CloseMenu
 	ld de, 1
--- a/home.asm
+++ b/home.asm
@@ -960,7 +960,7 @@
 	ld h, [hl]
 	ld l, a
 	ld a, [wcf91] ; a contains item id
-	cp HM_01
+	cp HM01
 	jr nc, .getTMPrice
 	ld bc, $3
 .loop
--- a/home/names.asm
+++ b/home/names.asm
@@ -30,7 +30,7 @@
 	push hl
 	push bc
 	ld a, [wd11e]
-	cp HM_01 ; is this a TM/HM?
+	cp HM01 ; is this a TM/HM?
 	jr nc, .Machine
 
 	ld [wd0b5], a
@@ -56,11 +56,11 @@
 	push bc
 	ld a, [wd11e]
 	push af
-	cp TM_01 ; is this a TM? [not HM]
+	cp TM01 ; is this a TM? [not HM]
 	jr nc, .WriteTM
-; if HM, then write "HM" and add 5 to the item ID, so we can reuse the
+; if HM, then write "HM" and add NUM_HMS to the item ID, so we can reuse the
 ; TM printing code
-	add 5
+	add NUM_HMS
 	ld [wd11e], a
 	ld hl, HiddenPrefix ; points to "HM"
 	ld bc, 2
@@ -74,7 +74,7 @@
 
 ; now get the machine number and convert it to text
 	ld a, [wd11e]
-	sub TM_01 - 1
+	sub TM01 - 1
 	ld b, "0"
 .FirstDigit
 	sub 10
@@ -109,9 +109,9 @@
 ; sets carry if item is HM, clears carry if item is not HM
 ; Input: a = item ID
 IsItemHM::
-	cp HM_01
+	cp HM01
 	jr c, .notHM
-	cp TM_01
+	cp TM01
 	ret
 .notHM
 	and a
--- a/home/names2.asm
+++ b/home/names2.asm
@@ -19,7 +19,7 @@
 
 	; TM names are separate from item names.
 	; BUG: This applies to all names instead of just items.
-	cp HM_01
+	cp HM01
 	jp nc, GetMachineName
 
 	ld a, [hLoadedROMBank]
--- a/macros/data.asm
+++ b/macros/data.asm
@@ -22,12 +22,16 @@
 _tms2 = 0 ; TM25-TM48 (24)
 _tms3 = 0 ; TM49-TM50 + HM01-HM05 (7/24)
 rept _NARG
-	if (\1) < 24 + 1
-_tms1 = _tms1 | (1 << ((\1) - 1))
-	elif (\1) < 48 + 1
-_tms2 = _tms2 | (1 << ((\1) - 1 - 24))
+	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) - 1 - 48))
+_tms3 = _tms3 | (1 << ((\1_TMNUM) - 1 - 48))
+	endc
+	else
+		fail "\1 is not a TM or HM move"
 	endc
 	shift
 endr
--- a/scripts/CeladonCity.asm
+++ b/scripts/CeladonCity.asm
@@ -46,7 +46,7 @@
 	jr nz, .asm_7053f
 	ld hl, TM41PreText
 	call PrintText
-	lb bc, TM_41, 1
+	lb bc, TM_SOFTBOILED, 1
 	call GiveItem
 	jr c, .Success
 	ld hl, TM41NoRoomText
--- a/scripts/CeladonGym.asm
+++ b/scripts/CeladonGym.asm
@@ -47,7 +47,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_ERIKA
-	lb bc, TM_21, 1
+	lb bc, TM_MEGA_DRAIN, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $a
--- a/scripts/CeladonMart3F.asm
+++ b/scripts/CeladonMart3F.asm
@@ -26,7 +26,7 @@
 	jr nz, .asm_a5463
 	ld hl, TM18PreReceiveText
 	call PrintText
-	lb bc, TM_18, 1
+	lb bc, TM_COUNTER, 1
 	call GiveItem
 	jr nc, .BagFull
 	SetEvent EVENT_GOT_TM18
--- a/scripts/CeladonMartRoof.asm
+++ b/scripts/CeladonMartRoof.asm
@@ -90,7 +90,7 @@
 	ld hl, CeladonMartRoofText_48515
 	call PrintText
 	call RemoveItemByIDBank12
-	lb bc, TM_49, 1
+	lb bc, TM_TRI_ATTACK, 1
 	call GiveItem
 	jr nc, .bagFull
 	ld hl, ReceivedTM49Text
@@ -103,7 +103,7 @@
 	ld hl, CeladonMartRoofText_48504
 	call PrintText
 	call RemoveItemByIDBank12
-	lb bc, TM_48, 1
+	lb bc, TM_ROCK_SLIDE, 1
 	call GiveItem
 	jr nc, .bagFull
 	ld hl, CeladonMartRoofText_4850a
@@ -116,7 +116,7 @@
 	ld hl, CeladonMartRoofText_484f3
 	call PrintText
 	call RemoveItemByIDBank12
-	lb bc, TM_13, 1
+	lb bc, TM_ICE_BEAM, 1
 	call GiveItem
 	jr nc, .bagFull
 	ld hl, CeladonMartRoofText_484f9
--- a/scripts/CeruleanCity.asm
+++ b/scripts/CeruleanCity.asm
@@ -299,7 +299,7 @@
 .asm_4ca20
 	ld hl, CeruleanCityText_196f3
 	call PrintText
-	lb bc, TM_28, 1
+	lb bc, TM_DIG, 1
 	call GiveItem
 	jr c, .Success
 	ld hl, TM28NoRoomText
--- a/scripts/CeruleanGym.asm
+++ b/scripts/CeruleanGym.asm
@@ -47,7 +47,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_MISTY
-	lb bc, TM_11, 1
+	lb bc, TM_BUBBLEBEAM, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $6
--- a/scripts/CinnabarGym.asm
+++ b/scripts/CinnabarGym.asm
@@ -144,7 +144,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_BLAINE
-	lb bc, TM_38, 1
+	lb bc, TM_FIRE_BLAST, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $b
--- a/scripts/CinnabarLabMetronomeRoom.asm
+++ b/scripts/CinnabarLabMetronomeRoom.asm
@@ -14,7 +14,7 @@
 	jr nz, .asm_e551a
 	ld hl, TM35PreReceiveText
 	call PrintText
-	lb bc, TM_35, 1
+	lb bc, TM_METRONOME, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedTM35Text
--- a/scripts/CopycatsHouse2F.asm
+++ b/scripts/CopycatsHouse2F.asm
@@ -23,7 +23,7 @@
 	jr z, .asm_62ecd
 	ld hl, TM31PreReceiveText
 	call PrintText
-	lb bc, TM_31, 1
+	lb bc, TM_MIMIC, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedTM31Text
--- a/scripts/FuchsiaGym.asm
+++ b/scripts/FuchsiaGym.asm
@@ -47,7 +47,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_KOGA
-	lb bc, TM_06, 1
+	lb bc, TM_TOXIC, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $a
--- a/scripts/MrPsychicsHouse.asm
+++ b/scripts/MrPsychicsHouse.asm
@@ -10,7 +10,7 @@
 	jr nz, .asm_9e72b
 	ld hl, TM29PreReceiveText
 	call PrintText
-	lb bc, TM_29, 1
+	lb bc, TM_PSYCHIC_M, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedTM29Text
--- a/scripts/PewterGym.asm
+++ b/scripts/PewterGym.asm
@@ -47,7 +47,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_BROCK
-	lb bc, TM_34, 1
+	lb bc, TM_BIDE, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $5
--- a/scripts/Route12Gate2F.asm
+++ b/scripts/Route12Gate2F.asm
@@ -12,7 +12,7 @@
 	jr c, .asm_0ad3c
 	ld hl, TM39PreReceiveText
 	call PrintText
-	lb bc, TM_39, 1
+	lb bc, TM_SWIFT, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedTM39Text
--- a/scripts/Route16FlyHouse.asm
+++ b/scripts/Route16FlyHouse.asm
@@ -12,7 +12,7 @@
 	jr nz, .asm_13616
 	ld hl, Route16HouseText3
 	call PrintText
-	lb bc, HM_02, 1
+	lb bc, HM_FLY, 1
 	call GiveItem
 	jr nc, .BagFull
 	SetEvent EVENT_GOT_HM02
--- a/scripts/Route2Gate.asm
+++ b/scripts/Route2Gate.asm
@@ -11,7 +11,7 @@
 	jr nz, .asm_5d60d
 	ld a, 10 ; pokemon needed
 	ld [hOaksAideRequirement], a
-	ld a, HM_05 ; oak's aide reward
+	ld a, HM_FLASH ; oak's aide reward
 	ld [hOaksAideRewardItem], a
 	ld [wd11e], a
 	call GetItemName
--- a/scripts/SSAnneCaptainsRoom.asm
+++ b/scripts/SSAnneCaptainsRoom.asm
@@ -22,7 +22,7 @@
 	call PrintText
 	ld hl, ReceivingHM01Text
 	call PrintText
-	lb bc, HM_01, 1
+	lb bc, HM_CUT, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedHM01Text
--- a/scripts/SafariZoneSecretHouse.asm
+++ b/scripts/SafariZoneSecretHouse.asm
@@ -10,7 +10,7 @@
 	jr nz, .asm_20a9b
 	ld hl, SafariZoneSecretHouseText_4a350
 	call PrintText
-	lb bc, HM_03, 1
+	lb bc, HM_SURF, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedHM03Text
--- a/scripts/SaffronGym.asm
+++ b/scripts/SaffronGym.asm
@@ -47,7 +47,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_SABRINA
-	lb bc, TM_46, 1
+	lb bc, TM_PSYWAVE, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $b
--- a/scripts/SilphCo2F.asm
+++ b/scripts/SilphCo2F.asm
@@ -142,7 +142,7 @@
 	jr nz, .asm_59de4
 	ld hl, SilphCo2Text_59ded
 	call PrintText
-	lb bc, TM_36, 1
+	lb bc, TM_SELFDESTRUCT, 1
 	call GiveItem
 	ld hl, TM36NoRoomText
 	jr nc, .asm_59de7
--- a/scripts/VermilionGym.asm
+++ b/scripts/VermilionGym.asm
@@ -66,7 +66,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_LT_SURGE
-	lb bc, TM_24, 1
+	lb bc, TM_THUNDERBOLT, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $7
--- a/scripts/ViridianCity.asm
+++ b/scripts/ViridianCity.asm
@@ -235,7 +235,7 @@
 	jr nz, .gotTm42
 	ld hl, ViridianCityText_191ca
 	call PrintText
-	lb bc, TM_42, 1
+	lb bc, TM_DREAM_EATER, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedTM42Text
--- a/scripts/ViridianGym.asm
+++ b/scripts/ViridianGym.asm
@@ -141,7 +141,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	SetEvent EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
-	lb bc, TM_27, 1
+	lb bc, TM_FISSURE, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld a, $d
--- a/scripts/WardensHouse.asm
+++ b/scripts/WardensHouse.asm
@@ -38,7 +38,7 @@
 .asm_60cba
 	ld hl, WardenThankYouText
 	call PrintText
-	lb bc, HM_04, 1
+	lb bc, HM_STRENGTH, 1
 	call GiveItem
 	jr nc, .BagFull
 	ld hl, ReceivedHM04Text