shithub: pokered

Download patch

ref: 122d715484b79aba71d79caf148bac4a2ec441a5
parent: c57c93d2b2fb06cadafefda37c0974ba1ec9e6c0
parent: 43e0e40d5a4af369661fd6c7aa44d7265b9f6e59
author: Rangi <35663410+Rangi42@users.noreply.github.com>
date: Mon Jul 6 07:52:24 EDT 2020

Merge pull request #261 from Rangi42/master

Port pokecrystal's base data and tmhm structure

--- a/constants.asm
+++ b/constants.asm
@@ -16,12 +16,12 @@
 INCLUDE "constants/pokedex_constants.asm"
 INCLUDE "constants/pokemon_data_constants.asm"
 INCLUDE "constants/trainer_constants.asm"
-INCLUDE "constants/item_constants.asm"
 INCLUDE "constants/type_constants.asm"
 INCLUDE "constants/move_constants.asm"
 INCLUDE "constants/move_animation_constants.asm"
 INCLUDE "constants/move_effect_constants.asm"
 INCLUDE "constants/battle_constants.asm"
+INCLUDE "constants/item_constants.asm"
 INCLUDE "constants/icon_constants.asm"
 INCLUDE "constants/sprite_constants.asm"
 INCLUDE "constants/sprite_data_constants.asm"
--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -102,58 +102,115 @@
 
 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
+; HMs are defined before TMs, so the actual number of TM definitions
+; is not yet available. The TM quantity is hard-coded here and must
+; match the actual number below.
+NUM_TMS EQU 50
+
+add_hm: MACRO
+; Defines three constants:
+; - HM_\1: the item id, starting at $C4
+; - \1_TMNUM: the learnable TM/HM flag, starting at 51
+; - HM##_MOVE: alias for the move id, equal to the value of \1
+; The first usage also defines HM01 as the first HM item id.
+IF !DEF(HM01)
+HM01 EQU const_value
+	enum_start NUM_TMS + 1
+ENDC
+HM_VALUE EQU __enum__ - NUM_TMS
+IF HM_VALUE < 10
+MOVE_FOR_HM EQUS "HM0{d:HM_VALUE}_MOVE"
+ELSE
+MOVE_FOR_HM EQUS "HM{d:HM_VALUE}_MOVE"
+ENDC
+MOVE_FOR_HM = \1
+PURGE MOVE_FOR_HM
+PURGE HM_VALUE
+	const HM_\1
+	enum \1_TMNUM
+ENDM
+
+	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
+; Defines three constants:
+; - TM_\1: the item id, starting at $C9
+; - \1_TMNUM: the learnable TM/HM flag, starting at 1
+; - TM##_MOVE: alias for the move id, equal to the value of \1
+; The first usage also defines TM01 as the first TM item id.
+IF !DEF(TM01)
+TM01 EQU const_value
+	enum_start 1
+ENDC
+IF __enum__ < 10
+MOVE_FOR_TM EQUS "TM0{d:__enum__}_MOVE"
+ELSE
+MOVE_FOR_TM EQUS "TM{d:__enum__}_MOVE"
+ENDC
+MOVE_FOR_TM = \1
+PURGE MOVE_FOR_TM
+	const TM_\1
+	enum \1_TMNUM
+ENDM
+
+	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
+assert NUM_TMS == const_value - TM01, "NUM_TMS ({d:NUM_TMS}) does not match the number of add_tm definitions"
+
+; 50 TMs + 5 HMs = 55 learnable TM/HM flags per Pokémon.
+; These fit in 7 bytes, with one unused bit left over.
+	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/moves/tmhm_moves.asm
+++ b/data/moves/tmhm_moves.asm
@@ -1,56 +1,59 @@
+; The add_hm and add_tm macros in constants/item_constants.asm simultaneously
+; define constants for the item IDs and for the corresponding move values.
+
 TechnicalMachines:
-	db MEGA_PUNCH
-	db RAZOR_WIND
-	db SWORDS_DANCE
-	db WHIRLWIND
-	db MEGA_KICK
-	db TOXIC
-	db HORN_DRILL
-	db BODY_SLAM
-	db TAKE_DOWN
-	db DOUBLE_EDGE
-	db BUBBLEBEAM
-	db WATER_GUN
-	db ICE_BEAM
-	db BLIZZARD
-	db HYPER_BEAM
-	db PAY_DAY
-	db SUBMISSION
-	db COUNTER
-	db SEISMIC_TOSS
-	db RAGE
-	db MEGA_DRAIN
-	db SOLARBEAM
-	db DRAGON_RAGE
-	db THUNDERBOLT
-	db THUNDER
-	db EARTHQUAKE
-	db FISSURE
-	db DIG
-	db PSYCHIC_M
-	db TELEPORT
-	db MIMIC
-	db DOUBLE_TEAM
-	db REFLECT
-	db BIDE
-	db METRONOME
-	db SELFDESTRUCT
-	db EGG_BOMB
-	db FIRE_BLAST
-	db SWIFT
-	db SKULL_BASH
-	db SOFTBOILED
-	db DREAM_EATER
-	db SKY_ATTACK
-	db REST
-	db THUNDER_WAVE
-	db PSYWAVE
-	db EXPLOSION
-	db ROCK_SLIDE
-	db TRI_ATTACK
-	db SUBSTITUTE
-	db CUT
-	db FLY
-	db SURF
-	db STRENGTH
-	db FLASH
+	db TM01_MOVE
+	db TM02_MOVE
+	db TM03_MOVE
+	db TM04_MOVE
+	db TM05_MOVE
+	db TM06_MOVE
+	db TM07_MOVE
+	db TM08_MOVE
+	db TM09_MOVE
+	db TM10_MOVE
+	db TM11_MOVE
+	db TM12_MOVE
+	db TM13_MOVE
+	db TM14_MOVE
+	db TM15_MOVE
+	db TM16_MOVE
+	db TM17_MOVE
+	db TM18_MOVE
+	db TM19_MOVE
+	db TM20_MOVE
+	db TM21_MOVE
+	db TM22_MOVE
+	db TM23_MOVE
+	db TM24_MOVE
+	db TM25_MOVE
+	db TM26_MOVE
+	db TM27_MOVE
+	db TM28_MOVE
+	db TM29_MOVE
+	db TM30_MOVE
+	db TM31_MOVE
+	db TM32_MOVE
+	db TM33_MOVE
+	db TM34_MOVE
+	db TM35_MOVE
+	db TM36_MOVE
+	db TM37_MOVE
+	db TM38_MOVE
+	db TM39_MOVE
+	db TM40_MOVE
+	db TM41_MOVE
+	db TM42_MOVE
+	db TM43_MOVE
+	db TM44_MOVE
+	db TM45_MOVE
+	db TM46_MOVE
+	db TM47_MOVE
+	db TM48_MOVE
+	db TM49_MOVE
+	db TM50_MOVE
+	db HM01_MOVE
+	db HM02_MOVE
+	db HM03_MOVE
+	db HM04_MOVE
+	db HM05_MOVE
--- a/data/pokemon/base_stats/abra.asm
+++ b/data/pokemon/base_stats/abra.asm
@@ -1,28 +1,24 @@
-db DEX_ABRA ; pokedex id
-db 25 ; base hp
-db 20 ; base attack
-db 15 ; base defense
-db 90 ; base speed
-db 105 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 200 ; catch rate
-db 73 ; base exp yield
-INCBIN "gfx/pokemon/front/abra.pic",0,1 ; 55, sprite dimensions
-dw AbraPicFront
-dw AbraPicBack
-; attacks known at lvl 0
-db TELEPORT
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_ABRA ; pokedex id
+
+	db  25,  20,  15,  90, 105
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 200 ; catch rate
+	db 73 ; base exp
+
+	INCBIN "gfx/pokemon/front/abra.pic", 0, 1 ; sprite dimensions
+	dw AbraPicFront, AbraPicBack
+
+	db TELEPORT, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_AERODACTYL ; pokedex id
-db 80 ; base hp
-db 105 ; base attack
-db 65 ; base defense
-db 130 ; base speed
-db 60 ; base special
-db ROCK ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 202 ; base exp yield
-INCBIN "gfx/pokemon/front/aerodactyl.pic",0,1 ; 77, sprite dimensions
-dw AerodactylPicFront
-dw AerodactylPicBack
-; attacks known at lvl 0
-db WING_ATTACK
-db AGILITY
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20,23
-	tmlearn 31,32
-	tmlearn 33,34,38,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_AERODACTYL ; pokedex id
+
+	db  80, 105,  65, 130,  60
+	;   hp  atk  def  spd  spc
+
+	db ROCK, FLYING ; type
+	db 45 ; catch rate
+	db 202 ; base exp
+
+	INCBIN "gfx/pokemon/front/aerodactyl.pic", 0, 1 ; sprite dimensions
+	dw AerodactylPicFront, AerodactylPicBack
+
+	db WING_ATTACK, AGILITY, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_ALAKAZAM ; pokedex id
-db 55 ; base hp
-db 50 ; base attack
-db 45 ; base defense
-db 120 ; base speed
-db 135 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 50 ; catch rate
-db 186 ; base exp yield
-INCBIN "gfx/pokemon/front/alakazam.pic",0,1 ; 77, sprite dimensions
-dw AlakazamPicFront
-dw AlakazamPicBack
-; attacks known at lvl 0
-db TELEPORT
-db CONFUSION
-db DISABLE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20
-	tmlearn 28,29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_ALAKAZAM ; pokedex id
+
+	db  55,  50,  45, 120, 135
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 50 ; catch rate
+	db 186 ; base exp
+
+	INCBIN "gfx/pokemon/front/alakazam.pic", 0, 1 ; sprite dimensions
+	dw AlakazamPicFront, AlakazamPicBack
+
+	db TELEPORT, CONFUSION, DISABLE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ARBOK ; pokedex id
-db 60 ; base hp
-db 85 ; base attack
-db 69 ; base defense
-db 80 ; base speed
-db 65 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 90 ; catch rate
-db 147 ; base exp yield
-INCBIN "gfx/pokemon/front/arbok.pic",0,1 ; 77, sprite dimensions
-dw ArbokPicFront
-dw ArbokPicBack
-; attacks known at lvl 0
-db WRAP
-db LEER
-db POISON_STING
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20,21
-	tmlearn 26,27,28,31,32
-	tmlearn 34,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_ARBOK ; pokedex id
+
+	db  60,  85,  69,  80,  65
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 90 ; catch rate
+	db 147 ; base exp
+
+	INCBIN "gfx/pokemon/front/arbok.pic", 0, 1 ; sprite dimensions
+	dw ArbokPicFront, ArbokPicBack
+
+	db WRAP, LEER, POISON_STING, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ARCANINE ; pokedex id
-db 90 ; base hp
-db 110 ; base attack
-db 80 ; base defense
-db 95 ; base speed
-db 80 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 75 ; catch rate
-db 213 ; base exp yield
-INCBIN "gfx/pokemon/front/arcanine.pic",0,1 ; 77, sprite dimensions
-dw ArcaninePicFront
-dw ArcaninePicBack
-; attacks known at lvl 0
-db ROAR
-db EMBER
-db LEER
-db TAKE_DOWN
-db 5 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20,23
-	tmlearn 28,30,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_ARCANINE ; pokedex id
+
+	db  90, 110,  80,  95,  80
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 75 ; catch rate
+	db 213 ; base exp
+
+	INCBIN "gfx/pokemon/front/arcanine.pic", 0, 1 ; sprite dimensions
+	dw ArcaninePicFront, ArcaninePicBack
+
+	db ROAR, EMBER, LEER, TAKE_DOWN ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ARTICUNO ; pokedex id
-db 90 ; base hp
-db 85 ; base attack
-db 100 ; base defense
-db 85 ; base speed
-db 125 ; base special
-db ICE ; species type 1
-db FLYING ; species type 2
-db 3 ; catch rate
-db 215 ; base exp yield
-INCBIN "gfx/pokemon/front/articuno.pic",0,1 ; 77, sprite dimensions
-dw ArticunoPicFront
-dw ArticunoPicBack
-; attacks known at lvl 0
-db PECK
-db ICE_BEAM
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_ARTICUNO ; pokedex id
+
+	db  90,  85, 100,  85, 125
+	;   hp  atk  def  spd  spc
+
+	db ICE, FLYING ; type
+	db 3 ; catch rate
+	db 215 ; base exp
+
+	INCBIN "gfx/pokemon/front/articuno.pic", 0, 1 ; sprite dimensions
+	dw ArticunoPicFront, ArticunoPicBack
+
+	db PECK, ICE_BEAM, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_BEEDRILL ; pokedex id
-db 65 ; base hp
-db 80 ; base attack
-db 40 ; base defense
-db 75 ; base speed
-db 45 ; base special
-db BUG ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 159 ; base exp yield
-INCBIN "gfx/pokemon/front/beedrill.pic",0,1 ; 77, sprite dimensions
-dw BeedrillPicFront
-dw BeedrillPicBack
-; attacks known at lvl 0
-db FURY_ATTACK
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10,15
-	tmlearn 20,21
-	tmlearn 31,32
-	tmlearn 33,34,39,40
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_BEEDRILL ; pokedex id
+
+	db  65,  80,  40,  75,  45
+	;   hp  atk  def  spd  spc
+
+	db BUG, POISON ; type
+	db 45 ; catch rate
+	db 159 ; base exp
+
+	INCBIN "gfx/pokemon/front/beedrill.pic", 0, 1 ; sprite dimensions
+	dw BeedrillPicFront, BeedrillPicBack
+
+	db FURY_ATTACK, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_BELLSPROUT ; pokedex id
-db 50 ; base hp
-db 75 ; base attack
-db 35 ; base defense
-db 40 ; base speed
-db 70 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 255 ; catch rate
-db 84 ; base exp yield
-INCBIN "gfx/pokemon/front/bellsprout.pic",0,1 ; 55, sprite dimensions
-dw BellsproutPicFront
-dw BellsproutPicBack
-; attacks known at lvl 0
-db VINE_WHIP
-db GROWTH
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_BELLSPROUT ; pokedex id
+
+	db  50,  75,  35,  40,  70
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 255 ; catch rate
+	db 84 ; base exp
+
+	INCBIN "gfx/pokemon/front/bellsprout.pic", 0, 1 ; sprite dimensions
+	dw BellsproutPicFront, BellsproutPicBack
+
+	db VINE_WHIP, GROWTH, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_BLASTOISE ; pokedex id
-db 79 ; base hp
-db 83 ; base attack
-db 100 ; base defense
-db 78 ; base speed
-db 85 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 210 ; base exp yield
-INCBIN "gfx/pokemon/front/blastoise.pic",0,1 ; 77, sprite dimensions
-dw BlastoisePicFront
-dw BlastoisePicBack
-; attacks known at lvl 0
-db TACKLE
-db TAIL_WHIP
-db BUBBLE
-db WATER_GUN
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_BLASTOISE ; pokedex id
+
+	db  79,  83, 100,  78,  85
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 45 ; catch rate
+	db 210 ; base exp
+
+	INCBIN "gfx/pokemon/front/blastoise.pic", 0, 1 ; sprite dimensions
+	dw BlastoisePicFront, BlastoisePicBack
+
+	db TACKLE, TAIL_WHIP, BUBBLE, WATER_GUN ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_BULBASAUR ; pokedex id
-db 45 ; base hp
-db 49 ; base attack
-db 49 ; base defense
-db 45 ; base speed
-db 65 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 64 ; base exp yield
-INCBIN "gfx/pokemon/front/bulbasaur.pic",0,1 ; 55, sprite dimensions
-dw BulbasaurPicFront
-dw BulbasaurPicBack
-; attacks known at lvl 0
-db TACKLE
-db GROWL
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_BULBASAUR ; pokedex id
+
+	db  45,  49,  49,  45,  65
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 45 ; catch rate
+	db 64 ; base exp
+
+	INCBIN "gfx/pokemon/front/bulbasaur.pic", 0, 1 ; sprite dimensions
+	dw BulbasaurPicFront, BulbasaurPicBack
+
+	db TACKLE, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_BUTTERFREE ; pokedex id
-db 60 ; base hp
-db 45 ; base attack
-db 50 ; base defense
-db 70 ; base speed
-db 80 ; base special
-db BUG ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 160 ; base exp yield
-INCBIN "gfx/pokemon/front/butterfree.pic",0,1 ; 77, sprite dimensions
-dw ButterfreePicFront
-dw ButterfreePicBack
-; attacks known at lvl 0
-db CONFUSION
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 29,30,31,32
-	tmlearn 33,34,39
-	tmlearn 44,46
-	tmlearn 50
-db 0 ; padding
+	db DEX_BUTTERFREE ; pokedex id
+
+	db  60,  45,  50,  70,  80
+	;   hp  atk  def  spd  spc
+
+	db BUG, FLYING ; type
+	db 45 ; catch rate
+	db 160 ; base exp
+
+	INCBIN "gfx/pokemon/front/butterfree.pic", 0, 1 ; sprite dimensions
+	dw ButterfreePicFront, ButterfreePicBack
+
+	db CONFUSION, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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/caterpie.asm
+++ b/data/pokemon/base_stats/caterpie.asm
@@ -1,28 +1,20 @@
-db DEX_CATERPIE ; pokedex id
-db 45 ; base hp
-db 30 ; base attack
-db 35 ; base defense
-db 45 ; base speed
-db 20 ; base special
-db BUG ; species type 1
-db BUG ; species type 2
-db 255 ; catch rate
-db 53 ; base exp yield
-INCBIN "gfx/pokemon/front/caterpie.pic",0,1 ; 55, sprite dimensions
-dw CaterpiePicFront
-dw CaterpiePicBack
-; attacks known at lvl 0
-db TACKLE
-db STRING_SHOT
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_CATERPIE ; pokedex id
+
+	db  45,  30,  35,  45,  20
+	;   hp  atk  def  spd  spc
+
+	db BUG, BUG ; type
+	db 255 ; catch rate
+	db 53 ; base exp
+
+	INCBIN "gfx/pokemon/front/caterpie.pic", 0, 1 ; sprite dimensions
+	dw CaterpiePicFront, CaterpiePicBack
+
+	db TACKLE, STRING_SHOT, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/chansey.asm
+++ b/data/pokemon/base_stats/chansey.asm
@@ -1,28 +1,27 @@
-db DEX_CHANSEY ; pokedex id
-db 250 ; base hp
-db 5 ; base attack
-db 5 ; base defense
-db 50 ; base speed
-db 105 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 30 ; catch rate
-db 255 ; base exp yield
-INCBIN "gfx/pokemon/front/chansey.pic",0,1 ; 66, sprite dimensions
-dw ChanseyPicFront
-dw ChanseyPicBack
-; attacks known at lvl 0
-db POUND
-db DOUBLESLAP
-db 0
-db 0
-db 4 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,37,38,40
-	tmlearn 41,44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_CHANSEY ; pokedex id
+
+	db 250,   5,   5,  50, 105
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 30 ; catch rate
+	db 255 ; base exp
+
+	INCBIN "gfx/pokemon/front/chansey.pic", 0, 1 ; sprite dimensions
+	dw ChanseyPicFront, ChanseyPicBack
+
+	db POUND, DOUBLESLAP, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 4 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_CHARIZARD ; pokedex id
-db 78 ; base hp
-db 84 ; base attack
-db 78 ; base defense
-db 100 ; base speed
-db 85 ; base special
-db FIRE ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 209 ; base exp yield
-INCBIN "gfx/pokemon/front/charizard.pic",0,1 ; 77, sprite dimensions
-dw CharizardPicFront
-dw CharizardPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db EMBER
-db LEER
-db 3 ; growth rate
-; learnset
-	tmlearn 1,3,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20,23
-	tmlearn 26,27,28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_CHARIZARD ; pokedex id
+
+	db  78,  84,  78, 100,  85
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FLYING ; type
+	db 45 ; catch rate
+	db 209 ; base exp
+
+	INCBIN "gfx/pokemon/front/charizard.pic", 0, 1 ; sprite dimensions
+	dw CharizardPicFront, CharizardPicBack
+
+	db SCRATCH, GROWL, EMBER, LEER ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_CHARMANDER ; pokedex id
-db 39 ; base hp
-db 52 ; base attack
-db 43 ; base defense
-db 65 ; base speed
-db 50 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 45 ; catch rate
-db 65 ; base exp yield
-INCBIN "gfx/pokemon/front/charmander.pic",0,1 ; 55, sprite dimensions
-dw CharmanderPicFront
-dw CharmanderPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,3,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20,23
-	tmlearn 28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_CHARMANDER ; pokedex id
+
+	db  39,  52,  43,  65,  50
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 45 ; catch rate
+	db 65 ; base exp
+
+	INCBIN "gfx/pokemon/front/charmander.pic", 0, 1 ; sprite dimensions
+	dw CharmanderPicFront, CharmanderPicBack
+
+	db SCRATCH, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_CHARMELEON ; pokedex id
-db 58 ; base hp
-db 64 ; base attack
-db 58 ; base defense
-db 80 ; base speed
-db 65 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 45 ; catch rate
-db 142 ; base exp yield
-INCBIN "gfx/pokemon/front/charmeleon.pic",0,1 ; 66, sprite dimensions
-dw CharmeleonPicFront
-dw CharmeleonPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db EMBER
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,3,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20,23
-	tmlearn 28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_CHARMELEON ; pokedex id
+
+	db  58,  64,  58,  80,  65
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 45 ; catch rate
+	db 142 ; base exp
+
+	INCBIN "gfx/pokemon/front/charmeleon.pic", 0, 1 ; sprite dimensions
+	dw CharmeleonPicFront, CharmeleonPicBack
+
+	db SCRATCH, GROWL, EMBER, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_CLEFABLE ; pokedex id
-db 95 ; base hp
-db 70 ; base attack
-db 73 ; base defense
-db 60 ; base speed
-db 85 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 25 ; catch rate
-db 129 ; base exp yield
-INCBIN "gfx/pokemon/front/clefable.pic",0,1 ; 66, sprite dimensions
-dw ClefablePicFront
-dw ClefablePicBack
-; attacks known at lvl 0
-db SING
-db DOUBLESLAP
-db MINIMIZE
-db METRONOME
-db 4 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,38,40
-	tmlearn 44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_CLEFABLE ; pokedex id
+
+	db  95,  70,  73,  60,  85
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 25 ; catch rate
+	db 129 ; base exp
+
+	INCBIN "gfx/pokemon/front/clefable.pic", 0, 1 ; sprite dimensions
+	dw ClefablePicFront, ClefablePicBack
+
+	db SING, DOUBLESLAP, MINIMIZE, METRONOME ; level 1 learnset
+	db 4 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_CLEFAIRY ; pokedex id
-db 70 ; base hp
-db 45 ; base attack
-db 48 ; base defense
-db 35 ; base speed
-db 60 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 150 ; catch rate
-db 68 ; base exp yield
-INCBIN "gfx/pokemon/front/clefairy.pic",0,1 ; 55, sprite dimensions
-dw ClefairyPicFront
-dw ClefairyPicBack
-; attacks known at lvl 0
-db POUND
-db GROWL
-db 0
-db 0
-db 4 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,38,40
-	tmlearn 44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_CLEFAIRY ; pokedex id
+
+	db  70,  45,  48,  35,  60
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 150 ; catch rate
+	db 68 ; base exp
+
+	INCBIN "gfx/pokemon/front/clefairy.pic", 0, 1 ; sprite dimensions
+	dw ClefairyPicFront, ClefairyPicBack
+
+	db POUND, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 4 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_CLOYSTER ; pokedex id
-db 50 ; base hp
-db 95 ; base attack
-db 180 ; base defense
-db 70 ; base speed
-db 85 ; base special
-db WATER ; species type 1
-db ICE ; species type 2
-db 60 ; catch rate
-db 203 ; base exp yield
-INCBIN "gfx/pokemon/front/cloyster.pic",0,1 ; 77, sprite dimensions
-dw CloysterPicFront
-dw CloysterPicBack
-; attacks known at lvl 0
-db WITHDRAW
-db SUPERSONIC
-db CLAMP
-db AURORA_BEAM
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 30,31,32
-	tmlearn 33,34,36,39
-	tmlearn 44,47
-	tmlearn 49,50,53
-db 0 ; padding
+	db DEX_CLOYSTER ; pokedex id
+
+	db  50,  95, 180,  70,  85
+	;   hp  atk  def  spd  spc
+
+	db WATER, ICE ; type
+	db 60 ; catch rate
+	db 203 ; base exp
+
+	INCBIN "gfx/pokemon/front/cloyster.pic", 0, 1 ; sprite dimensions
+	dw CloysterPicFront, CloysterPicBack
+
+	db WITHDRAW, SUPERSONIC, CLAMP, AURORA_BEAM ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_CUBONE ; pokedex id
-db 50 ; base hp
-db 50 ; base attack
-db 95 ; base defense
-db 35 ; base speed
-db 40 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 190 ; catch rate
-db 87 ; base exp yield
-INCBIN "gfx/pokemon/front/cubone.pic",0,1 ; 55, sprite dimensions
-dw CubonePicFront
-dw CubonePicBack
-; attacks known at lvl 0
-db BONE_CLUB
-db GROWL
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,38,40
-	tmlearn 44
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_CUBONE ; pokedex id
+
+	db  50,  50,  95,  35,  40
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 190 ; catch rate
+	db 87 ; base exp
+
+	INCBIN "gfx/pokemon/front/cubone.pic", 0, 1 ; sprite dimensions
+	dw CubonePicFront, CubonePicBack
+
+	db BONE_CLUB, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_DEWGONG ; pokedex id
-db 90 ; base hp
-db 70 ; base attack
-db 80 ; base defense
-db 70 ; base speed
-db 95 ; base special
-db WATER ; species type 1
-db ICE ; species type 2
-db 75 ; catch rate
-db 176 ; base exp yield
-INCBIN "gfx/pokemon/front/dewgong.pic",0,1 ; 66, sprite dimensions
-dw DewgongPicFront
-dw DewgongPicBack
-; attacks known at lvl 0
-db HEADBUTT
-db GROWL
-db AURORA_BEAM
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_DEWGONG ; pokedex id
+
+	db  90,  70,  80,  70,  95
+	;   hp  atk  def  spd  spc
+
+	db WATER, ICE ; type
+	db 75 ; catch rate
+	db 176 ; base exp
+
+	INCBIN "gfx/pokemon/front/dewgong.pic", 0, 1 ; sprite dimensions
+	dw DewgongPicFront, DewgongPicBack
+
+	db HEADBUTT, GROWL, AURORA_BEAM, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_DIGLETT ; pokedex id
-db 10 ; base hp
-db 55 ; base attack
-db 25 ; base defense
-db 95 ; base speed
-db 45 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 255 ; catch rate
-db 81 ; base exp yield
-INCBIN "gfx/pokemon/front/diglett.pic",0,1 ; 55, sprite dimensions
-dw DiglettPicFront
-dw DiglettPicBack
-; attacks known at lvl 0
-db SCRATCH
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 26,27,28,31,32
-	tmlearn 34
-	tmlearn 44,48
-	tmlearn 50
-db 0 ; padding
+	db DEX_DIGLETT ; pokedex id
+
+	db  10,  55,  25,  95,  45
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 255 ; catch rate
+	db 81 ; base exp
+
+	INCBIN "gfx/pokemon/front/diglett.pic", 0, 1 ; sprite dimensions
+	dw DiglettPicFront, DiglettPicBack
+
+	db SCRATCH, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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/ditto.asm
+++ b/data/pokemon/base_stats/ditto.asm
@@ -1,28 +1,20 @@
-db DEX_DITTO ; pokedex id
-db 48 ; base hp
-db 48 ; base attack
-db 48 ; base defense
-db 48 ; base speed
-db 48 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 35 ; catch rate
-db 61 ; base exp yield
-INCBIN "gfx/pokemon/front/ditto.pic",0,1 ; 55, sprite dimensions
-dw DittoPicFront
-dw DittoPicBack
-; attacks known at lvl 0
-db TRANSFORM
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_DITTO ; pokedex id
+
+	db  48,  48,  48,  48,  48
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 35 ; catch rate
+	db 61 ; base exp
+
+	INCBIN "gfx/pokemon/front/ditto.pic", 0, 1 ; sprite dimensions
+	dw DittoPicFront, DittoPicBack
+
+	db TRANSFORM, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/dodrio.asm
+++ b/data/pokemon/base_stats/dodrio.asm
@@ -1,28 +1,23 @@
-db DEX_DODRIO ; pokedex id
-db 60 ; base hp
-db 110 ; base attack
-db 70 ; base defense
-db 100 ; base speed
-db 60 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 158 ; base exp yield
-INCBIN "gfx/pokemon/front/dodrio.pic",0,1 ; 77, sprite dimensions
-dw DodrioPicFront
-dw DodrioPicBack
-; attacks known at lvl 0
-db PECK
-db GROWL
-db FURY_ATTACK
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 4,6,8
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 43,44
-	tmlearn 49,50,52
-db 0 ; padding
+	db DEX_DODRIO ; pokedex id
+
+	db  60, 110,  70, 100,  60
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 45 ; catch rate
+	db 158 ; base exp
+
+	INCBIN "gfx/pokemon/front/dodrio.pic", 0, 1 ; sprite dimensions
+	dw DodrioPicFront, DodrioPicBack
+
+	db PECK, GROWL, FURY_ATTACK, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_DODUO ; pokedex id
-db 35 ; base hp
-db 85 ; base attack
-db 45 ; base defense
-db 75 ; base speed
-db 35 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 190 ; catch rate
-db 96 ; base exp yield
-INCBIN "gfx/pokemon/front/doduo.pic",0,1 ; 55, sprite dimensions
-dw DoduoPicFront
-dw DoduoPicBack
-; attacks known at lvl 0
-db PECK
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 4,6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 43,44
-	tmlearn 49,50,52
-db 0 ; padding
+	db DEX_DODUO ; pokedex id
+
+	db  35,  85,  45,  75,  35
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 190 ; catch rate
+	db 96 ; base exp
+
+	INCBIN "gfx/pokemon/front/doduo.pic", 0, 1 ; sprite dimensions
+	dw DoduoPicFront, DoduoPicBack
+
+	db PECK, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_DRAGONAIR ; pokedex id
-db 61 ; base hp
-db 84 ; base attack
-db 65 ; base defense
-db 70 ; base speed
-db 70 ; base special
-db DRAGON ; species type 1
-db DRAGON ; species type 2
-db 45 ; catch rate
-db 144 ; base exp yield
-INCBIN "gfx/pokemon/front/dragonair.pic",0,1 ; 66, sprite dimensions
-dw DragonairPicFront
-dw DragonairPicBack
-; attacks known at lvl 0
-db WRAP
-db LEER
-db THUNDER_WAVE
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,23,24
-	tmlearn 25,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44,45
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_DRAGONAIR ; pokedex id
+
+	db  61,  84,  65,  70,  70
+	;   hp  atk  def  spd  spc
+
+	db DRAGON, DRAGON ; type
+	db 45 ; catch rate
+	db 144 ; base exp
+
+	INCBIN "gfx/pokemon/front/dragonair.pic", 0, 1 ; sprite dimensions
+	dw DragonairPicFront, DragonairPicBack
+
+	db WRAP, LEER, THUNDER_WAVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_DRAGONITE ; pokedex id
-db 91 ; base hp
-db 134 ; base attack
-db 95 ; base defense
-db 80 ; base speed
-db 100 ; base special
-db DRAGON ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 218 ; base exp yield
-INCBIN "gfx/pokemon/front/dragonite.pic",0,1 ; 77, sprite dimensions
-dw DragonitePicFront
-dw DragonitePicBack
-; attacks known at lvl 0
-db WRAP
-db LEER
-db THUNDER_WAVE
-db AGILITY
-db 5 ; growth rate
-; learnset
-	tmlearn 2,6,7,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,23,24
-	tmlearn 25,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44,45
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_DRAGONITE ; pokedex id
+
+	db  91, 134,  95,  80, 100
+	;   hp  atk  def  spd  spc
+
+	db DRAGON, FLYING ; type
+	db 45 ; catch rate
+	db 218 ; base exp
+
+	INCBIN "gfx/pokemon/front/dragonite.pic", 0, 1 ; sprite dimensions
+	dw DragonitePicFront, DragonitePicBack
+
+	db WRAP, LEER, THUNDER_WAVE, AGILITY ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_DRATINI ; pokedex id
-db 41 ; base hp
-db 64 ; base attack
-db 45 ; base defense
-db 50 ; base speed
-db 50 ; base special
-db DRAGON ; species type 1
-db DRAGON ; species type 2
-db 45 ; catch rate
-db 67 ; base exp yield
-INCBIN "gfx/pokemon/front/dratini.pic",0,1 ; 55, sprite dimensions
-dw DratiniPicFront
-dw DratiniPicBack
-; attacks known at lvl 0
-db WRAP
-db LEER
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,23,24
-	tmlearn 25,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44,45
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_DRATINI ; pokedex id
+
+	db  41,  64,  45,  50,  50
+	;   hp  atk  def  spd  spc
+
+	db DRAGON, DRAGON ; type
+	db 45 ; catch rate
+	db 67 ; base exp
+
+	INCBIN "gfx/pokemon/front/dratini.pic", 0, 1 ; sprite dimensions
+	dw DratiniPicFront, DratiniPicBack
+
+	db WRAP, LEER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_DROWZEE ; pokedex id
-db 60 ; base hp
-db 48 ; base attack
-db 45 ; base defense
-db 42 ; base speed
-db 90 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 190 ; catch rate
-db 102 ; base exp yield
-INCBIN "gfx/pokemon/front/drowzee.pic",0,1 ; 66, sprite dimensions
-dw DrowzeePicFront
-dw DrowzeePicBack
-; attacks known at lvl 0
-db POUND
-db HYPNOSIS
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 42,44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_DROWZEE ; pokedex id
+
+	db  60,  48,  45,  42,  90
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 190 ; catch rate
+	db 102 ; base exp
+
+	INCBIN "gfx/pokemon/front/drowzee.pic", 0, 1 ; sprite dimensions
+	dw DrowzeePicFront, DrowzeePicBack
+
+	db POUND, HYPNOSIS, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_DUGTRIO ; pokedex id
-db 35 ; base hp
-db 80 ; base attack
-db 50 ; base defense
-db 120 ; base speed
-db 70 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 50 ; catch rate
-db 153 ; base exp yield
-INCBIN "gfx/pokemon/front/dugtrio.pic",0,1 ; 66, sprite dimensions
-dw DugtrioPicFront
-dw DugtrioPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db DIG
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 26,27,28,31,32
-	tmlearn 34
-	tmlearn 44,48
-	tmlearn 50
-db 0 ; padding
+	db DEX_DUGTRIO ; pokedex id
+
+	db  35,  80,  50, 120,  70
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 50 ; catch rate
+	db 153 ; base exp
+
+	INCBIN "gfx/pokemon/front/dugtrio.pic", 0, 1 ; sprite dimensions
+	dw DugtrioPicFront, DugtrioPicBack
+
+	db SCRATCH, GROWL, DIG, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_EEVEE ; pokedex id
-db 55 ; base hp
-db 55 ; base attack
-db 50 ; base defense
-db 55 ; base speed
-db 65 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 45 ; catch rate
-db 92 ; base exp yield
-INCBIN "gfx/pokemon/front/eevee.pic",0,1 ; 55, sprite dimensions
-dw EeveePicFront
-dw EeveePicBack
-; attacks known at lvl 0
-db TACKLE
-db SAND_ATTACK
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_EEVEE ; pokedex id
+
+	db  55,  55,  50,  55,  65
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 45 ; catch rate
+	db 92 ; base exp
+
+	INCBIN "gfx/pokemon/front/eevee.pic", 0, 1 ; sprite dimensions
+	dw EeveePicFront, EeveePicBack
+
+	db TACKLE, SAND_ATTACK, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_EKANS ; pokedex id
-db 35 ; base hp
-db 60 ; base attack
-db 44 ; base defense
-db 55 ; base speed
-db 40 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 255 ; catch rate
-db 62 ; base exp yield
-INCBIN "gfx/pokemon/front/ekans.pic",0,1 ; 55, sprite dimensions
-dw EkansPicFront
-dw EkansPicBack
-; attacks known at lvl 0
-db WRAP
-db LEER
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20,21
-	tmlearn 26,27,28,31,32
-	tmlearn 34,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_EKANS ; pokedex id
+
+	db  35,  60,  44,  55,  40
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 255 ; catch rate
+	db 62 ; base exp
+
+	INCBIN "gfx/pokemon/front/ekans.pic", 0, 1 ; sprite dimensions
+	dw EkansPicFront, EkansPicBack
+
+	db WRAP, LEER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_ELECTABUZZ ; pokedex id
-db 65 ; base hp
-db 83 ; base attack
-db 57 ; base defense
-db 105 ; base speed
-db 85 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 45 ; catch rate
-db 156 ; base exp yield
-INCBIN "gfx/pokemon/front/electabuzz.pic",0,1 ; 66, sprite dimensions
-dw ElectabuzzPicFront
-dw ElectabuzzPicBack
-; attacks known at lvl 0
-db QUICK_ATTACK
-db LEER
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,39,40
-	tmlearn 44,45,46
-	tmlearn 50,54,55
-db 0 ; padding
+	db DEX_ELECTABUZZ ; pokedex id
+
+	db  65,  83,  57, 105,  85
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 45 ; catch rate
+	db 156 ; base exp
+
+	INCBIN "gfx/pokemon/front/electabuzz.pic", 0, 1 ; sprite dimensions
+	dw ElectabuzzPicFront, ElectabuzzPicBack
+
+	db QUICK_ATTACK, LEER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ELECTRODE ; pokedex id
-db 60 ; base hp
-db 50 ; base attack
-db 70 ; base defense
-db 140 ; base speed
-db 80 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 60 ; catch rate
-db 150 ; base exp yield
-INCBIN "gfx/pokemon/front/electrode.pic",0,1 ; 55, sprite dimensions
-dw ElectrodePicFront
-dw ElectrodePicBack
-; attacks known at lvl 0
-db TACKLE
-db SCREECH
-db SONICBOOM
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,15
-	tmlearn 20,24
-	tmlearn 25,30,31,32
-	tmlearn 33,34,36,39,40
-	tmlearn 44,45,47
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_ELECTRODE ; pokedex id
+
+	db  60,  50,  70, 140,  80
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 60 ; catch rate
+	db 150 ; base exp
+
+	INCBIN "gfx/pokemon/front/electrode.pic", 0, 1 ; sprite dimensions
+	dw ElectrodePicFront, ElectrodePicBack
+
+	db TACKLE, SCREECH, SONICBOOM, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_EXEGGCUTE ; pokedex id
-db 60 ; base hp
-db 40 ; base attack
-db 80 ; base defense
-db 40 ; base speed
-db 60 ; base special
-db GRASS ; species type 1
-db PSYCHIC ; species type 2
-db 90 ; catch rate
-db 98 ; base exp yield
-INCBIN "gfx/pokemon/front/exeggcute.pic",0,1 ; 77, sprite dimensions
-dw ExeggcutePicFront
-dw ExeggcutePicBack
-; attacks known at lvl 0
-db BARRAGE
-db HYPNOSIS
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 29,30,31,32
-	tmlearn 33,34,36,37
-	tmlearn 44,46,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_EXEGGCUTE ; pokedex id
+
+	db  60,  40,  80,  40,  60
+	;   hp  atk  def  spd  spc
+
+	db GRASS, PSYCHIC ; type
+	db 90 ; catch rate
+	db 98 ; base exp
+
+	INCBIN "gfx/pokemon/front/exeggcute.pic", 0, 1 ; sprite dimensions
+	dw ExeggcutePicFront, ExeggcutePicBack
+
+	db BARRAGE, HYPNOSIS, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_EXEGGUTOR ; pokedex id
-db 95 ; base hp
-db 95 ; base attack
-db 85 ; base defense
-db 55 ; base speed
-db 125 ; base special
-db GRASS ; species type 1
-db PSYCHIC ; species type 2
-db 45 ; catch rate
-db 212 ; base exp yield
-INCBIN "gfx/pokemon/front/exeggutor.pic",0,1 ; 77, sprite dimensions
-dw ExeggutorPicFront
-dw ExeggutorPicBack
-; attacks known at lvl 0
-db BARRAGE
-db HYPNOSIS
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 29,30,31,32
-	tmlearn 33,34,36,37
-	tmlearn 44,46,47
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_EXEGGUTOR ; pokedex id
+
+	db  95,  95,  85,  55, 125
+	;   hp  atk  def  spd  spc
+
+	db GRASS, PSYCHIC ; type
+	db 45 ; catch rate
+	db 212 ; base exp
+
+	INCBIN "gfx/pokemon/front/exeggutor.pic", 0, 1 ; sprite dimensions
+	dw ExeggutorPicFront, ExeggutorPicBack
+
+	db BARRAGE, HYPNOSIS, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_FARFETCHD ; pokedex id
-db 52 ; base hp
-db 65 ; base attack
-db 55 ; base defense
-db 60 ; base speed
-db 58 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 94 ; base exp yield
-INCBIN "gfx/pokemon/front/farfetchd.pic",0,1 ; 66, sprite dimensions
-dw FarfetchdPicFront
-dw FarfetchdPicBack
-; attacks known at lvl 0
-db PECK
-db SAND_ATTACK
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,3,4,6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39,40
-	tmlearn 44
-	tmlearn 50,51,52
-db 0 ; padding
+	db DEX_FARFETCHD ; pokedex id
+
+	db  52,  65,  55,  60,  58
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 45 ; catch rate
+	db 94 ; base exp
+
+	INCBIN "gfx/pokemon/front/farfetchd.pic", 0, 1 ; sprite dimensions
+	dw FarfetchdPicFront, FarfetchdPicBack
+
+	db PECK, SAND_ATTACK, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_FEAROW ; pokedex id
-db 65 ; base hp
-db 90 ; base attack
-db 65 ; base defense
-db 100 ; base speed
-db 61 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 90 ; catch rate
-db 162 ; base exp yield
-INCBIN "gfx/pokemon/front/fearow.pic",0,1 ; 77, sprite dimensions
-dw FearowPicFront
-dw FearowPicBack
-; attacks known at lvl 0
-db PECK
-db GROWL
-db LEER
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_FEAROW ; pokedex id
+
+	db  65,  90,  65, 100,  61
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 90 ; catch rate
+	db 162 ; base exp
+
+	INCBIN "gfx/pokemon/front/fearow.pic", 0, 1 ; sprite dimensions
+	dw FearowPicFront, FearowPicBack
+
+	db PECK, GROWL, LEER, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_FLAREON ; pokedex id
-db 65 ; base hp
-db 130 ; base attack
-db 60 ; base defense
-db 65 ; base speed
-db 110 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 45 ; catch rate
-db 198 ; base exp yield
-INCBIN "gfx/pokemon/front/flareon.pic",0,1 ; 66, sprite dimensions
-dw FlareonPicFront
-dw FlareonPicBack
-; attacks known at lvl 0
-db TACKLE
-db SAND_ATTACK
-db QUICK_ATTACK
-db EMBER
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_FLAREON ; pokedex id
+
+	db  65, 130,  60,  65, 110
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 45 ; catch rate
+	db 198 ; base exp
+
+	INCBIN "gfx/pokemon/front/flareon.pic", 0, 1 ; sprite dimensions
+	dw FlareonPicFront, FlareonPicBack
+
+	db TACKLE, SAND_ATTACK, QUICK_ATTACK, EMBER ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_GASTLY ; pokedex id
-db 30 ; base hp
-db 35 ; base attack
-db 30 ; base defense
-db 80 ; base speed
-db 100 ; base special
-db GHOST ; species type 1
-db POISON ; species type 2
-db 190 ; catch rate
-db 95 ; base exp yield
-INCBIN "gfx/pokemon/front/gastly.pic",0,1 ; 77, sprite dimensions
-dw GastlyPicFront
-dw GastlyPicBack
-; attacks known at lvl 0
-db LICK
-db CONFUSE_RAY
-db NIGHT_SHADE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 0
-	tmlearn 20,21,24
-	tmlearn 25,29,31,32
-	tmlearn 34,36
-	tmlearn 42,44,46,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_GASTLY ; pokedex id
+
+	db  30,  35,  30,  80, 100
+	;   hp  atk  def  spd  spc
+
+	db GHOST, POISON ; type
+	db 190 ; catch rate
+	db 95 ; base exp
+
+	INCBIN "gfx/pokemon/front/gastly.pic", 0, 1 ; sprite dimensions
+	dw GastlyPicFront, GastlyPicBack
+
+	db LICK, CONFUSE_RAY, NIGHT_SHADE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_GENGAR ; pokedex id
-db 60 ; base hp
-db 65 ; base attack
-db 60 ; base defense
-db 110 ; base speed
-db 130 ; base special
-db GHOST ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 190 ; base exp yield
-INCBIN "gfx/pokemon/front/gengar.pic",0,1 ; 66, sprite dimensions
-dw GengarPicFront
-dw GengarPicBack
-; attacks known at lvl 0
-db LICK
-db CONFUSE_RAY
-db NIGHT_SHADE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20,21,24
-	tmlearn 25,29,31,32
-	tmlearn 34,35,36,40
-	tmlearn 42,44,46,47
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_GENGAR ; pokedex id
+
+	db  60,  65,  60, 110, 130
+	;   hp  atk  def  spd  spc
+
+	db GHOST, POISON ; type
+	db 45 ; catch rate
+	db 190 ; base exp
+
+	INCBIN "gfx/pokemon/front/gengar.pic", 0, 1 ; sprite dimensions
+	dw GengarPicFront, GengarPicBack
+
+	db LICK, CONFUSE_RAY, NIGHT_SHADE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_GEODUDE ; pokedex id
-db 40 ; base hp
-db 80 ; base attack
-db 100 ; base defense
-db 20 ; base speed
-db 30 ; base special
-db ROCK ; species type 1
-db GROUND ; species type 2
-db 255 ; catch rate
-db 86 ; base exp yield
-INCBIN "gfx/pokemon/front/geodude.pic",0,1 ; 55, sprite dimensions
-dw GeodudePicFront
-dw GeodudePicBack
-; attacks known at lvl 0
-db TACKLE
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,36,38
-	tmlearn 44,47,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_GEODUDE ; pokedex id
+
+	db  40,  80, 100,  20,  30
+	;   hp  atk  def  spd  spc
+
+	db ROCK, GROUND ; type
+	db 255 ; catch rate
+	db 86 ; base exp
+
+	INCBIN "gfx/pokemon/front/geodude.pic", 0, 1 ; sprite dimensions
+	dw GeodudePicFront, GeodudePicBack
+
+	db TACKLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_GLOOM ; pokedex id
-db 60 ; base hp
-db 65 ; base attack
-db 70 ; base defense
-db 40 ; base speed
-db 85 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 120 ; catch rate
-db 132 ; base exp yield
-INCBIN "gfx/pokemon/front/gloom.pic",0,1 ; 66, sprite dimensions
-dw GloomPicFront
-dw GloomPicBack
-; attacks known at lvl 0
-db ABSORB
-db POISONPOWDER
-db STUN_SPORE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_GLOOM ; pokedex id
+
+	db  60,  65,  70,  40,  85
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 120 ; catch rate
+	db 132 ; base exp
+
+	INCBIN "gfx/pokemon/front/gloom.pic", 0, 1 ; sprite dimensions
+	dw GloomPicFront, GloomPicBack
+
+	db ABSORB, POISONPOWDER, STUN_SPORE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_GOLBAT ; pokedex id
-db 75 ; base hp
-db 80 ; base attack
-db 70 ; base defense
-db 90 ; base speed
-db 75 ; base special
-db POISON ; species type 1
-db FLYING ; species type 2
-db 90 ; catch rate
-db 171 ; base exp yield
-INCBIN "gfx/pokemon/front/golbat.pic",0,1 ; 77, sprite dimensions
-dw GolbatPicFront
-dw GolbatPicBack
-; attacks known at lvl 0
-db LEECH_LIFE
-db SCREECH
-db BITE
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20,21
-	tmlearn 31,32
-	tmlearn 34,39
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_GOLBAT ; pokedex id
+
+	db  75,  80,  70,  90,  75
+	;   hp  atk  def  spd  spc
+
+	db POISON, FLYING ; type
+	db 90 ; catch rate
+	db 171 ; base exp
+
+	INCBIN "gfx/pokemon/front/golbat.pic", 0, 1 ; sprite dimensions
+	dw GolbatPicFront, GolbatPicBack
+
+	db LEECH_LIFE, SCREECH, BITE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_GOLDEEN ; pokedex id
-db 45 ; base hp
-db 67 ; base attack
-db 60 ; base defense
-db 63 ; base speed
-db 50 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 225 ; catch rate
-db 111 ; base exp yield
-INCBIN "gfx/pokemon/front/goldeen.pic",0,1 ; 66, sprite dimensions
-dw GoldeenPicFront
-dw GoldeenPicBack
-; attacks known at lvl 0
-db PECK
-db TAIL_WHIP
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_GOLDEEN ; pokedex id
+
+	db  45,  67,  60,  63,  50
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 225 ; catch rate
+	db 111 ; base exp
+
+	INCBIN "gfx/pokemon/front/goldeen.pic", 0, 1 ; sprite dimensions
+	dw GoldeenPicFront, GoldeenPicBack
+
+	db PECK, TAIL_WHIP, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_GOLDUCK ; pokedex id
-db 80 ; base hp
-db 82 ; base attack
-db 78 ; base defense
-db 85 ; base speed
-db 80 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 75 ; catch rate
-db 174 ; base exp yield
-INCBIN "gfx/pokemon/front/golduck.pic",0,1 ; 77, sprite dimensions
-dw GolduckPicFront
-dw GolduckPicBack
-; attacks known at lvl 0
-db SCRATCH
-db TAIL_WHIP
-db DISABLE
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20
-	tmlearn 28,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_GOLDUCK ; pokedex id
+
+	db  80,  82,  78,  85,  80
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 75 ; catch rate
+	db 174 ; base exp
+
+	INCBIN "gfx/pokemon/front/golduck.pic", 0, 1 ; sprite dimensions
+	dw GolduckPicFront, GolduckPicBack
+
+	db SCRATCH, TAIL_WHIP, DISABLE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_GOLEM ; pokedex id
-db 80 ; base hp
-db 110 ; base attack
-db 130 ; base defense
-db 45 ; base speed
-db 55 ; base special
-db ROCK ; species type 1
-db GROUND ; species type 2
-db 45 ; catch rate
-db 177 ; base exp yield
-INCBIN "gfx/pokemon/front/golem.pic",0,1 ; 66, sprite dimensions
-dw GolemPicFront
-dw GolemPicBack
-; attacks known at lvl 0
-db TACKLE
-db DEFENSE_CURL
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,36,38
-	tmlearn 44,47,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_GOLEM ; pokedex id
+
+	db  80, 110, 130,  45,  55
+	;   hp  atk  def  spd  spc
+
+	db ROCK, GROUND ; type
+	db 45 ; catch rate
+	db 177 ; base exp
+
+	INCBIN "gfx/pokemon/front/golem.pic", 0, 1 ; sprite dimensions
+	dw GolemPicFront, GolemPicBack
+
+	db TACKLE, DEFENSE_CURL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_GRAVELER ; pokedex id
-db 55 ; base hp
-db 95 ; base attack
-db 115 ; base defense
-db 35 ; base speed
-db 45 ; base special
-db ROCK ; species type 1
-db GROUND ; species type 2
-db 120 ; catch rate
-db 134 ; base exp yield
-INCBIN "gfx/pokemon/front/graveler.pic",0,1 ; 66, sprite dimensions
-dw GravelerPicFront
-dw GravelerPicBack
-; attacks known at lvl 0
-db TACKLE
-db DEFENSE_CURL
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,36,38
-	tmlearn 44,47,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_GRAVELER ; pokedex id
+
+	db  55,  95, 115,  35,  45
+	;   hp  atk  def  spd  spc
+
+	db ROCK, GROUND ; type
+	db 120 ; catch rate
+	db 134 ; base exp
+
+	INCBIN "gfx/pokemon/front/graveler.pic", 0, 1 ; sprite dimensions
+	dw GravelerPicFront, GravelerPicBack
+
+	db TACKLE, DEFENSE_CURL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_GRIMER ; pokedex id
-db 80 ; base hp
-db 80 ; base attack
-db 50 ; base defense
-db 25 ; base speed
-db 40 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 190 ; catch rate
-db 90 ; base exp yield
-INCBIN "gfx/pokemon/front/grimer.pic",0,1 ; 55, sprite dimensions
-dw GrimerPicFront
-dw GrimerPicBack
-; attacks known at lvl 0
-db POUND
-db DISABLE
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 0
-	tmlearn 20,21,24
-	tmlearn 25,31,32
-	tmlearn 34,36,38
-	tmlearn 44,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_GRIMER ; pokedex id
+
+	db  80,  80,  50,  25,  40
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 190 ; catch rate
+	db 90 ; base exp
+
+	INCBIN "gfx/pokemon/front/grimer.pic", 0, 1 ; sprite dimensions
+	dw GrimerPicFront, GrimerPicBack
+
+	db POUND, DISABLE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_GROWLITHE ; pokedex id
-db 55 ; base hp
-db 70 ; base attack
-db 45 ; base defense
-db 60 ; base speed
-db 50 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 190 ; catch rate
-db 91 ; base exp yield
-INCBIN "gfx/pokemon/front/growlithe.pic",0,1 ; 55, sprite dimensions
-dw GrowlithePicFront
-dw GrowlithePicBack
-; attacks known at lvl 0
-db BITE
-db ROAR
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20,23
-	tmlearn 28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_GROWLITHE ; pokedex id
+
+	db  55,  70,  45,  60,  50
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 190 ; catch rate
+	db 91 ; base exp
+
+	INCBIN "gfx/pokemon/front/growlithe.pic", 0, 1 ; sprite dimensions
+	dw GrowlithePicFront, GrowlithePicBack
+
+	db BITE, ROAR, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_GYARADOS ; pokedex id
-db 95 ; base hp
-db 125 ; base attack
-db 79 ; base defense
-db 81 ; base speed
-db 100 ; base special
-db WATER ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 214 ; base exp yield
-INCBIN "gfx/pokemon/front/gyarados.pic",0,1 ; 77, sprite dimensions
-dw GyaradosPicFront
-dw GyaradosPicBack
-; attacks known at lvl 0
-db BITE
-db DRAGON_RAGE
-db LEER
-db HYDRO_PUMP
-db 5 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,23,24
-	tmlearn 25,31,32
-	tmlearn 33,34,38,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_GYARADOS ; pokedex id
+
+	db  95, 125,  79,  81, 100
+	;   hp  atk  def  spd  spc
+
+	db WATER, FLYING ; type
+	db 45 ; catch rate
+	db 214 ; base exp
+
+	INCBIN "gfx/pokemon/front/gyarados.pic", 0, 1 ; sprite dimensions
+	dw GyaradosPicFront, GyaradosPicBack
+
+	db BITE, DRAGON_RAGE, LEER, HYDRO_PUMP ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_HAUNTER ; pokedex id
-db 45 ; base hp
-db 50 ; base attack
-db 45 ; base defense
-db 95 ; base speed
-db 115 ; base special
-db GHOST ; species type 1
-db POISON ; species type 2
-db 90 ; catch rate
-db 126 ; base exp yield
-INCBIN "gfx/pokemon/front/haunter.pic",0,1 ; 66, sprite dimensions
-dw HaunterPicFront
-dw HaunterPicBack
-; attacks known at lvl 0
-db LICK
-db CONFUSE_RAY
-db NIGHT_SHADE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 0
-	tmlearn 20,21,24
-	tmlearn 25,29,31,32
-	tmlearn 34,36
-	tmlearn 42,44,46,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_HAUNTER ; pokedex id
+
+	db  45,  50,  45,  95, 115
+	;   hp  atk  def  spd  spc
+
+	db GHOST, POISON ; type
+	db 90 ; catch rate
+	db 126 ; base exp
+
+	INCBIN "gfx/pokemon/front/haunter.pic", 0, 1 ; sprite dimensions
+	dw HaunterPicFront, HaunterPicBack
+
+	db LICK, CONFUSE_RAY, NIGHT_SHADE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_HITMONCHAN ; pokedex id
-db 50 ; base hp
-db 105 ; base attack
-db 79 ; base defense
-db 76 ; base speed
-db 35 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 45 ; catch rate
-db 140 ; base exp yield
-INCBIN "gfx/pokemon/front/hitmonchan.pic",0,1 ; 66, sprite dimensions
-dw HitmonchanPicFront
-dw HitmonchanPicBack
-; attacks known at lvl 0
-db COMET_PUNCH
-db AGILITY
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 31,32
-	tmlearn 34,35,39,40
-	tmlearn 44
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_HITMONCHAN ; pokedex id
+
+	db  50, 105,  79,  76,  35
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 45 ; catch rate
+	db 140 ; base exp
+
+	INCBIN "gfx/pokemon/front/hitmonchan.pic", 0, 1 ; sprite dimensions
+	dw HitmonchanPicFront, HitmonchanPicBack
+
+	db COMET_PUNCH, AGILITY, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_HITMONLEE ; pokedex id
-db 50 ; base hp
-db 120 ; base attack
-db 53 ; base defense
-db 87 ; base speed
-db 35 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 45 ; catch rate
-db 139 ; base exp yield
-INCBIN "gfx/pokemon/front/hitmonlee.pic",0,1 ; 77, sprite dimensions
-dw HitmonleePicFront
-dw HitmonleePicBack
-; attacks known at lvl 0
-db DOUBLE_KICK
-db MEDITATE
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 31,32
-	tmlearn 34,35,39,40
-	tmlearn 44
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_HITMONLEE ; pokedex id
+
+	db  50, 120,  53,  87,  35
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 45 ; catch rate
+	db 139 ; base exp
+
+	INCBIN "gfx/pokemon/front/hitmonlee.pic", 0, 1 ; sprite dimensions
+	dw HitmonleePicFront, HitmonleePicBack
+
+	db DOUBLE_KICK, MEDITATE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_HORSEA ; pokedex id
-db 30 ; base hp
-db 40 ; base attack
-db 70 ; base defense
-db 60 ; base speed
-db 70 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 225 ; catch rate
-db 83 ; base exp yield
-INCBIN "gfx/pokemon/front/horsea.pic",0,1 ; 55, sprite dimensions
-dw HorseaPicFront
-dw HorseaPicBack
-; attacks known at lvl 0
-db BUBBLE
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_HORSEA ; pokedex id
+
+	db  30,  40,  70,  60,  70
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 225 ; catch rate
+	db 83 ; base exp
+
+	INCBIN "gfx/pokemon/front/horsea.pic", 0, 1 ; sprite dimensions
+	dw HorseaPicFront, HorseaPicBack
+
+	db BUBBLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_HYPNO ; pokedex id
-db 85 ; base hp
-db 73 ; base attack
-db 70 ; base defense
-db 67 ; base speed
-db 115 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 75 ; catch rate
-db 165 ; base exp yield
-INCBIN "gfx/pokemon/front/hypno.pic",0,1 ; 77, sprite dimensions
-dw HypnoPicFront
-dw HypnoPicBack
-; attacks known at lvl 0
-db POUND
-db HYPNOSIS
-db DISABLE
-db CONFUSION
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20
-	tmlearn 29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 42,44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_HYPNO ; pokedex id
+
+	db  85,  73,  70,  67, 115
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 75 ; catch rate
+	db 165 ; base exp
+
+	INCBIN "gfx/pokemon/front/hypno.pic", 0, 1 ; sprite dimensions
+	dw HypnoPicFront, HypnoPicBack
+
+	db POUND, HYPNOSIS, DISABLE, CONFUSION ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_IVYSAUR ; pokedex id
-db 60 ; base hp
-db 62 ; base attack
-db 63 ; base defense
-db 60 ; base speed
-db 80 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 141 ; base exp yield
-INCBIN "gfx/pokemon/front/ivysaur.pic",0,1 ; 66, sprite dimensions
-dw IvysaurPicFront
-dw IvysaurPicBack
-; attacks known at lvl 0
-db TACKLE
-db GROWL
-db LEECH_SEED
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_IVYSAUR ; pokedex id
+
+	db  60,  62,  63,  60,  80
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 45 ; catch rate
+	db 141 ; base exp
+
+	INCBIN "gfx/pokemon/front/ivysaur.pic", 0, 1 ; sprite dimensions
+	dw IvysaurPicFront, IvysaurPicBack
+
+	db TACKLE, GROWL, LEECH_SEED, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_JIGGLYPUFF ; pokedex id
-db 115 ; base hp
-db 45 ; base attack
-db 20 ; base defense
-db 20 ; base speed
-db 25 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 170 ; catch rate
-db 76 ; base exp yield
-INCBIN "gfx/pokemon/front/jigglypuff.pic",0,1 ; 55, sprite dimensions
-dw JigglypuffPicFront
-dw JigglypuffPicBack
-; attacks known at lvl 0
-db SING
-db 0
-db 0
-db 0
-db 4 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,38,40
-	tmlearn 44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_JIGGLYPUFF ; pokedex id
+
+	db 115,  45,  20,  20,  25
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 170 ; catch rate
+	db 76 ; base exp
+
+	INCBIN "gfx/pokemon/front/jigglypuff.pic", 0, 1 ; sprite dimensions
+	dw JigglypuffPicFront, JigglypuffPicBack
+
+	db SING, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 4 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_JOLTEON ; pokedex id
-db 65 ; base hp
-db 65 ; base attack
-db 60 ; base defense
-db 130 ; base speed
-db 110 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 45 ; catch rate
-db 197 ; base exp yield
-INCBIN "gfx/pokemon/front/jolteon.pic",0,1 ; 66, sprite dimensions
-dw JolteonPicFront
-dw JolteonPicBack
-; attacks known at lvl 0
-db TACKLE
-db SAND_ATTACK
-db QUICK_ATTACK
-db THUNDERSHOCK
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_JOLTEON ; pokedex id
+
+	db  65,  65,  60, 130, 110
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 45 ; catch rate
+	db 197 ; base exp
+
+	INCBIN "gfx/pokemon/front/jolteon.pic", 0, 1 ; sprite dimensions
+	dw JolteonPicFront, JolteonPicBack
+
+	db TACKLE, SAND_ATTACK, QUICK_ATTACK, THUNDERSHOCK ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_JYNX ; pokedex id
-db 65 ; base hp
-db 50 ; base attack
-db 35 ; base defense
-db 95 ; base speed
-db 95 ; base special
-db ICE ; species type 1
-db PSYCHIC ; species type 2
-db 45 ; catch rate
-db 137 ; base exp yield
-INCBIN "gfx/pokemon/front/jynx.pic",0,1 ; 66, sprite dimensions
-dw JynxPicFront
-dw JynxPicBack
-; attacks known at lvl 0
-db POUND
-db LOVELY_KISS
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20
-	tmlearn 29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 44,46
-	tmlearn 50
-db 0 ; padding
+	db DEX_JYNX ; pokedex id
+
+	db  65,  50,  35,  95,  95
+	;   hp  atk  def  spd  spc
+
+	db ICE, PSYCHIC ; type
+	db 45 ; catch rate
+	db 137 ; base exp
+
+	INCBIN "gfx/pokemon/front/jynx.pic", 0, 1 ; sprite dimensions
+	dw JynxPicFront, JynxPicBack
+
+	db POUND, LOVELY_KISS, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_KABUTO ; pokedex id
-db 30 ; base hp
-db 80 ; base attack
-db 90 ; base defense
-db 55 ; base speed
-db 45 ; base special
-db ROCK ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 119 ; base exp yield
-INCBIN "gfx/pokemon/front/kabuto.pic",0,1 ; 55, sprite dimensions
-dw KabutoPicFront
-dw KabutoPicBack
-; attacks known at lvl 0
-db SCRATCH
-db HARDEN
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_KABUTO ; pokedex id
+
+	db  30,  80,  90,  55,  45
+	;   hp  atk  def  spd  spc
+
+	db ROCK, WATER ; type
+	db 45 ; catch rate
+	db 119 ; base exp
+
+	INCBIN "gfx/pokemon/front/kabuto.pic", 0, 1 ; sprite dimensions
+	dw KabutoPicFront, KabutoPicBack
+
+	db SCRATCH, HARDEN, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_KABUTOPS ; pokedex id
-db 60 ; base hp
-db 115 ; base attack
-db 105 ; base defense
-db 80 ; base speed
-db 70 ; base special
-db ROCK ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 201 ; base exp yield
-INCBIN "gfx/pokemon/front/kabutops.pic",0,1 ; 66, sprite dimensions
-dw KabutopsPicFront
-dw KabutopsPicBack
-; attacks known at lvl 0
-db SCRATCH
-db HARDEN
-db ABSORB
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,3,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,19,20
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_KABUTOPS ; pokedex id
+
+	db  60, 115, 105,  80,  70
+	;   hp  atk  def  spd  spc
+
+	db ROCK, WATER ; type
+	db 45 ; catch rate
+	db 201 ; base exp
+
+	INCBIN "gfx/pokemon/front/kabutops.pic", 0, 1 ; sprite dimensions
+	dw KabutopsPicFront, KabutopsPicBack
+
+	db SCRATCH, HARDEN, ABSORB, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_KADABRA ; pokedex id
-db 40 ; base hp
-db 35 ; base attack
-db 30 ; base defense
-db 105 ; base speed
-db 120 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 100 ; catch rate
-db 145 ; base exp yield
-INCBIN "gfx/pokemon/front/kadabra.pic",0,1 ; 66, sprite dimensions
-dw KadabraPicFront
-dw KadabraPicBack
-; attacks known at lvl 0
-db TELEPORT
-db CONFUSION
-db DISABLE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 28,29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_KADABRA ; pokedex id
+
+	db  40,  35,  30, 105, 120
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 100 ; catch rate
+	db 145 ; base exp
+
+	INCBIN "gfx/pokemon/front/kadabra.pic", 0, 1 ; sprite dimensions
+	dw KadabraPicFront, KadabraPicBack
+
+	db TELEPORT, CONFUSION, DISABLE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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/kakuna.asm
+++ b/data/pokemon/base_stats/kakuna.asm
@@ -1,28 +1,20 @@
-db DEX_KAKUNA ; pokedex id
-db 45 ; base hp
-db 25 ; base attack
-db 50 ; base defense
-db 35 ; base speed
-db 25 ; base special
-db BUG ; species type 1
-db POISON ; species type 2
-db 120 ; catch rate
-db 71 ; base exp yield
-INCBIN "gfx/pokemon/front/kakuna.pic",0,1 ; 55, sprite dimensions
-dw KakunaPicFront
-dw KakunaPicBack
-; attacks known at lvl 0
-db HARDEN
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_KAKUNA ; pokedex id
+
+	db  45,  25,  50,  35,  25
+	;   hp  atk  def  spd  spc
+
+	db BUG, POISON ; type
+	db 120 ; catch rate
+	db 71 ; base exp
+
+	INCBIN "gfx/pokemon/front/kakuna.pic", 0, 1 ; sprite dimensions
+	dw KakunaPicFront, KakunaPicBack
+
+	db HARDEN, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/kangaskhan.asm
+++ b/data/pokemon/base_stats/kangaskhan.asm
@@ -1,28 +1,25 @@
-db DEX_KANGASKHAN ; pokedex id
-db 105 ; base hp
-db 95 ; base attack
-db 80 ; base defense
-db 90 ; base speed
-db 40 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 45 ; catch rate
-db 175 ; base exp yield
-INCBIN "gfx/pokemon/front/kangaskhan.pic",0,1 ; 77, sprite dimensions
-dw KangaskhanPicFront
-dw KangaskhanPicBack
-; attacks known at lvl 0
-db COMET_PUNCH
-db RAGE
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20,24
-	tmlearn 25,26,27,31,32
-	tmlearn 34,38,40
-	tmlearn 44,48
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_KANGASKHAN ; pokedex id
+
+	db 105,  95,  80,  90,  40
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 45 ; catch rate
+	db 175 ; base exp
+
+	INCBIN "gfx/pokemon/front/kangaskhan.pic", 0, 1 ; sprite dimensions
+	dw KangaskhanPicFront, KangaskhanPicBack
+
+	db COMET_PUNCH, RAGE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_KINGLER ; pokedex id
-db 55 ; base hp
-db 130 ; base attack
-db 115 ; base defense
-db 75 ; base speed
-db 50 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 60 ; catch rate
-db 206 ; base exp yield
-INCBIN "gfx/pokemon/front/kingler.pic",0,1 ; 77, sprite dimensions
-dw KinglerPicFront
-dw KinglerPicBack
-; attacks known at lvl 0
-db BUBBLE
-db LEER
-db VICEGRIP
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34
-	tmlearn 44
-	tmlearn 50,51,53,54
-db 0 ; padding
+	db DEX_KINGLER ; pokedex id
+
+	db  55, 130, 115,  75,  50
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 60 ; catch rate
+	db 206 ; base exp
+
+	INCBIN "gfx/pokemon/front/kingler.pic", 0, 1 ; sprite dimensions
+	dw KinglerPicFront, KinglerPicBack
+
+	db BUBBLE, LEER, VICEGRIP, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_KOFFING ; pokedex id
-db 40 ; base hp
-db 65 ; base attack
-db 95 ; base defense
-db 35 ; base speed
-db 60 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 190 ; catch rate
-db 114 ; base exp yield
-INCBIN "gfx/pokemon/front/koffing.pic",0,1 ; 66, sprite dimensions
-dw KoffingPicFront
-dw KoffingPicBack
-; attacks known at lvl 0
-db TACKLE
-db SMOG
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 0
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 34,36,38
-	tmlearn 44,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_KOFFING ; pokedex id
+
+	db  40,  65,  95,  35,  60
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 190 ; catch rate
+	db 114 ; base exp
+
+	INCBIN "gfx/pokemon/front/koffing.pic", 0, 1 ; sprite dimensions
+	dw KoffingPicFront, KoffingPicBack
+
+	db TACKLE, SMOG, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_KRABBY ; pokedex id
-db 30 ; base hp
-db 105 ; base attack
-db 90 ; base defense
-db 50 ; base speed
-db 25 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 225 ; catch rate
-db 115 ; base exp yield
-INCBIN "gfx/pokemon/front/krabby.pic",0,1 ; 55, sprite dimensions
-dw KrabbyPicFront
-dw KrabbyPicBack
-; attacks known at lvl 0
-db BUBBLE
-db LEER
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34
-	tmlearn 44
-	tmlearn 50,51,53,54
-db 0 ; padding
+	db DEX_KRABBY ; pokedex id
+
+	db  30, 105,  90,  50,  25
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 225 ; catch rate
+	db 115 ; base exp
+
+	INCBIN "gfx/pokemon/front/krabby.pic", 0, 1 ; sprite dimensions
+	dw KrabbyPicFront, KrabbyPicBack
+
+	db BUBBLE, LEER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_LAPRAS ; pokedex id
-db 130 ; base hp
-db 85 ; base attack
-db 80 ; base defense
-db 60 ; base speed
-db 95 ; base special
-db WATER ; species type 1
-db ICE ; species type 2
-db 45 ; catch rate
-db 219 ; base exp yield
-INCBIN "gfx/pokemon/front/lapras.pic",0,1 ; 77, sprite dimensions
-dw LaprasPicFront
-dw LaprasPicBack
-; attacks known at lvl 0
-db WATER_GUN
-db GROWL
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,22,23,24
-	tmlearn 25,29,31,32
-	tmlearn 33,34,40
-	tmlearn 44,46
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_LAPRAS ; pokedex id
+
+	db 130,  85,  80,  60,  95
+	;   hp  atk  def  spd  spc
+
+	db WATER, ICE ; type
+	db 45 ; catch rate
+	db 219 ; base exp
+
+	INCBIN "gfx/pokemon/front/lapras.pic", 0, 1 ; sprite dimensions
+	dw LaprasPicFront, LaprasPicBack
+
+	db WATER_GUN, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_LICKITUNG ; pokedex id
-db 90 ; base hp
-db 55 ; base attack
-db 75 ; base defense
-db 30 ; base speed
-db 60 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 45 ; catch rate
-db 127 ; base exp yield
-INCBIN "gfx/pokemon/front/lickitung.pic",0,1 ; 77, sprite dimensions
-dw LickitungPicFront
-dw LickitungPicBack
-; attacks known at lvl 0
-db WRAP
-db SUPERSONIC
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,3,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20,24
-	tmlearn 25,26,27,31,32
-	tmlearn 34,38,40
-	tmlearn 44
-	tmlearn 50,51,53,54
-db 0 ; padding
+	db DEX_LICKITUNG ; pokedex id
+
+	db  90,  55,  75,  30,  60
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 45 ; catch rate
+	db 127 ; base exp
+
+	INCBIN "gfx/pokemon/front/lickitung.pic", 0, 1 ; sprite dimensions
+	dw LickitungPicFront, LickitungPicBack
+
+	db WRAP, SUPERSONIC, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_MACHAMP ; pokedex id
-db 90 ; base hp
-db 130 ; base attack
-db 80 ; base defense
-db 55 ; base speed
-db 65 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 45 ; catch rate
-db 193 ; base exp yield
-INCBIN "gfx/pokemon/front/machamp.pic",0,1 ; 77, sprite dimensions
-dw MachampPicFront
-dw MachampPicBack
-; attacks known at lvl 0
-db KARATE_CHOP
-db LOW_KICK
-db LEER
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,38,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MACHAMP ; pokedex id
+
+	db  90, 130,  80,  55,  65
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 45 ; catch rate
+	db 193 ; base exp
+
+	INCBIN "gfx/pokemon/front/machamp.pic", 0, 1 ; sprite dimensions
+	dw MachampPicFront, MachampPicBack
+
+	db KARATE_CHOP, LOW_KICK, LEER, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_MACHOKE ; pokedex id
-db 80 ; base hp
-db 100 ; base attack
-db 70 ; base defense
-db 45 ; base speed
-db 50 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 90 ; catch rate
-db 146 ; base exp yield
-INCBIN "gfx/pokemon/front/machoke.pic",0,1 ; 77, sprite dimensions
-dw MachokePicFront
-dw MachokePicBack
-; attacks known at lvl 0
-db KARATE_CHOP
-db LOW_KICK
-db LEER
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,38,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MACHOKE ; pokedex id
+
+	db  80, 100,  70,  45,  50
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 90 ; catch rate
+	db 146 ; base exp
+
+	INCBIN "gfx/pokemon/front/machoke.pic", 0, 1 ; sprite dimensions
+	dw MachokePicFront, MachokePicBack
+
+	db KARATE_CHOP, LOW_KICK, LEER, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_MACHOP ; pokedex id
-db 70 ; base hp
-db 80 ; base attack
-db 50 ; base defense
-db 35 ; base speed
-db 35 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 180 ; catch rate
-db 88 ; base exp yield
-INCBIN "gfx/pokemon/front/machop.pic",0,1 ; 55, sprite dimensions
-dw MachopPicFront
-dw MachopPicBack
-; attacks known at lvl 0
-db KARATE_CHOP
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,35,38,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MACHOP ; pokedex id
+
+	db  70,  80,  50,  35,  35
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 180 ; catch rate
+	db 88 ; base exp
+
+	INCBIN "gfx/pokemon/front/machop.pic", 0, 1 ; sprite dimensions
+	dw MachopPicFront, MachopPicBack
+
+	db KARATE_CHOP, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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/magikarp.asm
+++ b/data/pokemon/base_stats/magikarp.asm
@@ -1,28 +1,20 @@
-db DEX_MAGIKARP ; pokedex id
-db 20 ; base hp
-db 10 ; base attack
-db 55 ; base defense
-db 80 ; base speed
-db 20 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 255 ; catch rate
-db 20 ; base exp yield
-INCBIN "gfx/pokemon/front/magikarp.pic",0,1 ; 66, sprite dimensions
-dw MagikarpPicFront
-dw MagikarpPicBack
-; attacks known at lvl 0
-db SPLASH
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_MAGIKARP ; pokedex id
+
+	db  20,  10,  55,  80,  20
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 255 ; catch rate
+	db 20 ; base exp
+
+	INCBIN "gfx/pokemon/front/magikarp.pic", 0, 1 ; sprite dimensions
+	dw MagikarpPicFront, MagikarpPicBack
+
+	db SPLASH, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/magmar.asm
+++ b/data/pokemon/base_stats/magmar.asm
@@ -1,28 +1,24 @@
-db DEX_MAGMAR ; pokedex id
-db 65 ; base hp
-db 95 ; base attack
-db 57 ; base defense
-db 93 ; base speed
-db 85 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 45 ; catch rate
-db 167 ; base exp yield
-INCBIN "gfx/pokemon/front/magmar.pic",0,1 ; 66, sprite dimensions
-dw MagmarPicFront
-dw MagmarPicBack
-; attacks known at lvl 0
-db EMBER
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20
-	tmlearn 29,30,31,32
-	tmlearn 34,35,38,40
-	tmlearn 44,46
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MAGMAR ; pokedex id
+
+	db  65,  95,  57,  93,  85
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 45 ; catch rate
+	db 167 ; base exp
+
+	INCBIN "gfx/pokemon/front/magmar.pic", 0, 1 ; sprite dimensions
+	dw MagmarPicFront, MagmarPicBack
+
+	db EMBER, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_MAGNEMITE ; pokedex id
-db 25 ; base hp
-db 35 ; base attack
-db 70 ; base defense
-db 45 ; base speed
-db 95 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 190 ; catch rate
-db 89 ; base exp yield
-INCBIN "gfx/pokemon/front/magnemite.pic",0,1 ; 55, sprite dimensions
-dw MagnemitePicFront
-dw MagnemitePicBack
-; attacks known at lvl 0
-db TACKLE
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10
-	tmlearn 20,24
-	tmlearn 25,30,31,32
-	tmlearn 33,34,39
-	tmlearn 44,45
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_MAGNEMITE ; pokedex id
+
+	db  25,  35,  70,  45,  95
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 190 ; catch rate
+	db 89 ; base exp
+
+	INCBIN "gfx/pokemon/front/magnemite.pic", 0, 1 ; sprite dimensions
+	dw MagnemitePicFront, MagnemitePicBack
+
+	db TACKLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_MAGNETON ; pokedex id
-db 50 ; base hp
-db 60 ; base attack
-db 95 ; base defense
-db 70 ; base speed
-db 120 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 60 ; catch rate
-db 161 ; base exp yield
-INCBIN "gfx/pokemon/front/magneton.pic",0,1 ; 66, sprite dimensions
-dw MagnetonPicFront
-dw MagnetonPicBack
-; attacks known at lvl 0
-db TACKLE
-db SONICBOOM
-db THUNDERSHOCK
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,15
-	tmlearn 20,24
-	tmlearn 25,30,31,32
-	tmlearn 33,34,39
-	tmlearn 44,45
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_MAGNETON ; pokedex id
+
+	db  50,  60,  95,  70, 120
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 60 ; catch rate
+	db 161 ; base exp
+
+	INCBIN "gfx/pokemon/front/magneton.pic", 0, 1 ; sprite dimensions
+	dw MagnetonPicFront, MagnetonPicBack
+
+	db TACKLE, SONICBOOM, THUNDERSHOCK, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_MANKEY ; pokedex id
-db 40 ; base hp
-db 80 ; base attack
-db 35 ; base defense
-db 70 ; base speed
-db 35 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 190 ; catch rate
-db 74 ; base exp yield
-INCBIN "gfx/pokemon/front/mankey.pic",0,1 ; 55, sprite dimensions
-dw MankeyPicFront
-dw MankeyPicBack
-; attacks known at lvl 0
-db SCRATCH
-db LEER
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,16
-	tmlearn 17,18,19,20,24
-	tmlearn 25,28,31,32
-	tmlearn 34,35,39,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MANKEY ; pokedex id
+
+	db  40,  80,  35,  70,  35
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 190 ; catch rate
+	db 74 ; base exp
+
+	INCBIN "gfx/pokemon/front/mankey.pic", 0, 1 ; sprite dimensions
+	dw MankeyPicFront, MankeyPicBack
+
+	db SCRATCH, LEER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_MAROWAK ; pokedex id
-db 60 ; base hp
-db 80 ; base attack
-db 110 ; base defense
-db 45 ; base speed
-db 50 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 75 ; catch rate
-db 124 ; base exp yield
-INCBIN "gfx/pokemon/front/marowak.pic",0,1 ; 66, sprite dimensions
-dw MarowakPicFront
-dw MarowakPicBack
-; attacks known at lvl 0
-db BONE_CLUB
-db GROWL
-db LEER
-db FOCUS_ENERGY
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,38,40
-	tmlearn 44
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_MAROWAK ; pokedex id
+
+	db  60,  80, 110,  45,  50
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 75 ; catch rate
+	db 124 ; base exp
+
+	INCBIN "gfx/pokemon/front/marowak.pic", 0, 1 ; sprite dimensions
+	dw MarowakPicFront, MarowakPicBack
+
+	db BONE_CLUB, GROWL, LEER, FOCUS_ENERGY ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_MEOWTH ; pokedex id
-db 40 ; base hp
-db 45 ; base attack
-db 35 ; base defense
-db 90 ; base speed
-db 40 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 255 ; catch rate
-db 69 ; base exp yield
-INCBIN "gfx/pokemon/front/meowth.pic",0,1 ; 55, sprite dimensions
-dw MeowthPicFront
-dw MeowthPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,16
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_MEOWTH ; pokedex id
+
+	db  40,  45,  35,  90,  40
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 255 ; catch rate
+	db 69 ; base exp
+
+	INCBIN "gfx/pokemon/front/meowth.pic", 0, 1 ; sprite dimensions
+	dw MeowthPicFront, MeowthPicBack
+
+	db SCRATCH, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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/metapod.asm
+++ b/data/pokemon/base_stats/metapod.asm
@@ -1,28 +1,20 @@
-db DEX_METAPOD ; pokedex id
-db 50 ; base hp
-db 20 ; base attack
-db 55 ; base defense
-db 30 ; base speed
-db 25 ; base special
-db BUG ; species type 1
-db BUG ; species type 2
-db 120 ; catch rate
-db 72 ; base exp yield
-INCBIN "gfx/pokemon/front/metapod.pic",0,1 ; 55, sprite dimensions
-dw MetapodPicFront
-dw MetapodPicBack
-; attacks known at lvl 0
-db HARDEN
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_METAPOD ; pokedex id
+
+	db  50,  20,  55,  30,  25
+	;   hp  atk  def  spd  spc
+
+	db BUG, BUG ; type
+	db 120 ; catch rate
+	db 72 ; base exp
+
+	INCBIN "gfx/pokemon/front/metapod.pic", 0, 1 ; sprite dimensions
+	dw MetapodPicFront, MetapodPicBack
+
+	db HARDEN, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/mew.asm
+++ b/data/pokemon/base_stats/mew.asm
@@ -1,29 +1,31 @@
-MewBaseStats::
-db DEX_MEW ; pokedex id
-db 100 ; base hp
-db 100 ; base attack
-db 100 ; base defense
-db 100 ; base speed
-db 100 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 45 ; catch rate
-db 64 ; base exp yield
-INCBIN "gfx/pokemon/front/mew.pic",0,1 ; 55, sprite dimensions
-dw MewPicFront
-dw MewPicBack
-; attacks known at lvl 0
-db POUND
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,2,3,4,5,6,7,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,21,22,23,24
-	tmlearn 25,26,27,28,29,30,31,32
-	tmlearn 33,34,35,36,37,38,39,40
-	tmlearn 41,42,43,44,45,46,47,48
-	tmlearn 49,50,51,52,53,54,55,56
-db %11111111 ; usually spacing
+	db DEX_MEW ; pokedex id
+
+	db 100, 100, 100, 100, 100
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 45 ; catch rate
+	db 64 ; base exp
+
+	INCBIN "gfx/pokemon/front/mew.pic", 0, 1 ; sprite dimensions
+	dw MewPicFront, MewPicBack
+
+	db POUND, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,27 @@
-db DEX_MEWTWO ; pokedex id
-db 106 ; base hp
-db 110 ; base attack
-db 90 ; base defense
-db 130 ; base speed
-db 154 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 3 ; catch rate
-db 220 ; base exp yield
-INCBIN "gfx/pokemon/front/mewtwo.pic",0,1 ; 77, sprite dimensions
-dw MewtwoPicFront
-dw MewtwoPicBack
-; attacks known at lvl 0
-db CONFUSION
-db DISABLE
-db SWIFT
-db PSYCHIC_M
-db 5 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,36,38,40
-	tmlearn 44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_MEWTWO ; pokedex id
+
+	db 106, 110,  90, 130, 154
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 3 ; catch rate
+	db 220 ; base exp
+
+	INCBIN "gfx/pokemon/front/mewtwo.pic", 0, 1 ; sprite dimensions
+	dw MewtwoPicFront, MewtwoPicBack
+
+	db CONFUSION, DISABLE, SWIFT, PSYCHIC_M ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_MOLTRES ; pokedex id
-db 90 ; base hp
-db 100 ; base attack
-db 90 ; base defense
-db 90 ; base speed
-db 125 ; base special
-db FIRE ; species type 1
-db FLYING ; species type 2
-db 3 ; catch rate
-db 217 ; base exp yield
-INCBIN "gfx/pokemon/front/moltres.pic",0,1 ; 77, sprite dimensions
-dw MoltresPicFront
-dw MoltresPicBack
-; attacks known at lvl 0
-db PECK
-db FIRE_SPIN
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,38,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_MOLTRES ; pokedex id
+
+	db  90, 100,  90,  90, 125
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FLYING ; type
+	db 3 ; catch rate
+	db 217 ; base exp
+
+	INCBIN "gfx/pokemon/front/moltres.pic", 0, 1 ; sprite dimensions
+	dw MoltresPicFront, MoltresPicBack
+
+	db PECK, FIRE_SPIN, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_MR_MIME ; pokedex id
-db 40 ; base hp
-db 45 ; base attack
-db 65 ; base defense
-db 90 ; base speed
-db 100 ; base special
-db PSYCHIC ; species type 1
-db PSYCHIC ; species type 2
-db 45 ; catch rate
-db 136 ; base exp yield
-INCBIN "gfx/pokemon/front/mr.mime.pic",0,1 ; 66, sprite dimensions
-dw MrMimePicFront
-dw MrMimePicBack
-; attacks known at lvl 0
-db CONFUSION
-db BARRIER
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,35,40
-	tmlearn 44,45,46
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_MR_MIME ; pokedex id
+
+	db  40,  45,  65,  90, 100
+	;   hp  atk  def  spd  spc
+
+	db PSYCHIC, PSYCHIC ; type
+	db 45 ; catch rate
+	db 136 ; base exp
+
+	INCBIN "gfx/pokemon/front/mr.mime.pic", 0, 1 ; sprite dimensions
+	dw MrMimePicFront, MrMimePicBack
+
+	db CONFUSION, BARRIER, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_MUK ; pokedex id
-db 105 ; base hp
-db 105 ; base attack
-db 75 ; base defense
-db 50 ; base speed
-db 65 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 75 ; catch rate
-db 157 ; base exp yield
-INCBIN "gfx/pokemon/front/muk.pic",0,1 ; 77, sprite dimensions
-dw MukPicFront
-dw MukPicBack
-; attacks known at lvl 0
-db POUND
-db DISABLE
-db POISON_GAS
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 15
-	tmlearn 20,21,24
-	tmlearn 25,31,32
-	tmlearn 34,36,38
-	tmlearn 44,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_MUK ; pokedex id
+
+	db 105, 105,  75,  50,  65
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 75 ; catch rate
+	db 157 ; base exp
+
+	INCBIN "gfx/pokemon/front/muk.pic", 0, 1 ; sprite dimensions
+	dw MukPicFront, MukPicBack
+
+	db POUND, DISABLE, POISON_GAS, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_NIDOKING ; pokedex id
-db 81 ; base hp
-db 92 ; base attack
-db 77 ; base defense
-db 85 ; base speed
-db 75 ; base special
-db POISON ; species type 1
-db GROUND ; species type 2
-db 45 ; catch rate
-db 195 ; base exp yield
-INCBIN "gfx/pokemon/front/nidoking.pic",0,1 ; 77, sprite dimensions
-dw NidokingPicFront
-dw NidokingPicBack
-; attacks known at lvl 0
-db TACKLE
-db HORN_ATTACK
-db POISON_STING
-db THRASH
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,7,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,24
-	tmlearn 25,26,27,31,32
-	tmlearn 33,34,38,40
-	tmlearn 44,48
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_NIDOKING ; pokedex id
+
+	db  81,  92,  77,  85,  75
+	;   hp  atk  def  spd  spc
+
+	db POISON, GROUND ; type
+	db 45 ; catch rate
+	db 195 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidoking.pic", 0, 1 ; sprite dimensions
+	dw NidokingPicFront, NidokingPicBack
+
+	db TACKLE, HORN_ATTACK, POISON_STING, THRASH ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_NIDOQUEEN ; pokedex id
-db 90 ; base hp
-db 82 ; base attack
-db 87 ; base defense
-db 76 ; base speed
-db 75 ; base special
-db POISON ; species type 1
-db GROUND ; species type 2
-db 45 ; catch rate
-db 194 ; base exp yield
-INCBIN "gfx/pokemon/front/nidoqueen.pic",0,1 ; 77, sprite dimensions
-dw NidoqueenPicFront
-dw NidoqueenPicBack
-; attacks known at lvl 0
-db TACKLE
-db SCRATCH
-db TAIL_WHIP
-db BODY_SLAM
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,7,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,24
-	tmlearn 25,26,27,31,32
-	tmlearn 33,34,38,40
-	tmlearn 44,48
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_NIDOQUEEN ; pokedex id
+
+	db  90,  82,  87,  76,  75
+	;   hp  atk  def  spd  spc
+
+	db POISON, GROUND ; type
+	db 45 ; catch rate
+	db 194 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidoqueen.pic", 0, 1 ; sprite dimensions
+	dw NidoqueenPicFront, NidoqueenPicBack
+
+	db TACKLE, SCRATCH, TAIL_WHIP, BODY_SLAM ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_NIDORAN_F ; pokedex id
-db 55 ; base hp
-db 47 ; base attack
-db 52 ; base defense
-db 41 ; base speed
-db 40 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 235 ; catch rate
-db 59 ; base exp yield
-INCBIN "gfx/pokemon/front/nidoranf.pic",0,1 ; 55, sprite dimensions
-dw NidoranFPicFront
-dw NidoranFPicBack
-; attacks known at lvl 0
-db GROWL
-db TACKLE
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,14
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_NIDORAN_F ; pokedex id
+
+	db  55,  47,  52,  41,  40
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 235 ; catch rate
+	db 59 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidoranf.pic", 0, 1 ; sprite dimensions
+	dw NidoranFPicFront, NidoranFPicBack
+
+	db GROWL, TACKLE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_NIDORAN_M ; pokedex id
-db 46 ; base hp
-db 57 ; base attack
-db 40 ; base defense
-db 50 ; base speed
-db 40 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 235 ; catch rate
-db 60 ; base exp yield
-INCBIN "gfx/pokemon/front/nidoranm.pic",0,1 ; 55, sprite dimensions
-dw NidoranMPicFront
-dw NidoranMPicBack
-; attacks known at lvl 0
-db LEER
-db TACKLE
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,14
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_NIDORAN_M ; pokedex id
+
+	db  46,  57,  40,  50,  40
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 235 ; catch rate
+	db 60 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidoranm.pic", 0, 1 ; sprite dimensions
+	dw NidoranMPicFront, NidoranMPicBack
+
+	db LEER, TACKLE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_NIDORINA ; pokedex id
-db 70 ; base hp
-db 62 ; base attack
-db 67 ; base defense
-db 56 ; base speed
-db 55 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 120 ; catch rate
-db 117 ; base exp yield
-INCBIN "gfx/pokemon/front/nidorina.pic",0,1 ; 66, sprite dimensions
-dw NidorinaPicFront
-dw NidorinaPicBack
-; attacks known at lvl 0
-db GROWL
-db TACKLE
-db SCRATCH
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_NIDORINA ; pokedex id
+
+	db  70,  62,  67,  56,  55
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 120 ; catch rate
+	db 117 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidorina.pic", 0, 1 ; sprite dimensions
+	dw NidorinaPicFront, NidorinaPicBack
+
+	db GROWL, TACKLE, SCRATCH, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_NIDORINO ; pokedex id
-db 61 ; base hp
-db 72 ; base attack
-db 57 ; base defense
-db 65 ; base speed
-db 55 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 120 ; catch rate
-db 118 ; base exp yield
-INCBIN "gfx/pokemon/front/nidorino.pic",0,1 ; 66, sprite dimensions
-dw NidorinoPicFront
-dw NidorinoPicBack
-; attacks known at lvl 0
-db LEER
-db TACKLE
-db HORN_ATTACK
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_NIDORINO ; pokedex id
+
+	db  61,  72,  57,  65,  55
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 120 ; catch rate
+	db 118 ; base exp
+
+	INCBIN "gfx/pokemon/front/nidorino.pic", 0, 1 ; sprite dimensions
+	dw NidorinoPicFront, NidorinoPicBack
+
+	db LEER, TACKLE, HORN_ATTACK, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_NINETALES ; pokedex id
-db 73 ; base hp
-db 76 ; base attack
-db 75 ; base defense
-db 100 ; base speed
-db 100 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 75 ; catch rate
-db 178 ; base exp yield
-INCBIN "gfx/pokemon/front/ninetales.pic",0,1 ; 77, sprite dimensions
-dw NinetalesPicFront
-dw NinetalesPicBack
-; attacks known at lvl 0
-db EMBER
-db TAIL_WHIP
-db QUICK_ATTACK
-db ROAR
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_NINETALES ; pokedex id
+
+	db  73,  76,  75, 100, 100
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 75 ; catch rate
+	db 178 ; base exp
+
+	INCBIN "gfx/pokemon/front/ninetales.pic", 0, 1 ; sprite dimensions
+	dw NinetalesPicFront, NinetalesPicBack
+
+	db EMBER, TAIL_WHIP, QUICK_ATTACK, ROAR ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_ODDISH ; pokedex id
-db 45 ; base hp
-db 50 ; base attack
-db 55 ; base defense
-db 30 ; base speed
-db 75 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 255 ; catch rate
-db 78 ; base exp yield
-INCBIN "gfx/pokemon/front/oddish.pic",0,1 ; 55, sprite dimensions
-dw OddishPicFront
-dw OddishPicBack
-; attacks known at lvl 0
-db ABSORB
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_ODDISH ; pokedex id
+
+	db  45,  50,  55,  30,  75
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 255 ; catch rate
+	db 78 ; base exp
+
+	INCBIN "gfx/pokemon/front/oddish.pic", 0, 1 ; sprite dimensions
+	dw OddishPicFront, OddishPicBack
+
+	db ABSORB, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_OMANYTE ; pokedex id
-db 35 ; base hp
-db 40 ; base attack
-db 100 ; base defense
-db 35 ; base speed
-db 90 ; base special
-db ROCK ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 120 ; base exp yield
-INCBIN "gfx/pokemon/front/omanyte.pic",0,1 ; 55, sprite dimensions
-dw OmanytePicFront
-dw OmanytePicBack
-; attacks known at lvl 0
-db WATER_GUN
-db WITHDRAW
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_OMANYTE ; pokedex id
+
+	db  35,  40, 100,  35,  90
+	;   hp  atk  def  spd  spc
+
+	db ROCK, WATER ; type
+	db 45 ; catch rate
+	db 120 ; base exp
+
+	INCBIN "gfx/pokemon/front/omanyte.pic", 0, 1 ; sprite dimensions
+	dw OmanytePicFront, OmanytePicBack
+
+	db WATER_GUN, WITHDRAW, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_OMASTAR ; pokedex id
-db 70 ; base hp
-db 60 ; base attack
-db 125 ; base defense
-db 55 ; base speed
-db 115 ; base special
-db ROCK ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 199 ; base exp yield
-INCBIN "gfx/pokemon/front/omastar.pic",0,1 ; 66, sprite dimensions
-dw OmastarPicFront
-dw OmastarPicBack
-; attacks known at lvl 0
-db WATER_GUN
-db WITHDRAW
-db HORN_ATTACK
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,19,20
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_OMASTAR ; pokedex id
+
+	db  70,  60, 125,  55, 115
+	;   hp  atk  def  spd  spc
+
+	db ROCK, WATER ; type
+	db 45 ; catch rate
+	db 199 ; base exp
+
+	INCBIN "gfx/pokemon/front/omastar.pic", 0, 1 ; sprite dimensions
+	dw OmastarPicFront, OmastarPicBack
+
+	db WATER_GUN, WITHDRAW, HORN_ATTACK, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ONIX ; pokedex id
-db 35 ; base hp
-db 45 ; base attack
-db 160 ; base defense
-db 70 ; base speed
-db 30 ; base special
-db ROCK ; species type 1
-db GROUND ; species type 2
-db 45 ; catch rate
-db 108 ; base exp yield
-INCBIN "gfx/pokemon/front/onix.pic",0,1 ; 77, sprite dimensions
-dw OnixPicFront
-dw OnixPicBack
-; attacks known at lvl 0
-db TACKLE
-db SCREECH
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,36,40
-	tmlearn 44,47,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_ONIX ; pokedex id
+
+	db  35,  45, 160,  70,  30
+	;   hp  atk  def  spd  spc
+
+	db ROCK, GROUND ; type
+	db 45 ; catch rate
+	db 108 ; base exp
+
+	INCBIN "gfx/pokemon/front/onix.pic", 0, 1 ; sprite dimensions
+	dw OnixPicFront, OnixPicBack
+
+	db TACKLE, SCREECH, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_PARAS ; pokedex id
-db 35 ; base hp
-db 70 ; base attack
-db 55 ; base defense
-db 25 ; base speed
-db 55 ; base special
-db BUG ; species type 1
-db GRASS ; species type 2
-db 190 ; catch rate
-db 70 ; base exp yield
-INCBIN "gfx/pokemon/front/paras.pic",0,1 ; 55, sprite dimensions
-dw ParasPicFront
-dw ParasPicBack
-; attacks known at lvl 0
-db SCRATCH
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 28,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_PARAS ; pokedex id
+
+	db  35,  70,  55,  25,  55
+	;   hp  atk  def  spd  spc
+
+	db BUG, GRASS ; type
+	db 190 ; catch rate
+	db 70 ; base exp
+
+	INCBIN "gfx/pokemon/front/paras.pic", 0, 1 ; sprite dimensions
+	dw ParasPicFront, ParasPicBack
+
+	db SCRATCH, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_PARASECT ; pokedex id
-db 60 ; base hp
-db 95 ; base attack
-db 80 ; base defense
-db 30 ; base speed
-db 80 ; base special
-db BUG ; species type 1
-db GRASS ; species type 2
-db 75 ; catch rate
-db 128 ; base exp yield
-INCBIN "gfx/pokemon/front/parasect.pic",0,1 ; 77, sprite dimensions
-dw ParasectPicFront
-dw ParasectPicBack
-; attacks known at lvl 0
-db SCRATCH
-db STUN_SPORE
-db LEECH_LIFE
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 28,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_PARASECT ; pokedex id
+
+	db  60,  95,  80,  30,  80
+	;   hp  atk  def  spd  spc
+
+	db BUG, GRASS ; type
+	db 75 ; catch rate
+	db 128 ; base exp
+
+	INCBIN "gfx/pokemon/front/parasect.pic", 0, 1 ; sprite dimensions
+	dw ParasectPicFront, ParasectPicBack
+
+	db SCRATCH, STUN_SPORE, LEECH_LIFE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_PERSIAN ; pokedex id
-db 65 ; base hp
-db 70 ; base attack
-db 60 ; base defense
-db 115 ; base speed
-db 65 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 90 ; catch rate
-db 148 ; base exp yield
-INCBIN "gfx/pokemon/front/persian.pic",0,1 ; 77, sprite dimensions
-dw PersianPicFront
-dw PersianPicBack
-; attacks known at lvl 0
-db SCRATCH
-db GROWL
-db BITE
-db SCREECH
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,15,16
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_PERSIAN ; pokedex id
+
+	db  65,  70,  60, 115,  65
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 90 ; catch rate
+	db 148 ; base exp
+
+	INCBIN "gfx/pokemon/front/persian.pic", 0, 1 ; sprite dimensions
+	dw PersianPicFront, PersianPicBack
+
+	db SCRATCH, GROWL, BITE, SCREECH ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_PIDGEOT ; pokedex id
-db 83 ; base hp
-db 80 ; base attack
-db 75 ; base defense
-db 91 ; base speed
-db 70 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 172 ; base exp yield
-INCBIN "gfx/pokemon/front/pidgeot.pic",0,1 ; 77, sprite dimensions
-dw PidgeotPicFront
-dw PidgeotPicBack
-; attacks known at lvl 0
-db GUST
-db SAND_ATTACK
-db QUICK_ATTACK
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_PIDGEOT ; pokedex id
+
+	db  83,  80,  75,  91,  70
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 45 ; catch rate
+	db 172 ; base exp
+
+	INCBIN "gfx/pokemon/front/pidgeot.pic", 0, 1 ; sprite dimensions
+	dw PidgeotPicFront, PidgeotPicBack
+
+	db GUST, SAND_ATTACK, QUICK_ATTACK, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_PIDGEOTTO ; pokedex id
-db 63 ; base hp
-db 60 ; base attack
-db 55 ; base defense
-db 71 ; base speed
-db 50 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 120 ; catch rate
-db 113 ; base exp yield
-INCBIN "gfx/pokemon/front/pidgeotto.pic",0,1 ; 66, sprite dimensions
-dw PidgeottoPicFront
-dw PidgeottoPicBack
-; attacks known at lvl 0
-db GUST
-db SAND_ATTACK
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_PIDGEOTTO ; pokedex id
+
+	db  63,  60,  55,  71,  50
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 120 ; catch rate
+	db 113 ; base exp
+
+	INCBIN "gfx/pokemon/front/pidgeotto.pic", 0, 1 ; sprite dimensions
+	dw PidgeottoPicFront, PidgeottoPicBack
+
+	db GUST, SAND_ATTACK, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_PIDGEY ; pokedex id
-db 40 ; base hp
-db 45 ; base attack
-db 40 ; base defense
-db 56 ; base speed
-db 35 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 255 ; catch rate
-db 55 ; base exp yield
-INCBIN "gfx/pokemon/front/pidgey.pic",0,1 ; 55, sprite dimensions
-dw PidgeyPicFront
-dw PidgeyPicBack
-; attacks known at lvl 0
-db GUST
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_PIDGEY ; pokedex id
+
+	db  40,  45,  40,  56,  35
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 255 ; catch rate
+	db 55 ; base exp
+
+	INCBIN "gfx/pokemon/front/pidgey.pic", 0, 1 ; sprite dimensions
+	dw PidgeyPicFront, PidgeyPicBack
+
+	db GUST, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_PIKACHU ; pokedex id
-db 35 ; base hp
-db 55 ; base attack
-db 30 ; base defense
-db 90 ; base speed
-db 50 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 190 ; catch rate
-db 82 ; base exp yield
-INCBIN "gfx/pokemon/front/pikachu.pic",0,1 ; 55, sprite dimensions
-dw PikachuPicFront
-dw PikachuPicBack
-; attacks known at lvl 0
-db THUNDERSHOCK
-db GROWL
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,16
-	tmlearn 17,19,20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_PIKACHU ; pokedex id
+
+	db  35,  55,  30,  90,  50
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 190 ; catch rate
+	db 82 ; base exp
+
+	INCBIN "gfx/pokemon/front/pikachu.pic", 0, 1 ; sprite dimensions
+	dw PikachuPicFront, PikachuPicBack
+
+	db THUNDERSHOCK, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_PINSIR ; pokedex id
-db 65 ; base hp
-db 125 ; base attack
-db 100 ; base defense
-db 85 ; base speed
-db 55 ; base special
-db BUG ; species type 1
-db BUG ; species type 2
-db 45 ; catch rate
-db 200 ; base exp yield
-INCBIN "gfx/pokemon/front/pinsir.pic",0,1 ; 77, sprite dimensions
-dw PinsirPicFront
-dw PinsirPicBack
-; attacks known at lvl 0
-db VICEGRIP
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 17,19,20
-	tmlearn 31,32
-	tmlearn 34
-	tmlearn 44
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_PINSIR ; pokedex id
+
+	db  65, 125, 100,  85,  55
+	;   hp  atk  def  spd  spc
+
+	db BUG, BUG ; type
+	db 45 ; catch rate
+	db 200 ; base exp
+
+	INCBIN "gfx/pokemon/front/pinsir.pic", 0, 1 ; sprite dimensions
+	dw PinsirPicFront, PinsirPicBack
+
+	db VICEGRIP, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_POLIWAG ; pokedex id
-db 40 ; base hp
-db 50 ; base attack
-db 40 ; base defense
-db 90 ; base speed
-db 40 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 255 ; catch rate
-db 77 ; base exp yield
-INCBIN "gfx/pokemon/front/poliwag.pic",0,1 ; 55, sprite dimensions
-dw PoliwagPicFront
-dw PoliwagPicBack
-; attacks known at lvl 0
-db BUBBLE
-db 0
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 29,31,32
-	tmlearn 34,40
-	tmlearn 44,46
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_POLIWAG ; pokedex id
+
+	db  40,  50,  40,  90,  40
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 255 ; catch rate
+	db 77 ; base exp
+
+	INCBIN "gfx/pokemon/front/poliwag.pic", 0, 1 ; sprite dimensions
+	dw PoliwagPicFront, PoliwagPicBack
+
+	db BUBBLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_POLIWHIRL ; pokedex id
-db 65 ; base hp
-db 65 ; base attack
-db 65 ; base defense
-db 90 ; base speed
-db 50 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 120 ; catch rate
-db 131 ; base exp yield
-INCBIN "gfx/pokemon/front/poliwhirl.pic",0,1 ; 66, sprite dimensions
-dw PoliwhirlPicFront
-dw PoliwhirlPicBack
-; attacks known at lvl 0
-db BUBBLE
-db HYPNOSIS
-db WATER_GUN
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20
-	tmlearn 26,27,29,31,32
-	tmlearn 34,35,40
-	tmlearn 44,46
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_POLIWHIRL ; pokedex id
+
+	db  65,  65,  65,  90,  50
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 120 ; catch rate
+	db 131 ; base exp
+
+	INCBIN "gfx/pokemon/front/poliwhirl.pic", 0, 1 ; sprite dimensions
+	dw PoliwhirlPicFront, PoliwhirlPicBack
+
+	db BUBBLE, HYPNOSIS, WATER_GUN, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_POLIWRATH ; pokedex id
-db 90 ; base hp
-db 85 ; base attack
-db 95 ; base defense
-db 70 ; base speed
-db 70 ; base special
-db WATER ; species type 1
-db FIGHTING ; species type 2
-db 45 ; catch rate
-db 185 ; base exp yield
-INCBIN "gfx/pokemon/front/poliwrath.pic",0,1 ; 77, sprite dimensions
-dw PoliwrathPicFront
-dw PoliwrathPicBack
-; attacks known at lvl 0
-db HYPNOSIS
-db WATER_GUN
-db DOUBLESLAP
-db BODY_SLAM
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20
-	tmlearn 26,27,29,31,32
-	tmlearn 34,35,40
-	tmlearn 44,46
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_POLIWRATH ; pokedex id
+
+	db  90,  85,  95,  70,  70
+	;   hp  atk  def  spd  spc
+
+	db WATER, FIGHTING ; type
+	db 45 ; catch rate
+	db 185 ; base exp
+
+	INCBIN "gfx/pokemon/front/poliwrath.pic", 0, 1 ; sprite dimensions
+	dw PoliwrathPicFront, PoliwrathPicBack
+
+	db HYPNOSIS, WATER_GUN, DOUBLESLAP, BODY_SLAM ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_PONYTA ; pokedex id
-db 50 ; base hp
-db 85 ; base attack
-db 55 ; base defense
-db 90 ; base speed
-db 65 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 190 ; catch rate
-db 152 ; base exp yield
-INCBIN "gfx/pokemon/front/ponyta.pic",0,1 ; 66, sprite dimensions
-dw PonytaPicFront
-dw PonytaPicBack
-; attacks known at lvl 0
-db EMBER
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_PONYTA ; pokedex id
+
+	db  50,  85,  55,  90,  65
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 190 ; catch rate
+	db 152 ; base exp
+
+	INCBIN "gfx/pokemon/front/ponyta.pic", 0, 1 ; sprite dimensions
+	dw PonytaPicFront, PonytaPicBack
+
+	db EMBER, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_PORYGON ; pokedex id
-db 65 ; base hp
-db 60 ; base attack
-db 70 ; base defense
-db 40 ; base speed
-db 75 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 45 ; catch rate
-db 130 ; base exp yield
-INCBIN "gfx/pokemon/front/porygon.pic",0,1 ; 66, sprite dimensions
-dw PorygonPicFront
-dw PorygonPicBack
-; attacks known at lvl 0
-db TACKLE
-db SHARPEN
-db CONVERSION
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,13,14,15
-	tmlearn 20,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45,46
-	tmlearn 49,50,55
-db 0 ; padding
+	db DEX_PORYGON ; pokedex id
+
+	db  65,  60,  70,  40,  75
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 45 ; catch rate
+	db 130 ; base exp
+
+	INCBIN "gfx/pokemon/front/porygon.pic", 0, 1 ; sprite dimensions
+	dw PorygonPicFront, PorygonPicBack
+
+	db TACKLE, SHARPEN, CONVERSION, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_PRIMEAPE ; pokedex id
-db 65 ; base hp
-db 105 ; base attack
-db 60 ; base defense
-db 95 ; base speed
-db 60 ; base special
-db FIGHTING ; species type 1
-db FIGHTING ; species type 2
-db 75 ; catch rate
-db 149 ; base exp yield
-INCBIN "gfx/pokemon/front/primeape.pic",0,1 ; 77, sprite dimensions
-dw PrimeapePicFront
-dw PrimeapePicBack
-; attacks known at lvl 0
-db SCRATCH
-db LEER
-db KARATE_CHOP
-db FURY_SWIPES
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15,16
-	tmlearn 17,18,19,20,24
-	tmlearn 25,28,31,32
-	tmlearn 34,35,39,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_PRIMEAPE ; pokedex id
+
+	db  65, 105,  60,  95,  60
+	;   hp  atk  def  spd  spc
+
+	db FIGHTING, FIGHTING ; type
+	db 75 ; catch rate
+	db 149 ; base exp
+
+	INCBIN "gfx/pokemon/front/primeape.pic", 0, 1 ; sprite dimensions
+	dw PrimeapePicFront, PrimeapePicBack
+
+	db SCRATCH, LEER, KARATE_CHOP, FURY_SWIPES ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_PSYDUCK ; pokedex id
-db 50 ; base hp
-db 52 ; base attack
-db 48 ; base defense
-db 55 ; base speed
-db 50 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 190 ; catch rate
-db 80 ; base exp yield
-INCBIN "gfx/pokemon/front/psyduck.pic",0,1 ; 55, sprite dimensions
-dw PsyduckPicFront
-dw PsyduckPicBack
-; attacks known at lvl 0
-db SCRATCH
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,16
-	tmlearn 17,18,19,20
-	tmlearn 28,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_PSYDUCK ; pokedex id
+
+	db  50,  52,  48,  55,  50
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 190 ; catch rate
+	db 80 ; base exp
+
+	INCBIN "gfx/pokemon/front/psyduck.pic", 0, 1 ; sprite dimensions
+	dw PsyduckPicFront, PsyduckPicBack
+
+	db SCRATCH, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_RAICHU ; pokedex id
-db 60 ; base hp
-db 90 ; base attack
-db 55 ; base defense
-db 100 ; base speed
-db 90 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 75 ; catch rate
-db 122 ; base exp yield
-INCBIN "gfx/pokemon/front/raichu.pic",0,1 ; 77, sprite dimensions
-dw RaichuPicFront
-dw RaichuPicBack
-; attacks known at lvl 0
-db THUNDERSHOCK
-db GROWL
-db THUNDER_WAVE
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,15,16
-	tmlearn 17,19,20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_RAICHU ; pokedex id
+
+	db  60,  90,  55, 100,  90
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 75 ; catch rate
+	db 122 ; base exp
+
+	INCBIN "gfx/pokemon/front/raichu.pic", 0, 1 ; sprite dimensions
+	dw RaichuPicFront, RaichuPicBack
+
+	db THUNDERSHOCK, GROWL, THUNDER_WAVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_RAPIDASH ; pokedex id
-db 65 ; base hp
-db 100 ; base attack
-db 70 ; base defense
-db 105 ; base speed
-db 80 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 60 ; catch rate
-db 192 ; base exp yield
-INCBIN "gfx/pokemon/front/rapidash.pic",0,1 ; 77, sprite dimensions
-dw RapidashPicFront
-dw RapidashPicBack
-; attacks known at lvl 0
-db EMBER
-db TAIL_WHIP
-db STOMP
-db GROWL
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_RAPIDASH ; pokedex id
+
+	db  65, 100,  70, 105,  80
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 60 ; catch rate
+	db 192 ; base exp
+
+	INCBIN "gfx/pokemon/front/rapidash.pic", 0, 1 ; sprite dimensions
+	dw RapidashPicFront, RapidashPicBack
+
+	db EMBER, TAIL_WHIP, STOMP, GROWL ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_RATICATE ; pokedex id
-db 55 ; base hp
-db 81 ; base attack
-db 60 ; base defense
-db 97 ; base speed
-db 50 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 90 ; catch rate
-db 116 ; base exp yield
-INCBIN "gfx/pokemon/front/raticate.pic",0,1 ; 66, sprite dimensions
-dw RaticatePicFront
-dw RaticatePicBack
-; attacks known at lvl 0
-db TACKLE
-db TAIL_WHIP
-db QUICK_ATTACK
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,24
-	tmlearn 25,28,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_RATICATE ; pokedex id
+
+	db  55,  81,  60,  97,  50
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 90 ; catch rate
+	db 116 ; base exp
+
+	INCBIN "gfx/pokemon/front/raticate.pic", 0, 1 ; sprite dimensions
+	dw RaticatePicFront, RaticatePicBack
+
+	db TACKLE, TAIL_WHIP, QUICK_ATTACK, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_RATTATA ; pokedex id
-db 30 ; base hp
-db 56 ; base attack
-db 35 ; base defense
-db 72 ; base speed
-db 25 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 255 ; catch rate
-db 57 ; base exp yield
-INCBIN "gfx/pokemon/front/rattata.pic",0,1 ; 55, sprite dimensions
-dw RattataPicFront
-dw RattataPicBack
-; attacks known at lvl 0
-db TACKLE
-db TAIL_WHIP
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,14
-	tmlearn 20,24
-	tmlearn 25,28,31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_RATTATA ; pokedex id
+
+	db  30,  56,  35,  72,  25
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 255 ; catch rate
+	db 57 ; base exp
+
+	INCBIN "gfx/pokemon/front/rattata.pic", 0, 1 ; sprite dimensions
+	dw RattataPicFront, RattataPicBack
+
+	db TACKLE, TAIL_WHIP, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_RHYDON ; pokedex id
-db 105 ; base hp
-db 130 ; base attack
-db 120 ; base defense
-db 40 ; base speed
-db 45 ; base special
-db GROUND ; species type 1
-db ROCK ; species type 2
-db 60 ; catch rate
-db 204 ; base exp yield
-INCBIN "gfx/pokemon/front/rhydon.pic",0,1 ; 77, sprite dimensions
-dw RhydonPicFront
-dw RhydonPicBack
-; attacks known at lvl 0
-db HORN_ATTACK
-db STOMP
-db TAIL_WHIP
-db FURY_ATTACK
-db 5 ; growth rate
-; learnset
-	tmlearn 1,5,6,7,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,24
-	tmlearn 25,26,27,28,31,32
-	tmlearn 34,38,40
-	tmlearn 44,48
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_RHYDON ; pokedex id
+
+	db 105, 130, 120,  40,  45
+	;   hp  atk  def  spd  spc
+
+	db GROUND, ROCK ; type
+	db 60 ; catch rate
+	db 204 ; base exp
+
+	INCBIN "gfx/pokemon/front/rhydon.pic", 0, 1 ; sprite dimensions
+	dw RhydonPicFront, RhydonPicBack
+
+	db HORN_ATTACK, STOMP, TAIL_WHIP, FURY_ATTACK ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_RHYHORN ; pokedex id
-db 80 ; base hp
-db 85 ; base attack
-db 95 ; base defense
-db 25 ; base speed
-db 30 ; base special
-db GROUND ; species type 1
-db ROCK ; species type 2
-db 120 ; catch rate
-db 135 ; base exp yield
-INCBIN "gfx/pokemon/front/rhyhorn.pic",0,1 ; 77, sprite dimensions
-dw RhyhornPicFront
-dw RhyhornPicBack
-; attacks known at lvl 0
-db HORN_ATTACK
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10
-	tmlearn 20,24
-	tmlearn 25,26,27,28,31,32
-	tmlearn 34,38,40
-	tmlearn 44,48
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_RHYHORN ; pokedex id
+
+	db  80,  85,  95,  25,  30
+	;   hp  atk  def  spd  spc
+
+	db GROUND, ROCK ; type
+	db 120 ; catch rate
+	db 135 ; base exp
+
+	INCBIN "gfx/pokemon/front/rhyhorn.pic", 0, 1 ; sprite dimensions
+	dw RhyhornPicFront, RhyhornPicBack
+
+	db HORN_ATTACK, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_SANDSHREW ; pokedex id
-db 50 ; base hp
-db 75 ; base attack
-db 85 ; base defense
-db 40 ; base speed
-db 30 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 255 ; catch rate
-db 93 ; base exp yield
-INCBIN "gfx/pokemon/front/sandshrew.pic",0,1 ; 55, sprite dimensions
-dw SandshrewPicFront
-dw SandshrewPicBack
-; attacks known at lvl 0
-db SCRATCH
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10
-	tmlearn 17,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,39,40
-	tmlearn 44,48
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_SANDSHREW ; pokedex id
+
+	db  50,  75,  85,  40,  30
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 255 ; catch rate
+	db 93 ; base exp
+
+	INCBIN "gfx/pokemon/front/sandshrew.pic", 0, 1 ; sprite dimensions
+	dw SandshrewPicFront, SandshrewPicBack
+
+	db SCRATCH, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_SANDSLASH ; pokedex id
-db 75 ; base hp
-db 100 ; base attack
-db 110 ; base defense
-db 65 ; base speed
-db 55 ; base special
-db GROUND ; species type 1
-db GROUND ; species type 2
-db 90 ; catch rate
-db 163 ; base exp yield
-INCBIN "gfx/pokemon/front/sandslash.pic",0,1 ; 66, sprite dimensions
-dw SandslashPicFront
-dw SandslashPicBack
-; attacks known at lvl 0
-db SCRATCH
-db SAND_ATTACK
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 17,19,20
-	tmlearn 26,27,28,31,32
-	tmlearn 34,39,40
-	tmlearn 44,48
-	tmlearn 50,51,54
-db 0 ; padding
+	db DEX_SANDSLASH ; pokedex id
+
+	db  75, 100, 110,  65,  55
+	;   hp  atk  def  spd  spc
+
+	db GROUND, GROUND ; type
+	db 90 ; catch rate
+	db 163 ; base exp
+
+	INCBIN "gfx/pokemon/front/sandslash.pic", 0, 1 ; sprite dimensions
+	dw SandslashPicFront, SandslashPicBack
+
+	db SCRATCH, SAND_ATTACK, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_SCYTHER ; pokedex id
-db 70 ; base hp
-db 110 ; base attack
-db 80 ; base defense
-db 105 ; base speed
-db 55 ; base special
-db BUG ; species type 1
-db FLYING ; species type 2
-db 45 ; catch rate
-db 187 ; base exp yield
-INCBIN "gfx/pokemon/front/scyther.pic",0,1 ; 77, sprite dimensions
-dw ScytherPicFront
-dw ScytherPicBack
-; attacks known at lvl 0
-db QUICK_ATTACK
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_SCYTHER ; pokedex id
+
+	db  70, 110,  80, 105,  55
+	;   hp  atk  def  spd  spc
+
+	db BUG, FLYING ; type
+	db 45 ; catch rate
+	db 187 ; base exp
+
+	INCBIN "gfx/pokemon/front/scyther.pic", 0, 1 ; sprite dimensions
+	dw ScytherPicFront, ScytherPicBack
+
+	db QUICK_ATTACK, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_SEADRA ; pokedex id
-db 55 ; base hp
-db 65 ; base attack
-db 95 ; base defense
-db 85 ; base speed
-db 95 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 75 ; catch rate
-db 155 ; base exp yield
-INCBIN "gfx/pokemon/front/seadra.pic",0,1 ; 66, sprite dimensions
-dw SeadraPicFront
-dw SeadraPicBack
-; attacks known at lvl 0
-db BUBBLE
-db SMOKESCREEN
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_SEADRA ; pokedex id
+
+	db  55,  65,  95,  85,  95
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 75 ; catch rate
+	db 155 ; base exp
+
+	INCBIN "gfx/pokemon/front/seadra.pic", 0, 1 ; sprite dimensions
+	dw SeadraPicFront, SeadraPicBack
+
+	db BUBBLE, SMOKESCREEN, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_SEAKING ; pokedex id
-db 80 ; base hp
-db 92 ; base attack
-db 65 ; base defense
-db 68 ; base speed
-db 80 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 60 ; catch rate
-db 170 ; base exp yield
-INCBIN "gfx/pokemon/front/seaking.pic",0,1 ; 77, sprite dimensions
-dw SeakingPicFront
-dw SeakingPicBack
-; attacks known at lvl 0
-db PECK
-db TAIL_WHIP
-db SUPERSONIC
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_SEAKING ; pokedex id
+
+	db  80,  92,  65,  68,  80
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 60 ; catch rate
+	db 170 ; base exp
+
+	INCBIN "gfx/pokemon/front/seaking.pic", 0, 1 ; sprite dimensions
+	dw SeakingPicFront, SeakingPicBack
+
+	db PECK, TAIL_WHIP, SUPERSONIC, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_SEEL ; pokedex id
-db 65 ; base hp
-db 45 ; base attack
-db 55 ; base defense
-db 45 ; base speed
-db 70 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 190 ; catch rate
-db 100 ; base exp yield
-INCBIN "gfx/pokemon/front/seel.pic",0,1 ; 66, sprite dimensions
-dw SeelPicFront
-dw SeelPicBack
-; attacks known at lvl 0
-db HEADBUTT
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,11,12,13,14,16
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_SEEL ; pokedex id
+
+	db  65,  45,  55,  45,  70
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 190 ; catch rate
+	db 100 ; base exp
+
+	INCBIN "gfx/pokemon/front/seel.pic", 0, 1 ; sprite dimensions
+	dw SeelPicFront, SeelPicBack
+
+	db HEADBUTT, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_SHELLDER ; pokedex id
-db 30 ; base hp
-db 65 ; base attack
-db 100 ; base defense
-db 40 ; base speed
-db 45 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 190 ; catch rate
-db 97 ; base exp yield
-INCBIN "gfx/pokemon/front/shellder.pic",0,1 ; 55, sprite dimensions
-dw ShellderPicFront
-dw ShellderPicBack
-; attacks known at lvl 0
-db TACKLE
-db WITHDRAW
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20
-	tmlearn 30,31,32
-	tmlearn 33,34,36,39
-	tmlearn 44,47
-	tmlearn 49,50,53
-db 0 ; padding
+	db DEX_SHELLDER ; pokedex id
+
+	db  30,  65, 100,  40,  45
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 190 ; catch rate
+	db 97 ; base exp
+
+	INCBIN "gfx/pokemon/front/shellder.pic", 0, 1 ; sprite dimensions
+	dw ShellderPicFront, ShellderPicBack
+
+	db TACKLE, WITHDRAW, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,27 @@
-db DEX_SLOWBRO ; pokedex id
-db 95 ; base hp
-db 75 ; base attack
-db 110 ; base defense
-db 30 ; base speed
-db 80 ; base special
-db WATER ; species type 1
-db PSYCHIC ; species type 2
-db 75 ; catch rate
-db 164 ; base exp yield
-INCBIN "gfx/pokemon/front/slowbro.pic",0,1 ; 77, sprite dimensions
-dw SlowbroPicFront
-dw SlowbroPicBack
-; attacks known at lvl 0
-db CONFUSION
-db DISABLE
-db HEADBUTT
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20
-	tmlearn 26,27,28,29,30,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44,45,46
-	tmlearn 49,50,53,54,55
-db 0 ; padding
+	db DEX_SLOWBRO ; pokedex id
+
+	db  95,  75, 110,  30,  80
+	;   hp  atk  def  spd  spc
+
+	db WATER, PSYCHIC ; type
+	db 75 ; catch rate
+	db 164 ; base exp
+
+	INCBIN "gfx/pokemon/front/slowbro.pic", 0, 1 ; sprite dimensions
+	dw SlowbroPicFront, SlowbroPicBack
+
+	db CONFUSION, DISABLE, HEADBUTT, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_SLOWPOKE ; pokedex id
-db 90 ; base hp
-db 65 ; base attack
-db 65 ; base defense
-db 15 ; base speed
-db 40 ; base special
-db WATER ; species type 1
-db PSYCHIC ; species type 2
-db 190 ; catch rate
-db 99 ; base exp yield
-INCBIN "gfx/pokemon/front/slowpoke.pic",0,1 ; 55, sprite dimensions
-dw SlowpokePicFront
-dw SlowpokePicBack
-; attacks known at lvl 0
-db CONFUSION
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14,16
-	tmlearn 20
-	tmlearn 26,27,28,29,30,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44,45,46
-	tmlearn 49,50,53,54,55
-db 0 ; padding
+	db DEX_SLOWPOKE ; pokedex id
+
+	db  90,  65,  65,  15,  40
+	;   hp  atk  def  spd  spc
+
+	db WATER, PSYCHIC ; type
+	db 190 ; catch rate
+	db 99 ; base exp
+
+	INCBIN "gfx/pokemon/front/slowpoke.pic", 0, 1 ; sprite dimensions
+	dw SlowpokePicFront, SlowpokePicBack
+
+	db CONFUSION, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,27 @@
-db DEX_SNORLAX ; pokedex id
-db 160 ; base hp
-db 110 ; base attack
-db 65 ; base defense
-db 30 ; base speed
-db 65 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 25 ; catch rate
-db 154 ; base exp yield
-INCBIN "gfx/pokemon/front/snorlax.pic",0,1 ; 77, sprite dimensions
-dw SnorlaxPicFront
-dw SnorlaxPicBack
-; attacks known at lvl 0
-db HEADBUTT
-db AMNESIA
-db REST
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15,16
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,26,27,29,31,32
-	tmlearn 33,34,35,36,38,40
-	tmlearn 44,46,48
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_SNORLAX ; pokedex id
+
+	db 160, 110,  65,  30,  65
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 25 ; catch rate
+	db 154 ; base exp
+
+	INCBIN "gfx/pokemon/front/snorlax.pic", 0, 1 ; sprite dimensions
+	dw SnorlaxPicFront, SnorlaxPicBack
+
+	db HEADBUTT, AMNESIA, REST, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_SPEAROW ; pokedex id
-db 40 ; base hp
-db 60 ; base attack
-db 30 ; base defense
-db 70 ; base speed
-db 31 ; base special
-db NORMAL ; species type 1
-db FLYING ; species type 2
-db 255 ; catch rate
-db 58 ; base exp yield
-INCBIN "gfx/pokemon/front/spearow.pic",0,1 ; 55, sprite dimensions
-dw SpearowPicFront
-dw SpearowPicBack
-; attacks known at lvl 0
-db PECK
-db GROWL
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 34,39
-	tmlearn 43,44
-	tmlearn 50,52
-db 0 ; padding
+	db DEX_SPEAROW ; pokedex id
+
+	db  40,  60,  30,  70,  31
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, FLYING ; type
+	db 255 ; catch rate
+	db 58 ; base exp
+
+	INCBIN "gfx/pokemon/front/spearow.pic", 0, 1 ; sprite dimensions
+	dw SpearowPicFront, SpearowPicBack
+
+	db PECK, GROWL, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_SQUIRTLE ; pokedex id
-db 44 ; base hp
-db 48 ; base attack
-db 65 ; base defense
-db 43 ; base speed
-db 50 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 66 ; base exp yield
-INCBIN "gfx/pokemon/front/squirtle.pic",0,1 ; 55, sprite dimensions
-dw SquirtlePicFront
-dw SquirtlePicBack
-; attacks known at lvl 0
-db TACKLE
-db TAIL_WHIP
-db 0
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20
-	tmlearn 28,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_SQUIRTLE ; pokedex id
+
+	db  44,  48,  65,  43,  50
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 45 ; catch rate
+	db 66 ; base exp
+
+	INCBIN "gfx/pokemon/front/squirtle.pic", 0, 1 ; sprite dimensions
+	dw SquirtlePicFront, SquirtlePicBack
+
+	db TACKLE, TAIL_WHIP, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,25 @@
-db DEX_STARMIE ; pokedex id
-db 60 ; base hp
-db 75 ; base attack
-db 85 ; base defense
-db 115 ; base speed
-db 100 ; base special
-db WATER ; species type 1
-db PSYCHIC ; species type 2
-db 60 ; catch rate
-db 207 ; base exp yield
-INCBIN "gfx/pokemon/front/starmie.pic",0,1 ; 66, sprite dimensions
-dw StarmiePicFront
-dw StarmiePicBack
-; attacks known at lvl 0
-db TACKLE
-db WATER_GUN
-db HARDEN
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45,46
-	tmlearn 49,50,53,55
-db 0 ; padding
+	db DEX_STARMIE ; pokedex id
+
+	db  60,  75,  85, 115, 100
+	;   hp  atk  def  spd  spc
+
+	db WATER, PSYCHIC ; type
+	db 60 ; catch rate
+	db 207 ; base exp
+
+	INCBIN "gfx/pokemon/front/starmie.pic", 0, 1 ; sprite dimensions
+	dw StarmiePicFront, StarmiePicBack
+
+	db TACKLE, WATER_GUN, HARDEN, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_STARYU ; pokedex id
-db 30 ; base hp
-db 45 ; base attack
-db 55 ; base defense
-db 85 ; base speed
-db 70 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 225 ; catch rate
-db 106 ; base exp yield
-INCBIN "gfx/pokemon/front/staryu.pic",0,1 ; 66, sprite dimensions
-dw StaryuPicFront
-dw StaryuPicBack
-; attacks known at lvl 0
-db TACKLE
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,39,40
-	tmlearn 44,45,46
-	tmlearn 49,50,53,55
-db 0 ; padding
+	db DEX_STARYU ; pokedex id
+
+	db  30,  45,  55,  85,  70
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 225 ; catch rate
+	db 106 ; base exp
+
+	INCBIN "gfx/pokemon/front/staryu.pic", 0, 1 ; sprite dimensions
+	dw StaryuPicFront, StaryuPicBack
+
+	db TACKLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_TANGELA ; pokedex id
-db 65 ; base hp
-db 55 ; base attack
-db 115 ; base defense
-db 60 ; base speed
-db 100 ; base special
-db GRASS ; species type 1
-db GRASS ; species type 2
-db 45 ; catch rate
-db 166 ; base exp yield
-INCBIN "gfx/pokemon/front/tangela.pic",0,1 ; 66, sprite dimensions
-dw TangelaPicFront
-dw TangelaPicBack
-; attacks known at lvl 0
-db CONSTRICT
-db BIND
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 34,40
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_TANGELA ; pokedex id
+
+	db  65,  55, 115,  60, 100
+	;   hp  atk  def  spd  spc
+
+	db GRASS, GRASS ; type
+	db 45 ; catch rate
+	db 166 ; base exp
+
+	INCBIN "gfx/pokemon/front/tangela.pic", 0, 1 ; sprite dimensions
+	dw TangelaPicFront, TangelaPicBack
+
+	db CONSTRICT, BIND, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_TAUROS ; pokedex id
-db 75 ; base hp
-db 100 ; base attack
-db 95 ; base defense
-db 110 ; base speed
-db 70 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 45 ; catch rate
-db 211 ; base exp yield
-INCBIN "gfx/pokemon/front/tauros.pic",0,1 ; 77, sprite dimensions
-dw TaurosPicFront
-dw TaurosPicBack
-; attacks known at lvl 0
-db TACKLE
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 6,7,8
-	tmlearn 9,10,13,14,15
-	tmlearn 20,24
-	tmlearn 25,26,27,31,32
-	tmlearn 34,38,40
-	tmlearn 44
-	tmlearn 50,54
-db 0 ; padding
+	db DEX_TAUROS ; pokedex id
+
+	db  75, 100,  95, 110,  70
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 45 ; catch rate
+	db 211 ; base exp
+
+	INCBIN "gfx/pokemon/front/tauros.pic", 0, 1 ; sprite dimensions
+	dw TaurosPicFront, TaurosPicBack
+
+	db TACKLE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_TENTACOOL ; pokedex id
-db 40 ; base hp
-db 40 ; base attack
-db 35 ; base defense
-db 70 ; base speed
-db 100 ; base special
-db WATER ; species type 1
-db POISON ; species type 2
-db 190 ; catch rate
-db 105 ; base exp yield
-INCBIN "gfx/pokemon/front/tentacool.pic",0,1 ; 55, sprite dimensions
-dw TentacoolPicFront
-dw TentacoolPicBack
-; attacks known at lvl 0
-db ACID
-db 0
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10,11,12,13,14
-	tmlearn 20,21
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,51,53
-db 0 ; padding
+	db DEX_TENTACOOL ; pokedex id
+
+	db  40,  40,  35,  70, 100
+	;   hp  atk  def  spd  spc
+
+	db WATER, POISON ; type
+	db 190 ; catch rate
+	db 105 ; base exp
+
+	INCBIN "gfx/pokemon/front/tentacool.pic", 0, 1 ; sprite dimensions
+	dw TentacoolPicFront, TentacoolPicBack
+
+	db ACID, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_TENTACRUEL ; pokedex id
-db 80 ; base hp
-db 70 ; base attack
-db 65 ; base defense
-db 100 ; base speed
-db 120 ; base special
-db WATER ; species type 1
-db POISON ; species type 2
-db 60 ; catch rate
-db 205 ; base exp yield
-INCBIN "gfx/pokemon/front/tentacruel.pic",0,1 ; 66, sprite dimensions
-dw TentacruelPicFront
-dw TentacruelPicBack
-; attacks known at lvl 0
-db ACID
-db SUPERSONIC
-db WRAP
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20,21
-	tmlearn 31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,51,53
-db 0 ; padding
+	db DEX_TENTACRUEL ; pokedex id
+
+	db  80,  70,  65, 100, 120
+	;   hp  atk  def  spd  spc
+
+	db WATER, POISON ; type
+	db 60 ; catch rate
+	db 205 ; base exp
+
+	INCBIN "gfx/pokemon/front/tentacruel.pic", 0, 1 ; sprite dimensions
+	dw TentacruelPicFront, TentacruelPicBack
+
+	db ACID, SUPERSONIC, WRAP, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VAPOREON ; pokedex id
-db 130 ; base hp
-db 65 ; base attack
-db 60 ; base defense
-db 65 ; base speed
-db 110 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 196 ; base exp yield
-INCBIN "gfx/pokemon/front/vaporeon.pic",0,1 ; 66, sprite dimensions
-dw VaporeonPicFront
-dw VaporeonPicBack
-; attacks known at lvl 0
-db TACKLE
-db SAND_ATTACK
-db QUICK_ATTACK
-db WATER_GUN
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 20
-	tmlearn 31,32
-	tmlearn 33,34,39,40
-	tmlearn 44
-	tmlearn 50,53
-db 0 ; padding
+	db DEX_VAPOREON ; pokedex id
+
+	db 130,  65,  60,  65, 110
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 45 ; catch rate
+	db 196 ; base exp
+
+	INCBIN "gfx/pokemon/front/vaporeon.pic", 0, 1 ; sprite dimensions
+	dw VaporeonPicFront, VaporeonPicBack
+
+	db TACKLE, SAND_ATTACK, QUICK_ATTACK, WATER_GUN ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VENOMOTH ; pokedex id
-db 70 ; base hp
-db 65 ; base attack
-db 60 ; base defense
-db 90 ; base speed
-db 90 ; base special
-db BUG ; species type 1
-db POISON ; species type 2
-db 75 ; catch rate
-db 138 ; base exp yield
-INCBIN "gfx/pokemon/front/venomoth.pic",0,1 ; 77, sprite dimensions
-dw VenomothPicFront
-dw VenomothPicBack
-; attacks known at lvl 0
-db TACKLE
-db DISABLE
-db POISONPOWDER
-db LEECH_LIFE
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 29,30,31,32
-	tmlearn 33,34,39
-	tmlearn 44,46
-	tmlearn 50
-db 0 ; padding
+	db DEX_VENOMOTH ; pokedex id
+
+	db  70,  65,  60,  90,  90
+	;   hp  atk  def  spd  spc
+
+	db BUG, POISON ; type
+	db 75 ; catch rate
+	db 138 ; base exp
+
+	INCBIN "gfx/pokemon/front/venomoth.pic", 0, 1 ; sprite dimensions
+	dw VenomothPicFront, VenomothPicBack
+
+	db TACKLE, DISABLE, POISONPOWDER, LEECH_LIFE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_VENONAT ; pokedex id
-db 60 ; base hp
-db 55 ; base attack
-db 50 ; base defense
-db 45 ; base speed
-db 40 ; base special
-db BUG ; species type 1
-db POISON ; species type 2
-db 190 ; catch rate
-db 75 ; base exp yield
-INCBIN "gfx/pokemon/front/venonat.pic",0,1 ; 55, sprite dimensions
-dw VenonatPicFront
-dw VenonatPicBack
-; attacks known at lvl 0
-db TACKLE
-db DISABLE
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 29,31,32
-	tmlearn 33,34
-	tmlearn 44,46
-	tmlearn 50
-db 0 ; padding
+	db DEX_VENONAT ; pokedex id
+
+	db  60,  55,  50,  45,  40
+	;   hp  atk  def  spd  spc
+
+	db BUG, POISON ; type
+	db 190 ; catch rate
+	db 75 ; base exp
+
+	INCBIN "gfx/pokemon/front/venonat.pic", 0, 1 ; sprite dimensions
+	dw VenonatPicFront, VenonatPicBack
+
+	db TACKLE, DISABLE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VENUSAUR ; pokedex id
-db 80 ; base hp
-db 82 ; base attack
-db 83 ; base defense
-db 80 ; base speed
-db 100 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 208 ; base exp yield
-INCBIN "gfx/pokemon/front/venusaur.pic",0,1 ; 77, sprite dimensions
-dw VenusaurPicFront
-dw VenusaurPicBack
-; attacks known at lvl 0
-db TACKLE
-db GROWL
-db LEECH_SEED
-db VINE_WHIP
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_VENUSAUR ; pokedex id
+
+	db  80,  82,  83,  80, 100
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 45 ; catch rate
+	db 208 ; base exp
+
+	INCBIN "gfx/pokemon/front/venusaur.pic", 0, 1 ; sprite dimensions
+	dw VenusaurPicFront, VenusaurPicBack
+
+	db TACKLE, GROWL, LEECH_SEED, VINE_WHIP ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VICTREEBEL ; pokedex id
-db 80 ; base hp
-db 105 ; base attack
-db 65 ; base defense
-db 70 ; base speed
-db 100 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 191 ; base exp yield
-INCBIN "gfx/pokemon/front/victreebel.pic",0,1 ; 77, sprite dimensions
-dw VictreebelPicFront
-dw VictreebelPicBack
-; attacks known at lvl 0
-db SLEEP_POWDER
-db STUN_SPORE
-db ACID
-db RAZOR_LEAF
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_VICTREEBEL ; pokedex id
+
+	db  80, 105,  65,  70, 100
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 45 ; catch rate
+	db 191 ; base exp
+
+	INCBIN "gfx/pokemon/front/victreebel.pic", 0, 1 ; sprite dimensions
+	dw VictreebelPicFront, VictreebelPicBack
+
+	db SLEEP_POWDER, STUN_SPORE, ACID, RAZOR_LEAF ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VILEPLUME ; pokedex id
-db 75 ; base hp
-db 80 ; base attack
-db 85 ; base defense
-db 50 ; base speed
-db 100 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 45 ; catch rate
-db 184 ; base exp yield
-INCBIN "gfx/pokemon/front/vileplume.pic",0,1 ; 77, sprite dimensions
-dw VileplumePicFront
-dw VileplumePicBack
-; attacks known at lvl 0
-db STUN_SPORE
-db SLEEP_POWDER
-db ACID
-db PETAL_DANCE
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6,8
-	tmlearn 9,10,15
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_VILEPLUME ; pokedex id
+
+	db  75,  80,  85,  50, 100
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 45 ; catch rate
+	db 184 ; base exp
+
+	INCBIN "gfx/pokemon/front/vileplume.pic", 0, 1 ; sprite dimensions
+	dw VileplumePicFront, VileplumePicBack
+
+	db STUN_SPORE, SLEEP_POWDER, ACID, PETAL_DANCE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_VOLTORB ; pokedex id
-db 40 ; base hp
-db 30 ; base attack
-db 50 ; base defense
-db 100 ; base speed
-db 55 ; base special
-db ELECTRIC ; species type 1
-db ELECTRIC ; species type 2
-db 190 ; catch rate
-db 103 ; base exp yield
-INCBIN "gfx/pokemon/front/voltorb.pic",0,1 ; 55, sprite dimensions
-dw VoltorbPicFront
-dw VoltorbPicBack
-; attacks known at lvl 0
-db TACKLE
-db SCREECH
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 9
-	tmlearn 20,24
-	tmlearn 25,30,31,32
-	tmlearn 33,34,36,39
-	tmlearn 44,45,47
-	tmlearn 50,55
-db 0 ; padding
+	db DEX_VOLTORB ; pokedex id
+
+	db  40,  30,  50, 100,  55
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, ELECTRIC ; type
+	db 190 ; catch rate
+	db 103 ; base exp
+
+	INCBIN "gfx/pokemon/front/voltorb.pic", 0, 1 ; sprite dimensions
+	dw VoltorbPicFront, VoltorbPicBack
+
+	db TACKLE, SCREECH, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_VULPIX ; pokedex id
-db 38 ; base hp
-db 41 ; base attack
-db 40 ; base defense
-db 65 ; base speed
-db 65 ; base special
-db FIRE ; species type 1
-db FIRE ; species type 2
-db 190 ; catch rate
-db 63 ; base exp yield
-INCBIN "gfx/pokemon/front/vulpix.pic",0,1 ; 66, sprite dimensions
-dw VulpixPicFront
-dw VulpixPicBack
-; attacks known at lvl 0
-db EMBER
-db TAIL_WHIP
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6,8
-	tmlearn 9,10
-	tmlearn 20
-	tmlearn 28,31,32
-	tmlearn 33,34,38,39,40
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_VULPIX ; pokedex id
+
+	db  38,  41,  40,  65,  65
+	;   hp  atk  def  spd  spc
+
+	db FIRE, FIRE ; type
+	db 190 ; catch rate
+	db 63 ; base exp
+
+	INCBIN "gfx/pokemon/front/vulpix.pic", 0, 1 ; sprite dimensions
+	dw VulpixPicFront, VulpixPicBack
+
+	db EMBER, TAIL_WHIP, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,24 @@
-db DEX_WARTORTLE ; pokedex id
-db 59 ; base hp
-db 63 ; base attack
-db 80 ; base defense
-db 58 ; base speed
-db 65 ; base special
-db WATER ; species type 1
-db WATER ; species type 2
-db 45 ; catch rate
-db 143 ; base exp yield
-INCBIN "gfx/pokemon/front/wartortle.pic",0,1 ; 66, sprite dimensions
-dw WartortlePicFront
-dw WartortlePicBack
-; attacks known at lvl 0
-db TACKLE
-db TAIL_WHIP
-db BUBBLE
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14
-	tmlearn 17,18,19,20
-	tmlearn 28,31,32
-	tmlearn 33,34,40
-	tmlearn 44
-	tmlearn 50,53,54
-db 0 ; padding
+	db DEX_WARTORTLE ; pokedex id
+
+	db  59,  63,  80,  58,  65
+	;   hp  atk  def  spd  spc
+
+	db WATER, WATER ; type
+	db 45 ; catch rate
+	db 143 ; base exp
+
+	INCBIN "gfx/pokemon/front/wartortle.pic", 0, 1 ; sprite dimensions
+	dw WartortlePicFront, WartortlePicBack
+
+	db TACKLE, TAIL_WHIP, BUBBLE, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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/weedle.asm
+++ b/data/pokemon/base_stats/weedle.asm
@@ -1,28 +1,20 @@
-db DEX_WEEDLE ; pokedex id
-db 40 ; base hp
-db 35 ; base attack
-db 30 ; base defense
-db 50 ; base speed
-db 20 ; base special
-db BUG ; species type 1
-db POISON ; species type 2
-db 255 ; catch rate
-db 52 ; base exp yield
-INCBIN "gfx/pokemon/front/weedle.pic",0,1 ; 55, sprite dimensions
-dw WeedlePicFront
-dw WeedlePicBack
-; attacks known at lvl 0
-db POISON_STING
-db STRING_SHOT
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-	tmlearn 0
-db 0 ; padding
+	db DEX_WEEDLE ; pokedex id
+
+	db  40,  35,  30,  50,  20
+	;   hp  atk  def  spd  spc
+
+	db BUG, POISON ; type
+	db 255 ; catch rate
+	db 52 ; base exp
+
+	INCBIN "gfx/pokemon/front/weedle.pic", 0, 1 ; sprite dimensions
+	dw WeedlePicFront, WeedlePicBack
+
+	db POISON_STING, STRING_SHOT, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/base_stats/weepinbell.asm
+++ b/data/pokemon/base_stats/weepinbell.asm
@@ -1,28 +1,22 @@
-db DEX_WEEPINBELL ; pokedex id
-db 65 ; base hp
-db 90 ; base attack
-db 50 ; base defense
-db 55 ; base speed
-db 85 ; base special
-db GRASS ; species type 1
-db POISON ; species type 2
-db 120 ; catch rate
-db 151 ; base exp yield
-INCBIN "gfx/pokemon/front/weepinbell.pic",0,1 ; 66, sprite dimensions
-dw WeepinbellPicFront
-dw WeepinbellPicBack
-; attacks known at lvl 0
-db VINE_WHIP
-db GROWTH
-db WRAP
-db 0
-db 3 ; growth rate
-; learnset
-	tmlearn 3,6
-	tmlearn 9,10
-	tmlearn 20,21,22
-	tmlearn 31,32
-	tmlearn 33,34
-	tmlearn 44
-	tmlearn 50,51
-db 0 ; padding
+	db DEX_WEEPINBELL ; pokedex id
+
+	db  65,  90,  50,  55,  85
+	;   hp  atk  def  spd  spc
+
+	db GRASS, POISON ; type
+	db 120 ; catch rate
+	db 151 ; base exp
+
+	INCBIN "gfx/pokemon/front/weepinbell.pic", 0, 1 ; sprite dimensions
+	dw WeepinbellPicFront, WeepinbellPicBack
+
+	db VINE_WHIP, GROWTH, WRAP, NO_MOVE ; level 1 learnset
+	db 3 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_WEEZING ; pokedex id
-db 65 ; base hp
-db 90 ; base attack
-db 120 ; base defense
-db 60 ; base speed
-db 85 ; base special
-db POISON ; species type 1
-db POISON ; species type 2
-db 60 ; catch rate
-db 173 ; base exp yield
-INCBIN "gfx/pokemon/front/weezing.pic",0,1 ; 77, sprite dimensions
-dw WeezingPicFront
-dw WeezingPicBack
-; attacks known at lvl 0
-db TACKLE
-db SMOG
-db SLUDGE
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 6
-	tmlearn 15
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 34,36,38
-	tmlearn 44,47
-	tmlearn 50
-db 0 ; padding
+	db DEX_WEEZING ; pokedex id
+
+	db  65,  90, 120,  60,  85
+	;   hp  atk  def  spd  spc
+
+	db POISON, POISON ; type
+	db 60 ; catch rate
+	db 173 ; base exp
+
+	INCBIN "gfx/pokemon/front/weezing.pic", 0, 1 ; sprite dimensions
+	dw WeezingPicFront, WeezingPicBack
+
+	db TACKLE, SMOG, SLUDGE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,26 @@
-db DEX_WIGGLYTUFF ; pokedex id
-db 140 ; base hp
-db 70 ; base attack
-db 45 ; base defense
-db 45 ; base speed
-db 50 ; base special
-db NORMAL ; species type 1
-db NORMAL ; species type 2
-db 50 ; catch rate
-db 109 ; base exp yield
-INCBIN "gfx/pokemon/front/wigglytuff.pic",0,1 ; 66, sprite dimensions
-dw WigglytuffPicFront
-dw WigglytuffPicBack
-; attacks known at lvl 0
-db SING
-db DISABLE
-db DEFENSE_CURL
-db DOUBLESLAP
-db 4 ; growth rate
-; learnset
-	tmlearn 1,5,6,8
-	tmlearn 9,10,11,12,13,14,15
-	tmlearn 17,18,19,20,22,24
-	tmlearn 25,29,30,31,32
-	tmlearn 33,34,38,40
-	tmlearn 44,45,46
-	tmlearn 49,50,54,55
-db 0 ; padding
+	db DEX_WIGGLYTUFF ; pokedex id
+
+	db 140,  70,  45,  45,  50
+	;   hp  atk  def  spd  spc
+
+	db NORMAL, NORMAL ; type
+	db 50 ; catch rate
+	db 109 ; base exp
+
+	INCBIN "gfx/pokemon/front/wigglytuff.pic", 0, 1 ; sprite dimensions
+	dw WigglytuffPicFront, WigglytuffPicBack
+
+	db SING, DISABLE, DEFENSE_CURL, DOUBLESLAP ; level 1 learnset
+	db 4 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,23 @@
-db DEX_ZAPDOS ; pokedex id
-db 90 ; base hp
-db 90 ; base attack
-db 85 ; base defense
-db 100 ; base speed
-db 125 ; base special
-db ELECTRIC ; species type 1
-db FLYING ; species type 2
-db 3 ; catch rate
-db 216 ; base exp yield
-INCBIN "gfx/pokemon/front/zapdos.pic",0,1 ; 77, sprite dimensions
-dw ZapdosPicFront
-dw ZapdosPicBack
-; attacks known at lvl 0
-db THUNDERSHOCK
-db DRILL_PECK
-db 0
-db 0
-db 5 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10,15
-	tmlearn 20,24
-	tmlearn 25,31,32
-	tmlearn 33,34,39
-	tmlearn 43,44,45
-	tmlearn 50,52,55
-db 0 ; padding
+	db DEX_ZAPDOS ; pokedex id
+
+	db  90,  90,  85, 100, 125
+	;   hp  atk  def  spd  spc
+
+	db ELECTRIC, FLYING ; type
+	db 3 ; catch rate
+	db 216 ; base exp
+
+	INCBIN "gfx/pokemon/front/zapdos.pic", 0, 1 ; sprite dimensions
+	dw ZapdosPicFront, ZapdosPicBack
+
+	db THUNDERSHOCK, DRILL_PECK, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 5 ; growth rate
+
+	; tm/hm learnset
+	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
@@ -1,28 +1,22 @@
-db DEX_ZUBAT ; pokedex id
-db 40 ; base hp
-db 45 ; base attack
-db 35 ; base defense
-db 55 ; base speed
-db 40 ; base special
-db POISON ; species type 1
-db FLYING ; species type 2
-db 255 ; catch rate
-db 54 ; base exp yield
-INCBIN "gfx/pokemon/front/zubat.pic",0,1 ; 55, sprite dimensions
-dw ZubatPicFront
-dw ZubatPicBack
-; attacks known at lvl 0
-db LEECH_LIFE
-db 0
-db 0
-db 0
-db 0 ; growth rate
-; learnset
-	tmlearn 2,4,6
-	tmlearn 9,10
-	tmlearn 20,21
-	tmlearn 31,32
-	tmlearn 34,39
-	tmlearn 44
-	tmlearn 50
-db 0 ; padding
+	db DEX_ZUBAT ; pokedex id
+
+	db  40,  45,  35,  55,  40
+	;   hp  atk  def  spd  spc
+
+	db POISON, FLYING ; type
+	db 255 ; catch rate
+	db 54 ; base exp
+
+	INCBIN "gfx/pokemon/front/zubat.pic", 0, 1 ; sprite dimensions
+	dw ZubatPicFront, ZubatPicBack
+
+	db LEECH_LIFE, NO_MOVE, NO_MOVE, NO_MOVE ; level 1 learnset
+	db 0 ; growth rate
+
+	; tm/hm learnset
+	tmhm RAZOR_WIND,   WHIRLWIND,    TOXIC,        TAKE_DOWN,    DOUBLE_EDGE,  \
+	     RAGE,         MEGA_DRAIN,   MIMIC,        DOUBLE_TEAM,  BIDE,         \
+	     SWIFT,        REST,         SUBSTITUTE
+	; end
+
+	db 0 ; padding
--- a/data/pokemon/mew.asm
+++ b/data/pokemon/mew.asm
@@ -11,4 +11,5 @@
 MewPicFront:: INCBIN "gfx/pokemon/front/mew.pic"
 MewPicBack::  INCBIN "gfx/pokemon/back/mewb.pic"
 
+MewBaseStats::
 INCLUDE "data/pokemon/base_stats/mew.asm"
--- 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
@@ -16,15 +16,37 @@
 coins equs "bcd2"
 money equs "bcd3"
 
-tmlearn: MACRO
-x = 0
-	REPT _NARG
-IF \1 != 0
-x = x | (1 << ((\1 - 1) % 8))
-ENDC
-	SHIFT
-	ENDR
-	db x
+tmhm: MACRO
+; used in data/pokemon/base_stats/*.asm
+_tms1 = 0 ; TM01-TM24 (24)
+_tms2 = 0 ; TM25-TM48 (24)
+_tms3 = 0 ; TM49-TM50 + HM01-HM05 (7/24)
+rept _NARG
+	if DEF(\1_TMNUM)
+	if \1_TMNUM < 24 + 1
+_tms1 = _tms1 | (1 << ((\1_TMNUM) - 1))
+	elif \1_TMNUM < 48 + 1
+_tms2 = _tms2 | (1 << ((\1_TMNUM) - 1 - 24))
+	else
+_tms3 = _tms3 | (1 << ((\1_TMNUM) - 1 - 48))
+	endc
+	else
+		fail "\1 is not a TM or HM move"
+	endc
+	shift
+endr
+rept 3 ; TM01-TM24 (24/24)
+	db _tms1 & $ff
+_tms1 = _tms1 >> 8
+endr
+rept 3 ; TM25-TM48 (24/24)
+	db _tms2 & $ff
+_tms2 = _tms2 >> 8
+endr
+rept 1 ; TM49-TM50 + HM01-HM05 (7/8)
+	db _tms3 & $ff
+_tms3 = _tms3 >> 8
+endr
 ENDM
 
 
--- 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