summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgarak <garakmon@gmail.com>2018-11-27 11:35:19 -0500
committergarak <garakmon@gmail.com>2018-11-27 11:35:19 -0500
commit73cce797533c5985406b7b5696834b0976039c4f (patch)
treebcf7766a7a7ae0ad42bbfacd9566c219fe1d0fd3
parent091b5194e7bfc6049931202d9712541083fd61cd (diff)
parentc909aa92dee0a8d202d9195d80d0cc96b0d1ebc8 (diff)
Merge remote-tracking branch 'upstream/master' into frontier-data
-rw-r--r--asm/battle_anim_815A0D4.s22
-rw-r--r--asm/battle_anim_8170478.s8
-rw-r--r--asm/battle_anim_effects_1.s68
-rw-r--r--asm/battle_anim_effects_2.s42
-rw-r--r--asm/bug.s791
-rw-r--r--asm/dark.s4
-rw-r--r--asm/dragon.s793
-rw-r--r--asm/electric.s4
-rw-r--r--asm/fight.s1649
-rw-r--r--asm/fire.s10
-rw-r--r--asm/flying.s48
-rw-r--r--asm/ghost.s6
-rw-r--r--asm/ground.s1675
-rw-r--r--asm/ice.s14
-rw-r--r--asm/normal.s12
-rw-r--r--asm/party_menu.s18
-rw-r--r--asm/poison.s306
-rw-r--r--asm/psychic.s4
-rw-r--r--asm/rock.s1469
-rw-r--r--asm/rom_8011DC0.s4
-rw-r--r--asm/script_pokemon_util_80F87D8.s1667
-rw-r--r--asm/water.s20
-rw-r--r--data/graphics/pokemon/footprint_table.inc415
-rw-r--r--data/maps/LilycoveCity_ContestLobby/scripts.inc6
-rw-r--r--data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc2
-rw-r--r--data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc2
-rw-r--r--data/maps/UnknownMap_25_34/scripts.inc4
-rw-r--r--data/pokedex.s244
-rw-r--r--data/pokedex_entries.inc776
-rw-r--r--data/script_pokemon_util_80F87D8.s7
-rw-r--r--data/scripts/contest_hall.inc4
-rw-r--r--data/specials.inc12
-rw-r--r--data/text/pokedex_text.inc2321
-rw-r--r--graphics/battle_interface/textbox.png (renamed from graphics/interface/menu.png)bin444 -> 444 bytes
-rw-r--r--graphics/battle_interface/textbox_0.pal (renamed from graphics/interface/menu_0.pal)0
-rw-r--r--graphics/battle_interface/textbox_1.pal (renamed from graphics/interface/menu_1.pal)0
-rw-r--r--graphics/battle_interface/textbox_map.bin (renamed from graphics/interface/menu_map.bin)bin4096 -> 4096 bytes
-rw-r--r--graphics_file_rules.mk4
-rw-r--r--include/battle_anim.h32
-rw-r--r--include/bg.h4
-rw-r--r--include/contest.h6
-rw-r--r--include/contest_link_80F57C4.h3
-rw-r--r--include/contest_painting.h1
-rw-r--r--include/global.fieldmap.h4
-rw-r--r--include/graphics.h6
-rw-r--r--include/international_string_util.h2
-rw-r--r--include/pokemon.h20
-rw-r--r--include/script_pokemon_util_80F87D8.h3
-rw-r--r--include/strings.h50
-rw-r--r--include/text.h18
-rw-r--r--ld_script.txt117
-rw-r--r--songs.mk150
-rw-r--r--sound/song_table.inc14
-rw-r--r--sound/songs/midi/se_mizu.midbin0 -> 105 bytes
-rw-r--r--sound/songs/midi/se_moter.midbin0 -> 87 bytes
-rw-r--r--sound/songs/midi/se_mu_pachi.midbin0 -> 87 bytes
-rw-r--r--sound/songs/midi/se_n.midbin0 -> 75 bytes
-rw-r--r--sound/songs/midi/se_nageru.midbin0 -> 133 bytes
-rw-r--r--sound/songs/midi/se_naminori.midbin0 -> 149 bytes
-rw-r--r--sound/songs/midi/se_nigeru.midbin0 -> 164 bytes
-rw-r--r--sound/songs/midi/se_o.midbin0 -> 75 bytes
-rw-r--r--sound/songs/midi/se_op_basyu.midbin0 -> 297 bytes
-rw-r--r--sound/songs/midi/se_pc_login.midbin0 -> 108 bytes
-rw-r--r--sound/songs/midi/se_pc_off.midbin0 -> 96 bytes
-rw-r--r--sound/songs/midi/se_pc_on.midbin0 -> 148 bytes
-rw-r--r--sound/songs/midi/se_pin.midbin0 -> 107 bytes
-rw-r--r--sound/songs/midi/se_pinpon.midbin0 -> 130 bytes
-rw-r--r--sound/songs/midi/se_pn_off.midbin0 -> 227 bytes
-rw-r--r--sound/songs/midi/se_pn_on.midbin0 -> 227 bytes
-rw-r--r--sound/songs/midi/se_poke_dead.midbin0 -> 161 bytes
-rw-r--r--sound/songs/midi/se_reapoke.midbin0 -> 257 bytes
-rw-r--r--sound/songs/midi/se_regi.midbin0 -> 130 bytes
-rw-r--r--sound/songs/midi/se_rg_bag1.midbin0 -> 115 bytes
-rw-r--r--sound/songs/midi/se_rg_bag2.midbin0 -> 145 bytes
-rw-r--r--sound/songs/midi/se_rg_card1.midbin0 -> 98 bytes
-rw-r--r--sound/songs/midi/se_rg_card2.midbin0 -> 109 bytes
-rw-r--r--sound/songs/midi/se_rg_card3.midbin0 -> 269 bytes
-rw-r--r--sound/songs/midi/se_rg_deomov.midbin0 -> 466 bytes
-rw-r--r--sound/songs/midi/se_rg_excellent.midbin0 -> 436 bytes
-rw-r--r--sound/songs/midi/se_rg_getting.midbin0 -> 119 bytes
-rw-r--r--sound/songs/midi/se_rg_help_cl.midbin0 -> 233 bytes
-rw-r--r--sound/songs/midi/se_rg_help_ng.midbin0 -> 155 bytes
-rw-r--r--sound/songs/midi/se_rg_help_op.midbin0 -> 233 bytes
-rw-r--r--sound/songs/midi/se_rg_kiteki.midbin0 -> 289 bytes
-rw-r--r--sound/songs/midi/se_rg_nawamiss.midbin0 -> 99 bytes
-rw-r--r--sound/songs/midi/se_rg_shop.midbin0 -> 75 bytes
-rw-r--r--sound/songs/midi/se_rg_w_door.midbin0 -> 168 bytes
-rw-r--r--sound/songs/midi/se_ru_bari.midbin0 -> 142 bytes
-rw-r--r--sound/songs/midi/se_ru_gashin.midbin0 -> 122 bytes
-rw-r--r--sound/songs/midi/se_ru_gasyan.midbin0 -> 184 bytes
-rw-r--r--sound/songs/midi/se_ru_hyuu.midbin0 -> 162 bytes
-rw-r--r--sound/songs/midi/se_save.midbin0 -> 179 bytes
-rw-r--r--sound/songs/midi/se_seikai.midbin0 -> 83 bytes
-rw-r--r--sound/songs/midi/se_select.midbin0 -> 107 bytes
-rw-r--r--sound/songs/midi/se_suikomu.midbin0 -> 156 bytes
-rw-r--r--sound/songs/midi/se_t_ame.midbin0 -> 118 bytes
-rw-r--r--sound/songs/midi/se_t_ame_e.midbin0 -> 134 bytes
-rw-r--r--sound/songs/midi/se_t_kami.midbin0 -> 191 bytes
-rw-r--r--sound/songs/midi/se_t_kami2.midbin0 -> 142 bytes
-rw-r--r--sound/songs/midi/se_t_koame.midbin0 -> 118 bytes
-rw-r--r--sound/songs/midi/se_t_koame_e.midbin0 -> 134 bytes
-rw-r--r--sound/songs/midi/se_t_ooame.midbin0 -> 118 bytes
-rw-r--r--sound/songs/midi/se_t_ooame_e.midbin0 -> 134 bytes
-rw-r--r--sound/songs/se_mizu.s54
-rw-r--r--sound/songs/se_moter.s49
-rw-r--r--sound/songs/se_mu_pachi.s47
-rw-r--r--sound/songs/se_n.s45
-rw-r--r--sound/songs/se_nageru.s64
-rw-r--r--sound/songs/se_naminori.s94
-rw-r--r--sound/songs/se_nigeru.s64
-rw-r--r--sound/songs/se_o.s45
-rw-r--r--sound/songs/se_op_basyu.s174
-rw-r--r--sound/songs/se_pc_login.s49
-rw-r--r--sound/songs/se_pc_off.s48
-rw-r--r--sound/songs/se_pc_on.s74
-rw-r--r--sound/songs/se_pin.s50
-rw-r--r--sound/songs/se_pinpon.s98
-rw-r--r--sound/songs/se_pn_off.s86
-rw-r--r--sound/songs/se_pn_on.s86
-rw-r--r--sound/songs/se_poke_dead.s84
-rw-r--r--sound/songs/se_reapoke.s106
-rw-r--r--sound/songs/se_regi.s63
-rw-r--r--sound/songs/se_rg_bag1.s60
-rw-r--r--sound/songs/se_rg_bag2.s65
-rw-r--r--sound/songs/se_rg_card1.s48
-rw-r--r--sound/songs/se_rg_card2.s62
-rw-r--r--sound/songs/se_rg_card3.s110
-rw-r--r--sound/songs/se_rg_deomov.s204
-rw-r--r--sound/songs/se_rg_excellent.s155
-rw-r--r--sound/songs/se_rg_getting.s69
-rw-r--r--sound/songs/se_rg_help_cl.s82
-rw-r--r--sound/songs/se_rg_help_ng.s64
-rw-r--r--sound/songs/se_rg_help_op.s82
-rw-r--r--sound/songs/se_rg_kiteki.s161
-rw-r--r--sound/songs/se_rg_nawamiss.s55
-rw-r--r--sound/songs/se_rg_shop.s46
-rw-r--r--sound/songs/se_rg_w_door.s84
-rw-r--r--sound/songs/se_ru_bari.s64
-rw-r--r--sound/songs/se_ru_gashin.s64
-rw-r--r--sound/songs/se_ru_gasyan.s83
-rw-r--r--sound/songs/se_ru_hyuu.s80
-rw-r--r--sound/songs/se_save.s78
-rw-r--r--sound/songs/se_seikai.s44
-rw-r--r--sound/songs/se_select.s50
-rw-r--r--sound/songs/se_suikomu.s78
-rw-r--r--sound/songs/se_t_ame.s65
-rw-r--r--sound/songs/se_t_ame_e.s74
-rw-r--r--sound/songs/se_t_kami.s98
-rw-r--r--sound/songs/se_t_kami2.s80
-rw-r--r--sound/songs/se_t_koame.s65
-rw-r--r--sound/songs/se_t_koame_e.s74
-rw-r--r--sound/songs/se_t_ooame.s64
-rw-r--r--sound/songs/se_t_ooame_e.s74
-rw-r--r--src/battle_anim_80A5C6C.c32
-rw-r--r--src/battle_anim_80D51AC.c6
-rw-r--r--src/battle_arena.c1
-rw-r--r--src/battle_bg.c22
-rw-r--r--src/battle_controller_link_opponent.c4
-rw-r--r--src/battle_controller_link_partner.c4
-rw-r--r--src/battle_controller_opponent.c4
-rw-r--r--src/battle_controller_player.c10
-rw-r--r--src/battle_controller_player_partner.c4
-rw-r--r--src/battle_controller_recorded_opponent.c4
-rw-r--r--src/battle_controller_recorded_player.c4
-rw-r--r--src/battle_controller_wally.c2
-rw-r--r--src/battle_dome.c16
-rw-r--r--src/battle_interface.c102
-rw-r--r--src/battle_main.c6
-rw-r--r--src/battle_message.c55
-rw-r--r--src/battle_pyramid.c6
-rw-r--r--src/berry.c6
-rw-r--r--src/bg.c1195
-rw-r--r--src/bug.c317
-rw-r--r--src/cable_club.c12
-rw-r--r--src/contest_ai.c2
-rw-r--r--src/data/pokemon/pokedex_entries.h3873
-rw-r--r--src/data/pokemon/pokedex_text.h2321
-rw-r--r--src/data/pokemon_graphics/back_pic_coordinates.h700
-rw-r--r--src/data/pokemon_graphics/footprint_table.h416
-rw-r--r--src/data/pokemon_graphics/front_pic_coordinates.h716
-rw-r--r--src/dewford_trend.c3
-rw-r--r--src/dragon.c269
-rw-r--r--src/effects_1.c4
-rw-r--r--src/field_effect.c312
-rwxr-xr-xsrc/field_effect_helpers.c297
-rw-r--r--src/fight.c681
-rw-r--r--src/frontier_util.c1034
-rw-r--r--src/graphics.c6
-rw-r--r--src/ground.c655
-rw-r--r--src/map_name_popup.c234
-rw-r--r--src/poison.c154
-rw-r--r--src/pokeball.c4
-rw-r--r--src/pokedex.c502
-rw-r--r--src/rock.c615
-rw-r--r--src/rom_8011DC0.c6
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c707
-rw-r--r--src/strings.c464
-rw-r--r--src/text.c1059
-rw-r--r--sym_ewram.txt2
199 files changed, 13307 insertions, 20264 deletions
diff --git a/asm/battle_anim_815A0D4.s b/asm/battle_anim_815A0D4.s
index b31af7d1e..362183765 100644
--- a/asm/battle_anim_815A0D4.s
+++ b/asm/battle_anim_815A0D4.s
@@ -125,7 +125,7 @@ sub_815A1B0: @ 815A1B0
adds r4, r0, 0
movs r0, 0x5A
strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
movs r0, 0x7
strh r0, [r4, 0x30]
@@ -259,7 +259,7 @@ _0815A2B2:
strh r0, [r5, 0x2E]
strh r7, [r5, 0x32]
strh r6, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
@@ -767,7 +767,7 @@ sub_815A6C4: @ 815A6C4
sub sp, 0x4
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimTarget
ldrb r0, [r0]
mov r5, sp
@@ -802,7 +802,7 @@ _0815A6F8:
ldr r0, =0x0000ffce
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_815A73C
str r0, [r4, 0x1C]
add sp, 0x4
@@ -824,7 +824,7 @@ sub_815A73C: @ 815A73C
movs r0, 0x1E
strh r0, [r4, 0x2E]
strh r1, [r4, 0x30]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =sub_815A76C
adds r0, r4, 0
@@ -2216,7 +2216,7 @@ sub_815B27C: @ 815B27C
bne _0815B290
adds r0, r5, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
_0815B290:
ldrh r0, [r5, 0x2E]
adds r0, 0x1
@@ -2291,7 +2291,7 @@ _0815B2D8:
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
_0815B324:
pop {r4,r5}
@@ -2810,7 +2810,7 @@ sub_815B70C: @ 815B70C
_0815B71E:
adds r0, r4, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0x90
lsls r0, 4
strh r0, [r4, 0x30]
@@ -4309,7 +4309,7 @@ sub_815C400: @ 815C400
bne _0815C41E
adds r0, r4, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
@@ -8448,7 +8448,7 @@ _0815E4EE:
adds r0, r1
lsls r0, 2
adds r0, r4
- bl sub_80A68D4
+ bl InitAnimArcTranslation
mov r1, r10
ldrb r0, [r1]
bl GetBattlerSide
@@ -9605,7 +9605,7 @@ sub_815EE84: @ 815EE84
bne _0815EEA8
adds r0, r4, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
b _0815EEAA
.pool
diff --git a/asm/battle_anim_8170478.s b/asm/battle_anim_8170478.s
index ab3f27799..c0881e682 100644
--- a/asm/battle_anim_8170478.s
+++ b/asm/battle_anim_8170478.s
@@ -1473,7 +1473,7 @@ sub_8171104: @ 8171104
ldr r0, =0x0000ffd8
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_8171134
str r0, [r4, 0x1C]
pop {r4}
@@ -2631,7 +2631,7 @@ _08171A26:
ldrsb r0, [r1, r0]
strh r0, [r5, 0x38]
adds r0, r5, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
add r4, r10
ldr r0, =sub_8171AAC
str r0, [r4]
@@ -5571,7 +5571,7 @@ sub_817330C: @ 817330C
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0x1E
strh r0, [r4, 0x2E]
movs r0, 0x1
@@ -5600,7 +5600,7 @@ sub_817330C: @ 817330C
ldr r0, =0x0000ffe0
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r2, =gSprites
ldr r1, =gBattlerSpriteIds
ldr r0, =gBattleAnimAttacker
diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s
index 138cc271e..910b09b8c 100644
--- a/asm/battle_anim_effects_1.s
+++ b/asm/battle_anim_effects_1.s
@@ -92,7 +92,7 @@ sub_80FE8E0: @ 80FE8E0
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r4, 0x2E]
@@ -109,7 +109,7 @@ sub_80FE8E0: @ 80FE8E0
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, =move_anim_8074EE0
adds r0, r4, 0
@@ -125,7 +125,7 @@ sub_80FE930: @ 80FE930
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r5, =gBattleAnimArgs
ldrb r1, [r5, 0x6]
adds r0, r4, 0
@@ -145,7 +145,7 @@ sub_80FE930: @ 80FE930
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
@@ -161,7 +161,7 @@ sub_80FE988: @ 80FE988
push {r4-r6,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r6, =gBattleAnimArgs
ldrh r0, [r6, 0x4]
strh r0, [r4, 0x2E]
@@ -337,7 +337,7 @@ sub_80FEAD8: @ 80FEAD8
ldrh r0, [r6, 0x4]
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_80FEB28
str r0, [r4, 0x1C]
pop {r4-r6}
@@ -493,7 +493,7 @@ sub_80FEC48: @ 80FEC48
push {r4-r6,lr}
adds r6, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -528,7 +528,7 @@ _080FEC68:
ldrh r0, [r4, 0xA]
strh r0, [r6, 0x38]
adds r0, r6, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_80FECB8
str r0, [r6, 0x1C]
pop {r4-r6}
@@ -553,7 +553,7 @@ sub_80FECB8: @ 80FECB8
strb r0, [r2]
movs r0, 0xA
strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =sub_80FECF0
adds r0, r4, 0
@@ -581,7 +581,7 @@ sub_80FECF0: @ 80FECF0
bl StartSpriteAnim
movs r0, 0x3C
strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
@@ -762,7 +762,7 @@ sub_80FEE78: @ 80FEE78
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r5, =gBattleAnimArgs
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x2E]
@@ -859,7 +859,7 @@ sub_80FEF44: @ 80FEF44
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r5, =gBattleAnimArgs
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x2E]
@@ -1079,7 +1079,7 @@ sub_80FF0F4: @ 80FF0F4
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -1138,7 +1138,7 @@ _080FF174:
ldrh r0, [r0, 0xA]
strh r0, [r5, 0x38]
adds r0, r5, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -1256,8 +1256,8 @@ _080FF260:
bx r0
thumb_func_end sub_80FF1C0
- thumb_func_start sub_80FF268
-sub_80FF268: @ 80FF268
+ thumb_func_start AnimMoveTwisterParticle
+AnimMoveTwisterParticle: @ 80FF268
push {r4,lr}
adds r4, r0, 0
bl IsDoubleBattle
@@ -1294,7 +1294,7 @@ _080FF28A:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80FF268
+ thumb_func_end AnimMoveTwisterParticle
thumb_func_start sub_80FF2BC
sub_80FF2BC: @ 80FF2BC
@@ -2348,7 +2348,7 @@ sub_80FFB18: @ 80FFB18
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r4, =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0
@@ -3100,7 +3100,7 @@ _08100060:
adds r0, r1
lsls r0, 2
adds r0, r4
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_8100128
str r0, [r5]
pop {r4-r6}
@@ -3263,7 +3263,7 @@ _08100204:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -3335,7 +3335,7 @@ _08100272:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -3394,7 +3394,7 @@ _081002E8:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -3448,7 +3448,7 @@ _08100380:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -3505,7 +3505,7 @@ _081003D2:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -3557,7 +3557,7 @@ _08100464:
adds r0, r4, 0
bl StartSpriteAnim
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrh r0, [r6, 0x8]
adds r0, 0x1
b _081004FA
@@ -4624,7 +4624,7 @@ _08100CF2:
bl StoreSpriteCallbackInData6
movs r0, 0x3
strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
_08100D28:
pop {r4}
@@ -5704,7 +5704,7 @@ sub_81015AC: @ 81015AC
strh r1, [r0, 0x22]
movs r1, 0x14
strh r1, [r0, 0x2E]
- ldr r1, =sub_80A64B0
+ ldr r1, =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, =sub_81015D4
bl StoreSpriteCallbackInData6
@@ -5728,7 +5728,7 @@ sub_81015D4: @ 81015D4
b _0810166A
_081015EA:
strh r1, [r5, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r5, 0x1C]
ldr r1, =sub_81015D4
adds r0, r5, 0
@@ -5766,7 +5766,7 @@ _08101604:
asrs r0, 24
adds r4, r0
strh r4, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =sub_8101684
adds r0, r5, 0
@@ -5806,7 +5806,7 @@ sub_8101684: @ 8101684
bne _081016AC
movs r0, 0xA
strh r0, [r2, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r2, 0x1C]
ldr r1, =sub_81016B8
adds r0, r2, 0
@@ -5833,7 +5833,7 @@ sub_81016B8: @ 81016B8
strh r0, [r5, 0x2E]
strh r1, [r5, 0x30]
strh r1, [r5, 0x32]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r5, 0x1C]
ldr r1, =sub_8101774
adds r0, r5, 0
@@ -5900,7 +5900,7 @@ _08101718:
lsrs r0, 24
adds r0, r6
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =sub_8101820
adds r0, r5, 0
@@ -7478,7 +7478,7 @@ _08102390:
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
@@ -9019,7 +9019,7 @@ _08102FDE:
strh r0, [r5, 0x22]
movs r0, 0x8
strh r0, [r5, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s
index 8ace81dbb..c8cd53398 100644
--- a/asm/battle_anim_effects_2.s
+++ b/asm/battle_anim_effects_2.s
@@ -240,7 +240,7 @@ sub_8103620: @ 8103620
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r1, =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x2E]
@@ -248,7 +248,7 @@ sub_8103620: @ 8103620
strh r0, [r4, 0x30]
ldrh r0, [r1, 0x8]
strh r0, [r4, 0x38]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =sub_8103658
adds r0, r4, 0
@@ -269,7 +269,7 @@ sub_8103658: @ 8103658
ldrh r1, [r0, 0x22]
adds r1, 0xF
strh r1, [r0, 0x36]
- ldr r1, =sub_80A6EEC
+ ldr r1, =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, =sub_8103680
bl StoreSpriteCallbackInData6
@@ -526,7 +526,7 @@ sub_810387C: @ 810387C
push {r4,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =sub_80A67BC
str r0, [r4, 0x1C]
ldr r1, =sub_81038A0
@@ -548,7 +548,7 @@ sub_81038A0: @ 81038A0
ldrh r1, [r0, 0x22]
subs r1, 0x20
strh r1, [r0, 0x36]
- ldr r1, =sub_80A6EEC
+ ldr r1, =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, =DestroyAnimSprite
bl StoreSpriteCallbackInData6
@@ -594,7 +594,7 @@ _081038EC:
_0810390E:
adds r0, r5, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r4, =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
@@ -657,7 +657,7 @@ _08103980:
mov r0, r8
strh r0, [r5, 0x32]
strh r7, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
@@ -1424,7 +1424,7 @@ sub_8103FE8: @ 8103FE8
push {r4,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gUnknown_085934A0
ldrh r0, [r0, 0x2]
bl IndexOfSpritePaletteTag
@@ -1507,7 +1507,7 @@ sub_8104088: @ 8104088
sub sp, 0x4
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r4, =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
@@ -1655,7 +1655,7 @@ sub_81041C4: @ 81041C4
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0x14
strh r0, [r4, 0x2E]
ldr r5, =gBattleAnimTarget
@@ -1671,7 +1671,7 @@ sub_81041C4: @ 81041C4
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r4, 0x1C]
adds r2, r4, 0
adds r2, 0x2C
@@ -1809,7 +1809,7 @@ sub_8104304: @ 8104304
push {r4,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -1896,7 +1896,7 @@ _08104390:
lsrs r0, 24
adds r0, r6
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =sub_81043F8
adds r0, r5, 0
@@ -4038,7 +4038,7 @@ sub_8105538: @ 8105538
push {r4,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -5141,7 +5141,7 @@ sub_8105DE8: @ 8105DE8
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r6, =gBattleAnimAttacker
ldrb r0, [r6]
bl GetBattlerSide
@@ -5172,7 +5172,7 @@ _08105E08:
ldrh r1, [r4, 0x6]
adds r0, r1
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
@@ -5200,7 +5200,7 @@ sub_8105E60: @ 8105E60
bne _08105E7A
adds r0, r4, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
_08105E7A:
movs r1, 0x30
ldrsh r0, [r4, r1]
@@ -5525,7 +5525,7 @@ sub_8106140: @ 8106140
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0x5F
strh r0, [r4, 0x2E]
ldrh r0, [r4, 0x20]
@@ -5667,7 +5667,7 @@ sub_810624C: @ 810624C
strh r1, [r0, 0x2E]
ldrh r1, [r2, 0x2]
strh r1, [r0, 0x30]
- ldr r1, =sub_80A64B0
+ ldr r1, =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, =sub_810627C
bl StoreSpriteCallbackInData6
@@ -6543,7 +6543,7 @@ sub_81069B8: @ 81069B8
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =sub_810699C
str r0, [r4, 0x1C]
pop {r4}
@@ -7496,7 +7496,7 @@ _08107118:
ldrh r0, [r5, 0x22]
subs r0, 0x48
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
diff --git a/asm/bug.s b/asm/bug.s
deleted file mode 100644
index 36ac05ace..000000000
--- a/asm/bug.s
+++ /dev/null
@@ -1,791 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8110368
-sub_8110368: @ 8110368
- push {r4-r6,lr}
- adds r6, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _08110394
- adds r0, r6, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r0, 0x4]
- negs r1, r1
- strh r1, [r0, 0x4]
- ldrh r1, [r0]
- negs r1, r1
- strh r1, [r0]
- b _081103C4
- .pool
-_08110394:
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _081103C4
- adds r0, r6, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- negs r0, r0
- strh r0, [r1, 0x2]
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
- ldrh r0, [r1, 0x6]
- negs r0, r0
- strh r0, [r1, 0x6]
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
-_081103C4:
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- ldr r4, =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4]
- adds r0, r1
- strh r0, [r6, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r6, 0x22]
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x2E]
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r4, [r4, 0x6]
- adds r0, r4
- strh r0, [r6, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r6, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110368
-
- thumb_func_start sub_8110438
-sub_8110438: @ 8110438
- push {r4-r6,lr}
- adds r6, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0811045C
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
- adds r0, r6, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- b _08110478
- .pool
-_0811045C:
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08110478
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r0, 0x2]
- negs r1, r1
- strh r1, [r0, 0x2]
- ldrh r1, [r0]
- negs r1, r1
- strh r1, [r0]
-_08110478:
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- ldr r4, =gBattleAnimArgs
- lsrs r0, 24
- ldrh r1, [r4]
- adds r0, r1
- strh r0, [r6, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r6, 0x22]
- ldrh r0, [r4, 0x4]
- strh r0, [r6, 0x2E]
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r6, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110438
-
- thumb_func_start sub_81104E4
-sub_81104E4: @ 81104E4
- push {r4,r5,lr}
- adds r5, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _08110500
- ldr r0, =gBattleAnimArgs
- movs r2, 0x4
- ldrsh r1, [r0, r2]
- lsrs r2, r1, 31
- adds r1, r2
- asrs r1, 1
- strh r1, [r0, 0x4]
-_08110500:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _08110548
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- b _0811055A
- .pool
-_08110548:
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x32
- adds r3, r5, 0
- adds r3, 0x36
- movs r1, 0x1
- bl SetAverageBattlerPositions
-_0811055A:
- adds r0, r5, 0
- bl sub_80A6FD4
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0, 0x6]
- strh r0, [r5, 0x38]
- ldr r0, =sub_811057C
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81104E4
-
- thumb_func_start sub_811057C
-sub_811057C: @ 811057C
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- beq _08110592
- adds r0, r4, 0
- bl DestroyAnimSprite
- b _081105AE
-_08110592:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x3A]
- adds r0, 0xD
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3A]
-_081105AE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811057C
-
- thumb_func_start sub_81105B4
-sub_81105B4: @ 81105B4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _081105F0
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r4, 0x20]
- ldrh r2, [r0]
- subs r1, r2
- strh r1, [r4, 0x20]
- b _081105FC
- .pool
-_081105F0:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- adds r0, r1, 0
-_081105FC:
- ldrh r0, [r0, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _08110618
- ldrh r0, [r4, 0x22]
- adds r0, 0x8
- strh r0, [r4, 0x22]
-_08110618:
- ldr r0, =sub_8110630
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81105B4
-
- thumb_func_start sub_8110630
-sub_8110630: @ 8110630
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _08110664
- movs r0, 0
- strh r0, [r3, 0x2E]
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
-_08110664:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x33
- bne _08110678
- adds r0, r3, 0
- bl DestroyAnimSprite
-_08110678:
- pop {r0}
- bx r0
- thumb_func_end sub_8110630
-
- thumb_func_start sub_811067C
-sub_811067C: @ 811067C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0x10
- bl SetGpuReg
- movs r0, 0x10
- strh r0, [r4, 0x2E]
- ldr r0, =sub_81106A4
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811067C
-
- thumb_func_start sub_81106A4
-sub_81106A4: @ 81106A4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x32]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- cmp r0, 0x13
- bgt _081106B8
- adds r0, r1, 0x1
- strh r0, [r4, 0x32]
- b _081106F6
-_081106B8:
- ldrh r1, [r4, 0x30]
- adds r0, r1, 0x1
- strh r0, [r4, 0x30]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081106F6
- ldrh r1, [r4, 0x2E]
- subs r1, 0x1
- strh r1, [r4, 0x2E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081106F6
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, =sub_8110700
- str r0, [r4, 0x1C]
-_081106F6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81106A4
-
- thumb_func_start sub_8110700
-sub_8110700: @ 8110700
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- bl DestroyAnimSprite
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8110700
-
- thumb_func_start sub_8110720
-sub_8110720: @ 8110720
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _08110740
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
- b _08110762
- .pool
-_08110740:
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08110762
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
- ldrh r0, [r1, 0x2]
- negs r0, r0
- strh r0, [r1, 0x2]
- ldrh r0, [r1, 0x6]
- negs r0, r0
- strh r0, [r1, 0x6]
-_08110762:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _081107B2
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- adds r4, r0, 0
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _081107B2
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- cmp r0, 0
- beq _081107A0
- ldrb r0, [r5]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081107B2
-_081107A0:
- ldr r0, =gBattleAnimArgs
- movs r2, 0x4
- ldrsh r1, [r0, r2]
- negs r1, r1
- strh r1, [r0, 0x4]
- movs r2, 0
- ldrsh r1, [r0, r2]
- negs r1, r1
- strh r1, [r0]
-_081107B2:
- adds r0, r7, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- ldr r6, =gBattleAnimArgs
- lsrs r4, 24
- ldrh r0, [r6, 0x4]
- adds r4, r0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r6, 0x6]
- adds r1, r2
- lsls r1, 16
- ldrh r2, [r7, 0x20]
- lsls r0, r4, 16
- asrs r0, 16
- subs r0, r2
- lsls r0, 16
- asrs r0, 16
- ldrh r2, [r7, 0x22]
- lsrs r5, r1, 16
- asrs r1, 16
- subs r1, r2
- lsls r1, 16
- asrs r1, 16
- bl ArcTan2Neg
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 24
- adds r0, r1
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 1
- str r0, [sp]
- adds r0, r7, 0
- movs r1, 0
- adds r2, r3, 0
- bl sub_80A73E0
- ldrh r0, [r6, 0x8]
- strh r0, [r7, 0x2E]
- strh r4, [r7, 0x32]
- strh r5, [r7, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r7, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r7, 0
- bl StoreSpriteCallbackInData6
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110720
-
- thumb_func_start sub_8110850
-sub_8110850: @ 8110850
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08110870
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_08110870:
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x2E]
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x6]
- adds r0, r1
- strh r0, [r6, 0x36]
- ldrh r0, [r4, 0xA]
- strh r0, [r6, 0x38]
- adds r0, r6, 0
- bl sub_80A68D4
- ldr r0, =sub_81108CC
- str r0, [r6, 0x1C]
- adds r2, r6, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110850
-
- thumb_func_start sub_81108CC
-sub_81108CC: @ 81108CC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- adds r4, r0, 0
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- adds r0, r4, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _081108F8
- adds r0, r4, 0
- bl DestroyAnimSprite
- b _08110988
-_081108F8:
- movs r0, 0x2E
- adds r0, r4
- mov r8, r0
- ldrh r7, [r4, 0x20]
- ldrh r5, [r4, 0x24]
- ldrh r1, [r4, 0x22]
- mov r12, r1
- ldrh r6, [r4, 0x26]
- mov r2, r8
- add r1, sp, 0x4
- movs r3, 0x7
-_0811090E:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0811090E
- adds r0, r7, r5
- lsls r0, 16
- lsrs r5, r0, 16
- mov r2, r12
- adds r0, r2, r6
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r4, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- bne _08110988
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- lsls r1, r5, 16
- asrs r1, 16
- subs r0, r1
- lsls r0, 16
- asrs r0, 16
- ldrh r1, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r1, r2
- lsls r2, r6, 16
- asrs r2, 16
- subs r1, r2
- lsls r1, 16
- asrs r1, 16
- bl ArcTan2Neg
- lsls r0, 16
- movs r1, 0xC0
- lsls r1, 24
- adds r0, r1
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 1
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0
- adds r2, r3, 0
- bl sub_80A73E0
- add r2, sp, 0x4
- mov r1, r8
- movs r3, 0x7
-_0811097A:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0811097A
-_08110988:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81108CC
-
- thumb_func_start sub_8110994
-sub_8110994: @ 8110994
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _081109B0
- ldr r4, =gBattleAnimAttacker
- b _081109B2
- .pool
-_081109B0:
- ldr r4, =gBattleAnimTarget
-_081109B2:
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x12
- strh r0, [r5, 0x22]
- ldr r1, =move_anim_8074EE0
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A67BC
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110994
-
- .align 2, 0
diff --git a/asm/dark.s b/asm/dark.s
index 07f24d27e..e4373723d 100644
--- a/asm/dark.s
+++ b/asm/dark.s
@@ -264,7 +264,7 @@ sub_81138D4: @ 81138D4
movs r0, 0x7E
strh r0, [r4, 0x2E]
adds r0, r4, 0
- bl sub_80A6E14
+ bl InitSpriteDataForLinearTranslation
ldrh r0, [r4, 0x30]
negs r0, r0
strh r0, [r4, 0x34]
@@ -563,7 +563,7 @@ _08113B60:
ldr r0, =0x0000fff4
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_8113B90
str r0, [r4, 0x1C]
pop {r4-r7}
diff --git a/asm/dragon.s b/asm/dragon.s
deleted file mode 100644
index dc3ca1d0b..000000000
--- a/asm/dragon.s
+++ /dev/null
@@ -1,793 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8113064
-sub_8113064: @ 8113064
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _081130B4
- ldr r2, =gBattleAnimArgs
- ldrh r0, [r5, 0x20]
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r5, 0x20]
- ldrh r0, [r2, 0x6]
- negs r0, r0
- strh r0, [r2, 0x6]
- ldrh r0, [r2, 0x8]
- negs r0, r0
- strh r0, [r2, 0x8]
- adds r1, r2, 0
- b _081130BE
- .pool
-_081130B4:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r5, 0x20]
- adds r0, r2
- strh r0, [r5, 0x20]
-_081130BE:
- ldrh r0, [r1, 0x2]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x34]
- ldrh r0, [r1, 0xA]
- strh r0, [r5, 0x38]
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r1, =move_anim_8074EE0
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A66DC
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8113064
-
- thumb_func_start sub_8113100
-sub_8113100: @ 8113100
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_80A6838
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08113164
- ldr r2, =gBattleAnimArgs
- ldrh r0, [r5, 0x20]
- ldrh r1, [r2, 0x2]
- subs r0, r1
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x22]
- adds r1, r0
- strh r1, [r5, 0x22]
- ldrh r0, [r5, 0x32]
- ldrh r1, [r2, 0x4]
- subs r0, r1
- strh r0, [r5, 0x32]
- ldrh r0, [r2, 0x6]
- ldrh r1, [r5, 0x36]
- adds r0, r1
- strh r0, [r5, 0x36]
- b _0811318E
- .pool
-_08113164:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- ldrh r2, [r5, 0x20]
- adds r0, r2
- strh r0, [r5, 0x20]
- ldrh r0, [r1, 0x2]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- ldrh r0, [r1, 0x4]
- ldrh r2, [r5, 0x32]
- adds r0, r2
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x6]
- ldrh r1, [r5, 0x36]
- adds r0, r1
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_0811318E:
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0, 0x8]
- strh r0, [r5, 0x2E]
- ldr r0, =sub_80A6EEC
- str r0, [r5, 0x1C]
- ldr r1, =move_anim_8074EE0
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8113100
-
- thumb_func_start sub_81131B4
-sub_81131B4: @ 81131B4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _081131D0
- ldr r4, =gBattleAnimAttacker
- b _081131D2
- .pool
-_081131D0:
- ldr r4, =gBattleAnimTarget
-_081131D2:
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r4, =gBattleAnimArgs
- movs r0, 0x2
- ldrsh r1, [r4, r0]
- adds r0, r5, 0
- bl sub_80A6864
- ldrh r0, [r4, 0x4]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldr r0, =sub_80A67D8
- str r0, [r5, 0x1C]
- ldr r1, =move_anim_8074EE0
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81131B4
-
- thumb_func_start sub_8113224
-sub_8113224: @ 8113224
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0811323E
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_0811323E:
- adds r0, r4, 0
- bl sub_8113100
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8113224
-
- thumb_func_start sub_8113250
-sub_8113250: @ 8113250
- push {r4-r7,lr}
- adds r6, r0, 0
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r5, 0
- strh r0, [r6, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x22]
- strh r5, [r6, 0x36]
- movs r0, 0x1
- strh r0, [r6, 0x38]
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r6, 0x3A]
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- movs r1, 0
- bl sub_80A861C
- lsls r7, r0, 16
- lsrs r5, r7, 16
- ldrb r0, [r4]
- movs r1, 0x1
- bl sub_80A861C
- lsls r1, r0, 16
- lsrs r0, r1, 16
- cmp r5, r0
- bls _081132B0
- lsrs r0, r7, 17
- b _081132B2
- .pool
-_081132B0:
- lsrs r0, r1, 17
-_081132B2:
- strh r0, [r6, 0x3C]
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- movs r2, 0x3C
- ldrsh r1, [r6, r2]
- bl Cos
- strh r0, [r6, 0x24]
- movs r1, 0x3A
- ldrsh r0, [r6, r1]
- movs r2, 0x3C
- ldrsh r1, [r6, r2]
- bl Sin
- strh r0, [r6, 0x26]
- ldr r0, =sub_81132E0
- str r0, [r6, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8113250
-
- thumb_func_start sub_81132E0
-sub_81132E0: @ 81132E0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r5, [r4, r0]
- cmp r5, 0
- beq _081132F2
- cmp r5, 0x1
- beq _0811335E
- b _081133E2
-_081132F2:
- ldrh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x38]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3A]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _08113344
- strh r5, [r4, 0x36]
- ldrh r1, [r4, 0x38]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0xF
- bgt _08113344
- adds r0, r1, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xF
- ble _08113344
- movs r0, 0x10
- strh r0, [r4, 0x38]
-_08113344:
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _081133E2
- movs r0, 0
- strh r0, [r4, 0x34]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _081133E2
-_0811335E:
- ldrh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x38]
- subs r0, r1
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- cmp r0, 0x95
- bgt _08113386
- adds r0, r1, 0
- adds r0, 0x8
- strh r0, [r4, 0x3C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x95
- ble _08113386
- movs r0, 0x96
- strh r0, [r4, 0x3C]
-_08113386:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- movs r2, 0x3C
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _081133CE
- movs r0, 0
- strh r0, [r4, 0x36]
- ldrh r1, [r4, 0x38]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0xF
- bgt _081133CE
- adds r0, r1, 0x1
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xF
- ble _081133CE
- movs r0, 0x10
- strh r0, [r4, 0x38]
-_081133CE:
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _081133E2
- adds r0, r4, 0
- bl DestroyAnimSprite
-_081133E2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81132E0
-
- thumb_func_start sub_81133E8
-sub_81133E8: @ 81133E8
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8364
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08113424
- ldr r0, =0x04000014
- str r0, [sp]
- ldr r0, =gBattle_BG1_X
- b _0811342A
- .pool
-_08113424:
- ldr r0, =0x04000018
- str r0, [sp]
- ldr r0, =gBattle_BG2_X
-_0811342A:
- ldrh r0, [r0]
- strh r0, [r4, 0xC]
- ldr r0, =0xa2600001
- str r0, [sp, 0x4]
- mov r1, sp
- movs r5, 0
- movs r0, 0x1
- strb r0, [r1, 0x8]
- mov r0, sp
- strb r5, [r0, 0x9]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerYCoordWithElevation
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- subs r1, 0x20
- strh r1, [r4, 0xE]
- adds r0, 0x20
- strh r0, [r4, 0x10]
- cmp r1, 0
- bge _0811345A
- strh r5, [r4, 0xE]
-_0811345A:
- ldrh r3, [r4, 0xE]
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r3, r0
- bgt _08113488
- ldr r5, =gScanlineEffectRegBuffers
- movs r0, 0xF0
- lsls r0, 3
- adds r6, r5, r0
-_0811346C:
- lsls r1, r3, 1
- adds r2, r1, r5
- ldrh r0, [r4, 0xC]
- strh r0, [r2]
- adds r1, r6
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r3, r0
- ble _0811346C
-_08113488:
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- ldr r0, =sub_81134B8
- str r0, [r4]
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81133E8
-
- thumb_func_start sub_81134B8
-sub_81134B8: @ 81134B8
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, =gTasks
- adds r2, r0, r1
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- cmp r0, 0x4
- bhi _0811356E
- lsls r0, 2
- ldr r1, =_081134E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081134E4:
- .4byte _081134F8
- .4byte _0811351A
- .4byte _0811352A
- .4byte _08113556
- .4byte _08113568
-_081134F8:
- ldrh r0, [r2, 0x16]
- adds r0, 0x1
- strh r0, [r2, 0x16]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811354E
- movs r0, 0
- strh r0, [r2, 0x16]
- ldrh r0, [r2, 0x14]
- adds r0, 0x1
- strh r0, [r2, 0x14]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _0811354E
- b _08113548
-_0811351A:
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _0811354E
- b _08113548
-_0811352A:
- ldrh r0, [r2, 0x16]
- adds r0, 0x1
- strh r0, [r2, 0x16]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811354E
- movs r0, 0
- strh r0, [r2, 0x16]
- ldrh r0, [r2, 0x14]
- subs r0, 0x1
- strh r0, [r2, 0x14]
- lsls r0, 16
- cmp r0, 0
- bne _0811354E
-_08113548:
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0811354E:
- adds r0, r2, 0
- bl sub_8113574
- b _0811356E
-_08113556:
- ldr r1, =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- b _0811356E
- .pool
-_08113568:
- adds r0, r3, 0
- bl DestroyAnimVisualTask
-_0811356E:
- pop {r0}
- bx r0
- thumb_func_end sub_81134B8
-
- thumb_func_start sub_8113574
-sub_8113574: @ 8113574
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- ldrh r3, [r5, 0x12]
- ldrh r4, [r5, 0xE]
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r4, r0
- bgt _081135CA
- ldr r7, =gScanlineEffectRegBuffers
- mov r12, r7
- ldr r0, =gSineTable
- mov r8, r0
- ldr r6, =gScanlineEffect
-_08113592:
- lsls r2, r4, 1
- ldrb r1, [r6, 0x14]
- lsls r0, r1, 4
- subs r0, r1
- lsls r0, 7
- adds r2, r0
- add r2, r12
- lsls r0, r3, 1
- add r0, r8
- movs r7, 0
- ldrsh r1, [r0, r7]
- movs r7, 0x14
- ldrsh r0, [r5, r7]
- muls r0, r1
- asrs r0, 7
- ldrh r1, [r5, 0xC]
- adds r0, r1
- strh r0, [r2]
- adds r3, 0x8
- movs r0, 0xFF
- ands r3, r0
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- movs r7, 0x10
- ldrsh r0, [r5, r7]
- cmp r4, r0
- ble _08113592
-_081135CA:
- ldrh r0, [r5, 0x12]
- adds r0, 0x9
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r5, 0x12]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8113574
-
- thumb_func_start sub_81135EC
-sub_81135EC: @ 81135EC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- movs r0, 0x4
- ldrsh r1, [r5, r0]
- lsls r0, r1, 1
- adds r0, r1
- movs r1, 0x5
- bl __divsi3
- adds r6, r0, 0
- ldr r1, =gBattleAnimAttacker
- mov r8, r1
- ldrb r0, [r1]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- mov r2, r8
- ldrb r0, [r2]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r3, [r5, 0x8]
- adds r0, r3
- strh r0, [r4, 0x22]
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl Cos
- strh r0, [r4, 0x30]
- movs r3, 0x2
- ldrsh r0, [r5, r3]
- lsls r6, 16
- asrs r6, 16
- adds r1, r6, 0
- bl Sin
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x30]
- ldrh r2, [r5]
- adds r3, r2, 0
- muls r3, r1
- adds r1, r3, 0
- ldrh r3, [r4, 0x20]
- adds r1, r3
- strh r1, [r4, 0x20]
- adds r1, r2, 0
- muls r1, r0
- adds r0, r1, 0
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x34]
- ldr r0, =sub_811369C
- str r0, [r4, 0x1C]
- adds r4, 0x2E
- ldr r2, =gUnknown_0203A100
- movs r1, 0x6
-_08113674:
- ldrh r0, [r4]
- strh r0, [r2]
- adds r4, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _08113674
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81135EC
-
- thumb_func_start sub_811369C
-sub_811369C: @ 811369C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x36]
- adds r0, r1
- strh r0, [r4, 0x36]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x38]
- adds r0, r2
- strh r0, [r4, 0x38]
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- movs r1, 0xA
- bl __divsi3
- strh r0, [r4, 0x24]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r1, 0xA
- bl __divsi3
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- cmp r0, r1
- ble _081136E0
- adds r0, r4, 0
- bl DestroyAnimSprite
-_081136E0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811369C
-
- .align 2, 0
diff --git a/asm/electric.s b/asm/electric.s
index 3d8864186..b1fa8b9ae 100644
--- a/asm/electric.s
+++ b/asm/electric.s
@@ -345,7 +345,7 @@ sub_810A46C: @ 810A46C
push {r4-r6,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r5, =gBattleAnimArgs
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x2E]
@@ -744,7 +744,7 @@ _0810A7B6:
ldr r0, =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
diff --git a/asm/fight.s b/asm/fight.s
deleted file mode 100644
index 508b942bc..000000000
--- a/asm/fight.s
+++ /dev/null
@@ -1,1649 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start unc_080B08A0
-unc_080B08A0: @ 810CE2C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- movs r0, 0
- ldrsh r1, [r5, r0]
- adds r0, r4, 0
- bl sub_80A6864
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
- movs r0, 0xF
- strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unc_080B08A0
-
- thumb_func_start sub_810CE68
-sub_810CE68: @ 810CE68
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimArgs
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _0810CE90
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810CE90
- ldrh r0, [r4, 0x2]
- negs r0, r0
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x6]
- negs r0, r0
- strh r0, [r4, 0x6]
-_0810CE90:
- ldr r4, =gBattleAnimArgs
- ldrb r1, [r4, 0xC]
- adds r0, r5, 0
- bl StartSpriteAnim
- movs r0, 0
- strh r0, [r4, 0xC]
- adds r0, r5, 0
- bl sub_80A7938
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810CE68
-
- thumb_func_start sub_810CEB4
-sub_810CEB4: @ 810CEB4
- push {r4,lr}
- adds r4, r0, 0
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0810CED0
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r0, 0x2]
- negs r1, r1
- strh r1, [r0, 0x2]
- ldrh r1, [r0, 0x6]
- negs r1, r1
- strh r1, [r0, 0x6]
-_0810CED0:
- adds r0, r4, 0
- bl sub_810CE68
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810CEB4
-
- thumb_func_start sub_810CEE0
-sub_810CEE0: @ 810CEE0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimArgs
- ldrb r1, [r4, 0x8]
- bl StartSpriteAnim
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0810CF04
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80A69CC
- b _0810CF0C
- .pool
-_0810CF04:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80A6980
-_0810CF0C:
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r5, 0x2E]
- ldr r0, =sub_80A64B0
- str r0, [r5, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810CEE0
-
- thumb_func_start sub_810CF30
-sub_810CF30: @ 810CF30
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r2, 0
- ldrsh r1, [r0, r2]
- mov r9, r0
- cmp r1, 0
- bne _0810CF54
- ldr r0, =gBattleAnimAttacker
- b _0810CF56
- .pool
-_0810CF54:
- ldr r0, =gBattleAnimTarget
-_0810CF56:
- ldrb r0, [r0]
- mov r8, r0
- mov r4, r9
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- cmp r0, 0
- bge _0810CF74
- bl Random2
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x5
- bl __umodsi3
- strh r0, [r4, 0x4]
-_0810CF74:
- ldrb r1, [r4, 0x4]
- adds r0, r5, 0
- bl StartSpriteAnim
- mov r0, r8
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- mov r0, r8
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- mov r0, r8
- movs r1, 0x1
- bl sub_80A861C
- lsls r0, 16
- asrs r1, r0, 16
- lsrs r0, 31
- adds r1, r0
- lsls r1, 15
- lsrs r6, r1, 16
- mov r0, r8
- movs r1, 0
- bl sub_80A861C
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _0810CFBE
- adds r0, 0x3
-_0810CFBE:
- lsls r4, r0, 14
- lsrs r4, 16
- bl Random2
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r6, 16
- asrs r1, 16
- bl __modsi3
- lsls r0, 16
- lsrs r6, r0, 16
- bl Random2
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 16
- lsrs r4, r0, 16
- bl Random2
- movs r7, 0x1
- adds r1, r7, 0
- ands r1, r0
- cmp r1, 0
- beq _0810D000
- lsls r0, r6, 16
- negs r0, r0
- lsrs r6, r0, 16
-_0810D000:
- bl Random2
- adds r1, r7, 0
- ands r1, r0
- cmp r1, 0
- beq _0810D012
- lsls r0, r4, 16
- negs r0, r0
- lsrs r4, r0, 16
-_0810D012:
- ldr r0, =gBattlerPositions
- add r0, r8
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0810D028
- lsls r0, r4, 16
- ldr r1, =0xfff00000
- adds r0, r1
- lsrs r4, r0, 16
-_0810D028:
- lsls r0, r6, 16
- asrs r0, 16
- ldrh r2, [r5, 0x20]
- adds r0, r2
- strh r0, [r5, 0x20]
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r3, [r5, 0x22]
- adds r0, r3
- strh r0, [r5, 0x22]
- mov r1, r9
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0x2E]
- ldr r0, =gBasicHitSplatSpriteTemplate
- movs r2, 0x20
- ldrsh r1, [r5, r2]
- movs r3, 0x22
- ldrsh r2, [r5, r3]
- adds r3, r5, 0
- adds r3, 0x43
- ldrb r3, [r3]
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x3C]
- cmp r0, 0x40
- beq _0810D08C
- movs r0, 0x3C
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r2, 0x3C
- ldrsh r1, [r5, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, =SpriteCallbackDummy
- str r1, [r0]
-_0810D08C:
- ldr r0, =sub_810D0B8
- str r0, [r5, 0x1C]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810CF30
-
- thumb_func_start sub_810D0B8
-sub_810D0B8: @ 810D0B8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _0810D100
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0x40
- beq _0810D0F4
- ldr r4, =gSprites
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- movs r0, 0x3C
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
-_0810D0F4:
- adds r0, r5, 0
- bl DestroyAnimSprite
- b _0810D104
- .pool
-_0810D100:
- subs r0, r1, 0x1
- strh r0, [r5, 0x2E]
-_0810D104:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_810D0B8
-
- thumb_func_start sub_810D10C
-sub_810D10C: @ 810D10C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl sub_80A6980
- movs r0, 0x1E
- strh r0, [r4, 0x2E]
- ldr r0, =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0810D130
- ldrh r0, [r4, 0x20]
- subs r0, 0x14
- strh r0, [r4, 0x32]
- b _0810D142
- .pool
-_0810D130:
- ldrh r0, [r4, 0x20]
- adds r0, 0x14
- strh r0, [r4, 0x32]
- adds r2, r4, 0
- adds r2, 0x3F
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
-_0810D142:
- ldrh r0, [r4, 0x22]
- subs r0, 0x14
- strh r0, [r4, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r4, 0x1C]
- ldr r1, =sub_810D164
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D10C
-
- thumb_func_start sub_810D164
-sub_810D164: @ 810D164
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- adds r0, 0x1
- movs r6, 0
- strh r0, [r5, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _0810D1A4
- ldrh r2, [r5, 0x20]
- ldrh r4, [r5, 0x24]
- subs r0, r2, r4
- strh r0, [r5, 0x32]
- ldrh r1, [r5, 0x22]
- ldrh r3, [r5, 0x26]
- subs r0, r1, r3
- strh r0, [r5, 0x36]
- movs r0, 0x8
- strh r0, [r5, 0x2E]
- adds r2, r4
- strh r2, [r5, 0x20]
- adds r1, r3
- strh r1, [r5, 0x22]
- strh r6, [r5, 0x26]
- strh r6, [r5, 0x24]
- ldr r0, =sub_80A6EEC
- str r0, [r5, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
-_0810D1A4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D164
-
- thumb_func_start sub_810D1B4
-sub_810D1B4: @ 810D1B4
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r0, =gBattleAnimAttacker
- ldrb r1, [r0]
- movs r0, 0x2
- ldr r2, =gBattleAnimTarget
- eors r0, r1
- ldrb r1, [r2]
- cmp r0, r1
- bne _0810D1E0
- ldrb r0, [r2]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0810D1E0
- ldr r1, =gBattleAnimArgs
- movs r2, 0
- ldrsh r0, [r1, r2]
- negs r0, r0
- strh r0, [r1]
-_0810D1E0:
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_80A6980
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810D1FE
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_0810D1FE:
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4, 0x6]
- movs r5, 0
- strh r0, [r6, 0x2E]
- ldrh r0, [r6, 0x20]
- strh r0, [r6, 0x30]
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrh r0, [r6, 0x22]
- strh r0, [r6, 0x34]
- strh r0, [r6, 0x36]
- adds r0, r6, 0
- bl InitAnimLinearTranslation
- ldrh r0, [r4, 0xA]
- strh r0, [r6, 0x38]
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x3A]
- strh r5, [r6, 0x3C]
- ldr r0, =sub_810D240
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D1B4
-
- thumb_func_start sub_810D240
-sub_810D240: @ 810D240
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimLinear
- lsls r0, 24
- cmp r0, 0
- bne _0810D26C
- ldrh r0, [r4, 0x3C]
- lsls r0, 16
- asrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- ldrh r2, [r4, 0x3C]
- adds r0, r2
- strh r0, [r4, 0x3C]
- b _0810D272
-_0810D26C:
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810D272:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810D240
-
- thumb_func_start sub_810D278
-sub_810D278: @ 810D278
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl sub_80A6980
- ldr r5, =gBattleAnimArgs
- ldrb r1, [r5, 0x4]
- adds r0, r4, 0
- bl StartSpriteAnim
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
- str r0, [r4, 0x1C]
- ldr r1, =sub_810D2B0
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D278
-
- thumb_func_start sub_810D2B0
-sub_810D2B0: @ 810D2B0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r2, r4, 0
- adds r2, 0x2C
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x14
- strh r0, [r4, 0x2E]
- ldr r0, =sub_80A64B0
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D2B0
-
- thumb_func_start sub_810D2E4
-sub_810D2E4: @ 810D2E4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x1
- bl sub_80A6980
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r4, 0x2E]
- ldr r0, =sub_810D308
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D2E4
-
- thumb_func_start sub_810D308
-sub_810D308: @ 810D308
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- subs r0, 0x1
- strh r0, [r5, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0810D34C
- movs r0, 0x6
- strh r0, [r5, 0x2E]
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r5, 0x1C]
- ldr r1, =sub_810D360
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
-_0810D34C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D308
-
- thumb_func_start sub_810D360
-sub_810D360: @ 810D360
- push {lr}
- movs r1, 0xF
- strh r1, [r0, 0x2E]
- ldr r1, =sub_80A64B0
- str r1, [r0, 0x1C]
- ldr r1, =DestroyAnimSprite
- bl StoreSpriteCallbackInData6
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D360
-
- thumb_func_start sub_810D37C
-sub_810D37C: @ 810D37C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0810D3A8
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_80A6980
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _0810D404
- .pool
-_0810D3A8:
- ldrh r0, [r4, 0x30]
- ldrh r2, [r4, 0x36]
- adds r0, r2
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 24
- strh r0, [r4, 0x24]
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x34]
- adds r0, 0x3
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x34]
- cmp r0, 0x64
- ble _0810D3F6
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- lsrs r0, r1, 31
- adds r0, r1, r0
- asrs r0, 1
- lsls r0, 1
- subs r1, r0
- adds r3, r4, 0
- adds r3, 0x3E
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_0810D3F6:
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0x78
- ble _0810D404
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810D404:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810D37C
-
- thumb_func_start sub_810D40C
-sub_810D40C: @ 810D40C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0810D428
- ldr r4, =gBattleAnimAttacker
- b _0810D42A
- .pool
-_0810D428:
- ldr r4, =gBattleAnimTarget
-_0810D42A:
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x2]
- ldrh r2, [r5, 0x20]
- adds r0, r2
- movs r2, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r1, 0x4]
- ldrh r3, [r5, 0x22]
- adds r0, r3
- strh r0, [r5, 0x22]
- strh r2, [r5, 0x2E]
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r5, 0x32]
- strh r2, [r5, 0x34]
- ldr r0, =sub_810D47C
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D40C
-
- thumb_func_start sub_810D47C
-sub_810D47C: @ 810D47C
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- cmp r2, 0
- beq _0810D48E
- cmp r2, 0x1
- beq _0810D4B2
- b _0810D4EC
-_0810D48E:
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _0810D4EC
- movs r2, 0x32
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0810D4AA
- adds r0, r1, 0
- bl DestroyAnimSprite
- b _0810D4EC
-_0810D4AA:
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- b _0810D4EC
-_0810D4B2:
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0810D4DA
- movs r0, 0
- strh r0, [r1, 0x30]
- ldrh r0, [r1, 0x34]
- adds r0, 0x1
- strh r0, [r1, 0x34]
- ands r0, r2
- lsls r0, 16
- cmp r0, 0
- beq _0810D4D6
- movs r0, 0x2
- b _0810D4D8
-_0810D4D6:
- ldr r0, =0x0000fffe
-_0810D4D8:
- strh r0, [r1, 0x24]
-_0810D4DA:
- ldrh r0, [r1, 0x32]
- subs r0, 0x1
- strh r0, [r1, 0x32]
- lsls r0, 16
- cmp r0, 0
- bne _0810D4EC
- adds r0, r1, 0
- bl DestroyAnimSprite
-_0810D4EC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D47C
-
- thumb_func_start sub_810D4F4
-sub_810D4F4: @ 810D4F4
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _0810D520
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r2, [r6, 0x4]
- adds r0, r2
- b _0810D532
- .pool
-_0810D520:
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- adds r0, r1
-_0810D532:
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r6, [r6, 0x6]
- adds r0, r6
- strh r0, [r5, 0x22]
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- ldr r3, =gBattleAnimArgs
- movs r4, 0x2
- ldrsh r0, [r3, r4]
- lsls r0, 4
- adds r1, r0
- ldr r4, =0x000003ff
- adds r0, r4, 0
- ands r1, r0
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- movs r1, 0
- movs r0, 0
- strh r0, [r5, 0x2E]
- movs r2, 0x2
- ldrsh r0, [r3, r2]
- cmp r0, 0x1
- beq _0810D5A0
- cmp r0, 0x1
- bgt _0810D58C
- cmp r0, 0
- beq _0810D596
- b _0810D5C6
- .pool
-_0810D58C:
- cmp r0, 0x2
- beq _0810D5B0
- cmp r0, 0x3
- beq _0810D5C0
- b _0810D5C6
-_0810D596:
- ldr r0, =0x0000fffd
- b _0810D5C0
- .pool
-_0810D5A0:
- movs r0, 0x3
- strh r0, [r5, 0x3A]
- ldr r0, =0x0000fffd
- strh r0, [r5, 0x3C]
- b _0810D5CE
- .pool
-_0810D5B0:
- ldr r0, =0x0000fffd
- strh r0, [r5, 0x3A]
- movs r0, 0x3
- strh r0, [r5, 0x3C]
- b _0810D5CE
- .pool
-_0810D5C0:
- strh r0, [r5, 0x3A]
- strh r0, [r5, 0x3C]
- b _0810D5CE
-_0810D5C6:
- adds r0, r5, 0
- bl DestroyAnimSprite
- b _0810D5D2
-_0810D5CE:
- ldr r0, =sub_810D5DC
- str r0, [r5, 0x1C]
-_0810D5D2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D4F4
-
- thumb_func_start sub_810D5DC
-sub_810D5DC: @ 810D5DC
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x3A]
- ldrh r2, [r1, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x3C]
- ldrh r2, [r1, 0x22]
- adds r0, r2
- strh r0, [r1, 0x22]
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _0810D604
- adds r0, r1, 0
- bl DestroyAnimSprite
-_0810D604:
- pop {r0}
- bx r0
- thumb_func_end sub_810D5DC
-
- thumb_func_start sub_810D608
-sub_810D608: @ 810D608
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0810D664
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8328
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldr r0, =gBattleAnimTarget
- b _0810D680
- .pool
-_0810D664:
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl sub_80A8328
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldr r0, =gBattleAnimAttacker
-_0810D680:
- ldrb r0, [r0]
- strh r0, [r5, 0x3C]
- movs r0, 0
- strh r0, [r5, 0x2E]
- movs r0, 0xC
- strh r0, [r5, 0x30]
- movs r0, 0x8
- strh r0, [r5, 0x32]
- ldr r0, =sub_810D6A8
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D608
-
- thumb_func_start sub_810D6A8
-sub_810D6A8: @ 810D6A8
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB4
- bne _0810D704
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- ldrh r0, [r4, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl InitAnimLinearTranslation
- ldr r1, =move_anim_8074EE0
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A6F98
- str r0, [r4, 0x1C]
-_0810D704:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D6A8
-
- thumb_func_start sub_810D714
-sub_810D714: @ 810D714
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4]
- strh r0, [r5, 0x20]
- movs r2, 0x78
- strh r2, [r5, 0x22]
- ldrh r0, [r4, 0x6]
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- adds r0, 0x36
- adds r1, r5, 0
- adds r1, 0x38
- lsls r2, 8
- bl sub_80A8048
- ldrh r0, [r4, 0x2]
- strh r0, [r5, 0x3A]
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- lsls r0, 2
- adds r1, r0
- ldr r3, =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r0, =sub_810D770
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D714
-
- thumb_func_start sub_810D770
-sub_810D770: @ 810D770
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r7, r1]
- cmp r0, 0
- beq _0810D7C2
- movs r2, 0x36
- ldrsh r0, [r7, r2]
- movs r2, 0x38
- ldrsh r1, [r7, r2]
- bl sub_80A8050
- adds r4, r0, 0
- movs r1, 0x3A
- ldrsh r0, [r7, r1]
- subs r4, r0
- adds r0, r7, 0
- adds r0, 0x36
- adds r1, r7, 0
- adds r1, 0x38
- adds r2, r4, 0
- bl sub_80A8048
- asrs r4, 8
- strh r4, [r7, 0x22]
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x8
- negs r0, r0
- cmp r4, r0
- bge _0810D7BA
- adds r0, r7, 0
- bl DestroyAnimSprite
- b _0810D818
-_0810D7BA:
- ldrh r0, [r7, 0x2E]
- subs r0, 0x1
- strh r0, [r7, 0x2E]
- b _0810D818
-_0810D7C2:
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r2, =gBattleAnimTarget
- mov r8, r2
- ldrb r0, [r2]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- subs r4, r6
- strh r4, [r7, 0x2E]
- lsrs r0, 24
- subs r0, r5
- strh r0, [r7, 0x30]
- ldrh r0, [r7, 0x20]
- lsls r0, 4
- strh r0, [r7, 0x32]
- ldrh r0, [r7, 0x22]
- lsls r0, 4
- strh r0, [r7, 0x34]
- ldr r0, =sub_810D830
- str r0, [r7, 0x1C]
-_0810D818:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D770
-
- thumb_func_start sub_810D830
-sub_810D830: @ 810D830
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x32]
- adds r0, r1
- strh r0, [r2, 0x32]
- ldrh r1, [r2, 0x30]
- ldrh r3, [r2, 0x34]
- adds r1, r3
- strh r1, [r2, 0x34]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r2, 0x20]
- lsls r1, 16
- asrs r3, r1, 20
- strh r3, [r2, 0x22]
- adds r0, 0x8
- lsls r0, 16
- movs r1, 0x80
- lsls r1, 17
- cmp r0, r1
- bhi _0810D86A
- adds r1, r3, 0
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- blt _0810D86A
- cmp r1, 0x78
- ble _0810D870
-_0810D86A:
- adds r0, r2, 0
- bl DestroyAnimSprite
-_0810D870:
- pop {r0}
- bx r0
- thumb_func_end sub_810D830
-
- thumb_func_start sub_810D874
-sub_810D874: @ 810D874
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0810D8B8
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r0, =gBattleAnimTarget
- ldrb r4, [r0]
- ldr r0, =gBattleAnimAttacker
- b _0810D8BE
- .pool
-_0810D8B8:
- ldr r0, =gBattleAnimAttacker
- ldrb r4, [r0]
- ldr r0, =gBattleAnimTarget
-_0810D8BE:
- ldrb r0, [r0]
- bl sub_80A8328
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0810D8F8
- ldrb r2, [r5, 0x3]
- lsls r1, r2, 26
- lsrs r1, 27
- movs r0, 0x8
- orrs r1, r0
- lsls r1, 1
- subs r0, 0x47
- b _0810D912
- .pool
-_0810D8F8:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0810D918
- ldrb r2, [r5, 0x3]
- lsls r1, r2, 26
- lsrs r1, 27
- movs r0, 0x18
- orrs r1, r0
- lsls r1, 1
- subs r0, 0x57
-_0810D912:
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
-_0810D918:
- movs r0, 0x10
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- adds r0, r4, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x22]
- strh r0, [r5, 0x34]
- adds r0, r4, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- adds r0, r5, 0
- bl InitAnimLinearTranslation
- ldr r1, =DestroyAnimSprite
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A6F98
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D874
-
- thumb_func_start sub_810D960
-sub_810D960: @ 810D960
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _0810D976
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810D976:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810D960
-
- thumb_func_start sub_810D984
-sub_810D984: @ 810D984
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x22]
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r5, 0x30]
- ldrh r0, [r1]
- strh r0, [r5, 0x32]
- ldrh r0, [r1, 0x2]
- strh r0, [r5, 0x34]
- ldrh r0, [r1, 0x4]
- strh r0, [r5, 0x36]
- ldr r0, =gAnimMoveTurn
- ldrb r6, [r0]
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0810D9CE
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0810D9CE:
- movs r0, 0x1
- ands r6, r0
- cmp r6, 0
- beq _0810D9E2
- ldrh r0, [r5, 0x32]
- negs r0, r0
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x30]
- adds r0, 0x1
- strh r0, [r5, 0x30]
-_0810D9E2:
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- ldrh r0, [r5, 0x32]
- strh r0, [r5, 0x24]
- ldrh r0, [r5, 0x34]
- strh r0, [r5, 0x26]
- ldr r0, =sub_810D960
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810D984
-
- thumb_func_start sub_810DA10
-sub_810DA10: @ 810DA10
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0810DA2C
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A69CC
- b _0810DA34
- .pool
-_0810DA2C:
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A6980
-_0810DA34:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _0810DA48
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- b _0810DA5E
-_0810DA48:
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810DA5E
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_0810DA5E:
- ldr r0, =sub_80A67D8
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DA10
-
- thumb_func_start sub_810DA7C
-sub_810DA7C: @ 810DA7C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0810DAB6
- ldrh r0, [r4, 0x30]
- adds r0, 0x28
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _0810DAB6
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810DAB6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810DA7C
-
- thumb_func_start sub_810DABC
-sub_810DABC: @ 810DABC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0810DAF4
- cmp r0, 0x1
- bgt _0810DB0E
- cmp r0, 0
- bne _0810DB0E
- movs r0, 0
- bl sub_80A6DAC
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0]
- strh r0, [r4, 0x18]
- b _0810DB06
- .pool
-_0810DAF4:
- ldrh r0, [r4, 0x18]
- subs r0, 0x1
- strh r0, [r4, 0x18]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _0810DB1A
-_0810DB06:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0810DB1A
-_0810DB0E:
- movs r2, 0xA0
- lsls r2, 3
- adds r0, r2, 0
- ldrh r1, [r4, 0x1A]
- adds r0, r1
- strh r0, [r4, 0x1A]
-_0810DB1A:
- movs r2, 0xB0
- lsls r2, 4
- adds r0, r2, 0
- ldrh r1, [r4, 0x1C]
- adds r0, r1
- strh r0, [r4, 0x1C]
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0810DB50
- ldr r1, =gBattle_BG3_X
- ldrh r0, [r4, 0x1A]
- lsls r0, 16
- asrs r0, 24
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- adds r7, r1, 0
- b _0810DB60
- .pool
-_0810DB50:
- ldr r2, =gBattle_BG3_X
- ldrh r1, [r4, 0x1A]
- lsls r1, 16
- asrs r1, 24
- ldrh r0, [r2]
- subs r0, r1
- strh r0, [r2]
- adds r7, r2, 0
-_0810DB60:
- ldr r3, =gBattle_BG3_Y
- ldrh r2, [r4, 0x1C]
- lsls r0, r2, 16
- asrs r0, 24
- ldrh r1, [r3]
- adds r0, r1
- strh r0, [r3]
- movs r0, 0xFF
- ldrb r1, [r4, 0x1A]
- movs r5, 0
- strh r1, [r4, 0x1A]
- ands r0, r2
- strh r0, [r4, 0x1C]
- ldr r0, =gBattleAnimArgs
- movs r2, 0xE
- ldrsh r1, [r0, r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0810DB98
- strh r5, [r7]
- strh r5, [r3]
- movs r0, 0x1
- bl sub_80A6DAC
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_0810DB98:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DABC
-
- .align 2, 0
diff --git a/asm/fire.s b/asm/fire.s
index e7ca3072b..cd0339b9b 100644
--- a/asm/fire.s
+++ b/asm/fire.s
@@ -347,7 +347,7 @@ sub_810916C: @ 810916C
strh r1, [r0, 0x32]
movs r1, 0x50
strh r1, [r0, 0x36]
- ldr r1, =sub_80A6EEC
+ ldr r1, =StartAnimLinearTranslation
str r1, [r0, 0x1C]
ldr r1, =DestroyAnimSprite
bl StoreSpriteCallbackInData6
@@ -421,7 +421,7 @@ sub_810921C: @ 810921C
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimArgs
ldrh r0, [r0, 0x4]
movs r1, 0
@@ -613,7 +613,7 @@ sub_81093A4: @ 81093A4
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r1, =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x30]
@@ -625,7 +625,7 @@ sub_81093A4: @ 81093A4
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, =sub_81093E4
adds r0, r4, 0
@@ -1564,7 +1564,7 @@ _08109B12:
_08109B18:
adds r0, r5, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r4, =gBattleAnimArgs
ldrb r1, [r4, 0x4]
adds r0, r5, 0
diff --git a/asm/flying.s b/asm/flying.s
index 87ba79c91..b981b4306 100644
--- a/asm/flying.s
+++ b/asm/flying.s
@@ -5,42 +5,6 @@
.text
- thumb_func_start sub_810DE2C
-sub_810DE2C: @ 810DE2C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0xB
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x2E]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x30]
- adds r0, 0x30
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0810DE68
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810DE68:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810DE2C
-
thumb_func_start sub_810DE70
sub_810DE70: @ 810DE70
push {r4,lr}
@@ -199,7 +163,7 @@ sub_810DFA8: @ 810DFA8
push {r4-r6,lr}
adds r6, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -359,7 +323,7 @@ _0810E0FE:
ldrh r3, [r5, 0x36]
adds r0, r3
strh r0, [r5, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r5, 0
@@ -378,7 +342,7 @@ sub_810E13C: @ 810E13C
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r1, =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x2E]
@@ -1613,7 +1577,7 @@ sub_810EAA0: @ 810EAA0
bne _0810EABC
adds r0, r5, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _0810EAC4
.pool
_0810EABC:
@@ -1807,7 +1771,7 @@ sub_810EC34: @ 810EC34
_0810EC46:
adds r0, r4, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0
bl GetAnimBattlerSpriteId
ldr r2, =gSprites
@@ -1927,7 +1891,7 @@ sub_810ED28: @ 810ED28
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r1, =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x2E]
diff --git a/asm/ghost.s b/asm/ghost.s
index 8b16d94c5..5a0991468 100644
--- a/asm/ghost.s
+++ b/asm/ghost.s
@@ -10,7 +10,7 @@ sub_811160C: @ 811160C
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r4, 0x2E]
@@ -2441,7 +2441,7 @@ sub_81129F0: @ 81129F0
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -2525,7 +2525,7 @@ _08112A5E:
bne _08112AC0
movs r0, 0x1E
strh r0, [r3, 0x2E]
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r3, 0x1C]
ldr r1, =sub_8112ACC
adds r0, r3, 0
diff --git a/asm/ground.s b/asm/ground.s
deleted file mode 100644
index c5f3d80b6..000000000
--- a/asm/ground.s
+++ /dev/null
@@ -1,1675 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8114994
-sub_8114994: @ 8114994
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimAttacker
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- movs r0, 0x14
- strh r0, [r4, 0x2E]
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x36]
- ldr r0, =0x0000ffd8
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl sub_80A68D4
- ldr r0, =sub_81149FC
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114994
-
- thumb_func_start sub_81149FC
-sub_81149FC: @ 81149FC
- push {r4,r5,lr}
- adds r5, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _08114A50
- ldrh r0, [r5, 0x24]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x26]
- ldrh r2, [r5, 0x22]
- adds r0, r2
- strh r0, [r5, 0x22]
- strh r1, [r5, 0x26]
- strh r1, [r5, 0x24]
- movs r0, 0x14
- strh r0, [r5, 0x2E]
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- movs r0, 0x28
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl sub_80A68D4
- ldr r0, =sub_8114A60
- str r0, [r5, 0x1C]
-_08114A50:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81149FC
-
- thumb_func_start sub_8114A60
-sub_8114A60: @ 8114A60
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _08114A74
- adds r0, r4, 0
- bl DestroyAnimSprite
-_08114A74:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8114A60
-
- thumb_func_start sub_8114A7C
-sub_8114A7C: @ 8114A7C
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x1
- bl sub_80A6980
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08114A9C
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x4]
- negs r0, r0
- strh r0, [r1, 0x4]
-_08114A9C:
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4, 0x8]
- strh r0, [r6, 0x2E]
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x4]
- adds r0, r1
- strh r0, [r6, 0x32]
- ldrb r0, [r5]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r4, [r4, 0x6]
- adds r0, r4
- strh r0, [r6, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r6, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114A7C
-
- thumb_func_start sub_8114AF0
-sub_8114AF0: @ 8114AF0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord2
- lsls r0, 24
- lsrs r7, r0, 24
- bl Random2
- movs r4, 0x1F
- adds r5, r4, 0
- ands r5, r0
- bl Random2
- ands r4, r0
- adds r1, r5, 0
- cmp r1, 0x10
- ble _08114B38
- movs r0, 0x10
- subs r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
-_08114B38:
- lsls r0, r4, 16
- asrs r1, r0, 16
- cmp r1, 0x10
- ble _08114B48
- movs r0, 0x10
- subs r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
-_08114B48:
- ldr r0, =gBattleAnimArgs
- ldrh r0, [r0, 0x4]
- strh r0, [r6, 0x2E]
- mov r1, r8
- adds r0, r1, r5
- strh r0, [r6, 0x32]
- adds r0, r7, r4
- strh r0, [r6, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r6, 0x1C]
- ldr r1, =move_anim_8074EE0
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114AF0
-
- thumb_func_start sub_8114B80
-sub_8114B80: @ 8114B80
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r2, [r5, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- adds r1, 0x1
- ldr r3, =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r5, 0x4]
- ldr r6, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _08114BF4
- ldr r4, =gBattleAnimAttacker
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r2, [r6, 0x2]
- adds r0, r2
- strh r0, [r5, 0x20]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldrh r3, [r6, 0x4]
- adds r0, r3
- strh r0, [r5, 0x22]
- movs r1, 0x2
- ldrsh r0, [r6, r1]
- movs r2, 0x1
- negs r2, r2
- adds r1, r2, 0
- cmp r0, 0
- ble _08114BDA
- movs r1, 0x1
-_08114BDA:
- strh r1, [r5, 0x2E]
- ldr r0, =sub_8114C10
- b _08114C02
- .pool
-_08114BF4:
- ldrh r0, [r6, 0x2]
- strh r0, [r5, 0x20]
- ldrh r0, [r6, 0x4]
- strh r0, [r5, 0x22]
- negs r0, r0
- strh r0, [r5, 0x26]
- ldr r0, =sub_8114C4C
-_08114C02:
- str r0, [r5, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114B80
-
- thumb_func_start sub_8114C10
-sub_8114C10: @ 8114C10
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _08114C2E
- movs r0, 0
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
-_08114C2E:
- ldrh r0, [r2, 0x22]
- subs r0, 0x4
- strh r0, [r2, 0x22]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x4
- negs r1, r1
- cmp r0, r1
- bge _08114C46
- adds r0, r2, 0
- bl DestroyAnimSprite
-_08114C46:
- pop {r0}
- bx r0
- thumb_func_end sub_8114C10
-
- thumb_func_start sub_8114C4C
-sub_8114C4C: @ 8114C4C
- push {lr}
- adds r3, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- cmp r1, 0
- beq _08114C5E
- cmp r1, 0x1
- beq _08114C74
- b _08114CB6
-_08114C5E:
- ldrh r0, [r3, 0x26]
- adds r0, 0x4
- strh r0, [r3, 0x26]
- lsls r0, 16
- cmp r0, 0
- blt _08114CB6
- strh r1, [r3, 0x26]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- b _08114CB6
-_08114C74:
- ldrh r0, [r3, 0x30]
- adds r0, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- cmp r0, 0
- ble _08114CB6
- movs r0, 0
- strh r0, [r3, 0x30]
- movs r1, 0x3E
- adds r1, r3
- mov r12, r1
- ldrb r2, [r1]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r3, 0x32]
- adds r0, 0x1
- strh r0, [r3, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _08114CB6
- adds r0, r3, 0
- bl DestroyAnimSprite
-_08114CB6:
- pop {r0}
- bx r0
- thumb_func_end sub_8114C4C
-
- thumb_func_start sub_8114CBC
-sub_8114CBC: @ 8114CBC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r1, r0, r1
- ldr r0, =gBattleAnimArgs
- movs r3, 0
- ldrsh r0, [r0, r3]
- cmp r0, 0
- bne _08114CE8
- ldr r0, =sub_8114CFC
- b _08114CEA
- .pool
-_08114CE8:
- ldr r0, =sub_8114EB4
-_08114CEA:
- str r0, [r1]
- ldr r1, [r1]
- adds r0, r2, 0
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114CBC
-
- thumb_func_start sub_8114CFC
-sub_8114CFC: @ 8114CFC
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bls _08114D16
- b _08114EAA
-_08114D16:
- lsls r0, 2
- ldr r1, =_08114D28
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08114D28:
- .4byte _08114D3C
- .4byte _08114DC4
- .4byte _08114DD4
- .4byte _08114E78
- .4byte _08114E8C
-_08114D3C:
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1C]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8364
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1E]
- cmp r0, 0x1
- bne _08114D70
- ldr r0, =gBattle_BG1_X
- ldrh r0, [r0]
- strh r0, [r4, 0x20]
- ldr r0, =gBattle_BG1_Y
- b _08114D78
- .pool
-_08114D70:
- ldr r0, =gBattle_BG2_X
- ldrh r0, [r0]
- strh r0, [r4, 0x20]
- ldr r0, =gBattle_BG2_Y
-_08114D78:
- ldrh r0, [r0]
- strh r0, [r4, 0x22]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerYCoordWithElevation
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- subs r1, 0x20
- strh r1, [r4, 0x24]
- adds r0, 0x20
- strh r0, [r4, 0x26]
- cmp r1, 0
- bge _08114D9A
- movs r0, 0
- strh r0, [r4, 0x24]
-_08114D9A:
- ldr r2, =gSprites
- movs r3, 0x1C
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _08114E7E
- .pool
-_08114DC4:
- ldrb r0, [r4, 0x1E]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- movs r3, 0x26
- ldrsh r2, [r4, r3]
- bl sub_81150E0
- b _08114E7E
-_08114DD4:
- ldrh r0, [r4, 0xC]
- adds r0, 0x6
- movs r1, 0x7F
- ands r0, r1
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _08114DF6
- movs r0, 0
- strh r0, [r4, 0x10]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
-_08114DF6:
- ldr r1, =gSineTable
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 16
- asrs r0, 20
- ldrh r3, [r4, 0xE]
- adds r2, r0, r3
- strh r2, [r4, 0x12]
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _08114E20
- ldr r1, =gBattle_BG1_Y
- b _08114E22
- .pool
-_08114E20:
- ldr r1, =gBattle_BG2_Y
-_08114E22:
- ldrh r0, [r4, 0x22]
- subs r0, r2
- strh r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0x3F
- ble _08114EAA
- ldrh r0, [r4, 0x24]
- movs r1, 0x78
- subs r2, r1, r0
- strh r2, [r4, 0x12]
- movs r3, 0x1E
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- bne _08114E4C
- ldr r1, =gBattle_BG1_Y
- b _08114E4E
- .pool
-_08114E4C:
- ldr r1, =gBattle_BG2_Y
-_08114E4E:
- ldrh r0, [r4, 0x22]
- subs r0, r2
- strh r0, [r1]
- ldr r2, =gSprites
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r2, [r1, 0x20]
- movs r3, 0x88
- lsls r3, 1
- adds r0, r3, 0
- subs r0, r2
- strh r0, [r1, 0x24]
- b _08114E7E
- .pool
-_08114E78:
- ldr r1, =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_08114E7E:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08114EAA
- .pool
-_08114E8C:
- adds r0, r2, 0
- bl DestroyAnimVisualTask
- ldr r2, =gSprites
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_08114EAA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114CFC
-
- thumb_func_start sub_8114EB4
-sub_8114EB4: @ 8114EB4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r3]
- movs r4, 0
- strh r4, [r1, 0x24]
- strh r4, [r1, 0x26]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8364
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08114F00
- ldr r0, =gBattle_BG1_Y
- b _08114F02
- .pool
-_08114F00:
- ldr r0, =gBattle_BG2_Y
-_08114F02:
- strh r4, [r0]
- adds r0, r5, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114EB4
-
- thumb_func_start sub_8114F14
-sub_8114F14: @ 8114F14
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r1, r0, r1
- ldr r0, =gBattleAnimArgs
- movs r3, 0
- ldrsh r0, [r0, r3]
- cmp r0, 0
- bne _08114F40
- ldr r0, =sub_8114F54
- b _08114F42
- .pool
-_08114F40:
- ldr r0, =sub_8114FD8
-_08114F42:
- str r0, [r1]
- ldr r1, [r1]
- adds r0, r2, 0
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8114F14
-
- thumb_func_start sub_8114F54
-sub_8114F54: @ 8114F54
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- beq _08114F78
- cmp r5, 0x1
- beq _08114FCC
- b _08114FD2
- .pool
-_08114F78:
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1C]
- ldr r3, =gSprites
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- strh r5, [r0, 0x24]
- movs r1, 0x1C
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x22]
- movs r0, 0xA0
- subs r0, r2
- strh r0, [r1, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08114FD2
- .pool
-_08114FCC:
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_08114FD2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8114F54
-
- thumb_func_start sub_8114FD8
-sub_8114FD8: @ 8114FD8
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _081150DA
- lsls r0, 2
- ldr r1, =_08115004
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08115004:
- .4byte _08115018
- .4byte _0811506C
- .4byte _0811507A
- .4byte _08115094
- .4byte _081150D4
-_08115018:
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1C]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl sub_80A8364
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1E]
- cmp r0, 0x1
- bne _08115044
- ldr r0, =gBattle_BG1_X
- b _08115046
- .pool
-_08115044:
- ldr r0, =gBattle_BG2_X
-_08115046:
- ldrh r0, [r0]
- strh r0, [r4, 0x20]
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerYCoordWithElevation
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- subs r1, 0x20
- strh r1, [r4, 0x24]
- adds r0, 0x20
- strh r0, [r4, 0x26]
- b _081150C2
- .pool
-_0811506C:
- ldrb r0, [r4, 0x1E]
- movs r1, 0x26
- ldrsh r2, [r4, r1]
- movs r1, 0
- bl sub_81150E0
- b _081150C2
-_0811507A:
- ldr r2, =gSprites
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x60
- strh r1, [r0, 0x26]
- b _081150C2
- .pool
-_08115094:
- ldr r2, =gSprites
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x26]
- subs r1, 0x8
- strh r1, [r0, 0x26]
- movs r0, 0x1C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x26
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _081150DA
- ldr r1, =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_081150C2:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _081150DA
- .pool
-_081150D4:
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_081150DA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8114FD8
-
- thumb_func_start sub_81150E0
-sub_81150E0: @ 81150E0
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r4, r2, 16
- cmp r0, 0x1
- bne _08115104
- ldr r0, =gBattle_BG1_X
- ldrh r3, [r0]
- ldr r0, =0x04000014
- b _0811510A
- .pool
-_08115104:
- ldr r0, =gBattle_BG2_X
- ldrh r3, [r0]
- ldr r0, =0x04000018
-_0811510A:
- str r0, [sp]
- lsls r0, r1, 16
- cmp r0, 0
- bge _08115114
- movs r1, 0
-_08115114:
- lsls r2, r1, 16
- lsls r0, r4, 16
- asrs r4, r0, 16
- cmp r2, r0
- bge _08115140
- ldr r5, =gScanlineEffectRegBuffers
- movs r0, 0xF0
- lsls r0, 3
- adds r6, r5, r0
-_08115126:
- asrs r2, 16
- lsls r1, r2, 1
- adds r0, r1, r5
- strh r3, [r0]
- adds r1, r6
- strh r3, [r1]
- adds r2, 0x1
- lsls r2, 16
- lsrs r1, r2, 16
- lsls r2, r1, 16
- asrs r0, r2, 16
- cmp r0, r4
- blt _08115126
-_08115140:
- lsls r1, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- bgt _0811516E
- ldr r4, =gScanlineEffectRegBuffers
- lsls r0, r3, 16
- asrs r0, 16
- adds r3, r0, 0
- adds r3, 0xF0
- movs r0, 0xF0
- lsls r0, 3
- adds r5, r4, r0
-_08115158:
- asrs r2, r1, 16
- lsls r1, r2, 1
- adds r0, r1, r4
- strh r3, [r0]
- adds r1, r5
- strh r3, [r1]
- adds r2, 0x1
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, 0x9F
- ble _08115158
-_0811516E:
- ldr r0, =0xa2600001
- str r0, [sp, 0x4]
- mov r1, sp
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1, 0x8]
- mov r0, sp
- strb r2, [r0, 0x9]
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81150E0
-
- thumb_func_start sub_81151A0
-sub_81151A0: @ 81151A0
- push {r4-r7,lr}
- adds r5, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r2, 0
- ldrsh r1, [r0, r2]
- adds r7, r0, 0
- cmp r1, 0
- bne _081151BC
- ldr r0, =gBattleAnimAttacker
- b _081151BE
- .pool
-_081151BC:
- ldr r0, =gBattleAnimTarget
-_081151BE:
- ldrb r4, [r0]
- movs r6, 0x18
- adds r1, r7, 0
- movs r2, 0x2
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- bne _081151DA
- negs r0, r6
- lsls r0, 16
- lsrs r6, r0, 16
- movs r2, 0x4
- ldrsh r0, [r1, r2]
- negs r0, r0
- strh r0, [r1, 0x4]
-_081151DA:
- adds r0, r4, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- adds r0, r6
- strh r0, [r5, 0x20]
- adds r0, r4, 0
- bl GetBattlerYCoordWithElevation
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1E
- strh r0, [r5, 0x22]
- ldrh r1, [r7, 0xA]
- strh r1, [r5, 0x2E]
- ldrh r1, [r7, 0x4]
- ldrh r2, [r5, 0x20]
- adds r1, r2
- strh r1, [r5, 0x32]
- ldrh r1, [r7, 0x6]
- adds r0, r1
- strh r0, [r5, 0x36]
- ldrh r0, [r7, 0x8]
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl sub_80A68D4
- ldr r0, =sub_8115228
- str r0, [r5, 0x1C]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81151A0
-
- thumb_func_start sub_8115228
-sub_8115228: @ 8115228
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _0811523C
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0811523C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8115228
-
- thumb_func_start sub_8115244
-sub_8115244: @ 8115244
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08115260
- ldr r0, =gBattleAnimAttacker
- b _08115262
- .pool
-_08115260:
- ldr r0, =gBattleAnimTarget
-_08115262:
- ldrb r5, [r0]
- adds r0, r5, 0
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =0x0000fff0
- adds r0, r2
- ldr r4, =gBattleAnimArgs
- movs r3, 0x2
- ldrsh r1, [r4, r3]
- lsls r1, 5
- adds r0, r1
- strh r0, [r6, 0x20]
- adds r0, r5, 0
- bl GetBattlerYCoordWithElevation
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x20
- strh r0, [r6, 0x22]
- ldrh r2, [r6, 0x4]
- lsls r1, r2, 22
- lsrs r1, 22
- movs r3, 0x2
- ldrsh r0, [r4, r3]
- lsls r0, 3
- adds r1, r0
- ldr r3, =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldr r0, =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r6, 0x4]
- ldr r1, =DestroyAnimSprite
- adds r0, r6, 0
- bl StoreSpriteCallbackInData6
- ldrh r0, [r4, 0x4]
- strh r0, [r6, 0x2E]
- ldr r0, =sub_80A64B0
- str r0, [r6, 0x1C]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8115244
-
- thumb_func_start sub_81152DC
-sub_81152DC: @ 81152DC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- ldr r0, =gBattleAnimArgs
- ldrh r2, [r0, 0x2]
- movs r3, 0x2
- ldrsh r1, [r0, r3]
- adds r6, r0, 0
- cmp r1, 0
- beq _08115308
- adds r0, r2, 0x3
- b _08115314
- .pool
-_08115308:
- ldr r0, =gAnimMovePower
- ldrh r0, [r0]
- movs r1, 0xA
- bl __udivsi3
- adds r0, 0x3
-_08115314:
- strh r0, [r4, 0x26]
- strh r0, [r4, 0x24]
- adds r1, r6, 0
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0xE]
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x4
- beq _08115340
- cmp r0, 0x5
- bne _08115380
- ldr r0, =gBattle_BG3_X
- ldrh r0, [r0]
- strh r0, [r4, 0x22]
- ldr r0, =sub_81153AC
- b _0811539E
- .pool
-_08115340:
- movs r0, 0
- strh r0, [r4, 0x22]
- movs r5, 0
-_08115346:
- lsls r0, r5, 24
- lsrs r0, 24
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- beq _08115370
- movs r3, 0x22
- ldrsh r0, [r4, r3]
- adds r0, 0x9
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x8
- adds r1, r0
- ldr r0, =gBattlerSpriteIds
- adds r0, r5, r0
- ldrb r0, [r0]
- strh r0, [r1]
- ldrh r0, [r4, 0x22]
- adds r0, 0x1
- strh r0, [r4, 0x22]
-_08115370:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _08115346
- b _0811539C
- .pool
-_08115380:
- ldrb r0, [r6]
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x1A]
- cmp r0, 0xFF
- bne _08115398
- adds r0, r5, 0
- bl DestroyAnimVisualTask
- b _081153A0
-_08115398:
- movs r0, 0x1
- strh r0, [r4, 0x22]
-_0811539C:
- ldr r0, =sub_81154A4
-_0811539E:
- str r0, [r4]
-_081153A0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81152DC
-
- thumb_func_start sub_81153AC
-sub_81153AC: @ 81153AC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r3, r0, r1
- movs r0, 0x8
- ldrsh r1, [r3, r0]
- cmp r1, 0x1
- beq _08115430
- cmp r1, 0x1
- bgt _081153D4
- cmp r1, 0
- beq _081153DA
- b _0811549C
- .pool
-_081153D4:
- cmp r1, 0x2
- beq _08115490
- b _0811549C
-_081153DA:
- ldrh r0, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811549C
- strh r1, [r3, 0xA]
- ldrh r1, [r3, 0xC]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08115404
- ldr r1, =gBattle_BG3_X
- ldrh r0, [r3, 0x26]
- ldrh r2, [r3, 0x22]
- adds r0, r2
- strh r0, [r1]
- b _0811540E
- .pool
-_08115404:
- ldr r0, =gBattle_BG3_X
- ldrh r1, [r3, 0x22]
- ldrh r2, [r3, 0x26]
- subs r1, r2
- strh r1, [r0]
-_0811540E:
- ldrh r0, [r3, 0xC]
- adds r0, 0x1
- strh r0, [r3, 0xC]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0xE
- ldrsh r1, [r3, r2]
- cmp r0, r1
- bne _0811549C
- movs r0, 0
- strh r0, [r3, 0xC]
- ldrh r0, [r3, 0x24]
- subs r0, 0x1
- strh r0, [r3, 0x24]
- b _08115484
- .pool
-_08115430:
- ldrh r0, [r3, 0xA]
- adds r0, 0x1
- strh r0, [r3, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811549C
- movs r0, 0
- strh r0, [r3, 0xA]
- ldrh r0, [r3, 0xC]
- ands r1, r0
- cmp r1, 0
- bne _0811545C
- ldr r1, =gBattle_BG3_X
- ldrh r0, [r3, 0x24]
- ldrh r2, [r3, 0x22]
- adds r0, r2
- strh r0, [r1]
- b _08115466
- .pool
-_0811545C:
- ldr r0, =gBattle_BG3_X
- ldrh r1, [r3, 0x22]
- ldrh r2, [r3, 0x24]
- subs r1, r2
- strh r1, [r0]
-_08115466:
- ldrh r0, [r3, 0xC]
- adds r0, 0x1
- strh r0, [r3, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _0811549C
- movs r0, 0
- strh r0, [r3, 0xC]
- ldrh r0, [r3, 0x24]
- subs r0, 0x1
- strh r0, [r3, 0x24]
- lsls r0, 16
- cmp r0, 0
- bne _0811549C
-_08115484:
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
- b _0811549C
- .pool
-_08115490:
- ldr r1, =gBattle_BG3_X
- ldrh r0, [r3, 0x22]
- strh r0, [r1]
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_0811549C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81153AC
-
- thumb_func_start sub_81154A4
-sub_81154A4: @ 81154A4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0x1
- beq _08115504
- cmp r5, 0x1
- bgt _081154CC
- cmp r5, 0
- beq _081154D2
- b _0811557E
- .pool
-_081154CC:
- cmp r5, 0x2
- beq _08115540
- b _0811557E
-_081154D2:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811557E
- strh r5, [r4, 0xA]
- adds r0, r4, 0
- bl sub_8115588
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0xE
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _0811557E
- strh r5, [r4, 0xC]
- ldrh r0, [r4, 0x24]
- subs r0, 0x1
- strh r0, [r4, 0x24]
- b _08115538
-_08115504:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _0811557E
- strh r5, [r4, 0xA]
- adds r0, r4, 0
- bl sub_8115588
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _0811557E
- strh r5, [r4, 0xC]
- ldrh r0, [r4, 0x24]
- subs r0, 0x1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bne _0811557E
-_08115538:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0811557E
-_08115540:
- movs r2, 0
- movs r7, 0x22
- ldrsh r0, [r4, r7]
- cmp r2, r0
- bge _08115578
- ldr r0, =gSprites
- mov r12, r0
- adds r5, r4, 0
- adds r5, 0x8
- movs r6, 0
-_08115554:
- adds r0, r2, 0
- adds r0, 0x9
- lsls r0, 1
- adds r0, r5, r0
- movs r7, 0
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r12
- strh r6, [r0, 0x24]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r2, r0
- blt _08115554
-_08115578:
- adds r0, r3, 0
- bl DestroyAnimVisualTask
-_0811557E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81154A4
-
- thumb_func_start sub_8115588
-sub_8115588: @ 8115588
- push {r4-r7,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0xC]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _081155B0
- movs r0, 0x24
- ldrsh r1, [r3, r0]
- lsrs r0, r1, 31
- adds r1, r0
- asrs r1, 1
- ldrh r2, [r3, 0x24]
- adds r0, r4, 0
- ands r0, r2
- adds r1, r0
- lsls r1, 16
- lsrs r4, r1, 16
- b _081155C0
-_081155B0:
- movs r1, 0x24
- ldrsh r0, [r3, r1]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- negs r0, r0
- lsls r0, 16
- lsrs r4, r0, 16
-_081155C0:
- movs r2, 0
- movs r7, 0x22
- ldrsh r0, [r3, r7]
- cmp r2, r0
- bge _081155F4
- ldr r6, =gSprites
- adds r5, r3, 0
- adds r5, 0x8
-_081155D0:
- adds r0, r2, 0
- adds r0, 0x9
- lsls r0, 1
- adds r0, r5, r0
- movs r7, 0
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r4, [r0, 0x24]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0x22
- ldrsh r0, [r3, r1]
- cmp r2, r0
- blt _081155D0
-_081155F4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8115588
-
- thumb_func_start AnimTask_IsPowerOver99
-AnimTask_IsPowerOver99: @ 8115600
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r3, =gBattleAnimArgs
- movs r2, 0
- ldr r0, =gAnimMovePower
- ldrh r0, [r0]
- cmp r0, 0x63
- bls _08115614
- movs r2, 0x1
-_08115614:
- strh r2, [r3, 0x1E]
- adds r0, r1, 0
- bl DestroyAnimVisualTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end AnimTask_IsPowerOver99
-
- thumb_func_start sub_8115628
-sub_8115628: @ 8115628
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, =gBattleAnimArgs
- ldrh r1, [r2]
- movs r0, 0x1
- ands r0, r1
- adds r6, r2, 0
- cmp r0, 0
- beq _08115648
- ldr r0, =gBattleAnimTarget
- b _0811564A
- .pool
-_08115648:
- ldr r0, =gBattleAnimAttacker
-_0811564A:
- ldrb r0, [r0]
- adds r5, r0, 0
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0x1
- ble _0811565A
- movs r0, 0x2
- eors r5, r0
-_0811565A:
- ldr r0, =sub_81156D0
- ldrb r1, [r6, 0x2]
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks
- adds r4, r0
- adds r0, r5, 0
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x20
- subs r1, r0
- ldr r2, =0x000001ff
- adds r0, r2, 0
- ands r1, r0
- strh r1, [r4, 0xA]
- adds r0, r5, 0
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x40
- subs r1, r0
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r4, 0xC]
- ldr r2, =gBattle_BG3_X
- ldrh r0, [r4, 0xA]
- strh r0, [r2]
- ldr r0, =gBattle_BG3_Y
- strh r1, [r0]
- ldrh r0, [r6, 0x4]
- strh r0, [r4, 0xE]
- adds r0, r7, 0
- bl DestroyAnimVisualTask
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8115628
-
- thumb_func_start sub_81156D0
-sub_81156D0: @ 81156D0
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, =gTasks
- adds r2, r0, r1
- ldr r0, =gBattleAnimArgs
- movs r4, 0xE
- ldrsh r1, [r0, r4]
- movs r4, 0xE
- ldrsh r0, [r2, r4]
- cmp r1, r0
- bne _08115710
- ldr r0, =gBattle_BG3_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG3_Y
- strh r1, [r0]
- adds r0, r3, 0
- bl DestroyTask
- b _0811571C
- .pool
-_08115710:
- ldr r1, =gBattle_BG3_X
- ldrh r0, [r2, 0xA]
- strh r0, [r1]
- ldr r1, =gBattle_BG3_Y
- ldrh r0, [r2, 0xC]
- strh r0, [r1]
-_0811571C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81156D0
-
- .align 2, 0
diff --git a/asm/ice.s b/asm/ice.s
index bc55ba804..37142e535 100644
--- a/asm/ice.s
+++ b/asm/ice.s
@@ -370,7 +370,7 @@ sub_810B8EC: @ 810B8EC
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x2
@@ -413,7 +413,7 @@ _0810B936:
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
@@ -513,7 +513,7 @@ sub_810BA24: @ 810BA24
sub sp, 0x10
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r6, =gBattleAnimArgs
ldrh r0, [r6, 0x8]
strh r0, [r5, 0x2E]
@@ -814,7 +814,7 @@ sub_810BC94: @ 810BC94
sub sp, 0x10
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r1, =gBattleAnimArgs
ldrh r0, [r1, 0x8]
strh r0, [r5, 0x2E]
@@ -1103,7 +1103,7 @@ sub_810BED0: @ 810BED0
bne _0810BEF4
adds r0, r5, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _0810BF32
.pool
_0810BEF4:
@@ -2762,7 +2762,7 @@ _0810CCA6:
bl StartSpriteAffineAnim
adds r0, r5, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r6, =gBattleAnimArgs
ldrh r0, [r6, 0x8]
strh r0, [r5, 0x2E]
@@ -2796,7 +2796,7 @@ _0810CCCE:
ldrh r0, [r6, 0xA]
strh r0, [r5, 0x38]
adds r0, r5, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_810CD1C
str r0, [r5, 0x1C]
pop {r4-r6}
diff --git a/asm/normal.s b/asm/normal.s
index b52477221..3ee1308c9 100644
--- a/asm/normal.s
+++ b/asm/normal.s
@@ -1584,7 +1584,7 @@ sub_8116388: @ 8116388
bne _081163AC
adds r0, r5, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _081163B4
.pool
_081163AC:
@@ -1616,7 +1616,7 @@ sub_81163D0: @ 81163D0
bne _081163F4
adds r0, r5, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _081163FC
.pool
_081163F4:
@@ -1690,7 +1690,7 @@ _08116474:
bne _08116494
adds r0, r4, 0
movs r1, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _0811649C
.pool
_08116494:
@@ -1789,7 +1789,7 @@ sub_8116560: @ 8116560
bne _0811657C
adds r0, r4, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _08116584
.pool
_0811657C:
@@ -1803,7 +1803,7 @@ _08116584:
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
- ldr r0, =sub_80A64B0
+ ldr r0, =WaitAnimForDuration
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
@@ -1824,7 +1824,7 @@ sub_81165A8: @ 81165A8
bne _081165CC
adds r0, r5, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _081165D4
.pool
_081165CC:
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 231cb72d7..bbb36b109 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -1219,7 +1219,7 @@ sub_81B0A9C: @ 81B0A9C
muls r0, r5
ldr r1, =gPlayerParty
adds r0, r1
- ldr r6, =gUnknown_0203CEF8
+ ldr r6, =gSelectedOrderFromParty
bl sub_81B85AC
lsls r0, 24
cmp r0, 0
@@ -9304,7 +9304,7 @@ sub_81B4E8C: @ 81B4E8C
adds r0, r1
mov r8, r0
_081B4EC6:
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
adds r4, r5, r0
ldrb r0, [r4]
cmp r0, 0
@@ -9418,7 +9418,7 @@ sub_81B4FA8: @ 81B4FA8
movs r4, 0
cmp r4, r5
bcs _081B502A
- ldr r6, =gUnknown_0203CEF8
+ ldr r6, =gSelectedOrderFromParty
subs r2, r5, 0x1
adds r7, r6, 0
ldr r3, =gUnknown_0203CEC8
@@ -9476,7 +9476,7 @@ _081B502A:
cmp r4, r5
bge _081B5078
_081B504E:
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
adds r1, r4, r0
ldrb r0, [r1]
cmp r0, 0
@@ -15518,7 +15518,7 @@ sub_81B8518: @ 81B8518
thumb_func_start sub_81B8558
sub_81B8558: @ 81B8558
push {lr}
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
movs r1, 0
movs r2, 0x4
bl memset
@@ -15655,7 +15655,7 @@ sub_81B865C: @ 81B865C
lsls r0, 24
lsrs r2, r0, 24
adds r1, r2, 0
- ldr r3, =gUnknown_0203CEF8
+ ldr r3, =gSelectedOrderFromParty
adds r0, r2, r3
subs r0, 0x1
ldrb r0, [r0]
@@ -15700,7 +15700,7 @@ _081B86C0:
movs r5, 0
b _081B8750
_081B86CE:
- ldr r3, =gUnknown_0203CEF8
+ ldr r3, =gSelectedOrderFromParty
adds r4, r3, r5
ldrb r0, [r4]
movs r1, 0x64
@@ -15731,7 +15731,7 @@ _081B86CE:
bcs _081B8748
movs r7, 0x64
_081B870E:
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
adds r5, r0, r4
ldrb r0, [r5]
muls r0, r7
@@ -15787,7 +15787,7 @@ sub_81B8770: @ 81B8770
lsls r0, 24
lsrs r2, r0, 24
movs r1, 0
- ldr r3, =gUnknown_0203CEF8
+ ldr r3, =gSelectedOrderFromParty
_081B877A:
adds r0, r1, r3
ldrb r0, [r0]
diff --git a/asm/poison.s b/asm/poison.s
deleted file mode 100644
index 22f6c3971..000000000
--- a/asm/poison.s
+++ /dev/null
@@ -1,306 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_810DBAC
-sub_810DBAC: @ 810DBAC
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0810DBC2
- adds r0, r5, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_0810DBC2:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x2E]
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x32]
- ldrb r0, [r4]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x36]
- ldr r0, =0x0000ffe2
- strh r0, [r5, 0x38]
- adds r0, r5, 0
- bl sub_80A68D4
- ldr r0, =sub_810DC10
- str r0, [r5, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DBAC
-
- thumb_func_start sub_810DC10
-sub_810DC10: @ 810DC10
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _0810DC24
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810DC24:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810DC10
-
- thumb_func_start sub_810DC2C
-sub_810DC2C: @ 810DC2C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0810DC44
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
-_0810DC44:
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_80A69CC
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- mov r6, sp
- adds r6, 0x2
- movs r1, 0x1
- mov r2, sp
- adds r3, r6, 0
- bl SetAverageBattlerPositions
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810DC72
- ldrh r0, [r5, 0x8]
- negs r0, r0
- strh r0, [r5, 0x8]
-_0810DC72:
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2E]
- mov r1, sp
- ldrh r0, [r5, 0x8]
- ldrh r1, [r1]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r0, [r5, 0xA]
- ldrh r6, [r6]
- adds r0, r6
- strh r0, [r4, 0x36]
- ldr r0, =0x0000ffe2
- strh r0, [r4, 0x38]
- adds r0, r4, 0
- bl sub_80A68D4
- ldr r0, =sub_810DCB4
- str r0, [r4, 0x1C]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DC2C
-
- thumb_func_start sub_810DCB4
-sub_810DCB4: @ 810DCB4
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _0810DCC8
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810DCC8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810DCB4
-
- thumb_func_start sub_810DCD0
-sub_810DCD0: @ 810DCD0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- ldrh r0, [r5, 0x4]
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x30]
- ldrh r1, [r5]
- adds r0, r1
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x22]
- strh r0, [r4, 0x34]
- ldrh r1, [r5, 0x2]
- adds r0, r1
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- bl sub_80A6E14
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r4, 0x38]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r4, 0x3A]
- ldr r0, =sub_810DD24
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DCD0
-
- thumb_func_start sub_810DD24
-sub_810DD24: @ 810DD24
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80A656C
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x38]
- subs r0, r1
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x32]
- ldrh r1, [r4, 0x3A]
- subs r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0810DD4A
- adds r0, r4, 0
- bl DestroyAnimSprite
-_0810DD4A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_810DD24
-
- thumb_func_start sub_810DD50
-sub_810DD50: @ 810DD50
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810DD7C
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
-_0810DD7C:
- ldr r0, =gBattleAnimArgs
- ldrh r2, [r0]
- ldrh r1, [r4, 0x20]
- adds r2, r1
- strh r2, [r4, 0x20]
- ldrh r1, [r0, 0x2]
- ldrh r3, [r4, 0x22]
- adds r1, r3
- strh r1, [r4, 0x22]
- ldrh r3, [r0, 0x8]
- strh r3, [r4, 0x2E]
- ldrh r0, [r0, 0x4]
- adds r2, r0
- strh r2, [r4, 0x32]
- adds r1, r3
- strh r1, [r4, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DD50
-
- thumb_func_start sub_810DDC4
-sub_810DDC4: @ 810DDC4
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- movs r1, 0x4
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0810DDE0
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_80A6980
- b _0810DE16
- .pool
-_0810DDE0:
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- movs r1, 0x1
- bl SetAverageBattlerPositions
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0810DE06
- ldrh r0, [r5]
- negs r0, r0
- strh r0, [r5]
-_0810DE06:
- ldrh r0, [r5]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x2]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x22]
-_0810DE16:
- ldr r0, =sub_810DE2C
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_810DDC4
-
- .align 2, 0
diff --git a/asm/psychic.s b/asm/psychic.s
index 8cd95d95a..ef1915241 100644
--- a/asm/psychic.s
+++ b/asm/psychic.s
@@ -514,7 +514,7 @@ _0810F5EE:
bne _0810F608
adds r0, r4, 0
adds r1, r6, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
b _0810F610
.pool
_0810F608:
@@ -1449,7 +1449,7 @@ _0810FD60:
ldrh r0, [r5, 0x1C]
strh r0, [r4, 0x38]
adds r0, r4, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldrb r0, [r5, 0xC]
movs r1, 0x3
ands r1, r0
diff --git a/asm/rock.s b/asm/rock.s
deleted file mode 100644
index ed8147600..000000000
--- a/asm/rock.s
+++ /dev/null
@@ -1,1469 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81109F0
-sub_81109F0: @ 81109F0
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, =gBattleAnimArgs
- movs r1, 0x6
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _08110A10
- ldr r0, =gBattleAnimTarget
- ldrb r0, [r0]
- adds r2, r5, 0
- adds r2, 0x20
- adds r3, r5, 0
- adds r3, 0x22
- movs r1, 0
- bl SetAverageBattlerPositions
-_08110A10:
- ldrh r0, [r6]
- ldrh r1, [r5, 0x20]
- adds r0, r1
- movs r4, 0
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x22]
- adds r0, 0xE
- strh r0, [r5, 0x22]
- ldrb r1, [r6, 0x2]
- adds r0, r5, 0
- bl StartSpriteAnim
- adds r0, r5, 0
- bl AnimateSprite
- strh r4, [r5, 0x2E]
- strh r4, [r5, 0x30]
- movs r0, 0x4
- strh r0, [r5, 0x32]
- movs r0, 0x10
- strh r0, [r5, 0x34]
- ldr r0, =0x0000ffba
- strh r0, [r5, 0x36]
- ldrh r0, [r6, 0x4]
- strh r0, [r5, 0x38]
- ldr r1, =sub_8110A70
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- ldr r1, =sub_80A6450
- str r1, [r5, 0x1C]
- adds r0, r5, 0
- bl _call_via_r1
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81109F0
-
- thumb_func_start sub_8110A70
-sub_8110A70: @ 8110A70
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x38]
- ldrh r2, [r4, 0x20]
- adds r0, r1, r2
- strh r0, [r4, 0x20]
- movs r0, 0xC0
- strh r0, [r4, 0x2E]
- strh r1, [r4, 0x30]
- movs r0, 0x4
- strh r0, [r4, 0x32]
- movs r0, 0x20
- strh r0, [r4, 0x34]
- ldr r0, =0x0000ffe8
- strh r0, [r4, 0x36]
- ldr r1, =move_anim_8074EE0
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- ldr r1, =sub_80A6450
- str r1, [r4, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110A70
-
- thumb_func_start sub_8110AB4
-sub_8110AB4: @ 8110AB4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =gBattleAnimArgs
- ldrb r1, [r4, 0xA]
- bl StartSpriteAnim
- adds r0, r5, 0
- bl AnimateSprite
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08110AE4
- ldrh r0, [r5, 0x20]
- ldrh r1, [r4]
- subs r0, r1
- b _08110AEA
- .pool
-_08110AE4:
- ldrh r0, [r4]
- ldrh r1, [r5, 0x20]
- adds r0, r1
-_08110AEA:
- strh r0, [r5, 0x20]
- ldr r3, =gBattleAnimArgs
- ldrh r2, [r3, 0x2]
- ldrh r0, [r5, 0x22]
- adds r2, r0
- movs r4, 0
- strh r2, [r5, 0x22]
- ldrh r0, [r3, 0x8]
- strh r0, [r5, 0x2E]
- ldrh r0, [r5, 0x20]
- strh r0, [r5, 0x30]
- ldrh r1, [r3, 0x4]
- adds r0, r1
- strh r0, [r5, 0x32]
- strh r2, [r5, 0x34]
- ldrh r0, [r3, 0x6]
- adds r2, r0
- strh r2, [r5, 0x36]
- adds r0, r5, 0
- bl sub_80A6E14
- strh r4, [r5, 0x34]
- strh r4, [r5, 0x36]
- ldr r0, =sub_80A656C
- str r0, [r5, 0x1C]
- ldr r1, =move_anim_8074EE0
- adds r0, r5, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110AB4
-
- thumb_func_start sub_8110B38
-sub_8110B38: @ 8110B38
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimArgs
- movs r1, 0xC
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08110B54
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A69CC
- b _08110B5C
- .pool
-_08110B54:
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A6980
-_08110B5C:
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1, 0x6]
- strh r0, [r4, 0x2E]
- ldrh r0, [r1, 0x4]
- strh r0, [r4, 0x30]
- ldrh r0, [r1, 0x8]
- strh r0, [r4, 0x32]
- ldrh r0, [r1, 0xA]
- strh r0, [r4, 0x34]
- ldr r0, =sub_8110B80
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110B38
-
- thumb_func_start sub_8110B80
-sub_8110B80: @ 8110B80
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x36]
- adds r0, r1
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x26]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- movs r2, 0x34
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x32]
- ldrh r1, [r4, 0x38]
- adds r0, r1
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x2E]
- subs r0, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _08110BC6
- adds r0, r4, 0
- bl DestroyAnimSprite
-_08110BC6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8110B80
-
- thumb_func_start AnimTask_LoadSandstormBackground
-AnimTask_LoadSandstormBackground: @ 8110BCC
- push {r4-r6,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- ldr r1, =0x00003f42
- movs r0, 0x50
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 5
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x4
- movs r2, 0x1
- bl SetAnimBgAttribute
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl SetAnimBgAttribute
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _08110C10
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0x1
- bl SetAnimBgAttribute
-_08110C10:
- ldr r0, =gBattle_BG1_X
- strh r5, [r0]
- ldr r4, =gBattle_BG1_Y
- strh r5, [r4]
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- ldrh r1, [r4]
- movs r0, 0x16
- bl SetGpuReg
- mov r0, sp
- bl sub_80A6B30
- mov r0, sp
- ldrb r0, [r0, 0x9]
- ldr r1, =gUnknown_08D8D58C
- mov r2, sp
- ldrh r2, [r2, 0xA]
- bl sub_80A6CC0
- ldr r1, =gUnknown_08D8D410
- mov r0, sp
- movs r2, 0
- bl sub_80A6D60
- ldr r0, =gBattleAnimSpritePalette_261
- mov r1, sp
- ldrb r1, [r1, 0x8]
- lsls r1, 4
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _08110C6E
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08110C6E
- movs r5, 0x1
-_08110C6E:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- strh r5, [r1, 0x8]
- ldr r0, =sub_8110CB0
- str r0, [r1]
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AnimTask_LoadSandstormBackground
-
- thumb_func_start sub_8110CB0
-sub_8110CB0: @ 8110CB0
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r2, r1, 0
- cmp r0, 0
- bne _08110CE4
- ldr r1, =gBattle_BG1_X
- ldr r3, =0x0000fffa
- adds r0, r3, 0
- ldrh r3, [r1]
- adds r0, r3
- b _08110CEA
- .pool
-_08110CE4:
- ldr r1, =gBattle_BG1_X
- ldrh r0, [r1]
- adds r0, 0x6
-_08110CEA:
- strh r0, [r1]
- ldr r1, =gBattle_BG1_Y
- ldr r3, =0x0000ffff
- adds r0, r3, 0
- ldrh r3, [r1]
- adds r0, r3
- strh r0, [r1]
- lsls r1, r5, 2
- adds r0, r1, r5
- lsls r0, 3
- adds r0, r2
- movs r3, 0x20
- ldrsh r0, [r0, r3]
- adds r4, r1, 0
- cmp r0, 0x4
- bls _08110D0C
- b _08110E3A
-_08110D0C:
- lsls r0, 2
- ldr r1, =_08110D28
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08110D28:
- .4byte _08110D3C
- .4byte _08110D7E
- .4byte _08110D98
- .4byte _08110DDA
- .4byte _08110DFC
-_08110D3C:
- adds r0, r4, r5
- lsls r0, 3
- adds r4, r0, r2
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _08110E3A
- strh r5, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- adds r1, 0x1
- strh r1, [r4, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bne _08110E3A
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r5, [r4, 0x1E]
- b _08110E3A
-_08110D7E:
- adds r0, r4, r5
- lsls r0, 3
- adds r1, r0, r2
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- strh r0, [r1, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x65
- bne _08110E3A
- movs r0, 0x7
- strh r0, [r1, 0x1E]
- b _08110DF0
-_08110D98:
- adds r0, r4, r5
- lsls r0, 3
- adds r4, r0, r2
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _08110E3A
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- subs r1, 0x1
- strh r1, [r4, 0x1E]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 8
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- movs r2, 0x1E
- ldrsh r1, [r4, r2]
- cmp r1, 0
- bne _08110E3A
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x1E]
- b _08110E3A
-_08110DDA:
- mov r0, sp
- bl sub_80A6B30
- mov r0, sp
- ldrb r0, [r0, 0x9]
- bl sub_80A6C68
- ldr r0, =gTasks
- adds r1, r4, r5
- lsls r1, 3
- adds r1, r0
-_08110DF0:
- ldrh r0, [r1, 0x20]
- adds r0, 0x1
- strh r0, [r1, 0x20]
- b _08110E3A
- .pool
-_08110DFC:
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- bne _08110E10
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl SetAnimBgAttribute
-_08110E10:
- ldr r0, =gBattle_BG1_X
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gBattle_BG1_Y
- strh r1, [r0]
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1
- movs r1, 0x4
- movs r2, 0x1
- bl SetAnimBgAttribute
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_08110E3A:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110CB0
-
- thumb_func_start sub_8110E4C
-sub_8110E4C: @ 8110E4C
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08110EC8
- ldr r4, =gBattleAnimArgs
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08110E98
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08110E98
- movs r0, 0x98
- lsls r0, 1
- strh r0, [r5, 0x20]
- ldrh r0, [r4, 0x2]
- negs r0, r0
- strh r0, [r4, 0x2]
- movs r0, 0x1
- strh r0, [r5, 0x38]
- ldrb r1, [r5, 0x3]
- subs r0, 0x40
- ands r0, r1
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r5, 0x3]
- b _08110E9C
- .pool
-_08110E98:
- ldr r0, =0x0000ffc0
- strh r0, [r5, 0x20]
-_08110E9C:
- ldr r4, =gBattleAnimArgs
- ldrh r0, [r4]
- strh r0, [r5, 0x22]
- ldr r1, =gUnknown_08596BC0
- adds r0, r5, 0
- bl SetSubspriteTables
- ldrh r0, [r4, 0x2]
- strh r0, [r5, 0x30]
- ldrh r0, [r4, 0x4]
- strh r0, [r5, 0x32]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- b _08110F24
- .pool
-_08110EC8:
- ldrh r1, [r5, 0x30]
- ldrh r3, [r5, 0x34]
- adds r1, r3
- ldrh r2, [r5, 0x32]
- ldrh r0, [r5, 0x36]
- adds r2, r0
- lsls r0, r1, 16
- asrs r0, 24
- ldrh r3, [r5, 0x24]
- adds r0, r3
- strh r0, [r5, 0x24]
- lsls r0, r2, 16
- asrs r0, 24
- ldrh r3, [r5, 0x26]
- adds r0, r3
- strh r0, [r5, 0x26]
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r5, 0x34]
- ands r2, r0
- strh r2, [r5, 0x36]
- movs r1, 0x38
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08110F0E
- movs r2, 0x20
- ldrsh r0, [r5, r2]
- movs r3, 0x24
- ldrsh r1, [r5, r3]
- adds r0, r1
- movs r1, 0x88
- lsls r1, 1
- cmp r0, r1
- ble _08110F24
- b _08110F20
-_08110F0E:
- movs r1, 0x20
- ldrsh r0, [r5, r1]
- movs r2, 0x24
- ldrsh r1, [r5, r2]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- bge _08110F24
-_08110F20:
- ldr r0, =DestroyAnimSprite
- str r0, [r5, 0x1C]
-_08110F24:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110E4C
-
- thumb_func_start sub_8110F30
-sub_8110F30: @ 8110F30
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- ldrb r1, [r5, 0x8]
- bl StartSpriteAnim
- adds r0, r4, 0
- movs r1, 0
- bl sub_80A69CC
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x32]
- ldrh r0, [r5, 0x4]
- ldrh r1, [r4, 0x22]
- adds r0, r1
- strh r0, [r4, 0x36]
- ldr r0, =sub_80A6EEC
- str r0, [r4, 0x1C]
- ldr r1, =DestroyAnimSprite
- adds r0, r4, 0
- bl StoreSpriteCallbackInData6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110F30
-
- thumb_func_start sub_8110F74
-sub_8110F74: @ 8110F74
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r6, r1, r0
- ldr r5, =gBattleAnimAttacker
- ldrb r0, [r5]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldrb r0, [r5]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 8
- movs r1, 0xC0
- lsls r1, 13
- adds r0, r1
- lsrs r7, r0, 16
- ldr r4, =gBattleAnimTarget
- ldrb r0, [r4]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldrb r0, [r4]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 8
- movs r2, 0xC0
- lsls r2, 13
- adds r0, r2
- lsrs r0, 16
- mov r8, r0
- ldrb r1, [r5]
- movs r0, 0x2
- eors r0, r1
- ldrb r4, [r4]
- cmp r0, r4
- bne _08110FE4
- mov r8, r7
-_08110FE4:
- bl sub_811135C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bne _08111000
- movs r0, 0x20
- b _08111006
- .pool
-_08111000:
- lsls r1, r5, 3
- movs r0, 0x30
- subs r0, r1
-_08111006:
- strh r0, [r6, 0x18]
- movs r4, 0
- strh r4, [r6, 0x8]
- strh r4, [r6, 0x1E]
- strh r4, [r6, 0x1A]
- movs r0, 0x1
- strh r0, [r6, 0x20]
- movs r1, 0x18
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bge _0811101E
- adds r0, 0x7
-_0811101E:
- asrs r0, 3
- subs r0, 0x1
- strh r0, [r6, 0x1C]
- mov r2, r9
- lsls r0, r2, 3
- strh r0, [r6, 0xC]
- lsls r0, r7, 3
- strh r0, [r6, 0xE]
- mov r1, r10
- subs r0, r1, r2
- lsls r0, 3
- movs r2, 0x18
- ldrsh r1, [r6, r2]
- bl __divsi3
- strh r0, [r6, 0x10]
- mov r1, r8
- subs r0, r1, r7
- lsls r0, 3
- movs r2, 0x18
- ldrsh r1, [r6, r2]
- bl __divsi3
- strh r0, [r6, 0x12]
- strh r4, [r6, 0x14]
- strh r4, [r6, 0x16]
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- asrs r4, 8
- lsrs r4, 16
- movs r0, 0x3F
- bl BattleAnimAdjustPanning
- lsls r0, 24
- strh r4, [r6, 0x22]
- asrs r0, 24
- lsls r4, 16
- asrs r4, 16
- subs r0, r4
- movs r2, 0x18
- ldrsh r1, [r6, r2]
- bl __divsi3
- strh r0, [r6, 0x24]
- strh r5, [r6, 0xA]
- movs r0, 0
- bl GetAnimBattlerSpriteId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x26]
- ldr r0, =sub_81110A4
- str r0, [r6]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8110F74
-
- thumb_func_start sub_81110A4
-sub_81110A4: @ 81110A4
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bls _081110BE
- b _0811120C
-_081110BE:
- lsls r0, 2
- ldr r1, =_081110D0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081110D0:
- .4byte _081110E4
- .4byte _08111148
- .4byte _08111150
- .4byte _081111AC
- .4byte _081111FE
-_081110E4:
- ldrh r2, [r4, 0x14]
- ldrh r0, [r4, 0x10]
- subs r2, r0
- strh r2, [r4, 0x14]
- ldrh r0, [r4, 0x16]
- ldrh r1, [r4, 0x12]
- subs r0, r1
- strh r0, [r4, 0x16]
- ldr r3, =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- lsls r2, 16
- asrs r2, 19
- strh r2, [r0, 0x24]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrh r0, [r4, 0x16]
- lsls r0, 16
- asrs r0, 19
- strh r0, [r1, 0x26]
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _08111134
- movs r0, 0x14
- strh r0, [r4, 0x1E]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08111134:
- ldrh r1, [r4, 0x22]
- lsls r1, 24
- asrs r1, 24
- movs r0, 0xA2
- bl PlaySE12WithPanning
- b _0811120C
- .pool
-_08111148:
- ldrh r0, [r4, 0x1E]
- subs r0, 0x1
- strh r0, [r4, 0x1E]
- b _081111F0
-_08111150:
- ldrh r0, [r4, 0x1A]
- subs r0, 0x1
- strh r0, [r4, 0x1A]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- beq _08111170
- ldrh r0, [r4, 0x10]
- ldrh r2, [r4, 0x14]
- adds r0, r2
- strh r0, [r4, 0x14]
- ldrh r0, [r4, 0x12]
- ldrh r1, [r4, 0x16]
- adds r0, r1
- strh r0, [r4, 0x16]
- b _0811117A
-_08111170:
- strh r0, [r4, 0x14]
- strh r0, [r4, 0x16]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811117A:
- ldr r2, =gSprites
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r4, 0x14]
- lsls r0, 16
- asrs r0, 19
- strh r0, [r1, 0x24]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r4, 0x16]
- lsls r0, 16
- asrs r0, 19
- strh r0, [r1, 0x26]
- b _0811120C
- .pool
-_081111AC:
- ldrh r0, [r4, 0x10]
- ldrh r2, [r4, 0xC]
- adds r0, r2
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x12]
- ldrh r1, [r4, 0xE]
- adds r0, r1
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0x1A]
- adds r0, 0x1
- strh r0, [r4, 0x1A]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x1C
- ldrsh r1, [r4, r2]
- cmp r0, r1
- blt _081111EA
- movs r0, 0
- strh r0, [r4, 0x1A]
- adds r0, r4, 0
- bl sub_8111214
- ldrh r1, [r4, 0x24]
- ldrh r0, [r4, 0x22]
- adds r1, r0
- strh r1, [r4, 0x22]
- lsls r1, 24
- asrs r1, 24
- movs r0, 0xAF
- bl PlaySE12WithPanning
-_081111EA:
- ldrh r0, [r4, 0x18]
- subs r0, 0x1
- strh r0, [r4, 0x18]
-_081111F0:
- lsls r0, 16
- cmp r0, 0
- bne _0811120C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0811120C
-_081111FE:
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0811120C
- adds r0, r2, 0
- bl DestroyAnimVisualTask
-_0811120C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81110A4
-
- thumb_func_start sub_8111214
-sub_8111214: @ 8111214
- push {r4-r7,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bhi _08111304
- lsls r0, 2
- ldr r1, =_08111234
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08111234:
- .4byte _08111248
- .4byte _08111254
- .4byte _08111254
- .4byte _08111260
- .4byte _0811126C
-_08111248:
- ldr r3, =gUnknown_08596C28
- movs r5, 0
- b _08111270
- .pool
-_08111254:
- ldr r3, =gUnknown_08596C40
- movs r5, 0x50
- b _08111270
- .pool
-_08111260:
- ldr r3, =gUnknown_08596C40
- movs r5, 0x40
- b _08111270
- .pool
-_0811126C:
- ldr r3, =gUnknown_08596C40
- movs r5, 0x30
-_08111270:
- ldrh r1, [r4, 0xC]
- lsls r1, 16
- asrs r1, 19
- lsls r1, 16
- lsrs r1, 16
- ldrh r2, [r4, 0xE]
- lsls r2, 16
- asrs r2, 19
- lsls r2, 16
- movs r6, 0x20
- ldrsh r0, [r4, r6]
- lsls r0, 2
- adds r1, r0
- lsls r1, 16
- lsrs r6, r1, 16
- asrs r1, 16
- lsrs r7, r2, 16
- asrs r2, 16
- adds r0, r3, 0
- movs r3, 0x23
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _081112FC
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x12
- strh r1, [r0, 0x2E]
- movs r2, 0x20
- ldrsh r1, [r4, r2]
- lsls r2, r1, 2
- adds r2, r1
- lsls r2, 2
- adds r2, r6, r2
- movs r6, 0xA
- ldrsh r3, [r4, r6]
- lsls r1, r3, 1
- adds r1, r3
- adds r2, r1
- strh r2, [r0, 0x32]
- strh r7, [r0, 0x36]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r2, 1
- movs r3, 0x10
- negs r3, r3
- adds r1, r3, 0
- subs r1, r2
- strh r1, [r0, 0x38]
- ldrh r3, [r0, 0x4]
- lsls r2, r3, 22
- lsrs r2, 22
- adds r2, r5
- ldr r5, =0x000003ff
- adds r1, r5, 0
- ands r2, r1
- ldr r1, =0xfffffc00
- ands r1, r3
- orrs r1, r2
- strh r1, [r0, 0x4]
- bl sub_80A68D4
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
-_081112FC:
- movs r6, 0x20
- ldrsh r0, [r4, r6]
- negs r0, r0
- strh r0, [r4, 0x20]
-_08111304:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8111214
-
- thumb_func_start sub_811131C
-sub_811131C: @ 811131C
- push {r4,lr}
- adds r4, r0, 0
- bl TranslateAnimArc
- lsls r0, 24
- cmp r0, 0
- beq _0811134E
- ldr r0, =sub_81110A4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _08111348
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1E]
- subs r0, 0x1
- strh r0, [r1, 0x1E]
-_08111348:
- adds r0, r4, 0
- bl DestroySprite
-_0811134E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811131C
-
- thumb_func_start sub_811135C
-sub_811135C: @ 811135C
- push {lr}
- ldr r0, =gAnimDisableStructPtr
- ldr r0, [r0]
- ldrb r1, [r0, 0x11]
- lsrs r0, r1, 4
- lsls r1, 28
- lsrs r1, 28
- subs r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- movs r2, 0xFF
- lsls r2, 24
- adds r0, r2
- lsrs r0, 24
- cmp r0, 0x4
- bls _0811137E
- movs r1, 0x1
-_0811137E:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_811135C
-
- thumb_func_start sub_8111388
-sub_8111388: @ 8111388
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimArgs
- ldrb r1, [r5, 0x8]
- bl StartSpriteAnim
- ldrh r0, [r5]
- strh r0, [r4, 0x24]
- ldrh r0, [r5, 0x2]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x34]
- ldrh r1, [r5, 0x4]
- subs r0, r1
- strh r0, [r4, 0x34]
- movs r0, 0x3
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x6]
- strh r0, [r4, 0x30]
- ldr r0, =sub_81113C8
- str r0, [r4, 0x1C]
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8111388
-
- thumb_func_start sub_81113C8
-sub_81113C8: @ 81113C8
- push {lr}
- adds r2, r0, 0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r3]
- ldrh r1, [r2, 0x34]
- movs r3, 0x34
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _08111400
- ldrh r3, [r2, 0x32]
- adds r0, r1, r3
- strh r0, [r2, 0x26]
- ldrh r0, [r2, 0x2E]
- adds r1, r0
- strh r1, [r2, 0x34]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- lsls r1, 16
- cmp r1, 0
- ble _08111412
- movs r0, 0
- strh r0, [r2, 0x34]
- b _08111412
-_08111400:
- ldrh r0, [r2, 0x30]
- subs r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _08111412
- adds r0, r2, 0
- bl DestroyAnimSprite
-_08111412:
- pop {r0}
- bx r0
- thumb_func_end sub_81113C8
-
- thumb_func_start sub_8111418
-sub_8111418: @ 8111418
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08111434
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_08111434:
- adds r0, r4, 0
- bl TranslateAnimSpriteToTargetMonLocation
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8111418
-
- thumb_func_start sub_8111444
-sub_8111444: @ 8111444
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, =gBattleAnimTarget
- ldrb r0, [r5]
- movs r1, 0
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x20]
- ldrb r0, [r5]
- movs r1, 0x1
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gBattleAnimArgs
- ldrh r3, [r2]
- ldrh r5, [r4, 0x20]
- adds r1, r3, r5
- strh r1, [r4, 0x20]
- ldrh r1, [r2, 0x2]
- adds r0, r1
- strh r0, [r4, 0x22]
- strh r3, [r4, 0x30]
- strh r1, [r4, 0x32]
- ldrh r0, [r2, 0x4]
- strh r0, [r4, 0x38]
- ldrb r1, [r2, 0x6]
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r0, =sub_811149C
- str r0, [r4, 0x1C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8111444
-
- thumb_func_start sub_811149C
-sub_811149C: @ 811149C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x8
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x30]
- ldrh r1, [r4, 0x34]
- adds r0, r1
- strh r0, [r4, 0x34]
- ldrh r0, [r4, 0x32]
- ldrh r2, [r4, 0x36]
- adds r0, r2
- strh r0, [r4, 0x36]
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- movs r1, 0x28
- bl __divsi3
- ldrh r1, [r4, 0x24]
- adds r1, r0
- strh r1, [r4, 0x24]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- ldrh r1, [r4, 0x26]
- subs r1, r0
- strh r1, [r4, 0x26]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x8C
- ble _081114E6
- adds r0, r4, 0
- bl DestroyAnimSprite
-_081114E6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811149C
-
- thumb_func_start AnimTask_GetSeismicTossDamageLevel
-AnimTask_GetSeismicTossDamageLevel: @ 81114EC
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, =gAnimMoveDmg
- ldr r0, [r2]
- cmp r0, 0x20
- bgt _08111500
- ldr r1, =gBattleAnimArgs
- movs r0, 0
- strh r0, [r1, 0xE]
-_08111500:
- ldr r2, [r2]
- adds r0, r2, 0
- subs r0, 0x21
- cmp r0, 0x20
- bhi _08111510
- ldr r1, =gBattleAnimArgs
- movs r0, 0x1
- strh r0, [r1, 0xE]
-_08111510:
- cmp r2, 0x41
- ble _0811151A
- ldr r1, =gBattleAnimArgs
- movs r0, 0x2
- strh r0, [r1, 0xE]
-_0811151A:
- adds r0, r3, 0
- bl DestroyAnimVisualTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end AnimTask_GetSeismicTossDamageLevel
-
- thumb_func_start sub_811152C
-sub_811152C: @ 811152C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0811154E
- movs r0, 0
- bl sub_80A6DAC
- movs r0, 0xC8
- strh r0, [r5, 0xA]
-_0811154E:
- ldr r4, =gBattle_BG3_Y
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- movs r1, 0xA
- bl __divsi3
- ldrh r1, [r4]
- adds r1, r0
- strh r1, [r4]
- ldrh r0, [r5, 0xA]
- subs r0, 0x3
- strh r0, [r5, 0xA]
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x78
- bne _0811157A
- movs r0, 0x1
- bl sub_80A6DAC
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_0811157A:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811152C
-
- thumb_func_start sub_8111590
-sub_8111590: @ 8111590
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081115BC
- movs r0, 0
- bl sub_80A6DAC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldr r0, =gBattle_BG3_Y
- ldrh r0, [r0]
- strh r0, [r4, 0xC]
-_081115BC:
- ldrh r0, [r4, 0xA]
- adds r0, 0x50
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0xA]
- ldr r6, =gBattle_BG3_Y
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- movs r0, 0x4
- bl Cos
- ldrh r4, [r4, 0xC]
- adds r0, r4
- strh r0, [r6]
- ldr r0, =gBattleAnimArgs
- movs r2, 0xE
- ldrsh r1, [r0, r2]
- ldr r0, =0x00000fff
- cmp r1, r0
- bne _081115F4
- movs r0, 0
- strh r0, [r6]
- movs r0, 0x1
- bl sub_80A6DAC
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_081115F4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8111590
-
- .align 2, 0
diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s
index 6103785da..a52c2bc88 100644
--- a/asm/rom_8011DC0.s
+++ b/asm/rom_8011DC0.s
@@ -10149,7 +10149,7 @@ sub_801AAD4: @ 801AAD4
ldr r6, =gPlayerParty
ldr r5, =gEnemyParty
_0801AAE4:
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
adds r0, r4, r0
ldrb r0, [r0]
subs r0, 0x1
@@ -10504,7 +10504,7 @@ _0801AE54:
movs r1, 0
movs r2, 0x20
bl memset
- ldr r0, =gUnknown_0203CEF8
+ ldr r0, =gSelectedOrderFromParty
ldrb r1, [r0]
ldrb r0, [r0, 0x1]
cmn r1, r0
diff --git a/asm/script_pokemon_util_80F87D8.s b/asm/script_pokemon_util_80F87D8.s
deleted file mode 100644
index 1202473ee..000000000
--- a/asm/script_pokemon_util_80F87D8.s
+++ /dev/null
@@ -1,1667 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80F87D8
-sub_80F87D8: @ 80F87D8
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r1, =gContestMons
- ldrb r3, [r1, 0x15]
- ldr r4, =0x000013bc
- adds r0, r2, r4
- strh r3, [r0]
- adds r0, r1, 0
- adds r0, 0x55
- ldrb r3, [r0]
- adds r4, 0x2
- adds r0, r2, r4
- strh r3, [r0]
- adds r1, 0x95
- ldrb r0, [r1]
- movs r1, 0x9E
- lsls r1, 5
- adds r2, r1
- strh r0, [r2]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F87D8
-
- thumb_func_start sub_80F8814
-sub_80F8814: @ 80F8814
- push {lr}
- ldr r0, =gSpecialVar_0x8005
- ldrb r0, [r0]
- adds r1, r0, 0
- cmp r0, 0x1
- beq _080F883A
- cmp r0, 0x1
- bgt _080F8830
- cmp r0, 0
- beq _080F8836
- b _080F8842
- .pool
-_080F8830:
- cmp r1, 0x2
- beq _080F883E
- b _080F8842
-_080F8836:
- movs r1, 0x3
- b _080F8844
-_080F883A:
- movs r1, 0x4
- b _080F8844
-_080F883E:
- movs r1, 0x5
- b _080F8844
-_080F8842:
- movs r1, 0x64
-_080F8844:
- ldr r0, =gSpecialVar_0x8004
- strh r1, [r0]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8814
-
- thumb_func_start sub_80F8850
-sub_80F8850: @ 80F8850
- push {lr}
- bl sub_80F8264
- bl sub_80F8290
- bl sub_80F8438
- pop {r0}
- bx r0
- thumb_func_end sub_80F8850
-
- thumb_func_start sub_80F8864
-sub_80F8864: @ 80F8864
- push {lr}
- ldr r0, =gSpecialVar_ContestCategory
- ldrh r0, [r0]
- cmp r0, 0x4
- bhi _080F88A4
- lsls r0, 2
- ldr r1, =_080F8880
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080F8880:
- .4byte _080F8894
- .4byte _080F8898
- .4byte _080F889C
- .4byte _080F88A0
- .4byte _080F88A4
-_080F8894:
- movs r1, 0x8
- b _080F88A6
-_080F8898:
- movs r1, 0x9
- b _080F88A6
-_080F889C:
- movs r1, 0xA
- b _080F88A6
-_080F88A0:
- movs r1, 0xB
- b _080F88A6
-_080F88A4:
- movs r1, 0xC
-_080F88A6:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- lsls r1, 5
- adds r0, r1
- ldr r1, =0x00002e98
- adds r0, r1
- ldrh r1, [r0]
- cmp r1, 0
- bne _080F88CC
- ldr r0, =gSpecialVar_0x8004
- strh r1, [r0]
- b _080F88D2
- .pool
-_080F88CC:
- ldr r1, =gSpecialVar_0x8004
- movs r0, 0x1
- strh r0, [r1]
-_080F88D2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8864
-
- thumb_func_start sub_80F88DC
-sub_80F88DC: @ 80F88DC
- push {lr}
- movs r0, 0xFF
- bl sub_80DEDA8
- pop {r0}
- bx r0
- thumb_func_end sub_80F88DC
-
- thumb_func_start sub_80F88E8
-sub_80F88E8: @ 80F88E8
- push {lr}
- ldr r0, =gContestFinalStandings
- ldr r1, =gContestPlayerMonIndex
- ldrb r2, [r1]
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F8930
- ldr r0, =gSpecialVar_ContestRank
- ldrh r0, [r0]
- cmp r0, 0x3
- bne _080F8930
- ldr r1, =gUnknown_02039F08
- lsls r0, r2, 1
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r0, r2]
- ldr r0, =0x0000031f
- cmp r1, r0
- ble _080F8930
- ldr r1, =gSpecialVar_0x8004
- movs r0, 0x1
- b _080F8934
- .pool
-_080F8930:
- ldr r1, =gSpecialVar_0x8004
- movs r0, 0
-_080F8934:
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F88E8
-
- thumb_func_start sub_80F8940
-sub_80F8940: @ 80F8940
- push {lr}
- movs r3, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002f98
- adds r1, r0, r2
- movs r2, 0x4
-_080F894E:
- ldrh r0, [r1]
- cmp r0, 0
- beq _080F895A
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
-_080F895A:
- adds r1, 0x20
- subs r2, 0x1
- cmp r2, 0
- bge _080F894E
- adds r0, r3, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80F8940
-
- thumb_func_start sub_80F8970
-sub_80F8970: @ 80F8970
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, =gContestMonConditions
- mov r12, r0
- ldr r1, =gSpecialVar_0x8006
- mov r9, r1
- ldr r2, =gContestMons + 2
- mov r10, r2
- mov r2, r12
- mov r1, sp
- movs r6, 0x3
-_080F898E:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bge _080F898E
- movs r6, 0
-_080F899E:
- movs r1, 0x3
- cmp r1, r6
- ble _080F89C8
-_080F89A4:
- subs r5, r1, 0x1
- lsls r0, r5, 1
- mov r4, sp
- adds r3, r4, r0
- lsls r0, r1, 1
- adds r2, r4, r0
- ldrh r4, [r3]
- movs r7, 0
- ldrsh r1, [r3, r7]
- movs r7, 0
- ldrsh r0, [r2, r7]
- cmp r1, r0
- bge _080F89C2
- strh r4, [r2]
- strh r0, [r3]
-_080F89C2:
- adds r1, r5, 0
- cmp r1, r6
- bgt _080F89A4
-_080F89C8:
- adds r6, 0x1
- cmp r6, 0x2
- ble _080F899E
- mov r2, r9
- ldrh r0, [r2]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- movs r2, 0
- mov r8, r2
- movs r6, 0
- lsls r0, 16
- asrs r4, r0, 16
- adds r3, r0, 0
- mov r1, sp
- mov r5, r9
-_080F89E8:
- movs r7, 0
- ldrsh r0, [r1, r7]
- cmp r0, r4
- bne _080F8A02
- lsls r0, r2, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r2, r0, 24
- ldrh r7, [r5]
- cmp r6, r7
- bne _080F8A02
- mov r8, r2
-_080F8A02:
- adds r1, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _080F89E8
- movs r6, 0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- asrs r1, r3, 16
- lsls r2, 24
- mov r9, r2
- cmp r0, r1
- beq _080F8A30
- adds r2, r1, 0
- mov r1, sp
-_080F8A20:
- adds r1, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- bgt _080F8A30
- movs r4, 0
- ldrsh r0, [r1, r4]
- cmp r0, r2
- bne _080F8A20
-_080F8A30:
- lsls r0, r6, 24
- lsrs r7, r0, 24
- mov r2, r8
- movs r6, 0
- asrs r1, r3, 16
- mov r5, r12
- movs r4, 0
- ldrsh r0, [r5, r4]
- b _080F8A66
- .pool
-_080F8A50:
- subs r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_080F8A56:
- adds r6, 0x1
- cmp r6, 0x3
- bgt _080F8A6E
- lsls r0, r6, 1
- add r0, r12
- asrs r1, r3, 16
- movs r5, 0
- ldrsh r0, [r0, r5]
-_080F8A66:
- cmp r1, r0
- bne _080F8A56
- cmp r2, 0x1
- bne _080F8A50
-_080F8A6E:
- lsls r4, r6, 6
- mov r0, r10
- adds r1, r4, r0
- ldr r0, =gStringVar1
- bl StringCopy
- ldr r5, =gStringVar2
- mov r0, r10
- adds r0, 0xB
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- bl StringCopy
- adds r0, r5, 0
- bl sub_81DB5AC
- mov r1, r9
- asrs r0, r1, 24
- cmp r0, 0x1
- beq _080F8A9C
- cmp r8, r0
- bne _080F8AB0
-_080F8A9C:
- ldr r0, =gSpecialVar_0x8006
- strh r7, [r0]
- b _080F8AB6
- .pool
-_080F8AB0:
- ldr r1, =gSpecialVar_0x8006
- adds r0, r7, 0x4
- strh r0, [r1]
-_080F8AB6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8970
-
- thumb_func_start sub_80F8ACC
-sub_80F8ACC: @ 80F8ACC
- push {lr}
- ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8ACC
-
- thumb_func_start ShowContestWinner
-ShowContestWinner: @ 80F8ADC
- push {lr}
- ldr r0, =sub_812FDEC
- bl SetMainCallback2
- ldr r1, =gMain
- ldr r0, =sub_80F8ACC
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShowContestWinner
-
- thumb_func_start sub_80F8AFC
-sub_80F8AFC: @ 80F8AFC
- push {r4,r5,lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F8B7C
- movs r3, 0
- ldr r0, =gUnknown_02039F30
- adds r4, r0, 0
- ldr r5, =gContestMons
- ldrb r0, [r4]
- cmp r3, r0
- bge _080F8B50
- adds r2, r5, 0
- ldr r1, =gLinkPlayers
-_080F8B1C:
- ldrb r0, [r1]
- subs r0, 0x1
- cmp r0, 0x1
- bhi _080F8B44
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _080F8B40
- movs r0, 0xEB
- b _080F8B42
- .pool
-_080F8B40:
- movs r0, 0xEC
-_080F8B42:
- strb r0, [r2, 0x15]
-_080F8B44:
- adds r2, 0x40
- adds r1, 0x1C
- adds r3, 0x1
- ldrb r0, [r4]
- cmp r3, r0
- blt _080F8B1C
-_080F8B50:
- ldr r0, =0x00004010
- ldrb r1, [r5, 0x15]
- bl VarSet
- ldr r0, =0x00004011
- adds r1, r5, 0
- adds r1, 0x55
- ldrb r1, [r1]
- bl VarSet
- ldr r0, =0x00004012
- adds r1, r5, 0
- adds r1, 0x95
- ldrb r1, [r1]
- bl VarSet
- ldr r0, =0x00004013
- adds r1, r5, 0
- adds r1, 0xD5
- ldrb r1, [r1]
- bl VarSet
-_080F8B7C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8AFC
-
- thumb_func_start sub_80F8B94
-sub_80F8B94: @ 80F8B94
- push {r4-r7,lr}
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0xC
- strb r0, [r1]
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F8C6E
- movs r5, 0
- ldr r0, =gUnknown_02039F30
- ldrb r0, [r0]
- cmp r5, r0
- bge _080F8C6E
- movs r7, 0
- movs r6, 0x60
- movs r4, 0xB0
- lsls r4, 17
-_080F8BBA:
- ldr r0, =gUnknown_0858D8EC
- adds r0, r5, r0
- ldrb r0, [r0]
- ldr r1, =gSaveBlock1Ptr
- ldr r2, [r1]
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- bl GetEventObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gEventObjects
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r6
- strb r0, [r1, 0x5]
- ldr r0, =gLinkPlayers
- adds r1, r7, r0
- ldrb r0, [r1]
- subs r0, 0x1
- cmp r0, 0x1
- bhi _080F8C38
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _080F8C2C
- lsrs r1, r4, 16
- ldr r0, =gEventObjectPalette33
- b _080F8C42
- .pool
-_080F8C2C:
- lsrs r1, r4, 16
- ldr r0, =gEventObjectPalette34
- b _080F8C42
- .pool
-_080F8C38:
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _080F8C50
- lsrs r1, r4, 16
- ldr r0, =gEventObjectPalette8
-_080F8C42:
- movs r2, 0x20
- bl LoadPalette
- b _080F8C5A
- .pool
-_080F8C50:
- lsrs r1, r4, 16
- ldr r0, =gEventObjectPalette17
- movs r2, 0x20
- bl LoadPalette
-_080F8C5A:
- movs r0, 0x80
- lsls r0, 13
- adds r4, r0
- adds r7, 0x1C
- adds r6, 0x10
- adds r5, 0x1
- ldr r0, =gUnknown_02039F30
- ldrb r0, [r0]
- cmp r5, r0
- blt _080F8BBA
-_080F8C6E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8B94
-
- thumb_func_start sub_80F8C7C
-sub_80F8C7C: @ 80F8C7C
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r6, =gUnknown_02039F24
- ldrb r0, [r6]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x46
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- strb r0, [r1]
- cmp r0, 0
- bne _080F8D18
- ldr r0, =gContestFinalStandings
- ldr r1, =gContestPlayerMonIndex
- ldrb r2, [r1]
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F8D18
- ldr r0, =gSpecialVar_ContestRank
- ldrh r0, [r0]
- cmp r0, 0x3
- bne _080F8D18
- ldr r1, =gUnknown_02039F08
- lsls r0, r2, 1
- adds r0, r1
- movs r2, 0
- ldrsh r1, [r0, r2]
- ldr r0, =0x0000031f
- cmp r1, r0
- ble _080F8D18
- movs r1, 0x1
- mov r0, sp
- strb r1, [r0]
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0x46
- mov r2, sp
- bl SetMonData
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- bl GetRibbonCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _080F8CF6
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0x46
- bl sub_80EE4DC
-_080F8CF6:
- movs r0, 0x1
- b _080F8D1A
- .pool
-_080F8D18:
- movs r0, 0
-_080F8D1A:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80F8C7C
-
- thumb_func_start sub_80F8D24
-sub_80F8D24: @ 80F8D24
- movs r0, 0
- bx lr
- thumb_func_end sub_80F8D24
-
- thumb_func_start sub_80F8D28
-sub_80F8D28: @ 80F8D28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r7, =sub_80F8EE8
- adds r0, r7, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080F8D44
- b _080F8E9C
-_080F8D44:
- bl AllocateMonSpritesGfx
- movs r0, 0xA
- mov r9, r0
- movs r1, 0x3
- mov r10, r1
- ldr r2, =gContestMons
- ldr r4, =gSpecialVar_0x8006
- ldrh r1, [r4]
- lsls r1, 6
- adds r0, r1, r2
- ldrh r6, [r0]
- adds r0, r2, 0
- adds r0, 0x38
- adds r0, r1, r0
- ldr r5, [r0]
- adds r2, 0x3C
- adds r1, r2
- ldr r1, [r1]
- mov r8, r1
- adds r0, r7, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
- strh r6, [r0, 0xA]
- ldr r1, =gContestPlayerMonIndex
- ldrh r0, [r4]
- ldrb r1, [r1]
- cmp r0, r1
- bne _080F8DC4
- lsls r0, r6, 3
- ldr r1, =gMonFrontPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x8]
- adds r2, r6, 0
- adds r3, r5, 0
- bl HandleLoadSpecialPokePic_2
- b _080F8DD8
- .pool
-_080F8DC4:
- lsls r0, r6, 3
- ldr r1, =gMonFrontPicTable
- adds r0, r1
- ldr r1, =gMonSpritesGfxPtr
- ldr r1, [r1]
- ldr r1, [r1, 0x8]
- adds r2, r6, 0
- adds r3, r5, 0
- bl HandleLoadSpecialPokePic_DontHandleDeoxys
-_080F8DD8:
- adds r0, r6, 0
- mov r1, r8
- adds r2, r5, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- adds r4, r0, 0
- bl LoadCompressedObjectPalette
- adds r0, r6, 0
- movs r1, 0x1
- bl SetMultiuseSpriteTemplateToPokemon
- ldr r0, =gMultiuseSpriteTemplate
- ldrh r1, [r4, 0x4]
- strh r1, [r0, 0x2]
- mov r1, r9
- adds r1, 0x1
- lsls r1, 19
- movs r2, 0x80
- lsls r2, 14
- adds r1, r2
- asrs r1, 16
- mov r3, r10
- lsls r2, r3, 19
- movs r3, 0xA0
- lsls r3, 14
- adds r2, r3
- asrs r2, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F8E58
- movs r0, 0x4
- ands r0, r1
- lsls r4, r5, 4
- cmp r0, 0
- bne _080F8E6C
- adds r0, r4, r5
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0
- bl DoMonFrontSpriteAnimation
- b _080F8E6C
- .pool
-_080F8E58:
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0
- bl DoMonFrontSpriteAnimation
-_080F8E6C:
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- strh r5, [r0, 0xC]
- mov r1, r9
- strh r1, [r0, 0xE]
- mov r2, r10
- strh r2, [r0, 0x10]
- ldr r3, =gSprites
- adds r1, r4, r5
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, =SpriteCallbackDummy
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
-_080F8E9C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8D28
-
- thumb_func_start sub_80F8EB8
-sub_80F8EB8: @ 80F8EB8
- push {lr}
- ldr r0, =sub_80F8EE8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080F8EDC
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- bl FreeMonSpritesGfx
-_080F8EDC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8EB8
-
- thumb_func_start sub_80F8EE8
-sub_80F8EE8: @ 80F8EE8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks
- adds r5, r0, r1
- movs r2, 0x8
- ldrsh r0, [r5, r2]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _080F8F98
- lsls r0, 2
- ldr r1, =_080F8F14
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080F8F14:
- .4byte _080F8F78
- .4byte _080F8F28
- .4byte _080F8F98
- .4byte _080F8F42
- .4byte _080F8F84
-_080F8F28:
- movs r0, 0xA
- movs r1, 0x3
- movs r2, 0x8
- movs r3, 0x8
- bl CreateWindowFromRect
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x12]
- movs r1, 0x1
- bl SetStandardWindowBorderStyle
- b _080F8F78
-_080F8F42:
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- ldrb r0, [r4, 0x5]
- lsrs r0, 4
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- cmp r0, 0
- beq _080F8F72
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
-_080F8F72:
- adds r0, r4, 0
- bl DestroySprite
-_080F8F78:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080F8F98
- .pool
-_080F8F84:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x12]
- bl sub_80E2A78
- adds r0, r4, 0
- bl DestroyTask
-_080F8F98:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80F8EE8
-
- thumb_func_start sub_80F8FA0
-sub_80F8FA0: @ 80F8FA0
- push {r4,lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F8FD8
- ldr r0, =gUnknown_02039F30
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _080F8FD8
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080F8FD8
- ldr r4, =gSpecialVar_Result
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- b _080F8FDE
- .pool
-_080F8FD8:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x4
- strh r0, [r1]
-_080F8FDE:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8FA0
-
- thumb_func_start sub_80F8FE8
-sub_80F8FE8: @ 80F8FE8
- push {r4,lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F9020
- ldr r2, =gContestRngValue
- ldr r1, [r2]
- ldr r0, =0x41c64e6d
- muls r0, r1
- ldr r1, =0x00006073
- adds r0, r1
- str r0, [r2]
- lsrs r0, 16
- ldr r4, =gSpecialVar_Result
- b _080F902A
- .pool
-_080F9020:
- ldr r4, =gSpecialVar_Result
- bl Random
- lsls r0, 16
- lsrs r0, 16
-_080F902A:
- ldrh r1, [r4]
- bl __umodsi3
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F8FE8
-
- thumb_func_start sub_80F903C
-sub_80F903C: @ 80F903C
- ldr r2, =gContestRngValue
- ldr r1, [r2]
- ldr r0, =0x41c64e6d
- muls r0, r1
- ldr r1, =0x00006073
- adds r0, r1
- str r0, [r2]
- lsrs r0, 16
- bx lr
- .pool
- thumb_func_end sub_80F903C
-
- thumb_func_start sub_80F905C
-sub_80F905C: @ 80F905C
- push {lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080F9074
- movs r0, 0
- b _080F907E
- .pool
-_080F9074:
- ldr r0, =sub_80F9088
- movs r1, 0x5
- bl CreateTask
- movs r0, 0x1
-_080F907E:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80F905C
-
- thumb_func_start sub_80F9088
-sub_80F9088: @ 80F9088
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080F90C0
- cmp r0, 0x1
- beq _080F90CE
- bl sub_800A520
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080F90D4
- bl EnableBothScriptContexts
- adds r0, r5, 0
- bl DestroyTask
- b _080F90D4
- .pool
-_080F90C0:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _080F90D4
- bl sub_800ADF8
-_080F90CE:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080F90D4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80F9088
-
- thumb_func_start sub_80F90DC
-sub_80F90DC: @ 80F90DC
- push {lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080F90FE
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F90FE
- bl sub_800E0E8
- movs r0, 0x8
- movs r1, 0x8
- bl CreateWirelessStatusIndicatorSprite
-_080F90FE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F90DC
-
- thumb_func_start sub_80F910C
-sub_80F910C: @ 80F910C
- push {lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080F9126
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F9126
- bl sub_800E084
-_080F9126:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F910C
-
- thumb_func_start sub_80F9134
-sub_80F9134: @ 80F9134
- push {lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _080F914C
- movs r0, 0
- b _080F914E
- .pool
-_080F914C:
- movs r0, 0x1
-_080F914E:
- pop {r1}
- bx r1
- thumb_func_end sub_80F9134
-
- thumb_func_start sub_80F9154
-sub_80F9154: @ 80F9154
- ldr r1, =gIsLinkContest
- movs r0, 0
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80F9154
-
- thumb_func_start sub_80F9160
-sub_80F9160: @ 80F9160
- push {lr}
- ldr r0, =gIsLinkContest
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _080F9178
- movs r0, 0
- b _080F917A
- .pool
-_080F9178:
- movs r0, 0x1
-_080F917A:
- pop {r1}
- bx r1
- thumb_func_end sub_80F9160
-
- thumb_func_start HealPlayerParty
-HealPlayerParty: @ 80F9180
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r0, 0
- mov r8, r0
- ldr r0, =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r8, r0
- bcs _080F922C
- ldr r1, =gPlayerParty
- mov r10, r1
- mov r6, sp
-_080F919E:
- movs r0, 0x64
- mov r4, r8
- muls r4, r0
- add r4, r10
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- lsls r1, r0, 16
- strb r0, [r6]
- lsrs r1, 24
- strb r1, [r6, 0x1]
- adds r0, r4, 0
- movs r1, 0x39
- mov r2, sp
- bl SetMonData
- adds r0, r4, 0
- movs r1, 0x15
- bl GetMonData
- lsls r0, 24
- lsrs r7, r0, 24
- movs r5, 0
- movs r1, 0x1
- add r1, r8
- mov r9, r1
-_080F91D4:
- adds r1, r5, 0
- adds r1, 0xD
- adds r0, r4, 0
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- adds r1, r7, 0
- adds r2, r5, 0
- bl CalculatePPWithBonus
- strb r0, [r6]
- adds r1, r5, 0
- adds r1, 0x11
- adds r0, r4, 0
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _080F91D4
- movs r0, 0
- strb r0, [r6]
- strb r0, [r6, 0x1]
- strb r0, [r6, 0x2]
- strb r0, [r6, 0x3]
- movs r1, 0x64
- mov r0, r8
- muls r0, r1
- add r0, r10
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- mov r1, r9
- lsls r0, r1, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r8, r0
- bcc _080F919E
-_080F922C:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end HealPlayerParty
-
- thumb_func_start ScriptGiveMon
-@ void ScriptGiveMon(s16 species_num, u8 level, int held_item)
-ScriptGiveMon: @ 80F9244
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x78
- adds r5, r0, 0
- adds r3, r1, 0
- adds r4, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 16
- lsrs r0, r4, 16
- mov r8, r0
- add r6, sp, 0x14
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r3, 0
- movs r3, 0x20
- bl CreateMon
- add r0, sp, 0x10
- mov r1, r8
- strb r1, [r0]
- lsrs r4, 24
- strb r4, [r0, 0x1]
- adds r0, r6, 0
- movs r1, 0xC
- add r2, sp, 0x10
- bl SetMonData
- adds r0, r6, 0
- bl GiveMonToPlayer
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r5, 0
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0x1
- bgt _080F92B8
- cmp r4, 0
- blt _080F92B8
- adds r0, r5, 0
- movs r1, 0x2
- bl GetSetPokedexFlag
- adds r0, r5, 0
- movs r1, 0x3
- bl GetSetPokedexFlag
-_080F92B8:
- adds r0, r4, 0
- add sp, 0x78
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end ScriptGiveMon
-
- thumb_func_start ScriptGiveEgg
-ScriptGiveEgg: @ 80F92C8
- push {lr}
- sub sp, 0x68
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r0, sp
- movs r2, 0x1
- bl CreateEgg
- add r2, sp, 0x64
- movs r0, 0x1
- strb r0, [r2]
- mov r0, sp
- movs r1, 0x2D
- bl SetMonData
- mov r0, sp
- bl GiveMonToPlayer
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x68
- pop {r1}
- bx r1
- thumb_func_end ScriptGiveEgg
-
- thumb_func_start HasEnoughMonsForDoubleBattle
-HasEnoughMonsForDoubleBattle: @ 80F92F8
- push {lr}
- bl GetMonsStateToDoubles
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- beq _080F9314
- cmp r1, 0x1
- bgt _080F9310
- cmp r1, 0
- beq _080F9314
- b _080F9318
-_080F9310:
- cmp r1, 0x2
- bne _080F9318
-_080F9314:
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
-_080F9318:
- pop {r0}
- bx r0
- .pool
- thumb_func_end HasEnoughMonsForDoubleBattle
-
- thumb_func_start sub_80F9320
-sub_80F9320: @ 80F9320
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- movs r5, 0
- movs r7, 0xCE
- lsls r7, 1
-_080F932C:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- beq _080F9360
- cmp r0, r7
- beq _080F9360
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- cmp r0, r6
- bne _080F9360
- movs r0, 0x1
- b _080F9368
- .pool
-_080F9360:
- adds r5, 0x1
- cmp r5, 0x5
- ble _080F932C
- movs r0, 0
-_080F9368:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80F9320
-
- thumb_func_start sub_80F9370
-sub_80F9370: @ 80F9370
- push {r4,lr}
- movs r0, 0xAF
- bl sub_80F9320
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r4, 0x1
- bne _080F9392
- movs r0, 0xAF
- bl ItemIdToBerryType
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gStringVar1
- bl GetBerryNameByBerryType
-_080F9392:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80F9370
-
- thumb_func_start CreateScriptedWildMon
-CreateScriptedWildMon: @ 80F93A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- lsls r7, r2, 16
- lsrs r6, r7, 16
- bl ZeroEnemyPartyMons
- ldr r0, =gEnemyParty
- mov r8, r0
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- mov r0, r8
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x20
- bl CreateMon
- cmp r6, 0
- beq _080F93EE
- add r0, sp, 0x10
- strb r6, [r0]
- adds r1, r0, 0
- lsrs r0, r7, 24
- strb r0, [r1, 0x1]
- mov r0, r8
- movs r1, 0xC
- add r2, sp, 0x10
- bl SetMonData
-_080F93EE:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreateScriptedWildMon
-
- thumb_func_start ScriptSetMonMoveSlot
-ScriptSetMonMoveSlot: @ 80F9400
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 24
- lsrs r2, 24
- cmp r3, 0x6
- bls _080F941C
- ldr r0, =gPlayerPartyCount
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
-_080F941C:
- movs r0, 0x64
- muls r0, r3
- ldr r1, =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl SetMonMoveSlot
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ScriptSetMonMoveSlot
-
- thumb_func_start sub_80F9438
-sub_80F9438: @ 80F9438
- push {lr}
- ldr r0, =gMain
- ldr r1, =sub_80F9460
- str r1, [r0, 0x8]
- ldr r0, =0x000040cf
- movs r1, 0x9
- bl VarSet
- movs r0, 0
- bl sub_81B8518
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F9438
-
- thumb_func_start sub_80F9460
-sub_80F9460: @ 80F9460
- push {lr}
- ldr r0, =gUnknown_0203CEF8
- ldrb r1, [r0]
- cmp r1, 0
- bne _080F9478
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
- b _080F947E
- .pool
-_080F9478:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_080F947E:
- ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F9460
-
- thumb_func_start sub_80F9490
-sub_80F9490: @ 80F9490
- push {lr}
- ldr r1, =gMain
- ldr r0, =sub_80F94B8
- str r0, [r1, 0x8]
- ldr r0, =gSpecialVar_0x8004
- ldrb r0, [r0]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- bl sub_81B8518
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F9490
-
- thumb_func_start sub_80F94B8
-sub_80F94B8: @ 80F94B8
- push {lr}
- ldr r0, =gUnknown_0203CEF8
- ldrb r1, [r0]
- cmp r1, 0
- bne _080F94D0
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
- b _080F94D6
- .pool
-_080F94D0:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_080F94D6:
- ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80F94B8
-
- thumb_func_start ReducePlayerPartyToThree
-ReducePlayerPartyToThree: @ 80F94E8
- push {r4-r7,lr}
- sub sp, 0x198
- add r0, sp, 0x190
- movs r1, 0
- str r1, [r0]
- ldr r2, =0x05000064
- mov r1, sp
- bl CpuSet
- movs r5, 0
- movs r7, 0x64
- ldr r6, =gPlayerParty
- mov r4, sp
-_080F9502:
- ldr r0, =gUnknown_0203CEF8
- adds r1, r5, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _080F951C
- subs r0, 0x1
- adds r1, r0, 0
- muls r1, r7
- adds r1, r6
- adds r0, r4, 0
- movs r2, 0x64
- bl memcpy
-_080F951C:
- adds r4, 0x64
- adds r5, 0x1
- cmp r5, 0x3
- ble _080F9502
- add r0, sp, 0x194
- movs r1, 0
- str r1, [r0]
- ldr r4, =gPlayerParty
- ldr r2, =0x05000096
- adds r1, r4, 0
- bl CpuSet
- mov r5, sp
- add r6, sp, 0x12C
-_080F9538:
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r5, 0x64
- adds r4, 0x64
- cmp r5, r6
- ble _080F9538
- bl CalculatePlayerPartyCount
- add sp, 0x198
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ReducePlayerPartyToThree
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/water.s b/asm/water.s
index cce11a615..6965d6371 100644
--- a/asm/water.s
+++ b/asm/water.s
@@ -329,7 +329,7 @@ sub_8107430: @ 8107430
push {lr}
movs r1, 0xA
strh r1, [r0, 0x2E]
- ldr r1, =sub_80A64B0
+ ldr r1, =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, =move_anim_8074EE0
bl StoreSpriteCallbackInData6
@@ -343,7 +343,7 @@ sub_810744C: @ 810744C
push {r4-r7,lr}
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -538,7 +538,7 @@ sub_81075EC: @ 81075EC
push {r4,r5,lr}
adds r5, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
movs r0, 0x1E
strh r0, [r5, 0x2E]
ldrh r0, [r5, 0x20]
@@ -819,7 +819,7 @@ _0810781E:
movs r7, 0x3
_08107828:
adds r0, r6, 0
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r0, =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -849,7 +849,7 @@ _08107842:
ldrh r5, [r5, 0x6]
adds r0, r5
strh r0, [r6, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r6, 0
@@ -876,7 +876,7 @@ sub_8107894: @ 8107894
ldrh r0, [r4, 0x22]
adds r1, r0
strh r1, [r4, 0x36]
- ldr r0, =sub_80A6EEC
+ ldr r0, =StartAnimLinearTranslation
str r0, [r4, 0x1C]
ldr r1, =DestroyAnimSprite
adds r0, r4, 0
@@ -904,7 +904,7 @@ sub_81078D0: @ 81078D0
_081078EC:
adds r0, r4, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
_081078F4:
ldr r0, =gBattleAnimArgs
ldrh r0, [r0, 0x4]
@@ -3137,7 +3137,7 @@ sub_8108AC0: @ 8108AC0
strh r1, [r0, 0x36]
ldrh r1, [r6, 0x1A]
strh r1, [r0, 0x38]
- bl sub_80A68D4
+ bl InitAnimArcTranslation
adds r5, 0x1C
adds r4, r5
ldr r0, =sub_8108B2C
@@ -3191,7 +3191,7 @@ sub_8108B2C: @ 8108B2C
mvns r1, r1
strh r1, [r6, 0x38]
adds r0, r6, 0
- bl sub_80A68D4
+ bl InitAnimArcTranslation
ldr r0, =sub_8108B94
str r0, [r6, 0x1C]
_08108B86:
@@ -3339,7 +3339,7 @@ sub_8108C94: @ 8108C94
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
- bl sub_80A69CC
+ bl InitAnimSpritePos
ldr r5, =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
diff --git a/data/graphics/pokemon/footprint_table.inc b/data/graphics/pokemon/footprint_table.inc
deleted file mode 100644
index b5de0e11d..000000000
--- a/data/graphics/pokemon/footprint_table.inc
+++ /dev/null
@@ -1,415 +0,0 @@
- .align 2
-gMonFootprintTable:: @ 856E694
- .4byte gMonFootprint_Bulbasaur
- .4byte gMonFootprint_Bulbasaur
- .4byte gMonFootprint_Ivysaur
- .4byte gMonFootprint_Venusaur
- .4byte gMonFootprint_Charmander
- .4byte gMonFootprint_Charmeleon
- .4byte gMonFootprint_Charizard
- .4byte gMonFootprint_Squirtle
- .4byte gMonFootprint_Wartortle
- .4byte gMonFootprint_Blastoise
- .4byte gMonFootprint_Caterpie
- .4byte gMonFootprint_Metapod
- .4byte gMonFootprint_Butterfree
- .4byte gMonFootprint_Weedle
- .4byte gMonFootprint_Kakuna
- .4byte gMonFootprint_Beedrill
- .4byte gMonFootprint_Pidgey
- .4byte gMonFootprint_Pidgeotto
- .4byte gMonFootprint_Pidgeot
- .4byte gMonFootprint_Rattata
- .4byte gMonFootprint_Raticate
- .4byte gMonFootprint_Spearow
- .4byte gMonFootprint_Fearow
- .4byte gMonFootprint_Ekans
- .4byte gMonFootprint_Arbok
- .4byte gMonFootprint_Pikachu
- .4byte gMonFootprint_Raichu
- .4byte gMonFootprint_Sandshrew
- .4byte gMonFootprint_Sandslash
- .4byte gMonFootprint_NidoranF
- .4byte gMonFootprint_Nidorina
- .4byte gMonFootprint_Nidoqueen
- .4byte gMonFootprint_NidoranM
- .4byte gMonFootprint_Nidorino
- .4byte gMonFootprint_Nidoking
- .4byte gMonFootprint_Clefairy
- .4byte gMonFootprint_Clefable
- .4byte gMonFootprint_Vulpix
- .4byte gMonFootprint_Ninetales
- .4byte gMonFootprint_Jigglypuff
- .4byte gMonFootprint_Wigglytuff
- .4byte gMonFootprint_Zubat
- .4byte gMonFootprint_Golbat
- .4byte gMonFootprint_Oddish
- .4byte gMonFootprint_Gloom
- .4byte gMonFootprint_Vileplume
- .4byte gMonFootprint_Paras
- .4byte gMonFootprint_Parasect
- .4byte gMonFootprint_Venonat
- .4byte gMonFootprint_Venomoth
- .4byte gMonFootprint_Diglett
- .4byte gMonFootprint_Dugtrio
- .4byte gMonFootprint_Meowth
- .4byte gMonFootprint_Persian
- .4byte gMonFootprint_Psyduck
- .4byte gMonFootprint_Golduck
- .4byte gMonFootprint_Mankey
- .4byte gMonFootprint_Primeape
- .4byte gMonFootprint_Growlithe
- .4byte gMonFootprint_Arcanine
- .4byte gMonFootprint_Poliwag
- .4byte gMonFootprint_Poliwhirl
- .4byte gMonFootprint_Poliwrath
- .4byte gMonFootprint_Abra
- .4byte gMonFootprint_Kadabra
- .4byte gMonFootprint_Alakazam
- .4byte gMonFootprint_Machop
- .4byte gMonFootprint_Machoke
- .4byte gMonFootprint_Machamp
- .4byte gMonFootprint_Bellsprout
- .4byte gMonFootprint_Weepinbell
- .4byte gMonFootprint_Victreebel
- .4byte gMonFootprint_Tentacool
- .4byte gMonFootprint_Tentacruel
- .4byte gMonFootprint_Geodude
- .4byte gMonFootprint_Graveler
- .4byte gMonFootprint_Golem
- .4byte gMonFootprint_Ponyta
- .4byte gMonFootprint_Rapidash
- .4byte gMonFootprint_Slowpoke
- .4byte gMonFootprint_Slowbro
- .4byte gMonFootprint_Magnemite
- .4byte gMonFootprint_Magneton
- .4byte gMonFootprint_Farfetchd
- .4byte gMonFootprint_Doduo
- .4byte gMonFootprint_Dodrio
- .4byte gMonFootprint_Seel
- .4byte gMonFootprint_Dewgong
- .4byte gMonFootprint_Grimer
- .4byte gMonFootprint_Muk
- .4byte gMonFootprint_Shellder
- .4byte gMonFootprint_Cloyster
- .4byte gMonFootprint_Gastly
- .4byte gMonFootprint_Haunter
- .4byte gMonFootprint_Gengar
- .4byte gMonFootprint_Onix
- .4byte gMonFootprint_Drowzee
- .4byte gMonFootprint_Hypno
- .4byte gMonFootprint_Krabby
- .4byte gMonFootprint_Kingler
- .4byte gMonFootprint_Voltorb
- .4byte gMonFootprint_Electrode
- .4byte gMonFootprint_Exeggcute
- .4byte gMonFootprint_Exeggutor
- .4byte gMonFootprint_Cubone
- .4byte gMonFootprint_Marowak
- .4byte gMonFootprint_Hitmonlee
- .4byte gMonFootprint_Hitmonchan
- .4byte gMonFootprint_Lickitung
- .4byte gMonFootprint_Koffing
- .4byte gMonFootprint_Weezing
- .4byte gMonFootprint_Rhyhorn
- .4byte gMonFootprint_Rhydon
- .4byte gMonFootprint_Chansey
- .4byte gMonFootprint_Tangela
- .4byte gMonFootprint_Kangaskhan
- .4byte gMonFootprint_Horsea
- .4byte gMonFootprint_Seadra
- .4byte gMonFootprint_Goldeen
- .4byte gMonFootprint_Seaking
- .4byte gMonFootprint_Staryu
- .4byte gMonFootprint_Starmie
- .4byte gMonFootprint_Mrmime
- .4byte gMonFootprint_Scyther
- .4byte gMonFootprint_Jynx
- .4byte gMonFootprint_Electabuzz
- .4byte gMonFootprint_Magmar
- .4byte gMonFootprint_Pinsir
- .4byte gMonFootprint_Tauros
- .4byte gMonFootprint_Magikarp
- .4byte gMonFootprint_Gyarados
- .4byte gMonFootprint_Lapras
- .4byte gMonFootprint_Ditto
- .4byte gMonFootprint_Eevee
- .4byte gMonFootprint_Vaporeon
- .4byte gMonFootprint_Jolteon
- .4byte gMonFootprint_Flareon
- .4byte gMonFootprint_Porygon
- .4byte gMonFootprint_Omanyte
- .4byte gMonFootprint_Omastar
- .4byte gMonFootprint_Kabuto
- .4byte gMonFootprint_Kabutops
- .4byte gMonFootprint_Aerodactyl
- .4byte gMonFootprint_Snorlax
- .4byte gMonFootprint_Articuno
- .4byte gMonFootprint_Zapdos
- .4byte gMonFootprint_Moltres
- .4byte gMonFootprint_Dratini
- .4byte gMonFootprint_Dragonair
- .4byte gMonFootprint_Dragonite
- .4byte gMonFootprint_Mewtwo
- .4byte gMonFootprint_Mew
- .4byte gMonFootprint_Chikorita
- .4byte gMonFootprint_Bayleef
- .4byte gMonFootprint_Meganium
- .4byte gMonFootprint_Cyndaquil
- .4byte gMonFootprint_Quilava
- .4byte gMonFootprint_Typhlosion
- .4byte gMonFootprint_Totodile
- .4byte gMonFootprint_Croconaw
- .4byte gMonFootprint_Feraligatr
- .4byte gMonFootprint_Sentret
- .4byte gMonFootprint_Furret
- .4byte gMonFootprint_Hoothoot
- .4byte gMonFootprint_Noctowl
- .4byte gMonFootprint_Ledyba
- .4byte gMonFootprint_Ledian
- .4byte gMonFootprint_Spinarak
- .4byte gMonFootprint_Ariados
- .4byte gMonFootprint_Crobat
- .4byte gMonFootprint_Chinchou
- .4byte gMonFootprint_Lanturn
- .4byte gMonFootprint_Pichu
- .4byte gMonFootprint_Cleffa
- .4byte gMonFootprint_Igglybuff
- .4byte gMonFootprint_Togepi
- .4byte gMonFootprint_Togetic
- .4byte gMonFootprint_Natu
- .4byte gMonFootprint_Xatu
- .4byte gMonFootprint_Mareep
- .4byte gMonFootprint_Flaaffy
- .4byte gMonFootprint_Ampharos
- .4byte gMonFootprint_Bellossom
- .4byte gMonFootprint_Marill
- .4byte gMonFootprint_Azumarill
- .4byte gMonFootprint_Sudowoodo
- .4byte gMonFootprint_Politoed
- .4byte gMonFootprint_Hoppip
- .4byte gMonFootprint_Skiploom
- .4byte gMonFootprint_Jumpluff
- .4byte gMonFootprint_Aipom
- .4byte gMonFootprint_Sunkern
- .4byte gMonFootprint_Sunflora
- .4byte gMonFootprint_Yanma
- .4byte gMonFootprint_Wooper
- .4byte gMonFootprint_Quagsire
- .4byte gMonFootprint_Espeon
- .4byte gMonFootprint_Umbreon
- .4byte gMonFootprint_Murkrow
- .4byte gMonFootprint_Slowking
- .4byte gMonFootprint_Misdreavus
- .4byte gMonFootprint_Unown
- .4byte gMonFootprint_Wobbuffet
- .4byte gMonFootprint_Girafarig
- .4byte gMonFootprint_Pineco
- .4byte gMonFootprint_Forretress
- .4byte gMonFootprint_Dunsparce
- .4byte gMonFootprint_Gligar
- .4byte gMonFootprint_Steelix
- .4byte gMonFootprint_Snubbull
- .4byte gMonFootprint_Granbull
- .4byte gMonFootprint_Qwilfish
- .4byte gMonFootprint_Scizor
- .4byte gMonFootprint_Shuckle
- .4byte gMonFootprint_Heracross
- .4byte gMonFootprint_Sneasel
- .4byte gMonFootprint_Teddiursa
- .4byte gMonFootprint_Ursaring
- .4byte gMonFootprint_Slugma
- .4byte gMonFootprint_Magcargo
- .4byte gMonFootprint_Swinub
- .4byte gMonFootprint_Piloswine
- .4byte gMonFootprint_Corsola
- .4byte gMonFootprint_Remoraid
- .4byte gMonFootprint_Octillery
- .4byte gMonFootprint_Delibird
- .4byte gMonFootprint_Mantine
- .4byte gMonFootprint_Skarmory
- .4byte gMonFootprint_Houndour
- .4byte gMonFootprint_Houndoom
- .4byte gMonFootprint_Kingdra
- .4byte gMonFootprint_Phanpy
- .4byte gMonFootprint_Donphan
- .4byte gMonFootprint_Porygon2
- .4byte gMonFootprint_Stantler
- .4byte gMonFootprint_Smeargle
- .4byte gMonFootprint_Tyrogue
- .4byte gMonFootprint_Hitmontop
- .4byte gMonFootprint_Smoochum
- .4byte gMonFootprint_Elekid
- .4byte gMonFootprint_Magby
- .4byte gMonFootprint_Miltank
- .4byte gMonFootprint_Blissey
- .4byte gMonFootprint_Raikou
- .4byte gMonFootprint_Entei
- .4byte gMonFootprint_Suicune
- .4byte gMonFootprint_Larvitar
- .4byte gMonFootprint_Pupitar
- .4byte gMonFootprint_Tyranitar
- .4byte gMonFootprint_Lugia
- .4byte gMonFootprint_HoOh
- .4byte gMonFootprint_Celebi
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_QuestionMark
- .4byte gMonFootprint_Treecko
- .4byte gMonFootprint_Grovyle
- .4byte gMonFootprint_Sceptile
- .4byte gMonFootprint_Torchic
- .4byte gMonFootprint_Combusken
- .4byte gMonFootprint_Blaziken
- .4byte gMonFootprint_Mudkip
- .4byte gMonFootprint_Marshtomp
- .4byte gMonFootprint_Swampert
- .4byte gMonFootprint_Poochyena
- .4byte gMonFootprint_Mightyena
- .4byte gMonFootprint_Zigzagoon
- .4byte gMonFootprint_Linoone
- .4byte gMonFootprint_Wurmple
- .4byte gMonFootprint_Silcoon
- .4byte gMonFootprint_Beautifly
- .4byte gMonFootprint_Cascoon
- .4byte gMonFootprint_Dustox
- .4byte gMonFootprint_Lotad
- .4byte gMonFootprint_Lombre
- .4byte gMonFootprint_Ludicolo
- .4byte gMonFootprint_Seedot
- .4byte gMonFootprint_Nuzleaf
- .4byte gMonFootprint_Shiftry
- .4byte gMonFootprint_Nincada
- .4byte gMonFootprint_Ninjask
- .4byte gMonFootprint_Shedinja
- .4byte gMonFootprint_Taillow
- .4byte gMonFootprint_Swellow
- .4byte gMonFootprint_Shroomish
- .4byte gMonFootprint_Breloom
- .4byte gMonFootprint_Spinda
- .4byte gMonFootprint_Wingull
- .4byte gMonFootprint_Pelipper
- .4byte gMonFootprint_Surskit
- .4byte gMonFootprint_Masquerain
- .4byte gMonFootprint_Wailmer
- .4byte gMonFootprint_Wailord
- .4byte gMonFootprint_Skitty
- .4byte gMonFootprint_Delcatty
- .4byte gMonFootprint_Kecleon
- .4byte gMonFootprint_Baltoy
- .4byte gMonFootprint_Claydol
- .4byte gMonFootprint_Nosepass
- .4byte gMonFootprint_Torkoal
- .4byte gMonFootprint_Sableye
- .4byte gMonFootprint_Barboach
- .4byte gMonFootprint_Whiscash
- .4byte gMonFootprint_Luvdisc
- .4byte gMonFootprint_Corphish
- .4byte gMonFootprint_Crawdaunt
- .4byte gMonFootprint_Feebas
- .4byte gMonFootprint_Milotic
- .4byte gMonFootprint_Carvanha
- .4byte gMonFootprint_Sharpedo
- .4byte gMonFootprint_Trapinch
- .4byte gMonFootprint_Vibrava
- .4byte gMonFootprint_Flygon
- .4byte gMonFootprint_Makuhita
- .4byte gMonFootprint_Hariyama
- .4byte gMonFootprint_Electrike
- .4byte gMonFootprint_Manectric
- .4byte gMonFootprint_Numel
- .4byte gMonFootprint_Camerupt
- .4byte gMonFootprint_Spheal
- .4byte gMonFootprint_Sealeo
- .4byte gMonFootprint_Walrein
- .4byte gMonFootprint_Cacnea
- .4byte gMonFootprint_Cacturne
- .4byte gMonFootprint_Snorunt
- .4byte gMonFootprint_Glalie
- .4byte gMonFootprint_Lunatone
- .4byte gMonFootprint_Solrock
- .4byte gMonFootprint_Azurill
- .4byte gMonFootprint_Spoink
- .4byte gMonFootprint_Grumpig
- .4byte gMonFootprint_Plusle
- .4byte gMonFootprint_Minun
- .4byte gMonFootprint_Mawile
- .4byte gMonFootprint_Meditite
- .4byte gMonFootprint_Medicham
- .4byte gMonFootprint_Swablu
- .4byte gMonFootprint_Altaria
- .4byte gMonFootprint_Wynaut
- .4byte gMonFootprint_Duskull
- .4byte gMonFootprint_Dusclops
- .4byte gMonFootprint_Roselia
- .4byte gMonFootprint_Slakoth
- .4byte gMonFootprint_Vigoroth
- .4byte gMonFootprint_Slaking
- .4byte gMonFootprint_Gulpin
- .4byte gMonFootprint_Swalot
- .4byte gMonFootprint_Tropius
- .4byte gMonFootprint_Whismur
- .4byte gMonFootprint_Loudred
- .4byte gMonFootprint_Exploud
- .4byte gMonFootprint_Clamperl
- .4byte gMonFootprint_Huntail
- .4byte gMonFootprint_Gorebyss
- .4byte gMonFootprint_Absol
- .4byte gMonFootprint_Shuppet
- .4byte gMonFootprint_Banette
- .4byte gMonFootprint_Seviper
- .4byte gMonFootprint_Zangoose
- .4byte gMonFootprint_Relicanth
- .4byte gMonFootprint_Aron
- .4byte gMonFootprint_Lairon
- .4byte gMonFootprint_Aggron
- .4byte gMonFootprint_Castform
- .4byte gMonFootprint_Volbeat
- .4byte gMonFootprint_Illumise
- .4byte gMonFootprint_Lileep
- .4byte gMonFootprint_Cradily
- .4byte gMonFootprint_Anorith
- .4byte gMonFootprint_Armaldo
- .4byte gMonFootprint_Ralts
- .4byte gMonFootprint_Kirlia
- .4byte gMonFootprint_Gardevoir
- .4byte gMonFootprint_Bagon
- .4byte gMonFootprint_Shelgon
- .4byte gMonFootprint_Salamence
- .4byte gMonFootprint_Beldum
- .4byte gMonFootprint_Metang
- .4byte gMonFootprint_Metagross
- .4byte gMonFootprint_Regirock
- .4byte gMonFootprint_Regice
- .4byte gMonFootprint_Registeel
- .4byte gMonFootprint_Kyogre
- .4byte gMonFootprint_Groudon
- .4byte gMonFootprint_Rayquaza
- .4byte gMonFootprint_Latias
- .4byte gMonFootprint_Latios
- .4byte gMonFootprint_Jirachi
- .4byte gMonFootprint_Deoxys
- .4byte gMonFootprint_Chimecho
- .4byte gMonFootprint_Bulbasaur
diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc
index 1dfc72bcc..65749894b 100644
--- a/data/maps/LilycoveCity_ContestLobby/scripts.inc
+++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc
@@ -57,7 +57,7 @@ LilycoveCity_ContestLobby_EventScript_21A2AA:: @ 821A2AA
closemessage
special sub_80F88DC
setvar VAR_0x4099, 0
- specialvar VAR_RESULT, sub_80F8C7C
+ specialvar VAR_RESULT, GiveMonArtistRibbon
compare VAR_RESULT, 1
call_if 1, LilycoveCity_ContestLobby_EventScript_21A314
applymovement 4, LilycoveCity_ContestLobby_Movement_21A40F
@@ -230,7 +230,7 @@ LilycoveCity_ContestLobby_EventScript_21A47A:: @ 821A47A
closemessage
special sub_80F88DC
setvar VAR_0x4099, 0
- specialvar VAR_RESULT, sub_80F8C7C
+ specialvar VAR_RESULT, GiveMonArtistRibbon
compare VAR_RESULT, 1
call_if 1, LilycoveCity_ContestLobby_EventScript_21A4E4
applymovement 11, LilycoveCity_ContestLobby_Movement_21A53C
@@ -324,7 +324,7 @@ LilycoveCity_ContestLobby_EventScript_21A554:: @ 821A554
goto_eq LilycoveCity_ContestLobby_EventScript_21A5CF
call LilycoveCity_ContestLobby_EventScript_279CC5
call LilycoveCity_ContestLobby_EventScript_21A670
- special sub_80F87D8
+ special SetContestTrainerGfxIds
call LilycoveCity_ContestLobby_EventScript_23BEB6
call LilycoveCity_ContestLobby_EventScript_21A585
call LilycoveCity_ContestLobby_EventScript_21A5EF
diff --git a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
index 242d1b8d8..424ee4bf3 100644
--- a/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
+++ b/data/maps/MossdeepCity_SpaceCenter_2F/scripts.inc
@@ -260,7 +260,7 @@ MossdeepCity_SpaceCenter_2F_EventScript_22400C:: @ 822400C
goto MossdeepCity_SpaceCenter_2F_EventScript_223FDA
MossdeepCity_SpaceCenter_2F_EventScript_224032:: @ 8224032
- special ReducePlayerPartyToThree
+ special ReducePlayerPartyToSelectedMons
setvar VAR_0x8004, 2
setvar VAR_0x8005, 4
special CallFrontierUtilFunc
diff --git a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
index 4bd15c332..e11d3ae9f 100644
--- a/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
+++ b/data/maps/SootopolisCity_MysteryEventsHouse_1F/scripts.inc
@@ -106,7 +106,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_227A58:: @ 8227A58
compare VAR_RESULT, 0
goto_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_227AE2
special SavePlayerParty
- special ReducePlayerPartyToThree
+ special ReducePlayerPartyToSelectedMons
msgbox SootopolisCity_MysteryEventsHouse_1F_Text_227D21, 4
closemessage
compare VAR_FACING, 2
diff --git a/data/maps/UnknownMap_25_34/scripts.inc b/data/maps/UnknownMap_25_34/scripts.inc
index eb6bf8da4..2e13983fa 100644
--- a/data/maps/UnknownMap_25_34/scripts.inc
+++ b/data/maps/UnknownMap_25_34/scripts.inc
@@ -18,7 +18,7 @@ LinkContestRoom1_MapScript1_23B79F: @ 823B79F
LinkContestRoom1_EventScript_23B7AF:: @ 823B7AF
call LinkContestRoom1_EventScript_27A133
- special sub_80F8FA0
+ special ScriptGetMultiplayerId
compare VAR_RESULT, 0
call_if 1, LinkContestRoom1_EventScript_23B7EF
compare VAR_RESULT, 1
@@ -134,7 +134,7 @@ LinkContestRoom1_EventScript_23B8ED:: @ 823B8ED
LinkContestRoom1_EventScript_23B8F8:: @ 823B8F8
setvar VAR_RESULT, 32
- special sub_80F8FE8
+ special ScriptRandom
addvar VAR_RESULT, 1
switch VAR_RESULT
case 1, LinkContestRoom1_EventScript_23BA6B
diff --git a/data/pokedex.s b/data/pokedex.s
deleted file mode 100644
index fde603020..000000000
--- a/data/pokedex.s
+++ /dev/null
@@ -1,244 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-.macro unk_dex_struct texts, a2, a3, a4
- .4byte \texts
- .byte \a2, \a3, \a4
- .byte 0 @padding
-.endm
-
-.macro unk_dex_struct_2 text, a2, a3, a4, a5, a6, a7
- .4byte \text
- .byte \a2, \a3, \a4, \a5, \a6, \a7
- .2byte 0 @padding
-.endm
-
-.macro unk_dex_struct_3 text, a2, a3, a4
- .4byte \text
- .byte \a2, \a3, \a4
- .byte 0 @padding
-.endm
-
- .align 2
-gUnknown_0855D30C:: @ 855D30C
- .string "$"
-
-@ 855D30D
- .include "data/text/pokedex_text.inc"
-
-@ 856B5B0
- .include "data/pokedex_entries.inc"
-
- .align 2
-gUnknown_0856E610:: @ 856E610
- .incbin "graphics/pokedex/black.gbapal"
-
- .align 2
-gUnknown_0856E630:: @ 856E630
- .4byte 0x000030c8, 0x000000d1, 0x000010ea, 0x000020f3
-
- .align 2
-gUnknown_0856E640:: @ 856E640
- window_template 0x02, 0x00, 0x00, 0x20, 0x14, 0x00, 0x0001
- window_template 0x02, 0x19, 0x08, 0x02, 0x02, 0x0f, 0x0281
- window_template 0x00, 0x00, 0x0c, 0x20, 0x07, 0x08, 0x0285
- window_template 0x02, 0x12, 0x03, 0x0a, 0x08, 0x09, 0x0365
- window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000
-
- .align 2
-gUnknown_0856E668:: @ 856E668
- .4byte 0x000020ea, 0x000030f7
-
- .align 2
-gUnknown_0856E670:: @ 856E670
- window_template 0x02, 0x00, 0x00, 0x20, 0x14, 0x00, 0x0001
- window_template 0x02, 0x19, 0x08, 0x02, 0x02, 0x0f, 0x0281
- window_template 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0000
-
-sText_TenDashes2:: @ 856E688
- .string "----------$"
-
-@ 856E694
- .include "data/graphics/pokemon/footprint_table.inc"
-
-gUnknown_0856ED08:: @ 856ED08
- .byte 0x00, 0x00, 0x00, 0x00, 0xbb, 0x03, 0xd5, 0x03, 0xbe, 0x03, 0xd8, 0x03, 0xc1, 0x03, 0xdb, 0x03, 0xc4, 0x03, 0xde, 0x03, 0xc7, 0x03, 0xe1, 0x03, 0xca, 0x03, 0xe4, 0x03, 0xcd, 0x03, 0xe7, 0x03
- .byte 0xd0, 0x03, 0xea, 0x03, 0xd3, 0x02, 0xed, 0x02
-
-gUnknown_0856ED30:: @ 856ED30
- unk_dex_struct_3 gUnknown_085E87A5, 0, 0, 5
- unk_dex_struct_3 gUnknown_085E87D6, 6, 0, 5
- unk_dex_struct_3 gUnknown_085E87EF, 12, 0, 5
-
-gUnknown_0856ED48:: @ 856ED48
- unk_dex_struct_2 gUnknown_085E8840, 0, 2, 5, 5, 2, 12
- unk_dex_struct_2 gUnknown_085E887C, 0, 4, 5, 5, 4, 12
- unk_dex_struct_2 gUnknown_085E88A6, 0, 6, 5, 5, 6, 6
- unk_dex_struct_2 gUnknown_085E88A6, 0, 6, 5, 11, 6, 6
- unk_dex_struct_2 gUnknown_085E881F, 0, 8, 5, 5, 8, 12
- unk_dex_struct_2 gUnknown_085E8806, 0, 10, 5, 5, 10, 12
- unk_dex_struct_2 gUnknown_085E88C8, 0, 12, 5, 0, 0, 0
-
- .align 1
-gUnknown_0856ED9C:: @ 856ED9C
- .2byte 0xffff, 0x01ff, 0xffff, 0x0200, 0x03ff, 0x0401, 0xff02, 0x0401, 0xffff, 0x0502, 0xffff, 0x0604, 0xffff, 0xff05
-
- .align 1
-gUnknown_0856EDB8:: @ 856EDB8
- .2byte 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x05ff, 0xffff, 0x0604, 0xffff, 0xff05
-
- .align 1
-gUnknown_0856EDD4:: @ 856EDD4
- .2byte 0xffff, 0x01ff, 0xffff, 0x0200, 0x03ff, 0x0401, 0xff02, 0x0401, 0xffff, 0x0602, 0xffff, 0xffff, 0xffff, 0xff04
-
- .align 1
-gUnknown_0856EDF0:: @ 856EDF0
- .2byte 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x06ff, 0xffff, 0xffff, 0xffff, 0xff04
-
- .align 2
-gUnknown_0856EE0C:: @ 856EE0C
- .4byte gUnknown_085E89A4
- .4byte gUnknown_085E88DF
- .4byte gUnknown_085E89BB
- .4byte gUnknown_085E88E9
- .4byte NULL
- .4byte NULL
-
- .align 2
-gUnknown_0856EE24:: @ 856EE24
- .4byte gUnknown_085E89D4
- .4byte gUnknown_085E88F6
- .4byte gUnknown_085E8A02
- .4byte gUnknown_085E8905
- .4byte gUnknown_085E8A37
- .4byte gUnknown_085E8911
- .4byte gUnknown_085E8A73
- .4byte gUnknown_085E891F
- .4byte gUnknown_085E8AAF
- .4byte gUnknown_085E892D
- .4byte gUnknown_085E8AEA
- .4byte gUnknown_085E893A
- .4byte 0
- .4byte 0
-
-gUnknown_0856EE5C:: @ 856EE5C
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8B26
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8948
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E894C
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8950
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8954
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8958
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E895C
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8960
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8964
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8968
- .4byte 0
- .4byte 0
-
-gUnknown_0856EEB4:: @ 856EEB4
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8B26
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E896B
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E896F
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8974
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E897B
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8981
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8987
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E898D
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8994
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8999
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E899F
- .4byte 0
- .4byte 0
-
-@ read from type table for each type except ???, entry is 7 byte of length
-gUnknown_0856EF14:: @ 856EF14
- .4byte gUnknown_085E8B25
- .4byte gUnknown_085E8B35
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 0
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 7
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 14
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 21
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 28
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 35
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 42
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 49
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 56
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 70
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 77
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 84
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 91
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 98
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 105
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 112
- .4byte gUnknown_085E8B25
- .4byte gTypeNames + 119
- .4byte 0
- .4byte 0
-
-gUnknown_0856EFAC:: @ 856EFAC
- .byte 0x00, 0x01
-
-gUnknown_0856EFAE:: @ 856EFAE
- .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05
-
-gUnknown_0856EFB4:: @ 856EFB4
- .byte 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x00, 0x00
-
- .align 2
-gUnknown_0856EFC8:: @ 856EFC8
- unk_dex_struct gUnknown_0856EE5C, 6, 7, 10
- unk_dex_struct gUnknown_0856EEB4, 8, 9, 11
- unk_dex_struct gUnknown_0856EF14, 10,11, 18
- unk_dex_struct gUnknown_0856EF14, 12, 13, 18
- unk_dex_struct gUnknown_0856EE24, 4, 5, 6
- unk_dex_struct gUnknown_0856EE0C, 2, 3, 2
-
- .align 2
-gUnknown_0856EFF8:: @ 856EFF8
- .4byte 0x000000c8, 0x000010d1, 0x000020ea, 0x000030f3
-
- .align 2
-gUnknown_0856F008:: @ 856F008
- window_template 0x02, 0x00, 0x00, 0x20, 0x14, 0x00, 0x0001
- null_window_template
-
diff --git a/data/pokedex_entries.inc b/data/pokedex_entries.inc
deleted file mode 100644
index ce98a7b26..000000000
--- a/data/pokedex_entries.inc
+++ /dev/null
@@ -1,776 +0,0 @@
- .align 2
-gPokedexEntries:: @ 856B5B0
- .string "UNKNOWN$", 12
- pokedex_entry 0, 0, gDummyPokedexText, 256, 0, 256, 0
- .string "SEED$", 12
- pokedex_entry 7, 69, gBulbasaurPokedexText, 356, 17, 256, 0
- .string "SEED$", 12
- pokedex_entry 10, 130, gIvysaurPokedexText, 335, 13, 256, 0
- .string "SEED$", 12
- pokedex_entry 20, 1000, gVenusaurPokedexText, 256, 0, 388, 6
- .string "LIZARD$", 12
- pokedex_entry 6, 85, gCharmanderPokedexText, 444, 18, 256, 0
- .string "FLAME$", 12
- pokedex_entry 11, 190, gCharmeleonPokedexText, 302, 9, 256, 0
- .string "FLAME$", 12
- pokedex_entry 17, 905, gCharizardPokedexText, 256, 1, 302, 3
- .string "TINY TURTLE$", 12
- pokedex_entry 5, 90, gSquirtlePokedexText, 412, 18, 256, 0
- .string "TURTLE$", 12
- pokedex_entry 10, 225, gWartortlePokedexText, 332, 10, 256, 0
- .string "SHELLFISH$", 12
- pokedex_entry 16, 855, gBlastoisePokedexText, 256, -1, 293, 2
- .string "WORM$", 12
- pokedex_entry 3, 29, gCaterpiePokedexText, 549, 22, 256, 0
- .string "COCOON$", 12
- pokedex_entry 7, 99, gMetapodPokedexText, 350, 18, 256, 0
- .string "BUTTERFLY$", 12
- pokedex_entry 11, 320, gButterfreePokedexText, 312, 2, 256, 0
- .string "HAIRY BUG$", 12
- pokedex_entry 3, 32, gWeedlePokedexText, 455, 22, 256, 0
- .string "COCOON$", 12
- pokedex_entry 6, 100, gKakunaPokedexText, 424, 17, 256, 0
- .string "POISON BEE$", 12
- pokedex_entry 10, 295, gBeedrillPokedexText, 366, 2, 256, 0
- .string "TINY BIRD$", 12
- pokedex_entry 3, 18, gPidgeyPokedexText, 508, -3, 256, 0
- .string "BIRD$", 12
- pokedex_entry 11, 300, gPidgeottoPokedexText, 331, 10, 256, 0
- .string "BIRD$", 12
- pokedex_entry 15, 395, gPidgeotPokedexText, 269, 0, 256, 0
- .string "MOUSE$", 12
- pokedex_entry 3, 35, gRattataPokedexText, 481, 21, 256, 0
- .string "MOUSE$", 12
- pokedex_entry 7, 185, gRaticatePokedexText, 459, 18, 256, 0
- .string "TINY BIRD$", 12
- pokedex_entry 3, 20, gSpearowPokedexText, 571, 22, 256, 0
- .string "BEAK$", 12
- pokedex_entry 12, 380, gFearowPokedexText, 278, 1, 256, 0
- .string "SNAKE$", 12
- pokedex_entry 20, 69, gEkansPokedexText, 298, 12, 256, 0
- .string "COBRA$", 12
- pokedex_entry 35, 650, gArbokPokedexText, 256, 0, 296, 2
- .string "MOUSE$", 12
- pokedex_entry 4, 60, gPikachuPokedexText, 479, 19, 256, 0
- .string "MOUSE$", 12
- pokedex_entry 8, 300, gRaichuPokedexText, 426, 13, 256, 0
- .string "MOUSE$", 12
- pokedex_entry 6, 120, gSandshrewPokedexText, 365, 18, 256, 0
- .string "MOUSE$", 12
- pokedex_entry 10, 295, gSandslashPokedexText, 341, 11, 256, 0
- .string "POISON PIN$", 12
- pokedex_entry 4, 70, gNidoranFPokedexText, 488, 21, 256, 0
- .string "POISON PIN$", 12
- pokedex_entry 8, 200, gNidorinaPokedexText, 381, 15, 256, 0
- .string "DRILL$", 12
- pokedex_entry 13, 600, gNidoqueenPokedexText, 293, 4, 256, 0
- .string "POISON PIN$", 12
- pokedex_entry 5, 90, gNidoranMPokedexText, 511, 20, 256, 0
- .string "POISON PIN$", 12
- pokedex_entry 9, 195, gNidorinoPokedexText, 408, 15, 256, 0
- .string "DRILL$", 12
- pokedex_entry 14, 620, gNidokingPokedexText, 256, 0, 256, 0
- .string "FAIRY$", 12
- pokedex_entry 6, 75, gClefairyPokedexText, 441, 20, 256, 0
- .string "FAIRY$", 12
- pokedex_entry 13, 400, gClefablePokedexText, 256, 5, 256, 0
- .string "FOX$", 12
- pokedex_entry 6, 99, gVulpixPokedexText, 542, 19, 256, 0
- .string "FOX$", 12
- pokedex_entry 11, 199, gNinetalesPokedexText, 339, 10, 256, 0
- .string "BALLOON$", 12
- pokedex_entry 5, 55, gJigglypuffPokedexText, 433, 2, 256, 0
- .string "BALLOON$", 12
- pokedex_entry 10, 120, gWigglytuffPokedexText, 328, 11, 256, 0
- .string "BAT$", 12
- pokedex_entry 8, 75, gZubatPokedexText, 362, -5, 256, 0
- .string "BAT$", 12
- pokedex_entry 16, 550, gGolbatPokedexText, 256, 1, 256, 0
- .string "WEED$", 12
- pokedex_entry 5, 54, gOddishPokedexText, 423, 19, 256, 0
- .string "WEED$", 12
- pokedex_entry 8, 86, gGloomPokedexText, 329, 13, 256, 0
- .string "FLOWER$", 12
- pokedex_entry 12, 186, gVileplumePokedexText, 256, 4, 256, 0
- .string "MUSHROOM$", 12
- pokedex_entry 3, 54, gParasPokedexText, 593, 22, 256, 0
- .string "MUSHROOM$", 12
- pokedex_entry 10, 295, gParasectPokedexText, 307, 8, 256, 0
- .string "INSECT$", 12
- pokedex_entry 10, 300, gVenonatPokedexText, 360, 0, 256, -1
- .string "POISON MOTH$", 12
- pokedex_entry 15, 125, gVenomothPokedexText, 285, 2, 256, 1
- .string "MOLE$", 12
- pokedex_entry 2, 8, gDiglettPokedexText, 833, 25, 256, 0
- .string "MOLE$", 12
- pokedex_entry 7, 333, gDugtrioPokedexText, 406, 18, 256, 0
- .string "SCRATCH CAT$", 12
- pokedex_entry 4, 42, gMeowthPokedexText, 480, 19, 256, 0
- .string "CLASSY CAT$", 12
- pokedex_entry 10, 320, gPersianPokedexText, 320, 10, 256, 0
- .string "DUCK$", 12
- pokedex_entry 8, 196, gPsyduckPokedexText, 369, 15, 256, 0
- .string "DUCK$", 12
- pokedex_entry 17, 766, gGolduckPokedexText, 256, 1, 273, 1
- .string "PIG MONKEY$", 12
- pokedex_entry 5, 280, gMankeyPokedexText, 404, 19, 256, 0
- .string "PIG MONKEY$", 12
- pokedex_entry 10, 320, gPrimeapePokedexText, 326, 10, 256, 0
- .string "PUPPY$", 12
- pokedex_entry 7, 190, gGrowlithePokedexText, 346, 14, 256, 0
- .string "LEGENDARY$", 12
- pokedex_entry 19, 1550, gArcaninePokedexText, 256, 1, 312, 4
- .string "TADPOLE$", 12
- pokedex_entry 6, 124, gPoliwagPokedexText, 369, 20, 256, 0
- .string "TADPOLE$", 12
- pokedex_entry 10, 200, gPoliwhirlPokedexText, 288, 11, 256, 0
- .string "TADPOLE$", 12
- pokedex_entry 13, 540, gPoliwrathPokedexText, 256, 6, 256, 0
- .string "PSI$", 12
- pokedex_entry 9, 195, gAbraPokedexText, 363, 14, 256, 0
- .string "PSI$", 12
- pokedex_entry 13, 565, gKadabraPokedexText, 256, 3, 256, 0
- .string "PSI$", 12
- pokedex_entry 15, 480, gAlakazamPokedexText, 256, 3, 256, 0
- .string "SUPERPOWER$", 12
- pokedex_entry 8, 195, gMachopPokedexText, 342, 14, 256, 0
- .string "SUPERPOWER$", 12
- pokedex_entry 15, 705, gMachokePokedexText, 323, 9, 257, 0
- .string "SUPERPOWER$", 12
- pokedex_entry 16, 1300, gMachampPokedexText, 280, 1, 269, -1
- .string "FLOWER$", 12
- pokedex_entry 7, 40, gBellsproutPokedexText, 354, 16, 256, 0
- .string "FLYCATCHER$", 12
- pokedex_entry 10, 64, gWeepinbellPokedexText, 256, 0, 256, 0
- .string "FLYCATCHER$", 12
- pokedex_entry 17, 155, gVictreebelPokedexText, 256, 1, 312, 3
- .string "JELLYFISH$", 12
- pokedex_entry 9, 455, gTentacoolPokedexText, 256, 0, 256, 0
- .string "JELLYFISH$", 12
- pokedex_entry 16, 550, gTentacruelPokedexText, 256, 0, 312, 1
- .string "ROCK$", 12
- pokedex_entry 4, 200, gGeodudePokedexText, 347, 18, 256, 0
- .string "ROCK$", 12
- pokedex_entry 10, 1050, gGravelerPokedexText, 256, 2, 256, 0
- .string "MEGATON$", 12
- pokedex_entry 14, 3000, gGolemPokedexText, 256, 3, 296, 2
- .string "FIRE HORSE$", 12
- pokedex_entry 10, 300, gPonytaPokedexText, 283, 8, 256, 0
- .string "FIRE HORSE$", 12
- pokedex_entry 17, 950, gRapidashPokedexText, 256, 0, 289, 1
- .string "DOPEY$", 12
- pokedex_entry 12, 360, gSlowpokePokedexText, 256, 10, 256, 0
- .string "HERMIT CRAB$", 12
- pokedex_entry 16, 785, gSlowbroPokedexText, 256, 6, 296, 2
- .string "MAGNET$", 12
- pokedex_entry 3, 60, gMagnemitePokedexText, 288, -9, 256, 0
- .string "MAGNET$", 12
- pokedex_entry 10, 600, gMagnetonPokedexText, 292, 1, 256, 0
- .string "WILD DUCK$", 12
- pokedex_entry 8, 150, gFarfetchdPokedexText, 330, 2, 293, 2
- .string "TWIN BIRD$", 12
- pokedex_entry 14, 392, gDoduoPokedexText, 256, 3, 257, -1
- .string "TRIPLE BIRD$", 12
- pokedex_entry 18, 852, gDodrioPokedexText, 256, 0, 268, 0
- .string "SEA LION$", 12
- pokedex_entry 11, 900, gSeelPokedexText, 297, 8, 256, 0
- .string "SEA LION$", 12
- pokedex_entry 17, 1200, gDewgongPokedexText, 256, 0, 275, 0
- .string "SLUDGE$", 12
- pokedex_entry 9, 300, gGrimerPokedexText, 258, 10, 256, 0
- .string "SLUDGE$", 12
- pokedex_entry 12, 300, gMukPokedexText, 256, 2, 256, 0
- .string "BIVALVE$", 12
- pokedex_entry 3, 40, gShellderPokedexText, 675, 24, 256, 0
- .string "BIVALVE$", 12
- pokedex_entry 15, 1325, gCloysterPokedexText, 256, 0, 269, 1
- .string "GAS$", 12
- pokedex_entry 13, 1, gGastlyPokedexText, 256, 0, 256, 0
- .string "GAS$", 12
- pokedex_entry 16, 1, gHaunterPokedexText, 256, 2, 293, 2
- .string "SHADOW$", 12
- pokedex_entry 15, 405, gGengarPokedexText, 256, 2, 302, 2
- .string "ROCK SNAKE$", 12
- pokedex_entry 88, 2100, gOnixPokedexText, 256, 1, 515, 14
- .string "HYPNOSIS$", 12
- pokedex_entry 10, 324, gDrowzeePokedexText, 274, 6, 256, 0
- .string "HYPNOSIS$", 12
- pokedex_entry 16, 756, gHypnoPokedexText, 256, 3, 257, 0
- .string "RIVER CRAB$", 12
- pokedex_entry 4, 65, gKrabbyPokedexText, 469, 20, 256, 0
- .string "PINCER$", 12
- pokedex_entry 13, 600, gKinglerPokedexText, 256, 2, 256, 0
- .string "BALL$", 12
- pokedex_entry 5, 104, gVoltorbPokedexText, 364, -8, 256, 0
- .string "BALL$", 12
- pokedex_entry 12, 666, gElectrodePokedexText, 256, 0, 256, 0
- .string "EGG$", 12
- pokedex_entry 4, 25, gExeggcutePokedexText, 489, -4, 256, 0
- .string "COCONUT$", 12
- pokedex_entry 20, 1200, gExeggutorPokedexText, 256, 0, 309, 5
- .string "LONELY$", 12
- pokedex_entry 4, 65, gCubonePokedexText, 545, 21, 256, 0
- .string "BONE KEEPER$", 12
- pokedex_entry 10, 450, gMarowakPokedexText, 293, 12, 256, 0
- .string "KICKING$", 12
- pokedex_entry 15, 498, gHitmonleePokedexText, 256, 3, 259, 1
- .string "PUNCHING$", 12
- pokedex_entry 14, 502, gHitmonchanPokedexText, 256, 2, 277, 2
- .string "LICKING$", 12
- pokedex_entry 12, 655, gLickitungPokedexText, 256, 4, 256, 0
- .string "POISON GAS$", 12
- pokedex_entry 6, 10, gKoffingPokedexText, 369, -1, 256, 0
- .string "POISON GAS$", 12
- pokedex_entry 12, 95, gWeezingPokedexText, 305, 3, 256, 0
- .string "SPIKES$", 12
- pokedex_entry 10, 1150, gRhyhornPokedexText, 267, 6, 256, 0
- .string "DRILL$", 12
- pokedex_entry 19, 1200, gRhydonPokedexText, 256, 1, 299, 2
- .string "EGG$", 12
- pokedex_entry 11, 346, gChanseyPokedexText, 257, 7, 256, 0
- .string "VINE$", 12
- pokedex_entry 10, 350, gTangelaPokedexText, 304, 1, 256, 0
- .string "PARENT$", 12
- pokedex_entry 22, 800, gKangaskhanPokedexText, 256, 0, 387, 8
- .string "DRAGON$", 12
- pokedex_entry 4, 80, gHorseaPokedexText, 399, -1, 256, 0
- .string "DRAGON$", 12
- pokedex_entry 12, 250, gSeadraPokedexText, 299, 3, 256, 0
- .string "GOLDFISH$", 12
- pokedex_entry 6, 150, gGoldeenPokedexText, 379, 4, 256, 0
- .string "GOLDFISH$", 12
- pokedex_entry 13, 390, gSeakingPokedexText, 256, 3, 256, 0
- .string "STAR SHAPE$", 12
- pokedex_entry 8, 345, gStaryuPokedexText, 326, 1, 256, 0
- .string "MYSTERIOUS$", 12
- pokedex_entry 11, 800, gStarmiePokedexText, 301, 3, 256, 0
- .string "BARRIER$", 12
- pokedex_entry 13, 545, gMrmimePokedexText, 258, 6, 256, 0
- .string "MANTIS$", 12
- pokedex_entry 15, 560, gScytherPokedexText, 256, 1, 293, 2
- .string "HUMAN SHAPE$", 12
- pokedex_entry 14, 406, gJynxPokedexText, 256, 3, 300, 1
- .string "ELECTRIC$", 12
- pokedex_entry 11, 300, gElectabuzzPokedexText, 351, 8, 256, 0
- .string "SPITFIRE$", 12
- pokedex_entry 13, 445, gMagmarPokedexText, 277, 5, 256, 0
- .string "STAG BEETLE$", 12
- pokedex_entry 15, 550, gPinsirPokedexText, 256, 2, 257, 0
- .string "WILD BULL$", 12
- pokedex_entry 14, 884, gTaurosPokedexText, 256, 0, 256, 0
- .string "FISH$", 12
- pokedex_entry 9, 100, gMagikarpPokedexText, 310, 4, 256, 0
- .string "ATROCIOUS$", 12
- pokedex_entry 65, 2350, gGyaradosPokedexText, 256, 6, 481, 13
- .string "TRANSPORT$", 12
- pokedex_entry 25, 2200, gLaprasPokedexText, 257, 10, 423, 8
- .string "TRANSFORM$", 12
- pokedex_entry 3, 40, gDittoPokedexText, 633, 23, 256, 0
- .string "EVOLUTION$", 12
- pokedex_entry 3, 65, gEeveePokedexText, 476, 18, 256, 0
- .string "BUBBLE JET$", 12
- pokedex_entry 10, 290, gVaporeonPokedexText, 316, 8, 256, 0
- .string "LIGHTNING$", 12
- pokedex_entry 8, 245, gJolteonPokedexText, 283, 8, 256, 0
- .string "FLAME$", 12
- pokedex_entry 9, 250, gFlareonPokedexText, 306, 12, 256, 0
- .string "VIRTUAL$", 12
- pokedex_entry 8, 365, gPorygonPokedexText, 328, 15, 256, 0
- .string "SPIRAL$", 12
- pokedex_entry 4, 75, gOmanytePokedexText, 521, 22, 256, 0
- .string "SPIRAL$", 12
- pokedex_entry 10, 350, gOmastarPokedexText, 307, 7, 256, 0
- .string "SHELLFISH$", 12
- pokedex_entry 5, 115, gKabutoPokedexText, 454, 21, 256, 0
- .string "SHELLFISH$", 12
- pokedex_entry 13, 405, gKabutopsPokedexText, 271, 3, 256, 0
- .string "FOSSIL$", 12
- pokedex_entry 18, 590, gAerodactylPokedexText, 256, 0, 302, 4
- .string "SLEEPING$", 12
- pokedex_entry 21, 4600, gSnorlaxPokedexText, 256, 4, 423, 11
- .string "FREEZE$", 12
- pokedex_entry 17, 554, gArticunoPokedexText, 256, 0, 309, 2
- .string "ELECTRIC$", 12
- pokedex_entry 16, 526, gZapdosPokedexText, 256, 0, 318, 3
- .string "FLAME$", 12
- pokedex_entry 20, 600, gMoltresPokedexText, 270, 0, 387, 8
- .string "DRAGON$", 12
- pokedex_entry 18, 33, gDratiniPokedexText, 256, 8, 386, 6
- .string "DRAGON$", 12
- pokedex_entry 40, 165, gDragonairPokedexText, 256, 0, 411, 5
- .string "DRAGON$", 12
- pokedex_entry 22, 2100, gDragonitePokedexText, 256, 0, 309, 4
- .string "GENETIC$", 12
- pokedex_entry 20, 1220, gMewtwoPokedexText, 256, 0, 309, 4
- .string "NEW SPECIES$", 12
- pokedex_entry 4, 40, gMewPokedexText, 457, -2, 256, 0
- .string "LEAF$", 12
- pokedex_entry 9, 64, gChikoritaPokedexText, 512, 20, 256, 0
- .string "LEAF$", 12
- pokedex_entry 12, 158, gBayleefPokedexText, 296, 4, 256, 0
- .string "HERB$", 12
- pokedex_entry 18, 1005, gMeganiumPokedexText, 256, 0, 277, 1
- .string "FIRE MOUSE$", 12
- pokedex_entry 5, 79, gCyndaquilPokedexText, 539, 21, 256, 0
- .string "VOLCANO$", 12
- pokedex_entry 9, 190, gQuilavaPokedexText, 329, 11, 256, 0
- .string "VOLCANO$", 12
- pokedex_entry 17, 795, gTyphlosionPokedexText, 256, 0, 268, 1
- .string "BIG JAW$", 12
- pokedex_entry 6, 95, gTotodilePokedexText, 487, 20, 256, 0
- .string "BIG JAW$", 12
- pokedex_entry 11, 250, gCroconawPokedexText, 378, 13, 256, 0
- .string "BIG JAW$", 12
- pokedex_entry 23, 888, gFeraligatrPokedexText, 256, 0, 342, 7
- .string "SCOUT$", 12
- pokedex_entry 8, 60, gSentretPokedexText, 439, 12, 256, 0
- .string "LONG BODY$", 12
- pokedex_entry 18, 325, gFurretPokedexText, 346, 11, 256, 0
- .string "OWL$", 12
- pokedex_entry 7, 212, gHoothootPokedexText, 380, -2, 256, 0
- .string "OWL$", 12
- pokedex_entry 16, 408, gNoctowlPokedexText, 278, 3, 256, 0
- .string "FIVE STAR$", 12
- pokedex_entry 10, 108, gLedybaPokedexText, 256, 4, 256, 0
- .string "FIVE STAR$", 12
- pokedex_entry 14, 356, gLedianPokedexText, 256, 2, 256, 0
- .string "STRING SPIT$", 12
- pokedex_entry 5, 85, gSpinarakPokedexText, 414, 21, 256, 0
- .string "LONG LEG$", 12
- pokedex_entry 11, 335, gAriadosPokedexText, 316, 8, 256, 0
- .string "BAT$", 12
- pokedex_entry 18, 750, gCrobatPokedexText, 256, 0, 281, 1
- .string "ANGLER$", 12
- pokedex_entry 5, 120, gChinchouPokedexText, 424, -2, 256, 0
- .string "LIGHT$", 12
- pokedex_entry 12, 225, gLanturnPokedexText, 269, 6, 256, 0
- .string "TINY MOUSE$", 12
- pokedex_entry 3, 20, gPichuPokedexText, 508, 20, 256, 0
- .string "STAR SHAPE$", 12
- pokedex_entry 3, 30, gCleffaPokedexText, 462, 23, 256, 0
- .string "BALLOON$", 12
- pokedex_entry 3, 10, gIgglybuffPokedexText, 457, -1, 256, 0
- .string "SPIKE BALL$", 12
- pokedex_entry 3, 15, gTogepiPokedexText, 507, 23, 256, 0
- .string "HAPPINESS$", 12
- pokedex_entry 6, 32, gTogeticPokedexText, 424, 17, 256, 0
- .string "TINY BIRD$", 12
- pokedex_entry 2, 20, gNatuPokedexText, 610, 25, 256, 0
- .string "MYSTIC$", 12
- pokedex_entry 15, 150, gXatuPokedexText, 256, 6, 318, 4
- .string "WOOL$", 12
- pokedex_entry 6, 78, gMareepPokedexText, 379, 18, 256, 0
- .string "WOOL$", 12
- pokedex_entry 8, 133, gFlaaffyPokedexText, 372, 15, 256, 0
- .string "LIGHT$", 12
- pokedex_entry 14, 615, gAmpharosPokedexText, 256, 4, 256, 0
- .string "FLOWER$", 12
- pokedex_entry 4, 58, gBellossomPokedexText, 472, 21, 256, 0
- .string "AQUA MOUSE$", 12
- pokedex_entry 4, 85, gMarillPokedexText, 476, 20, 256, 0
- .string "AQUA RABBIT$", 12
- pokedex_entry 8, 285, gAzumarillPokedexText, 448, 16, 256, 0
- .string "IMITATION$", 12
- pokedex_entry 12, 380, gSudowoodoPokedexText, 305, 8, 256, 0
- .string "FROG$", 12
- pokedex_entry 11, 339, gPolitoedPokedexText, 289, 6, 256, 0
- .string "COTTONWEED$", 12
- pokedex_entry 4, 5, gHoppipPokedexText, 562, -7, 256, 0
- .string "COTTONWEED$", 12
- pokedex_entry 6, 10, gSkiploomPokedexText, 387, 0, 256, 0
- .string "COTTONWEED$", 12
- pokedex_entry 8, 30, gJumpluffPokedexText, 418, -4, 256, 0
- .string "LONG TAIL$", 12
- pokedex_entry 8, 115, gAipomPokedexText, 363, 6, 256, 0
- .string "SEED$", 12
- pokedex_entry 3, 18, gSunkernPokedexText, 541, 0, 256, 0
- .string "SUN$", 12
- pokedex_entry 8, 85, gSunfloraPokedexText, 444, 15, 256, 0
- .string "CLEAR WING$", 12
- pokedex_entry 12, 380, gYanmaPokedexText, 274, -1, 256, 0
- .string "WATER FISH$", 12
- pokedex_entry 4, 85, gWooperPokedexText, 479, 21, 256, 0
- .string "WATER FISH$", 12
- pokedex_entry 14, 750, gQuagsirePokedexText, 256, 4, 256, 0
- .string "SUN$", 12
- pokedex_entry 9, 265, gEspeonPokedexText, 363, 14, 256, 0
- .string "MOONLIGHT$", 12
- pokedex_entry 10, 270, gUmbreonPokedexText, 317, 11, 256, 0
- .string "DARKNESS$", 12
- pokedex_entry 5, 21, gMurkrowPokedexText, 401, -8, 256, 1
- .string "ROYAL$", 12
- pokedex_entry 20, 795, gSlowkingPokedexText, 256, 0, 309, 5
- .string "SCREECH$", 12
- pokedex_entry 7, 10, gMisdreavusPokedexText, 407, -8, 256, 0
- .string "SYMBOL$", 12
- pokedex_entry 5, 50, gUnownPokedexText, 411, 2, 256, 0
- .string "PATIENT$", 12
- pokedex_entry 13, 285, gWobbuffetPokedexText, 274, 4, 256, 0
- .string "LONG NECK$", 12
- pokedex_entry 15, 415, gGirafarigPokedexText, 281, 1, 256, 0
- .string "BAGWORM$", 12
- pokedex_entry 6, 72, gPinecoPokedexText, 445, 2, 256, 0
- .string "BAGWORM$", 12
- pokedex_entry 12, 1258, gForretressPokedexText, 293, 5, 256, 0
- .string "LAND SNAKE$", 12
- pokedex_entry 15, 140, gDunsparcePokedexText, 316, 17, 256, 0
- .string "FLYSCORPION$", 12
- pokedex_entry 11, 648, gGligarPokedexText, 350, -1, 256, 0
- .string "IRON SNAKE$", 12
- pokedex_entry 92, 4000, gSteelixPokedexText, 256, 0, 516, 13
- .string "FAIRY$", 12
- pokedex_entry 6, 78, gSnubbullPokedexText, 465, 19, 256, 0
- .string "FAIRY$", 12
- pokedex_entry 14, 487, gGranbullPokedexText, 256, 4, 256, 0
- .string "BALLOON$", 12
- pokedex_entry 5, 39, gQwilfishPokedexText, 430, 0, 256, 0
- .string "PINCER$", 12
- pokedex_entry 18, 1180, gScizorPokedexText, 278, 1, 256, 0
- .string "MOLD$", 12
- pokedex_entry 6, 205, gShucklePokedexText, 485, 18, 256, 0
- .string "SINGLE HORN$", 12
- pokedex_entry 15, 540, gHeracrossPokedexText, 256, 0, 256, 0
- .string "SHARP CLAW$", 12
- pokedex_entry 9, 280, gSneaselPokedexText, 413, -3, 256, 0
- .string "LITTLE BEAR$", 12
- pokedex_entry 6, 88, gTeddiursaPokedexText, 455, 19, 256, 0
- .string "HIBERNATOR$", 12
- pokedex_entry 18, 1258, gUrsaringPokedexText, 256, 0, 256, 0
- .string "LAVA$", 12
- pokedex_entry 7, 350, gSlugmaPokedexText, 329, 15, 256, 0
- .string "LAVA$", 12
- pokedex_entry 8, 550, gMagcargoPokedexText, 332, 15, 256, 0
- .string "PIG$", 12
- pokedex_entry 4, 65, gSwinubPokedexText, 324, 20, 256, 0
- .string "SWINE$", 12
- pokedex_entry 11, 558, gPiloswinePokedexText, 306, 10, 256, 0
- .string "CORAL$", 12
- pokedex_entry 6, 50, gCorsolaPokedexText, 410, 15, 256, 0
- .string "JET$", 12
- pokedex_entry 6, 120, gRemoraidPokedexText, 316, 4, 256, 0
- .string "JET$", 12
- pokedex_entry 9, 285, gOctilleryPokedexText, 296, 3, 256, 0
- .string "DELIVERY$", 12
- pokedex_entry 9, 160, gDelibirdPokedexText, 293, 11, 256, 0
- .string "KITE$", 12
- pokedex_entry 21, 2200, gMantinePokedexText, 256, 0, 342, 7
- .string "ARMOR BIRD$", 12
- pokedex_entry 17, 505, gSkarmoryPokedexText, 256, 0, 271, 1
- .string "DARK$", 12
- pokedex_entry 6, 108, gHoundourPokedexText, 393, 16, 256, 0
- .string "DARK$", 12
- pokedex_entry 14, 350, gHoundoomPokedexText, 256, 4, 256, 0
- .string "DRAGON$", 12
- pokedex_entry 18, 1520, gKingdraPokedexText, 256, 0, 287, 0
- .string "LONG NOSE$", 12
- pokedex_entry 5, 335, gPhanpyPokedexText, 465, 21, 256, 0
- .string "ARMOR$", 12
- pokedex_entry 11, 1200, gDonphanPokedexText, 313, 9, 256, 0
- .string "VIRTUAL$", 12
- pokedex_entry 6, 325, gPorygon2PokedexText, 320, 17, 256, 0
- .string "BIG HORN$", 12
- pokedex_entry 14, 712, gStantlerPokedexText, 256, 0, 256, 0
- .string "PAINTER$", 12
- pokedex_entry 12, 580, gSmearglePokedexText, 287, 5, 256, 0
- .string "SCUFFLE$", 12
- pokedex_entry 7, 210, gTyroguePokedexText, 292, 9, 256, 0
- .string "HANDSTAND$", 12
- pokedex_entry 14, 480, gHitmontopPokedexText, 256, 2, 257, 0
- .string "KISS$", 12
- pokedex_entry 4, 60, gSmoochumPokedexText, 440, 20, 256, 0
- .string "ELECTRIC$", 12
- pokedex_entry 6, 235, gElekidPokedexText, 363, 14, 256, 0
- .string "LIVE COAL$", 12
- pokedex_entry 7, 214, gMagbyPokedexText, 284, 13, 256, 0
- .string "MILK COW$", 12
- pokedex_entry 12, 755, gMiltankPokedexText, 280, 5, 256, 0
- .string "HAPPINESS$", 12
- pokedex_entry 15, 468, gBlisseyPokedexText, 256, 4, 310, 3
- .string "THUNDER$", 12
- pokedex_entry 19, 1780, gRaikouPokedexText, 256, 0, 345, 7
- .string "VOLCANO$", 12
- pokedex_entry 21, 1980, gEnteiPokedexText, 259, 0, 345, 7
- .string "AURORA$", 12
- pokedex_entry 20, 1870, gSuicunePokedexText, 269, 0, 345, 7
- .string "ROCK SKIN$", 12
- pokedex_entry 6, 720, gLarvitarPokedexText, 472, 18, 256, 0
- .string "HARD SHELL$", 12
- pokedex_entry 12, 1520, gPupitarPokedexText, 292, 8, 256, 0
- .string "ARMOR$", 12
- pokedex_entry 20, 2020, gTyranitarPokedexText, 256, 0, 345, 7
- .string "DIVING$", 12
- pokedex_entry 52, 2160, gLugiaPokedexText, 256, 0, 721, 19
- .string "RAINBOW$", 12
- pokedex_entry 38, 1990, gHoOhPokedexText, 256, 0, 610, 17
- .string "TIME TRAVEL$", 12
- pokedex_entry 6, 50, gCelebiPokedexText, 393, -10, 256, 0
- .string "WOOD GECKO$", 12
- pokedex_entry 5, 50, gTreeckoPokedexText, 541, 19, 256, 0
- .string "WOOD GECKO$", 12
- pokedex_entry 9, 216, gGrovylePokedexText, 360, 5, 256, 0
- .string "FOREST$", 12
- pokedex_entry 17, 522, gSceptilePokedexText, 256, -1, 275, 2
- .string "CHICK$", 12
- pokedex_entry 4, 25, gTorchicPokedexText, 566, 19, 256, 0
- .string "YOUNG FOWL$", 12
- pokedex_entry 9, 195, gCombuskenPokedexText, 343, 5, 256, 0
- .string "BLAZE$", 12
- pokedex_entry 19, 520, gBlazikenPokedexText, 256, 0, 301, 4
- .string "MUD FISH$", 12
- pokedex_entry 4, 76, gMudkipPokedexText, 535, 20, 256, 0
- .string "MUD FISH$", 12
- pokedex_entry 7, 280, gMarshtompPokedexText, 340, 7, 256, 0
- .string "MUD FISH$", 12
- pokedex_entry 15, 819, gSwampertPokedexText, 256, 0, 256, 0
- .string "BITE$", 12
- pokedex_entry 5, 136, gPoochyenaPokedexText, 481, 19, 256, 0
- .string "BITE$", 12
- pokedex_entry 10, 370, gMightyenaPokedexText, 362, 9, 256, 0
- .string "TINYRACCOON$", 12
- pokedex_entry 4, 175, gZigzagoonPokedexText, 560, 22, 256, 0
- .string "RUSHING$", 12
- pokedex_entry 5, 325, gLinoonePokedexText, 321, 7, 256, 0
- .string "WORM$", 12
- pokedex_entry 3, 36, gWurmplePokedexText, 711, 24, 256, 0
- .string "COCOON$", 12
- pokedex_entry 6, 100, gSilcoonPokedexText, 431, 19, 256, 0
- .string "BUTTERFLY$", 12
- pokedex_entry 10, 284, gBeautiflyPokedexText, 298, -1, 256, 0
- .string "COCOON$", 12
- pokedex_entry 7, 115, gCascoonPokedexText, 391, 20, 256, 0
- .string "POISON MOTH$", 12
- pokedex_entry 12, 316, gDustoxPokedexText, 269, 1, 256, 0
- .string "WATER WEED$", 12
- pokedex_entry 5, 26, gLotadPokedexText, 406, 19, 256, 0
- .string "JOLLY$", 12
- pokedex_entry 12, 325, gLombrePokedexText, 277, 9, 256, 0
- .string "CAREFREE$", 12
- pokedex_entry 15, 550, gLudicoloPokedexText, 256, 0, 268, -1
- .string "ACORN$", 12
- pokedex_entry 5, 40, gSeedotPokedexText, 472, 20, 256, 0
- .string "WILY$", 12
- pokedex_entry 10, 280, gNuzleafPokedexText, 299, 10, 256, 0
- .string "WICKED$", 12
- pokedex_entry 13, 596, gShiftryPokedexText, 290, 4, 256, 0
- .string "TINYSWALLOW$", 12
- pokedex_entry 3, 23, gTaillowPokedexText, 465, 21, 256, 0
- .string "SWALLOW$", 12
- pokedex_entry 7, 198, gSwellowPokedexText, 428, 15, 256, 0
- .string "SEAGULL$", 12
- pokedex_entry 6, 95, gWingullPokedexText, 295, -2, 256, 0
- .string "WATER BIRD$", 12
- pokedex_entry 12, 280, gPelipperPokedexText, 288, 1, 256, 0
- .string "FEELING$", 12
- pokedex_entry 4, 66, gRaltsPokedexText, 457, -3, 256, 0
- .string "EMOTION$", 12
- pokedex_entry 8, 202, gKirliaPokedexText, 354, 0, 256, 0
- .string "EMBRACE$", 12
- pokedex_entry 16, 484, gGardevoirPokedexText, 256, 0, 256, 0
- .string "POND SKATER$", 12
- pokedex_entry 5, 17, gSurskitPokedexText, 375, 17, 256, 0
- .string "EYEBALL$", 12
- pokedex_entry 8, 36, gMasquerainPokedexText, 378, 8, 256, 0
- .string "MUSHROOM$", 12
- pokedex_entry 4, 45, gShroomishPokedexText, 513, 22, 256, 0
- .string "MUSHROOM$", 12
- pokedex_entry 12, 392, gBreloomPokedexText, 324, 6, 256, 0
- .string "SLACKER$", 12
- pokedex_entry 8, 240, gSlakothPokedexText, 291, 16, 256, 0
- .string "WILD MONKEY$", 12
- pokedex_entry 14, 465, gVigorothPokedexText, 301, 2, 256, 0
- .string "LAZY$", 12
- pokedex_entry 20, 1305, gSlakingPokedexText, 256, 2, 300, 1
- .string "TRAINEE$", 12
- pokedex_entry 5, 55, gNincadaPokedexText, 405, 21, 256, 0
- .string "NINJA$", 12
- pokedex_entry 8, 120, gNinjaskPokedexText, 383, -9, 256, 0
- .string "SHED$", 12
- pokedex_entry 8, 12, gShedinjaPokedexText, 372, -8, 256, 0
- .string "WHISPER$", 12
- pokedex_entry 6, 163, gWhismurPokedexText, 373, 17, 256, 0
- .string "BIG VOICE$", 12
- pokedex_entry 10, 405, gLoudredPokedexText, 356, 10, 256, 0
- .string "LOUD NOISE$", 12
- pokedex_entry 15, 840, gExploudPokedexText, 284, 1, 256, 0
- .string "GUTS$", 12
- pokedex_entry 10, 864, gMakuhitaPokedexText, 256, 10, 256, 0
- .string "ARM THRUST$", 12
- pokedex_entry 23, 2538, gHariyamaPokedexText, 256, 0, 343, 7
- .string "POLKA DOT$", 12
- pokedex_entry 2, 20, gAzurillPokedexText, 603, 23, 256, 0
- .string "COMPASS$", 12
- pokedex_entry 10, 970, gNosepassPokedexText, 256, 9, 289, 3
- .string "KITTEN$", 12
- pokedex_entry 6, 110, gSkittyPokedexText, 492, 19, 256, 0
- .string "PRIM$", 12
- pokedex_entry 11, 326, gDelcattyPokedexText, 322, 10, 256, 0
- .string "DARKNESS$", 12
- pokedex_entry 5, 110, gSableyePokedexText, 451, 17, 256, 0
- .string "DECEIVER$", 12
- pokedex_entry 6, 115, gMawilePokedexText, 466, 17, 256, 0
- .string "IRON ARMOR$", 12
- pokedex_entry 4, 600, gAronPokedexText, 419, 23, 256, 0
- .string "IRON ARMOR$", 12
- pokedex_entry 9, 1200, gLaironPokedexText, 275, 12, 256, 0
- .string "IRON ARMOR$", 12
- pokedex_entry 21, 3600, gAggronPokedexText, 256, -1, 350, 6
- .string "MEDITATE$", 12
- pokedex_entry 6, 112, gMedititePokedexText, 465, 17, 256, 0
- .string "MEDITATE$", 12
- pokedex_entry 13, 315, gMedichamPokedexText, 298, 5, 256, 0
- .string "LIGHTNING$", 12
- pokedex_entry 6, 152, gElectrikePokedexText, 290, 15, 256, 0
- .string "DISCHARGE$", 12
- pokedex_entry 15, 402, gManectricPokedexText, 256, 3, 257, 0
- .string "CHEERING$", 12
- pokedex_entry 4, 42, gPluslePokedexText, 515, -9, 256, 0
- .string "CHEERING$", 12
- pokedex_entry 4, 42, gMinunPokedexText, 512, -7, 256, 0
- .string "FIREFLY$", 12
- pokedex_entry 7, 177, gVolbeatPokedexText, 442, 16, 256, 0
- .string "FIREFLY$", 12
- pokedex_entry 6, 177, gIllumisePokedexText, 572, 19, 256, 0
- .string "THORN$", 12
- pokedex_entry 3, 20, gRoseliaPokedexText, 677, 20, 256, 0
- .string "STOMACH$", 12
- pokedex_entry 4, 103, gGulpinPokedexText, 593, 23, 256, 0
- .string "POISON BAG$", 12
- pokedex_entry 17, 800, gSwalotPokedexText, 256, 6, 345, 3
- .string "SAVAGE$", 12
- pokedex_entry 8, 208, gCarvanhaPokedexText, 362, 0, 256, 0
- .string "BRUTAL$", 12
- pokedex_entry 18, 888, gSharpedoPokedexText, 256, 0, 317, 3
- .string "BALL WHALE$", 12
- pokedex_entry 20, 1300, gWailmerPokedexText, 256, 2, 493, 0
- .string "FLOAT WHALE$", 12
- pokedex_entry 145, 3980, gWailordPokedexText, 256, 0, 1352, 18
- .string "NUMB$", 12
- pokedex_entry 7, 240, gNumelPokedexText, 342, 17, 256, 0
- .string "ERUPTION$", 12
- pokedex_entry 19, 2200, gCameruptPokedexText, 256, 7, 345, 6
- .string "COAL$", 12
- pokedex_entry 5, 804, gTorkoalPokedexText, 390, 9, 256, 0
- .string "BOUNCE$", 12
- pokedex_entry 7, 306, gSpoinkPokedexText, 423, 17, 256, 0
- .string "MANIPULATE$", 12
- pokedex_entry 9, 715, gGrumpigPokedexText, 358, 10, 256, 0
- .string "SPOT PANDA$", 12
- pokedex_entry 11, 50, gSpindaPokedexText, 321, 4, 256, 0
- .string "ANT PIT$", 12
- pokedex_entry 7, 150, gTrapinchPokedexText, 298, 17, 256, 0
- .string "VIBRATION$", 12
- pokedex_entry 11, 153, gVibravaPokedexText, 370, 11, 256, 0
- .string "MYSTIC$", 12
- pokedex_entry 20, 820, gFlygonPokedexText, 256, 0, 268, 1
- .string "CACTUS$", 12
- pokedex_entry 4, 513, gCacneaPokedexText, 455, 20, 256, 0
- .string "SCARECROW$", 12
- pokedex_entry 13, 774, gCacturnePokedexText, 327, 5, 256, 0
- .string "COTTON BIRD$", 12
- pokedex_entry 4, 12, gSwabluPokedexText, 422, -8, 256, 0
- .string "HUMMING$", 12
- pokedex_entry 11, 206, gAltariaPokedexText, 327, 0, 256, 0
- .string "CAT FERRET$", 12
- pokedex_entry 13, 403, gZangoosePokedexText, 256, 3, 256, 0
- .string "FANG SNAKE$", 12
- pokedex_entry 27, 525, gSeviperPokedexText, 275, 7, 256, 0
- .string "METEORITE$", 12
- pokedex_entry 10, 1680, gLunatonePokedexText, 300, 3, 256, 0
- .string "METEORITE$", 12
- pokedex_entry 12, 1540, gSolrockPokedexText, 328, 0, 256, 0
- .string "WHISKERS$", 12
- pokedex_entry 4, 19, gBarboachPokedexText, 581, -3, 256, 0
- .string "WHISKERS$", 12
- pokedex_entry 9, 236, gWhiscashPokedexText, 317, 1, 256, 0
- .string "RUFFIAN$", 12
- pokedex_entry 6, 115, gCorphishPokedexText, 484, 19, 256, 0
- .string "ROGUE$", 12
- pokedex_entry 11, 328, gCrawdauntPokedexText, 365, 9, 256, 0
- .string "CLAY DOLL$", 12
- pokedex_entry 5, 215, gBaltoyPokedexText, 457, 21, 256, 0
- .string "CLAY DOLL$", 12
- pokedex_entry 15, 1080, gClaydolPokedexText, 256, 3, 280, 1
- .string "SEA LILY$", 12
- pokedex_entry 10, 238, gLileepPokedexText, 305, 8, 256, 0
- .string "BARNACLE$", 12
- pokedex_entry 15, 604, gCradilyPokedexText, 267, 0, 256, 0
- .string "OLD SHRIMP$", 12
- pokedex_entry 7, 125, gAnorithPokedexText, 296, 4, 256, 0
- .string "PLATE$", 12
- pokedex_entry 15, 682, gArmaldoPokedexText, 312, 3, 271, 0
- .string "FISH$", 12
- pokedex_entry 6, 74, gFeebasPokedexText, 423, -4, 256, 0
- .string "TENDER$", 12
- pokedex_entry 62, 1620, gMiloticPokedexText, 256, 0, 360, 7
- .string "WEATHER$", 12
- pokedex_entry 3, 8, gCastformPokedexText, 435, -5, 256, 0
- .string "COLOR SWAP$", 12
- pokedex_entry 10, 220, gKecleonPokedexText, 316, 10, 256, 0
- .string "PUPPET$", 12
- pokedex_entry 6, 23, gShuppetPokedexText, 440, 20, 256, 0
- .string "MARIONETTE$", 12
- pokedex_entry 11, 125, gBanettePokedexText, 262, 9, 256, 0
- .string "REQUIEM$", 12
- pokedex_entry 8, 150, gDuskullPokedexText, 406, -4, 256, 0
- .string "BECKON$", 12
- pokedex_entry 16, 306, gDusclopsPokedexText, 256, 3, 299, 1
- .string "FRUIT$", 12
- pokedex_entry 20, 1000, gTropiusPokedexText, 256, 0, 344, 7
- .string "WIND CHIME$", 12
- pokedex_entry 6, 10, gChimechoPokedexText, 505, 0, 256, 0
- .string "DISASTER$", 12
- pokedex_entry 12, 470, gAbsolPokedexText, 301, 3, 256, 0
- .string "BRIGHT$", 12
- pokedex_entry 6, 140, gWynautPokedexText, 484, 19, 256, 0
- .string "SNOW HAT$", 12
- pokedex_entry 7, 168, gSnoruntPokedexText, 380, 15, 256, 0
- .string "FACE$", 12
- pokedex_entry 15, 2565, gGlaliePokedexText, 256, 3, 344, 0
- .string "CLAP$", 12
- pokedex_entry 8, 395, gSphealPokedexText, 315, 16, 256, 0
- .string "BALL ROLL$", 12
- pokedex_entry 11, 876, gSealeoPokedexText, 338, 13, 256, 0
- .string "ICE BREAK$", 12
- pokedex_entry 14, 1506, gWalreinPokedexText, 316, 4, 256, 0
- .string "BIVALVE$", 12
- pokedex_entry 4, 525, gClamperlPokedexText, 691, 22, 256, 0
- .string "DEEP SEA$", 12
- pokedex_entry 17, 270, gHuntailPokedexText, 307, 1, 256, 0
- .string "SOUTH SEA$", 12
- pokedex_entry 18, 226, gGorebyssPokedexText, 278, 5, 256, 0
- .string "LONGEVITY$", 12
- pokedex_entry 10, 234, gRelicanthPokedexText, 316, 7, 256, 0
- .string "RENDEZVOUS$", 12
- pokedex_entry 6, 87, gLuvdiscPokedexText, 371, 2, 256, 0
- .string "ROCK HEAD$", 12
- pokedex_entry 6, 421, gBagonPokedexText, 448, 18, 256, 0
- .string "ENDURANCE$", 12
- pokedex_entry 11, 1105, gShelgonPokedexText, 311, 12, 256, 0
- .string "DRAGON$", 12
- pokedex_entry 15, 1026, gSalamencePokedexText, 256, 0, 256, 0
- .string "IRON BALL$", 12
- pokedex_entry 6, 952, gBeldumPokedexText, 414, -1, 256, 0
- .string "IRON CLAW$", 12
- pokedex_entry 12, 2025, gMetangPokedexText, 256, 6, 256, 0
- .string "IRON LEG$", 12
- pokedex_entry 16, 5500, gMetagrossPokedexText, 256, 4, 447, 9
- .string "ROCK PEAK$", 12
- pokedex_entry 17, 2300, gRegirockPokedexText, 256, 2, 309, 1
- .string "ICEBERG$", 12
- pokedex_entry 18, 1750, gRegicePokedexText, 256, 0, 301, 2
- .string "IRON$", 12
- pokedex_entry 19, 2050, gRegisteelPokedexText, 256, 0, 359, 6
- .string "EON$", 12
- pokedex_entry 14, 400, gLatiasPokedexText, 304, 3, 256, 0
- .string "EON$", 12
- pokedex_entry 20, 600, gLatiosPokedexText, 256, 0, 294, 3
- .string "SEA BASIN$", 12
- pokedex_entry 45, 3520, gKyogrePokedexText, 256, 0, 614, 13
- .string "CONTINENT$", 12
- pokedex_entry 35, 9500, gGroudonPokedexText, 256, 0, 515, 14
- .string "SKY HIGH$", 12
- pokedex_entry 70, 2065, gRayquazaPokedexText, 256, 0, 448, 12
- .string "WISH$", 12
- pokedex_entry 3, 11, gJirachiPokedexText, 608, -8, 256, 0
- .string "DNA$", 12
- pokedex_entry 17, 608, gDeoxysPokedexText, 256, 0, 290, 2
diff --git a/data/script_pokemon_util_80F87D8.s b/data/script_pokemon_util_80F87D8.s
deleted file mode 100644
index dcf9edeea..000000000
--- a/data/script_pokemon_util_80F87D8.s
+++ /dev/null
@@ -1,7 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-gUnknown_0858D8EC:: @ 858D8EC
- .byte 3, 4, 5, 14
diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc
index afd2ca851..48c5d8d01 100644
--- a/data/scripts/contest_hall.inc
+++ b/data/scripts/contest_hall.inc
@@ -388,7 +388,7 @@ LinkContestRoom1_EventScript_27A1D2:: @ 827A1D2
releaseall
addvar VAR_0x8006, 65535
playse SE_BOWA2
- special sub_80F8D28
+ special ShowContestEntryMonPic
call LinkContestRoom1_EventScript_27A217
return
@@ -517,7 +517,7 @@ LinkContestRoom1_EventScript_27A34F:: @ 827A34F
LinkContestRoom1_EventScript_27A3E5:: @ 827A3E5
setvar VAR_RESULT, 8
- special sub_80F8FE8
+ special ScriptRandom
compare VAR_RESULT, 0
call_if 1, LinkContestRoom1_EventScript_27A65A
compare VAR_RESULT, 1
diff --git a/data/specials.inc b/data/specials.inc
index 75f180420..a1d9734ca 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -94,7 +94,7 @@ gSpecials:: @ 81DBA64
def_special sub_80F8390
def_special sub_80F8850
def_special sub_80F82B4
- def_special sub_80F87D8
+ def_special SetContestTrainerGfxIds
def_special sub_80F7F30
def_special sub_80F8970
def_special sub_80F8AFC
@@ -102,7 +102,7 @@ gSpecials:: @ 81DBA64
def_special sub_80F7F7C
def_special sub_80F7FFC
def_special sub_80F8D24
- def_special sub_80F8C7C
+ def_special GiveMonArtistRibbon
def_special sub_80B3000
def_special SaveGame
def_special sub_80FAFF8
@@ -259,7 +259,7 @@ gSpecials:: @ 81DBA64
def_special sub_80F9490
def_special ValidateEReaderTrainer
def_special GetBestBattleTowerStreak
- def_special ReducePlayerPartyToThree
+ def_special ReducePlayerPartyToSelectedMons
def_special BedroomPC
def_special PlayerPC
def_special FieldShowRegionMap
@@ -330,13 +330,13 @@ gSpecials:: @ 81DBA64
def_special sub_80AC81C
def_special sp13E_warp_to_last_warp
def_special sp13F_fall_to_last_warp
- def_special sub_80F8D28
+ def_special ShowContestEntryMonPic
def_special sub_80F8EB8
def_special SetEReaderTrainerGfxId
def_special BattleSetup_StartLatiBattle
def_special SetRoute119Weather
def_special SetRoute123Weather
- def_special sub_80F8FA0
+ def_special ScriptGetMultiplayerId
def_special ScriptGetPartyMonSpecies
def_special sub_81B98DC
def_special nullsub_54
@@ -350,7 +350,7 @@ gSpecials:: @ 81DBA64
def_special BufferLottoTicketNumber
def_special sub_81653CC
def_special sub_80F9370
- def_special sub_80F8FE8
+ def_special ScriptRandom
def_special sub_81AFDD0
def_special sub_80EDCE8
def_special sub_80EE2CC
diff --git a/data/text/pokedex_text.inc b/data/text/pokedex_text.inc
deleted file mode 100644
index caa41912d..000000000
--- a/data/text/pokedex_text.inc
+++ /dev/null
@@ -1,2321 +0,0 @@
-gDummyPokedexText:: @ 855D30D
- .string "This is a newly discovered POKéMON.\n"
- .string "It is currently under investigation.\n"
- .string "No detailed information is available\n"
- .string "at this time.$"
-
-gBulbasaurPokedexText:: @ 855D389
- .string "BULBASAUR can be seen napping in bright\n"
- .string "sunlight. There is a seed on its back.\n"
- .string "By soaking up the sun’s rays, the seed\n"
- .string "grows progressively larger.$"
-
-gIvysaurPokedexText:: @ 855D41B
- .string "To support its bulb, IVYSAUR’s legs\n"
- .string "grow sturdy. If it spends more time lying in\n"
- .string "the sunlight, the bud will soon bloom into\n"
- .string "a large flower.$"
-
-gVenusaurPokedexText:: @ 855D4A7
- .string "VENUSAUR’s flower is said to take on vivid\n"
- .string "colors if it gets plenty of nutrition and\n"
- .string "sunlight. The flower’s aroma soothes the\n"
- .string "emotions of people.$"
-
-gCharmanderPokedexText:: @ 855D539
- .string "The flame that burns at the tip of its\n"
- .string "tail is an indication of its emotions.\n"
- .string "The flame wavers when CHARMANDER is\n"
- .string "happy, and blazes when it is enraged.$"
-
-gCharmeleonPokedexText:: @ 855D5D1
- .string "Without pity, its sharp claws destroy foes.\n"
- .string "If it encounters a strong enemy, it\n"
- .string "becomes agitated, and the flame on its\n"
- .string "tail flares with a bluish white color.$"
-
-gCharizardPokedexText:: @ 855D66F
- .string "A CHARIZARD flies about in search of\n"
- .string "strong opponents. It breathes intense\n"
- .string "flames that can melt any material. However,\n"
- .string "it will never torch a weaker foe.$"
-
-gSquirtlePokedexText:: @ 855D708
- .string "Its shell is not just for protection.\n"
- .string "Its rounded shape and the grooves on its\n"
- .string "surface minimize resistance in water,\n"
- .string "enabling SQUIRTLE to swim at high speeds.$"
-
-gWartortlePokedexText:: @ 855D7A7
- .string "Its large tail is covered with rich, thick\n"
- .string "fur that deepens in color with age.\n"
- .string "The scratches on its shell are evidence\n"
- .string "of this POKéMON’s toughness in battle.$"
-
-gBlastoisePokedexText:: @ 855D845
- .string "The waterspouts that protrude from its\n"
- .string "shell are highly accurate. Their bullets of\n"
- .string "water can precisely nail tin cans from\n"
- .string "a distance of over 160 feet.$"
-
-gCaterpiePokedexText:: @ 855D8DC
- .string "Its voracious appetite compels it to\n"
- .string "devour leaves bigger than itself without\n"
- .string "hesitation. It releases a terribly strong\n"
- .string "odor from its antennae.$"
-
-gMetapodPokedexText:: @ 855D96C
- .string "Its shell is as hard as an iron slab.\n"
- .string "A METAPOD does not move very much\n"
- .string "because it is preparing its soft innards\n"
- .string "for evolution inside the shell.$"
-
-gButterfreePokedexText:: @ 855D9FD
- .string "It has a superior ability to search for\n"
- .string "delicious honey from flowers. It can seek,\n"
- .string "extract, and carry honey from flowers\n"
- .string "blooming over six miles away.$"
-
-gWeedlePokedexText:: @ 855DA94
- .string "A WEEDLE has an extremely acute sense\n"
- .string "of smell. It distinguishes its favorite\n"
- .string "kinds of leaves from those it dislikes by\n"
- .string "sniffing with its big red proboscis (nose).$"
-
-gKakunaPokedexText:: @ 855DB38
- .string "It remains virtually immobile while it\n"
- .string "clings to a tree. However, on the inside,\n"
- .string "it busily prepares for evolution. This is\n"
- .string "evident from how hot its shell becomes.$"
-
-gBeedrillPokedexText:: @ 855DBDB
- .string "A BEEDRILL is extremely territorial.\n"
- .string "For safety reasons, no one should \n"
- .string "ever approach its nest. If angered,\n"
- .string "they will attack in a swarm.$"
-
-gPidgeyPokedexText:: @ 855DC64
- .string "It has an extremely sharp sense of\n"
- .string "direction. It can unerringly return home to\n"
- .string "its nest, however far it may be removed\n"
- .string "from its familiar surroundings.$"
-
-gPidgeottoPokedexText:: @ 855DCFB
- .string "This POKéMON flies around, patrolling its\n"
- .string "large territory. If its living space is\n"
- .string "violated, it shows no mercy in thoroughly\n"
- .string "punishing the foe with its sharp claws.$"
-
-gPidgeotPokedexText:: @ 855DD9F
- .string "This POKéMON has gorgeous, glossy\n"
- .string "feathers. Many TRAINERS are so captivated\n"
- .string "by the beautiful feathers on its head that\n"
- .string "they choose PIDGEOT as their POKéMON.$"
-
-gRattataPokedexText:: @ 855DE3C
- .string "A RATTATA is cautious in the extreme.\n"
- .string "Even while it is asleep, it constantly\n"
- .string "moves its ears and listens for danger.\n"
- .string "It will make its nest anywhere.$"
-
-gRaticatePokedexText:: @ 855DED0
- .string "A RATICATE’s sturdy fangs grow steadily.\n"
- .string "To keep them ground down, it gnaws on\n"
- .string "rocks and logs. It may even chew on the\n"
- .string "walls of houses.$"
-
-gSpearowPokedexText:: @ 855DF58
- .string "Its loud cry can be heard over half a mile\n"
- .string "away. If its high, keening cry is heard\n"
- .string "echoing all around, it is a sign that they\n"
- .string "are warning each other of danger.$"
-
-gFearowPokedexText:: @ 855DFF8
- .string "Its long neck and elongated beak are\n"
- .string "ideal for catching prey in soil or water.\n"
- .string "It deftly moves this extended and skinny\n"
- .string "beak to pluck prey.$"
-
-gEkansPokedexText:: @ 855E084
- .string "An EKANS curls itself up in a spiral while\n"
- .string "it rests. This position allows it to quickly\n"
- .string "respond to an enemy from any direction\n"
- .string "with a threat from its upraised head.$"
-
-gArbokPokedexText:: @ 855E129
- .string "This POKéMON has a terrifically strong\n"
- .string "constricting power. It can even flatten\n"
- .string "steel oil drums. Once it wraps its body\n"
- .string "around its foe, escaping is impossible.$"
-
-gPikachuPokedexText:: @ 855E1C8
- .string "It stores electricity in the electric sacs\n"
- .string "on its cheeks. When it releases pent-up\n"
- .string "energy in a burst, the electric power is\n"
- .string "equal to a lightning bolt.$"
-
-gRaichuPokedexText:: @ 855E25F
- .string "If it stores too much electricity, its\n"
- .string "behavior turns aggressive. To avoid this,\n"
- .string "it occasionally discharges excess energy\n"
- .string "and calms itself down.$"
-
-gSandshrewPokedexText:: @ 855E2F0
- .string "When it curls up in a ball, it can make any\n"
- .string "attack bounce off harmlessly. Its hide has\n"
- .string "turned tough and solid as a result of\n"
- .string "living in the desert.$"
-
-gSandslashPokedexText:: @ 855E383
- .string "It curls up in a ball to protect itself from\n"
- .string "enemy attacks. It also curls up to prevent\n"
- .string "heatstroke during the daytime when\n"
- .string "temperatures rise sharply.$"
-
-gNidoranFPokedexText:: @ 855E419
- .string "Its highly toxic barbs are thought to have\n"
- .string "developed as protection for this small-\n"
- .string "bodied POKéMON. When enraged, it releases\n"
- .string "a horrible toxin from its horn.$"
-
-gNidorinaPokedexText:: @ 855E4B6
- .string "When it is with its friends or\n"
- .string "family, its barbs are tucked away to\n"
- .string "prevent injury. It appears to become\n"
- .string "nervous if separated from the others.$"
-
-gNidoqueenPokedexText:: @ 855E545
- .string "It is adept at sending foes flying with\n"
- .string "harsh tackles using its tough, scaly body.\n"
- .string "This POKéMON is at its strongest when\n"
- .string "it is defending its young.$"
-
-gNidoranMPokedexText:: @ 855E5D9
- .string "The male NIDORAN has developed muscles\n"
- .string "that freely move its ears in any direction.\n"
- .string "Even the slightest sound does not escape\n"
- .string "this POKéMON’s notice.$"
-
-gNidorinoPokedexText:: @ 855E66C
- .string "Its horn is harder than a diamond.\n"
- .string "If it senses a hostile presence, all the\n"
- .string "barbs on its back bristle up at once, and it\n"
- .string "challenges the foe with all its might.$"
-
-gNidokingPokedexText:: @ 855E70C
- .string "A NIDOKING’s thick tail packs enormously\n"
- .string "destructive power capable of toppling\n"
- .string "a metal transmission tower. Once it goes\n"
- .string "on a rampage, there is no stopping it.$"
-
-gClefairyPokedexText:: @ 855E7AB
- .string "On every night of a full moon, they come\n"
- .string "out to play. When dawn arrives, the tired\n"
- .string "CLEFAIRY go to sleep nestled up against\n"
- .string "each other in deep and quiet mountains.$"
-
-gClefablePokedexText:: @ 855E84E
- .string "A CLEFABLE uses its wings to skip lightly \n"
- .string "as if it were flying. Its bouncy step\n"
- .string "lets it even walk on water. On quiet,\n"
- .string "moonlit nights, it strolls on lakes.$"
-
-gVulpixPokedexText:: @ 855E8EA
- .string "It can freely control fire, making fiery\n"
- .string "orbs fly like will-o’-the-wisps. Just\n"
- .string "before evolution, its six tails grow hot \n"
- .string "as if on fire.$"
-
-gNinetalesPokedexText:: @ 855E972
- .string "It has long been said that each of the\n"
- .string "nine tails embody an enchanted power.\n"
- .string "A long-lived NINETALES will have fur that\n"
- .string "shines like gold.$"
-
-gJigglypuffPokedexText:: @ 855E9FB
- .string "Nothing can avoid falling asleep hearing a\n"
- .string "JIGGLYPUFF’s song. The sound waves of its\n"
- .string "singing voice match the brain waves of\n"
- .string "someone in a deep sleep.$"
-
-gWigglytuffPokedexText:: @ 855EA90
- .string "Its fur is the ultimate in luxuriousness.\n"
- .string "Sleeping alongside a WIGGLYTUFF is simply\n"
- .string "divine. Its body expands seemingly without\n"
- .string "end when it inhales.$"
-
-gZubatPokedexText:: @ 855EB24
- .string "While living in pitch-black caverns, their\n"
- .string "eyes gradually grew shut and deprived\n"
- .string "them of vision. They use ultrasonic waves\n"
- .string "to detect obstacles.$"
-
-gGolbatPokedexText:: @ 855EBB4
- .string "Its fangs easily puncture even thick\n"
- .string "animal hide. It loves to feast on the blood\n"
- .string "of people and POKéMON. It flits about in\n"
- .string "darkness and strikes from behind.$"
-
-gOddishPokedexText:: @ 855EC50
- .string "This POKéMON grows by absorbing moonlight.\n"
- .string "During the daytime, it buries itself in the\n"
- .string "ground, leaving only its leaves exposed to\n"
- .string "avoid detection by its enemies.$"
-
-gGloomPokedexText:: @ 855ECF2
- .string "A horribly noxious honey drools from its\n"
- .string "mouth. One whiff of the honey can result\n"
- .string "in memory loss. Some fans are said to\n"
- .string "enjoy this overwhelming stink, however.$"
-
-gVileplumePokedexText:: @ 855ED92
- .string "In seasons when it produces more pollen,\n"
- .string "the air around a VILEPLUME turns yellow\n"
- .string "with the powder as it walks. The pollen is\n"
- .string "highly toxic and causes paralysis.$"
-
-gParasPokedexText:: @ 855EE31
- .string "A PARAS has parasitic tochukaso\n"
- .string "mushrooms growing on its back. They grow\n"
- .string "by drawing nutrients from the host. They\n"
- .string "are valued as a medicine for long life.$"
-
-gParasectPokedexText:: @ 855EECB
- .string "PARASECT are known to infest the roots of\n"
- .string "large trees en masse and drain nutrients.\n"
- .string "When an infested tree dies, they move\n"
- .string "onto another tree all at once.$"
-
-gVenonatPokedexText:: @ 855EF64
- .string "Its coat of thin, stiff hair that covers\n"
- .string "its entire body is said to have evolved\n"
- .string "for protection. Its large eyes never fail\n"
- .string "to spot even miniscule prey.$"
-
-gVenomothPokedexText:: @ 855EFFC
- .string "VENOMOTH are nocturnal--they only are\n"
- .string "active at night. Their favorite prey are\n"
- .string "insects that gather around streetlights,\n"
- .string "attracted by the light in the darkness.$"
-
-gDiglettPokedexText:: @ 855F09C
- .string "DIGLETT are raised in most farms.\n"
- .string "The reason is simple--wherever they\n"
- .string "burrow, the soil is left perfectly tilled\n"
- .string "for growing delicious crops.$"
-
-gDugtrioPokedexText:: @ 855F129
- .string "Because the triplets originally split from\n"
- .string "one body, they think exactly alike.\n"
- .string "They work cooperatively to burrow\n"
- .string "endlessly through the ground.$"
-
-gMeowthPokedexText:: @ 855F1B8
- .string "MEOWTH withdraw their sharp claws into\n"
- .string "their paws to silently sneak about.\n"
- .string "For some reason, this POKéMON loves\n"
- .string "shiny coins that glitter with light.$"
-
-gPersianPokedexText:: @ 855F24C
- .string "A PERSIAN’s six bold whiskers sense air\n"
- .string "movements to determine what is in its\n"
- .string "vicinity. It becomes docile if grabbed\n"
- .string "by the whiskers.$"
-
-gPsyduckPokedexText:: @ 855F2D2
- .string "When its headache intensifies, it starts\n"
- .string "using strange powers. However, it has no\n"
- .string "recollection of its powers, so it always\n"
- .string "looks befuddled and bewildered.$"
-
-gGolduckPokedexText:: @ 855F36D
- .string "A GOLDUCK is an adept swimmer.\n"
- .string "It sometimes joins competitive swimmers\n"
- .string "in training. It uses psychic powers when\n"
- .string "its forehead shimmers with light.$"
-
-gMankeyPokedexText:: @ 855F3FF
- .string "When it starts shaking and its nasal\n"
- .string "breathing turns rough, it’s a sure sign\n"
- .string "of anger. However, since this happens\n"
- .string "instantly, there is no time to flee.$"
-
-gPrimeapePokedexText:: @ 855F497
- .string "When it becomes furious, its blood\n"
- .string "circulation becomes more robust, and\n"
- .string "its muscles are made stronger. But it\n"
- .string "also becomes much less intelligent.$"
-
-gGrowlithePokedexText:: @ 855F529
- .string "Its superb sense of smell ensures that\n"
- .string "this POKéMON won’t forget any scent,\n"
- .string "no matter what. It uses its sense of smell\n"
- .string "to detect the emotions of others.$"
-
-gArcaninePokedexText:: @ 855F5C2
- .string "This fleet-footed POKéMON is said to run\n"
- .string "over 6,200 miles in a single day and night.\n"
- .string "The fire that blazes wildly within its body\n"
- .string "is its source of power.$"
-
-gPoliwagPokedexText:: @ 855F65B
- .string "It is possible to see this POKéMON’s spiral\n"
- .string "innards right through its thin skin.\n"
- .string "However, the skin is also very flexible.\n"
- .string "Even sharp fangs bounce right off it.$"
-
-gPoliwhirlPokedexText:: @ 855F6FB
- .string "Its body surface is always wet and slick\n"
- .string "with an oily fluid. Because of this greasy\n"
- .string "covering, it can easily slip and slide out\n"
- .string "of the clutches of any enemy in battle.$"
-
-gPoliwrathPokedexText:: @ 855F7A2
- .string "Its highly developed muscles never grow\n"
- .string "fatigued, however much it exercises.\n"
- .string "This POKéMON can swim back and forth\n"
- .string "across the Pacific Ocean without effort.$"
-
-gAbraPokedexText:: @ 855F83D
- .string "A POKéMON that sleeps 18 hours a day.\n"
- .string "Observation revealed that it uses\n"
- .string "TELEPORT to change its location once\n"
- .string "every hour.$"
-
-gKadabraPokedexText:: @ 855F8B6
- .string "It is rumored that a boy with psychic\n"
- .string "abilities suddenly transformed into\n"
- .string "KADABRA while he was assisting research\n"
- .string "into extrasensory powers.$"
-
-gAlakazamPokedexText:: @ 855F942
- .string "While it has strong psychic abilities and\n"
- .string "high intelligence, an ALAKAZAM’s muscles\n"
- .string "are very weak. It uses psychic power to\n"
- .string "move its body.$"
-
-gMachopPokedexText:: @ 855F9CC
- .string "It continually undertakes strenuous\n"
- .string "training to master all forms of martial\n"
- .string "arts. Its strength lets it easily hoist\n"
- .string "a sumo wrestler onto its shoulders.$"
-
-gMachokePokedexText:: @ 855FA64
- .string "A belt is worn by a MACHOKE to keep its\n"
- .string "overwhelming power under control.\n"
- .string "Because it is so dangerous, no one has\n"
- .string "ever removed the belt.$"
-
-gMachampPokedexText:: @ 855FAEC
- .string "It is impossible to defend against punches\n"
- .string "and chops doled out by its four arms.\n"
- .string "Its fighting spirit flares up when it faces\n"
- .string "a tough opponent.$"
-
-gBellsproutPokedexText:: @ 855FB7B
- .string "A BELLSPROUT’s thin and flexible body lets\n"
- .string "it bend and sway to avoid any attack,\n"
- .string "however strong it may be. From its mouth,\n"
- .string "it leaks a fluid that melts even iron.$"
-
-gWeepinbellPokedexText:: @ 855FC1D
- .string "At night, a WEEPINBELL hangs on to a tree\n"
- .string "branch with its hooked rear and sleeps.\n"
- .string "If it moves around in its sleep, it may\n"
- .string "wake up to find itself on the ground.$"
-
-gVictreebelPokedexText:: @ 855FCBD
- .string "The long vine extending from its head is\n"
- .string "waved about as if it were a living thing to\n"
- .string "attract prey. When an unsuspecting victim\n"
- .string "approaches, it is swallowed whole.$"
-
-gTentacoolPokedexText:: @ 855FD5F
- .string "Its body is almost entirely composed of\n"
- .string "water. It ensnares its foe with its two\n"
- .string "long tentacles, then stabs with the poison\n"
- .string "stingers at their tips.$"
-
-gTentacruelPokedexText:: @ 855FDF2
- .string "It lives in complex rock formations on\n"
- .string "the ocean floor and traps prey using its\n"
- .string "80 tentacles. Its red orbs glow when it\n"
- .string "grows excited or agitated.$"
-
-gGeodudePokedexText:: @ 855FE85
- .string "It climbs mountain paths using only the\n"
- .string "power of its arms. Because they look just\n"
- .string "like boulders lining paths, hikers may step\n"
- .string "on them without noticing.$"
-
-gGravelerPokedexText:: @ 855FF1D
- .string "They descend from mountains by tumbling\n"
- .string "down steep slopes. They are so brutal,\n"
- .string "they smash aside obstructing trees and\n"
- .string "massive boulders with thunderous tackles.$"
-
-gGolemPokedexText:: @ 855FFBD
- .string "It is said to live in volcanic craters\n"
- .string "on mountain peaks. Once a year, it sheds\n"
- .string "its hide and grows larger. The shed hide\n"
- .string "crumbles and returns to the soil.$"
-
-gPonytaPokedexText:: @ 8560058
- .string "A PONYTA is very weak at birth. It can\n"
- .string "barely stand up. Its legs become stronger\n"
- .string "as it stumbles and falls while trying to\n"
- .string "keep up with its parent.$"
-
-gRapidashPokedexText:: @ 85600EB
- .string "It usually canters casually in the fields\n"
- .string "and plains. But once a RAPIDASH turns\n"
- .string "serious, its fiery manes flare and blaze\n"
- .string "as it gallops its way up to 150 mph.$"
-
-gSlowpokePokedexText:: @ 8560189
- .string "It catches prey by dipping its tail in\n"
- .string "water at the side of a river. But it often\n"
- .string "forgets what it is doing and spends entire\n"
- .string "days just loafing at water’s edge.$"
-
-gSlowbroPokedexText:: @ 8560229
- .string "Its tail has a SHELLDER firmly attached\n"
- .string "with a bite. As a result, the tail can’t be\n"
- .string "used for fishing anymore. This forces it\n"
- .string "to reluctantly swim and catch prey.$"
-
-gMagnemitePokedexText:: @ 85602CA
- .string "The units at its sides are extremely\n"
- .string "powerful magnets. They generate enough\n"
- .string "magnetism to draw in iron objects from\n"
- .string "over 300 feet away.$"
-
-gMagnetonPokedexText:: @ 8560351
- .string "It is actually three MAGNEMITE linked\n"
- .string "by magnetism. It generates powerful radio\n"
- .string "waves that raise temperatures by 3.6\n"
- .string "degrees F within a 3,300-foot radius.$"
-
-gFarfetchdPokedexText:: @ 85603EC
- .string "It is always seen with a stick from a plant.\n"
- .string "Apparently, there are good sticks and bad\n"
- .string "sticks. This POKéMON occasionally fights\n"
- .string "with others over choice sticks.$"
-
-gDoduoPokedexText:: @ 856048C
- .string "Even while eating or sleeping, one of the\n"
- .string "heads remains always vigilant for any sign\n"
- .string "of danger. When threatened, it flees at\n"
- .string "over 60 miles per hour.$"
-
-gDodrioPokedexText:: @ 8560521
- .string "A peculiar POKéMON species with three\n"
- .string "heads. It vigorously races across grassy\n"
- .string "plains even in arid seasons with little\n"
- .string "rainfall.$"
-
-gSeelPokedexText:: @ 85605A2
- .string "SEEL hunt for prey in frigid, ice-covered\n"
- .string "seas. When it needs to breathe, it punches\n"
- .string "a hole through the ice with the sharply\n"
- .string "protruding section of its head.$"
-
-gDewgongPokedexText:: @ 856063F
- .string "It loves to snooze on bitterly cold ice.\n"
- .string "The sight of this POKéMON sleeping on\n"
- .string "a glacier was mistakenly thought to be\n"
- .string "a mermaid by a mariner long ago.$"
-
-gGrimerPokedexText:: @ 85606D6
- .string "Born from polluted sludge in the sea,\n"
- .string "GRIMER’s favorite food is anything filthy.\n"
- .string "They feed on wastewater pumped out from\n"
- .string "factories.$"
-
-gMukPokedexText:: @ 856075A
- .string "It prefers warm and humid habitats.\n"
- .string "In the summertime, the toxic substances\n"
- .string "in its body intensify, making MUK reek like\n"
- .string "putrid kitchen garbage.$"
-
-gShellderPokedexText:: @ 85607EA
- .string "At night, it burrows a hole in the seafloor\n"
- .string "with its broad tongue to make a place to\n"
- .string "sleep. While asleep, it closes its shell,\n"
- .string "but leaves its tongue hanging out.$"
-
-gCloysterPokedexText:: @ 856088C
- .string "It swims in the sea by swallowing water,\n"
- .string "then jetting it out toward the rear.\n"
- .string "The CLOYSTER shoots spikes from its\n"
- .string "shell using the same system.$"
-
-gGastlyPokedexText:: @ 856091B
- .string "When exposed to a strong wind, a GASTLY’s\n"
- .string "gaseous body quickly dwindles away.\n"
- .string "They cluster under the eaves of houses\n"
- .string "to escape the ravages of wind.$"
-
-gHaunterPokedexText:: @ 85609AF
- .string "If a HAUNTER beckons you while it is\n"
- .string "floating in darkness, don’t approach it.\n"
- .string "This POKéMON will try to lick you with its\n"
- .string "tongue and steal your life away.$"
-
-gGengarPokedexText:: @ 8560A49
- .string "Deep in the night, your shadow cast by\n"
- .string "a streetlight may suddenly overtake you.\n"
- .string "It is actually a GENGAR running past\n"
- .string "you, pretending to be your shadow.$"
-
-gOnixPokedexText:: @ 8560AE1
- .string "There is a magnet in its brain that\n"
- .string "prevents an ONIX from losing direction\n"
- .string "while tunneling. As it grows older, its body\n"
- .string "becomes steadily rounder and smoother.$"
-
-gDrowzeePokedexText:: @ 8560B80
- .string "If your nose becomes itchy while you are\n"
- .string "sleeping, it’s a sure sign that a DROWZEE is\n"
- .string "standing above your pillow and trying to\n"
- .string "eat your dream through your nostrils.$"
-
-gHypnoPokedexText:: @ 8560C25
- .string "The arcing movement and glitter of the\n"
- .string "pendulum in a HYPNO’s hand lull the foe\n"
- .string "into deep hypnosis. While searching for\n"
- .string "prey, it polishes the pendulum.$"
-
-gKrabbyPokedexText:: @ 8560CBC
- .string "KRABBY live in holes dug into beaches.\n"
- .string "On sandy shores with little in the way\n"
- .string "of food, they can be seen squabbling with\n"
- .string "each other over territory.$"
-
-gKinglerPokedexText:: @ 8560D4F
- .string "It waves its huge, oversized claw in the\n"
- .string "air to communicate with others.\n"
- .string "But since the claw is so heavy, this\n"
- .string "POKéMON quickly tires.$"
-
-gVoltorbPokedexText:: @ 8560DD4
- .string "It bears an uncanny and unexplained\n"
- .string "resemblance to a POKé BALL. Because it\n"
- .string "explodes at the slightest shock, even\n"
- .string "veteran TRAINERS treat it with caution.$"
-
-gElectrodePokedexText:: @ 8560E6D
- .string "They appear in great numbers at electric\n"
- .string "power plants. Because they feed on\n"
- .string "electricity, they cause massive and\n"
- .string "chaotic blackouts in nearby cities.$"
-
-gExeggcutePokedexText:: @ 8560F01
- .string "It consists of six eggs that care for each\n"
- .string "other. The eggs attract each other and\n"
- .string "spin around. When cracks increasingly\n"
- .string "appear, it is close to evolution.$"
-
-gExeggutorPokedexText:: @ 8560F9B
- .string "Originally from the tropics, EXEGGUTOR’s\n"
- .string "heads grow larger from exposure to strong\n"
- .string "sunlight. It is said that when the heads\n"
- .string "fall, they group to form an EXEGGCUTE.$"
-
-gCubonePokedexText:: @ 856103E
- .string "It pines for the mother it will never see\n"
- .string "again. Seeing a likeness of its mother in\n"
- .string "the full moon, it cries. The stains on the\n"
- .string "skull it wears are from its tears.$"
-
-gMarowakPokedexText:: @ 85610E0
- .string "A MAROWAK is the evolved form of a CUBONE\n"
- .string "that has grown tough by overcoming the\n"
- .string "grief of losing its mother. Its tempered\n"
- .string "and hardened spirit is not easily broken.$"
-
-gHitmonleePokedexText:: @ 8561184
- .string "Its legs freely stretch and contract.\n"
- .string "Using these springlike limbs, it bowls over\n"
- .string "foes with devastating kicks. After battle,\n"
- .string "it rubs down its tired legs.$"
-
-gHitmonchanPokedexText:: @ 856121E
- .string "A HITMONCHAN is said to possess the\n"
- .string "spirit of a boxer who aimed to become the\n"
- .string "world champion. Having an indomitable\n"
- .string "spirit means that it will never give up.$"
-
-gLickitungPokedexText:: @ 85612BB
- .string "Whenever it sees something unfamiliar,\n"
- .string "it always licks the object because it\n"
- .string "memorizes things by texture and taste.\n"
- .string "It is somewhat put off by sour things.$"
-
-gKoffingPokedexText:: @ 8561356
- .string "Getting up close to a KOFFING will give\n"
- .string "you a chance to observe, through its thin\n"
- .string "skin, the toxic gases swirling inside. It\n"
- .string "blows up at the slightest stimulation.$"
-
-gWeezingPokedexText:: @ 85613F9
- .string "By diluting its toxic gases with a special\n"
- .string "process, the highest grade of perfume can\n"
- .string "be extracted. To WEEZING, gases emanating\n"
- .string "from garbage are the ultimate feast.$"
-
-gRhyhornPokedexText:: @ 856149D
- .string "Once it starts running, it doesn’t stop.\n"
- .string "Its tiny brain makes it so stupid that it\n"
- .string "can’t remember why it started running in\n"
- .string "the first place.$"
-
-gRhydonPokedexText:: @ 856152A
- .string "Its horn, which rotates like a drill,\n"
- .string "destroys tall buildings with one strike.\n"
- .string "It stands on its hind legs, and its brain\n"
- .string "is well developed.$"
-
-gChanseyPokedexText:: @ 85615B6
- .string "CHANSEY lay nutritionally excellent eggs\n"
- .string "every day. The eggs are so delicious, they\n"
- .string "are eagerly devoured by even those people\n"
- .string "who have lost their appetite.$"
-
-gTangelaPokedexText:: @ 8561652
- .string "Its vines snap off easily and painlessly\n"
- .string "if they are grabbed, allowing it to make a\n"
- .string "quick getaway. The lost vines are replaced\n"
- .string "by new growth the very next day.$"
-
-gKangaskhanPokedexText:: @ 85616F2
- .string "If you come across a young KANGASKHAN\n"
- .string "playing by itself, never try to catch it.\n"
- .string "The baby’s parent is sure to be in the area,\n"
- .string "and it will become violently enraged.$"
-
-gHorseaPokedexText:: @ 8561795
- .string "By cleverly flicking the fins on its back\n"
- .string "side to side, it moves in any direction\n"
- .string "while facing forward. It spits ink to\n"
- .string "escape if it senses danger.$"
-
-gSeadraPokedexText:: @ 8561829
- .string "The poisonous barbs all over its body are\n"
- .string "highly valued as ingredients for making\n"
- .string "traditional herbal medicine. It shows no\n"
- .string "mercy to anything approaching its nest.$"
-
-gGoldeenPokedexText:: @ 85618CC
- .string "In the springtime, schools of GOLDEEN\n"
- .string "can be seen swimming up falls and rivers.\n"
- .string "It metes out staggering damage with its\n"
- .string "single horn.$"
-
-gSeakingPokedexText:: @ 8561951
- .string "It punches holes in boulders on stream-\n"
- .string "beds. This is a clever innovation that\n"
- .string "prevents its eggs from being attacked or\n"
- .string "washed away by the current.$"
-
-gStaryuPokedexText:: @ 85619E5
- .string "It gathers with others in the night and\n"
- .string "makes its red core glow on and off with\n"
- .string "the twinkling stars. It can regenerate\n"
- .string "limbs if they are severed from its body.$"
-
-gStarmiePokedexText:: @ 8561A85
- .string "People in ancient times imagined that\n"
- .string "STARMIE were transformed from the\n"
- .string "reflections of stars that twinkled on\n"
- .string "gentle waves at night.$"
-
-gMrmimePokedexText:: @ 8561B0A
- .string "A MR. MIME is a master of pantomime. It can\n"
- .string "convince others that something unseeable\n"
- .string "actually exists. Once believed, the\n"
- .string "imaginary object does become real.$"
-
-gScytherPokedexText:: @ 8561BA6
- .string "Its blindingly fast speed adds to the\n"
- .string "sharpness of its twin forearm scythes.\n"
- .string "The scythes can slice through thick logs\n"
- .string "in one wicked stroke.$"
-
-gJynxPokedexText:: @ 8561C32
- .string "A JYNX sashays rhythmically as if it were\n"
- .string "dancing. Its motions are so bouncingly\n"
- .string "alluring, people seeing it are compelled to\n"
- .string "shake their hips without noticing.$"
-
-gElectabuzzPokedexText:: @ 8561CD2
- .string "When a storm approaches, it competes with\n"
- .string "others to scale heights that are likely to\n"
- .string "be stricken by lightning. Some towns use\n"
- .string "ELECTABUZZ in place of lightning rods.$"
-
-gMagmarPokedexText:: @ 8561D77
- .string "In battle, it blows out intense flames from\n"
- .string "all over its body to intimidate its foe.\n"
- .string "These fiery bursts create heat waves that\n"
- .string "ignite grass and trees in the area.$"
-
-gPinsirPokedexText:: @ 8561E1A
- .string "Their pincers are strong enough to\n"
- .string "shatter thick logs. Because they dislike\n"
- .string "cold, PINSIR burrow and sleep under\n"
- .string "the ground on chilly nights.$"
-
-gTaurosPokedexText:: @ 8561EA7
- .string "It is not satisfied unless it is rampaging\n"
- .string "at all times. If there is no opponent for\n"
- .string "TAUROS to battle, it will charge at thick\n"
- .string "trees and knock them down to calm itself.$"
-
-gMagikarpPokedexText:: @ 8561F50
- .string "Its swimming muscles are weak, so it is\n"
- .string "easily washed away by currents. In places\n"
- .string "where water pools, you can see many\n"
- .string "MAGIKARP deposited there by the flow.$"
-
-gGyaradosPokedexText:: @ 8561FEC
- .string "It is an extremely vicious and violent\n"
- .string "POKéMON. When humans begin to fight,\n"
- .string "it will appear and burn everything to the\n"
- .string "ground with intensely hot flames.$"
-
-gLaprasPokedexText:: @ 8562084
- .string "People have driven LAPRAS almost to the\n"
- .string "point of extinction. In the evenings,\n"
- .string "it is said to sing plaintively as it seeks\n"
- .string "what few others of its kind still remain.$"
-
-gDittoPokedexText:: @ 8562127
- .string "A DITTO rearranges its cell structure to\n"
- .string "transform itself. However, if it tries to\n"
- .string "change based on its memory, it will get\n"
- .string "details wrong.$"
-
-gEeveePokedexText:: @ 85621B1
- .string "An EEVEE has an unstable genetic makeup\n"
- .string "that suddenly mutates due to its\n"
- .string "environment. Radiation from various\n"
- .string "STONES causes this POKéMON to evolve.$"
-
-gVaporeonPokedexText:: @ 8562244
- .string "VAPOREON underwent a spontaneous\n"
- .string "mutation and grew fins and gills that\n"
- .string "allow them to live underwater. They have\n"
- .string "the ability to freely control water.$"
-
-gJolteonPokedexText:: @ 85622D9
- .string "Its cells generate weak power that is\n"
- .string "amplified by its fur’s static electricity\n"
- .string "to drop thunderbolts. The bristling fur is\n"
- .string "made of electrically charged needles.$"
-
-gFlareonPokedexText:: @ 856237A
- .string "FLAREON’s fluffy fur releases heat into\n"
- .string "the air so that its body does not get\n"
- .string "excessively hot. Its body temperature can\n"
- .string "rise to a maximum of 1,650 degrees F.$"
-
-gPorygonPokedexText:: @ 8562418
- .string "It is capable of reverting itself entirely\n"
- .string "back to program data in order to enter\n"
- .string "cyberspace. A PORYGON is copy-\n"
- .string "protected so it cannot be duplicated.$"
-
-gOmanytePokedexText:: @ 85624AF
- .string "One of the ancient and long-since-extinct\n"
- .string "POKéMON that have been regenerated\n"
- .string "from fossils by humans. If attacked,\n"
- .string "it withdraws into its hard shell.$"
-
-gOmastarPokedexText:: @ 8562543
- .string "An OMASTAR uses its tentacles to capture\n"
- .string "its prey. It is believed to have become\n"
- .string "extinct because its shell grew too large,\n"
- .string "making its movements slow and ponderous.$"
-
-gKabutoPokedexText:: @ 85625E7
- .string "It is a POKéMON that has been regenerated\n"
- .string "from a fossil. However, in rare cases, living\n"
- .string "examples have been discovered. KABUTO\n"
- .string "have not changed for 300 million years.$"
-
-gKabutopsPokedexText:: @ 856268D
- .string "KABUTOPS once swam underwater to hunt \n"
- .string "for prey. It was apparently evolving from\n"
- .string "being a water dweller to living on land as\n"
- .string "evident from changes in its gills and legs.$"
-
-gAerodactylPokedexText:: @ 8562735
- .string "AERODACTYL is a POKéMON from the age\n"
- .string "of dinosaurs. It was regenerated from DNA\n"
- .string "extracted from amber. It is imagined to\n"
- .string "have been the king of the skies.$"
-
-gSnorlaxPokedexText:: @ 85627CD
- .string "SNORLAX’s typical day consists of nothing\n"
- .string "more than eating and sleeping. It is such\n"
- .string "a docile POKéMON that there are children\n"
- .string "who use its big belly as a place to play.$"
-
-gArticunoPokedexText:: @ 8562874
- .string "ARTICUNO is a legendary bird POKéMON that\n"
- .string "can control ice. The flapping of its wings\n"
- .string "chills the air. As a result, it is said that\n"
- .string "when this POKéMON flies, snow will fall.$"
-
-gZapdosPokedexText:: @ 856291F
- .string "ZAPDOS is a legendary bird POKéMON that\n"
- .string "has the ability to control electricity.\n"
- .string "It usually lives in thunderclouds. It gains\n"
- .string "power if it is stricken by lightning bolts.$"
-
-gMoltresPokedexText:: @ 85629C7
- .string "MOLTRES is a legendary bird POKéMON\n"
- .string "that can control fire. If injured, it is said\n"
- .string "to dip its body in the molten magma of\n"
- .string "a volcano to burn and heal itself.$"
-
-gDratiniPokedexText:: @ 8562A63
- .string "A DRATINI continually molts and sloughs\n"
- .string "off its old skin. It does so because the\n"
- .string "life energy within its body steadily builds\n"
- .string "to reach uncontrollable levels.$"
-
-gDragonairPokedexText:: @ 8562B00
- .string "A DRAGONAIR stores an enormous amount of\n"
- .string "energy inside its body. It is said to alter\n"
- .string "the weather around it by loosing energy\n"
- .string "from the crystals on its neck and tail.$"
-
-gDragonitePokedexText:: @ 8562BA5
- .string "It can circle the globe in just 16 hours.\n"
- .string "It is a kindhearted POKéMON that leads\n"
- .string "lost and foundering ships in a storm\n"
- .string "to the safety of land.$"
-
-gMewtwoPokedexText:: @ 8562C32
- .string "A POKéMON that was created by genetic\n"
- .string "manipulation. However, even though the\n"
- .string "scientific power of humans made its body,\n"
- .string "they failed to give it a warm heart.$"
-
-gMewPokedexText:: @ 8562CCE
- .string "A MEW is said to possess the genes of all\n"
- .string "POKéMON. It is capable of making itself\n"
- .string "invisible at will, so it entirely avoids\n"
- .string "notice even if it approaches people.$"
-
-gChikoritaPokedexText:: @ 8562D6E
- .string "It waves its leaf around to keep foes\n"
- .string "at bay. However, a sweet fragrance also\n"
- .string "wafts from the leaf, creating a friendly\n"
- .string "atmosphere that becalms the battlers.$"
-
-gBayleefPokedexText:: @ 8562E0B
- .string "A BAYLEEF’s neck is ringed by curled-up\n"
- .string "leaves. Inside each leaf is a small tree\n"
- .string "shoot. The fragrance of this shoot\n"
- .string "makes people peppy.$"
-
-gMeganiumPokedexText:: @ 8562E93
- .string "The fragrance of a MEGANIUM’s flower\n"
- .string "soothes and calms emotions. In battle,\n"
- .string "it gives off more of its becalming scent\n"
- .string "to blunt the foe’s fighting spirit.$"
-
-gCyndaquilPokedexText:: @ 8562F2C
- .string "It flares flames from its back to protect\n"
- .string "itself. The fire burns vigorously if the\n"
- .string "POKéMON is angry. When it is tired,\n"
- .string "it sputters with incomplete combustion.$"
-
-gQuilavaPokedexText:: @ 8562FCB
- .string "It intimidates foes with intense gusts of\n"
- .string "flames and superheated air. Its quick\n"
- .string "nimbleness lets it dodge attacks even\n"
- .string "while scorching an enemy.$"
-
-gTyphlosionPokedexText:: @ 856305B
- .string "It can hide behind a shimmering heat haze\n"
- .string "that it creates using its intense flames.\n"
- .string "TYPHLOSION create blazing explosive\n"
- .string "blasts that burn everything to cinders.$"
-
-gTotodilePokedexText:: @ 85630FB
- .string "Despite its small body, TOTODILE’s jaws\n"
- .string "are very powerful. While it may think it is\n"
- .string "just playfully nipping, its bite has enough\n"
- .string "strength to cause serious injury.$"
-
-gCroconawPokedexText:: @ 856319D
- .string "Once its jaws clamp down on its foe, it will\n"
- .string "absolutely not let go. Because the tips of\n"
- .string "its fangs are forked back like fishhooks,\n"
- .string "they become irremovably embedded.$"
-
-gFeraligatrPokedexText:: @ 8563241
- .string "It opens its huge mouth to intimidate\n"
- .string "enemies. In battle, it runs using its thick\n"
- .string "and powerful hind legs to charge the\n"
- .string "foe with incredible speed.$"
-
-gSentretPokedexText:: @ 85632D3
- .string "They take turns standing guard when it\n"
- .string "is time to sleep. The sentry awakens the\n"
- .string "others if it senses danger. If one becomes\n"
- .string "separated, it turns sleepless with fear.$"
-
-gFurretPokedexText:: @ 8563377
- .string "A FURRET has a very slim build. When under\n"
- .string "attack, it can squirm through narrow\n"
- .string "spaces and get away. In spite of its short\n"
- .string "limbs, it is very nimble and fleet.$"
-
-gHoothootPokedexText:: @ 8563416
- .string "It has an internal organ that senses\n"
- .string "the earth’s rotation. Using this special\n"
- .string "organ, a HOOTHOOT begins hooting at\n"
- .string "precisely the same time every day.$"
-
-gNoctowlPokedexText:: @ 85634AB
- .string "It unfailingly catches prey in darkness.\n"
- .string "NOCTOWL owe their success to superior\n"
- .string "vision that allows them to see in minimal\n"
- .string "light, and to their supple and silent wings.$"
-
-gLedybaPokedexText:: @ 8563551
- .string "LEDYBA communicate using a fluid that\n"
- .string "they secrete from where the legs join the\n"
- .string "body. They are said to convey feelings to\n"
- .string "others by altering the fluid’s scent.$"
-
-gLedianPokedexText:: @ 85635F1
- .string "It is said that in lands with clean air,\n"
- .string "where the stars fill the sky, there live\n"
- .string "many LEDIAN. For good reason, they use\n"
- .string "the light of the stars as energy.$"
-
-gSpinarakPokedexText:: @ 856368C
- .string "The web it spins can be considered its\n"
- .string "second nervous system. It is said that a\n"
- .string "SPINARAK determines its prey by the tiny\n"
- .string "vibrations it feels through the web.$"
-
-gAriadosPokedexText:: @ 856372A
- .string "Its feet are tipped with tiny hooked claws\n"
- .string "that enable it to scuttle on ceilings and\n"
- .string "vertical walls. It constricts its foe with\n"
- .string "thin and strong silk webbing.$"
-
-gCrobatPokedexText:: @ 85637C8
- .string "Over the course of evolution, its hind legs\n"
- .string "turned into wings. By alternately resting\n"
- .string "its front and rear wings, it can fly all day\n"
- .string "without having to stop.$"
-
-gChinchouPokedexText:: @ 8563863
- .string "When it senses danger, it discharges\n"
- .string "positive and negative electricity from its\n"
- .string "two antennae. It lives in depths beyond\n"
- .string "sunlight’s reach.$"
-
-gLanturnPokedexText:: @ 85638ED
- .string "The light-emitting orbs on its back are\n"
- .string "very bright. They are formed from a part of\n"
- .string "its dorsal fin. This POKéMON illuminates\n"
- .string "the inky darkness of deep seas.$"
-
-gPichuPokedexText:: @ 856398A
- .string "It is still inept at retaining electricity.\n"
- .string "When it is startled, it discharges power\n"
- .string "accidentally. It gets better at holding\n"
- .string "power as it grows older.$"
-
-gCleffaPokedexText:: @ 8563A20
- .string "On nights with many shooting stars,\n"
- .string "CLEFFA can be seen dancing in a ring.\n"
- .string "They dance until daybreak, when they\n"
- .string "quench their thirst with the morning dew.$"
-
-gIgglybuffPokedexText:: @ 8563AB9
- .string "Its soft and pliable body is very bouncy.\n"
- .string "When it sings continuously with all its\n"
- .string "might, its body steadily turns a deepening\n"
- .string "pink color.$"
-
-gTogepiPokedexText:: @ 8563B42
- .string "As its energy, it uses the feelings of\n"
- .string "compassion and pleasure exuded by\n"
- .string "people and POKéMON. It stores up happy\n"
- .string "feelings in its shell, then shares them out.$"
-
-gTogeticPokedexText:: @ 8563BDF
- .string "It is said to be a POKéMON that brings good\n"
- .string "fortune. When it spots someone who is pure\n"
- .string "of heart, a TOGETIC appears and shares its\n"
- .string "happiness with that person.$"
-
-gNatuPokedexText:: @ 8563C7D
- .string "It runs up short trees that grow on the\n"
- .string "savanna to peck at new shoots.\n"
- .string "A NATU’s eyes look as if they are\n"
- .string "always observing something.$"
-
-gXatuPokedexText:: @ 8563D02
- .string "It has the enigmatic power of foreseeing\n"
- .string "the future. Some people in different lands\n"
- .string "have long believed that XATU are\n"
- .string "emissaries from another world.$"
-
-gMareepPokedexText:: @ 8563D96
- .string "Its fluffy wool rubs together and builds\n"
- .string "a static charge. The more energy is\n"
- .string "charged, the more brightly the lightbulb\n"
- .string "at the tip of its tail glows.$"
-
-gFlaaffyPokedexText:: @ 8563E2A
- .string "Its fleece quality changes to generate\n"
- .string "strong static electricity with a small\n"
- .string "amount of wool. The bare, slick parts of its\n"
- .string "hide are shielded against electricity.$"
-
-gAmpharosPokedexText:: @ 8563ECC
- .string "It gives off so much light that it can be\n"
- .string "seen even from space. People in the old\n"
- .string "days used its light to send signals back\n"
- .string "and forth with others far away.$"
-
-gBellossomPokedexText:: @ 8563F67
- .string "Its flower petals deepen in color through\n"
- .string "exposure to sunlight. When cloudy weather\n"
- .string "persists, it does a dance that is thought\n"
- .string "to be a ritual for summoning the sun.$"
-
-gMarillPokedexText:: @ 856400B
- .string "Its body is covered with water-repellent\n"
- .string "fur. Because of the fur, it can swim\n"
- .string "through water at high speed without being\n"
- .string "slowed by the water’s resistance.$"
-
-gAzumarillPokedexText:: @ 85640A5
- .string "It lives in water virtually all day long.\n"
- .string "Its body color and pattern act as\n"
- .string "camouflage that makes it tough for\n"
- .string "enemies to spot in water.$"
-
-gSudowoodoPokedexText:: @ 856412E
- .string "It mimics a tree to avoid being attacked\n"
- .string "by enemies. But since its forelegs\n"
- .string "remain green throughout the year, it is\n"
- .string "easily identified as a fake in the winter.$"
-
-gPolitoedPokedexText:: @ 85641CD
- .string "The curled hair on its head proves its\n"
- .string "status as a king. It is said that the\n"
- .string "longer and curlier the hair, the more\n"
- .string "respect it earns from its peers.$"
-
-gHoppipPokedexText:: @ 8564261
- .string "This POKéMON drifts and floats with the\n"
- .string "wind. If it senses the approach of strong\n"
- .string "winds, a HOPPIP links leaves with others\n"
- .string "to prepare against being blown away.$"
-
-gSkiploomPokedexText:: @ 8564301
- .string "It blossoms when the temperature rises\n"
- .string "above 64 degrees F. Because its flower’s\n"
- .string "blooming changes with the temperature,\n"
- .string "it is sometimes used as a thermometer.$"
-
-gJumpluffPokedexText:: @ 856439F
- .string "JUMPLUFF ride warm southern winds to\n"
- .string "cross the sea and fly to foreign lands.\n"
- .string "This POKéMON lands when it encounters\n"
- .string "cold air while it is floating.$"
-
-gAipomPokedexText:: @ 8564431
- .string "Its tail ends with a dexterous, handlike\n"
- .string "appendage. However, because it uses the\n"
- .string "tail so much, AIPOM’s real hands have\n"
- .string "become rather clumsy.$"
-
-gSunkernPokedexText:: @ 85644BE
- .string "SUNKERN try to minimize movement to\n"
- .string "conserve the nutrients they have stored\n"
- .string "in their bodies for evolution. They will\n"
- .string "not eat, subsisting only on morning dew.$"
-
-gSunfloraPokedexText:: @ 856455C
- .string "SUNFLORA convert solar energy into\n"
- .string "nutrition. They are highly active in the\n"
- .string "warm daytime but suddenly stop moving as\n"
- .string "soon as the sun sets.$"
-
-gYanmaPokedexText:: @ 85645E7
- .string "It can see 360 degrees without moving\n"
- .string "its eyes. It is a great flier capable of\n"
- .string "making sudden stops and turning midair to\n"
- .string "quickly chase down targeted prey.$"
-
-gWooperPokedexText:: @ 8564682
- .string "WOOPER usually live in water but come\n"
- .string "out onto land seeking food occasionally.\n"
- .string "On land, they coat their bodies with a\n"
- .string "gooey, toxic film.$"
-
-gQuagsirePokedexText:: @ 856470B
- .string "A QUAGSIRE hunts by leaving its mouth wide\n"
- .string "open in water and waiting for its prey to\n"
- .string "blunder in. Because it doesn’t move, it\n"
- .string "does not get very hungry.$"
-
-gEspeonPokedexText:: @ 85647A2
- .string "An ESPEON is extremely loyal to any\n"
- .string "TRAINER it considers to be worthy. It is\n"
- .string "said to have developed precognitive\n"
- .string "powers to protect its TRAINER from harm.$"
-
-gUmbreonPokedexText:: @ 856483C
- .string "UMBREON evolved from exposure to the\n"
- .string "moon’s energy pulses. It lurks in darkness\n"
- .string "and waits for its foes to move. The rings\n"
- .string "on its body glow when it leaps to attack.$"
-
-gMurkrowPokedexText:: @ 85648E0
- .string "MURKROW were feared as the alleged\n"
- .string "bearers of ill fortune. It shows strong\n"
- .string "interest in anything that sparkles. It will\n"
- .string "even try to steal rings from women.$"
-
-gSlowkingPokedexText:: @ 856497B
- .string "It undertakes research every day to\n"
- .string "solve the mysteries of the world.\n"
- .string "However, it apparently forgets everything\n"
- .string "if the SHELLDER on its head comes off.$"
-
-gMisdreavusPokedexText:: @ 8564A12
- .string "A MISDREAVUS frightens people with a\n"
- .string "creepy, sobbing cry. It apparently uses\n"
- .string "its red spheres to absorb the fear of foes\n"
- .string "as its nutrition.$"
-
-gUnownPokedexText:: @ 8564A9C
- .string "This POKéMON is shaped like ancient text\n"
- .string "characters. Although research is ongoing,\n"
- .string "it is a mystery as to which came first,\n"
- .string "the ancient writings or the various UNOWN.$"
-
-gWobbuffetPokedexText:: @ 8564B42
- .string "Usually docile, a WOBBUFFET strikes back\n"
- .string "ferociously if its black tail is attacked.\n"
- .string "It makes its lair in caves where it waits\n"
- .string "for nightfall.$"
-
-gGirafarigPokedexText:: @ 8564BCF
- .string "A GIRAFARIG is an herbivore--it eats\n"
- .string "grass and tree shoots. While it is eating,\n"
- .string "its tail makes chewing and swallowing\n"
- .string "motions as if it were also eating.$"
-
-gPinecoPokedexText:: @ 8564C68
- .string "A PINECO hangs from a tree branch and\n"
- .string "waits for prey. While eating, if it is\n"
- .string "disturbed by someone shaking its tree, it\n"
- .string "falls on the ground and suddenly explodes.$"
-
-gForretressPokedexText:: @ 8564D0A
- .string "It keeps itself inside its steel shell.\n"
- .string "The shell is opened when it is catching\n"
- .string "prey, but it is so quick that the shell’s\n"
- .string "inside cannot be seen.$"
-
-gDunsparcePokedexText:: @ 8564D9B
- .string "Its drill-tipped tail is used to burrow into\n"
- .string "the ground backwards. This POKéMON is\n"
- .string "known to make its nest in complex shapes\n"
- .string "deep under the ground.$"
-
-gGligarPokedexText:: @ 8564E2E
- .string "It glides without making a single sound.\n"
- .string "It grasps the face of its foe using its\n"
- .string "hind and large front claws, then stabs\n"
- .string "with its poison barb.$"
-
-gSteelixPokedexText:: @ 8564EBC
- .string "STEELIX live even further underground\n"
- .string "than ONIX. This POKéMON is known to dig\n"
- .string "toward the earth’s core, reaching a depth\n"
- .string "of over six-tenths of a mile underground.$"
-
-gSnubbullPokedexText:: @ 8564F5E
- .string "By baring its fangs and making a scary\n"
- .string "face, it sends smaller POKéMON scurrying\n"
- .string "in terror. The SNUBBULL does seem a\n"
- .string "little sad at making its foes flee.$"
-
-gGranbullPokedexText:: @ 8564FF6
- .string "It has a particularly well-developed lower\n"
- .string "jaw. The huge fangs are heavy, causing\n"
- .string "it to tilt its head. Unless it is startled, it\n"
- .string "will not try to bite.$"
-
-gQwilfishPokedexText:: @ 856508D
- .string "A QWILFISH uses the pressure of water\n"
- .string "it swallows to shoot toxic quills all at\n"
- .string "once from all over its body. It finds\n"
- .string "swimming to be somewhat challenging.$"
-
-gScizorPokedexText:: @ 8565127
- .string "A SCIZOR has a body with the hardness of\n"
- .string "steel. It is not easily fazed by ordinary\n"
- .string "sorts of attacks. It flaps its wings to\n"
- .string "regulate its body temperature.$"
-
-gShucklePokedexText:: @ 85651C1
- .string "A SHUCKLE hides under rocks, keeping its\n"
- .string "body concealed inside its shell while\n"
- .string "eating stored berries. The berries mix with\n"
- .string "its body fluids to become a juice.$"
-
-gHeracrossPokedexText:: @ 856525F
- .string "They gather in forests seeking the sweet\n"
- .string "sap of trees. It is completely clad in a\n"
- .string "steel-hard shell. It is proud of its horn,\n"
- .string "which it uses to fling foes.$"
-
-gSneaselPokedexText:: @ 85652F9
- .string "A SNEASEL scales trees by punching its\n"
- .string "hooked claws into the bark. It seeks out\n"
- .string "unguarded nests and steals eggs for food\n"
- .string "while the parents are away.$"
-
-gTeddiursaPokedexText:: @ 856538E
- .string "It licks its palms that are sweetened by\n"
- .string "being soaked in honey. A TEDDIURSA makes\n"
- .string "its own honey by blending fruits and pollen\n"
- .string "collected by BEEDRILL.$"
-
-gUrsaringPokedexText:: @ 8565423
- .string "In forests, it is said that there are many\n"
- .string "streams and towering trees where an\n"
- .string "URSARING gathers food. It walks through\n"
- .string "its forest collecting food every day.$"
-
-gSlugmaPokedexText:: @ 85654C0
- .string "It is a species of POKéMON that lives in\n"
- .string "volcanic areas. If its body cools, its skin\n"
- .string "hardens and immobilizes it. To avoid that,\n"
- .string "it sleeps near magma.$"
-
-gMagcargoPokedexText:: @ 8565556
- .string "The shell on its back is made of hardened\n"
- .string "magma. Tens of thousands of years spent\n"
- .string "living in volcanic craters have turned\n"
- .string "MAGCARGO’s bodies into magma.$"
-
-gSwinubPokedexText:: @ 85655ED
- .string "It roots for food by rubbing its snout\n"
- .string "against the ground. Its favorite food is a\n"
- .string "mushroom that grows under dried grass.\n"
- .string "It occasionally roots out hot springs.$"
-
-gPiloswinePokedexText:: @ 856568D
- .string "A PILOSWINE is covered by a thick coat\n"
- .string "of long hair for enduring freezing cold.\n"
- .string "It uses its tusks to dig up food that has\n"
- .string "been buried under ice.$"
-
-gCorsolaPokedexText:: @ 856571E
- .string "CORSOLA live in warm southern seas.\n"
- .string "If the sea becomes polluted, the beautiful\n"
- .string "coral stalks become discolored and crumble\n"
- .string "away in tatters.$"
-
-gRemoraidPokedexText:: @ 85657A9
- .string "A REMORAID uses its abdominal muscles\n"
- .string "to forcefully expel swallowed water, then\n"
- .string "shoot down flying prey. When evolution\n"
- .string "approaches, it travels down rivers.$"
-
-gOctilleryPokedexText:: @ 8565844
- .string "It ensnares its foe with its suction-\n"
- .string "cupped tentacles before delivering the\n"
- .string "finishing blow. If the foe turns out to be\n"
- .string "too strong, it spews ink to escape.$"
-
-gDelibirdPokedexText:: @ 85658E0
- .string "It carries food bundled up in its tail.\n"
- .string "There was a famous explorer who\n"
- .string "managed to scale Mt. Everest thanks\n"
- .string "to a DELIBIRD sharing its food.$"
-
-gMantinePokedexText:: @ 856596C
- .string "On sunny days, schools of MANTINE can be\n"
- .string "seen elegantly leaping over the waves.\n"
- .string "It is not bothered by the REMORAID that\n"
- .string "hitches rides.$"
-
-gSkarmoryPokedexText:: @ 85659F3
- .string "A POKéMON that has a body and wings of\n"
- .string "steel. People in the past used feathers\n"
- .string "fallen from SKARMORY to make swords and\n"
- .string "knives.$"
-
-gHoundourPokedexText:: @ 8565A72
- .string "HOUNDOUR communicate with each other\n"
- .string "using a variety of cries to corner their\n"
- .string "prey. This POKéMON’s remarkable teamwork\n"
- .string "is simply unparalleled.$"
-
-gHoundoomPokedexText:: @ 8565B01
- .string "In a HOUNDOOM pack, the one with its horns\n"
- .string "raked sharply back serves a leadership\n"
- .string "role. They choose their leader by fighting\n"
- .string "among themselves.$"
-
-gKingdraPokedexText:: @ 8565B90
- .string "It sleeps quietly, deep on the seafloor.\n"
- .string "When it comes up to the surface, it\n"
- .string "creates a huge whirlpool that can swallow\n"
- .string "even ships.$"
-
-gPhanpyPokedexText:: @ 8565C13
- .string "PHANPY’s big ears serve as broad fans.\n"
- .string "When it becomes hot, it flaps the ears\n"
- .string "busily to cool down. Even the young are\n"
- .string "very strong.$"
-
-gDonphanPokedexText:: @ 8565C96
- .string "A DONPHAN is so strong it can easily haul\n"
- .string "a dump truck. Its hide has toughened to a\n"
- .string "rock-hard state. An ordinary sort of\n"
- .string "attack won’t even leave a scratch.$"
-
-gPorygon2PokedexText:: @ 8565D32
- .string "It was created by humans using the power\n"
- .string "of science. It has been given artificial\n"
- .string "intelligence that enables it to learn new\n"
- .string "gestures and emotions on its own.$"
-
-gStantlerPokedexText:: @ 8565DD0
- .string "STANTLER’s magnificent antlers were\n"
- .string "once traded at high prices as works of art.\n"
- .string "As a result, this POKéMON was hunted\n"
- .string "close to extinction.$"
-
-gSmearglePokedexText:: @ 8565E5A
- .string "A SMEARGLE marks its territory using a\n"
- .string "fluid that leaks out from the tip of its\n"
- .string "tail. About 5,000 different marks left by\n"
- .string "this POKéMON have been found.$"
-
-gTyroguePokedexText:: @ 8565EF2
- .string "TYROGUE become stressed out if they do\n"
- .string "not get to train every day. When raising\n"
- .string "this POKéMON, the TRAINER must establish\n"
- .string "a regular training schedule.$"
-
-gHitmontopPokedexText:: @ 8565F88
- .string "Its technique of kicking while spinning is\n"
- .string "a remarkable mix of both offense and\n"
- .string "defense. HITMONTOP travel faster\n"
- .string "spinning than they do walking.$"
-
-gSmoochumPokedexText:: @ 8566018
- .string "It actively runs about, but also falls\n"
- .string "often. Whenever it falls, it will check its\n"
- .string "reflection on a lake’s surface to make\n"
- .string "sure its face hasn’t become dirty.$"
-
-gElekidPokedexText:: @ 85660B5
- .string "If it touches metal and discharges the\n"
- .string "electricity it has stored in its body, an\n"
- .string "ELEKID begins swinging its arms in circles\n"
- .string "to recharge itself.$"
-
-gMagbyPokedexText:: @ 8566145
- .string "If a MAGBY is spouting yellow flames from\n"
- .string "its mouth, it is in good health. When it is\n"
- .string "fatigued, black smoke will be mixed in with\n"
- .string "the flames.$"
-
-gMiltankPokedexText:: @ 85661D3
- .string "It gives over five gallons of milk daily.\n"
- .string "Its sweet milk is enjoyed by children and\n"
- .string "grown-ups alike. People who can’t drink\n"
- .string "milk turn it into yogurt and eat it instead.$"
-
-gBlisseyPokedexText:: @ 856627C
- .string "If it senses sadness with its fluffy fur,\n"
- .string "a BLISSEY will rush over to the sad person,\n"
- .string "however far away, to share an egg of\n"
- .string "happiness that brings a smile to any face.$"
-
-gRaikouPokedexText:: @ 8566322
- .string "RAIKOU embodies the speed of lightning.\n"
- .string "Its roars send shock waves shuddering\n"
- .string "through the air and ground as if\n"
- .string "lightning bolts were crashing down.$"
-
-gEnteiPokedexText:: @ 85663B5
- .string "ENTEI embodies the passion of magma.\n"
- .string "It is thought to have been born in the\n"
- .string "eruption of a volcano. It blasts fire that\n"
- .string "consumes all that it touches.$"
-
-gSuicunePokedexText:: @ 856644A
- .string "SUICUNE embodies the compassion of\n"
- .string "a pure spring of water. It runs across\n"
- .string "the land with gliding elegance. It has the\n"
- .string "power to purify dirty water.$"
-
-gLarvitarPokedexText:: @ 85664DC
- .string "A LARVITAR is born deep under the ground.\n"
- .string "It must eat its way through the soil above\n"
- .string "and reach the surface for it to see its\n"
- .string "parents’ faces.$"
-
-gPupitarPokedexText:: @ 8566569
- .string "A PUPITAR creates a gas inside its body\n"
- .string "that it ejects under compression to propel\n"
- .string "itself like a jet. Its body can withstand\n"
- .string "a collision with solid steel.$"
-
-gTyranitarPokedexText:: @ 8566604
- .string "A TYRANITAR is so overwhelmingly powerful,\n"
- .string "it can bring down a whole mountain to make\n"
- .string "its nest. It roams in mountains seeking\n"
- .string "new opponents to fight.$"
-
-gLugiaPokedexText:: @ 856669A
- .string "LUGIA is so powerful even a light\n"
- .string "fluttering of its wings can blow apart\n"
- .string "houses. As a result, it chooses to live out\n"
- .string "of sight deep under the sea.$"
-
-gHoOhPokedexText:: @ 856672C
- .string "Its feathers--which glow in seven colors\n"
- .string "depending on the angle at which they are\n"
- .string "struck by light--are thought to bring joy.\n"
- .string "It is said to live at the foot of a rainbow.$"
-
-gCelebiPokedexText:: @ 85667D6
- .string "This POKéMON came from the future by\n"
- .string "crossing over time. It is thought that so\n"
- .string "long as CELEBI appears, a bright and\n"
- .string "shining future awaits us.$"
-
-gTreeckoPokedexText:: @ 8566864
- .string "It makes its nest in a giant tree in the\n"
- .string "forest. It ferociously guards against\n"
- .string "anything nearing its territory. It is said\n"
- .string "to be the protector of the forest’s trees.$"
-
-gGrovylePokedexText:: @ 8566909
- .string "Leaves grow out of this POKéMON’s body.\n"
- .string "They help obscure a GROVYLE from the eyes\n"
- .string "of its enemies while it is in a thickly\n"
- .string "overgrown forest.$"
-
-gSceptilePokedexText:: @ 8566995
- .string "In the jungle, its power is without equal.\n"
- .string "This POKéMON carefully grows trees and\n"
- .string "plants. It regulates its body temperature\n"
- .string "by basking in sunlight.$"
-
-gTorchicPokedexText:: @ 8566A29
- .string "If attacked, it strikes back by spitting\n"
- .string "balls of fire it forms in its stomach.\n"
- .string "A TORCHIC dislikes darkness because it\n"
- .string "can’t see its surroundings.$"
-
-gCombuskenPokedexText:: @ 8566ABC
- .string "It lashes out with 10 kicks per second.\n"
- .string "Its strong fighting instinct compels it\n"
- .string "to keep up its offensive until the\n"
- .string "opponent gives up.$"
-
-gBlazikenPokedexText:: @ 8566B42
- .string "It learns martial arts that use punches\n"
- .string "and kicks. Every several years, its old\n"
- .string "feathers burn off, and new, supple\n"
- .string "feathers grow back in their place.$"
-
-gMudkipPokedexText:: @ 8566BD8
- .string "On land, it can powerfully lift large\n"
- .string "boulders by planting its four feet and\n"
- .string "heaving. It sleeps by burying itself in soil\n"
- .string "at the water’s edge.$"
-
-gMarshtompPokedexText:: @ 8566C67
- .string "Its toughened hind legs enable it to stand\n"
- .string "upright. Because it weakens if its skin\n"
- .string "dries out, it replenishes fluids by playing\n"
- .string "in mud.$"
-
-gSwampertPokedexText:: @ 8566CEE
- .string "If it senses the approach of a storm and\n"
- .string "a tidal wave, it protects its seaside nest\n"
- .string "by piling up boulders. It swims as fast as\n"
- .string "a jet ski.$"
-
-gPoochyenaPokedexText:: @ 8566D78
- .string "It savagely threatens foes with bared\n"
- .string "fangs. It chases after fleeing targets\n"
- .string "tenaciously. It turns tail and runs,\n"
- .string "however, if the foe strikes back.$"
-
-gMightyenaPokedexText:: @ 8566E0C
- .string "In the wild, MIGHTYENA live in a pack.\n"
- .string "They never defy their leader’s orders.\n"
- .string "They defeat foes with perfectly\n"
- .string "coordinated teamwork.$"
-
-gZigzagoonPokedexText:: @ 8566E90
- .string "Rubbing its nose against the ground, it\n"
- .string "always wanders about back and forth in\n"
- .string "search of something. It is distinguished\n"
- .string "by the zigzag footprints it leaves.$"
-
-gLinoonePokedexText:: @ 8566F2C
- .string "It is exceedingly fast if it only has to run\n"
- .string "in a straight line. When it spots pond-\n"
- .string "dwelling prey underwater, it quickly leaps\n"
- .string "in and catches it with its sharp claws.$"
-
-gWurmplePokedexText:: @ 8566FD4
- .string "It sticks to tree branches and eats\n"
- .string "leaves. The thread it spits from its mouth,\n"
- .string "which becomes gooey when it touches\n"
- .string "air, slows the movement of its foes.$"
-
-gSilcoonPokedexText:: @ 856706D
- .string "It prepares for evolution using the\n"
- .string "energy it stored while it was a WURMPLE.\n"
- .string "It keeps watch over the surroundings with\n"
- .string "its two eyes.$"
-
-gBeautiflyPokedexText:: @ 85670F2
- .string "Its colorfully patterned wings are its\n"
- .string "most prominent feature. It flies through\n"
- .string "flower-covered fields collecting pollen.\n"
- .string "It attacks ferociously when angered.$"
-
-gCascoonPokedexText:: @ 8567190
- .string "To avoid detection by its enemies, it hides\n"
- .string "motionlessly beneath large leaves and in\n"
- .string "the gaps of branches. It also attaches\n"
- .string "dead leaves to its body for camouflage.$"
-
-gDustoxPokedexText:: @ 8567234
- .string "It is a nocturnal POKéMON that flies from\n"
- .string "fields and mountains to the attraction of\n"
- .string "streetlights at night. It looses highly\n"
- .string "toxic powder from its wings.$"
-
-gLotadPokedexText:: @ 85672CD
- .string "This POKéMON lives in ponds with clean\n"
- .string "water. It is known to ferry small POKéMON\n"
- .string "across ponds by carrying them on the\n"
- .string "broad leaf on its head.$"
-
-gLombrePokedexText:: @ 856735B
- .string "In the evening, it takes great delight in\n"
- .string "popping out of rivers and startling people.\n"
- .string "It feeds on aquatic moss that grows on\n"
- .string "rocks in the riverbed.$"
-
-gLudicoloPokedexText:: @ 85673EF
- .string "When it hears festive music, all the cells\n"
- .string "in its body become stimulated, and it\n"
- .string "begins moving in rhythm. It does not\n"
- .string "quail even when it faces a tough opponent.$"
-
-gSeedotPokedexText:: @ 8567490
- .string "It hangs off branches and absorbs\n"
- .string "nutrients. When it finishes eating, its\n"
- .string "body becomes so heavy that it drops to\n"
- .string "the ground with a thump.$"
-
-gNuzleafPokedexText:: @ 856751A
- .string "A forest-dwelling POKéMON that is skilled\n"
- .string "at climbing trees. Its long and pointed\n"
- .string "nose is its weak point. It loses power if\n"
- .string "the nose is gripped.$"
-
-gShiftryPokedexText:: @ 85675AB
- .string "It is said to arrive on chilly, wintry winds.\n"
- .string "Feared from long ago as the guardian of\n"
- .string "forests, this POKéMON lives in a deep\n"
- .string "forest where people do not venture.$"
-
-gTaillowPokedexText:: @ 856764B
- .string "Although it is small, it is very courageous.\n"
- .string "It will take on a larger SKARMORY on an\n"
- .string "equal footing. However, its will weakens if\n"
- .string "it becomes hungry.$"
-
-gSwellowPokedexText:: @ 85676DF
- .string "A SWELLOW dives upon prey from far above.\n"
- .string "It never misses its targets. It takes to\n"
- .string "the skies in search of lands with a warm\n"
- .string "climate.$"
-
-gWingullPokedexText:: @ 8567764
- .string "It makes its nest on a sheer cliff at the\n"
- .string "edge of the sea. It has trouble keeping\n"
- .string "its wings flapping in flight. Instead, it\n"
- .string "soars on updrafts.$"
-
-gPelipperPokedexText:: @ 85677F3
- .string "It skims the tops of waves as it flies.\n"
- .string "When it spots prey, it uses its large beak\n"
- .string "to scoop up the victim with water.\n"
- .string "It protects its eggs in its beak.$"
-
-gRaltsPokedexText:: @ 856788B
- .string "A RALTS has the power to sense the\n"
- .string "emotions of people and POKéMON with the\n"
- .string "horns on its head. It takes cover if it\n"
- .string "senses any hostility.$"
-
-gKirliaPokedexText:: @ 8567914
- .string "A KIRLIA has the psychic power to create \n"
- .string "a rip in the dimensions and see into the\n"
- .string "future. It is said to dance with pleasure\n"
- .string "on sunny mornings.$"
-
-gGardevoirPokedexText:: @ 85679A4
- .string "It apparently does not feel the pull of\n"
- .string "gravity because it supports itself with\n"
- .string "psychic power. It will give its life to\n"
- .string "protect its TRAINER.$"
-
-gSurskitPokedexText:: @ 8567A31
- .string "They gather on puddles after evening\n"
- .string "downpours, gliding across the surface\n"
- .string "of water as if sliding. It secretes honey\n"
- .string "with a sweet aroma from its head.$"
-
-gMasquerainPokedexText:: @ 8567AC8
- .string "It intimidates foes with the large eyelike\n"
- .string "patterns on its antennae. Because it can’t\n"
- .string "fly if its wings get wet, it shelters itself\n"
- .string "from rain under large trees and eaves.$"
-
-gShroomishPokedexText:: @ 8567B72
- .string "It loves to eat damp, composted soil in\n"
- .string "forests. If you enter a forest after a\n"
- .string "long rain, you can see many SHROOMISH\n"
- .string "feasting on composted soil.$"
-
-gBreloomPokedexText:: @ 8567C03
- .string "It scatters spores from holes in the cap\n"
- .string "on its head. It loves warm and humid\n"
- .string "climates. It feeds on trees and plants in\n"
- .string "fields and forests.$"
-
-gSlakothPokedexText:: @ 8567C8F
- .string "It sleeps virtually all day and night long.\n"
- .string "It doesn’t change its nest its entire life,\n"
- .string "but it sometimes travels great distances\n"
- .string "by swimming in rivers.$"
-
-gVigorothPokedexText:: @ 8567D27
- .string "It can’t keep still because its blood boils\n"
- .string "with energy. It runs through the fields\n"
- .string "and mountains all day to calm itself. If it\n"
- .string "doesn’t, it can’t sleep at night.$"
-
-gSlakingPokedexText:: @ 8567DC9
- .string "Hordes of SLAKING gather around trees\n"
- .string "when fruits come into season. They wait\n"
- .string "around patiently for ripened fruits to fall\n"
- .string "out of the trees.$"
-
-gNincadaPokedexText:: @ 8567E55
- .string "It makes its nest at the roots of a mighty\n"
- .string "tree. Using its whiskerlike antennae, it\n"
- .string "probes its surroundings in the\n"
- .string "pitch-black darkness of soil.$"
-
-gNinjaskPokedexText:: @ 8567EE6
- .string "Because it darts about vigorously at high\n"
- .string "speed, it is very difficult to see. Hearing\n"
- .string "its distinctive cries for too long induces\n"
- .string "a headache.$"
-
-gShedinjaPokedexText:: @ 8567F73
- .string "A peculiar POKéMON that floats in air even\n"
- .string "though its wings remain completely still.\n"
- .string "The inside of its body is hollow and\n"
- .string "utterly dark.$"
-
-gWhismurPokedexText:: @ 8567FFB
- .string "Its cries equal a jet plane in volume.\n"
- .string "It inhales through its ear canals. Because\n"
- .string "of this system, it can cry continually\n"
- .string "without having to catch its breath.$"
-
-gLoudredPokedexText:: @ 8568098
- .string "It positions the round speakers on its\n"
- .string "head to assail foes with ultrasonic waves\n"
- .string "at massive volume. It builds power by\n"
- .string "stomping the ground.$"
-
-gExploudPokedexText:: @ 8568124
- .string "It has sound-generating organs all over\n"
- .string "its body. It communicates with others by\n"
- .string "adjusting the tone and volume of the cries\n"
- .string "it emits.$"
-
-gMakuhitaPokedexText:: @ 85681AA
- .string "It loves to toughen up its body above all\n"
- .string "else. If you hear quaking rumbles in a cave,\n"
- .string "it is the sound of MAKUHITA undertaking\n"
- .string "strenuous training.$"
-
-gHariyamaPokedexText:: @ 856823D
- .string "It has the habit of challenging others\n"
- .string "without hesitation to tests of strength.\n"
- .string "It’s been known to stand on train tracks\n"
- .string "and stop trains using forearm thrusts.$"
-
-gAzurillPokedexText:: @ 85682DD
- .string "Its tail, which is packed with nutrition,\n"
- .string "is very bouncy like a rubber ball. On sunny\n"
- .string "days they gather at the edge of water and\n"
- .string "splash about for fun.$"
-
-gNosepassPokedexText:: @ 8568373
- .string "Its body emits a powerful magnetism.\n"
- .string "It feeds on prey that is pulled in by the\n"
- .string "force. Its magnetism is stronger in cold\n"
- .string "seasons.$"
-
-gSkittyPokedexText:: @ 85683F4
- .string "A SKITTY’s adorably cute behavior makes it\n"
- .string "highly popular. In battle, it makes its tail\n"
- .string "puff out. It threatens foes with a sharp\n"
- .string "growl.$"
-
-gDelcattyPokedexText:: @ 856847C
- .string "Rather than keeping a permanent lair,\n"
- .string "it habitually seeks comfortable spots and\n"
- .string "sleeps there. It is nocturnal and becomes\n"
- .string "active at dusk.$"
-
-gSableyePokedexText:: @ 8568506
- .string "It digs branching holes in caves using its\n"
- .string "sharp claws in search of food--raw gems.\n"
- .string "A SABLEYE lurks in darkness and is seen\n"
- .string "only rarely.$"
-
-gMawilePokedexText:: @ 856858F
- .string "Its giant jaws are actually steel horns\n"
- .string "that transformed. It fools foes into\n"
- .string "complacency with its adorable gestures,\n"
- .string "then chomps them with its huge jaws.$"
-
-gAronPokedexText:: @ 8568629
- .string "A POKéMON that is clad in steel armor.\n"
- .string "A new suit of armor is made when it evolves.\n"
- .string "The old, discarded armor is salvaged as\n"
- .string "metal for making iron products.$"
-
-gLaironPokedexText:: @ 85686C5
- .string "When two LAIRON meet in the wild, they\n"
- .string "fight for territory by bashing into each\n"
- .string "other with their steel bodies. The sound\n"
- .string "of their collision carries for miles.$"
-
-gAggronPokedexText:: @ 8568764
- .string "Its iron horns grow longer a little at\n"
- .string "a time. They are used to determine the\n"
- .string "AGGRON’s age. The gouges in its armor are\n"
- .string "worn with pride as mementos from battles.$"
-
-gMedititePokedexText:: @ 8568806
- .string "It continually meditates for hours every\n"
- .string "day. As a result of rigorous and dedicated\n"
- .string "yoga training, it has tempered its\n"
- .string "spiritual power so much it can fly.$"
-
-gMedichamPokedexText:: @ 85688A1
- .string "Through crushingly harsh yoga training, it\n"
- .string "gained the power to foretell its foe’s\n"
- .string "actions. It battles with elegant, dance-\n"
- .string "like movement.$"
-
-gElectrikePokedexText:: @ 856892B
- .string "It generates electricity using friction\n"
- .string "from the atmosphere. In seasons with\n"
- .string "especially arid air, its entire body blazes\n"
- .string "with violent showers of sparks.$"
-
-gManectricPokedexText:: @ 85689C4
- .string "Because lightning falls in their vicinities,\n"
- .string "MANECTRIC were thought to have been born\n"
- .string "from lightning. In battle, they create\n"
- .string "thunderclouds.$"
-
-gPluslePokedexText:: @ 8568A50
- .string "It has the trait of cheering on its fellow\n"
- .string "POKéMON. By shorting out the electricity\n"
- .string "it releases from its paws, it creates\n"
- .string "pom-poms for cheering.$"
-
-gMinunPokedexText:: @ 8568AE1
- .string "At a meeting of POKéMON academics, it was\n"
- .string "announced that simultaneous exposure to\n"
- .string "electricity from a PLUSLE and MINUN will\n"
- .string "promote circulation and boost vitality.$"
-
-gVolbeatPokedexText:: @ 8568B84
- .string "With their taillights lit, VOLBEAT fly in\n"
- .string "a swarm, drawing geometric designs in the\n"
- .string "night sky. They move their nests if their\n"
- .string "pond water becomes dirty.$"
-
-gIllumisePokedexText:: @ 8568C1C
- .string "A nocturnal POKéMON that becomes active\n"
- .string "upon nightfall. It leads a VOLBEAT swarm\n"
- .string "to draw patterns in the night sky. Over 200\n"
- .string "different patterns have been confirmed.$"
-
-gRoseliaPokedexText:: @ 8568CC1
- .string "A ROSELIA that drinks nutritionally rich\n"
- .string "springwater blooms with lovely flowers.\n"
- .string "The fragrance of its flowers has the\n"
- .string "effect of making its foes careless.$"
-
-gGulpinPokedexText:: @ 8568D5B
- .string "This POKéMON’s stomach fluid can even\n"
- .string "digest scrap iron. In one gulp, it can\n"
- .string "swallow something that is as large as\n"
- .string "itself.$"
-
-gSwalotPokedexText:: @ 8568DD6
- .string "Its powerful stomach acid is capable of\n"
- .string "digesting almost anything. The one thing\n"
- .string "in the whole world a SWALOT can’t digest is\n"
- .string "its own stomach.$"
-
-gCarvanhaPokedexText:: @ 8568E64
- .string "CARVANHA attack ships in swarms, making\n"
- .string "them sink. Although it is said to be a very\n"
- .string "vicious POKéMON, it timidly flees as soon\n"
- .string "as it finds itself alone.$"
-
-gSharpedoPokedexText:: @ 8568EFC
- .string "The vicious and sly gangster of the sea.\n"
- .string "Its skin is specially textured to minimize\n"
- .string "drag in water. Its speed tops out at over\n"
- .string "75 miles per hour.$"
-
-gWailmerPokedexText:: @ 8568F8D
- .string "While this POKéMON usually lives in the sea,\n"
- .string "it can survive on land, although not too\n"
- .string "long. It loses vitality if its body becomes\n"
- .string "dried out.$"
-
-gWailordPokedexText:: @ 856901A
- .string "It breathes through nostrils that it\n"
- .string "raises above the sea. By inhaling to its\n"
- .string "maximum capacity, a WAILORD can dive close\n"
- .string "to 10,000 feet beneath the waves.$"
-
-gNumelPokedexText:: @ 85690B5
- .string "A NUMEL stores boiling magma in the hump\n"
- .string "on its back. It is a hardy POKéMON that can\n"
- .string "transport a 220-pound load. It has served\n"
- .string "humans at work since long ago.$"
-
-gCameruptPokedexText:: @ 8569153
- .string "A POKéMON that lives in the crater of\n"
- .string "a volcano. Every 10 years, the volcanoes\n"
- .string "on its back erupt violently. Research is\n"
- .string "under way on the cause of eruption.$"
-
-gTorkoalPokedexText:: @ 85691EF
- .string "It battles using energy it gets from\n"
- .string "burning coal. When loosing smoke from its\n"
- .string "nostrils, it lets off a sound that is\n"
- .string "similar to a locomotive’s horn.$"
-
-gSpoinkPokedexText:: @ 8569284
- .string "A POKéMON that manipulates psychic power\n"
- .string "at will. It doesn’t stop bouncing even when\n"
- .string "it is asleep. It loves eating mushrooms\n"
- .string "that grow underground.$"
-
-gGrumpigPokedexText:: @ 8569318
- .string "It stores power in the black pearls on its\n"
- .string "forehead. When it uses psychic power, it\n"
- .string "performs an odd dance step. Its style of\n"
- .string "dancing became hugely popular overseas.$"
-
-gSpindaPokedexText:: @ 85693BD
- .string "It is distinguished by a pattern of\n"
- .string "spots that is always different. Its\n"
- .string "unsteady, tottering walk has the\n"
- .string "effect of fouling its foe’s aim.$"
-
-gTrapinchPokedexText:: @ 8569447
- .string "Its big jaws crunch through boulders.\n"
- .string "Because its head is so big, it has a hard\n"
- .string "time getting back upright if it tips over\n"
- .string "onto its back.$"
-
-gVibravaPokedexText:: @ 85694D0
- .string "It looses ultrasonic waves by rubbing its\n"
- .string "wings together. Since a VIBRAVA’s wings\n"
- .string "are still in the process of growing, it can\n"
- .string "only fly short distances.$"
-
-gFlygonPokedexText:: @ 8569568
- .string "The flapping of its wings sounds like\n"
- .string "singing. To prevent detection by enemies,\n"
- .string "it hides itself by flapping up a cloud of\n"
- .string "desert sand.$"
-
-gCacneaPokedexText:: @ 85695EF
- .string "CACNEA live in deserts with virtually no\n"
- .string "rainfall. It battles by swinging its thick,\n"
- .string "spiked arms. Once a year, a yellow flower\n"
- .string "blooms.$"
-
-gCacturnePokedexText:: @ 8569676
- .string "After spending thousands of years in\n"
- .string "harsh deserts, its blood transformed into\n"
- .string "the same substances as sand. It is\n"
- .string "nocturnal, so it hunts at night.$"
-
-gSwabluPokedexText:: @ 8569709
- .string "A POKéMON that has wings like cottony\n"
- .string "clouds. After enduring winter, in which\n"
- .string "little food is available, SWABLU flocks\n"
- .string "move closer to towns in the spring.$"
-
-gAltariaPokedexText:: @ 85697A3
- .string "It hums in a beautiful soprano voice.\n"
- .string "It flies among white clouds in the blue\n"
- .string "sky. It launches intensely hot fireballs\n"
- .string "from its mouth.$"
-
-gZangoosePokedexText:: @ 856982A
- .string "When it battles, it stands on its hind legs\n"
- .string "and attacks with its sharply clawed\n"
- .string "forelegs. Its fur bristles if it encounters\n"
- .string "any SEVIPER.$"
-
-gSeviperPokedexText:: @ 85698B3
- .string "SEVIPER and ZANGOOSE are eternal rivals.\n"
- .string "It counters a ZANGOOSE’s dazzling agility\n"
- .string "with its swordlike tail, which also oozes\n"
- .string "a horrible poison.$"
-
-gLunatonePokedexText:: @ 8569943
- .string "It becomes very active on the night of\n"
- .string "a full moon. This POKéMON was first\n"
- .string "discovered 40 years ago at the site of\n"
- .string "a meteor strike.$"
-
-gSolrockPokedexText:: @ 85699C6
- .string "Solar energy is the source of this \n"
- .string "POKéMON’s power. On sunny days, groups of\n"
- .string "SOLROCK line up facing the sun and absorb\n"
- .string "its light.$"
-
-gBarboachPokedexText:: @ 8569A49
- .string "Its body is covered with a slimy film.\n"
- .string "The film acts as a barrier to prevent germs\n"
- .string "in muddy water from entering the\n"
- .string "BARBOACH’s body.$"
-
-gWhiscashPokedexText:: @ 8569ACE
- .string "Mysteriously, it can foretell earthquakes.\n"
- .string "In the daytime, it sleeps in mud at the\n"
- .string "bottom of a pond. When it awakens, it\n"
- .string "continually feeds throughout the night.$"
-
-gCorphishPokedexText:: @ 8569B6F
- .string "Once it grips prey with its large pincers,\n"
- .string "it will never let go, no matter what.\n"
- .string "It is a hardy POKéMON that can thrive\n"
- .string "in any environment.$"
-
-gCrawdauntPokedexText:: @ 8569BFA
- .string "A brutish POKéMON that loves to battle.\n"
- .string "A veteran CRAWDAUNT that has prevailed in\n"
- .string "hundreds of battles has giant pincers\n"
- .string "marked with countless scars.$"
-
-gBaltoyPokedexText:: @ 8569C8F
- .string "A BALTOY moves by spinning on its single\n"
- .string "foot. It has been depicted in murals \n"
- .string "adorning the walls of a once-bustling city\n"
- .string "in an ancient age.$"
-
-gClaydolPokedexText:: @ 8569D1C
- .string "A CLAYDOL sleeps while hovering in midair.\n"
- .string "Its arms are separate from its body.\n"
- .string "They are kept floating by the POKéMON’s\n"
- .string "manipulation of psychic power.$"
-
-gLileepPokedexText:: @ 8569DB3
- .string "It disguises itself as seaweed by making\n"
- .string "its tentacles sway. Unsuspecting prey\n"
- .string "that come too close are swallowed whole.\n"
- .string "It became extinct 100 million years ago.$"
-
-gCradilyPokedexText:: @ 8569E54
- .string "It drags its heavy body along the\n"
- .string "seafloor. It makes its nest in the shallows\n"
- .string "of warm seas. CRADILY can be seen on\n"
- .string "beaches when the tide goes out.$"
-
-gAnorithPokedexText:: @ 8569EE7
- .string "It was resurrected from a fossil using the\n"
- .string "power of science. It swims by undulating\n"
- .string "the eight wings at its sides. They were\n"
- .string "feet that adapted to life in the sea.$"
-
-gArmaldoPokedexText:: @ 8569F89
- .string "ARMALDO usually lives on land. However,\n"
- .string "when it hunts for prey, it dives beneath\n"
- .string "the ocean. It swims around using its two\n"
- .string "large wings.$"
-
-gFeebasPokedexText:: @ 856A010
- .string "FEEBAS live in ponds that are heavily\n"
- .string "infested with weeds. Because of its\n"
- .string "hopelessly shabby appearance, it\n"
- .string "seems as if few TRAINERS raise it.$"
-
-gMiloticPokedexText:: @ 856A09E
- .string "It is said to live at the bottom of\n"
- .string "large lakes. Considered to be the most\n"
- .string "beautiful of all POKéMON, it has been\n"
- .string "depicted in paintings and statues.$"
-
-gCastformPokedexText:: @ 856A132
- .string "It alters its form depending on the\n"
- .string "weather. Changes in the climate such as\n"
- .string "the temperature and humidity appear to\n"
- .string "affect its cellular structure.$"
-
-gKecleonPokedexText:: @ 856A1C4
- .string "A POKéMON that has the ability to alter its\n"
- .string "body colors to match its surroundings.\n"
- .string "A KECLEON reverts to its original colors if\n"
- .string "it is startled.$"
-
-gShuppetPokedexText:: @ 856A253
- .string "This POKéMON roams about deep in the\n"
- .string "night seeking such negative emotions as\n"
- .string "grudges and envy. It retreats to its nest\n"
- .string "when the sun begins to rise.$"
-
-gBanettePokedexText:: @ 856A2E7
- .string "An abandoned plush doll became this\n"
- .string "POKéMON. They are said to live in garbage\n"
- .string "dumps and wander about in search of the\n"
- .string "children that threw them away.$"
-
-gDuskullPokedexText:: @ 856A37C
- .string "A glare from its single scarlet eye makes\n"
- .string "even burly grown-ups freeze in utter fear.\n"
- .string "It is a nocturnal POKéMON that roams\n"
- .string "about under the cloak of darkness.$"
-
-gDusclopsPokedexText:: @ 856A419
- .string "It is thought that its body is hollow with\n"
- .string "only a spectral ball of fire burning inside.\n"
- .string "However, no one has been able to\n"
- .string "confirm this theory as fact.$"
-
-gTropiusPokedexText:: @ 856A4AF
- .string "It flies by flapping its broad leaves.\n"
- .string "The bunch of fruit that grows around its\n"
- .string "neck is deliciously sweet. In the spring,\n"
- .string "it scatters pollen from its neck.$"
-
-gChimechoPokedexText:: @ 856A54B
- .string "They fly about very actively when the hot\n"
- .string "season arrives. They communicate among\n"
- .string "themselves using seven different and\n"
- .string "distinguishing cries.$"
-
-gAbsolPokedexText:: @ 856A5D7
- .string "It sharply senses even subtle changes in\n"
- .string "the sky and the land to predict natural\n"
- .string "disasters. It is a long-lived POKéMON that\n"
- .string "has a life-span of 100 years.$"
-
-gWynautPokedexText:: @ 856A671
- .string "A WYNAUT loves to eat sweet fruits.\n"
- .string "It cleverly picks fruits using its earlike\n"
- .string "arms. They gather in fruit gardens, drawn\n"
- .string "by the fragrance.$"
-
-gSnoruntPokedexText:: @ 856A6FC
- .string "They tend to move about in groups of\n"
- .string "around five SNORUNT. In snowy regions,\n"
- .string "it is said that when they are seen late at\n"
- .string "night, snowfall will arrive by morning.$"
-
-gGlaliePokedexText:: @ 856A79B
- .string "A GLALIE has the power to instantaneously\n"
- .string "freeze moisture in the atmosphere.\n"
- .string "A dazzling cloud of diamondlike ice\n"
- .string "crystals forms around its body.$"
-
-gSphealPokedexText:: @ 856A82C
- .string "It is completely covered with plushy fur.\n"
- .string "As a result, it never feels the cold even\n"
- .string "when it is rolling about on ice floes or\n"
- .string "diving in the sea.$"
-
-gSealeoPokedexText:: @ 856A8BC
- .string "SEALEO live in herds on ice floes. Using its\n"
- .string "powerful flippers, it shatters ice.\n"
- .string "It dives into the sea to hunt prey five\n"
- .string "times a day.$"
-
-gWalreinPokedexText:: @ 856A942
- .string "To protect its herd, the leader battles\n"
- .string "anything that invades its territory, even\n"
- .string "at the cost of its life. Its tusks may snap\n"
- .string "off in battle.$"
-
-gClamperlPokedexText:: @ 856A9CF
- .string "A CLAMPERL slams its shell closed on prey\n"
- .string "to prevent escape. The pearl it creates\n"
- .string "upon evolution is said to be infused with\n"
- .string "a mysterious energy.$"
-
-gHuntailPokedexText:: @ 856AA60
- .string "To withstand the crushing pressure of\n"
- .string "water deep under the sea, its spine is very\n"
- .string "thick and sturdy. Its tail, which is shaped\n"
- .string "like a small fish, has eyes that light up.$"
-
-gGorebyssPokedexText:: @ 856AB09
- .string "A GOREBYSS siphons the body fluids of prey\n"
- .string "through its thin, tubular mouth. Its light\n"
- .string "pink body color turns vivid when it\n"
- .string "finishes feeding.$"
-
-gRelicanthPokedexText:: @ 856AB95
- .string "A POKéMON that was once believed to have\n"
- .string "been extinct. The species has not changed\n"
- .string "its form for 100 million years. It walks on\n"
- .string "the seafloor using its pectoral fins.$"
-
-gLuvdiscPokedexText:: @ 856AC3A
- .string "LUVDISC make the branches of CORSOLA\n"
- .string "their nests. There is a custom from long\n"
- .string "ago of giving a LUVDISC as a gift to\n"
- .string "express one’s feelings of love.$"
-
-gBagonPokedexText:: @ 856ACCD
- .string "Although it is small, this POKéMON is very\n"
- .string "powerful because its body is a bundle of\n"
- .string "muscles. It launches head-butts with its\n"
- .string "ironlike skull.$"
-
-gShelgonPokedexText:: @ 856AD5A
- .string "It hardly eats while it awaits evolution.\n"
- .string "It becomes hardier by enduring hunger.\n"
- .string "Its shell peels off the instant it begins\n"
- .string "to evolve.$"
-
-gSalamencePokedexText:: @ 856ADE0
- .string "After many long years, its cellular\n"
- .string "structure underwent a sudden mutation to\n"
- .string "grow wings. When angered, it loses all\n"
- .string "thought and rampages out of control.$"
-
-gBeldumPokedexText:: @ 856AE79
- .string "When BELDUM gather in a swarm, they move\n"
- .string "in perfect unison as if they were but one\n"
- .string "POKéMON. They communicate with each other\n"
- .string "using brain waves.$"
-
-gMetangPokedexText:: @ 856AF09
- .string "The claws tipping its arms pack the\n"
- .string "destructive power to tear through thick\n"
- .string "iron sheets as if they were silk. It flies\n"
- .string "at over 60 miles per hour.$"
-
-gMetagrossPokedexText:: @ 856AF9B
- .string "METAGROSS has four brains that are joined\n"
- .string "by a complex neural network. As a result of\n"
- .string "integration, this POKéMON is smarter than\n"
- .string "a supercomputer.$"
-
-gRegirockPokedexText:: @ 856B02C
- .string "A POKéMON that is made entirely of rocks\n"
- .string "and boulders. If parts of its body chip off\n"
- .string "in battle, REGIROCK repairs itself by\n"
- .string "adding new rocks.$"
-
-gRegicePokedexText:: @ 856B0B9
- .string "Its entire body is made of Antarctic ice.\n"
- .string "After extensive studies, researchers\n"
- .string "believe the ice was formed during an\n"
- .string "ice age.$"
-
-gRegisteelPokedexText:: @ 856B136
- .string "Its body is harder than any other kind of\n"
- .string "metal. The body metal is composed of a\n"
- .string "mysterious substance. Not only is it hard,\n"
- .string "it shrinks and stretches flexibly.$"
-
-gLatiasPokedexText:: @ 856B1D5
- .string "They make a small herd of only several\n"
- .string "members. They rarely make contact with\n"
- .string "people or other POKéMON. They disappear\n"
- .string "if they sense enemies.$"
-
-gLatiosPokedexText:: @ 856B262
- .string "Even in hiding, it can detect the locations\n"
- .string "of others and sense their emotions since\n"
- .string "it has telepathy. Its intelligence allows\n"
- .string "it to understand human languages.$"
-
-gKyogrePokedexText:: @ 856B303
- .string "KYOGRE has appeared in mythology as the\n"
- .string "creator of the sea. After long years of\n"
- .string "feuding with GROUDON, it took to sleep at\n"
- .string "the bottom of the sea.$"
-
-gGroudonPokedexText:: @ 856B394
- .string "GROUDON has appeared in mythology as the\n"
- .string "creator of the land. It sleeps in magma\n"
- .string "underground and is said to make volcanoes\n"
- .string "erupt on awakening.$"
-
-gRayquazaPokedexText:: @ 856B423
- .string "A POKéMON that flies endlessly in the\n"
- .string "ozone layer. It is said it would descend\n"
- .string "to the ground if KYOGRE and GROUDON\n"
- .string "were to fight.$"
-
-gJirachiPokedexText:: @ 856B4A5
- .string "JIRACHI is said to make wishes come true.\n"
- .string "While it sleeps, a tough crystalline shell\n"
- .string "envelops the body to protect it from\n"
- .string "enemies.$"
-
-gDeoxysPokedexText:: @ 856B528
- .string "A POKéMON that mutated from an\n"
- .string "extraterrestrial virus exposed to a laser\n"
- .string "beam. Its body is configured for superior\n"
- .string "agility and speed.$"
diff --git a/graphics/interface/menu.png b/graphics/battle_interface/textbox.png
index 96f6b8b15..96f6b8b15 100644
--- a/graphics/interface/menu.png
+++ b/graphics/battle_interface/textbox.png
Binary files differ
diff --git a/graphics/interface/menu_0.pal b/graphics/battle_interface/textbox_0.pal
index 67e1af896..67e1af896 100644
--- a/graphics/interface/menu_0.pal
+++ b/graphics/battle_interface/textbox_0.pal
diff --git a/graphics/interface/menu_1.pal b/graphics/battle_interface/textbox_1.pal
index 3adc73766..3adc73766 100644
--- a/graphics/interface/menu_1.pal
+++ b/graphics/battle_interface/textbox_1.pal
diff --git a/graphics/interface/menu_map.bin b/graphics/battle_interface/textbox_map.bin
index 8a7b3f1f0..8a7b3f1f0 100644
--- a/graphics/interface/menu_map.bin
+++ b/graphics/battle_interface/textbox_map.bin
Binary files differ
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index fb250ad82..0a22a711c 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -309,8 +309,8 @@ graphics/pokenav/region_map.8bpp: %.8bpp: %.png
$(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 29
-$(INTERFACEGFXDIR)/menu.gbapal: $(INTERFACEGFXDIR)/menu_0.gbapal \
- $(INTERFACEGFXDIR)/menu_1.gbapal
+$(BATINTGFXDIR)/textbox.gbapal: $(BATINTGFXDIR)/textbox_0.gbapal \
+ $(BATINTGFXDIR)/textbox_1.gbapal
@cat $^ >$@
$(BTLANMSPRGFXDIR)/010.4bpp: $(BTLANMSPRGFXDIR)/010_0.4bpp \
diff --git a/include/battle_anim.h b/include/battle_anim.h
index e164cef7a..16e9de0ac 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -73,9 +73,35 @@ void HandleIntroSlide(u8 terrainId);
u32 GetAnimBgAttribute(u8 bgId, u8 attributeId);
// battle_anim_80A5C6C.s
-void sub_80A6EEC(struct Sprite *sprite);
-void sub_80A68D4(struct Sprite *sprite);
+void sub_80A6450(struct Sprite *sprite);
+void SetAverageBattlerPositions(u8 battlerId, bool8 a2, s16 *x, s16 *y);
+void move_anim_8074EE0(struct Sprite *sprite);
+void sub_80A656C(struct Sprite *sprite);
+void InitAnimSpritePos(struct Sprite *sprite, u8 a2);
+void sub_80A6980(struct Sprite *sprite, bool8 a2);
+void StartAnimLinearTranslation(struct Sprite *sprite);
+void InitAnimArcTranslation(struct Sprite *sprite);
bool8 TranslateAnimLinear(struct Sprite *sprite);
+void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
+void sub_80A8EE4(struct Sprite *sprite);
+u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId);
+void sub_80A6FD4(struct Sprite *sprite);
+u16 ArcTan2Neg(s16 a, s16 b);
+void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation);
+void sub_80A67BC(struct Sprite *sprite);
+void sub_80A66DC(struct Sprite *sprite);
+void sub_80A6838(struct Sprite *sprite);
+void sub_80A67D8(struct Sprite *sprite);
+void sub_80A6864(struct Sprite *sprite, s16 a2);
+s16 sub_80A861C(u8 battlerId, u8 a2);
+u8 GetBattlerYCoordWithElevation(u8 battlerId);
+void WaitAnimForDuration(struct Sprite *sprite);
+void sub_80A7938(struct Sprite *sprite);
+void InitAnimLinearTranslation(struct Sprite *sprite);
+void sub_80A6F98(struct Sprite *sprite);
+u8 sub_80A8328(u8 battlerId);
+void *sub_80A8050(s16 bottom, s16 top);
+void sub_80A8048(s16 *bottom, s16 *top, const void *ptr);
void sub_80A8278(void);
void sub_80A6B30(struct UnknownAnimStruct2*);
void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
@@ -85,7 +111,7 @@ void sub_80A6630(struct Sprite *sprite);
void sub_80A6680(struct Sprite *sprite);
void sub_80A7344(u8 spriteId);
void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
-void sub_80A6E14(struct Sprite *sprite);
+void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
void sub_80A7270(u8 spriteId, u8 objMode);
void sub_80A73A0(u8 spriteId);
u32 sub_80A75AC(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7);
diff --git a/include/bg.h b/include/bg.h
index f2d4e7948..a10abaa8d 100644
--- a/include/bg.h
+++ b/include/bg.h
@@ -70,14 +70,14 @@ void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset);
void CopyBgTilemapBufferToVram(u8 bg);
void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height);
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
-void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2);
+void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset);
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta);
u16 GetBgMetricTextMode(u8 bg, u8 whichMetric);
u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric);
u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight);
-void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2);
+void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2);
u32 GetBgType(u8 bg);
bool32 IsInvalidBg32(u8 bg);
bool32 IsTileMapOutsideWram(u8 bg);
diff --git a/include/contest.h b/include/contest.h
index 502d44b90..8790d7371 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -226,6 +226,11 @@ extern u8 gUnknown_02039F24;
extern u16 gSpecialVar_ContestCategory;
extern u16 gSpecialVar_ContestRank;
extern u8 gUnknown_02039F30;
+extern u8 gContestFinalStandings[4];
+extern u8 gContestPlayerMonIndex;
+extern s16 gUnknown_02039F08[4];
+extern s16 gContestMonConditions[4];
+extern u8 gIsLinkContest;
struct Shared18000
{
@@ -427,5 +432,6 @@ bool8 Contest_IsMonsTurnDisabled(u8 a);
bool8 sub_80DE1E8(u8 a);
void SetStartledString(u8 a, u8 b);
s8 Contest_GetMoveExcitement(u16);
+void sub_80DEDA8(u8);
#endif //GUARD_CONTEST_H
diff --git a/include/contest_link_80F57C4.h b/include/contest_link_80F57C4.h
index 3c12e5e53..b4ccf2803 100644
--- a/include/contest_link_80F57C4.h
+++ b/include/contest_link_80F57C4.h
@@ -1,7 +1,10 @@
#ifndef GUARD_CONTEST_LINK_80F57C4_H
#define GUARD_CONTEST_LINK_80F57C4_H
+void sub_80F8264(void);
+void sub_80F8290(void);
void sub_80F840C(void);
+void sub_80F8438(void);
void sub_80F8484(void);
void sub_80F84C4(u8);
void sub_80FC998(u8 taskId);
diff --git a/include/contest_painting.h b/include/contest_painting.h
index f8366a997..67a845d62 100644
--- a/include/contest_painting.h
+++ b/include/contest_painting.h
@@ -2,5 +2,6 @@
#define GUARD_CONTESTPAINTING_H
void sub_812FDA8(u32);
+void sub_812FDEC(void);
#endif
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index f6273e80d..1f14880f0 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -192,8 +192,8 @@ struct EventObject
struct __attribute__((packed)) {
u8 x:4;
u8 y:4;
- } __attribute__((aligned (1))) as_nybbles;
- } __attribute__((aligned (1))) range;
+ } ALIGNED(1) as_nybbles;
+ } ALIGNED(1) range;
/*0x1A*/ u8 fieldEffectSpriteId;
/*0x1B*/ u8 warpArrowSpriteId;
/*0x1C*/ u8 movementActionId;
diff --git a/include/graphics.h b/include/graphics.h
index a3af44ad7..0620ea551 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -1237,7 +1237,7 @@ extern const u32 gMonBackPic_Pichu[];
extern const u32 gMonShinyPalette_Pichu[];
extern const u32 gMonStillFrontPic_Pichu[];
extern const u8 gMonIcon_Pichu[];
-extern const u32 gMonFootprint_Pichu[];
+extern const u8 gMonFootprint_Pichu[];
extern const u32 gMonFrontPic_Cleffa[];
extern const u32 gMonPalette_Cleffa[];
extern const u32 gMonBackPic_Cleffa[];
@@ -2860,6 +2860,7 @@ extern const u32 gMonPalette_CircledQuestionMark[];
extern const u32 gMonShinyPalette_CircledQuestionMark[];
extern const u32 gMonStillFrontPic_CircledQuestionMark[];
extern const u8 gMonIcon_QuestionMark[];
+extern const u8 gMonFootprint_QuestionMark[];
extern const u32 gMonFrontPic_DoubleQuestionMark[];
extern const u32 gMonBackPic_DoubleQuestionMark[];
extern const u32 gMonPalette_DoubleQuestionMark[];
@@ -4732,4 +4733,7 @@ extern const u32 gUnknown_08D927EC[];
extern const u32 gSlotMachineReelTime_Gfx[];
+extern const u32 gUnknown_08D8D410[];
+extern const u32 gUnknown_08D8D58C[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/international_string_util.h b/include/international_string_util.h
index 426a2d48c..343c5453c 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -16,7 +16,7 @@ s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2);
// sub_81DB494
void PadNameString(u8 *dst, u8 padWith);
void sub_81DB554(u8 *, u8);
-// sub_81DB5AC
+void sub_81DB5AC(u8 *);
u32 sub_81DB604(const u8 *);
// sub_81DB620
diff --git a/include/pokemon.h b/include/pokemon.h
index 3e69845e6..5d7f7f2ae 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -112,25 +112,6 @@
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
-#define TYPE_NORMAL 0x00
-#define TYPE_FIGHTING 0x01
-#define TYPE_FLYING 0x02
-#define TYPE_POISON 0x03
-#define TYPE_GROUND 0x04
-#define TYPE_ROCK 0x05
-#define TYPE_BUG 0x06
-#define TYPE_GHOST 0x07
-#define TYPE_STEEL 0x08
-#define TYPE_MYSTERY 0x09
-#define TYPE_FIRE 0x0a
-#define TYPE_WATER 0x0b
-#define TYPE_GRASS 0x0c
-#define TYPE_ELECTRIC 0x0d
-#define TYPE_PSYCHIC 0x0e
-#define TYPE_ICE 0x0f
-#define TYPE_DRAGON 0x10
-#define TYPE_DARK 0x11
-
#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0
#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused
#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused
@@ -465,7 +446,6 @@ extern const u8 gUnknown_08329D2A[];
extern const u8 gStatStageRatios[][2];
extern const u16 gUnknown_08329D54[];
extern const struct SpriteTemplate gUnknown_08329D98[];
-extern const struct CompressedSpritePalette gMonPaletteTable[];
extern const s8 gNatureStatTable[][5];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
diff --git a/include/script_pokemon_util_80F87D8.h b/include/script_pokemon_util_80F87D8.h
index 7c2a1ff66..02a35ecba 100644
--- a/include/script_pokemon_util_80F87D8.h
+++ b/include/script_pokemon_util_80F87D8.h
@@ -1,9 +1,8 @@
-
#ifndef GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
u16 sub_80F903C(void);
-void ReducePlayerPartyToThree(void);
+void ReducePlayerPartyToSelectedMons(void);
void HealPlayerParty(void);
#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
diff --git a/include/strings.h b/include/strings.h
index c4af6f5b2..1649910cc 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -989,6 +989,56 @@ extern const u8 gUnknown_0827EE03[];
extern const u8 gUnknown_0827EE05[];
extern const u8 gUnknown_0827EE07[];
extern const u8 gUnknown_0827EE09[];
+
+// Pokedex strings
+extern const u8 gUnknown_085E87A5[];
+extern const u8 gUnknown_085E87D6[];
+extern const u8 gUnknown_085E87EF[];
+extern const u8 gUnknown_085E8806[];
+extern const u8 gUnknown_085E881F[];
+extern const u8 gUnknown_085E8840[];
+extern const u8 gUnknown_085E887C[];
+extern const u8 gUnknown_085E88A6[];
+extern const u8 gUnknown_085E88C8[];
+extern const u8 gUnknown_085E88DF[];
+extern const u8 gUnknown_085E88E9[];
+extern const u8 gUnknown_085E88F6[];
+extern const u8 gUnknown_085E8905[];
+extern const u8 gUnknown_085E8911[];
+extern const u8 gUnknown_085E891F[];
+extern const u8 gUnknown_085E892D[];
+extern const u8 gUnknown_085E893A[];
+extern const u8 gUnknown_085E8948[];
+extern const u8 gUnknown_085E894C[];
+extern const u8 gUnknown_085E8950[];
+extern const u8 gUnknown_085E8954[];
+extern const u8 gUnknown_085E8958[];
+extern const u8 gUnknown_085E895C[];
+extern const u8 gUnknown_085E8960[];
+extern const u8 gUnknown_085E8964[];
+extern const u8 gUnknown_085E8968[];
+extern const u8 gUnknown_085E896B[];
+extern const u8 gUnknown_085E896F[];
+extern const u8 gUnknown_085E8974[];
+extern const u8 gUnknown_085E897B[];
+extern const u8 gUnknown_085E8981[];
+extern const u8 gUnknown_085E8987[];
+extern const u8 gUnknown_085E898D[];
+extern const u8 gUnknown_085E8994[];
+extern const u8 gUnknown_085E8999[];
+extern const u8 gUnknown_085E899F[];
+extern const u8 gUnknown_085E89A4[];
+extern const u8 gUnknown_085E89BB[];
+extern const u8 gUnknown_085E89D4[];
+extern const u8 gUnknown_085E8A02[];
+extern const u8 gUnknown_085E8A37[];
+extern const u8 gUnknown_085E8A73[];
+extern const u8 gUnknown_085E8AAF[];
+extern const u8 gUnknown_085E8AEA[];
+extern const u8 gUnknown_085E8B25[];
+extern const u8 gUnknown_085E8B26[];
+extern const u8 gUnknown_085E8B35[];
+
extern const u8 gUnknown_085EAEC3[];
extern const u8 gUnknown_085EAED6[];
extern const u8 gUnknown_085EAEE6[];
diff --git a/include/text.h b/include/text.h
index 4946f1c5f..27a6364bb 100644
--- a/include/text.h
+++ b/include/text.h
@@ -109,7 +109,8 @@
#define TEXT_SPEED_FF 0xFF
-enum {
+enum
+{
FONTATTR_MAX_LETTER_WIDTH,
FONTATTR_MAX_LETTER_HEIGHT,
FONTATTR_LETTER_SPACING,
@@ -205,21 +206,16 @@ typedef struct {
struct Struct_03002F90
{
- u8 unk0[0x20];
- u8 unk20[0x20];
- u8 unk40[0x20];
- u8 unk60[0x20];
+ u32 unk0[8];
+ u32 unk20[8];
+ u32 unk40[8];
+ u32 unk60[8];
u8 unk80;
u8 unk81;
};
extern TextFlags gTextFlags;
-extern u8 gStringVar1[];
-extern u8 gStringVar2[];
-extern u8 gStringVar3[];
-extern u8 gStringVar4[];
-
extern u8 gUnknown_03002F84;
extern struct Struct_03002F90 gUnknown_03002F90;
@@ -233,7 +229,7 @@ u32 RenderFont(struct TextPrinter *textPrinter);
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor);
void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
-void DecompressGlyphTile(const u16 *src, u16 *dest);
+void DecompressGlyphTile(const void *src_, void *dest_);
u8 GetLastTextColor(u8 colorType);
void CopyGlyphToWindow(struct TextPrinter *x);
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
diff --git a/ld_script.txt b/ld_script.txt
index 0307d4361..c385ba2c1 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -147,7 +147,7 @@ SECTIONS {
src/secret_base.o(.text);
src/tv.o(.text);
asm/contest_link_80F57C4.o(.text);
- asm/script_pokemon_util_80F87D8.o(.text);
+ src/script_pokemon_util_80F87D8.o(.text);
src/field_poison.o(.text);
src/pokemon_size_record.o(.text);
asm/fldeff_80F9BCC.o(.text);
@@ -162,16 +162,16 @@ SECTIONS {
asm/fire.o(.text);
asm/electric.o(.text);
asm/ice.o(.text);
- asm/fight.o(.text);
- asm/poison.o(.text);
+ src/fight.o(.text);
+ src/poison.o(.text);
asm/flying.o(.text);
asm/psychic.o(.text);
- asm/bug.o(.text);
- asm/rock.o(.text);
+ src/bug.o(.text);
+ src/rock.o(.text);
asm/ghost.o(.text);
- asm/dragon.o(.text);
+ src/dragon.o(.text);
asm/dark.o(.text);
- asm/ground.o(.text);
+ src/ground.o(.text);
asm/normal.o(.text);
src/battle_anim_utility_funcs.o(.text);
asm/battle_intro.o(.text);
@@ -454,7 +454,6 @@ SECTIONS {
src/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/pokedex.o(.rodata);
- data/pokedex.o(.rodata);
data/trainer_card.o(.rodata);
src/pokemon_storage_system.o(.rodata);
data/pokemon_storage_system.o(.rodata);
@@ -474,7 +473,7 @@ SECTIONS {
src/secret_base.o(.rodata);
src/tv.o(.rodata);
data/contest_link_80F57C4.o(.rodata);
- data/script_pokemon_util_80F87D8.o(.rodata);
+ src/script_pokemon_util_80F87D8.o(.rodata);
src/pokemon_size_record.o(.rodata)
data/field_effect_misc.o(.rodata);
src/field_special_scene.o(.rodata);
@@ -617,10 +616,10 @@ SECTIONS {
{
sound/songs/midi/mus_dummy.o(.rodata);
sound/songs/midi/se_kaifuku.o(.rodata);
- sound/songs/se_pc_login.o(.rodata);
- sound/songs/se_pc_off.o(.rodata);
- sound/songs/se_pc_on.o(.rodata);
- sound/songs/se_select.o(.rodata);
+ sound/songs/midi/se_pc_login.o(.rodata);
+ sound/songs/midi/se_pc_off.o(.rodata);
+ sound/songs/midi/se_pc_on.o(.rodata);
+ sound/songs/midi/se_select.o(.rodata);
sound/songs/se_win_open.o(.rodata);
sound/songs/se_wall_hit.o(.rodata);
sound/songs/midi/se_door.o(.rodata);
@@ -631,12 +630,12 @@ SECTIONS {
sound/songs/midi/se_kouka_m.o(.rodata);
sound/songs/midi/se_kouka_h.o(.rodata);
sound/songs/midi/se_bowa2.o(.rodata);
- sound/songs/se_poke_dead.o(.rodata);
- sound/songs/se_nigeru.o(.rodata);
+ sound/songs/midi/se_poke_dead.o(.rodata);
+ sound/songs/midi/se_nigeru.o(.rodata);
sound/songs/midi/se_jido_doa.o(.rodata);
- sound/songs/se_naminori.o(.rodata);
+ sound/songs/midi/se_naminori.o(.rodata);
sound/songs/midi/se_ban.o(.rodata);
- sound/songs/se_pin.o(.rodata);
+ sound/songs/midi/se_pin.o(.rodata);
sound/songs/midi/se_boo.o(.rodata);
sound/songs/midi/se_bowa.o(.rodata);
sound/songs/midi/se_jyuni.o(.rodata);
@@ -644,21 +643,21 @@ SECTIONS {
sound/songs/midi/se_i.o(.rodata);
sound/songs/se_u.o(.rodata);
sound/songs/midi/se_e.o(.rodata);
- sound/songs/se_o.o(.rodata);
- sound/songs/se_n.o(.rodata);
- sound/songs/se_seikai.o(.rodata);
+ sound/songs/midi/se_o.o(.rodata);
+ sound/songs/midi/se_n.o(.rodata);
+ sound/songs/midi/se_seikai.o(.rodata);
sound/songs/midi/se_hazure.o(.rodata);
sound/songs/midi/se_exp.o(.rodata);
sound/songs/midi/se_jite_pyoko.o(.rodata);
- sound/songs/se_mu_pachi.o(.rodata);
+ sound/songs/midi/se_mu_pachi.o(.rodata);
sound/songs/se_tk_kasya.o(.rodata);
sound/songs/midi/se_fu_zaku.o(.rodata);
sound/songs/midi/se_fu_zaku2.o(.rodata);
sound/songs/midi/se_fu_zuzuzu.o(.rodata);
- sound/songs/se_ru_gashin.o(.rodata);
- sound/songs/se_ru_gasyan.o(.rodata);
- sound/songs/se_ru_bari.o(.rodata);
- sound/songs/se_ru_hyuu.o(.rodata);
+ sound/songs/midi/se_ru_gashin.o(.rodata);
+ sound/songs/midi/se_ru_gasyan.o(.rodata);
+ sound/songs/midi/se_ru_bari.o(.rodata);
+ sound/songs/midi/se_ru_hyuu.o(.rodata);
sound/songs/midi/se_ki_gasyan.o(.rodata);
sound/songs/se_tk_warpin.o(.rodata);
sound/songs/se_tk_warpout.o(.rodata);
@@ -668,15 +667,15 @@ SECTIONS {
sound/songs/se_track_stop.o(.rodata);
sound/songs/se_track_haiki.o(.rodata);
sound/songs/se_track_door.o(.rodata);
- sound/songs/se_moter.o(.rodata);
+ sound/songs/midi/se_moter.o(.rodata);
sound/songs/midi/se_card.o(.rodata);
- sound/songs/se_save.o(.rodata);
+ sound/songs/midi/se_save.o(.rodata);
sound/songs/midi/se_kon.o(.rodata);
sound/songs/midi/se_kon2.o(.rodata);
sound/songs/midi/se_kon3.o(.rodata);
sound/songs/midi/se_kon4.o(.rodata);
- sound/songs/se_suikomu.o(.rodata);
- sound/songs/se_nageru.o(.rodata);
+ sound/songs/midi/se_suikomu.o(.rodata);
+ sound/songs/midi/se_nageru.o(.rodata);
sound/songs/se_toy_c.o(.rodata);
sound/songs/se_toy_d.o(.rodata);
sound/songs/se_toy_e.o(.rodata);
@@ -685,10 +684,10 @@ SECTIONS {
sound/songs/se_toy_a.o(.rodata);
sound/songs/se_toy_b.o(.rodata);
sound/songs/se_toy_c1.o(.rodata);
- sound/songs/se_mizu.o(.rodata);
+ sound/songs/midi/se_mizu.o(.rodata);
sound/songs/midi/se_hashi.o(.rodata);
sound/songs/midi/se_daugi.o(.rodata);
- sound/songs/se_pinpon.o(.rodata);
+ sound/songs/midi/se_pinpon.o(.rodata);
sound/songs/midi/se_fuusen1.o(.rodata);
sound/songs/midi/se_fuusen2.o(.rodata);
sound/songs/midi/se_fuusen3.o(.rodata);
@@ -696,37 +695,37 @@ SECTIONS {
sound/songs/se_toy_dango.o(.rodata);
sound/songs/midi/se_doku.o(.rodata);
sound/songs/midi/se_esuka.o(.rodata);
- sound/songs/se_t_ame.o(.rodata);
- sound/songs/se_t_ame_e.o(.rodata);
- sound/songs/se_t_ooame.o(.rodata);
- sound/songs/se_t_ooame_e.o(.rodata);
- sound/songs/se_t_koame.o(.rodata);
- sound/songs/se_t_koame_e.o(.rodata);
- sound/songs/se_t_kami.o(.rodata);
- sound/songs/se_t_kami2.o(.rodata);
+ sound/songs/midi/se_t_ame.o(.rodata);
+ sound/songs/midi/se_t_ame_e.o(.rodata);
+ sound/songs/midi/se_t_ooame.o(.rodata);
+ sound/songs/midi/se_t_ooame_e.o(.rodata);
+ sound/songs/midi/se_t_koame.o(.rodata);
+ sound/songs/midi/se_t_koame_e.o(.rodata);
+ sound/songs/midi/se_t_kami.o(.rodata);
+ sound/songs/midi/se_t_kami2.o(.rodata);
sound/songs/midi/se_elebeta.o(.rodata);
sound/songs/midi/se_hinsi.o(.rodata);
sound/songs/midi/se_expmax.o(.rodata);
sound/songs/se_tamakoro.o(.rodata);
sound/songs/se_tamakoro_e.o(.rodata);
sound/songs/midi/se_basabasa.o(.rodata);
- sound/songs/se_regi.o(.rodata);
+ sound/songs/midi/se_regi.o(.rodata);
sound/songs/midi/se_c_gaji.o(.rodata);
sound/songs/midi/se_c_maku_u.o(.rodata);
sound/songs/midi/se_c_maku_d.o(.rodata);
sound/songs/midi/se_c_pasi.o(.rodata);
sound/songs/midi/se_c_syu.o(.rodata);
sound/songs/midi/se_c_pikon.o(.rodata);
- sound/songs/se_reapoke.o(.rodata);
- sound/songs/se_op_basyu.o(.rodata);
+ sound/songs/midi/se_reapoke.o(.rodata);
+ sound/songs/midi/se_op_basyu.o(.rodata);
sound/songs/midi/se_bt_start.o(.rodata);
sound/songs/midi/se_dendou.o(.rodata);
sound/songs/midi/se_jihanki.o(.rodata);
sound/songs/se_tama.o(.rodata);
sound/songs/se_z_scroll.o(.rodata);
sound/songs/se_z_page.o(.rodata);
- sound/songs/se_pn_on.o(.rodata);
- sound/songs/se_pn_off.o(.rodata);
+ sound/songs/midi/se_pn_on.o(.rodata);
+ sound/songs/midi/se_pn_off.o(.rodata);
sound/songs/midi/se_z_search.o(.rodata);
sound/songs/se_tamago.o(.rodata);
sound/songs/se_tb_start.o(.rodata);
@@ -863,21 +862,21 @@ SECTIONS {
sound/songs/se_w287b.o(.rodata);
sound/songs/se_w114.o(.rodata);
sound/songs/se_w063b.o(.rodata);
- sound/songs/se_rg_w_door.o(.rodata);
- sound/songs/se_rg_card1.o(.rodata);
- sound/songs/se_rg_card2.o(.rodata);
- sound/songs/se_rg_card3.o(.rodata);
- sound/songs/se_rg_bag1.o(.rodata);
- sound/songs/se_rg_bag2.o(.rodata);
- sound/songs/se_rg_getting.o(.rodata);
- sound/songs/se_rg_shop.o(.rodata);
- sound/songs/se_rg_kiteki.o(.rodata);
- sound/songs/se_rg_help_op.o(.rodata);
- sound/songs/se_rg_help_cl.o(.rodata);
- sound/songs/se_rg_help_ng.o(.rodata);
- sound/songs/se_rg_deomov.o(.rodata);
- sound/songs/se_rg_excellent.o(.rodata);
- sound/songs/se_rg_nawamiss.o(.rodata);
+ sound/songs/midi/se_rg_w_door.o(.rodata);
+ sound/songs/midi/se_rg_card1.o(.rodata);
+ sound/songs/midi/se_rg_card2.o(.rodata);
+ sound/songs/midi/se_rg_card3.o(.rodata);
+ sound/songs/midi/se_rg_bag1.o(.rodata);
+ sound/songs/midi/se_rg_bag2.o(.rodata);
+ sound/songs/midi/se_rg_getting.o(.rodata);
+ sound/songs/midi/se_rg_shop.o(.rodata);
+ sound/songs/midi/se_rg_kiteki.o(.rodata);
+ sound/songs/midi/se_rg_help_op.o(.rodata);
+ sound/songs/midi/se_rg_help_cl.o(.rodata);
+ sound/songs/midi/se_rg_help_ng.o(.rodata);
+ sound/songs/midi/se_rg_deomov.o(.rodata);
+ sound/songs/midi/se_rg_excellent.o(.rodata);
+ sound/songs/midi/se_rg_nawamiss.o(.rodata);
sound/songs/se_toreeye.o(.rodata);
sound/songs/se_toreoff.o(.rodata);
sound/songs/midi/se_hantei1.o(.rodata);
diff --git a/songs.mk b/songs.mk
index dd65ffce7..3520e5c05 100644
--- a/songs.mk
+++ b/songs.mk
@@ -951,5 +951,155 @@ $(MID_SUBDIR)/se_kouka_l.s: %.s: %.mid
$(MID_SUBDIR)/se_kouka_m.s: %.s: %.mid
$(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5
+$(MID_SUBDIR)/se_mizu.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V020 -P4
+
+$(MID_SUBDIR)/se_moter.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4
+
+$(MID_SUBDIR)/se_mu_pachi.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4
+
+$(MID_SUBDIR)/se_n.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -P4
+
+$(MID_SUBDIR)/se_nageru.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P5
+
+$(MID_SUBDIR)/se_naminori.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V075 -P4
+
+$(MID_SUBDIR)/se_nigeru.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5
+
+$(MID_SUBDIR)/se_o.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4
+
+$(MID_SUBDIR)/se_op_basyu.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_pc_login.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_pc_off.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_pc_on.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_pin.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V060 -P4
+
+$(MID_SUBDIR)/se_pinpon.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5
+
+$(MID_SUBDIR)/se_pn_off.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_pn_on.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_poke_dead.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5
+
+$(MID_SUBDIR)/se_reapoke.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P5
+
+$(MID_SUBDIR)/se_regi.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5
+
+$(MID_SUBDIR)/se_rg_bag1.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5
+
+$(MID_SUBDIR)/se_rg_bag2.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5
+
+$(MID_SUBDIR)/se_rg_card1.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5
+
+$(MID_SUBDIR)/se_rg_card2.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5
+
+$(MID_SUBDIR)/se_rg_card3.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V112 -P5
+
+$(MID_SUBDIR)/se_rg_deomov.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V080 -P5
+
+$(MID_SUBDIR)/se_rg_excellent.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P5
+
+$(MID_SUBDIR)/se_rg_getting.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V100 -P5
+
+$(MID_SUBDIR)/se_rg_help_cl.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V095 -P5
+
+$(MID_SUBDIR)/se_rg_help_ng.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V125 -P5
+
+$(MID_SUBDIR)/se_rg_help_op.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V096 -P5
+
+$(MID_SUBDIR)/se_rg_kiteki.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V096 -P5
+
+$(MID_SUBDIR)/se_rg_nawamiss.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -P5
+
+$(MID_SUBDIR)/se_rg_shop.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V080 -P5
+
+$(MID_SUBDIR)/se_rg_w_door.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V100 -P5
+
+$(MID_SUBDIR)/se_ru_bari.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4
+
+$(MID_SUBDIR)/se_ru_gashin.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4
+
+$(MID_SUBDIR)/se_ru_gasyan.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4
+
+$(MID_SUBDIR)/se_ru_hyuu.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4
+
+$(MID_SUBDIR)/se_save.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P5
+
+$(MID_SUBDIR)/se_seikai.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P4
+
+$(MID_SUBDIR)/se_select.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P5
+
+$(MID_SUBDIR)/se_suikomu.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5
+
+$(MID_SUBDIR)/se_t_ame.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2
+
+$(MID_SUBDIR)/se_t_ame_e.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2
+
+$(MID_SUBDIR)/se_t_kami.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P3
+
+$(MID_SUBDIR)/se_t_kami2.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P3
+
+$(MID_SUBDIR)/se_t_koame.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2
+
+$(MID_SUBDIR)/se_t_koame_e.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2
+
+$(MID_SUBDIR)/se_t_ooame.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P2
+
+$(MID_SUBDIR)/se_t_ooame_e.s: %.s: %.mid
+ $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P2
+
$(MID_SUBDIR)/se_z_search.s: %.s: %.mid
$(MID) $< $@ -E -R$(STD_REVERB) -G127 -P5
diff --git a/sound/song_table.inc b/sound/song_table.inc
index 5b5813ab2..42e62b832 100644
--- a/sound/song_table.inc
+++ b/sound/song_table.inc
@@ -3,7 +3,7 @@
gSongTable:: @ 86B49F0
song mus_dummy, 0, 0
song se_kaifuku, 1, 1 @ Healing Item
- song se_pc_login, 1, 1 @ PC Logon
+ song se_pc_login, 1, 1 @ PC Login
song se_pc_off, 1, 1 @ PC Shutdown
song se_pc_on, 1, 1 @ PC Startup
song se_select, 2, 2 @ Cursor Selection
@@ -36,7 +36,7 @@ gSongTable:: @ 86B49F0
song se_hazure, 1, 1 @ Failure
song se_exp, 1, 1 @ Exp. Bar
song se_jite_pyoko, 1, 1 @ Bunny Hop
- song se_mu_pachi, 1, 1
+ song se_mu_pachi, 1, 1 @ Toggle Switch
song se_tk_kasya, 1, 1 @ Mossdeep Gym/Trick House Switch
song se_fu_zaku, 1, 1
song se_fu_zaku2, 1, 1
@@ -44,7 +44,7 @@ gSongTable:: @ 86B49F0
song se_ru_gashin, 1, 1 @ Sootopolis Gym - Stairs Appear
song se_ru_gasyan, 1, 1 @ Sootopolis Gym - Ice Breaking
song se_ru_bari, 1, 1 @ Sootopolis Gym - Walking on Ice
- song se_ru_hyuu, 1, 1 @ Falling Down
+ song se_ru_hyuu, 1, 1 @ Falling Down a Hole
song se_ki_gasyan, 2, 2
song se_tk_warpin, 1, 1 @ Warp In
song se_tk_warpout, 1, 1 @ Warp Out
@@ -74,7 +74,7 @@ gSongTable:: @ 86B49F0
song se_mizu, 2, 2 @ Puddle
song se_hashi, 2, 2 @ Fortree Walkways
song se_daugi, 1, 1 @ Slots - Credits
- song se_pinpon, 1, 1 @ Ding-dong!
+ song se_pinpon, 1, 1 @ Elevator - Reached Destination
song se_fuusen1, 2, 2 @ Red Balloon
song se_fuusen2, 2, 2 @ Blue Balloon
song se_fuusen3, 2, 2 @ Yellow Balloon
@@ -104,7 +104,7 @@ gSongTable:: @ 86B49F0
song se_c_syu, 1, 1 @ Contest - Pokémon Switches Out
song se_c_pikon, 1, 1 @ Contest - Pokémon Switches In
song se_reapoke, 1, 1 @ Shiny Pokémon
- song se_op_basyu, 1, 1 @ Opening Movie -> Title Screen whoosh
+ song se_op_basyu, 1, 1 @ Opening Movie -> Title Screen Transition
song se_bt_start, 1, 1 @ Battle Mugshot whoosh
song se_dendou, 1, 1 @ Audience Cheering
song se_jihanki, 1, 1 @ Vending Machine
@@ -255,14 +255,14 @@ gSongTable:: @ 86B49F0
song se_rg_card3, 1, 1 @ Trainer Card 3 (FRLG)
song se_rg_bag1, 1, 1 @ Bag Scroll (FRLG)
song se_rg_bag2, 1, 1 @ Bag Pocket Change (FRLG)
- song se_rg_getting, 1, 1
+ song se_rg_getting, 1, 1
song se_rg_shop, 1, 1 @ Cash Register (FRLG)
song se_rg_kiteki, 1, 1 @ S.S. Anne Horn (FRLG)
song se_rg_help_op, 1, 1 @ Help Menu Open (FRLG)
song se_rg_help_cl, 1, 1 @ Help Menu Close (FRLG)
song se_rg_help_ng, 1, 1 @ Help Menu Error (FRLG)
song se_rg_deomov, 1, 1 @ Deoxys Moves
- song se_rg_excellent, 1, 1
+ song se_rg_excellent, 1, 1 @ HP Restored (FRLG)
song se_rg_nawamiss, 1, 1
song se_toreeye, 1, 1 @ Trainer's Eye Call
song se_toreoff, 1, 1 @ Trainer's Eye Hang Up
diff --git a/sound/songs/midi/se_mizu.mid b/sound/songs/midi/se_mizu.mid
new file mode 100644
index 000000000..dfdc85619
--- /dev/null
+++ b/sound/songs/midi/se_mizu.mid
Binary files differ
diff --git a/sound/songs/midi/se_moter.mid b/sound/songs/midi/se_moter.mid
new file mode 100644
index 000000000..8203333e5
--- /dev/null
+++ b/sound/songs/midi/se_moter.mid
Binary files differ
diff --git a/sound/songs/midi/se_mu_pachi.mid b/sound/songs/midi/se_mu_pachi.mid
new file mode 100644
index 000000000..3d909dadb
--- /dev/null
+++ b/sound/songs/midi/se_mu_pachi.mid
Binary files differ
diff --git a/sound/songs/midi/se_n.mid b/sound/songs/midi/se_n.mid
new file mode 100644
index 000000000..282bdf216
--- /dev/null
+++ b/sound/songs/midi/se_n.mid
Binary files differ
diff --git a/sound/songs/midi/se_nageru.mid b/sound/songs/midi/se_nageru.mid
new file mode 100644
index 000000000..171f45a5a
--- /dev/null
+++ b/sound/songs/midi/se_nageru.mid
Binary files differ
diff --git a/sound/songs/midi/se_naminori.mid b/sound/songs/midi/se_naminori.mid
new file mode 100644
index 000000000..ba2aa4931
--- /dev/null
+++ b/sound/songs/midi/se_naminori.mid
Binary files differ
diff --git a/sound/songs/midi/se_nigeru.mid b/sound/songs/midi/se_nigeru.mid
new file mode 100644
index 000000000..faf37d529
--- /dev/null
+++ b/sound/songs/midi/se_nigeru.mid
Binary files differ
diff --git a/sound/songs/midi/se_o.mid b/sound/songs/midi/se_o.mid
new file mode 100644
index 000000000..5dfc32727
--- /dev/null
+++ b/sound/songs/midi/se_o.mid
Binary files differ
diff --git a/sound/songs/midi/se_op_basyu.mid b/sound/songs/midi/se_op_basyu.mid
new file mode 100644
index 000000000..4648741c2
--- /dev/null
+++ b/sound/songs/midi/se_op_basyu.mid
Binary files differ
diff --git a/sound/songs/midi/se_pc_login.mid b/sound/songs/midi/se_pc_login.mid
new file mode 100644
index 000000000..f46a52e7a
--- /dev/null
+++ b/sound/songs/midi/se_pc_login.mid
Binary files differ
diff --git a/sound/songs/midi/se_pc_off.mid b/sound/songs/midi/se_pc_off.mid
new file mode 100644
index 000000000..acb0960ff
--- /dev/null
+++ b/sound/songs/midi/se_pc_off.mid
Binary files differ
diff --git a/sound/songs/midi/se_pc_on.mid b/sound/songs/midi/se_pc_on.mid
new file mode 100644
index 000000000..86c0fa1c6
--- /dev/null
+++ b/sound/songs/midi/se_pc_on.mid
Binary files differ
diff --git a/sound/songs/midi/se_pin.mid b/sound/songs/midi/se_pin.mid
new file mode 100644
index 000000000..fe59c2f97
--- /dev/null
+++ b/sound/songs/midi/se_pin.mid
Binary files differ
diff --git a/sound/songs/midi/se_pinpon.mid b/sound/songs/midi/se_pinpon.mid
new file mode 100644
index 000000000..924dafda5
--- /dev/null
+++ b/sound/songs/midi/se_pinpon.mid
Binary files differ
diff --git a/sound/songs/midi/se_pn_off.mid b/sound/songs/midi/se_pn_off.mid
new file mode 100644
index 000000000..2fba0d159
--- /dev/null
+++ b/sound/songs/midi/se_pn_off.mid
Binary files differ
diff --git a/sound/songs/midi/se_pn_on.mid b/sound/songs/midi/se_pn_on.mid
new file mode 100644
index 000000000..dfe850794
--- /dev/null
+++ b/sound/songs/midi/se_pn_on.mid
Binary files differ
diff --git a/sound/songs/midi/se_poke_dead.mid b/sound/songs/midi/se_poke_dead.mid
new file mode 100644
index 000000000..b6a0df4c8
--- /dev/null
+++ b/sound/songs/midi/se_poke_dead.mid
Binary files differ
diff --git a/sound/songs/midi/se_reapoke.mid b/sound/songs/midi/se_reapoke.mid
new file mode 100644
index 000000000..b9a4fe810
--- /dev/null
+++ b/sound/songs/midi/se_reapoke.mid
Binary files differ
diff --git a/sound/songs/midi/se_regi.mid b/sound/songs/midi/se_regi.mid
new file mode 100644
index 000000000..28b727cb5
--- /dev/null
+++ b/sound/songs/midi/se_regi.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_bag1.mid b/sound/songs/midi/se_rg_bag1.mid
new file mode 100644
index 000000000..ac783bd38
--- /dev/null
+++ b/sound/songs/midi/se_rg_bag1.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_bag2.mid b/sound/songs/midi/se_rg_bag2.mid
new file mode 100644
index 000000000..97a5b32df
--- /dev/null
+++ b/sound/songs/midi/se_rg_bag2.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_card1.mid b/sound/songs/midi/se_rg_card1.mid
new file mode 100644
index 000000000..22a50e6df
--- /dev/null
+++ b/sound/songs/midi/se_rg_card1.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_card2.mid b/sound/songs/midi/se_rg_card2.mid
new file mode 100644
index 000000000..02276b2ad
--- /dev/null
+++ b/sound/songs/midi/se_rg_card2.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_card3.mid b/sound/songs/midi/se_rg_card3.mid
new file mode 100644
index 000000000..47cc451d0
--- /dev/null
+++ b/sound/songs/midi/se_rg_card3.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_deomov.mid b/sound/songs/midi/se_rg_deomov.mid
new file mode 100644
index 000000000..0149d29db
--- /dev/null
+++ b/sound/songs/midi/se_rg_deomov.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_excellent.mid b/sound/songs/midi/se_rg_excellent.mid
new file mode 100644
index 000000000..8f7c267c4
--- /dev/null
+++ b/sound/songs/midi/se_rg_excellent.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_getting.mid b/sound/songs/midi/se_rg_getting.mid
new file mode 100644
index 000000000..f8bf4b38f
--- /dev/null
+++ b/sound/songs/midi/se_rg_getting.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_help_cl.mid b/sound/songs/midi/se_rg_help_cl.mid
new file mode 100644
index 000000000..09b151631
--- /dev/null
+++ b/sound/songs/midi/se_rg_help_cl.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_help_ng.mid b/sound/songs/midi/se_rg_help_ng.mid
new file mode 100644
index 000000000..f9597632a
--- /dev/null
+++ b/sound/songs/midi/se_rg_help_ng.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_help_op.mid b/sound/songs/midi/se_rg_help_op.mid
new file mode 100644
index 000000000..79b6c53a8
--- /dev/null
+++ b/sound/songs/midi/se_rg_help_op.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_kiteki.mid b/sound/songs/midi/se_rg_kiteki.mid
new file mode 100644
index 000000000..07e19663a
--- /dev/null
+++ b/sound/songs/midi/se_rg_kiteki.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_nawamiss.mid b/sound/songs/midi/se_rg_nawamiss.mid
new file mode 100644
index 000000000..c3c52f88f
--- /dev/null
+++ b/sound/songs/midi/se_rg_nawamiss.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_shop.mid b/sound/songs/midi/se_rg_shop.mid
new file mode 100644
index 000000000..81ade1a63
--- /dev/null
+++ b/sound/songs/midi/se_rg_shop.mid
Binary files differ
diff --git a/sound/songs/midi/se_rg_w_door.mid b/sound/songs/midi/se_rg_w_door.mid
new file mode 100644
index 000000000..e0b6ba957
--- /dev/null
+++ b/sound/songs/midi/se_rg_w_door.mid
Binary files differ
diff --git a/sound/songs/midi/se_ru_bari.mid b/sound/songs/midi/se_ru_bari.mid
new file mode 100644
index 000000000..14b1991e6
--- /dev/null
+++ b/sound/songs/midi/se_ru_bari.mid
Binary files differ
diff --git a/sound/songs/midi/se_ru_gashin.mid b/sound/songs/midi/se_ru_gashin.mid
new file mode 100644
index 000000000..ae29a385b
--- /dev/null
+++ b/sound/songs/midi/se_ru_gashin.mid
Binary files differ
diff --git a/sound/songs/midi/se_ru_gasyan.mid b/sound/songs/midi/se_ru_gasyan.mid
new file mode 100644
index 000000000..486eabb9b
--- /dev/null
+++ b/sound/songs/midi/se_ru_gasyan.mid
Binary files differ
diff --git a/sound/songs/midi/se_ru_hyuu.mid b/sound/songs/midi/se_ru_hyuu.mid
new file mode 100644
index 000000000..1adfc9268
--- /dev/null
+++ b/sound/songs/midi/se_ru_hyuu.mid
Binary files differ
diff --git a/sound/songs/midi/se_save.mid b/sound/songs/midi/se_save.mid
new file mode 100644
index 000000000..5c4b90697
--- /dev/null
+++ b/sound/songs/midi/se_save.mid
Binary files differ
diff --git a/sound/songs/midi/se_seikai.mid b/sound/songs/midi/se_seikai.mid
new file mode 100644
index 000000000..32bfa07a8
--- /dev/null
+++ b/sound/songs/midi/se_seikai.mid
Binary files differ
diff --git a/sound/songs/midi/se_select.mid b/sound/songs/midi/se_select.mid
new file mode 100644
index 000000000..5f38c82d7
--- /dev/null
+++ b/sound/songs/midi/se_select.mid
Binary files differ
diff --git a/sound/songs/midi/se_suikomu.mid b/sound/songs/midi/se_suikomu.mid
new file mode 100644
index 000000000..871c8e5d3
--- /dev/null
+++ b/sound/songs/midi/se_suikomu.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_ame.mid b/sound/songs/midi/se_t_ame.mid
new file mode 100644
index 000000000..9e15434cd
--- /dev/null
+++ b/sound/songs/midi/se_t_ame.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_ame_e.mid b/sound/songs/midi/se_t_ame_e.mid
new file mode 100644
index 000000000..2397eea64
--- /dev/null
+++ b/sound/songs/midi/se_t_ame_e.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_kami.mid b/sound/songs/midi/se_t_kami.mid
new file mode 100644
index 000000000..71d8163bd
--- /dev/null
+++ b/sound/songs/midi/se_t_kami.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_kami2.mid b/sound/songs/midi/se_t_kami2.mid
new file mode 100644
index 000000000..c47731b94
--- /dev/null
+++ b/sound/songs/midi/se_t_kami2.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_koame.mid b/sound/songs/midi/se_t_koame.mid
new file mode 100644
index 000000000..d8491b293
--- /dev/null
+++ b/sound/songs/midi/se_t_koame.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_koame_e.mid b/sound/songs/midi/se_t_koame_e.mid
new file mode 100644
index 000000000..4a04f73f9
--- /dev/null
+++ b/sound/songs/midi/se_t_koame_e.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_ooame.mid b/sound/songs/midi/se_t_ooame.mid
new file mode 100644
index 000000000..3aedd4404
--- /dev/null
+++ b/sound/songs/midi/se_t_ooame.mid
Binary files differ
diff --git a/sound/songs/midi/se_t_ooame_e.mid b/sound/songs/midi/se_t_ooame_e.mid
new file mode 100644
index 000000000..b73010142
--- /dev/null
+++ b/sound/songs/midi/se_t_ooame_e.mid
Binary files differ
diff --git a/sound/songs/se_mizu.s b/sound/songs/se_mizu.s
deleted file mode 100644
index f1c0d5e86..000000000
--- a/sound/songs/se_mizu.s
+++ /dev/null
@@ -1,54 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_mizu_grp, voicegroup128
- .equ se_mizu_pri, 4
- .equ se_mizu_rev, reverb_set+50
- .equ se_mizu_mvl, 127
- .equ se_mizu_key, 0
- .equ se_mizu_tbs, 1
- .equ se_mizu_exg, 0
- .equ se_mizu_cmp, 1
-
- .section .rodata
- .global se_mizu
- .align 2
-
-@********************** Track 1 **********************@
-
-se_mizu_1:
- .byte KEYSH , se_mizu_key+0
- .byte TEMPO , 150*se_mizu_tbs/2
- .byte VOICE , 23
- .byte VOL , 20*se_mizu_mvl/mxv
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte BEND , c_v-25
- .byte N03 , Gs4 , v112
- .byte W01
- .byte BEND , c_v-9
- .byte W01
- .byte c_v+9
- .byte W04
- .byte W02
- .byte VOL , 17*se_mizu_mvl/mxv
- .byte BEND , c_v+18
- .byte N02 , Gs4 , v127
- .byte W01
- .byte BEND , c_v+34
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_mizu:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_mizu_pri @ Priority
- .byte se_mizu_rev @ Reverb.
-
- .word se_mizu_grp
-
- .word se_mizu_1
-
- .end
diff --git a/sound/songs/se_moter.s b/sound/songs/se_moter.s
deleted file mode 100644
index 390835125..000000000
--- a/sound/songs/se_moter.s
+++ /dev/null
@@ -1,49 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_moter_grp, voicegroup128
- .equ se_moter_pri, 4
- .equ se_moter_rev, reverb_set+50
- .equ se_moter_mvl, 127
- .equ se_moter_key, 0
- .equ se_moter_tbs, 1
- .equ se_moter_exg, 0
- .equ se_moter_cmp, 1
-
- .section .rodata
- .global se_moter
- .align 2
-
-@********************** Track 1 **********************@
-
-se_moter_1:
- .byte KEYSH , se_moter_key+0
-se_moter_1_B1:
- .byte TEMPO , 150*se_moter_tbs/2
- .byte VOICE , 15
- .byte VOL , 90*se_moter_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v+0
- .byte TIE , Gn2 , v100
- .byte W96
- .byte W96
- .byte W48
- .byte EOT
- .byte GOTO
- .word se_moter_1_B1
- .byte W48
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_moter:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_moter_pri @ Priority
- .byte se_moter_rev @ Reverb.
-
- .word se_moter_grp
-
- .word se_moter_1
-
- .end
diff --git a/sound/songs/se_mu_pachi.s b/sound/songs/se_mu_pachi.s
deleted file mode 100644
index dbea6603a..000000000
--- a/sound/songs/se_mu_pachi.s
+++ /dev/null
@@ -1,47 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_mu_pachi_grp, voicegroup127
- .equ se_mu_pachi_pri, 4
- .equ se_mu_pachi_rev, reverb_set+50
- .equ se_mu_pachi_mvl, 127
- .equ se_mu_pachi_key, 0
- .equ se_mu_pachi_tbs, 1
- .equ se_mu_pachi_exg, 0
- .equ se_mu_pachi_cmp, 1
-
- .section .rodata
- .global se_mu_pachi
- .align 2
-
-@********************** Track 1 **********************@
-
-se_mu_pachi_1:
- .byte KEYSH , se_mu_pachi_key+0
- .byte TEMPO , 150*se_mu_pachi_tbs/2
- .byte VOICE , 122
- .byte VOL , 100*se_mu_pachi_mvl/mxv
- .byte N01 , Ds3 , v127
- .byte W02
- .byte VOICE , 126
- .byte N01 , Gs4
- .byte W01
- .byte W03
- .byte W01
- .byte Gs4 , v088
- .byte W02
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_mu_pachi:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_mu_pachi_pri @ Priority
- .byte se_mu_pachi_rev @ Reverb.
-
- .word se_mu_pachi_grp
-
- .word se_mu_pachi_1
-
- .end
diff --git a/sound/songs/se_n.s b/sound/songs/se_n.s
deleted file mode 100644
index dc1938b05..000000000
--- a/sound/songs/se_n.s
+++ /dev/null
@@ -1,45 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_n_grp, voicegroup128
- .equ se_n_pri, 4
- .equ se_n_rev, reverb_set+50
- .equ se_n_mvl, 127
- .equ se_n_key, 0
- .equ se_n_tbs, 1
- .equ se_n_exg, 0
- .equ se_n_cmp, 1
-
- .section .rodata
- .global se_n
- .align 2
-
-@********************** Track 1 **********************@
-
-se_n_1:
- .byte KEYSH , se_n_key+0
- .byte TEMPO , 240*se_n_tbs/2
- .byte VOICE , 127
- .byte BENDR , 12
- .byte VOL , 127*se_n_mvl/mxv
- .byte BEND , c_v+0
- .byte N72 , Cn3 , v127
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_n:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_n_pri @ Priority
- .byte se_n_rev @ Reverb.
-
- .word se_n_grp
-
- .word se_n_1
-
- .end
diff --git a/sound/songs/se_nageru.s b/sound/songs/se_nageru.s
deleted file mode 100644
index 379b790bd..000000000
--- a/sound/songs/se_nageru.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_nageru_grp, voicegroup128
- .equ se_nageru_pri, 5
- .equ se_nageru_rev, reverb_set+50
- .equ se_nageru_mvl, 127
- .equ se_nageru_key, 0
- .equ se_nageru_tbs, 1
- .equ se_nageru_exg, 0
- .equ se_nageru_cmp, 1
-
- .section .rodata
- .global se_nageru
- .align 2
-
-@********************** Track 1 **********************@
-
-se_nageru_1:
- .byte KEYSH , se_nageru_key+0
- .byte TEMPO , 150*se_nageru_tbs/2
- .byte VOICE , 22
- .byte BENDR , 12
- .byte VOL , 120*se_nageru_mvl/mxv
- .byte BEND , c_v+12
- .byte N06 , An2 , v127
- .byte W03
- .byte VOL , 78*se_nageru_mvl/mxv
- .byte BEND , c_v+20
- .byte W03
- .byte VOL , 120*se_nageru_mvl/mxv
- .byte BEND , c_v+36
- .byte N18 , Cn3
- .byte W02
- .byte BEND , c_v+35
- .byte W03
- .byte c_v+32
- .byte W02
- .byte c_v+26
- .byte W03
- .byte VOL , 102*se_nageru_mvl/mxv
- .byte BEND , c_v+18
- .byte W02
- .byte VOL , 68*se_nageru_mvl/mxv
- .byte BEND , c_v+7
- .byte W03
- .byte VOL , 34*se_nageru_mvl/mxv
- .byte BEND , c_v-9
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_nageru:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_nageru_pri @ Priority
- .byte se_nageru_rev @ Reverb.
-
- .word se_nageru_grp
-
- .word se_nageru_1
-
- .end
diff --git a/sound/songs/se_naminori.s b/sound/songs/se_naminori.s
deleted file mode 100644
index 7d3c3a637..000000000
--- a/sound/songs/se_naminori.s
+++ /dev/null
@@ -1,94 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_naminori_grp, voicegroup127
- .equ se_naminori_pri, 4
- .equ se_naminori_rev, reverb_set+50
- .equ se_naminori_mvl, 127
- .equ se_naminori_key, 0
- .equ se_naminori_tbs, 1
- .equ se_naminori_exg, 0
- .equ se_naminori_cmp, 1
-
- .section .rodata
- .global se_naminori
- .align 2
-
-@********************** Track 1 **********************@
-
-se_naminori_1:
- .byte KEYSH , se_naminori_key+0
- .byte TEMPO , 220*se_naminori_tbs/2
- .byte VOICE , 123
- .byte VOL , 75*se_naminori_mvl/mxv
- .byte N03 , Ds3 , v127
- .byte W03
- .byte TIE , Cn4
- .byte W21
- .byte W24
- .byte W18
- .byte VOL , 75*se_naminori_mvl/mxv
- .byte W06
- .byte 71*se_naminori_mvl/mxv
- .byte W05
- .byte 67*se_naminori_mvl/mxv
- .byte W03
- .byte 62*se_naminori_mvl/mxv
- .byte W04
- .byte 59*se_naminori_mvl/mxv
- .byte W05
- .byte 57*se_naminori_mvl/mxv
- .byte W03
- .byte 54*se_naminori_mvl/mxv
- .byte W04
- .byte W02
- .byte 50*se_naminori_mvl/mxv
- .byte W03
- .byte 49*se_naminori_mvl/mxv
- .byte W03
- .byte 44*se_naminori_mvl/mxv
- .byte W04
- .byte 41*se_naminori_mvl/mxv
- .byte W02
- .byte 38*se_naminori_mvl/mxv
- .byte W03
- .byte 35*se_naminori_mvl/mxv
- .byte W03
- .byte 32*se_naminori_mvl/mxv
- .byte W04
- .byte 28*se_naminori_mvl/mxv
- .byte W02
- .byte 24*se_naminori_mvl/mxv
- .byte W03
- .byte 21*se_naminori_mvl/mxv
- .byte W03
- .byte 18*se_naminori_mvl/mxv
- .byte W04
- .byte 14*se_naminori_mvl/mxv
- .byte W02
- .byte 11*se_naminori_mvl/mxv
- .byte W03
- .byte 9*se_naminori_mvl/mxv
- .byte W03
- .byte 6*se_naminori_mvl/mxv
- .byte W04
- .byte 3*se_naminori_mvl/mxv
- .byte W02
- .byte 1*se_naminori_mvl/mxv
- .byte W22
- .byte EOT
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_naminori:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_naminori_pri @ Priority
- .byte se_naminori_rev @ Reverb.
-
- .word se_naminori_grp
-
- .word se_naminori_1
-
- .end
diff --git a/sound/songs/se_nigeru.s b/sound/songs/se_nigeru.s
deleted file mode 100644
index babc7868d..000000000
--- a/sound/songs/se_nigeru.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_nigeru_grp, voicegroup127
- .equ se_nigeru_pri, 5
- .equ se_nigeru_rev, reverb_set+50
- .equ se_nigeru_mvl, 127
- .equ se_nigeru_key, 0
- .equ se_nigeru_tbs, 1
- .equ se_nigeru_exg, 0
- .equ se_nigeru_cmp, 1
-
- .section .rodata
- .global se_nigeru
- .align 2
-
-@********************** Track 1 **********************@
-
-se_nigeru_1:
- .byte KEYSH , se_nigeru_key+0
- .byte TEMPO , 150*se_nigeru_tbs/2
- .byte VOICE , 126
- .byte VOL , 90*se_nigeru_mvl/mxv
- .byte N03 , Fn4 , v120
- .byte W03
- .byte Gs4 , v112
- .byte W03
- .byte N02 , Fs3
- .byte W03
- .byte N03 , Gs4 , v072
- .byte W03
- .byte N02 , Fs3 , v096
- .byte W03
- .byte N03 , Gs4 , v056
- .byte W03
- .byte N02 , Fs3 , v080
- .byte W03
- .byte N03 , Gs4 , v040
- .byte W03
- .byte N02 , Fs3 , v064
- .byte W03
- .byte N03 , Gs4 , v024
- .byte W03
- .byte N02 , Fs3 , v048
- .byte W03
- .byte N03 , Gs4 , v020
- .byte W03
- .byte Fs3 , v028
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_nigeru:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_nigeru_pri @ Priority
- .byte se_nigeru_rev @ Reverb.
-
- .word se_nigeru_grp
-
- .word se_nigeru_1
-
- .end
diff --git a/sound/songs/se_o.s b/sound/songs/se_o.s
deleted file mode 100644
index a9c294f66..000000000
--- a/sound/songs/se_o.s
+++ /dev/null
@@ -1,45 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_o_grp, voicegroup128
- .equ se_o_pri, 4
- .equ se_o_rev, reverb_set+50
- .equ se_o_mvl, 127
- .equ se_o_key, 0
- .equ se_o_tbs, 1
- .equ se_o_exg, 0
- .equ se_o_cmp, 1
-
- .section .rodata
- .global se_o
- .align 2
-
-@********************** Track 1 **********************@
-
-se_o_1:
- .byte KEYSH , se_o_key+0
- .byte TEMPO , 240*se_o_tbs/2
- .byte VOICE , 126
- .byte BENDR , 12
- .byte VOL , 120*se_o_mvl/mxv
- .byte BEND , c_v+0
- .byte N72 , Cn3 , v127
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_o:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_o_pri @ Priority
- .byte se_o_rev @ Reverb.
-
- .word se_o_grp
-
- .word se_o_1
-
- .end
diff --git a/sound/songs/se_op_basyu.s b/sound/songs/se_op_basyu.s
deleted file mode 100644
index 70377b9e3..000000000
--- a/sound/songs/se_op_basyu.s
+++ /dev/null
@@ -1,174 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_op_basyu_grp, voicegroup127
- .equ se_op_basyu_pri, 5
- .equ se_op_basyu_rev, reverb_set+50
- .equ se_op_basyu_mvl, 127
- .equ se_op_basyu_key, 0
- .equ se_op_basyu_tbs, 1
- .equ se_op_basyu_exg, 0
- .equ se_op_basyu_cmp, 1
-
- .section .rodata
- .global se_op_basyu
- .align 2
-
-@********************** Track 1 **********************@
-
-se_op_basyu_1:
- .byte KEYSH , se_op_basyu_key+0
- .byte TEMPO , 110*se_op_basyu_tbs/2
- .byte VOICE , 123
- .byte BENDR , 12
- .byte VOL , 100*se_op_basyu_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v+0
- .byte N60 , Gs2 , v052
- .byte W06
- .byte W06
- .byte BEND , c_v+0
- .byte W02
- .byte c_v+1
- .byte W04
- .byte c_v+2
- .byte W02
- .byte c_v+3
- .byte W02
- .byte c_v+5
- .byte W02
- .byte W01
- .byte c_v+6
- .byte W02
- .byte c_v+8
- .byte W03
- .byte c_v+9
- .byte W02
- .byte c_v+11
- .byte W02
- .byte c_v+13
- .byte W02
- .byte W01
- .byte c_v+15
- .byte W02
- .byte c_v+17
- .byte W03
- .byte c_v+19
- .byte W02
- .byte c_v+24
- .byte W02
- .byte c_v+27
- .byte W02
- .byte W01
- .byte c_v+30
- .byte W02
- .byte c_v+38
- .byte W03
- .byte c_v+43
- .byte W02
- .byte c_v+56
- .byte W02
- .byte c_v+63
- .byte W02
- .byte c_v+0
- .byte N72 , Gs3
- .byte W04
- .byte BEND , c_v+0
- .byte W02
- .byte W01
- .byte c_v+1
- .byte W03
- .byte c_v+2
- .byte W02
- .byte W01
- .byte c_v+3
- .byte W02
- .byte c_v+5
- .byte W03
- .byte c_v+6
- .byte W02
- .byte c_v+8
- .byte W02
- .byte c_v+9
- .byte W02
- .byte VOL , 98*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+11
- .byte W01
- .byte VOL , 96*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+13
- .byte W01
- .byte VOL , 92*se_op_basyu_mvl/mxv
- .byte W02
- .byte BEND , c_v+15
- .byte W01
- .byte VOL , 92*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+17
- .byte W01
- .byte VOL , 85*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+19
- .byte W02
- .byte VOL , 81*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+24
- .byte W01
- .byte VOL , 74*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+27
- .byte W01
- .byte VOL , 66*se_op_basyu_mvl/mxv
- .byte W02
- .byte BEND , c_v+30
- .byte W01
- .byte VOL , 62*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+38
- .byte W01
- .byte VOL , 56*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+43
- .byte W02
- .byte VOL , 50*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+56
- .byte W01
- .byte VOL , 42*se_op_basyu_mvl/mxv
- .byte W01
- .byte BEND , c_v+63
- .byte W01
- .byte VOL , 34*se_op_basyu_mvl/mxv
- .byte W02
- .byte W01
- .byte 29*se_op_basyu_mvl/mxv
- .byte W02
- .byte 25*se_op_basyu_mvl/mxv
- .byte W03
- .byte 23*se_op_basyu_mvl/mxv
- .byte W02
- .byte 19*se_op_basyu_mvl/mxv
- .byte W02
- .byte 14*se_op_basyu_mvl/mxv
- .byte W02
- .byte W01
- .byte 11*se_op_basyu_mvl/mxv
- .byte W02
- .byte 5*se_op_basyu_mvl/mxv
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_op_basyu:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_op_basyu_pri @ Priority
- .byte se_op_basyu_rev @ Reverb.
-
- .word se_op_basyu_grp
-
- .word se_op_basyu_1
-
- .end
diff --git a/sound/songs/se_pc_login.s b/sound/songs/se_pc_login.s
deleted file mode 100644
index 19efbc0a1..000000000
--- a/sound/songs/se_pc_login.s
+++ /dev/null
@@ -1,49 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pc_login_grp, voicegroup127
- .equ se_pc_login_pri, 5
- .equ se_pc_login_rev, reverb_set+50
- .equ se_pc_login_mvl, 127
- .equ se_pc_login_key, 0
- .equ se_pc_login_tbs, 1
- .equ se_pc_login_exg, 0
- .equ se_pc_login_cmp, 1
-
- .section .rodata
- .global se_pc_login
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pc_login_1:
- .byte KEYSH , se_pc_login_key+0
- .byte TEMPO , 144*se_pc_login_tbs/2
- .byte VOICE , 4
- .byte XCMD , xIECV , 10
- .byte xIECL , 8
- .byte VOL , 100*se_pc_login_mvl/mxv
- .byte BEND , c_v-6
- .byte N08 , Cn4 , v112
- .byte W08
- .byte N04 , Cn4 , v028
- .byte W04
- .byte N08 , Cn4 , v112
- .byte W08
- .byte N04 , Cn4 , v024
- .byte W04
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pc_login:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pc_login_pri @ Priority
- .byte se_pc_login_rev @ Reverb.
-
- .word se_pc_login_grp
-
- .word se_pc_login_1
-
- .end
diff --git a/sound/songs/se_pc_off.s b/sound/songs/se_pc_off.s
deleted file mode 100644
index 1d372f92f..000000000
--- a/sound/songs/se_pc_off.s
+++ /dev/null
@@ -1,48 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pc_off_grp, voicegroup127
- .equ se_pc_off_pri, 5
- .equ se_pc_off_rev, reverb_set+50
- .equ se_pc_off_mvl, 127
- .equ se_pc_off_key, 0
- .equ se_pc_off_tbs, 1
- .equ se_pc_off_exg, 0
- .equ se_pc_off_cmp, 1
-
- .section .rodata
- .global se_pc_off
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pc_off_1:
- .byte KEYSH , se_pc_off_key+0
- .byte TEMPO , 120*se_pc_off_tbs/2
- .byte VOICE , 6
- .byte VOL , 100*se_pc_off_mvl/mxv
- .byte BEND , c_v-8
- .byte N04 , Cn3 , v112
- .byte W04
- .byte Cn2
- .byte W02
- .byte W02
- .byte Cn1
- .byte W04
- .byte Cn1 , v024
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pc_off:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pc_off_pri @ Priority
- .byte se_pc_off_rev @ Reverb.
-
- .word se_pc_off_grp
-
- .word se_pc_off_1
-
- .end
diff --git a/sound/songs/se_pc_on.s b/sound/songs/se_pc_on.s
deleted file mode 100644
index d46ced4a6..000000000
--- a/sound/songs/se_pc_on.s
+++ /dev/null
@@ -1,74 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pc_on_grp, voicegroup127
- .equ se_pc_on_pri, 5
- .equ se_pc_on_rev, reverb_set+50
- .equ se_pc_on_mvl, 127
- .equ se_pc_on_key, 0
- .equ se_pc_on_tbs, 1
- .equ se_pc_on_exg, 0
- .equ se_pc_on_cmp, 1
-
- .section .rodata
- .global se_pc_on
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pc_on_1:
- .byte KEYSH , se_pc_on_key+0
- .byte TEMPO , 144*se_pc_on_tbs/2
- .byte VOICE , 4
- .byte XCMD , xIECV , 10
- .byte xIECL , 8
- .byte VOL , 100*se_pc_on_mvl/mxv
- .byte BEND , c_v-11
- .byte N12 , Cn6 , v112
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte N04 , Cn5 , v080
- .byte W03
- .byte W01
- .byte Cn4
- .byte W02
- .byte W02
- .byte Gn4
- .byte W01
- .byte W03
- .byte Cn4
- .byte W03
- .byte W01
- .byte Cn5
- .byte W02
- .byte W02
- .byte Cn4
- .byte W01
- .byte W03
- .byte Cn6 , v100
- .byte W03
- .byte W01
- .byte Cn4 , v080
- .byte W02
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pc_on:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pc_on_pri @ Priority
- .byte se_pc_on_rev @ Reverb.
-
- .word se_pc_on_grp
-
- .word se_pc_on_1
-
- .end
diff --git a/sound/songs/se_pin.s b/sound/songs/se_pin.s
deleted file mode 100644
index 29d87b749..000000000
--- a/sound/songs/se_pin.s
+++ /dev/null
@@ -1,50 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pin_grp, voicegroup127
- .equ se_pin_pri, 4
- .equ se_pin_rev, reverb_set+50
- .equ se_pin_mvl, 127
- .equ se_pin_key, 0
- .equ se_pin_tbs, 1
- .equ se_pin_exg, 0
- .equ se_pin_cmp, 1
-
- .section .rodata
- .global se_pin
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pin_1:
- .byte KEYSH , se_pin_key+0
- .byte TEMPO , 100*se_pin_tbs/2
- .byte VOICE , 5
- .byte BENDR , 12
- .byte VOL , 60*se_pin_mvl/mxv
- .byte BEND , c_v+0
- .byte N03 , Gn5 , v127
- .byte W03
- .byte Gn6 , v112
- .byte W03
- .byte Gn6 , v024
- .byte W03
- .byte Gn6 , v068
- .byte W03
- .byte Gn6 , v024
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pin:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pin_pri @ Priority
- .byte se_pin_rev @ Reverb.
-
- .word se_pin_grp
-
- .word se_pin_1
-
- .end
diff --git a/sound/songs/se_pinpon.s b/sound/songs/se_pinpon.s
deleted file mode 100644
index 55145fe3b..000000000
--- a/sound/songs/se_pinpon.s
+++ /dev/null
@@ -1,98 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pinpon_grp, voicegroup127
- .equ se_pinpon_pri, 5
- .equ se_pinpon_rev, reverb_set+50
- .equ se_pinpon_mvl, 127
- .equ se_pinpon_key, 0
- .equ se_pinpon_tbs, 1
- .equ se_pinpon_exg, 0
- .equ se_pinpon_cmp, 1
-
- .section .rodata
- .global se_pinpon
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pinpon_1:
- .byte KEYSH , se_pinpon_key+0
- .byte TEMPO , 150*se_pinpon_tbs/2
- .byte VOICE , 15
- .byte BENDR , 2
- .byte VOL , 90*se_pinpon_mvl/mxv
- .byte BEND , c_v+1
- .byte N24 , Ds4 , v092
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte BEND , c_v+15
- .byte N36 , Bn3
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_pinpon_2:
- .byte KEYSH , se_pinpon_key+0
- .byte VOICE , 14
- .byte VOL , 90*se_pinpon_mvl/mxv
- .byte BEND , c_v+1
- .byte N24 , Ds4 , v072
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte BEND , c_v+15
- .byte N36 , Bn3
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pinpon:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pinpon_pri @ Priority
- .byte se_pinpon_rev @ Reverb.
-
- .word se_pinpon_grp
-
- .word se_pinpon_1
- .word se_pinpon_2
-
- .end
diff --git a/sound/songs/se_pn_off.s b/sound/songs/se_pn_off.s
deleted file mode 100644
index b77a55fc7..000000000
--- a/sound/songs/se_pn_off.s
+++ /dev/null
@@ -1,86 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pn_off_grp, voicegroup127
- .equ se_pn_off_pri, 5
- .equ se_pn_off_rev, reverb_set+50
- .equ se_pn_off_mvl, 127
- .equ se_pn_off_key, 0
- .equ se_pn_off_tbs, 1
- .equ se_pn_off_exg, 0
- .equ se_pn_off_cmp, 1
-
- .section .rodata
- .global se_pn_off
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pn_off_1:
- .byte KEYSH , se_pn_off_key+0
- .byte TEMPO , 144*se_pn_off_tbs/2
- .byte VOICE , 4
- .byte XCMD , xIECV , 10
- .byte xIECL , 8
- .byte VOL , 100*se_pn_off_mvl/mxv
- .byte BEND , c_v-6
- .byte N02 , Gn4 , v060
- .byte W02
- .byte N01 , Gn4 , v032
- .byte W01
- .byte N02 , Dn4 , v060
- .byte W03
- .byte N01 , Dn4 , v032
- .byte W01
- .byte N02 , Gn4 , v060
- .byte W02
- .byte Gn4 , v032
- .byte W03
- .byte Gn3 , v060
- .byte W02
- .byte Gn3 , v032
- .byte W04
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_pn_off_2:
- .byte KEYSH , se_pn_off_key+0
- .byte VOICE , 14
- .byte VOL , 50*se_pn_off_mvl/mxv
- .byte BEND , c_v-2
- .byte W01
- .byte N02 , Gn4 , v060
- .byte W02
- .byte N01 , Gn4 , v032
- .byte W01
- .byte N02 , Dn4 , v060
- .byte W02
- .byte W01
- .byte N01 , Dn4 , v032
- .byte W01
- .byte N02 , Gn4 , v060
- .byte W02
- .byte Gn4 , v032
- .byte W02
- .byte W01
- .byte Gn3 , v060
- .byte W02
- .byte Gn3 , v032
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pn_off:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pn_off_pri @ Priority
- .byte se_pn_off_rev @ Reverb.
-
- .word se_pn_off_grp
-
- .word se_pn_off_1
- .word se_pn_off_2
-
- .end
diff --git a/sound/songs/se_pn_on.s b/sound/songs/se_pn_on.s
deleted file mode 100644
index 9c6186399..000000000
--- a/sound/songs/se_pn_on.s
+++ /dev/null
@@ -1,86 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_pn_on_grp, voicegroup127
- .equ se_pn_on_pri, 5
- .equ se_pn_on_rev, reverb_set+50
- .equ se_pn_on_mvl, 127
- .equ se_pn_on_key, 0
- .equ se_pn_on_tbs, 1
- .equ se_pn_on_exg, 0
- .equ se_pn_on_cmp, 1
-
- .section .rodata
- .global se_pn_on
- .align 2
-
-@********************** Track 1 **********************@
-
-se_pn_on_1:
- .byte KEYSH , se_pn_on_key+0
- .byte TEMPO , 144*se_pn_on_tbs/2
- .byte VOICE , 4
- .byte XCMD , xIECV , 10
- .byte xIECL , 8
- .byte VOL , 100*se_pn_on_mvl/mxv
- .byte BEND , c_v-6
- .byte N02 , Cn4 , v060
- .byte W02
- .byte N01 , Cn4 , v032
- .byte W01
- .byte N02 , Gn4 , v060
- .byte W03
- .byte N01 , Gn4 , v032
- .byte W01
- .byte N02 , Cn4 , v060
- .byte W02
- .byte Cn4 , v032
- .byte W03
- .byte Cn5 , v060
- .byte W02
- .byte Cn5 , v032
- .byte W04
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_pn_on_2:
- .byte KEYSH , se_pn_on_key+0
- .byte VOICE , 14
- .byte VOL , 50*se_pn_on_mvl/mxv
- .byte BEND , c_v-2
- .byte W01
- .byte N02 , Cn4 , v060
- .byte W02
- .byte N01 , Cn4 , v032
- .byte W01
- .byte N02 , Gn4 , v060
- .byte W02
- .byte W01
- .byte N01 , Gn4 , v032
- .byte W01
- .byte N02 , Cn4 , v060
- .byte W02
- .byte Cn4 , v032
- .byte W02
- .byte W01
- .byte Cn5 , v060
- .byte W02
- .byte Cn5 , v032
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_pn_on:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_pn_on_pri @ Priority
- .byte se_pn_on_rev @ Reverb.
-
- .word se_pn_on_grp
-
- .word se_pn_on_1
- .word se_pn_on_2
-
- .end
diff --git a/sound/songs/se_poke_dead.s b/sound/songs/se_poke_dead.s
deleted file mode 100644
index 0d66039a2..000000000
--- a/sound/songs/se_poke_dead.s
+++ /dev/null
@@ -1,84 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_poke_dead_grp, voicegroup127
- .equ se_poke_dead_pri, 5
- .equ se_poke_dead_rev, reverb_set+50
- .equ se_poke_dead_mvl, 127
- .equ se_poke_dead_key, 0
- .equ se_poke_dead_tbs, 1
- .equ se_poke_dead_exg, 0
- .equ se_poke_dead_cmp, 1
-
- .section .rodata
- .global se_poke_dead
- .align 2
-
-@********************** Track 1 **********************@
-
-se_poke_dead_1:
- .byte KEYSH , se_poke_dead_key+0
- .byte TEMPO , 90*se_poke_dead_tbs/2
- .byte VOICE , 90
- .byte VOL , 110*se_poke_dead_mvl/mxv
- .byte BEND , c_v+0
- .byte N09 , Cn4 , v100
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_poke_dead_2:
- .byte KEYSH , se_poke_dead_key+0
- .byte VOICE , 124
- .byte BENDR , 12
- .byte VOL , 82*se_poke_dead_mvl/mxv
- .byte BEND , c_v+0
- .byte N05 , Gs4 , v060
- .byte W03
- .byte VOL , 94*se_poke_dead_mvl/mxv
- .byte W03
- .byte 103*se_poke_dead_mvl/mxv
- .byte N22
- .byte W03
- .byte VOL , 110*se_poke_dead_mvl/mxv
- .byte W03
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@********************** Track 3 **********************@
-
-se_poke_dead_3:
- .byte KEYSH , se_poke_dead_key+0
- .byte VOICE , 0
- .byte VOL , 110*se_poke_dead_mvl/mxv
- .byte N06 , Cn3 , v080
- .byte W06
- .byte N18 , Cn3 , v092
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_poke_dead:
- .byte 3 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_poke_dead_pri @ Priority
- .byte se_poke_dead_rev @ Reverb.
-
- .word se_poke_dead_grp
-
- .word se_poke_dead_1
- .word se_poke_dead_2
- .word se_poke_dead_3
-
- .end
diff --git a/sound/songs/se_reapoke.s b/sound/songs/se_reapoke.s
deleted file mode 100644
index 11415920b..000000000
--- a/sound/songs/se_reapoke.s
+++ /dev/null
@@ -1,106 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_reapoke_grp, voicegroup128
- .equ se_reapoke_pri, 5
- .equ se_reapoke_rev, reverb_set+50
- .equ se_reapoke_mvl, 127
- .equ se_reapoke_key, 0
- .equ se_reapoke_tbs, 1
- .equ se_reapoke_exg, 0
- .equ se_reapoke_cmp, 1
-
- .section .rodata
- .global se_reapoke
- .align 2
-
-@********************** Track 1 **********************@
-
-se_reapoke_1:
- .byte KEYSH , se_reapoke_key+0
- .byte TEMPO , 220*se_reapoke_tbs/2
- .byte VOICE , 46
- .byte VOL , 95*se_reapoke_mvl/mxv
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte BEND , c_v+1
- .byte N03 , Cn6 , v127
- .byte W01
- .byte PAN , c_v+2
- .byte BEND , c_v+2
- .byte W01
- .byte c_v+4
- .byte W01
- .byte c_v+1
- .byte N06 , Gn6
- .byte W01
- .byte PAN , c_v+0
- .byte W02
- .byte W03
- .byte BEND , c_v+1
- .byte N03 , Cn6 , v104
- .byte W01
- .byte PAN , c_v-2
- .byte BEND , c_v+2
- .byte W02
- .byte c_v+4
- .byte W01
- .byte c_v+1
- .byte N06 , Gn6
- .byte W01
- .byte PAN , c_v+0
- .byte W04
- .byte W01
- .byte BEND , c_v+1
- .byte N03 , Cs6 , v080
- .byte W01
- .byte PAN , c_v+4
- .byte BEND , c_v+2
- .byte W01
- .byte c_v+4
- .byte W01
- .byte c_v+1
- .byte N06 , Gs6
- .byte W02
- .byte PAN , c_v+0
- .byte W04
- .byte BEND , c_v+1
- .byte N03 , Cs6 , v048
- .byte W02
- .byte PAN , c_v-5
- .byte BEND , c_v+2
- .byte W01
- .byte c_v+4
- .byte W01
- .byte c_v+1
- .byte N06 , Gs6
- .byte W01
- .byte PAN , c_v+0
- .byte W03
- .byte W02
- .byte c_v+4
- .byte BEND , c_v+1
- .byte N03 , Cs6 , v032
- .byte W01
- .byte BEND , c_v+2
- .byte W01
- .byte c_v+4
- .byte W02
- .byte c_v+0
- .byte N06 , Gs6
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_reapoke:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_reapoke_pri @ Priority
- .byte se_reapoke_rev @ Reverb.
-
- .word se_reapoke_grp
-
- .word se_reapoke_1
-
- .end
diff --git a/sound/songs/se_regi.s b/sound/songs/se_regi.s
deleted file mode 100644
index 2bc43c515..000000000
--- a/sound/songs/se_regi.s
+++ /dev/null
@@ -1,63 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_regi_grp, voicegroup127
- .equ se_regi_pri, 5
- .equ se_regi_rev, reverb_set+50
- .equ se_regi_mvl, 127
- .equ se_regi_key, 0
- .equ se_regi_tbs, 1
- .equ se_regi_exg, 0
- .equ se_regi_cmp, 1
-
- .section .rodata
- .global se_regi
- .align 2
-
-@********************** Track 1 **********************@
-
-se_regi_1:
- .byte KEYSH , se_regi_key+0
- .byte TEMPO , 128*se_regi_tbs/2
- .byte VOICE , 6
- .byte BENDR , 12
- .byte VOL , 90*se_regi_mvl/mxv
- .byte BEND , c_v-1
- .byte N01 , Ds3 , v127
- .byte W02
- .byte N03 , Gs3 , v100
- .byte W05
- .byte N16 , Fn5 , v072
- .byte W05
- .byte W12
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_regi_2:
- .byte KEYSH , se_regi_key+0
- .byte VOICE , 14
- .byte VOL , 90*se_regi_mvl/mxv
- .byte BEND , c_v-8
- .byte W02
- .byte N03 , Gs3 , v060
- .byte W05
- .byte N16 , Fn5
- .byte W05
- .byte W12
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_regi:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_regi_pri @ Priority
- .byte se_regi_rev @ Reverb.
-
- .word se_regi_grp
-
- .word se_regi_1
- .word se_regi_2
-
- .end
diff --git a/sound/songs/se_rg_bag1.s b/sound/songs/se_rg_bag1.s
deleted file mode 100644
index d2dd38ed5..000000000
--- a/sound/songs/se_rg_bag1.s
+++ /dev/null
@@ -1,60 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_bag1_grp, voicegroup129
- .equ se_rg_bag1_pri, 5
- .equ se_rg_bag1_rev, reverb_set+50
- .equ se_rg_bag1_mvl, 127
- .equ se_rg_bag1_key, 0
- .equ se_rg_bag1_tbs, 1
- .equ se_rg_bag1_exg, 0
- .equ se_rg_bag1_cmp, 1
-
- .section .rodata
- .global se_rg_bag1
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_bag1_1:
- .byte KEYSH , se_rg_bag1_key+0
- .byte TEMPO , 310*se_rg_bag1_tbs/2
- .byte VOICE , 10
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte VOL , 127*se_rg_bag1_mvl/mxv
- .byte BEND , c_v+2
- .byte N01 , Cs4 , v072
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_bag1_2:
- .byte VOL , 127*se_rg_bag1_mvl/mxv
- .byte KEYSH , se_rg_bag1_key+0
- .byte VOICE , 124
- .byte N01 , Cs5 , v072
- .byte W01
- .byte Ds5 , v104
- .byte W02
- .byte W03
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_bag1:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_bag1_pri @ Priority
- .byte se_rg_bag1_rev @ Reverb.
-
- .word se_rg_bag1_grp
-
- .word se_rg_bag1_1
- .word se_rg_bag1_2
-
- .end
diff --git a/sound/songs/se_rg_bag2.s b/sound/songs/se_rg_bag2.s
deleted file mode 100644
index 7d4f338c5..000000000
--- a/sound/songs/se_rg_bag2.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_bag2_grp, voicegroup129
- .equ se_rg_bag2_pri, 5
- .equ se_rg_bag2_rev, reverb_set+50
- .equ se_rg_bag2_mvl, 127
- .equ se_rg_bag2_key, 0
- .equ se_rg_bag2_tbs, 1
- .equ se_rg_bag2_exg, 0
- .equ se_rg_bag2_cmp, 1
-
- .section .rodata
- .global se_rg_bag2
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_bag2_1:
- .byte KEYSH , se_rg_bag2_key+0
- .byte TEMPO , 422*se_rg_bag2_tbs/2
- .byte VOICE , 80
- .byte VOL , 64*se_rg_bag2_mvl/mxv
- .byte BEND , c_v+0
- .byte N02 , Dn4 , v084
- .byte W02
- .byte BEND , c_v+17
- .byte N03 , Fs4 , v080
- .byte W01
- .byte BEND , c_v-40
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_bag2_2:
- .byte KEYSH , se_rg_bag2_key+0
- .byte VOICE , 2
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte VOL , 127*se_rg_bag2_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v+0
- .byte N04 , En3 , v127
- .byte W03
- .byte W01
- .byte VOICE , 2
- .byte N02 , Bn3
- .byte W02
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_bag2:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_bag2_pri @ Priority
- .byte se_rg_bag2_rev @ Reverb.
-
- .word se_rg_bag2_grp
-
- .word se_rg_bag2_1
- .word se_rg_bag2_2
-
- .end
diff --git a/sound/songs/se_rg_card1.s b/sound/songs/se_rg_card1.s
deleted file mode 100644
index 1f2d72c3e..000000000
--- a/sound/songs/se_rg_card1.s
+++ /dev/null
@@ -1,48 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_card1_grp, voicegroup129
- .equ se_rg_card1_pri, 5
- .equ se_rg_card1_rev, reverb_set+50
- .equ se_rg_card1_mvl, 127
- .equ se_rg_card1_key, 0
- .equ se_rg_card1_tbs, 1
- .equ se_rg_card1_exg, 0
- .equ se_rg_card1_cmp, 1
-
- .section .rodata
- .global se_rg_card1
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_card1_1:
- .byte KEYSH , se_rg_card1_key+0
- .byte TEMPO , 182*se_rg_card1_tbs/2
- .byte VOICE , 125
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte PAN , c_v+0
- .byte VOL , 127*se_rg_card1_mvl/mxv
- .byte BEND , c_v+2
- .byte N01 , Cn4 , v127
- .byte W03
- .byte VOICE , 124
- .byte N01 , Cn5 , v064
- .byte W21
- .byte W24
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_card1:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_card1_pri @ Priority
- .byte se_rg_card1_rev @ Reverb.
-
- .word se_rg_card1_grp
-
- .word se_rg_card1_1
-
- .end
diff --git a/sound/songs/se_rg_card2.s b/sound/songs/se_rg_card2.s
deleted file mode 100644
index 7f83de097..000000000
--- a/sound/songs/se_rg_card2.s
+++ /dev/null
@@ -1,62 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_card2_grp, voicegroup129
- .equ se_rg_card2_pri, 5
- .equ se_rg_card2_rev, reverb_set+50
- .equ se_rg_card2_mvl, 127
- .equ se_rg_card2_key, 0
- .equ se_rg_card2_tbs, 1
- .equ se_rg_card2_exg, 0
- .equ se_rg_card2_cmp, 1
-
- .section .rodata
- .global se_rg_card2
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_card2_1:
- .byte KEYSH , se_rg_card2_key+0
- .byte TEMPO , 182*se_rg_card2_tbs/2
- .byte VOICE , 125
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte PAN , c_v+0
- .byte VOL , 16*se_rg_card2_mvl/mxv
- .byte BEND , c_v+2
- .byte N24 , Gn5 , v088
- .byte W03
- .byte VOL , 32*se_rg_card2_mvl/mxv
- .byte W03
- .byte 48*se_rg_card2_mvl/mxv
- .byte W03
- .byte 64*se_rg_card2_mvl/mxv
- .byte W03
- .byte 80*se_rg_card2_mvl/mxv
- .byte W03
- .byte 96*se_rg_card2_mvl/mxv
- .byte W03
- .byte 112*se_rg_card2_mvl/mxv
- .byte W03
- .byte 127*se_rg_card2_mvl/mxv
- .byte W03
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_card2:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_card2_pri @ Priority
- .byte se_rg_card2_rev @ Reverb.
-
- .word se_rg_card2_grp
-
- .word se_rg_card2_1
-
- .end
diff --git a/sound/songs/se_rg_card3.s b/sound/songs/se_rg_card3.s
deleted file mode 100644
index e456c6bbe..000000000
--- a/sound/songs/se_rg_card3.s
+++ /dev/null
@@ -1,110 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_card3_grp, voicegroup129
- .equ se_rg_card3_pri, 5
- .equ se_rg_card3_rev, reverb_set+50
- .equ se_rg_card3_mvl, 127
- .equ se_rg_card3_key, 0
- .equ se_rg_card3_tbs, 1
- .equ se_rg_card3_exg, 0
- .equ se_rg_card3_cmp, 1
-
- .section .rodata
- .global se_rg_card3
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_card3_1:
- .byte KEYSH , se_rg_card3_key+0
- .byte TEMPO , 174*se_rg_card3_tbs/2
- .byte VOICE , 46
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte VOL , 112*se_rg_card3_mvl/mxv
- .byte PAN , c_v+0
- .byte VOL , 112*se_rg_card3_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v+0
- .byte N03 , An5 , v112
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte N03 , Bn5
- .byte W03
- .byte VOL , 112*se_rg_card3_mvl/mxv
- .byte PAN , c_v-48
- .byte N06 , En6
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte W03
- .byte 112*se_rg_card3_mvl/mxv
- .byte PAN , c_v+48
- .byte N06 , En6 , v040
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte W03
- .byte PAN , c_v-48
- .byte VOL , 97*se_rg_card3_mvl/mxv
- .byte N06 , En6 , v032
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte W03
- .byte PAN , c_v+48
- .byte VOL , 96*se_rg_card3_mvl/mxv
- .byte N06 , En6 , v024
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte W03
- .byte PAN , c_v-48
- .byte VOL , 80*se_rg_card3_mvl/mxv
- .byte N06 , En6 , v016
- .byte W03
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte W03
- .byte PAN , c_v+48
- .byte VOL , 80*se_rg_card3_mvl/mxv
- .byte N06 , En6 , v012
- .byte W03
- .byte VOL , 48*se_rg_card3_mvl/mxv
- .byte W03
- .byte N06 , En6 , v008
- .byte W03
- .byte VOL , 2*se_rg_card3_mvl/mxv
- .byte W03
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_card3_2:
- .byte KEYSH , se_rg_card3_key+0
- .byte VOICE , 124
- .byte PAN , c_v+0
- .byte VOL , 64*se_rg_card3_mvl/mxv
- .byte N03 , Cn5 , v092
- .byte W06
- .byte Cn5 , v032
- .byte W18
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_card3:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_card3_pri @ Priority
- .byte se_rg_card3_rev @ Reverb.
-
- .word se_rg_card3_grp
-
- .word se_rg_card3_1
- .word se_rg_card3_2
-
- .end
diff --git a/sound/songs/se_rg_deomov.s b/sound/songs/se_rg_deomov.s
deleted file mode 100644
index 7c2e691bf..000000000
--- a/sound/songs/se_rg_deomov.s
+++ /dev/null
@@ -1,204 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_deomov_grp, voicegroup129
- .equ se_rg_deomov_pri, 5
- .equ se_rg_deomov_rev, reverb_set+50
- .equ se_rg_deomov_mvl, 127
- .equ se_rg_deomov_key, 0
- .equ se_rg_deomov_tbs, 1
- .equ se_rg_deomov_exg, 0
- .equ se_rg_deomov_cmp, 1
-
- .section .rodata
- .global se_rg_deomov
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_deomov_1:
- .byte KEYSH , se_rg_deomov_key+0
- .byte TEMPO , 262*se_rg_deomov_tbs/2
- .byte VOICE , 123
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte PAN , c_v+0
- .byte VOL , 40*se_rg_deomov_mvl/mxv
- .byte BEND , c_v+2
- .byte N02 , Cn2 , v120
- .byte W08
- .byte N04 , Cn5
- .byte W16
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_deomov_2:
- .byte KEYSH , se_rg_deomov_key+0
- .byte VOICE , 31
- .byte LFOS , 44
- .byte BENDR , 12
- .byte VOL , 80*se_rg_deomov_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v-64
- .byte TIE , En4 , v032
- .byte W24
- .byte W04
- .byte BEND , c_v-55
- .byte W02
- .byte c_v-50
- .byte W02
- .byte c_v-39
- .byte W02
- .byte c_v-32
- .byte W02
- .byte c_v-23
- .byte W02
- .byte c_v-18
- .byte W02
- .byte c_v-9
- .byte W02
- .byte c_v-2
- .byte W02
- .byte c_v+16
- .byte W02
- .byte c_v+23
- .byte W02
- .byte c_v+32
- .byte W02
- .byte c_v+39
- .byte W02
- .byte c_v+48
- .byte W02
- .byte c_v+56
- .byte W02
- .byte c_v+63
- .byte W16
- .byte W24
- .byte W24
- .byte VOL , 70*se_rg_deomov_mvl/mxv
- .byte W04
- .byte 66*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 60*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 55*se_rg_deomov_mvl/mxv
- .byte W08
- .byte 49*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 44*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 40*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 35*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 30*se_rg_deomov_mvl/mxv
- .byte W04
- .byte 24*se_rg_deomov_mvl/mxv
- .byte W02
- .byte 20*se_rg_deomov_mvl/mxv
- .byte W02
- .byte 15*se_rg_deomov_mvl/mxv
- .byte W04
- .byte 10*se_rg_deomov_mvl/mxv
- .byte W06
- .byte 0*se_rg_deomov_mvl/mxv
- .byte W06
- .byte EOT
- .byte FINE
-
-@********************** Track 3 **********************@
-
-se_rg_deomov_3:
- .byte KEYSH , se_rg_deomov_key+0
- .byte VOICE , 50
- .byte VOL , 69*se_rg_deomov_mvl/mxv
- .byte PAN , c_v-64
- .byte W24
- .byte c_v+63
- .byte N01 , Fs4 , v064
- .byte W06
- .byte Gs4
- .byte W03
- .byte PAN , c_v-64
- .byte W07
- .byte N01 , En5
- .byte W05
- .byte Fs5
- .byte W03
- .byte PAN , c_v+63
- .byte W10
- .byte N01 , Dn5
- .byte W03
- .byte Cn5
- .byte W07
- .byte PAN , c_v-64
- .byte W04
- .byte N01 , Fs3
- .byte W03
- .byte Gs3
- .byte W09
- .byte PAN , c_v+63
- .byte W04
- .byte N01 , Bn4
- .byte W04
- .byte Dn5
- .byte W04
- .byte PAN , c_v-64
- .byte W09
- .byte N01 , Fs5
- .byte W09
- .byte Cs5
- .byte W06
- .byte PAN , c_v+63
- .byte W02
- .byte N01 , Cs4 , v036
- .byte W02
- .byte As3
- .byte W08
- .byte Fs3
- .byte W03
- .byte Gs3
- .byte W09
- .byte PAN , c_v-64
- .byte W03
- .byte N01 , Dn5 , v028
- .byte W03
- .byte Cn5
- .byte W06
- .byte Fs4
- .byte W03
- .byte Cn4
- .byte W04
- .byte Gn3
- .byte W05
- .byte PAN , c_v+63
- .byte W06
- .byte N01 , Gn4 , v020
- .byte W02
- .byte An4
- .byte W16
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_deomov:
- .byte 3 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_deomov_pri @ Priority
- .byte se_rg_deomov_rev @ Reverb.
-
- .word se_rg_deomov_grp
-
- .word se_rg_deomov_1
- .word se_rg_deomov_2
- .word se_rg_deomov_3
-
- .end
diff --git a/sound/songs/se_rg_excellent.s b/sound/songs/se_rg_excellent.s
deleted file mode 100644
index 63c0eae19..000000000
--- a/sound/songs/se_rg_excellent.s
+++ /dev/null
@@ -1,155 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_excellent_grp, voicegroup128
- .equ se_rg_excellent_pri, 5
- .equ se_rg_excellent_rev, reverb_set+50
- .equ se_rg_excellent_mvl, 127
- .equ se_rg_excellent_key, 0
- .equ se_rg_excellent_tbs, 1
- .equ se_rg_excellent_exg, 0
- .equ se_rg_excellent_cmp, 1
-
- .section .rodata
- .global se_rg_excellent
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_excellent_1:
- .byte KEYSH , se_rg_excellent_key+0
- .byte TEMPO , 150*se_rg_excellent_tbs/2
- .byte VOICE , 46
- .byte VOL , 110*se_rg_excellent_mvl/mxv
- .byte BENDR , 2
- .byte PAN , c_v+0
- .byte BEND , c_v+15
- .byte W01
- .byte N02 , Dn6 , v112
- .byte W02
- .byte Cs6
- .byte W03
- .byte PAN , c_v+8
- .byte N02 , An5
- .byte W02
- .byte Fs5
- .byte W01
- .byte W01
- .byte Dn5
- .byte W02
- .byte PAN , c_v-7
- .byte W01
- .byte N02 , Dn5 , v104
- .byte W02
- .byte Cs5 , v100
- .byte W03
- .byte PAN , c_v+0
- .byte N02 , An4 , v096
- .byte W02
- .byte Fs4 , v092
- .byte W01
- .byte W01
- .byte Dn4 , v088
- .byte W02
- .byte PAN , c_v+15
- .byte W01
- .byte N02 , Dn6
- .byte W02
- .byte Cs6 , v084
- .byte W03
- .byte An5 , v080
- .byte W02
- .byte Fs5 , v076
- .byte W01
- .byte W01
- .byte Dn5 , v072
- .byte W02
- .byte PAN , c_v-16
- .byte W01
- .byte N02 , Dn6 , v068
- .byte W02
- .byte Cs6 , v064
- .byte W03
- .byte An5 , v060
- .byte W02
- .byte Fs5 , v056
- .byte W01
- .byte W01
- .byte Dn5 , v052
- .byte W02
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_excellent_2:
- .byte KEYSH , se_rg_excellent_key+0
- .byte VOICE , 53
- .byte BENDR , 2
- .byte VOL , 43*se_rg_excellent_mvl/mxv
- .byte BEND , c_v+15
- .byte N02 , An6 , v112
- .byte W02
- .byte Fs6
- .byte W01
- .byte W01
- .byte Dn6
- .byte W02
- .byte W01
- .byte Cs6
- .byte W02
- .byte An5
- .byte W03
- .byte N02
- .byte W02
- .byte Fs5 , v104
- .byte W01
- .byte W01
- .byte Dn5 , v100
- .byte W02
- .byte W01
- .byte Cs5 , v096
- .byte W02
- .byte An4 , v092
- .byte W03
- .byte An6 , v088
- .byte W02
- .byte Fs6 , v084
- .byte W01
- .byte W01
- .byte Dn6 , v080
- .byte W02
- .byte W01
- .byte Cs6 , v076
- .byte W02
- .byte An5 , v072
- .byte W03
- .byte An6 , v068
- .byte W02
- .byte Fs6 , v064
- .byte W01
- .byte W01
- .byte Dn6 , v060
- .byte W02
- .byte W01
- .byte Cs6 , v056
- .byte W02
- .byte An5 , v052
- .byte W03
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_excellent:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_excellent_pri @ Priority
- .byte se_rg_excellent_rev @ Reverb.
-
- .word se_rg_excellent_grp
-
- .word se_rg_excellent_1
- .word se_rg_excellent_2
-
- .end
diff --git a/sound/songs/se_rg_getting.s b/sound/songs/se_rg_getting.s
deleted file mode 100644
index 2c632f399..000000000
--- a/sound/songs/se_rg_getting.s
+++ /dev/null
@@ -1,69 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_getting_grp, voicegroup129
- .equ se_rg_getting_pri, 5
- .equ se_rg_getting_rev, reverb_set+50
- .equ se_rg_getting_mvl, 127
- .equ se_rg_getting_key, 0
- .equ se_rg_getting_tbs, 1
- .equ se_rg_getting_exg, 0
- .equ se_rg_getting_cmp, 1
-
- .section .rodata
- .global se_rg_getting
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_getting_1:
- .byte KEYSH , se_rg_getting_key+0
- .byte TEMPO , 310*se_rg_getting_tbs/2
- .byte VOICE , 3
- .byte XCMD , xIECV , 8
- .byte xIECL , 8
- .byte VOL , 100*se_rg_getting_mvl/mxv
- .byte BEND , c_v+0
- .byte N02 , Bn3 , v120
- .byte W03
- .byte W03
- .byte W02
- .byte En4 , v127
- .byte W01
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_getting_2:
- .byte KEYSH , se_rg_getting_key+0
- .byte VOICE , 126
- .byte VOL , 100*se_rg_getting_mvl/mxv
- .byte W03
- .byte W01
- .byte N01 , Cn2 , v120
- .byte W02
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_getting:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_getting_pri @ Priority
- .byte se_rg_getting_rev @ Reverb.
-
- .word se_rg_getting_grp
-
- .word se_rg_getting_1
- .word se_rg_getting_2
-
- .end
diff --git a/sound/songs/se_rg_help_cl.s b/sound/songs/se_rg_help_cl.s
deleted file mode 100644
index 8daa70ae9..000000000
--- a/sound/songs/se_rg_help_cl.s
+++ /dev/null
@@ -1,82 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_help_cl_grp, voicegroup129
- .equ se_rg_help_cl_pri, 5
- .equ se_rg_help_cl_rev, reverb_set+50
- .equ se_rg_help_cl_mvl, 127
- .equ se_rg_help_cl_key, 0
- .equ se_rg_help_cl_tbs, 1
- .equ se_rg_help_cl_exg, 0
- .equ se_rg_help_cl_cmp, 1
-
- .section .rodata
- .global se_rg_help_cl
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_help_cl_1:
- .byte KEYSH , se_rg_help_cl_key+0
- .byte TEMPO , 420*se_rg_help_cl_tbs/2
- .byte VOICE , 24
- .byte LFOS , 44
- .byte BENDR , 12
- .byte VOL , 95*se_rg_help_cl_mvl/mxv
- .byte PAN , c_v+48
- .byte N04 , Dn5 , v092
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn5 , v032
- .byte W06
- .byte PAN , c_v+32
- .byte N04 , An4 , v096
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , An4 , v032
- .byte W06
- .byte PAN , c_v+32
- .byte N04 , Fs4 , v092
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Fs4 , v032
- .byte W06
- .byte PAN , c_v+16
- .byte N04 , En4 , v092
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , En4 , v032
- .byte W06
- .byte PAN , c_v-39
- .byte N04 , Dn4 , v096
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Dn4 , v032
- .byte W06
- .byte PAN , c_v-64
- .byte N04
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Dn4 , v016
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn4 , v012
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Dn4 , v004
- .byte W18
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_help_cl:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_help_cl_pri @ Priority
- .byte se_rg_help_cl_rev @ Reverb.
-
- .word se_rg_help_cl_grp
-
- .word se_rg_help_cl_1
-
- .end
diff --git a/sound/songs/se_rg_help_ng.s b/sound/songs/se_rg_help_ng.s
deleted file mode 100644
index f430c245a..000000000
--- a/sound/songs/se_rg_help_ng.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_help_ng_grp, voicegroup129
- .equ se_rg_help_ng_pri, 5
- .equ se_rg_help_ng_rev, reverb_set+50
- .equ se_rg_help_ng_mvl, 127
- .equ se_rg_help_ng_key, 0
- .equ se_rg_help_ng_tbs, 1
- .equ se_rg_help_ng_exg, 0
- .equ se_rg_help_ng_cmp, 1
-
- .section .rodata
- .global se_rg_help_ng
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_help_ng_1:
- .byte KEYSH , se_rg_help_ng_key+0
- .byte TEMPO , 420*se_rg_help_ng_tbs/2
- .byte VOICE , 24
- .byte LFOS , 44
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 96*se_rg_help_ng_mvl/mxv
- .byte N04 , Dn4 , v120
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn4 , v032
- .byte W06
- .byte PAN , c_v-1
- .byte N04 , Fs4 , v096
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Fs4 , v032
- .byte W06
- .byte VOICE , 92
- .byte PAN , c_v+0
- .byte VOL , 125*se_rg_help_ng_mvl/mxv
- .byte N04 , An1 , v112
- .byte W10
- .byte MOD , 8
- .byte W02
- .byte N06 , An1 , v088
- .byte W06
- .byte An1 , v024
- .byte W06
- .byte MOD , 0
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_help_ng:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_help_ng_pri @ Priority
- .byte se_rg_help_ng_rev @ Reverb.
-
- .word se_rg_help_ng_grp
-
- .word se_rg_help_ng_1
-
- .end
diff --git a/sound/songs/se_rg_help_op.s b/sound/songs/se_rg_help_op.s
deleted file mode 100644
index 8bffb7938..000000000
--- a/sound/songs/se_rg_help_op.s
+++ /dev/null
@@ -1,82 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_help_op_grp, voicegroup129
- .equ se_rg_help_op_pri, 5
- .equ se_rg_help_op_rev, reverb_set+50
- .equ se_rg_help_op_mvl, 127
- .equ se_rg_help_op_key, 0
- .equ se_rg_help_op_tbs, 1
- .equ se_rg_help_op_exg, 0
- .equ se_rg_help_op_cmp, 1
-
- .section .rodata
- .global se_rg_help_op
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_help_op_1:
- .byte KEYSH , se_rg_help_op_key+0
- .byte TEMPO , 420*se_rg_help_op_tbs/2
- .byte VOICE , 24
- .byte LFOS , 44
- .byte BENDR , 12
- .byte VOL , 96*se_rg_help_op_mvl/mxv
- .byte PAN , c_v-48
- .byte N04 , Dn4 , v096
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn4 , v032
- .byte W06
- .byte PAN , c_v-32
- .byte N04 , Fs4 , v096
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Fs4 , v032
- .byte W06
- .byte PAN , c_v-32
- .byte N04 , An4 , v096
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , An4 , v032
- .byte W06
- .byte PAN , c_v-16
- .byte N04 , Cs5 , v096
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Cs5 , v032
- .byte W06
- .byte PAN , c_v+32
- .byte N04 , Dn5 , v076
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn5 , v032
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Dn5 , v024
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn5 , v016
- .byte W06
- .byte PAN , c_v+63
- .byte N04 , Dn5 , v008
- .byte W06
- .byte PAN , c_v-64
- .byte N04 , Dn5 , v004
- .byte W18
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_help_op:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_help_op_pri @ Priority
- .byte se_rg_help_op_rev @ Reverb.
-
- .word se_rg_help_op_grp
-
- .word se_rg_help_op_1
-
- .end
diff --git a/sound/songs/se_rg_kiteki.s b/sound/songs/se_rg_kiteki.s
deleted file mode 100644
index 248ddc303..000000000
--- a/sound/songs/se_rg_kiteki.s
+++ /dev/null
@@ -1,161 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_kiteki_grp, voicegroup129
- .equ se_rg_kiteki_pri, 5
- .equ se_rg_kiteki_rev, reverb_set+50
- .equ se_rg_kiteki_mvl, 127
- .equ se_rg_kiteki_key, 0
- .equ se_rg_kiteki_tbs, 1
- .equ se_rg_kiteki_exg, 0
- .equ se_rg_kiteki_cmp, 1
-
- .section .rodata
- .global se_rg_kiteki
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_kiteki_1:
- .byte KEYSH , se_rg_kiteki_key+0
- .byte TEMPO , 164*se_rg_kiteki_tbs/2
- .byte VOICE , 9
- .byte BENDR , 12
- .byte LFOS , 44
- .byte PAN , c_v+0
- .byte VOL , 96*se_rg_kiteki_mvl/mxv
- .byte MOD , 1
- .byte N04 , En2 , v127
- .byte W04
- .byte N10 , En2 , v104
- .byte W20
- .byte W10
- .byte PAN , c_v-64
- .byte TIE , En2 , v127
- .byte W08
- .byte PAN , c_v-48
- .byte W06
- .byte W02
- .byte c_v-32
- .byte W08
- .byte c_v-16
- .byte W08
- .byte c_v+0
- .byte W06
- .byte c_v+16
- .byte W06
- .byte c_v+31
- .byte W06
- .byte c_v+48
- .byte W06
- .byte c_v+63
- .byte W06
- .byte W18
- .byte c_v+47
- .byte W06
- .byte c_v+40
- .byte W06
- .byte c_v+30
- .byte W06
- .byte c_v+10
- .byte W06
- .byte c_v-11
- .byte W06
- .byte c_v-25
- .byte W06
- .byte c_v-34
- .byte W06
- .byte c_v-50
- .byte W06
- .byte c_v-64
- .byte W06
- .byte W18
- .byte VOL , 80*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v-52
- .byte W06
- .byte VOL , 72*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v-41
- .byte W06
- .byte VOL , 64*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v-29
- .byte W06
- .byte VOL , 53*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v-18
- .byte W06
- .byte VOL , 48*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v+15
- .byte W06
- .byte VOL , 42*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v+25
- .byte W06
- .byte VOL , 32*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v+40
- .byte W02
- .byte VOL , 24*se_rg_kiteki_mvl/mxv
- .byte W04
- .byte 16*se_rg_kiteki_mvl/mxv
- .byte PAN , c_v+47
- .byte W04
- .byte VOL , 8*se_rg_kiteki_mvl/mxv
- .byte W02
- .byte EOT
- .byte VOL , 0*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_kiteki_2:
- .byte KEYSH , se_rg_kiteki_key+0
- .byte VOICE , 81
- .byte PAN , c_v+0
- .byte MOD , 15
- .byte VOL , 48*se_rg_kiteki_mvl/mxv
- .byte N04 , En1 , v127
- .byte W04
- .byte N10 , En1 , v104
- .byte W20
- .byte W10
- .byte TIE , En1 , v127
- .byte W14
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte W24
- .byte W18
- .byte VOL , 42*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 36*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 32*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 26*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 23*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 15*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 13*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte 8*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte EOT
- .byte VOL , 0*se_rg_kiteki_mvl/mxv
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_kiteki:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_kiteki_pri @ Priority
- .byte se_rg_kiteki_rev @ Reverb.
-
- .word se_rg_kiteki_grp
-
- .word se_rg_kiteki_1
- .word se_rg_kiteki_2
-
- .end
diff --git a/sound/songs/se_rg_nawamiss.s b/sound/songs/se_rg_nawamiss.s
deleted file mode 100644
index db24cf5f4..000000000
--- a/sound/songs/se_rg_nawamiss.s
+++ /dev/null
@@ -1,55 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_nawamiss_grp, voicegroup127
- .equ se_rg_nawamiss_pri, 5
- .equ se_rg_nawamiss_rev, reverb_set+50
- .equ se_rg_nawamiss_mvl, 127
- .equ se_rg_nawamiss_key, 0
- .equ se_rg_nawamiss_tbs, 1
- .equ se_rg_nawamiss_exg, 0
- .equ se_rg_nawamiss_cmp, 1
-
- .section .rodata
- .global se_rg_nawamiss
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_nawamiss_1:
- .byte KEYSH , se_rg_nawamiss_key+0
- .byte TEMPO , 240*se_rg_nawamiss_tbs/2
- .byte VOICE , 92
- .byte BENDR , 12
- .byte VOL , 127*se_rg_nawamiss_mvl/mxv
- .byte BEND , c_v+0
- .byte N03 , Cn2 , v127
- .byte W03
- .byte Cn2 , v020
- .byte W03
- .byte N18 , Cn2 , v127
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte W03
- .byte N09 , Cn2 , v020
- .byte W03
- .byte W03
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_nawamiss:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_nawamiss_pri @ Priority
- .byte se_rg_nawamiss_rev @ Reverb.
-
- .word se_rg_nawamiss_grp
-
- .word se_rg_nawamiss_1
-
- .end
diff --git a/sound/songs/se_rg_shop.s b/sound/songs/se_rg_shop.s
deleted file mode 100644
index d184e1e5d..000000000
--- a/sound/songs/se_rg_shop.s
+++ /dev/null
@@ -1,46 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_shop_grp, voicegroup129
- .equ se_rg_shop_pri, 5
- .equ se_rg_shop_rev, reverb_set+50
- .equ se_rg_shop_mvl, 127
- .equ se_rg_shop_key, 0
- .equ se_rg_shop_tbs, 1
- .equ se_rg_shop_exg, 0
- .equ se_rg_shop_cmp, 1
-
- .section .rodata
- .global se_rg_shop
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_shop_1:
- .byte KEYSH , se_rg_shop_key+0
- .byte TEMPO , 124*se_rg_shop_tbs/2
- .byte VOICE , 8
- .byte VOL , 80*se_rg_shop_mvl/mxv
- .byte PAN , c_v+0
- .byte BEND , c_v+0
- .byte N30 , Cn3 , v120
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_shop:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_shop_pri @ Priority
- .byte se_rg_shop_rev @ Reverb.
-
- .word se_rg_shop_grp
-
- .word se_rg_shop_1
-
- .end
diff --git a/sound/songs/se_rg_w_door.s b/sound/songs/se_rg_w_door.s
deleted file mode 100644
index 9c2349018..000000000
--- a/sound/songs/se_rg_w_door.s
+++ /dev/null
@@ -1,84 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_rg_w_door_grp, voicegroup129
- .equ se_rg_w_door_pri, 5
- .equ se_rg_w_door_rev, reverb_set+50
- .equ se_rg_w_door_mvl, 127
- .equ se_rg_w_door_key, 0
- .equ se_rg_w_door_tbs, 1
- .equ se_rg_w_door_exg, 0
- .equ se_rg_w_door_cmp, 1
-
- .section .rodata
- .global se_rg_w_door
- .align 2
-
-@********************** Track 1 **********************@
-
-se_rg_w_door_1:
- .byte KEYSH , se_rg_w_door_key+0
- .byte TEMPO , 110*se_rg_w_door_tbs/2
- .byte VOICE , 127
- .byte VOL , 100*se_rg_w_door_mvl/mxv
- .byte N03 , Fn2 , v100
- .byte N03 , As2 , v127
- .byte W06
- .byte N08 , Fs3 , v096
- .byte W06
- .byte VOL , 88*se_rg_w_door_mvl/mxv
- .byte W03
- .byte 54*se_rg_w_door_mvl/mxv
- .byte W03
- .byte 68*se_rg_w_door_mvl/mxv
- .byte W06
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_rg_w_door_2:
- .byte KEYSH , se_rg_w_door_key+0
- .byte VOICE , 92
- .byte BENDR , 12
- .byte VOL , 43*se_rg_w_door_mvl/mxv
- .byte BEND , c_v+0
- .byte W04
- .byte c_v-50
- .byte N10 , Bn5 , v052
- .byte W02
- .byte BEND , c_v-45
- .byte W01
- .byte c_v-23
- .byte W01
- .byte c_v-2
- .byte W01
- .byte c_v+22
- .byte W01
- .byte c_v+28
- .byte W01
- .byte c_v+41
- .byte W01
- .byte VOL , 29*se_rg_w_door_mvl/mxv
- .byte BEND , c_v+53
- .byte W01
- .byte c_v+60
- .byte W02
- .byte VOL , 18*se_rg_w_door_mvl/mxv
- .byte BEND , c_v+63
- .byte W09
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_rg_w_door:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_rg_w_door_pri @ Priority
- .byte se_rg_w_door_rev @ Reverb.
-
- .word se_rg_w_door_grp
-
- .word se_rg_w_door_1
- .word se_rg_w_door_2
-
- .end
diff --git a/sound/songs/se_ru_bari.s b/sound/songs/se_ru_bari.s
deleted file mode 100644
index ffff1b406..000000000
--- a/sound/songs/se_ru_bari.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_ru_bari_grp, voicegroup127
- .equ se_ru_bari_pri, 4
- .equ se_ru_bari_rev, reverb_set+50
- .equ se_ru_bari_mvl, 127
- .equ se_ru_bari_key, 0
- .equ se_ru_bari_tbs, 1
- .equ se_ru_bari_exg, 0
- .equ se_ru_bari_cmp, 1
-
- .section .rodata
- .global se_ru_bari
- .align 2
-
-@********************** Track 1 **********************@
-
-se_ru_bari_1:
- .byte KEYSH , se_ru_bari_key+0
- .byte TEMPO , 150*se_ru_bari_tbs/2
- .byte VOICE , 9
- .byte VOL , 100*se_ru_bari_mvl/mxv
- .byte BEND , c_v+0
- .byte N01 , Gn5 , v088
- .byte W01
- .byte N01
- .byte W02
- .byte Cn6 , v072
- .byte W03
- .byte Cn6 , v056
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_ru_bari_2:
- .byte KEYSH , se_ru_bari_key+0
- .byte VOICE , 122
- .byte VOL , 100*se_ru_bari_mvl/mxv
- .byte N01 , Gn2 , v112
- .byte W02
- .byte VOICE , 123
- .byte W01
- .byte N01 , Gs4 , v096
- .byte W03
- .byte Gs4 , v112
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_ru_bari:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_ru_bari_pri @ Priority
- .byte se_ru_bari_rev @ Reverb.
-
- .word se_ru_bari_grp
-
- .word se_ru_bari_1
- .word se_ru_bari_2
-
- .end
diff --git a/sound/songs/se_ru_gashin.s b/sound/songs/se_ru_gashin.s
deleted file mode 100644
index 1c9158cbd..000000000
--- a/sound/songs/se_ru_gashin.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_ru_gashin_grp, voicegroup128
- .equ se_ru_gashin_pri, 4
- .equ se_ru_gashin_rev, reverb_set+50
- .equ se_ru_gashin_mvl, 127
- .equ se_ru_gashin_key, 0
- .equ se_ru_gashin_tbs, 1
- .equ se_ru_gashin_exg, 0
- .equ se_ru_gashin_cmp, 1
-
- .section .rodata
- .global se_ru_gashin
- .align 2
-
-@********************** Track 1 **********************@
-
-se_ru_gashin_1:
- .byte KEYSH , se_ru_gashin_key+0
- .byte TEMPO , 150*se_ru_gashin_tbs/2
- .byte VOICE , 3
- .byte VOL , 90*se_ru_gashin_mvl/mxv
- .byte BEND , c_v+16
- .byte N03 , En3 , v112
- .byte W01
- .byte BEND , c_v+38
- .byte W01
- .byte c_v+62
- .byte W02
- .byte N12 , En4
- .byte W02
- .byte W06
- .byte W06
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_ru_gashin_2:
- .byte KEYSH , se_ru_gashin_key+0
- .byte VOICE , 4
- .byte VOL , 90*se_ru_gashin_mvl/mxv
- .byte N03 , Gs3 , v096
- .byte W04
- .byte N12 , Gs4
- .byte W02
- .byte W06
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_ru_gashin:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_ru_gashin_pri @ Priority
- .byte se_ru_gashin_rev @ Reverb.
-
- .word se_ru_gashin_grp
-
- .word se_ru_gashin_1
- .word se_ru_gashin_2
-
- .end
diff --git a/sound/songs/se_ru_gasyan.s b/sound/songs/se_ru_gasyan.s
deleted file mode 100644
index 8cf3f12ea..000000000
--- a/sound/songs/se_ru_gasyan.s
+++ /dev/null
@@ -1,83 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_ru_gasyan_grp, voicegroup128
- .equ se_ru_gasyan_pri, 4
- .equ se_ru_gasyan_rev, reverb_set+50
- .equ se_ru_gasyan_mvl, 127
- .equ se_ru_gasyan_key, 0
- .equ se_ru_gasyan_tbs, 1
- .equ se_ru_gasyan_exg, 0
- .equ se_ru_gasyan_cmp, 1
-
- .section .rodata
- .global se_ru_gasyan
- .align 2
-
-@********************** Track 1 **********************@
-
-se_ru_gasyan_1:
- .byte KEYSH , se_ru_gasyan_key+0
- .byte TEMPO , 120*se_ru_gasyan_tbs/2
- .byte VOICE , 3
- .byte VOL , 100*se_ru_gasyan_mvl/mxv
- .byte BEND , c_v+0
- .byte N01 , Gn3 , v120
- .byte W03
- .byte W01
- .byte Cn4
- .byte W01
- .byte BEND , c_v+12
- .byte W01
- .byte c_v+22
- .byte W01
- .byte N01 , Cn5 , v112
- .byte W01
- .byte BEND , c_v+35
- .byte W01
- .byte W01
- .byte c_v+46
- .byte W01
- .byte c_v+54
- .byte N01 , Cn4 , v104
- .byte W01
- .byte W01
- .byte BEND , c_v+63
- .byte W01
- .byte N01 , Cn5 , v096
- .byte W01
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_ru_gasyan_2:
- .byte KEYSH , se_ru_gasyan_key+0
- .byte VOICE , 4
- .byte VOL , 100*se_ru_gasyan_mvl/mxv
- .byte N01 , Gs3 , v064
- .byte W03
- .byte W01
- .byte N01
- .byte W02
- .byte Fn4
- .byte W03
- .byte Gs3
- .byte W03
- .byte Fn4
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_ru_gasyan:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_ru_gasyan_pri @ Priority
- .byte se_ru_gasyan_rev @ Reverb.
-
- .word se_ru_gasyan_grp
-
- .word se_ru_gasyan_1
- .word se_ru_gasyan_2
-
- .end
diff --git a/sound/songs/se_ru_hyuu.s b/sound/songs/se_ru_hyuu.s
deleted file mode 100644
index cf495141c..000000000
--- a/sound/songs/se_ru_hyuu.s
+++ /dev/null
@@ -1,80 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_ru_hyuu_grp, voicegroup128
- .equ se_ru_hyuu_pri, 4
- .equ se_ru_hyuu_rev, reverb_set+50
- .equ se_ru_hyuu_mvl, 127
- .equ se_ru_hyuu_key, 0
- .equ se_ru_hyuu_tbs, 1
- .equ se_ru_hyuu_exg, 0
- .equ se_ru_hyuu_cmp, 1
-
- .section .rodata
- .global se_ru_hyuu
- .align 2
-
-@********************** Track 1 **********************@
-
-se_ru_hyuu_1:
- .byte KEYSH , se_ru_hyuu_key+0
- .byte TEMPO , 170*se_ru_hyuu_tbs/2
- .byte VOICE , 22
- .byte VOL , 110*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v+60
- .byte N44 , Gn3 , v080
- .byte W03
- .byte BEND , c_v+57
- .byte W03
- .byte c_v+52
- .byte W03
- .byte c_v+43
- .byte W03
- .byte c_v+36
- .byte W03
- .byte c_v+30
- .byte W03
- .byte c_v+22
- .byte W03
- .byte c_v+16
- .byte W03
- .byte VOL , 104*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v+11
- .byte W03
- .byte VOL , 90*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v+3
- .byte W03
- .byte VOL , 82*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-8
- .byte W03
- .byte VOL , 71*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-16
- .byte W03
- .byte VOL , 58*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-24
- .byte W03
- .byte VOL , 45*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-36
- .byte W03
- .byte VOL , 36*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-50
- .byte W03
- .byte VOL , 11*se_ru_hyuu_mvl/mxv
- .byte BEND , c_v-63
- .byte W03
- .byte VOL , 3*se_ru_hyuu_mvl/mxv
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_ru_hyuu:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_ru_hyuu_pri @ Priority
- .byte se_ru_hyuu_rev @ Reverb.
-
- .word se_ru_hyuu_grp
-
- .word se_ru_hyuu_1
-
- .end
diff --git a/sound/songs/se_save.s b/sound/songs/se_save.s
deleted file mode 100644
index eaedd3e7b..000000000
--- a/sound/songs/se_save.s
+++ /dev/null
@@ -1,78 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_save_grp, voicegroup128
- .equ se_save_pri, 5
- .equ se_save_rev, reverb_set+50
- .equ se_save_mvl, 127
- .equ se_save_key, 0
- .equ se_save_tbs, 1
- .equ se_save_exg, 0
- .equ se_save_cmp, 1
-
- .section .rodata
- .global se_save
- .align 2
-
-@********************** Track 1 **********************@
-
-se_save_1:
- .byte KEYSH , se_save_key+0
- .byte TEMPO , 150*se_save_tbs/2
- .byte VOICE , 14
- .byte VOL , 80*se_save_mvl/mxv
- .byte BEND , c_v+17
- .byte N03 , En3 , v096
- .byte W03
- .byte Bn2
- .byte W03
- .byte En3
- .byte W03
- .byte Bn3
- .byte W03
- .byte N06 , Cn5
- .byte W06
- .byte N24 , Cn6
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_save_2:
- .byte KEYSH , se_save_key+0
- .byte VOICE , 17
- .byte VOL , 80*se_save_mvl/mxv
- .byte N03 , En3 , v100
- .byte W03
- .byte Bn2
- .byte W03
- .byte En3
- .byte W03
- .byte Bn3
- .byte W03
- .byte N06 , Cn5
- .byte W06
- .byte N24 , Cn6
- .byte W06
- .byte W06
- .byte W06
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_save:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_save_pri @ Priority
- .byte se_save_rev @ Reverb.
-
- .word se_save_grp
-
- .word se_save_1
- .word se_save_2
-
- .end
diff --git a/sound/songs/se_seikai.s b/sound/songs/se_seikai.s
deleted file mode 100644
index a3f27b6cd..000000000
--- a/sound/songs/se_seikai.s
+++ /dev/null
@@ -1,44 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_seikai_grp, voicegroup127
- .equ se_seikai_pri, 4
- .equ se_seikai_rev, reverb_set+50
- .equ se_seikai_mvl, 127
- .equ se_seikai_key, 0
- .equ se_seikai_tbs, 1
- .equ se_seikai_exg, 0
- .equ se_seikai_cmp, 1
-
- .section .rodata
- .global se_seikai
- .align 2
-
-@********************** Track 1 **********************@
-
-se_seikai_1:
- .byte KEYSH , se_seikai_key+0
- .byte TEMPO , 240*se_seikai_tbs/2
- .byte VOICE , 5
- .byte BENDR , 12
- .byte VOL , 80*se_seikai_mvl/mxv
- .byte BEND , c_v+0
- .byte N06 , Gn5 , v127
- .byte W06
- .byte N18 , Ds5
- .byte W18
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_seikai:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_seikai_pri @ Priority
- .byte se_seikai_rev @ Reverb.
-
- .word se_seikai_grp
-
- .word se_seikai_1
-
- .end
diff --git a/sound/songs/se_select.s b/sound/songs/se_select.s
deleted file mode 100644
index a20e08956..000000000
--- a/sound/songs/se_select.s
+++ /dev/null
@@ -1,50 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_select_grp, voicegroup127
- .equ se_select_pri, 5
- .equ se_select_rev, reverb_set+50
- .equ se_select_mvl, 127
- .equ se_select_key, 0
- .equ se_select_tbs, 1
- .equ se_select_exg, 0
- .equ se_select_cmp, 1
-
- .section .rodata
- .global se_select
- .align 2
-
-@********************** Track 1 **********************@
-
-se_select_1:
- .byte KEYSH , se_select_key+0
- .byte TEMPO , 300*se_select_tbs/2
- .byte VOICE , 87
- .byte VOL , 80*se_select_mvl/mxv
- .byte BEND , c_v+13
- .byte N03 , As5 , v068
- .byte W03
- .byte Gn6 , v127
- .byte W03
- .byte Gn6 , v068
- .byte W03
- .byte Gn6 , v127
- .byte W03
- .byte VOICE , 88
- .byte N06 , Gn6 , v068
- .byte W06
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_select:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_select_pri @ Priority
- .byte se_select_rev @ Reverb.
-
- .word se_select_grp
-
- .word se_select_1
-
- .end
diff --git a/sound/songs/se_suikomu.s b/sound/songs/se_suikomu.s
deleted file mode 100644
index eff89df3a..000000000
--- a/sound/songs/se_suikomu.s
+++ /dev/null
@@ -1,78 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_suikomu_grp, voicegroup127
- .equ se_suikomu_pri, 5
- .equ se_suikomu_rev, reverb_set+50
- .equ se_suikomu_mvl, 127
- .equ se_suikomu_key, 0
- .equ se_suikomu_tbs, 1
- .equ se_suikomu_exg, 0
- .equ se_suikomu_cmp, 1
-
- .section .rodata
- .global se_suikomu
- .align 2
-
-@********************** Track 1 **********************@
-
-se_suikomu_1:
- .byte KEYSH , se_suikomu_key+0
- .byte VOICE , 13
- .byte BENDR , 12
- .byte VOL , 12*se_suikomu_mvl/mxv
- .byte BEND , c_v+49
- .byte N06 , Gn4 , v080
- .byte W01
- .byte VOL , 44*se_suikomu_mvl/mxv
- .byte BEND , c_v+22
- .byte W01
- .byte VOL , 75*se_suikomu_mvl/mxv
- .byte BEND , c_v+20
- .byte W01
- .byte VOL , 87*se_suikomu_mvl/mxv
- .byte BEND , c_v+33
- .byte W01
- .byte VOL , 100*se_suikomu_mvl/mxv
- .byte BEND , c_v+54
- .byte W01
- .byte c_v+63
- .byte W01
- .byte W03
- .byte N03 , Gn4 , v040
- .byte W03
- .byte FINE
-
-@********************** Track 2 **********************@
-
-se_suikomu_2:
- .byte KEYSH , se_suikomu_key+0
- .byte VOICE , 123
- .byte VOL , 59*se_suikomu_mvl/mxv
- .byte N06 , Gs4 , v052
- .byte W01
- .byte VOL , 72*se_suikomu_mvl/mxv
- .byte W01
- .byte 90*se_suikomu_mvl/mxv
- .byte W01
- .byte 100*se_suikomu_mvl/mxv
- .byte W03
- .byte W03
- .byte N03 , Gs4 , v024
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_suikomu:
- .byte 2 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_suikomu_pri @ Priority
- .byte se_suikomu_rev @ Reverb.
-
- .word se_suikomu_grp
-
- .word se_suikomu_1
- .word se_suikomu_2
-
- .end
diff --git a/sound/songs/se_t_ame.s b/sound/songs/se_t_ame.s
deleted file mode 100644
index 78db57968..000000000
--- a/sound/songs/se_t_ame.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_ame_grp, voicegroup128
- .equ se_t_ame_pri, 2
- .equ se_t_ame_rev, reverb_set+50
- .equ se_t_ame_mvl, 127
- .equ se_t_ame_key, 0
- .equ se_t_ame_tbs, 1
- .equ se_t_ame_exg, 0
- .equ se_t_ame_cmp, 1
-
- .section .rodata
- .global se_t_ame
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_ame_1:
- .byte KEYSH , se_t_ame_key+0
- .byte TEMPO , 220*se_t_ame_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 15*se_t_ame_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Gn3 , v060
- .byte W03
- .byte VOL , 27*se_t_ame_mvl/mxv
- .byte W03
- .byte 39*se_t_ame_mvl/mxv
- .byte W03
- .byte 44*se_t_ame_mvl/mxv
- .byte W03
- .byte 52*se_t_ame_mvl/mxv
- .byte W03
- .byte 59*se_t_ame_mvl/mxv
- .byte W03
- .byte 68*se_t_ame_mvl/mxv
- .byte W03
- .byte 80*se_t_ame_mvl/mxv
- .byte W03
-se_t_ame_1_B1:
- .byte N60 , Gn3 , v060
- .byte W24
- .byte W24
- .byte W12
- .byte GOTO
- .word se_t_ame_1_B1
- .byte W12
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_ame:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_ame_pri @ Priority
- .byte se_t_ame_rev @ Reverb.
-
- .word se_t_ame_grp
-
- .word se_t_ame_1
-
- .end
diff --git a/sound/songs/se_t_ame_e.s b/sound/songs/se_t_ame_e.s
deleted file mode 100644
index 5558a5118..000000000
--- a/sound/songs/se_t_ame_e.s
+++ /dev/null
@@ -1,74 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_ame_e_grp, voicegroup128
- .equ se_t_ame_e_pri, 2
- .equ se_t_ame_e_rev, reverb_set+50
- .equ se_t_ame_e_mvl, 127
- .equ se_t_ame_e_key, 0
- .equ se_t_ame_e_tbs, 1
- .equ se_t_ame_e_exg, 0
- .equ se_t_ame_e_cmp, 1
-
- .section .rodata
- .global se_t_ame_e
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_ame_e_1:
- .byte KEYSH , se_t_ame_e_key+0
- .byte TEMPO , 220*se_t_ame_e_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 80*se_t_ame_e_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Gn3 , v060
- .byte W03
- .byte VOL , 76*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 74*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 72*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 68*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 64*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 58*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 50*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 44*se_t_ame_e_mvl/mxv
- .byte N24
- .byte W03
- .byte VOL , 38*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 34*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 27*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 20*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 15*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 10*se_t_ame_e_mvl/mxv
- .byte W03
- .byte 6*se_t_ame_e_mvl/mxv
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_ame_e:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_ame_e_pri @ Priority
- .byte se_t_ame_e_rev @ Reverb.
-
- .word se_t_ame_e_grp
-
- .word se_t_ame_e_1
-
- .end
diff --git a/sound/songs/se_t_kami.s b/sound/songs/se_t_kami.s
deleted file mode 100644
index 6ac8ae06f..000000000
--- a/sound/songs/se_t_kami.s
+++ /dev/null
@@ -1,98 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_kami_grp, voicegroup128
- .equ se_t_kami_pri, 3
- .equ se_t_kami_rev, reverb_set+50
- .equ se_t_kami_mvl, 127
- .equ se_t_kami_key, 0
- .equ se_t_kami_tbs, 1
- .equ se_t_kami_exg, 0
- .equ se_t_kami_cmp, 1
-
- .section .rodata
- .global se_t_kami
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_kami_1:
- .byte KEYSH , se_t_kami_key+0
- .byte TEMPO , 220*se_t_kami_tbs/2
- .byte VOICE , 18
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 110*se_t_kami_mvl/mxv
- .byte BEND , c_v+0
- .byte N09 , En3 , v112
- .byte W03
- .byte BEND , c_v+21
- .byte W03
- .byte c_v+0
- .byte W03
- .byte c_v+6
- .byte N15 , En3 , v120
- .byte W03
- .byte BEND , c_v+2
- .byte W03
- .byte c_v-9
- .byte W03
- .byte c_v-29
- .byte W06
- .byte c_v+0
- .byte N09 , Gn2
- .byte W06
- .byte BEND , c_v-8
- .byte W03
- .byte c_v-15
- .byte TIE , Gs2 , v112
- .byte W03
- .byte BEND , c_v-4
- .byte W09
- .byte c_v-8
- .byte W03
- .byte W06
- .byte c_v-13
- .byte W03
- .byte c_v-22
- .byte W09
- .byte c_v-32
- .byte W06
- .byte VOL , 102*se_t_kami_mvl/mxv
- .byte BEND , c_v-38
- .byte W09
- .byte VOL , 97*se_t_kami_mvl/mxv
- .byte W09
- .byte 92*se_t_kami_mvl/mxv
- .byte BEND , c_v-45
- .byte W06
- .byte W03
- .byte VOL , 83*se_t_kami_mvl/mxv
- .byte W06
- .byte BEND , c_v-52
- .byte W03
- .byte VOL , 72*se_t_kami_mvl/mxv
- .byte W09
- .byte 63*se_t_kami_mvl/mxv
- .byte W03
- .byte W06
- .byte 57*se_t_kami_mvl/mxv
- .byte W06
- .byte 46*se_t_kami_mvl/mxv
- .byte W12
- .byte EOT
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_kami:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_kami_pri @ Priority
- .byte se_t_kami_rev @ Reverb.
-
- .word se_t_kami_grp
-
- .word se_t_kami_1
-
- .end
diff --git a/sound/songs/se_t_kami2.s b/sound/songs/se_t_kami2.s
deleted file mode 100644
index 1c400fe6a..000000000
--- a/sound/songs/se_t_kami2.s
+++ /dev/null
@@ -1,80 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_kami2_grp, voicegroup128
- .equ se_t_kami2_pri, 3
- .equ se_t_kami2_rev, reverb_set+50
- .equ se_t_kami2_mvl, 127
- .equ se_t_kami2_key, 0
- .equ se_t_kami2_tbs, 1
- .equ se_t_kami2_exg, 0
- .equ se_t_kami2_cmp, 1
-
- .section .rodata
- .global se_t_kami2
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_kami2_1:
- .byte KEYSH , se_t_kami2_key+0
- .byte TEMPO , 220*se_t_kami2_tbs/2
- .byte VOICE , 18
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 110*se_t_kami2_mvl/mxv
- .byte BEND , c_v+35
- .byte TIE , Dn2 , v112
- .byte W03
- .byte BEND , c_v+11
- .byte W03
- .byte c_v+0
- .byte W03
- .byte c_v+6
- .byte W06
- .byte c_v+0
- .byte W09
- .byte W15
- .byte c_v+0
- .byte W06
- .byte c_v-4
- .byte W03
- .byte W06
- .byte c_v-13
- .byte W09
- .byte c_v-18
- .byte W09
- .byte VOL , 102*se_t_kami2_mvl/mxv
- .byte BEND , c_v-25
- .byte W09
- .byte VOL , 97*se_t_kami2_mvl/mxv
- .byte BEND , c_v-38
- .byte W09
- .byte VOL , 92*se_t_kami2_mvl/mxv
- .byte BEND , c_v-45
- .byte W06
- .byte W03
- .byte VOL , 83*se_t_kami2_mvl/mxv
- .byte W06
- .byte BEND , c_v-52
- .byte W03
- .byte VOL , 64*se_t_kami2_mvl/mxv
- .byte W06
- .byte 47*se_t_kami2_mvl/mxv
- .byte W06
- .byte EOT
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_kami2:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_kami2_pri @ Priority
- .byte se_t_kami2_rev @ Reverb.
-
- .word se_t_kami2_grp
-
- .word se_t_kami2_1
-
- .end
diff --git a/sound/songs/se_t_koame.s b/sound/songs/se_t_koame.s
deleted file mode 100644
index 6a7acdbf5..000000000
--- a/sound/songs/se_t_koame.s
+++ /dev/null
@@ -1,65 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_koame_grp, voicegroup128
- .equ se_t_koame_pri, 2
- .equ se_t_koame_rev, reverb_set+50
- .equ se_t_koame_mvl, 127
- .equ se_t_koame_key, 0
- .equ se_t_koame_tbs, 1
- .equ se_t_koame_exg, 0
- .equ se_t_koame_cmp, 1
-
- .section .rodata
- .global se_t_koame
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_koame_1:
- .byte KEYSH , se_t_koame_key+0
- .byte TEMPO , 220*se_t_koame_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 15*se_t_koame_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Bn3 , v052
- .byte W03
- .byte VOL , 27*se_t_koame_mvl/mxv
- .byte W03
- .byte 39*se_t_koame_mvl/mxv
- .byte W03
- .byte 44*se_t_koame_mvl/mxv
- .byte W03
- .byte 52*se_t_koame_mvl/mxv
- .byte W03
- .byte 59*se_t_koame_mvl/mxv
- .byte W03
- .byte 68*se_t_koame_mvl/mxv
- .byte W03
- .byte 80*se_t_koame_mvl/mxv
- .byte W03
-se_t_koame_1_B1:
- .byte N60 , Bn3 , v052
- .byte W24
- .byte W24
- .byte W12
- .byte GOTO
- .word se_t_koame_1_B1
- .byte W12
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_koame:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_koame_pri @ Priority
- .byte se_t_koame_rev @ Reverb.
-
- .word se_t_koame_grp
-
- .word se_t_koame_1
-
- .end
diff --git a/sound/songs/se_t_koame_e.s b/sound/songs/se_t_koame_e.s
deleted file mode 100644
index 7570d98cd..000000000
--- a/sound/songs/se_t_koame_e.s
+++ /dev/null
@@ -1,74 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_koame_e_grp, voicegroup128
- .equ se_t_koame_e_pri, 2
- .equ se_t_koame_e_rev, reverb_set+50
- .equ se_t_koame_e_mvl, 127
- .equ se_t_koame_e_key, 0
- .equ se_t_koame_e_tbs, 1
- .equ se_t_koame_e_exg, 0
- .equ se_t_koame_e_cmp, 1
-
- .section .rodata
- .global se_t_koame_e
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_koame_e_1:
- .byte KEYSH , se_t_koame_e_key+0
- .byte TEMPO , 220*se_t_koame_e_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 80*se_t_koame_e_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Bn3 , v052
- .byte W03
- .byte VOL , 76*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 74*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 72*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 68*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 64*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 58*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 50*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 44*se_t_koame_e_mvl/mxv
- .byte N24
- .byte W03
- .byte VOL , 38*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 34*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 27*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 20*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 15*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 10*se_t_koame_e_mvl/mxv
- .byte W03
- .byte 6*se_t_koame_e_mvl/mxv
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_koame_e:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_koame_e_pri @ Priority
- .byte se_t_koame_e_rev @ Reverb.
-
- .word se_t_koame_e_grp
-
- .word se_t_koame_e_1
-
- .end
diff --git a/sound/songs/se_t_ooame.s b/sound/songs/se_t_ooame.s
deleted file mode 100644
index 434f20779..000000000
--- a/sound/songs/se_t_ooame.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_ooame_grp, voicegroup128
- .equ se_t_ooame_pri, 2
- .equ se_t_ooame_rev, reverb_set+50
- .equ se_t_ooame_mvl, 127
- .equ se_t_ooame_key, 0
- .equ se_t_ooame_tbs, 1
- .equ se_t_ooame_exg, 0
- .equ se_t_ooame_cmp, 1
-
- .section .rodata
- .global se_t_ooame
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_ooame_1:
- .byte KEYSH , se_t_ooame_key+0
- .byte TEMPO , 220*se_t_ooame_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 18*se_t_ooame_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Cn3 , v060
- .byte W03
- .byte VOL , 33*se_t_ooame_mvl/mxv
- .byte W03
- .byte 48*se_t_ooame_mvl/mxv
- .byte W03
- .byte 55*se_t_ooame_mvl/mxv
- .byte W03
- .byte 65*se_t_ooame_mvl/mxv
- .byte W03
- .byte 74*se_t_ooame_mvl/mxv
- .byte W03
- .byte 85*se_t_ooame_mvl/mxv
- .byte W03
- .byte 100*se_t_ooame_mvl/mxv
- .byte W03
-se_t_ooame_1_B1:
- .byte N36 , Cn3 , v060
- .byte W24
- .byte W12
- .byte GOTO
- .word se_t_ooame_1_B1
- .byte W12
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_ooame:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_ooame_pri @ Priority
- .byte se_t_ooame_rev @ Reverb.
-
- .word se_t_ooame_grp
-
- .word se_t_ooame_1
-
- .end
diff --git a/sound/songs/se_t_ooame_e.s b/sound/songs/se_t_ooame_e.s
deleted file mode 100644
index 329cd3702..000000000
--- a/sound/songs/se_t_ooame_e.s
+++ /dev/null
@@ -1,74 +0,0 @@
- .include "MPlayDef.s"
-
- .equ se_t_ooame_e_grp, voicegroup128
- .equ se_t_ooame_e_pri, 2
- .equ se_t_ooame_e_rev, reverb_set+50
- .equ se_t_ooame_e_mvl, 127
- .equ se_t_ooame_e_key, 0
- .equ se_t_ooame_e_tbs, 1
- .equ se_t_ooame_e_exg, 0
- .equ se_t_ooame_e_cmp, 1
-
- .section .rodata
- .global se_t_ooame_e
- .align 2
-
-@********************** Track 1 **********************@
-
-se_t_ooame_e_1:
- .byte KEYSH , se_t_ooame_e_key+0
- .byte TEMPO , 220*se_t_ooame_e_tbs/2
- .byte VOICE , 36
- .byte BENDR , 12
- .byte PAN , c_v+0
- .byte VOL , 100*se_t_ooame_e_mvl/mxv
- .byte BEND , c_v+0
- .byte N24 , Cn3 , v060
- .byte W03
- .byte VOL , 96*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 93*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 90*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 85*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 81*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 73*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 62*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 55*se_t_ooame_e_mvl/mxv
- .byte N24
- .byte W03
- .byte VOL , 48*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 42*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 33*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 25*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 18*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 12*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte 7*se_t_ooame_e_mvl/mxv
- .byte W03
- .byte FINE
-
-@******************************************************@
- .align 2
-
-se_t_ooame_e:
- .byte 1 @ NumTrks
- .byte 0 @ NumBlks
- .byte se_t_ooame_e_pri @ Priority
- .byte se_t_ooame_e_rev @ Reverb.
-
- .word se_t_ooame_e_grp
-
- .word se_t_ooame_e_1
-
- .end
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index d8e422bb5..2ac6cca90 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -36,9 +36,7 @@ extern const union AffineAnimCmd *gUnknown_082FF6C0[];
// This file's functions.
void sub_80A64EC(struct Sprite *sprite);
void sub_80A653C(struct Sprite *sprite);
-void InitAnimLinearTranslation(struct Sprite *sprite);
void sub_80A6FB4(struct Sprite *sprite);
-void sub_80A6F98(struct Sprite *sprite);
void sub_80A7144(struct Sprite *sprite);
void sub_80A791C(struct Sprite *sprite);
void sub_80A8DFC(struct Sprite *sprite);
@@ -50,8 +48,6 @@ void sub_80A7AFC(u8 taskId);
void sub_80A8CAC(u8 taskId);
void AnimTask_BlendMonInAndOutStep(u8 taskId);
bool8 sub_80A7238(void);
-void sub_80A8048(s16 *bottom, s16 *top, const void *ptr);
-void *sub_80A8050(s16 bottom, s16 top);
u8 sub_80A82E4(u8 battlerId);
void sub_80A8D78(struct Task *task, u8 taskId);
@@ -532,7 +528,7 @@ void sub_80A6450(struct Sprite *sprite)
// Simply waits until the sprite's data[0] hits zero.
// This is used to let sprite anims or affine anims to run for a designated
// duration.
-void sub_80A64B0(struct Sprite *sprite)
+void WaitAnimForDuration(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
sprite->data[0]--;
@@ -745,7 +741,7 @@ void sub_80A6864(struct Sprite *sprite, s16 a2)
}
}
-void sub_80A68D4(struct Sprite *sprite)
+void InitAnimArcTranslation(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -791,7 +787,7 @@ void sub_80A6980(struct Sprite *sprite, bool8 a2)
sprite->pos1.y += gBattleAnimArgs[1];
}
-void sub_80A69CC(struct Sprite *sprite, u8 a2)
+void InitAnimSpritePos(struct Sprite *sprite, u8 a2)
{
if (!a2)
{
@@ -1004,12 +1000,12 @@ void sub_80A6DEC(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
- sub_80A6E14(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->callback = sub_80A65A8;
sprite->callback(sprite);
}
-void sub_80A6E14(struct Sprite *sprite)
+void InitSpriteDataForLinearTranslation(struct Sprite *sprite)
{
s16 x = (sprite->data[2] - sprite->data[1]) << 8;
s16 y = (sprite->data[4] - sprite->data[3]) << 8;
@@ -1047,7 +1043,7 @@ void InitAnimLinearTranslation(struct Sprite *sprite)
sprite->data[3] = 0;
}
-void sub_80A6EEC(struct Sprite *sprite)
+void StartAnimLinearTranslation(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -1476,7 +1472,7 @@ void sub_80A77C8(struct Sprite *sprite)
else
var = FALSE;
if (!gBattleAnimArgs[2])
- sub_80A69CC(sprite, var);
+ InitAnimSpritePos(sprite, var);
else
sub_80A6980(sprite, var);
sprite->data[0]++;
@@ -1511,27 +1507,27 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
else
attributeId = BATTLER_COORD_Y;
- sub_80A69CC(sprite, v1);
+ InitAnimSpritePos(sprite, v1);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, attributeId) + gBattleAnimArgs[3];
- sprite->callback = sub_80A6EEC;
+ sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void sub_80A78AC(struct Sprite *sprite)
{
- sub_80A69CC(sprite, 1);
+ InitAnimSpritePos(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
- sub_80A68D4(sprite);
+ InitAnimArcTranslation(sprite);
sprite->callback = sub_80A791C;
}
@@ -1558,7 +1554,7 @@ void sub_80A7938(struct Sprite *sprite)
}
if (!gBattleAnimArgs[5])
{
- sub_80A69CC(sprite, r4);
+ InitAnimSpritePos(sprite, r4);
battlerId = gBattleAnimAttacker;
}
else
@@ -1572,7 +1568,7 @@ void sub_80A7938(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(battlerId, attributeId) + gBattleAnimArgs[3];
- sprite->callback = sub_80A6EEC;
+ sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -2454,6 +2450,6 @@ void sub_80A8EE4(struct Sprite *sprite)
sprite->pos1.x += x;
sprite->pos1.y = gBattleAnimArgs[5] - 80;
}
- sprite->callback = sub_80A6EEC;
+ sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c
index 1864a1a7a..25e07dc3a 100644
--- a/src/battle_anim_80D51AC.c
+++ b/src/battle_anim_80D51AC.c
@@ -442,7 +442,7 @@ void SlideMonToOriginalPos(struct Sprite *sprite)
sprite->data[2] = gSprites[monSpriteId].pos1.x;
sprite->data[3] = gSprites[monSpriteId].pos1.y + gSprites[monSpriteId].pos2.y;
sprite->data[4] = gSprites[monSpriteId].pos1.y;
- sub_80A6E14(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = gSprites[monSpriteId].pos2.x;
@@ -520,7 +520,7 @@ void SlideMonToOffset(struct Sprite *sprite)
sprite->data[2] = gSprites[monSpriteId].pos1.x + gBattleAnimArgs[1];
sprite->data[3] = gSprites[monSpriteId].pos1.y;
sprite->data[4] = gSprites[monSpriteId].pos1.y + gBattleAnimArgs[2];
- sub_80A6E14(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = monSpriteId;
@@ -556,7 +556,7 @@ void sub_80D5B48(struct Sprite *sprite)
sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1];
sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y;
sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2];
- sub_80A6E14(sprite);
+ InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = gSprites[spriteId].pos2.x << 8;
sprite->data[4] = gSprites[spriteId].pos2.y << 8;
sprite->data[5] = spriteId;
diff --git a/src/battle_arena.c b/src/battle_arena.c
index c686ed791..cd2c976da 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -15,6 +15,7 @@
#include "palette.h"
#include "random.h"
#include "sound.h"
+#include "string_util.h"
#include "text.h"
#include "util.h"
#include "constants/songs.h"
diff --git a/src/battle_bg.c b/src/battle_bg.c
index 51138040c..bb66a41fd 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -157,9 +157,9 @@ const struct BgTemplate gBattleBgTemplates[] =
},
};
-static const struct WindowTemplate gUnknown_0831AA18[] =
+static const struct WindowTemplate gStandardBattleWindowTemplates[] =
{
- {
+ { // 0 Standard battle message
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -168,7 +168,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 0,
.baseBlock = 0x0090,
},
- {
+ { // 1 "What will (pokemon) do?"
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 35,
@@ -177,7 +177,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 0,
.baseBlock = 0x01c0,
},
- {
+ { // 2 "Fight/Pokemon/Bag/Run"
.bg = 0,
.tilemapLeft = 17,
.tilemapTop = 35,
@@ -186,7 +186,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 5,
.baseBlock = 0x0190,
},
- {
+ { // 3 Top left move
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 55,
@@ -195,7 +195,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 5,
.baseBlock = 0x0300,
},
- {
+ { // 4 Top right move
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 55,
@@ -204,7 +204,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 5,
.baseBlock = 0x0310,
},
- {
+ { // 5 Bottom left move
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 57,
@@ -213,7 +213,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
.paletteNum = 5,
.baseBlock = 0x0320,
},
- {
+ { // 6 Bottom right move
.bg = 0,
.tilemapLeft = 11,
.tilemapTop = 57,
@@ -378,7 +378,7 @@ static const struct WindowTemplate gUnknown_0831AA18[] =
DUMMY_WIN_TEMPLATE
};
-static const struct WindowTemplate gUnknown_0831AAE0[] =
+static const struct WindowTemplate gBattleArenaWindowTemplates[] =
{
{
.bg = 0,
@@ -592,8 +592,8 @@ static const struct WindowTemplate gUnknown_0831AAE0[] =
const struct WindowTemplate * const gBattleWindowTemplates[] =
{
- gUnknown_0831AA18,
- gUnknown_0831AAE0,
+ gStandardBattleWindowTemplates,
+ gBattleArenaWindowTemplates,
};
static const struct BattleBackground gBattleTerrainTable[] =
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 7589eb962..0cec046e4 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1344,7 +1344,7 @@ static void LinkOpponentHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_8064470;
}
@@ -1706,7 +1706,7 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80676FC);
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 04554a81b..04a3784da 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1166,7 +1166,7 @@ static void LinkPartnerHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_814AF54;
}
@@ -1532,7 +1532,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 72dfb7e6b..403cc5eed 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1381,7 +1381,7 @@ static void OpponentHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_805F240;
}
@@ -1855,7 +1855,7 @@ static void OpponentHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_806280C);
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 3fabf25f8..49629198c 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -114,7 +114,7 @@ static void MoveSelectionDisplayPpNumber(void);
static void MoveSelectionDisplayPpString(void);
static void MoveSelectionDisplayMoveType(void);
static void MoveSelectionDisplayMoveNames(void);
-static void HandleMoveSwitchting(void);
+static void HandleMoveSwitching(void);
static void sub_8058FC0(void);
static void WaitForMonSelection(void);
static void CompleteWhenChoseItem(void);
@@ -617,7 +617,7 @@ static void HandleInputChooseMove(void)
MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB);
- gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitchting;
+ gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitching;
}
}
}
@@ -672,7 +672,7 @@ u32 sub_8057FBC(void) // unused
return var;
}
-static void HandleMoveSwitchting(void)
+static void HandleMoveSwitching(void)
{
u8 perMovePPBonuses[4];
struct ChooseMoveStruct moveStruct;
@@ -2385,7 +2385,7 @@ static void PlayerHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
gBattlerControllerFuncs[gActiveBattler] = sub_80588B4;
@@ -2930,7 +2930,7 @@ static void PlayerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 0790cbbff..bd892c922 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1361,7 +1361,7 @@ static void PlayerPartnerHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_81BAE98;
}
@@ -1785,7 +1785,7 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 83c4965ea..b54e61255 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1275,7 +1275,7 @@ static void RecordedOpponentHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_81865C8;
}
@@ -1649,7 +1649,7 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_818962C);
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index cbb46a940..17b115caa 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1276,7 +1276,7 @@ static void RecordedPlayerHandleTrainerSlideBack(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 35;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy);
gBattlerControllerFuncs[gActiveBattler] = sub_81899F0;
}
@@ -1671,7 +1671,7 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 922c5d80b..1a3a2d53d 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -1435,7 +1435,7 @@ static void WallyHandleIntroTrainerBallThrow(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y;
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80A6EEC;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler;
StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_805CC00);
diff --git a/src/battle_dome.c b/src/battle_dome.c
index c4cb24204..152a11ae8 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -63,9 +63,9 @@ extern u8 GetFrontierBrainMonNature(u8);
extern void sub_81A4C30(void);
extern u8 sub_81A3610(void);
extern u16 GetFrontierBrainMonSpecies(u8);
-extern void ReducePlayerPartyToThree(void);
+extern void ReducePlayerPartyToSelectedMons(void);
-extern u8 gUnknown_0203CEF8[];
+extern u8 gSelectedOrderFromParty[];
extern const u16 gBattleFrontierHeldItems[];
extern const struct FacilityMon gBattleFrontierMons[];
@@ -2465,8 +2465,8 @@ static void sub_818EA84(void)
break;
case 8:
sub_81B8558();
- gUnknown_0203CEF8[0] = gSaveBlock2Ptr->frontier.field_CB0;
- gUnknown_0203CEF8[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8;
+ gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0;
+ gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8;
break;
case 9:
gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B;
@@ -2535,7 +2535,7 @@ static void sub_818ED28(void)
}
break;
case 8:
- gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gUnknown_0203CEF8);
+ gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gSelectedOrderFromParty);
break;
}
}
@@ -6070,7 +6070,7 @@ static void sub_8194D68(void)
for (i = 0; i < 2; i++)
{
- s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gUnknown_0203CEF8[i] - 1] - 1;
+ s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gSelectedOrderFromParty[i] - 1] - 1;
s32 count;
for (moveSlot = 0; moveSlot < 4; moveSlot++)
@@ -6096,7 +6096,7 @@ static void sub_8194E44(void)
for (i = 0; i < 2; i++)
{
- s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gUnknown_0203CEF8[i] - 1] - 1;
+ s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gSelectedOrderFromParty[i] - 1] - 1;
u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL);
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item);
}
@@ -6104,7 +6104,7 @@ static void sub_8194E44(void)
static void sub_8194EB4(void)
{
- ReducePlayerPartyToThree();
+ ReducePlayerPartyToSelectedMons();
}
static void sub_8194EC0(void)
diff --git a/src/battle_interface.c b/src/battle_interface.c
index ec8a06094..c7eb11293 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -168,15 +168,15 @@ extern const u8 gText_DynColor1Female[];
// this file's functions
static const u8 *GetHealthboxElementGfxPtr(u8 elementId);
-static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 arg3, u32 *windowId);
+static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId);
static void RemoveWindowOnHealthbox(u32 windowId);
static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId);
-static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 arg2);
-static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2);
-static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2);
+static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth);
+static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth);
+static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth);
static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2);
static void sub_8073E08(u8 taskId);
@@ -965,7 +965,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthBarSpritePtr->subspriteMode = 2;
healthBarSpritePtr->oam.priority = 1;
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * 32), 64);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64);
gSprites[healthboxLeftSpriteId].hMain_HealthBarSpriteId = healthbarSpriteId;
gSprites[healthboxLeftSpriteId].hMain_Battler = battlerId;
@@ -1154,7 +1154,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
xPos += var1;
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId);
- spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
{
@@ -1182,7 +1182,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle())
{
- spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
if (maxOrCurrent != HP_CURRENT) // singles, max
{
ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
@@ -1243,7 +1243,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
for (i = 0; i < 3; i++)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[i * 64 + 32],
- (void*)((OBJ_VRAM0) + 32 * (gSprites[healthboxSpriteId].oam.tileNum + var + i)),
+ (void*)((OBJ_VRAM0) + TILE_SIZE_4BPP * (gSprites[healthboxSpriteId].oam.tileNum + var + i)),
0x20);
}
}
@@ -1261,7 +1261,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
{
if (gBattleSpritesDataPtr->battlerData[gSprites[healthboxSpriteId].data[6]].hpNumbersNoBars) // don't print text if only bars are visible
{
- spriteTileNum = gSprites[gSprites[healthboxSpriteId].data[5]].oam.tileNum * 32;
+ spriteTileNum = gSprites[gSprites[healthboxSpriteId].data[5]].oam.tileNum * TILE_SIZE_4BPP;
objVram = (void*)(OBJ_VRAM0) + spriteTileNum;
if (maxOrCurrent != HP_CURRENT) // doubles, max hp
@@ -1271,7 +1271,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
HpTextIntoHealthboxObject((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
RemoveWindowOnHealthbox(windowId);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
- (void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * 32),
+ (void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP),
0x20);
}
else
@@ -1328,16 +1328,16 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
if (maxOrCurrent == HP_CURRENT)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[224],
- (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * 32)),
+ (void*)((OBJ_VRAM0) + ((gSprites[r7].oam.tileNum + 4) * TILE_SIZE_4BPP)),
0x20);
- CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * 32)), 0x20);
+ CpuFill32(0, (void*)((OBJ_VRAM0) + (gSprites[r7].oam.tileNum * TILE_SIZE_4BPP)), 0x20);
}
else
{
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side.
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
- (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * 32),
+ (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * TILE_SIZE_4BPP),
0x20);
}
}
@@ -1349,7 +1349,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
{
u8 text[20];
- s32 j, var2;
+ s32 j, spriteTileNum;
u8 *barFontGfx;
u8 i, var, nature, healthBarSpriteId;
@@ -1376,12 +1376,12 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
for (j = 1; j < var + 1; j++)
{
- var2 = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * 32;
- CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (var2), 0x20);
+ spriteTileNum = (gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP;
+ CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20);
barFontGfx += 0x20;
- var2 = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * 32;
- CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (var2), 0x20);
+ spriteTileNum = (8 + gSprites[healthboxSpriteId].oam.tileNum + (j - (j / 8 * 8)) + (j / 8 * 64)) * TILE_SIZE_4BPP;
+ CpuCopy32(barFontGfx, (void*)(OBJ_VRAM0) + (spriteTileNum), 0x20);
barFontGfx += 0x20;
}
@@ -1398,13 +1398,13 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
if (j <= 1)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * 32,
+ (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * TILE_SIZE_4BPP,
32);
}
else
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * 32,
+ (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * TILE_SIZE_4BPP,
32);
}
}
@@ -1436,7 +1436,7 @@ void SwapHpBarsWithHpText(void)
{
healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
- CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100);
+ CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 0x100);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX);
}
@@ -1444,7 +1444,7 @@ void SwapHpBarsWithHpText(void)
{
UpdateStatusIconInHealthbox(gHealthboxSpriteIds[i]);
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gPlayerParty[gBattlerPartyIndexes[i]], HEALTHBOX_HEALTH_BAR);
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_117), (void*)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxSpriteIds[i]].oam.tileNum * TILE_SIZE_4BPP), 32);
}
}
else
@@ -1970,7 +1970,7 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
break;
}
- spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
{
@@ -2008,9 +2008,9 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
if (noStatus)
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
else
- CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * 32), 32);
+ CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * TILE_SIZE_4BPP), 32);
}
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
@@ -2068,10 +2068,10 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
statusGfxPtr = GetHealthboxElementGfxPtr(HEALTHBOX_GFX_39);
for (i = 0; i < 3; i++)
- CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32);
+ CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * TILE_SIZE_4BPP), 32);
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 64);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 64);
TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
return;
@@ -2082,13 +2082,13 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2);
CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2);
- CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96);
+ CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * TILE_SIZE_4BPP), 96);
if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 32);
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * TILE_SIZE_4BPP), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * TILE_SIZE_4BPP), 32);
}
}
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
@@ -2160,7 +2160,7 @@ static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId)
u8 *windowTileData;
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, 2, &windowId);
- spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
RemoveWindowOnHealthbox(windowId);
@@ -2177,7 +2177,7 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
ConvertIntToDecimalStringN(txtPtr, gNumSafariBalls, STR_CONV_MODE_LEFT_ALIGN, 2);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, 2, &windowId);
- spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
+ spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2);
SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4);
RemoveWindowOnHealthbox(windowId);
@@ -2323,10 +2323,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId;
if (i < 2)
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * 32), 32);
+ (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * TILE_SIZE_4BPP), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * 32), 32);
+ (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
}
break;
case EXP_BAR:
@@ -2345,10 +2345,10 @@ static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
{
if (i < 4)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32);
+ (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * TILE_SIZE_4BPP), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * 32), 32);
+ (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * TILE_SIZE_4BPP), 32);
}
break;
}
@@ -2571,16 +2571,16 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp)
return result;
}
-static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 arg3, u32 *windowId)
+static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId)
{
u16 winId;
u8 color[3];
struct WindowTemplate winTemplate = sHealthboxWindowTemplate;
winId = AddWindow(&winTemplate);
- FillWindowPixelBuffer(winId, (arg3 << 4) | (arg3));
+ FillWindowPixelBuffer(winId, (bgColor << 4) | (bgColor));
- color[0] = arg3;
+ color[0] = bgColor;
color[1] = 1;
color[2] = 3;
@@ -2597,31 +2597,31 @@ static void RemoveWindowOnHealthbox(u32 windowId)
static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2)
{
- CpuFill32(0x11111111 * arg1, dest, arg2 * 32);
+ CpuFill32(0x11111111 * arg1, dest, arg2 * TILE_SIZE_4BPP);
}
-static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2)
+static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth)
{
- CpuCopy32(windowTileData + 256, dest, arg2 * 32);
+ CpuCopy32(windowTileData + 256, dest, windowWidth * TILE_SIZE_4BPP);
}
-static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 arg2)
+static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth)
{
- CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
-
- if (arg2 > 0)
+ CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP);
+// + 256 as that prevents the top 4 blank rows of sHealthboxWindowTemplate from being copied
+ if (windowWidth > 0)
{
do
{
CpuCopy32(windowTileData + 20, dest + 20, 12);
dest += 32, windowTileData += 32;
- arg2--;
- } while (arg2 != 0);
+ windowWidth--;
+ } while (windowWidth != 0);
}
}
-static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2)
+static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth)
{
- CpuCopy32(windowTileData, dest, arg2 * 32);
- CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
+ CpuCopy32(windowTileData, dest, windowWidth * TILE_SIZE_4BPP);
+ CpuCopy32(windowTileData + 256, dest + 256, windowWidth * TILE_SIZE_4BPP);
}
diff --git a/src/battle_main.c b/src/battle_main.c
index 116f5963a..8bdd2220b 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -166,7 +166,7 @@ static void HandleAction_WatchesCarefully(void);
static void HandleAction_SafariZoneBallThrow(void);
static void HandleAction_ThrowPokeblock(void);
static void HandleAction_GoNear(void);
-static void HandleAction_SafriZoneRun(void);
+static void HandleAction_SafariZoneRun(void);
static void HandleAction_WallyBallThrow(void);
static void HandleAction_Action11(void);
static void HandleAction_NothingIsFainted(void);
@@ -515,7 +515,7 @@ static void (* const sTurnActionsFuncsTable[])(void) =
HandleAction_SafariZoneBallThrow, // B_ACTION_SAFARI_BALL
HandleAction_ThrowPokeblock, // B_ACTION_SAFARI_POKEBLOCK
HandleAction_GoNear, // B_ACTION_SAFARI_GO_NEAR
- HandleAction_SafriZoneRun, // B_ACTION_SAFARI_RUN
+ HandleAction_SafariZoneRun, // B_ACTION_SAFARI_RUN
HandleAction_WallyBallThrow, // B_ACTION_WALLY_THROW
HandleAction_RunBattleScript, // B_ACTION_EXEC_SCRIPT
HandleAction_Action11, // not sure about this one
@@ -5783,7 +5783,7 @@ static void HandleAction_GoNear(void)
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
}
-static void HandleAction_SafriZoneRun(void)
+static void HandleAction_SafariZoneRun(void)
{
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
PlaySE(SE_NIGERU);
diff --git a/src/battle_message.c b/src/battle_message.c
index 44ea5d7d7..47c4cbe1d 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -1,25 +1,25 @@
#include "global.h"
#include "battle.h"
+#include "battle_controllers.h"
#include "battle_message.h"
-#include "constants/battle_string_ids.h"
-#include "constants/moves.h"
-#include "text.h"
-#include "string_util.h"
-#include "constants/items.h"
-#include "constants/trainers.h"
+#include "battle_setup.h"
+#include "battle_tower.h"
+#include "data2.h"
#include "event_data.h"
-#include "link.h"
+#include "frontier_util.h"
+#include "international_string_util.h"
#include "item.h"
-#include "window.h"
-#include "palette.h"
-#include "battle_controllers.h"
-#include "battle_setup.h"
+#include "link.h"
#include "menu.h"
+#include "palette.h"
#include "recorded_battle.h"
-#include "international_string_util.h"
-#include "frontier_util.h"
-#include "battle_tower.h"
-#include "data2.h"
+#include "string_util.h"
+#include "text.h"
+#include "window.h"
+#include "constants/battle_string_ids.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/trainers.h"
struct BattleWindowText
{
@@ -1367,7 +1367,8 @@ static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS,
static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
{
- { // 0
+// The corresponding WindowTemplate is gStandardBattleWindowTemplates[] within src/battle_bg.c
+ { // 0 Standard battle message
.fillValue = 0xFF,
.fontId = 1,
.x = 0,
@@ -1379,7 +1380,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 15,
.shadowColor = 6,
},
- { // 1
+ { // 1 "What will (pokemon) do?"
.fillValue = 0xFF,
.fontId = 1,
.x = 1,
@@ -1391,7 +1392,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 15,
.shadowColor = 6,
},
- { // 2
+ { // 2 "Fight/Pokemon/Bag/Run"
.fillValue = 0xEE,
.fontId = 1,
.x = 0,
@@ -1403,7 +1404,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 3
+ { // 3 Top left move
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1415,7 +1416,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 4
+ { // 4 Top right move
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1427,7 +1428,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 5
+ { // 5 Bottom left move
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1439,7 +1440,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 6
+ { // 6 Bottom right move
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1451,7 +1452,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 7
+ { // 7 "PP"
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1475,7 +1476,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 9
+ { // 9 PP remaining
.fillValue = 0xEE,
.fontId = 1,
.x = 2,
@@ -1487,7 +1488,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 11,
},
- { // 10
+ { // 10 "type"
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1499,7 +1500,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 11
+ { // 11 "switch which?"
.fillValue = 0xEE,
.fontId = 7,
.x = 0,
@@ -1511,7 +1512,7 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.bgColor = 14,
.shadowColor = 15,
},
- { // 12
+ { // 12 "gText_BattleYesNoChoice"
.fillValue = 0xEE,
.fontId = 1,
.x = 0,
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index dabaf20d0..29176db7a 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -29,7 +29,7 @@
#include "constants/maps.h"
#include "constants/moves.h"
-extern u8 gUnknown_0203CEF8[3];
+extern u8 gSelectedOrderFromParty[3];
extern void door_upload_tiles(void);
extern const struct MapLayout *const gMapLayouts[];
@@ -508,14 +508,14 @@ static void sub_81A9834(void)
SetMonMoveSlot(&gPlayerParty[j], MOVE_SKETCH, k);
}
gSaveBlock1Ptr->playerParty[id] = gPlayerParty[j];
- gUnknown_0203CEF8[j] = id + 1;
+ gSelectedOrderFromParty[j] = id + 1;
break;
}
}
}
for (i = 0; i < 3; i++)
- gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i];
+ gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
}
static u8 sub_81A9998(s32 *arg0, u8 arg1, u8 arg2)
diff --git a/src/berry.c b/src/berry.c
index 7cd28d69f..9f08165b8 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -1,10 +1,13 @@
#include "global.h"
#include "berry.h"
#include "event_data.h"
+#include "field_control_avatar.h"
#include "fieldmap.h"
#include "item.h"
+#include "item_menu.h"
#include "main.h"
#include "random.h"
+#include "string_util.h"
#include "text.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
@@ -12,11 +15,8 @@
extern u8 EventObjectGetBerryTreeId(u8 eventObjectId);
extern void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
extern void CB2_ChooseBerry(void);
-extern const u8* GetEventObjectScriptPointerPlayerFacing(void);
extern bool8 IsBerryTreeSparkling(u8, u8, u8);
-extern u16 gSpecialVar_ItemId;
-
extern const u8 BerryTreeScript[];
static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
diff --git a/src/bg.c b/src/bg.c
index 7c55410b1..a41075ad7 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -135,22 +135,22 @@ u16 GetBgControlAttribute(u8 bg, u8 attributeId)
{
switch (attributeId)
{
- case BG_CTRL_ATTR_VISIBLE:
- return sGpuBgConfigs.configs[bg].visible;
- case BG_CTRL_ATTR_CHARBASEINDEX:
- return sGpuBgConfigs.configs[bg].charBaseIndex;
- case BG_CTRL_ATTR_MAPBASEINDEX:
- return sGpuBgConfigs.configs[bg].mapBaseIndex;
- case BG_CTRL_ATTR_SCREENSIZE:
- return sGpuBgConfigs.configs[bg].screenSize;
- case BG_CTRL_ATTR_PALETTEMODE:
- return sGpuBgConfigs.configs[bg].paletteMode;
- case BG_CTRL_ATTR_PRIORITY:
- return sGpuBgConfigs.configs[bg].priority;
- case BG_CTRL_ATTR_MOSAIC:
- return sGpuBgConfigs.configs[bg].mosaic;
- case BG_CTRL_ATTR_WRAPAROUND:
- return sGpuBgConfigs.configs[bg].wraparound;
+ case BG_CTRL_ATTR_VISIBLE:
+ return sGpuBgConfigs.configs[bg].visible;
+ case BG_CTRL_ATTR_CHARBASEINDEX:
+ return sGpuBgConfigs.configs[bg].charBaseIndex;
+ case BG_CTRL_ATTR_MAPBASEINDEX:
+ return sGpuBgConfigs.configs[bg].mapBaseIndex;
+ case BG_CTRL_ATTR_SCREENSIZE:
+ return sGpuBgConfigs.configs[bg].screenSize;
+ case BG_CTRL_ATTR_PALETTEMODE:
+ return sGpuBgConfigs.configs[bg].paletteMode;
+ case BG_CTRL_ATTR_PRIORITY:
+ return sGpuBgConfigs.configs[bg].priority;
+ case BG_CTRL_ATTR_MOSAIC:
+ return sGpuBgConfigs.configs[bg].mosaic;
+ case BG_CTRL_ATTR_WRAPAROUND:
+ return sGpuBgConfigs.configs[bg].wraparound;
}
}
@@ -166,15 +166,15 @@ u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode)
{
switch (mode)
{
- case 0x1:
- offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE;
- break;
- case 0x2:
- offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE;
- break;
- default:
- cursor = -1;
- goto end;
+ case 0x1:
+ offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE;
+ break;
+ case 0x2:
+ offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE;
+ break;
+ default:
+ cursor = -1;
+ goto end;
}
offset = destOffset + offset;
@@ -241,17 +241,17 @@ static void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispC
switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7)
{
- case 1:
- if (bg != 2)
- return;
- break;
- case 2:
- if (bg < 2 || bg > 3)
- return;
- break;
- case 0:
- default:
+ case 1:
+ if (bg != 2)
+ return;
+ break;
+ case 2:
+ if (bg < 2 || bg > 3)
return;
+ break;
+ case 0:
+ default:
+ return;
}
src.texX = srcCenterX;
@@ -279,7 +279,8 @@ bool8 IsInvalidBg(u8 bg)
{
if (bg > 3)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4)
@@ -434,7 +435,6 @@ u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset)
return (u8)cursor;
}
-#ifdef NONMATCHING // Matches everything but r5 and r6 are flipped, rrr
bool8 IsDma3ManagerBusyWithBgCopy(void)
{
u8 mod;
@@ -462,60 +462,6 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
return FALSE;
}
-#else
-NAKED
-bool8 IsDma3ManagerBusyWithBgCopy(void)
-{
- asm("push {r4-r7,lr}\n\
- mov r5, #0\n\
- mov r7, #0x1\n\
- neg r7, r7\n\
-_08001ADC:\n\
- add r0, r5, #0\n\
- cmp r5, #0\n\
- bge _08001AE4\n\
- add r0, #0x1F\n\
-_08001AE4:\n\
- asr r0, #5\n\
- lsl r2, r0, #24\n\
- lsl r0, #5\n\
- sub r0, r5, r0\n\
- lsl r0, #24\n\
- lsr r0, #24\n\
- ldr r1, =sDmaBusyBitfield\n\
- lsr r2, #22\n\
- add r4, r2, r1\n\
- mov r6, #0x1\n\
- lsl r6, r0\n\
- ldr r0, [r4]\n\
- and r0, r6\n\
- cmp r0, #0\n\
- beq _08001B22\n\
- lsl r0, r5, #16\n\
- asr r0, #16\n\
- bl CheckForSpaceForDma3Request\n\
- lsl r0, #24\n\
- asr r0, #24\n\
- cmp r0, r7\n\
- bne _08001B1C\n\
- mov r0, #0x1\n\
- b _08001B2A\n\
- .pool\n\
-_08001B1C:\n\
- ldr r0, [r4]\n\
- bic r0, r6\n\
- str r0, [r4]\n\
-_08001B22:\n\
- add r5, #0x1\n\
- cmp r5, #0x7F\n\
- ble _08001ADC\n\
- mov r0, #0\n\
-_08001B2A:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n");
-}
-#endif // NONMATCHING
void ShowBg(u8 bg)
{
@@ -533,27 +479,27 @@ void SetBgAttribute(u8 bg, u8 attributeId, u8 value)
{
switch (attributeId)
{
- case 1:
- SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case 2:
- SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case 3:
- SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case 4:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF);
- break;
- case 7:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF);
- break;
- case 5:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF);
- break;
- case 6:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value);
- break;
+ case 1:
+ SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
+ break;
+ case 2:
+ SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
+ break;
+ case 3:
+ SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF);
+ break;
+ case 4:
+ SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF);
+ break;
+ case 7:
+ SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF);
+ break;
+ case 5:
+ SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF);
+ break;
+ case 6:
+ SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value);
+ break;
}
}
@@ -561,36 +507,36 @@ u16 GetBgAttribute(u8 bg, u8 attributeId)
{
switch (attributeId)
{
- case 1:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX);
- case 2:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX);
- case 3:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- case 4:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE);
- case 7:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY);
- case 5:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC);
- case 6:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND);
- case 8:
- switch (GetBgType(bg))
- {
- case 0:
- return GetBgMetricTextMode(bg, 0) * 0x800;
- case 1:
- return GetBgMetricAffineMode(bg, 0) * 0x100;
- default:
- return 0;
- }
- case 9:
- return GetBgType(bg);
- case 10:
- return sGpuBgConfigs2[bg].baseTile;
- default:
- return -1;
+ case 1:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX);
+ case 2:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX);
+ case 3:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
+ case 4:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE);
+ case 7:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY);
+ case 5:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC);
+ case 6:
+ return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND);
+ case 8:
+ switch (GetBgType(bg))
+ {
+ case 0:
+ return GetBgMetricTextMode(bg, 0) * 0x800;
+ case 1:
+ return GetBgMetricAffineMode(bg, 0) * 0x100;
+ default:
+ return 0;
+ }
+ case 9:
+ return GetBgType(bg);
+ case 10:
+ return sGpuBgConfigs2[bg].baseTile;
+ default:
+ return -1;
}
}
@@ -607,58 +553,58 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
switch (op)
{
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_x = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_x += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_x -= value;
- break;
+ case 0:
+ default:
+ sGpuBgConfigs2[bg].bg_x = value;
+ break;
+ case 1:
+ sGpuBgConfigs2[bg].bg_x += value;
+ break;
+ case 2:
+ sGpuBgConfigs2[bg].bg_x -= value;
+ break;
}
mode = GetBgMode();
switch (bg)
{
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG2X_H, temp1);
- SetGpuReg(REG_OFFSET_BG2X_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG3X_H, temp1);
- SetGpuReg(REG_OFFSET_BG3X_L, temp2);
- }
- break;
+ case 0:
+ temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
+ SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
+ break;
+ case 1:
+ temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
+ SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
+ break;
+ case 2:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
+ SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
+ }
+ else
+ {
+ temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
+ temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
+ SetGpuReg(REG_OFFSET_BG2X_H, temp1);
+ SetGpuReg(REG_OFFSET_BG2X_L, temp2);
+ }
+ break;
+ case 3:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
+ SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
+ }
+ else if (mode == 2)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
+ temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
+ SetGpuReg(REG_OFFSET_BG3X_H, temp1);
+ SetGpuReg(REG_OFFSET_BG3X_L, temp2);
+ }
+ break;
}
return sGpuBgConfigs2[bg].bg_x;
@@ -668,9 +614,10 @@ u32 GetBgX(u8 bg)
{
if (IsInvalidBg32(bg) != FALSE)
return -1;
- if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
return -1;
- return sGpuBgConfigs2[bg].bg_x;
+ else
+ return sGpuBgConfigs2[bg].bg_x;
}
u32 ChangeBgY(u8 bg, u32 value, u8 op)
@@ -686,58 +633,58 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
switch (op)
{
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_y = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_y += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_y -= value;
- break;
+ case 0:
+ default:
+ sGpuBgConfigs2[bg].bg_y = value;
+ break;
+ case 1:
+ sGpuBgConfigs2[bg].bg_y += value;
+ break;
+ case 2:
+ sGpuBgConfigs2[bg].bg_y -= value;
+ break;
}
mode = GetBgMode();
switch (bg)
{
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
- SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
- SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
- }
- break;
+ case 0:
+ temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
+ SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
+ break;
+ case 1:
+ temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
+ SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
+ break;
+ case 2:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
+ SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
+ }
+ else
+ {
+ temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
+ temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
+ SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
+ SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
+ }
+ break;
+ case 3:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
+ SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
+ }
+ else if (mode == 2)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
+ temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
+ SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
+ SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
+ }
+ break;
}
return sGpuBgConfigs2[bg].bg_y;
@@ -756,59 +703,59 @@ u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
switch (op)
{
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_y = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_y += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_y -= value;
- break;
+ case 0:
+ default:
+ sGpuBgConfigs2[bg].bg_y = value;
+ break;
+ case 1:
+ sGpuBgConfigs2[bg].bg_y += value;
+ break;
+ case 2:
+ sGpuBgConfigs2[bg].bg_y -= value;
+ break;
}
mode = GetBgMode();
switch (bg)
{
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG1VOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1);
+ case 0:
+ temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, temp1);
+ break;
+ case 1:
+ temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG1VOFS, temp1);
+ break;
+ case 2:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1);
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_H, temp1);
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3VOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_H, temp1);
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_L, temp2);
- }
- break;
+ }
+ else
+ {
+ temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
+ temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_H, temp1);
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_L, temp2);
+ }
+ break;
+ case 3:
+ if (mode == 0)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG3VOFS, temp1);
+ }
+ else if (mode == 2)
+ {
+ temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
+ temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_H, temp1);
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_L, temp2);
+ }
+ break;
}
return sGpuBgConfigs2[bg].bg_y;
@@ -818,9 +765,10 @@ u32 GetBgY(u8 bg)
{
if (IsInvalidBg32(bg) != FALSE)
return -1;
- if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
return -1;
- return sGpuBgConfigs2[bg].bg_y;
+ else
+ return sGpuBgConfigs2[bg].bg_y;
}
void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle)
@@ -842,57 +790,57 @@ u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
switch (a2)
{
- case 0:
- default:
- test1 = a1 & 0xF;
- test2 = a1 >> 0x4;
- break;
- case 1:
- test1 = a1 & 0xF;
- break;
- case 2:
- if ((test1 + a1) > 0xF)
- {
- test1 = 0xF;
- }
- else
- {
- test1 += a1;
- }
- break;
- case 3:
- if ((test1 - a1) < 0)
- {
- test1 = 0x0;
- }
- else
- {
- test1 -= a1;
- }
- break;
- case 4:
- test2 = a1 & 0xF;
- break;
- case 5:
- if ((test2 + a1) > 0xF)
- {
- test2 = 0xF;
- }
- else
- {
- test2 += a1;
- }
- break;
- case 6:
- if ((test2 - a1) < 0)
- {
- test2 = 0x0;
- }
- else
- {
- test2 -= a1;
- }
- break;
+ case 0:
+ default:
+ test1 = a1 & 0xF;
+ test2 = a1 >> 0x4;
+ break;
+ case 1:
+ test1 = a1 & 0xF;
+ break;
+ case 2:
+ if ((test1 + a1) > 0xF)
+ {
+ test1 = 0xF;
+ }
+ else
+ {
+ test1 += a1;
+ }
+ break;
+ case 3:
+ if ((test1 - a1) < 0)
+ {
+ test1 = 0x0;
+ }
+ else
+ {
+ test1 -= a1;
+ }
+ break;
+ case 4:
+ test2 = a1 & 0xF;
+ break;
+ case 5:
+ if ((test2 + a1) > 0xF)
+ {
+ test2 = 0xF;
+ }
+ else
+ {
+ test2 += a1;
+ }
+ break;
+ case 6:
+ if ((test2 - a1) < 0)
+ {
+ test2 = 0x0;
+ }
+ else
+ {
+ test2 -= a1;
+ }
+ break;
}
result |= ((test2 << 0x4) & 0xF0);
@@ -923,9 +871,10 @@ void* GetBgTilemapBuffer(u8 bg)
{
if (IsInvalidBg32(bg) != FALSE)
return NULL;
- if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
+ else if (GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE) == 0)
return NULL;
- return sGpuBgConfigs2[bg].tilemap;
+ else
+ return sGpuBgConfigs2[bg].tilemap;
}
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset)
@@ -933,13 +882,9 @@ void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset)
if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
{
if (mode != 0)
- {
CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode);
- }
else
- {
LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)));
- }
}
}
@@ -951,15 +896,15 @@ void CopyBgTilemapBufferToVram(u8 bg)
{
switch (GetBgType(bg))
{
- case 0:
- sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800;
- break;
- case 1:
- sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100;
- break;
- default:
- sizeToLoad = 0;
- break;
+ case 0:
+ sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800;
+ break;
+ case 1:
+ sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100;
+ break;
+ default:
+ sizeToLoad = 0;
+ break;
}
LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2);
}
@@ -976,27 +921,27 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi
{
switch (GetBgType(bg))
{
- case 0:
- srcCopy = src;
- for (destY16 = destY; destY16 < (destY + height); destY16++)
+ case 0:
+ srcCopy = src;
+ for (destY16 = destY; destY16 < (destY + height); destY16++)
+ {
+ for (destX16 = destX; destX16 < (destX + width); destX16++)
{
- for (destX16 = destX; destX16 < (destX + width); destX16++)
- {
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++;
- }
+ ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++;
}
- break;
- case 1:
- srcCopy = src;
- mode = GetBgMetricAffineMode(bg, 0x1);
- for (destY16 = destY; destY16 < (destY + height); destY16++)
+ }
+ break;
+ case 1:
+ srcCopy = src;
+ mode = GetBgMetricAffineMode(bg, 0x1);
+ for (destY16 = destY; destY16 < (destY + height); destY16++)
+ {
+ for (destX16 = destX; destX16 < (destX + width); destX16++)
{
- for (destX16 = destX; destX16 < (destX + width); destX16++)
- {
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++;
- }
+ ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++;
}
- break;
+ }
+ break;
}
}
}
@@ -1005,295 +950,49 @@ void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u
{
CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0);
}
-// Skipping for now, it probably uses structs passed by value
-/*
-void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
-{
- u16 attribute;
- u16 mode;
- u16 mode2;
- void* srcCopy;
- u16 destX16;
- u16 destY16;
+void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset)
+{
+ u16 screenWidth, screenHeight, screenSize;
+ u16 var;
+ const void *srcPtr;
+ u16 i, j;
- if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE)
+ if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
{
- attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- mode = GetBgMetricTextMode(bg, 0x1) * 0x20;
- mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20;
+ screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
+ screenWidth = GetBgMetricTextMode(bg, 0x1) * 0x20;
+ screenHeight = GetBgMetricTextMode(bg, 0x2) * 0x20;
switch (GetBgType(bg))
{
- case 0:
- srcCopy = src;
- for (destY16 = destY; destY16 < (destY + rectHeight); destY16++)
+ case 0:
+ srcPtr = src + ((srcY * srcWidth) + srcX) * 2;
+ for (i = destX; i < (destX + rectWidth); i++)
+ {
+ for (j = srcHeight; j < (srcHeight + destY); j++)
{
- for (destX16 = destX; destX16 < (destX + rectWidth); destX16++)
- {
- CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2);
- }
+ u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight);
+ CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), rectHeight, palette1, tileOffset);
+ srcPtr += 2;
}
- break;
- case 1:
- srcCopy = src;
- mode = GetBgMetricAffineMode(bg, 0x1);
- for (destY16 = destY; destY16 < (destY + rectHeight); destY16++)
+ srcPtr += (srcWidth - destY) * 2;
+ }
+ break;
+ case 1:
+ srcPtr = src + ((srcY * srcWidth) + srcX);
+ var = GetBgMetricAffineMode(bg, 0x1);
+ for (i = destX; i < (destX + rectWidth); i++)
+ {
+ for (j = srcHeight; j < (srcHeight + destY); j++)
{
- for (destX16 = destX; destX16 < (destX + rectWidth); destX16++)
- {
- CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2);
- }
+ *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + palette1;
+ srcPtr++;
}
- break;
+ srcPtr += (srcWidth - destY);
+ }
+ break;
}
}
-}*/
-NAKED
-void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2)
-{
- asm("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, #0x40\n\
- str r1, [sp, #0x8]\n\
- ldr r1, [sp, #0x60]\n\
- ldr r4, [sp, #0x68]\n\
- ldr r5, [sp, #0x6C]\n\
- ldr r6, [sp, #0x70]\n\
- ldr r7, [sp, #0x74]\n\
- mov r8, r7\n\
- ldr r7, [sp, #0x78]\n\
- mov r9, r7\n\
- ldr r7, [sp, #0x7C]\n\
- mov r10, r7\n\
- ldr r7, [sp, #0x80]\n\
- mov r12, r7\n\
- lsl r0, #24\n\
- lsr r0, #24\n\
- str r0, [sp, #0x4]\n\
- lsl r2, #24\n\
- lsr r2, #24\n\
- str r2, [sp, #0xC]\n\
- lsl r3, #24\n\
- lsr r3, #24\n\
- str r3, [sp, #0x10]\n\
- lsl r1, #24\n\
- lsr r7, r1, #24\n\
- lsl r4, #24\n\
- lsr r4, #24\n\
- str r4, [sp, #0x14]\n\
- lsl r5, #24\n\
- lsr r5, #24\n\
- lsl r6, #24\n\
- lsr r6, #24\n\
- str r6, [sp, #0x18]\n\
- mov r0, r8\n\
- lsl r0, #24\n\
- lsr r4, r0, #24\n\
- mov r1, r9\n\
- lsl r1, #24\n\
- lsr r1, #24\n\
- str r1, [sp, #0x1C]\n\
- mov r2, r10\n\
- lsl r2, #16\n\
- lsr r2, #16\n\
- str r2, [sp, #0x20]\n\
- mov r0, r12\n\
- lsl r0, #16\n\
- lsr r0, #16\n\
- str r0, [sp, #0x24]\n\
- ldr r0, [sp, #0x4]\n\
- bl IsInvalidBg32\n\
- cmp r0, #0\n\
- beq _08002592\n\
- b _080026EE\n\
-_08002592:\n\
- ldr r0, [sp, #0x4]\n\
- bl IsTileMapOutsideWram\n\
- cmp r0, #0\n\
- beq _0800259E\n\
- b _080026EE\n\
-_0800259E:\n\
- ldr r0, [sp, #0x4]\n\
- mov r1, #0x4\n\
- bl GetBgControlAttribute\n\
- lsl r0, #16\n\
- lsr r0, #16\n\
- str r0, [sp, #0x30]\n\
- ldr r0, [sp, #0x4]\n\
- mov r1, #0x1\n\
- bl GetBgMetricTextMode\n\
- lsl r0, #21\n\
- lsr r0, #16\n\
- str r0, [sp, #0x28]\n\
- ldr r0, [sp, #0x4]\n\
- mov r1, #0x2\n\
- bl GetBgMetricTextMode\n\
- lsl r0, #21\n\
- lsr r0, #16\n\
- str r0, [sp, #0x2C]\n\
- ldr r0, [sp, #0x4]\n\
- bl GetBgType\n\
- cmp r0, #0\n\
- beq _080025D8\n\
- cmp r0, #0x1\n\
- beq _08002674\n\
- b _080026EE\n\
-_080025D8:\n\
- ldr r1, [sp, #0x10]\n\
- add r0, r1, #0\n\
- mul r0, r7\n\
- ldr r2, [sp, #0xC]\n\
- add r0, r2\n\
- lsl r0, #1\n\
- ldr r1, [sp, #0x8]\n\
- add r6, r1, r0\n\
- add r0, r5, r4\n\
- cmp r5, r0\n\
- blt _080025F0\n\
- b _080026EE\n\
-_080025F0:\n\
- ldr r2, [sp, #0x18]\n\
- sub r2, r7, r2\n\
- str r2, [sp, #0x34]\n\
- str r0, [sp, #0x38]\n\
-_080025F8:\n\
- ldr r4, [sp, #0x14]\n\
- ldr r7, [sp, #0x18]\n\
- add r0, r4, r7\n\
- add r1, r5, #0x1\n\
- str r1, [sp, #0x3C]\n\
- cmp r4, r0\n\
- bge _0800265A\n\
- ldr r2, [sp, #0x4]\n\
- lsl r0, r2, #4\n\
- ldr r1, =sGpuBgConfigs2+4\n\
- add r0, r1\n\
- mov r10, r0\n\
- ldr r7, [sp, #0x20]\n\
- lsl r7, #16\n\
- mov r9, r7\n\
- ldr r1, [sp, #0x24]\n\
- lsl r0, r1, #16\n\
- asr r0, #16\n\
- mov r8, r0\n\
-_0800261E:\n\
- ldr r2, [sp, #0x2C]\n\
- str r2, [sp]\n\
- add r0, r4, #0\n\
- add r1, r5, #0\n\
- ldr r2, [sp, #0x30]\n\
- ldr r3, [sp, #0x28]\n\
- bl GetTileMapIndexFromCoords\n\
- lsl r0, #16\n\
- lsr r0, #15\n\
- mov r7, r10\n\
- ldr r1, [r7]\n\
- add r1, r0\n\
- mov r0, r8\n\
- str r0, [sp]\n\
- add r0, r6, #0\n\
- ldr r2, [sp, #0x1C]\n\
- mov r7, r9\n\
- asr r3, r7, #16\n\
- bl CopyTileMapEntry\n\
- add r6, #0x2\n\
- add r0, r4, #0x1\n\
- lsl r0, #16\n\
- lsr r4, r0, #16\n\
- ldr r1, [sp, #0x14]\n\
- ldr r2, [sp, #0x18]\n\
- add r0, r1, r2\n\
- cmp r4, r0\n\
- blt _0800261E\n\
-_0800265A:\n\
- ldr r5, [sp, #0x34]\n\
- lsl r0, r5, #1\n\
- add r6, r0\n\
- ldr r7, [sp, #0x3C]\n\
- lsl r0, r7, #16\n\
- lsr r5, r0, #16\n\
- ldr r0, [sp, #0x38]\n\
- cmp r5, r0\n\
- blt _080025F8\n\
- b _080026EE\n\
- .pool\n\
-_08002674:\n\
- ldr r1, [sp, #0x10]\n\
- add r0, r1, #0\n\
- mul r0, r7\n\
- ldr r2, [sp, #0xC]\n\
- add r0, r2\n\
- ldr r1, [sp, #0x8]\n\
- add r6, r1, r0\n\
- ldr r0, [sp, #0x4]\n\
- mov r1, #0x1\n\
- bl GetBgMetricAffineMode\n\
- lsl r0, #16\n\
- lsr r0, #16\n\
- mov r9, r0\n\
- add r0, r5, r4\n\
- cmp r5, r0\n\
- bge _080026EE\n\
- ldr r2, [sp, #0x18]\n\
- sub r2, r7, r2\n\
- str r2, [sp, #0x34]\n\
- str r0, [sp, #0x38]\n\
- ldr r7, =sGpuBgConfigs2+4\n\
- mov r10, r7\n\
- ldr r0, [sp, #0x4]\n\
- lsl r0, #4\n\
- mov r8, r0\n\
-_080026A8:\n\
- ldr r4, [sp, #0x14]\n\
- ldr r1, [sp, #0x18]\n\
- add r0, r4, r1\n\
- add r2, r5, #0x1\n\
- str r2, [sp, #0x3C]\n\
- cmp r4, r0\n\
- bge _080026DE\n\
- mov r3, r8\n\
- add r3, r10\n\
- mov r7, r9\n\
- mul r7, r5\n\
- mov r12, r7\n\
- add r2, r0, #0\n\
-_080026C2:\n\
- ldr r1, [r3]\n\
- mov r5, r12\n\
- add r0, r5, r4\n\
- add r1, r0\n\
- ldrb r0, [r6]\n\
- ldr r7, [sp, #0x20]\n\
- add r0, r7\n\
- strb r0, [r1]\n\
- add r6, #0x1\n\
- add r0, r4, #0x1\n\
- lsl r0, #16\n\
- lsr r4, r0, #16\n\
- cmp r4, r2\n\
- blt _080026C2\n\
-_080026DE:\n\
- ldr r0, [sp, #0x34]\n\
- add r6, r0\n\
- ldr r1, [sp, #0x3C]\n\
- lsl r0, r1, #16\n\
- lsr r5, r0, #16\n\
- ldr r2, [sp, #0x38]\n\
- cmp r5, r2\n\
- blt _080026A8\n\
-_080026EE:\n\
- add sp, #0x40\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n");
}
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height)
@@ -1384,42 +1083,42 @@ u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
switch (whichMetric)
{
+ case 0:
+ switch (attribute)
+ {
case 0:
- switch (attribute)
- {
- case 0:
- return 1;
- case 1:
- case 2:
- return 2;
- case 3:
- return 4;
- }
- break;
+ return 1;
case 1:
- switch (attribute)
- {
- case 0:
- return 1;
- case 1:
- return 2;
- case 2:
- return 1;
- case 3:
- return 2;
- }
- break;
case 2:
- switch (attribute)
- {
- case 0:
- case 1:
- return 1;
- case 2:
- case 3:
- return 2;
- }
- break;
+ return 2;
+ case 3:
+ return 4;
+ }
+ break;
+ case 1:
+ switch (attribute)
+ {
+ case 0:
+ return 1;
+ case 1:
+ return 2;
+ case 2:
+ return 1;
+ case 3:
+ return 2;
+ }
+ break;
+ case 2:
+ switch (attribute)
+ {
+ case 0:
+ case 1:
+ return 1;
+ case 2:
+ case 3:
+ return 2;
+ }
+ break;
}
return 0;
}
@@ -1432,22 +1131,22 @@ u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
switch (whichMetric)
{
+ case 0:
+ switch (attribute)
+ {
case 0:
- switch (attribute)
- {
- case 0:
- return 0x1;
- case 1:
- return 0x4;
- case 2:
- return 0x10;
- case 3:
- return 0x40;
- }
- break;
+ return 0x1;
case 1:
+ return 0x4;
case 2:
- return 0x10 << attribute;
+ return 0x10;
+ case 3:
+ return 0x40;
+ }
+ break;
+ case 1:
+ case 2:
+ return 0x10 << attribute;
}
return 0;
}
@@ -1459,44 +1158,45 @@ u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32
switch (screenSize)
{
- case 0:
- case 2:
- break;
- case 3:
- if (y >= 0x20)
- y += 0x20;
- case 1:
- if (x >= 0x20)
- {
- x -= 0x20;
- y += 0x20;
- }
+ case 0:
+ case 2:
+ break;
+ case 3:
+ if (y >= 0x20)
+ y += 0x20;
+ case 1:
+ if (x >= 0x20)
+ {
+ x -= 0x20;
+ y += 0x20;
+ }
+ break;
}
return (y * 0x20) + x;
}
#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate
-void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2)
+void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
{
- u16 test;
+ u16 var;
switch (palette1)
{
- default:
- if (palette1 > 0x10 || palette1 < 0)
- test = *src + tileOffset + (palette2 << 12);
- else
- test = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
- break;
- case 0x10:
- test = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
- break;
+ case 0 ... 16:
+ if (palette1 != 16)
+ var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
+ else
+ var = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
+ break;
+ default:
+ var = *src + tileOffset + (palette2 << 12);
+ break;
}
- *dest = test;
+ *dest = var;
}
#else
NAKED
-void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2)
+void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
{
asm("push {r4-r6,lr}\n\
add r4, r0, #0\n\
@@ -1550,41 +1250,38 @@ _08002B3C:\n\
u32 GetBgType(u8 bg)
{
- u8 mode;
-
- mode = GetBgMode();
-
+ u8 mode = GetBgMode();
switch (bg)
{
+ case 0:
+ case 1:
+ switch (mode)
+ {
case 0:
case 1:
- switch (mode)
- {
- case 0:
- case 1:
- return 0;
- }
- break;
+ return 0;
+ }
+ break;
+ case 2:
+ switch (mode)
+ {
+ case 0:
+ return 0;
+ case 1:
case 2:
- switch (mode)
- {
- case 0:
- return 0;
- case 1:
- case 2:
- return 1;
- }
- break;
- case 3:
- switch (mode)
- {
- case 0:
- return 0;
- case 2:
- return 1;
- }
- break;
+ return 1;
+ }
+ break;
+ case 3:
+ switch (mode)
+ {
+ case 0:
+ return 0;
+ case 2:
+ return 1;
+ }
+ break;
}
return 0xFFFF;
@@ -1594,14 +1291,16 @@ bool32 IsInvalidBg32(u8 bg)
{
if (bg > 3)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
bool32 IsTileMapOutsideWram(u8 bg)
{
if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END)
return TRUE;
- if (sGpuBgConfigs2[bg].tilemap == 0x0)
+ else if (sGpuBgConfigs2[bg].tilemap == NULL)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
diff --git a/src/bug.c b/src/bug.c
index a14ec2226..59b31b37d 100644
--- a/src/bug.c
+++ b/src/bug.c
@@ -1,15 +1,22 @@
#include "global.h"
#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "trig.h"
#include "constants/rgb.h"
-extern void sub_8110368(struct Sprite *);
-extern void sub_8110438(struct Sprite *);
-extern void sub_81104E4(struct Sprite *);
-extern void sub_81105B4(struct Sprite *);
-extern void sub_811067C(struct Sprite *);
-extern void sub_8110720(struct Sprite *);
-extern void sub_8110850(struct Sprite *);
-extern void sub_8110994(struct Sprite *);
+void sub_8110368(struct Sprite *);
+void sub_8110438(struct Sprite *);
+void sub_81104E4(struct Sprite *);
+void sub_81105B4(struct Sprite *);
+void sub_811067C(struct Sprite *);
+void AnimTranslateStinger(struct Sprite *);
+void AnimMissileArc(struct Sprite *);
+void sub_8110994(struct Sprite *);
+static void sub_811057C(struct Sprite *);
+static void sub_8110630(struct Sprite *);
+static void sub_81106A4(struct Sprite *);
+static void sub_8110700(struct Sprite *);
+static void AnimMissileArcStep(struct Sprite *);
const union AffineAnimCmd gUnknown_08596938[] =
{
@@ -136,7 +143,7 @@ const struct SpriteTemplate gLinearStingerSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8110720,
+ .callback = AnimTranslateStinger,
};
const struct SpriteTemplate gPinMissileSpriteTemplate =
@@ -147,7 +154,7 @@ const struct SpriteTemplate gPinMissileSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8110850,
+ .callback = AnimMissileArc,
};
const struct SpriteTemplate gIcicleSpearSpriteTemplate =
@@ -158,7 +165,7 @@ const struct SpriteTemplate gIcicleSpearSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8110850,
+ .callback = AnimMissileArc,
};
const union AffineAnimCmd gUnknown_08596A8C[] =
@@ -187,3 +194,291 @@ const struct SpriteTemplate gUnknown_08596AC8 =
.affineAnims = gUnknown_08596AC4,
.callback = sub_8110994,
};
+
+void sub_8110368(struct Sprite *sprite)
+{
+ if (IsContest())
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+ else if (!GetBattlerSide(gBattleAnimTarget))
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8110438(struct Sprite *sprite)
+{
+ if (IsContest())
+ {
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ StartSpriteAffineAnim(sprite, 2);
+ }
+ else if (!GetBattlerSide(gBattleAnimTarget))
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_81104E4(struct Sprite *sprite)
+{
+ if (IsContest())
+ gBattleAnimArgs[2] /= 2;
+
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+
+ if (!gBattleAnimArgs[4])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
+ }
+
+ sub_80A6FD4(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_811057C;
+}
+
+static void sub_811057C(struct Sprite *sprite)
+{
+ if (TranslateAnimLinear(sprite))
+ {
+ DestroyAnimSprite(sprite);
+ return;
+ }
+
+ sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]);
+ sprite->data[6] = (sprite->data[6] + 13) & 0xFF;
+}
+
+void sub_81105B4(struct Sprite *sprite)
+{
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+ if (GetBattlerSide(gBattleAnimAttacker))
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ if (!GetBattlerSide(gBattleAnimTarget))
+ sprite->pos1.y += 8;
+
+ sprite->callback = sub_8110630;
+}
+
+static void sub_8110630(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 3)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible ^= 1;
+ }
+
+ if (++sprite->data[1] == 51)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_811067C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+
+ sprite->data[0] = 16;
+ sprite->callback = sub_81106A4;
+}
+
+static void sub_81106A4(struct Sprite *sprite)
+{
+ if (sprite->data[2] < 20)
+ {
+ sprite->data[2]++;
+ }
+ else if (sprite->data[1]++ & 1)
+ {
+ sprite->data[0]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+
+ if (sprite->data[0] == 0)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = sub_8110700;
+ }
+ }
+}
+
+static void sub_8110700(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+// Translates a stinger sprite linearly to a destination location. The sprite is
+// initially rotated so that it appears to be traveling in a straight line.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimTranslateStinger(struct Sprite *sprite)
+{
+ s16 lVarX, lVarY;
+ u16 rot;
+
+ if (IsContest())
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker))
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+ }
+
+ if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
+ {
+ if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
+ || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
+ {
+ s16 temp1, temp2;
+
+ temp1 = gBattleAnimArgs[2];
+ gBattleAnimArgs[2] = -temp1;
+
+ temp2 = gBattleAnimArgs[0];
+ gBattleAnimArgs[0] = -temp2;
+ }
+ }
+
+ InitAnimSpritePos(sprite, 1);
+
+ lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y);
+ rot += 0xC000;
+ sub_80A73E0(sprite, FALSE, 0x100, 0x100, rot);
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = lVarX;
+ sprite->data[4] = lVarY;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+// arg 5: wave amplitude
+void AnimMissileArc(struct Sprite *sprite)
+{
+ InitAnimSpritePos(sprite, 1);
+
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = AnimMissileArcStep;
+ sprite->invisible = TRUE;
+}
+
+static void AnimMissileArcStep(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+
+ if (TranslateAnimArc(sprite))
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ s16 tempData[8];
+ u16 *data = sprite->data;
+ u16 x1 = sprite->pos1.x;
+ s16 x2 = sprite->pos2.x;
+ u16 y1 = sprite->pos1.y;
+ s16 y2 = sprite->pos2.y;
+ int i;
+
+ for (i = 0; i < 8; i++)
+ tempData[i] = data[i];
+
+ x2 += x1;
+ y2 += y1;
+
+ if (!TranslateAnimArc(sprite))
+ {
+ u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
+ sprite->pos1.y + sprite->pos2.y - y2);
+ rotation += 0xC000;
+ sub_80A73E0(sprite, FALSE, 0x100, 0x100, rotation);
+
+ for (i = 0; i < 8; i++)
+ data[i] = tempData[i];
+ }
+ }
+}
+
+void sub_8110994(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
+ }
+
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A67BC;
+}
diff --git a/src/cable_club.c b/src/cable_club.c
index b0e5f0500..56154d5bf 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -31,7 +31,7 @@
#include "constants/songs.h"
extern u8 gUnknown_02032298[2];
-extern u8 gUnknown_0203CEF8[];
+extern u8 gSelectedOrderFromParty[];
static const struct WindowTemplate gUnknown_08550594 = {
.bg = 0,
@@ -358,8 +358,8 @@ static void sub_80B2918(u8 taskId)
sub_800AA04(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
TrainerCard_GenerateCardForPlayer(card);
- card->monSpecies[0] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[0] - 1], MON_DATA_SPECIES, NULL);
- card->monSpecies[1] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[1] - 1], MON_DATA_SPECIES, NULL);
+ card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
+ card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = sub_80B2C30;
}
}
@@ -405,8 +405,8 @@ static void sub_80B2A08(u8 taskId)
sub_800AA04(gFieldLinkPlayerCount);
card = (struct TrainerCard *)gBlockSendBuffer;
TrainerCard_GenerateCardForPlayer(card);
- card->monSpecies[0] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[0] - 1], MON_DATA_SPECIES, NULL);
- card->monSpecies[1] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[1] - 1], MON_DATA_SPECIES, NULL);
+ card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
+ card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gTasks[taskId].func = sub_80B2C30;
sub_800A4D8(2);
}
@@ -800,7 +800,7 @@ static void sub_80B3260(int a0)
gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
break;
case 5:
- ReducePlayerPartyToThree();
+ ReducePlayerPartyToSelectedMons();
gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
break;
case 9:
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 3324ddf87..1342ea102 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -4,8 +4,6 @@
#include "contest_ai.h"
#include "contest_effect.h"
-extern u16 gContestMonConditions[];
-
extern const u8 *gAIScriptPtr;
extern const u8 *gContestAIs[];
diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h
new file mode 100644
index 000000000..acf6506bd
--- /dev/null
+++ b/src/data/pokemon/pokedex_entries.h
@@ -0,0 +1,3873 @@
+const struct PokedexEntry gPokedexEntries[] =
+{
+ { //Dummy
+ .categoryName = _("UNKNOWN"),
+ .height = 0,
+ .weight = 0,
+ .description = gDummyPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bulbasaur
+ .categoryName = _("SEED"),
+ .height = 7,
+ .weight = 69,
+ .description = gBulbasaurPokedexText,
+ .pokemonScale = 356,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ivysaur
+ .categoryName = _("SEED"),
+ .height = 10,
+ .weight = 130,
+ .description = gIvysaurPokedexText,
+ .pokemonScale = 335,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Venusaur
+ .categoryName = _("SEED"),
+ .height = 20,
+ .weight = 1000,
+ .description = gVenusaurPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 388,
+ .trainerOffset = 6,
+ },
+ { //Charmander
+ .categoryName = _("LIZARD"),
+ .height = 6,
+ .weight = 85,
+ .description = gCharmanderPokedexText,
+ .pokemonScale = 444,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Charmeleon
+ .categoryName = _("FLAME"),
+ .height = 11,
+ .weight = 190,
+ .description = gCharmeleonPokedexText,
+ .pokemonScale = 302,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Charizard
+ .categoryName = _("FLAME"),
+ .height = 17,
+ .weight = 905,
+ .description = gCharizardPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 302,
+ .trainerOffset = 3,
+ },
+ { //Squirtle
+ .categoryName = _("TINY TURTLE"),
+ .height = 5,
+ .weight = 90,
+ .description = gSquirtlePokedexText,
+ .pokemonScale = 412,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wartortle
+ .categoryName = _("TURTLE"),
+ .height = 10,
+ .weight = 225,
+ .description = gWartortlePokedexText,
+ .pokemonScale = 332,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blastoise
+ .categoryName = _("SHELLFISH"),
+ .height = 16,
+ .weight = 855,
+ .description = gBlastoisePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Caterpie
+ .categoryName = _("WORM"),
+ .height = 3,
+ .weight = 29,
+ .description = gCaterpiePokedexText,
+ .pokemonScale = 549,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metapod
+ .categoryName = _("COCOON"),
+ .height = 7,
+ .weight = 99,
+ .description = gMetapodPokedexText,
+ .pokemonScale = 350,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Butterfree
+ .categoryName = _("BUTTERFLY"),
+ .height = 11,
+ .weight = 320,
+ .description = gButterfreePokedexText,
+ .pokemonScale = 312,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weedle
+ .categoryName = _("HAIRY BUG"),
+ .height = 3,
+ .weight = 32,
+ .description = gWeedlePokedexText,
+ .pokemonScale = 455,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kakuna
+ .categoryName = _("COCOON"),
+ .height = 6,
+ .weight = 100,
+ .description = gKakunaPokedexText,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beedrill
+ .categoryName = _("POISON BEE"),
+ .height = 10,
+ .weight = 295,
+ .description = gBeedrillPokedexText,
+ .pokemonScale = 366,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgey
+ .categoryName = _("TINY BIRD"),
+ .height = 3,
+ .weight = 18,
+ .description = gPidgeyPokedexText,
+ .pokemonScale = 508,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgeotto
+ .categoryName = _("BIRD"),
+ .height = 11,
+ .weight = 300,
+ .description = gPidgeottoPokedexText,
+ .pokemonScale = 331,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pidgeot
+ .categoryName = _("BIRD"),
+ .height = 15,
+ .weight = 395,
+ .description = gPidgeotPokedexText,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rattata
+ .categoryName = _("MOUSE"),
+ .height = 3,
+ .weight = 35,
+ .description = gRattataPokedexText,
+ .pokemonScale = 481,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Raticate
+ .categoryName = _("MOUSE"),
+ .height = 7,
+ .weight = 185,
+ .description = gRaticatePokedexText,
+ .pokemonScale = 459,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spearow
+ .categoryName = _("TINY BIRD"),
+ .height = 3,
+ .weight = 20,
+ .description = gSpearowPokedexText,
+ .pokemonScale = 571,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Fearow
+ .categoryName = _("BEAK"),
+ .height = 12,
+ .weight = 380,
+ .description = gFearowPokedexText,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ekans
+ .categoryName = _("SNAKE"),
+ .height = 20,
+ .weight = 69,
+ .description = gEkansPokedexText,
+ .pokemonScale = 298,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Arbok
+ .categoryName = _("COBRA"),
+ .height = 35,
+ .weight = 650,
+ .description = gArbokPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Pikachu
+ .categoryName = _("MOUSE"),
+ .height = 4,
+ .weight = 60,
+ .description = gPikachuPokedexText,
+ .pokemonScale = 479,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Raichu
+ .categoryName = _("MOUSE"),
+ .height = 8,
+ .weight = 300,
+ .description = gRaichuPokedexText,
+ .pokemonScale = 426,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sandshrew
+ .categoryName = _("MOUSE"),
+ .height = 6,
+ .weight = 120,
+ .description = gSandshrewPokedexText,
+ .pokemonScale = 365,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sandslash
+ .categoryName = _("MOUSE"),
+ .height = 10,
+ .weight = 295,
+ .description = gSandslashPokedexText,
+ .pokemonScale = 341,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //NidoranF
+ .categoryName = _("POISON PIN"),
+ .height = 4,
+ .weight = 70,
+ .description = gNidoranFPokedexText,
+ .pokemonScale = 488,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidorina
+ .categoryName = _("POISON PIN"),
+ .height = 8,
+ .weight = 200,
+ .description = gNidorinaPokedexText,
+ .pokemonScale = 381,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidoqueen
+ .categoryName = _("DRILL"),
+ .height = 13,
+ .weight = 600,
+ .description = gNidoqueenPokedexText,
+ .pokemonScale = 293,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //NidoranM
+ .categoryName = _("POISON PIN"),
+ .height = 5,
+ .weight = 90,
+ .description = gNidoranMPokedexText,
+ .pokemonScale = 511,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidorino
+ .categoryName = _("POISON PIN"),
+ .height = 9,
+ .weight = 195,
+ .description = gNidorinoPokedexText,
+ .pokemonScale = 408,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nidoking
+ .categoryName = _("DRILL"),
+ .height = 14,
+ .weight = 620,
+ .description = gNidokingPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clefairy
+ .categoryName = _("FAIRY"),
+ .height = 6,
+ .weight = 75,
+ .description = gClefairyPokedexText,
+ .pokemonScale = 441,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clefable
+ .categoryName = _("FAIRY"),
+ .height = 13,
+ .weight = 400,
+ .description = gClefablePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vulpix
+ .categoryName = _("FOX"),
+ .height = 6,
+ .weight = 99,
+ .description = gVulpixPokedexText,
+ .pokemonScale = 542,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ninetales
+ .categoryName = _("FOX"),
+ .height = 11,
+ .weight = 199,
+ .description = gNinetalesPokedexText,
+ .pokemonScale = 339,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jigglypuff
+ .categoryName = _("BALLOON"),
+ .height = 5,
+ .weight = 55,
+ .description = gJigglypuffPokedexText,
+ .pokemonScale = 433,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wigglytuff
+ .categoryName = _("BALLOON"),
+ .height = 10,
+ .weight = 120,
+ .description = gWigglytuffPokedexText,
+ .pokemonScale = 328,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zubat
+ .categoryName = _("BAT"),
+ .height = 8,
+ .weight = 75,
+ .description = gZubatPokedexText,
+ .pokemonScale = 362,
+ .pokemonOffset = -5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golbat
+ .categoryName = _("BAT"),
+ .height = 16,
+ .weight = 550,
+ .description = gGolbatPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Oddish
+ .categoryName = _("WEED"),
+ .height = 5,
+ .weight = 54,
+ .description = gOddishPokedexText,
+ .pokemonScale = 423,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gloom
+ .categoryName = _("WEED"),
+ .height = 8,
+ .weight = 86,
+ .description = gGloomPokedexText,
+ .pokemonScale = 329,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vileplume
+ .categoryName = _("FLOWER"),
+ .height = 12,
+ .weight = 186,
+ .description = gVileplumePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Paras
+ .categoryName = _("MUSHROOM"),
+ .height = 3,
+ .weight = 54,
+ .description = gParasPokedexText,
+ .pokemonScale = 593,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Parasect
+ .categoryName = _("MUSHROOM"),
+ .height = 10,
+ .weight = 295,
+ .description = gParasectPokedexText,
+ .pokemonScale = 307,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Venonat
+ .categoryName = _("INSECT"),
+ .height = 10,
+ .weight = 300,
+ .description = gVenonatPokedexText,
+ .pokemonScale = 360,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = -1,
+ },
+ { //Venomoth
+ .categoryName = _("POISON MOTH"),
+ .height = 15,
+ .weight = 125,
+ .description = gVenomothPokedexText,
+ .pokemonScale = 285,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ { //Diglett
+ .categoryName = _("MOLE"),
+ .height = 2,
+ .weight = 8,
+ .description = gDiglettPokedexText,
+ .pokemonScale = 833,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dugtrio
+ .categoryName = _("MOLE"),
+ .height = 7,
+ .weight = 333,
+ .description = gDugtrioPokedexText,
+ .pokemonScale = 406,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Meowth
+ .categoryName = _("SCRATCH CAT"),
+ .height = 4,
+ .weight = 42,
+ .description = gMeowthPokedexText,
+ .pokemonScale = 480,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Persian
+ .categoryName = _("CLASSY CAT"),
+ .height = 10,
+ .weight = 320,
+ .description = gPersianPokedexText,
+ .pokemonScale = 320,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Psyduck
+ .categoryName = _("DUCK"),
+ .height = 8,
+ .weight = 196,
+ .description = gPsyduckPokedexText,
+ .pokemonScale = 369,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golduck
+ .categoryName = _("DUCK"),
+ .height = 17,
+ .weight = 766,
+ .description = gGolduckPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 273,
+ .trainerOffset = 1,
+ },
+ { //Mankey
+ .categoryName = _("PIG MONKEY"),
+ .height = 5,
+ .weight = 280,
+ .description = gMankeyPokedexText,
+ .pokemonScale = 404,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Primeape
+ .categoryName = _("PIG MONKEY"),
+ .height = 10,
+ .weight = 320,
+ .description = gPrimeapePokedexText,
+ .pokemonScale = 326,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Growlithe
+ .categoryName = _("PUPPY"),
+ .height = 7,
+ .weight = 190,
+ .description = gGrowlithePokedexText,
+ .pokemonScale = 346,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Arcanine
+ .categoryName = _("LEGENDARY"),
+ .height = 19,
+ .weight = 1550,
+ .description = gArcaninePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 4,
+ },
+ { //Poliwag
+ .categoryName = _("TADPOLE"),
+ .height = 6,
+ .weight = 124,
+ .description = gPoliwagPokedexText,
+ .pokemonScale = 369,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poliwhirl
+ .categoryName = _("TADPOLE"),
+ .height = 10,
+ .weight = 200,
+ .description = gPoliwhirlPokedexText,
+ .pokemonScale = 288,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poliwrath
+ .categoryName = _("TADPOLE"),
+ .height = 13,
+ .weight = 540,
+ .description = gPoliwrathPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Abra
+ .categoryName = _("PSI"),
+ .height = 9,
+ .weight = 195,
+ .description = gAbraPokedexText,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kadabra
+ .categoryName = _("PSI"),
+ .height = 13,
+ .weight = 565,
+ .description = gKadabraPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Alakazam
+ .categoryName = _("PSI"),
+ .height = 15,
+ .weight = 480,
+ .description = gAlakazamPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Machop
+ .categoryName = _("SUPERPOWER"),
+ .height = 8,
+ .weight = 195,
+ .description = gMachopPokedexText,
+ .pokemonScale = 342,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Machoke
+ .categoryName = _("SUPERPOWER"),
+ .height = 15,
+ .weight = 705,
+ .description = gMachokePokedexText,
+ .pokemonScale = 323,
+ .pokemonOffset = 9,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Machamp
+ .categoryName = _("SUPERPOWER"),
+ .height = 16,
+ .weight = 1300,
+ .description = gMachampPokedexText,
+ .pokemonScale = 280,
+ .pokemonOffset = 1,
+ .trainerScale = 269,
+ .trainerOffset = -1,
+ },
+ { //Bellsprout
+ .categoryName = _("FLOWER"),
+ .height = 7,
+ .weight = 40,
+ .description = gBellsproutPokedexText,
+ .pokemonScale = 354,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weepinbell
+ .categoryName = _("FLYCATCHER"),
+ .height = 10,
+ .weight = 64,
+ .description = gWeepinbellPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Victreebel
+ .categoryName = _("FLYCATCHER"),
+ .height = 17,
+ .weight = 155,
+ .description = gVictreebelPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 312,
+ .trainerOffset = 3,
+ },
+ { //Tentacool
+ .categoryName = _("JELLYFISH"),
+ .height = 9,
+ .weight = 455,
+ .description = gTentacoolPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tentacruel
+ .categoryName = _("JELLYFISH"),
+ .height = 16,
+ .weight = 550,
+ .description = gTentacruelPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 312,
+ .trainerOffset = 1,
+ },
+ { //Geodude
+ .categoryName = _("ROCK"),
+ .height = 4,
+ .weight = 200,
+ .description = gGeodudePokedexText,
+ .pokemonScale = 347,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Graveler
+ .categoryName = _("ROCK"),
+ .height = 10,
+ .weight = 1050,
+ .description = gGravelerPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Golem
+ .categoryName = _("MEGATON"),
+ .height = 14,
+ .weight = 3000,
+ .description = gGolemPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Ponyta
+ .categoryName = _("FIRE HORSE"),
+ .height = 10,
+ .weight = 300,
+ .description = gPonytaPokedexText,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rapidash
+ .categoryName = _("FIRE HORSE"),
+ .height = 17,
+ .weight = 950,
+ .description = gRapidashPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 289,
+ .trainerOffset = 1,
+ },
+ { //Slowpoke
+ .categoryName = _("DOPEY"),
+ .height = 12,
+ .weight = 360,
+ .description = gSlowpokePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slowbro
+ .categoryName = _("HERMIT CRAB"),
+ .height = 16,
+ .weight = 785,
+ .description = gSlowbroPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 296,
+ .trainerOffset = 2,
+ },
+ { //Magnemite
+ .categoryName = _("MAGNET"),
+ .height = 3,
+ .weight = 60,
+ .description = gMagnemitePokedexText,
+ .pokemonScale = 288,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magneton
+ .categoryName = _("MAGNET"),
+ .height = 10,
+ .weight = 600,
+ .description = gMagnetonPokedexText,
+ .pokemonScale = 292,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Farfetchd
+ .categoryName = _("WILD DUCK"),
+ .height = 8,
+ .weight = 150,
+ .description = gFarfetchdPokedexText,
+ .pokemonScale = 330,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Doduo
+ .categoryName = _("TWIN BIRD"),
+ .height = 14,
+ .weight = 392,
+ .description = gDoduoPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = -1,
+ },
+ { //Dodrio
+ .categoryName = _("TRIPLE BIRD"),
+ .height = 18,
+ .weight = 852,
+ .description = gDodrioPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 0,
+ },
+ { //Seel
+ .categoryName = _("SEA LION"),
+ .height = 11,
+ .weight = 900,
+ .description = gSeelPokedexText,
+ .pokemonScale = 297,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dewgong
+ .categoryName = _("SEA LION"),
+ .height = 17,
+ .weight = 1200,
+ .description = gDewgongPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 275,
+ .trainerOffset = 0,
+ },
+ { //Grimer
+ .categoryName = _("SLUDGE"),
+ .height = 9,
+ .weight = 300,
+ .description = gGrimerPokedexText,
+ .pokemonScale = 258,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Muk
+ .categoryName = _("SLUDGE"),
+ .height = 12,
+ .weight = 300,
+ .description = gMukPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shellder
+ .categoryName = _("BIVALVE"),
+ .height = 3,
+ .weight = 40,
+ .description = gShellderPokedexText,
+ .pokemonScale = 675,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cloyster
+ .categoryName = _("BIVALVE"),
+ .height = 15,
+ .weight = 1325,
+ .description = gCloysterPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 269,
+ .trainerOffset = 1,
+ },
+ { //Gastly
+ .categoryName = _("GAS"),
+ .height = 13,
+ .weight = 1,
+ .description = gGastlyPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Haunter
+ .categoryName = _("GAS"),
+ .height = 16,
+ .weight = 1,
+ .description = gHaunterPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Gengar
+ .categoryName = _("SHADOW"),
+ .height = 15,
+ .weight = 405,
+ .description = gGengarPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 302,
+ .trainerOffset = 2,
+ },
+ { //Onix
+ .categoryName = _("ROCK SNAKE"),
+ .height = 88,
+ .weight = 2100,
+ .description = gOnixPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ { //Drowzee
+ .categoryName = _("HYPNOSIS"),
+ .height = 10,
+ .weight = 324,
+ .description = gDrowzeePokedexText,
+ .pokemonScale = 274,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hypno
+ .categoryName = _("HYPNOSIS"),
+ .height = 16,
+ .weight = 756,
+ .description = gHypnoPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Krabby
+ .categoryName = _("RIVER CRAB"),
+ .height = 4,
+ .weight = 65,
+ .description = gKrabbyPokedexText,
+ .pokemonScale = 469,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kingler
+ .categoryName = _("PINCER"),
+ .height = 13,
+ .weight = 600,
+ .description = gKinglerPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Voltorb
+ .categoryName = _("BALL"),
+ .height = 5,
+ .weight = 104,
+ .description = gVoltorbPokedexText,
+ .pokemonScale = 364,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Electrode
+ .categoryName = _("BALL"),
+ .height = 12,
+ .weight = 666,
+ .description = gElectrodePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exeggcute
+ .categoryName = _("EGG"),
+ .height = 4,
+ .weight = 25,
+ .description = gExeggcutePokedexText,
+ .pokemonScale = 489,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exeggutor
+ .categoryName = _("COCONUT"),
+ .height = 20,
+ .weight = 1200,
+ .description = gExeggutorPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ { //Cubone
+ .categoryName = _("LONELY"),
+ .height = 4,
+ .weight = 65,
+ .description = gCubonePokedexText,
+ .pokemonScale = 545,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marowak
+ .categoryName = _("BONE KEEPER"),
+ .height = 10,
+ .weight = 450,
+ .description = gMarowakPokedexText,
+ .pokemonScale = 293,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hitmonlee
+ .categoryName = _("KICKING"),
+ .height = 15,
+ .weight = 498,
+ .description = gHitmonleePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 259,
+ .trainerOffset = 1,
+ },
+ { //Hitmonchan
+ .categoryName = _("PUNCHING"),
+ .height = 14,
+ .weight = 502,
+ .description = gHitmonchanPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 277,
+ .trainerOffset = 2,
+ },
+ { //Lickitung
+ .categoryName = _("LICKING"),
+ .height = 12,
+ .weight = 655,
+ .description = gLickitungPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Koffing
+ .categoryName = _("POISON GAS"),
+ .height = 6,
+ .weight = 10,
+ .description = gKoffingPokedexText,
+ .pokemonScale = 369,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Weezing
+ .categoryName = _("POISON GAS"),
+ .height = 12,
+ .weight = 95,
+ .description = gWeezingPokedexText,
+ .pokemonScale = 305,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rhyhorn
+ .categoryName = _("SPIKES"),
+ .height = 10,
+ .weight = 1150,
+ .description = gRhyhornPokedexText,
+ .pokemonScale = 267,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Rhydon
+ .categoryName = _("DRILL"),
+ .height = 19,
+ .weight = 1200,
+ .description = gRhydonPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 299,
+ .trainerOffset = 2,
+ },
+ { //Chansey
+ .categoryName = _("EGG"),
+ .height = 11,
+ .weight = 346,
+ .description = gChanseyPokedexText,
+ .pokemonScale = 257,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tangela
+ .categoryName = _("VINE"),
+ .height = 10,
+ .weight = 350,
+ .description = gTangelaPokedexText,
+ .pokemonScale = 304,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kangaskhan
+ .categoryName = _("PARENT"),
+ .height = 22,
+ .weight = 800,
+ .description = gKangaskhanPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ { //Horsea
+ .categoryName = _("DRAGON"),
+ .height = 4,
+ .weight = 80,
+ .description = gHorseaPokedexText,
+ .pokemonScale = 399,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seadra
+ .categoryName = _("DRAGON"),
+ .height = 12,
+ .weight = 250,
+ .description = gSeadraPokedexText,
+ .pokemonScale = 299,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Goldeen
+ .categoryName = _("GOLDFISH"),
+ .height = 6,
+ .weight = 150,
+ .description = gGoldeenPokedexText,
+ .pokemonScale = 379,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seaking
+ .categoryName = _("GOLDFISH"),
+ .height = 13,
+ .weight = 390,
+ .description = gSeakingPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Staryu
+ .categoryName = _("STAR SHAPE"),
+ .height = 8,
+ .weight = 345,
+ .description = gStaryuPokedexText,
+ .pokemonScale = 326,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Starmie
+ .categoryName = _("MYSTERIOUS"),
+ .height = 11,
+ .weight = 800,
+ .description = gStarmiePokedexText,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mrmime
+ .categoryName = _("BARRIER"),
+ .height = 13,
+ .weight = 545,
+ .description = gMrmimePokedexText,
+ .pokemonScale = 258,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Scyther
+ .categoryName = _("MANTIS"),
+ .height = 15,
+ .weight = 560,
+ .description = gScytherPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 1,
+ .trainerScale = 293,
+ .trainerOffset = 2,
+ },
+ { //Jynx
+ .categoryName = _("HUMAN SHAPE"),
+ .height = 14,
+ .weight = 406,
+ .description = gJynxPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ { //Electabuzz
+ .categoryName = _("ELECTRIC"),
+ .height = 11,
+ .weight = 300,
+ .description = gElectabuzzPokedexText,
+ .pokemonScale = 351,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magmar
+ .categoryName = _("SPITFIRE"),
+ .height = 13,
+ .weight = 445,
+ .description = gMagmarPokedexText,
+ .pokemonScale = 277,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pinsir
+ .categoryName = _("STAG BEETLE"),
+ .height = 15,
+ .weight = 550,
+ .description = gPinsirPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Tauros
+ .categoryName = _("WILD BULL"),
+ .height = 14,
+ .weight = 884,
+ .description = gTaurosPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magikarp
+ .categoryName = _("FISH"),
+ .height = 9,
+ .weight = 100,
+ .description = gMagikarpPokedexText,
+ .pokemonScale = 310,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gyarados
+ .categoryName = _("ATROCIOUS"),
+ .height = 65,
+ .weight = 2350,
+ .description = gGyaradosPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 481,
+ .trainerOffset = 13,
+ },
+ { //Lapras
+ .categoryName = _("TRANSPORT"),
+ .height = 25,
+ .weight = 2200,
+ .description = gLaprasPokedexText,
+ .pokemonScale = 257,
+ .pokemonOffset = 10,
+ .trainerScale = 423,
+ .trainerOffset = 8,
+ },
+ { //Ditto
+ .categoryName = _("TRANSFORM"),
+ .height = 3,
+ .weight = 40,
+ .description = gDittoPokedexText,
+ .pokemonScale = 633,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Eevee
+ .categoryName = _("EVOLUTION"),
+ .height = 3,
+ .weight = 65,
+ .description = gEeveePokedexText,
+ .pokemonScale = 476,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vaporeon
+ .categoryName = _("BUBBLE JET"),
+ .height = 10,
+ .weight = 290,
+ .description = gVaporeonPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jolteon
+ .categoryName = _("LIGHTNING"),
+ .height = 8,
+ .weight = 245,
+ .description = gJolteonPokedexText,
+ .pokemonScale = 283,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flareon
+ .categoryName = _("FLAME"),
+ .height = 9,
+ .weight = 250,
+ .description = gFlareonPokedexText,
+ .pokemonScale = 306,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Porygon
+ .categoryName = _("VIRTUAL"),
+ .height = 8,
+ .weight = 365,
+ .description = gPorygonPokedexText,
+ .pokemonScale = 328,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Omanyte
+ .categoryName = _("SPIRAL"),
+ .height = 4,
+ .weight = 75,
+ .description = gOmanytePokedexText,
+ .pokemonScale = 521,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Omastar
+ .categoryName = _("SPIRAL"),
+ .height = 10,
+ .weight = 350,
+ .description = gOmastarPokedexText,
+ .pokemonScale = 307,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kabuto
+ .categoryName = _("SHELLFISH"),
+ .height = 5,
+ .weight = 115,
+ .description = gKabutoPokedexText,
+ .pokemonScale = 454,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kabutops
+ .categoryName = _("SHELLFISH"),
+ .height = 13,
+ .weight = 405,
+ .description = gKabutopsPokedexText,
+ .pokemonScale = 271,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aerodactyl
+ .categoryName = _("FOSSIL"),
+ .height = 18,
+ .weight = 590,
+ .description = gAerodactylPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 302,
+ .trainerOffset = 4,
+ },
+ { //Snorlax
+ .categoryName = _("SLEEPING"),
+ .height = 21,
+ .weight = 4600,
+ .description = gSnorlaxPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 423,
+ .trainerOffset = 11,
+ },
+ { //Articuno
+ .categoryName = _("FREEZE"),
+ .height = 17,
+ .weight = 554,
+ .description = gArticunoPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 2,
+ },
+ { //Zapdos
+ .categoryName = _("ELECTRIC"),
+ .height = 16,
+ .weight = 526,
+ .description = gZapdosPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 318,
+ .trainerOffset = 3,
+ },
+ { //Moltres
+ .categoryName = _("FLAME"),
+ .height = 20,
+ .weight = 600,
+ .description = gMoltresPokedexText,
+ .pokemonScale = 270,
+ .pokemonOffset = 0,
+ .trainerScale = 387,
+ .trainerOffset = 8,
+ },
+ { //Dratini
+ .categoryName = _("DRAGON"),
+ .height = 18,
+ .weight = 33,
+ .description = gDratiniPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 8,
+ .trainerScale = 386,
+ .trainerOffset = 6,
+ },
+ { //Dragonair
+ .categoryName = _("DRAGON"),
+ .height = 40,
+ .weight = 165,
+ .description = gDragonairPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 411,
+ .trainerOffset = 5,
+ },
+ { //Dragonite
+ .categoryName = _("DRAGON"),
+ .height = 22,
+ .weight = 2100,
+ .description = gDragonitePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ { //Mewtwo
+ .categoryName = _("GENETIC"),
+ .height = 20,
+ .weight = 1220,
+ .description = gMewtwoPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 4,
+ },
+ { //Mew
+ .categoryName = _("NEW SPECIES"),
+ .height = 4,
+ .weight = 40,
+ .description = gMewPokedexText,
+ .pokemonScale = 457,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Chikorita
+ .categoryName = _("LEAF"),
+ .height = 9,
+ .weight = 64,
+ .description = gChikoritaPokedexText,
+ .pokemonScale = 512,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bayleef
+ .categoryName = _("LEAF"),
+ .height = 12,
+ .weight = 158,
+ .description = gBayleefPokedexText,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Meganium
+ .categoryName = _("HERB"),
+ .height = 18,
+ .weight = 1005,
+ .description = gMeganiumPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 277,
+ .trainerOffset = 1,
+ },
+ { //Cyndaquil
+ .categoryName = _("FIRE MOUSE"),
+ .height = 5,
+ .weight = 79,
+ .description = gCyndaquilPokedexText,
+ .pokemonScale = 539,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Quilava
+ .categoryName = _("VOLCANO"),
+ .height = 9,
+ .weight = 190,
+ .description = gQuilavaPokedexText,
+ .pokemonScale = 329,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Typhlosion
+ .categoryName = _("VOLCANO"),
+ .height = 17,
+ .weight = 795,
+ .description = gTyphlosionPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ { //Totodile
+ .categoryName = _("BIG JAW"),
+ .height = 6,
+ .weight = 95,
+ .description = gTotodilePokedexText,
+ .pokemonScale = 487,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Croconaw
+ .categoryName = _("BIG JAW"),
+ .height = 11,
+ .weight = 250,
+ .description = gCroconawPokedexText,
+ .pokemonScale = 378,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Feraligatr
+ .categoryName = _("BIG JAW"),
+ .height = 23,
+ .weight = 888,
+ .description = gFeraligatrPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ { //Sentret
+ .categoryName = _("SCOUT"),
+ .height = 8,
+ .weight = 60,
+ .description = gSentretPokedexText,
+ .pokemonScale = 439,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Furret
+ .categoryName = _("LONG BODY"),
+ .height = 18,
+ .weight = 325,
+ .description = gFurretPokedexText,
+ .pokemonScale = 346,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hoothoot
+ .categoryName = _("OWL"),
+ .height = 7,
+ .weight = 212,
+ .description = gHoothootPokedexText,
+ .pokemonScale = 380,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Noctowl
+ .categoryName = _("OWL"),
+ .height = 16,
+ .weight = 408,
+ .description = gNoctowlPokedexText,
+ .pokemonScale = 278,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ledyba
+ .categoryName = _("FIVE STAR"),
+ .height = 10,
+ .weight = 108,
+ .description = gLedybaPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ledian
+ .categoryName = _("FIVE STAR"),
+ .height = 14,
+ .weight = 356,
+ .description = gLedianPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spinarak
+ .categoryName = _("STRING SPIT"),
+ .height = 5,
+ .weight = 85,
+ .description = gSpinarakPokedexText,
+ .pokemonScale = 414,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ariados
+ .categoryName = _("LONG LEG"),
+ .height = 11,
+ .weight = 335,
+ .description = gAriadosPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Crobat
+ .categoryName = _("BAT"),
+ .height = 18,
+ .weight = 750,
+ .description = gCrobatPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 281,
+ .trainerOffset = 1,
+ },
+ { //Chinchou
+ .categoryName = _("ANGLER"),
+ .height = 5,
+ .weight = 120,
+ .description = gChinchouPokedexText,
+ .pokemonScale = 424,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lanturn
+ .categoryName = _("LIGHT"),
+ .height = 12,
+ .weight = 225,
+ .description = gLanturnPokedexText,
+ .pokemonScale = 269,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pichu
+ .categoryName = _("TINY MOUSE"),
+ .height = 3,
+ .weight = 20,
+ .description = gPichuPokedexText,
+ .pokemonScale = 508,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cleffa
+ .categoryName = _("STAR SHAPE"),
+ .height = 3,
+ .weight = 30,
+ .description = gCleffaPokedexText,
+ .pokemonScale = 462,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Igglybuff
+ .categoryName = _("BALLOON"),
+ .height = 3,
+ .weight = 10,
+ .description = gIgglybuffPokedexText,
+ .pokemonScale = 457,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Togepi
+ .categoryName = _("SPIKE BALL"),
+ .height = 3,
+ .weight = 15,
+ .description = gTogepiPokedexText,
+ .pokemonScale = 507,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Togetic
+ .categoryName = _("HAPPINESS"),
+ .height = 6,
+ .weight = 32,
+ .description = gTogeticPokedexText,
+ .pokemonScale = 424,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Natu
+ .categoryName = _("TINY BIRD"),
+ .height = 2,
+ .weight = 20,
+ .description = gNatuPokedexText,
+ .pokemonScale = 610,
+ .pokemonOffset = 25,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Xatu
+ .categoryName = _("MYSTIC"),
+ .height = 15,
+ .weight = 150,
+ .description = gXatuPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 318,
+ .trainerOffset = 4,
+ },
+ { //Mareep
+ .categoryName = _("WOOL"),
+ .height = 6,
+ .weight = 78,
+ .description = gMareepPokedexText,
+ .pokemonScale = 379,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flaaffy
+ .categoryName = _("WOOL"),
+ .height = 8,
+ .weight = 133,
+ .description = gFlaaffyPokedexText,
+ .pokemonScale = 372,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ampharos
+ .categoryName = _("LIGHT"),
+ .height = 14,
+ .weight = 615,
+ .description = gAmpharosPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bellossom
+ .categoryName = _("FLOWER"),
+ .height = 4,
+ .weight = 58,
+ .description = gBellossomPokedexText,
+ .pokemonScale = 472,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marill
+ .categoryName = _("AQUA MOUSE"),
+ .height = 4,
+ .weight = 85,
+ .description = gMarillPokedexText,
+ .pokemonScale = 476,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Azumarill
+ .categoryName = _("AQUA RABBIT"),
+ .height = 8,
+ .weight = 285,
+ .description = gAzumarillPokedexText,
+ .pokemonScale = 448,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sudowoodo
+ .categoryName = _("IMITATION"),
+ .height = 12,
+ .weight = 380,
+ .description = gSudowoodoPokedexText,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Politoed
+ .categoryName = _("FROG"),
+ .height = 11,
+ .weight = 339,
+ .description = gPolitoedPokedexText,
+ .pokemonScale = 289,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hoppip
+ .categoryName = _("COTTONWEED"),
+ .height = 4,
+ .weight = 5,
+ .description = gHoppipPokedexText,
+ .pokemonScale = 562,
+ .pokemonOffset = -7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Skiploom
+ .categoryName = _("COTTONWEED"),
+ .height = 6,
+ .weight = 10,
+ .description = gSkiploomPokedexText,
+ .pokemonScale = 387,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Jumpluff
+ .categoryName = _("COTTONWEED"),
+ .height = 8,
+ .weight = 30,
+ .description = gJumpluffPokedexText,
+ .pokemonScale = 418,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aipom
+ .categoryName = _("LONG TAIL"),
+ .height = 8,
+ .weight = 115,
+ .description = gAipomPokedexText,
+ .pokemonScale = 363,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sunkern
+ .categoryName = _("SEED"),
+ .height = 3,
+ .weight = 18,
+ .description = gSunkernPokedexText,
+ .pokemonScale = 541,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sunflora
+ .categoryName = _("SUN"),
+ .height = 8,
+ .weight = 85,
+ .description = gSunfloraPokedexText,
+ .pokemonScale = 444,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Yanma
+ .categoryName = _("CLEAR WING"),
+ .height = 12,
+ .weight = 380,
+ .description = gYanmaPokedexText,
+ .pokemonScale = 274,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wooper
+ .categoryName = _("WATER FISH"),
+ .height = 4,
+ .weight = 85,
+ .description = gWooperPokedexText,
+ .pokemonScale = 479,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Quagsire
+ .categoryName = _("WATER FISH"),
+ .height = 14,
+ .weight = 750,
+ .description = gQuagsirePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Espeon
+ .categoryName = _("SUN"),
+ .height = 9,
+ .weight = 265,
+ .description = gEspeonPokedexText,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Umbreon
+ .categoryName = _("MOONLIGHT"),
+ .height = 10,
+ .weight = 270,
+ .description = gUmbreonPokedexText,
+ .pokemonScale = 317,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Murkrow
+ .categoryName = _("DARKNESS"),
+ .height = 5,
+ .weight = 21,
+ .description = gMurkrowPokedexText,
+ .pokemonScale = 401,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 1,
+ },
+ { //Slowking
+ .categoryName = _("ROYAL"),
+ .height = 20,
+ .weight = 795,
+ .description = gSlowkingPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 309,
+ .trainerOffset = 5,
+ },
+ { //Misdreavus
+ .categoryName = _("SCREECH"),
+ .height = 7,
+ .weight = 10,
+ .description = gMisdreavusPokedexText,
+ .pokemonScale = 407,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Unown
+ .categoryName = _("SYMBOL"),
+ .height = 5,
+ .weight = 50,
+ .description = gUnownPokedexText,
+ .pokemonScale = 411,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wobbuffet
+ .categoryName = _("PATIENT"),
+ .height = 13,
+ .weight = 285,
+ .description = gWobbuffetPokedexText,
+ .pokemonScale = 274,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Girafarig
+ .categoryName = _("LONG NECK"),
+ .height = 15,
+ .weight = 415,
+ .description = gGirafarigPokedexText,
+ .pokemonScale = 281,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pineco
+ .categoryName = _("BAGWORM"),
+ .height = 6,
+ .weight = 72,
+ .description = gPinecoPokedexText,
+ .pokemonScale = 445,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Forretress
+ .categoryName = _("BAGWORM"),
+ .height = 12,
+ .weight = 1258,
+ .description = gForretressPokedexText,
+ .pokemonScale = 293,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dunsparce
+ .categoryName = _("LAND SNAKE"),
+ .height = 15,
+ .weight = 140,
+ .description = gDunsparcePokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gligar
+ .categoryName = _("FLYSCORPION"),
+ .height = 11,
+ .weight = 648,
+ .description = gGligarPokedexText,
+ .pokemonScale = 350,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Steelix
+ .categoryName = _("IRON SNAKE"),
+ .height = 92,
+ .weight = 4000,
+ .description = gSteelixPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 516,
+ .trainerOffset = 13,
+ },
+ { //Snubbull
+ .categoryName = _("FAIRY"),
+ .height = 6,
+ .weight = 78,
+ .description = gSnubbullPokedexText,
+ .pokemonScale = 465,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Granbull
+ .categoryName = _("FAIRY"),
+ .height = 14,
+ .weight = 487,
+ .description = gGranbullPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Qwilfish
+ .categoryName = _("BALLOON"),
+ .height = 5,
+ .weight = 39,
+ .description = gQwilfishPokedexText,
+ .pokemonScale = 430,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Scizor
+ .categoryName = _("PINCER"),
+ .height = 18,
+ .weight = 1180,
+ .description = gScizorPokedexText,
+ .pokemonScale = 278,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shuckle
+ .categoryName = _("MOLD"),
+ .height = 6,
+ .weight = 205,
+ .description = gShucklePokedexText,
+ .pokemonScale = 485,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Heracross
+ .categoryName = _("SINGLE HORN"),
+ .height = 15,
+ .weight = 540,
+ .description = gHeracrossPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sneasel
+ .categoryName = _("SHARP CLAW"),
+ .height = 9,
+ .weight = 280,
+ .description = gSneaselPokedexText,
+ .pokemonScale = 413,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Teddiursa
+ .categoryName = _("LITTLE BEAR"),
+ .height = 6,
+ .weight = 88,
+ .description = gTeddiursaPokedexText,
+ .pokemonScale = 455,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ursaring
+ .categoryName = _("HIBERNATOR"),
+ .height = 18,
+ .weight = 1258,
+ .description = gUrsaringPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slugma
+ .categoryName = _("LAVA"),
+ .height = 7,
+ .weight = 350,
+ .description = gSlugmaPokedexText,
+ .pokemonScale = 329,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magcargo
+ .categoryName = _("LAVA"),
+ .height = 8,
+ .weight = 550,
+ .description = gMagcargoPokedexText,
+ .pokemonScale = 332,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swinub
+ .categoryName = _("PIG"),
+ .height = 4,
+ .weight = 65,
+ .description = gSwinubPokedexText,
+ .pokemonScale = 324,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Piloswine
+ .categoryName = _("SWINE"),
+ .height = 11,
+ .weight = 558,
+ .description = gPiloswinePokedexText,
+ .pokemonScale = 306,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Corsola
+ .categoryName = _("CORAL"),
+ .height = 6,
+ .weight = 50,
+ .description = gCorsolaPokedexText,
+ .pokemonScale = 410,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Remoraid
+ .categoryName = _("JET"),
+ .height = 6,
+ .weight = 120,
+ .description = gRemoraidPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Octillery
+ .categoryName = _("JET"),
+ .height = 9,
+ .weight = 285,
+ .description = gOctilleryPokedexText,
+ .pokemonScale = 296,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Delibird
+ .categoryName = _("DELIVERY"),
+ .height = 9,
+ .weight = 160,
+ .description = gDelibirdPokedexText,
+ .pokemonScale = 293,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mantine
+ .categoryName = _("KITE"),
+ .height = 21,
+ .weight = 2200,
+ .description = gMantinePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 342,
+ .trainerOffset = 7,
+ },
+ { //Skarmory
+ .categoryName = _("ARMOR BIRD"),
+ .height = 17,
+ .weight = 505,
+ .description = gSkarmoryPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 271,
+ .trainerOffset = 1,
+ },
+ { //Houndour
+ .categoryName = _("DARK"),
+ .height = 6,
+ .weight = 108,
+ .description = gHoundourPokedexText,
+ .pokemonScale = 393,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Houndoom
+ .categoryName = _("DARK"),
+ .height = 14,
+ .weight = 350,
+ .description = gHoundoomPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kingdra
+ .categoryName = _("DRAGON"),
+ .height = 18,
+ .weight = 1520,
+ .description = gKingdraPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 287,
+ .trainerOffset = 0,
+ },
+ { //Phanpy
+ .categoryName = _("LONG NOSE"),
+ .height = 5,
+ .weight = 335,
+ .description = gPhanpyPokedexText,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Donphan
+ .categoryName = _("ARMOR"),
+ .height = 11,
+ .weight = 1200,
+ .description = gDonphanPokedexText,
+ .pokemonScale = 313,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Porygon2
+ .categoryName = _("VIRTUAL"),
+ .height = 6,
+ .weight = 325,
+ .description = gPorygon2PokedexText,
+ .pokemonScale = 320,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Stantler
+ .categoryName = _("BIG HORN"),
+ .height = 14,
+ .weight = 712,
+ .description = gStantlerPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Smeargle
+ .categoryName = _("PAINTER"),
+ .height = 12,
+ .weight = 580,
+ .description = gSmearglePokedexText,
+ .pokemonScale = 287,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tyrogue
+ .categoryName = _("SCUFFLE"),
+ .height = 7,
+ .weight = 210,
+ .description = gTyroguePokedexText,
+ .pokemonScale = 292,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hitmontop
+ .categoryName = _("HANDSTAND"),
+ .height = 14,
+ .weight = 480,
+ .description = gHitmontopPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Smoochum
+ .categoryName = _("KISS"),
+ .height = 4,
+ .weight = 60,
+ .description = gSmoochumPokedexText,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Elekid
+ .categoryName = _("ELECTRIC"),
+ .height = 6,
+ .weight = 235,
+ .description = gElekidPokedexText,
+ .pokemonScale = 363,
+ .pokemonOffset = 14,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Magby
+ .categoryName = _("LIVE COAL"),
+ .height = 7,
+ .weight = 214,
+ .description = gMagbyPokedexText,
+ .pokemonScale = 284,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Miltank
+ .categoryName = _("MILK COW"),
+ .height = 12,
+ .weight = 755,
+ .description = gMiltankPokedexText,
+ .pokemonScale = 280,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blissey
+ .categoryName = _("HAPPINESS"),
+ .height = 15,
+ .weight = 468,
+ .description = gBlisseyPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 310,
+ .trainerOffset = 3,
+ },
+ { //Raikou
+ .categoryName = _("THUNDER"),
+ .height = 19,
+ .weight = 1780,
+ .description = gRaikouPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Entei
+ .categoryName = _("VOLCANO"),
+ .height = 21,
+ .weight = 1980,
+ .description = gEnteiPokedexText,
+ .pokemonScale = 259,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Suicune
+ .categoryName = _("AURORA"),
+ .height = 20,
+ .weight = 1870,
+ .description = gSuicunePokedexText,
+ .pokemonScale = 269,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Larvitar
+ .categoryName = _("ROCK SKIN"),
+ .height = 6,
+ .weight = 720,
+ .description = gLarvitarPokedexText,
+ .pokemonScale = 472,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pupitar
+ .categoryName = _("HARD SHELL"),
+ .height = 12,
+ .weight = 1520,
+ .description = gPupitarPokedexText,
+ .pokemonScale = 292,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Tyranitar
+ .categoryName = _("ARMOR"),
+ .height = 20,
+ .weight = 2020,
+ .description = gTyranitarPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 345,
+ .trainerOffset = 7,
+ },
+ { //Lugia
+ .categoryName = _("DIVING"),
+ .height = 52,
+ .weight = 2160,
+ .description = gLugiaPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 721,
+ .trainerOffset = 19,
+ },
+ { //HoOh
+ .categoryName = _("RAINBOW"),
+ .height = 38,
+ .weight = 1990,
+ .description = gHoOhPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 610,
+ .trainerOffset = 17,
+ },
+ { //Celebi
+ .categoryName = _("TIME TRAVEL"),
+ .height = 6,
+ .weight = 50,
+ .description = gCelebiPokedexText,
+ .pokemonScale = 393,
+ .pokemonOffset = -10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Treecko
+ .categoryName = _("WOOD GECKO"),
+ .height = 5,
+ .weight = 50,
+ .description = gTreeckoPokedexText,
+ .pokemonScale = 541,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Grovyle
+ .categoryName = _("WOOD GECKO"),
+ .height = 9,
+ .weight = 216,
+ .description = gGrovylePokedexText,
+ .pokemonScale = 360,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sceptile
+ .categoryName = _("FOREST"),
+ .height = 17,
+ .weight = 522,
+ .description = gSceptilePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 275,
+ .trainerOffset = 2,
+ },
+ { //Torchic
+ .categoryName = _("CHICK"),
+ .height = 4,
+ .weight = 25,
+ .description = gTorchicPokedexText,
+ .pokemonScale = 566,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Combusken
+ .categoryName = _("YOUNG FOWL"),
+ .height = 9,
+ .weight = 195,
+ .description = gCombuskenPokedexText,
+ .pokemonScale = 343,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Blaziken
+ .categoryName = _("BLAZE"),
+ .height = 19,
+ .weight = 520,
+ .description = gBlazikenPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 4,
+ },
+ { //Mudkip
+ .categoryName = _("MUD FISH"),
+ .height = 4,
+ .weight = 76,
+ .description = gMudkipPokedexText,
+ .pokemonScale = 535,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Marshtomp
+ .categoryName = _("MUD FISH"),
+ .height = 7,
+ .weight = 280,
+ .description = gMarshtompPokedexText,
+ .pokemonScale = 340,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swampert
+ .categoryName = _("MUD FISH"),
+ .height = 15,
+ .weight = 819,
+ .description = gSwampertPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Poochyena
+ .categoryName = _("BITE"),
+ .height = 5,
+ .weight = 136,
+ .description = gPoochyenaPokedexText,
+ .pokemonScale = 481,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mightyena
+ .categoryName = _("BITE"),
+ .height = 10,
+ .weight = 370,
+ .description = gMightyenaPokedexText,
+ .pokemonScale = 362,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zigzagoon
+ .categoryName = _("TINYRACCOON"),
+ .height = 4,
+ .weight = 175,
+ .description = gZigzagoonPokedexText,
+ .pokemonScale = 560,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Linoone
+ .categoryName = _("RUSHING"),
+ .height = 5,
+ .weight = 325,
+ .description = gLinoonePokedexText,
+ .pokemonScale = 321,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wurmple
+ .categoryName = _("WORM"),
+ .height = 3,
+ .weight = 36,
+ .description = gWurmplePokedexText,
+ .pokemonScale = 711,
+ .pokemonOffset = 24,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Silcoon
+ .categoryName = _("COCOON"),
+ .height = 6,
+ .weight = 100,
+ .description = gSilcoonPokedexText,
+ .pokemonScale = 431,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beautifly
+ .categoryName = _("BUTTERFLY"),
+ .height = 10,
+ .weight = 284,
+ .description = gBeautiflyPokedexText,
+ .pokemonScale = 298,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cascoon
+ .categoryName = _("COCOON"),
+ .height = 7,
+ .weight = 115,
+ .description = gCascoonPokedexText,
+ .pokemonScale = 391,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dustox
+ .categoryName = _("POISON MOTH"),
+ .height = 12,
+ .weight = 316,
+ .description = gDustoxPokedexText,
+ .pokemonScale = 269,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lotad
+ .categoryName = _("WATER WEED"),
+ .height = 5,
+ .weight = 26,
+ .description = gLotadPokedexText,
+ .pokemonScale = 406,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lombre
+ .categoryName = _("JOLLY"),
+ .height = 12,
+ .weight = 325,
+ .description = gLombrePokedexText,
+ .pokemonScale = 277,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ludicolo
+ .categoryName = _("CAREFREE"),
+ .height = 15,
+ .weight = 550,
+ .description = gLudicoloPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = -1,
+ },
+ { //Seedot
+ .categoryName = _("ACORN"),
+ .height = 5,
+ .weight = 40,
+ .description = gSeedotPokedexText,
+ .pokemonScale = 472,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nuzleaf
+ .categoryName = _("WILY"),
+ .height = 10,
+ .weight = 280,
+ .description = gNuzleafPokedexText,
+ .pokemonScale = 299,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shiftry
+ .categoryName = _("WICKED"),
+ .height = 13,
+ .weight = 596,
+ .description = gShiftryPokedexText,
+ .pokemonScale = 290,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Taillow
+ .categoryName = _("TINYSWALLOW"),
+ .height = 3,
+ .weight = 23,
+ .description = gTaillowPokedexText,
+ .pokemonScale = 465,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swellow
+ .categoryName = _("SWALLOW"),
+ .height = 7,
+ .weight = 198,
+ .description = gSwellowPokedexText,
+ .pokemonScale = 428,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wingull
+ .categoryName = _("SEAGULL"),
+ .height = 6,
+ .weight = 95,
+ .description = gWingullPokedexText,
+ .pokemonScale = 295,
+ .pokemonOffset = -2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Pelipper
+ .categoryName = _("WATER BIRD"),
+ .height = 12,
+ .weight = 280,
+ .description = gPelipperPokedexText,
+ .pokemonScale = 288,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ralts
+ .categoryName = _("FEELING"),
+ .height = 4,
+ .weight = 66,
+ .description = gRaltsPokedexText,
+ .pokemonScale = 457,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kirlia
+ .categoryName = _("EMOTION"),
+ .height = 8,
+ .weight = 202,
+ .description = gKirliaPokedexText,
+ .pokemonScale = 354,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gardevoir
+ .categoryName = _("EMBRACE"),
+ .height = 16,
+ .weight = 484,
+ .description = gGardevoirPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Surskit
+ .categoryName = _("POND SKATER"),
+ .height = 5,
+ .weight = 17,
+ .description = gSurskitPokedexText,
+ .pokemonScale = 375,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Masquerain
+ .categoryName = _("EYEBALL"),
+ .height = 8,
+ .weight = 36,
+ .description = gMasquerainPokedexText,
+ .pokemonScale = 378,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shroomish
+ .categoryName = _("MUSHROOM"),
+ .height = 4,
+ .weight = 45,
+ .description = gShroomishPokedexText,
+ .pokemonScale = 513,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Breloom
+ .categoryName = _("MUSHROOM"),
+ .height = 12,
+ .weight = 392,
+ .description = gBreloomPokedexText,
+ .pokemonScale = 324,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slakoth
+ .categoryName = _("SLACKER"),
+ .height = 8,
+ .weight = 240,
+ .description = gSlakothPokedexText,
+ .pokemonScale = 291,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vigoroth
+ .categoryName = _("WILD MONKEY"),
+ .height = 14,
+ .weight = 465,
+ .description = gVigorothPokedexText,
+ .pokemonScale = 301,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Slaking
+ .categoryName = _("LAZY"),
+ .height = 20,
+ .weight = 1305,
+ .description = gSlakingPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 300,
+ .trainerOffset = 1,
+ },
+ { //Nincada
+ .categoryName = _("TRAINEE"),
+ .height = 5,
+ .weight = 55,
+ .description = gNincadaPokedexText,
+ .pokemonScale = 405,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Ninjask
+ .categoryName = _("NINJA"),
+ .height = 8,
+ .weight = 120,
+ .description = gNinjaskPokedexText,
+ .pokemonScale = 383,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shedinja
+ .categoryName = _("SHED"),
+ .height = 8,
+ .weight = 12,
+ .description = gShedinjaPokedexText,
+ .pokemonScale = 372,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Whismur
+ .categoryName = _("WHISPER"),
+ .height = 6,
+ .weight = 163,
+ .description = gWhismurPokedexText,
+ .pokemonScale = 373,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Loudred
+ .categoryName = _("BIG VOICE"),
+ .height = 10,
+ .weight = 405,
+ .description = gLoudredPokedexText,
+ .pokemonScale = 356,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Exploud
+ .categoryName = _("LOUD NOISE"),
+ .height = 15,
+ .weight = 840,
+ .description = gExploudPokedexText,
+ .pokemonScale = 284,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Makuhita
+ .categoryName = _("GUTS"),
+ .height = 10,
+ .weight = 864,
+ .description = gMakuhitaPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Hariyama
+ .categoryName = _("ARM THRUST"),
+ .height = 23,
+ .weight = 2538,
+ .description = gHariyamaPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 343,
+ .trainerOffset = 7,
+ },
+ { //Azurill
+ .categoryName = _("POLKA DOT"),
+ .height = 2,
+ .weight = 20,
+ .description = gAzurillPokedexText,
+ .pokemonScale = 603,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Nosepass
+ .categoryName = _("COMPASS"),
+ .height = 10,
+ .weight = 970,
+ .description = gNosepassPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 9,
+ .trainerScale = 289,
+ .trainerOffset = 3,
+ },
+ { //Skitty
+ .categoryName = _("KITTEN"),
+ .height = 6,
+ .weight = 110,
+ .description = gSkittyPokedexText,
+ .pokemonScale = 492,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Delcatty
+ .categoryName = _("PRIM"),
+ .height = 11,
+ .weight = 326,
+ .description = gDelcattyPokedexText,
+ .pokemonScale = 322,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sableye
+ .categoryName = _("DARKNESS"),
+ .height = 5,
+ .weight = 110,
+ .description = gSableyePokedexText,
+ .pokemonScale = 451,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Mawile
+ .categoryName = _("DECEIVER"),
+ .height = 6,
+ .weight = 115,
+ .description = gMawilePokedexText,
+ .pokemonScale = 466,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aron
+ .categoryName = _("IRON ARMOR"),
+ .height = 4,
+ .weight = 600,
+ .description = gAronPokedexText,
+ .pokemonScale = 419,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lairon
+ .categoryName = _("IRON ARMOR"),
+ .height = 9,
+ .weight = 1200,
+ .description = gLaironPokedexText,
+ .pokemonScale = 275,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Aggron
+ .categoryName = _("IRON ARMOR"),
+ .height = 21,
+ .weight = 3600,
+ .description = gAggronPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = -1,
+ .trainerScale = 350,
+ .trainerOffset = 6,
+ },
+ { //Meditite
+ .categoryName = _("MEDITATE"),
+ .height = 6,
+ .weight = 112,
+ .description = gMedititePokedexText,
+ .pokemonScale = 465,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Medicham
+ .categoryName = _("MEDITATE"),
+ .height = 13,
+ .weight = 315,
+ .description = gMedichamPokedexText,
+ .pokemonScale = 298,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Electrike
+ .categoryName = _("LIGHTNING"),
+ .height = 6,
+ .weight = 152,
+ .description = gElectrikePokedexText,
+ .pokemonScale = 290,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Manectric
+ .categoryName = _("DISCHARGE"),
+ .height = 15,
+ .weight = 402,
+ .description = gManectricPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 257,
+ .trainerOffset = 0,
+ },
+ { //Plusle
+ .categoryName = _("CHEERING"),
+ .height = 4,
+ .weight = 42,
+ .description = gPluslePokedexText,
+ .pokemonScale = 515,
+ .pokemonOffset = -9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Minun
+ .categoryName = _("CHEERING"),
+ .height = 4,
+ .weight = 42,
+ .description = gMinunPokedexText,
+ .pokemonScale = 512,
+ .pokemonOffset = -7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Volbeat
+ .categoryName = _("FIREFLY"),
+ .height = 7,
+ .weight = 177,
+ .description = gVolbeatPokedexText,
+ .pokemonScale = 442,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Illumise
+ .categoryName = _("FIREFLY"),
+ .height = 6,
+ .weight = 177,
+ .description = gIllumisePokedexText,
+ .pokemonScale = 572,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Roselia
+ .categoryName = _("THORN"),
+ .height = 3,
+ .weight = 20,
+ .description = gRoseliaPokedexText,
+ .pokemonScale = 677,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gulpin
+ .categoryName = _("STOMACH"),
+ .height = 4,
+ .weight = 103,
+ .description = gGulpinPokedexText,
+ .pokemonScale = 593,
+ .pokemonOffset = 23,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swalot
+ .categoryName = _("POISON BAG"),
+ .height = 17,
+ .weight = 800,
+ .description = gSwalotPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 345,
+ .trainerOffset = 3,
+ },
+ { //Carvanha
+ .categoryName = _("SAVAGE"),
+ .height = 8,
+ .weight = 208,
+ .description = gCarvanhaPokedexText,
+ .pokemonScale = 362,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sharpedo
+ .categoryName = _("BRUTAL"),
+ .height = 18,
+ .weight = 888,
+ .description = gSharpedoPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 317,
+ .trainerOffset = 3,
+ },
+ { //Wailmer
+ .categoryName = _("BALL WHALE"),
+ .height = 20,
+ .weight = 1300,
+ .description = gWailmerPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 493,
+ .trainerOffset = 0,
+ },
+ { //Wailord
+ .categoryName = _("FLOAT WHALE"),
+ .height = 145,
+ .weight = 3980,
+ .description = gWailordPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 1352,
+ .trainerOffset = 18,
+ },
+ { //Numel
+ .categoryName = _("NUMB"),
+ .height = 7,
+ .weight = 240,
+ .description = gNumelPokedexText,
+ .pokemonScale = 342,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Camerupt
+ .categoryName = _("ERUPTION"),
+ .height = 19,
+ .weight = 2200,
+ .description = gCameruptPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 7,
+ .trainerScale = 345,
+ .trainerOffset = 6,
+ },
+ { //Torkoal
+ .categoryName = _("COAL"),
+ .height = 5,
+ .weight = 804,
+ .description = gTorkoalPokedexText,
+ .pokemonScale = 390,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spoink
+ .categoryName = _("BOUNCE"),
+ .height = 7,
+ .weight = 306,
+ .description = gSpoinkPokedexText,
+ .pokemonScale = 423,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Grumpig
+ .categoryName = _("MANIPULATE"),
+ .height = 9,
+ .weight = 715,
+ .description = gGrumpigPokedexText,
+ .pokemonScale = 358,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Spinda
+ .categoryName = _("SPOT PANDA"),
+ .height = 11,
+ .weight = 50,
+ .description = gSpindaPokedexText,
+ .pokemonScale = 321,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Trapinch
+ .categoryName = _("ANT PIT"),
+ .height = 7,
+ .weight = 150,
+ .description = gTrapinchPokedexText,
+ .pokemonScale = 298,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Vibrava
+ .categoryName = _("VIBRATION"),
+ .height = 11,
+ .weight = 153,
+ .description = gVibravaPokedexText,
+ .pokemonScale = 370,
+ .pokemonOffset = 11,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Flygon
+ .categoryName = _("MYSTIC"),
+ .height = 20,
+ .weight = 820,
+ .description = gFlygonPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 268,
+ .trainerOffset = 1,
+ },
+ { //Cacnea
+ .categoryName = _("CACTUS"),
+ .height = 4,
+ .weight = 513,
+ .description = gCacneaPokedexText,
+ .pokemonScale = 455,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cacturne
+ .categoryName = _("SCARECROW"),
+ .height = 13,
+ .weight = 774,
+ .description = gCacturnePokedexText,
+ .pokemonScale = 327,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Swablu
+ .categoryName = _("COTTON BIRD"),
+ .height = 4,
+ .weight = 12,
+ .description = gSwabluPokedexText,
+ .pokemonScale = 422,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Altaria
+ .categoryName = _("HUMMING"),
+ .height = 11,
+ .weight = 206,
+ .description = gAltariaPokedexText,
+ .pokemonScale = 327,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Zangoose
+ .categoryName = _("CAT FERRET"),
+ .height = 13,
+ .weight = 403,
+ .description = gZangoosePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Seviper
+ .categoryName = _("FANG SNAKE"),
+ .height = 27,
+ .weight = 525,
+ .description = gSeviperPokedexText,
+ .pokemonScale = 275,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Lunatone
+ .categoryName = _("METEORITE"),
+ .height = 10,
+ .weight = 1680,
+ .description = gLunatonePokedexText,
+ .pokemonScale = 300,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Solrock
+ .categoryName = _("METEORITE"),
+ .height = 12,
+ .weight = 1540,
+ .description = gSolrockPokedexText,
+ .pokemonScale = 328,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Barboach
+ .categoryName = _("WHISKERS"),
+ .height = 4,
+ .weight = 19,
+ .description = gBarboachPokedexText,
+ .pokemonScale = 581,
+ .pokemonOffset = -3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Whiscash
+ .categoryName = _("WHISKERS"),
+ .height = 9,
+ .weight = 236,
+ .description = gWhiscashPokedexText,
+ .pokemonScale = 317,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Corphish
+ .categoryName = _("RUFFIAN"),
+ .height = 6,
+ .weight = 115,
+ .description = gCorphishPokedexText,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Crawdaunt
+ .categoryName = _("ROGUE"),
+ .height = 11,
+ .weight = 328,
+ .description = gCrawdauntPokedexText,
+ .pokemonScale = 365,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Baltoy
+ .categoryName = _("CLAY DOLL"),
+ .height = 5,
+ .weight = 215,
+ .description = gBaltoyPokedexText,
+ .pokemonScale = 457,
+ .pokemonOffset = 21,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Claydol
+ .categoryName = _("CLAY DOLL"),
+ .height = 15,
+ .weight = 1080,
+ .description = gClaydolPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 280,
+ .trainerOffset = 1,
+ },
+ { //Lileep
+ .categoryName = _("SEA LILY"),
+ .height = 10,
+ .weight = 238,
+ .description = gLileepPokedexText,
+ .pokemonScale = 305,
+ .pokemonOffset = 8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Cradily
+ .categoryName = _("BARNACLE"),
+ .height = 15,
+ .weight = 604,
+ .description = gCradilyPokedexText,
+ .pokemonScale = 267,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Anorith
+ .categoryName = _("OLD SHRIMP"),
+ .height = 7,
+ .weight = 125,
+ .description = gAnorithPokedexText,
+ .pokemonScale = 296,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Armaldo
+ .categoryName = _("PLATE"),
+ .height = 15,
+ .weight = 682,
+ .description = gArmaldoPokedexText,
+ .pokemonScale = 312,
+ .pokemonOffset = 3,
+ .trainerScale = 271,
+ .trainerOffset = 0,
+ },
+ { //Feebas
+ .categoryName = _("FISH"),
+ .height = 6,
+ .weight = 74,
+ .description = gFeebasPokedexText,
+ .pokemonScale = 423,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Milotic
+ .categoryName = _("TENDER"),
+ .height = 62,
+ .weight = 1620,
+ .description = gMiloticPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 360,
+ .trainerOffset = 7,
+ },
+ { //Castform
+ .categoryName = _("WEATHER"),
+ .height = 3,
+ .weight = 8,
+ .description = gCastformPokedexText,
+ .pokemonScale = 435,
+ .pokemonOffset = -5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Kecleon
+ .categoryName = _("COLOR SWAP"),
+ .height = 10,
+ .weight = 220,
+ .description = gKecleonPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 10,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shuppet
+ .categoryName = _("PUPPET"),
+ .height = 6,
+ .weight = 23,
+ .description = gShuppetPokedexText,
+ .pokemonScale = 440,
+ .pokemonOffset = 20,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Banette
+ .categoryName = _("MARIONETTE"),
+ .height = 11,
+ .weight = 125,
+ .description = gBanettePokedexText,
+ .pokemonScale = 262,
+ .pokemonOffset = 9,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Duskull
+ .categoryName = _("REQUIEM"),
+ .height = 8,
+ .weight = 150,
+ .description = gDuskullPokedexText,
+ .pokemonScale = 406,
+ .pokemonOffset = -4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Dusclops
+ .categoryName = _("BECKON"),
+ .height = 16,
+ .weight = 306,
+ .description = gDusclopsPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 299,
+ .trainerOffset = 1,
+ },
+ { //Tropius
+ .categoryName = _("FRUIT"),
+ .height = 20,
+ .weight = 1000,
+ .description = gTropiusPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 344,
+ .trainerOffset = 7,
+ },
+ { //Chimecho
+ .categoryName = _("WIND CHIME"),
+ .height = 6,
+ .weight = 10,
+ .description = gChimechoPokedexText,
+ .pokemonScale = 505,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Absol
+ .categoryName = _("DISASTER"),
+ .height = 12,
+ .weight = 470,
+ .description = gAbsolPokedexText,
+ .pokemonScale = 301,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Wynaut
+ .categoryName = _("BRIGHT"),
+ .height = 6,
+ .weight = 140,
+ .description = gWynautPokedexText,
+ .pokemonScale = 484,
+ .pokemonOffset = 19,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Snorunt
+ .categoryName = _("SNOW HAT"),
+ .height = 7,
+ .weight = 168,
+ .description = gSnoruntPokedexText,
+ .pokemonScale = 380,
+ .pokemonOffset = 15,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Glalie
+ .categoryName = _("FACE"),
+ .height = 15,
+ .weight = 2565,
+ .description = gGlaliePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 3,
+ .trainerScale = 344,
+ .trainerOffset = 0,
+ },
+ { //Spheal
+ .categoryName = _("CLAP"),
+ .height = 8,
+ .weight = 395,
+ .description = gSphealPokedexText,
+ .pokemonScale = 315,
+ .pokemonOffset = 16,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Sealeo
+ .categoryName = _("BALL ROLL"),
+ .height = 11,
+ .weight = 876,
+ .description = gSealeoPokedexText,
+ .pokemonScale = 338,
+ .pokemonOffset = 13,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Walrein
+ .categoryName = _("ICE BREAK"),
+ .height = 14,
+ .weight = 1506,
+ .description = gWalreinPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 4,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Clamperl
+ .categoryName = _("BIVALVE"),
+ .height = 4,
+ .weight = 525,
+ .description = gClamperlPokedexText,
+ .pokemonScale = 691,
+ .pokemonOffset = 22,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Huntail
+ .categoryName = _("DEEP SEA"),
+ .height = 17,
+ .weight = 270,
+ .description = gHuntailPokedexText,
+ .pokemonScale = 307,
+ .pokemonOffset = 1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Gorebyss
+ .categoryName = _("SOUTH SEA"),
+ .height = 18,
+ .weight = 226,
+ .description = gGorebyssPokedexText,
+ .pokemonScale = 278,
+ .pokemonOffset = 5,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Relicanth
+ .categoryName = _("LONGEVITY"),
+ .height = 10,
+ .weight = 234,
+ .description = gRelicanthPokedexText,
+ .pokemonScale = 316,
+ .pokemonOffset = 7,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Luvdisc
+ .categoryName = _("RENDEZVOUS"),
+ .height = 6,
+ .weight = 87,
+ .description = gLuvdiscPokedexText,
+ .pokemonScale = 371,
+ .pokemonOffset = 2,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Bagon
+ .categoryName = _("ROCK HEAD"),
+ .height = 6,
+ .weight = 421,
+ .description = gBagonPokedexText,
+ .pokemonScale = 448,
+ .pokemonOffset = 18,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Shelgon
+ .categoryName = _("ENDURANCE"),
+ .height = 11,
+ .weight = 1105,
+ .description = gShelgonPokedexText,
+ .pokemonScale = 311,
+ .pokemonOffset = 12,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Salamence
+ .categoryName = _("DRAGON"),
+ .height = 15,
+ .weight = 1026,
+ .description = gSalamencePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Beldum
+ .categoryName = _("IRON BALL"),
+ .height = 6,
+ .weight = 952,
+ .description = gBeldumPokedexText,
+ .pokemonScale = 414,
+ .pokemonOffset = -1,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metang
+ .categoryName = _("IRON CLAW"),
+ .height = 12,
+ .weight = 2025,
+ .description = gMetangPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 6,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Metagross
+ .categoryName = _("IRON LEG"),
+ .height = 16,
+ .weight = 5500,
+ .description = gMetagrossPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 4,
+ .trainerScale = 447,
+ .trainerOffset = 9,
+ },
+ { //Regirock
+ .categoryName = _("ROCK PEAK"),
+ .height = 17,
+ .weight = 2300,
+ .description = gRegirockPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 2,
+ .trainerScale = 309,
+ .trainerOffset = 1,
+ },
+ { //Regice
+ .categoryName = _("ICEBERG"),
+ .height = 18,
+ .weight = 1750,
+ .description = gRegicePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 301,
+ .trainerOffset = 2,
+ },
+ { //Registeel
+ .categoryName = _("IRON"),
+ .height = 19,
+ .weight = 2050,
+ .description = gRegisteelPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 359,
+ .trainerOffset = 6,
+ },
+ { //Latias
+ .categoryName = _("EON"),
+ .height = 14,
+ .weight = 400,
+ .description = gLatiasPokedexText,
+ .pokemonScale = 304,
+ .pokemonOffset = 3,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Latios
+ .categoryName = _("EON"),
+ .height = 20,
+ .weight = 600,
+ .description = gLatiosPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 294,
+ .trainerOffset = 3,
+ },
+ { //Kyogre
+ .categoryName = _("SEA BASIN"),
+ .height = 45,
+ .weight = 3520,
+ .description = gKyogrePokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 614,
+ .trainerOffset = 13,
+ },
+ { //Groudon
+ .categoryName = _("CONTINENT"),
+ .height = 35,
+ .weight = 9500,
+ .description = gGroudonPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 515,
+ .trainerOffset = 14,
+ },
+ { //Rayquaza
+ .categoryName = _("SKY HIGH"),
+ .height = 70,
+ .weight = 2065,
+ .description = gRayquazaPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 448,
+ .trainerOffset = 12,
+ },
+ { //Jirachi
+ .categoryName = _("WISH"),
+ .height = 3,
+ .weight = 11,
+ .description = gJirachiPokedexText,
+ .pokemonScale = 608,
+ .pokemonOffset = -8,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ },
+ { //Deoxys
+ .categoryName = _("DNA"),
+ .height = 17,
+ .weight = 608,
+ .description = gDeoxysPokedexText,
+ .pokemonScale = 256,
+ .pokemonOffset = 0,
+ .trainerScale = 290,
+ .trainerOffset = 2,
+ },
+};
diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h
new file mode 100644
index 000000000..565c1acaf
--- /dev/null
+++ b/src/data/pokemon/pokedex_text.h
@@ -0,0 +1,2321 @@
+const u8 gDummyPokedexText[] = _(
+ "This is a newly discovered POKéMON.\n"
+ "It is currently under investigation.\n"
+ "No detailed information is available\n"
+ "at this time.");
+
+const u8 gBulbasaurPokedexText[] = _(
+ "BULBASAUR can be seen napping in bright\n"
+ "sunlight. There is a seed on its back.\n"
+ "By soaking up the sun’s rays, the seed\n"
+ "grows progressively larger.");
+
+const u8 gIvysaurPokedexText[] = _(
+ "To support its bulb, IVYSAUR’s legs\n"
+ "grow sturdy. If it spends more time lying in\n"
+ "the sunlight, the bud will soon bloom into\n"
+ "a large flower.");
+
+const u8 gVenusaurPokedexText[] = _(
+ "VENUSAUR’s flower is said to take on vivid\n"
+ "colors if it gets plenty of nutrition and\n"
+ "sunlight. The flower’s aroma soothes the\n"
+ "emotions of people.");
+
+const u8 gCharmanderPokedexText[] = _(
+ "The flame that burns at the tip of its\n"
+ "tail is an indication of its emotions.\n"
+ "The flame wavers when CHARMANDER is\n"
+ "happy, and blazes when it is enraged.");
+
+const u8 gCharmeleonPokedexText[] = _(
+ "Without pity, its sharp claws destroy foes.\n"
+ "If it encounters a strong enemy, it\n"
+ "becomes agitated, and the flame on its\n"
+ "tail flares with a bluish white color.");
+
+const u8 gCharizardPokedexText[] = _(
+ "A CHARIZARD flies about in search of\n"
+ "strong opponents. It breathes intense\n"
+ "flames that can melt any material. However,\n"
+ "it will never torch a weaker foe.");
+
+const u8 gSquirtlePokedexText[] = _(
+ "Its shell is not just for protection.\n"
+ "Its rounded shape and the grooves on its\n"
+ "surface minimize resistance in water,\n"
+ "enabling SQUIRTLE to swim at high speeds.");
+
+const u8 gWartortlePokedexText[] = _(
+ "Its large tail is covered with rich, thick\n"
+ "fur that deepens in color with age.\n"
+ "The scratches on its shell are evidence\n"
+ "of this POKéMON’s toughness in battle.");
+
+const u8 gBlastoisePokedexText[] = _(
+ "The waterspouts that protrude from its\n"
+ "shell are highly accurate. Their bullets of\n"
+ "water can precisely nail tin cans from\n"
+ "a distance of over 160 feet.");
+
+const u8 gCaterpiePokedexText[] = _(
+ "Its voracious appetite compels it to\n"
+ "devour leaves bigger than itself without\n"
+ "hesitation. It releases a terribly strong\n"
+ "odor from its antennae.");
+
+const u8 gMetapodPokedexText[] = _(
+ "Its shell is as hard as an iron slab.\n"
+ "A METAPOD does not move very much\n"
+ "because it is preparing its soft innards\n"
+ "for evolution inside the shell.");
+
+const u8 gButterfreePokedexText[] = _(
+ "It has a superior ability to search for\n"
+ "delicious honey from flowers. It can seek,\n"
+ "extract, and carry honey from flowers\n"
+ "blooming over six miles away.");
+
+const u8 gWeedlePokedexText[] = _(
+ "A WEEDLE has an extremely acute sense\n"
+ "of smell. It distinguishes its favorite\n"
+ "kinds of leaves from those it dislikes by\n"
+ "sniffing with its big red proboscis (nose).");
+
+const u8 gKakunaPokedexText[] = _(
+ "It remains virtually immobile while it\n"
+ "clings to a tree. However, on the inside,\n"
+ "it busily prepares for evolution. This is\n"
+ "evident from how hot its shell becomes.");
+
+const u8 gBeedrillPokedexText[] = _(
+ "A BEEDRILL is extremely territorial.\n"
+ "For safety reasons, no one should \n"
+ "ever approach its nest. If angered,\n"
+ "they will attack in a swarm.");
+
+const u8 gPidgeyPokedexText[] = _(
+ "It has an extremely sharp sense of\n"
+ "direction. It can unerringly return home to\n"
+ "its nest, however far it may be removed\n"
+ "from its familiar surroundings.");
+
+const u8 gPidgeottoPokedexText[] = _(
+ "This POKéMON flies around, patrolling its\n"
+ "large territory. If its living space is\n"
+ "violated, it shows no mercy in thoroughly\n"
+ "punishing the foe with its sharp claws.");
+
+const u8 gPidgeotPokedexText[] = _(
+ "This POKéMON has gorgeous, glossy\n"
+ "feathers. Many TRAINERS are so captivated\n"
+ "by the beautiful feathers on its head that\n"
+ "they choose PIDGEOT as their POKéMON.");
+
+const u8 gRattataPokedexText[] = _(
+ "A RATTATA is cautious in the extreme.\n"
+ "Even while it is asleep, it constantly\n"
+ "moves its ears and listens for danger.\n"
+ "It will make its nest anywhere.");
+
+const u8 gRaticatePokedexText[] = _(
+ "A RATICATE’s sturdy fangs grow steadily.\n"
+ "To keep them ground down, it gnaws on\n"
+ "rocks and logs. It may even chew on the\n"
+ "walls of houses.");
+
+const u8 gSpearowPokedexText[] = _(
+ "Its loud cry can be heard over half a mile\n"
+ "away. If its high, keening cry is heard\n"
+ "echoing all around, it is a sign that they\n"
+ "are warning each other of danger.");
+
+const u8 gFearowPokedexText[] = _(
+ "Its long neck and elongated beak are\n"
+ "ideal for catching prey in soil or water.\n"
+ "It deftly moves this extended and skinny\n"
+ "beak to pluck prey.");
+
+const u8 gEkansPokedexText[] = _(
+ "An EKANS curls itself up in a spiral while\n"
+ "it rests. This position allows it to quickly\n"
+ "respond to an enemy from any direction\n"
+ "with a threat from its upraised head.");
+
+const u8 gArbokPokedexText[] = _(
+ "This POKéMON has a terrifically strong\n"
+ "constricting power. It can even flatten\n"
+ "steel oil drums. Once it wraps its body\n"
+ "around its foe, escaping is impossible.");
+
+const u8 gPikachuPokedexText[] = _(
+ "It stores electricity in the electric sacs\n"
+ "on its cheeks. When it releases pent-up\n"
+ "energy in a burst, the electric power is\n"
+ "equal to a lightning bolt.");
+
+const u8 gRaichuPokedexText[] = _(
+ "If it stores too much electricity, its\n"
+ "behavior turns aggressive. To avoid this,\n"
+ "it occasionally discharges excess energy\n"
+ "and calms itself down.");
+
+const u8 gSandshrewPokedexText[] = _(
+ "When it curls up in a ball, it can make any\n"
+ "attack bounce off harmlessly. Its hide has\n"
+ "turned tough and solid as a result of\n"
+ "living in the desert.");
+
+const u8 gSandslashPokedexText[] = _(
+ "It curls up in a ball to protect itself from\n"
+ "enemy attacks. It also curls up to prevent\n"
+ "heatstroke during the daytime when\n"
+ "temperatures rise sharply.");
+
+const u8 gNidoranFPokedexText[] = _(
+ "Its highly toxic barbs are thought to have\n"
+ "developed as protection for this small-\n"
+ "bodied POKéMON. When enraged, it releases\n"
+ "a horrible toxin from its horn.");
+
+const u8 gNidorinaPokedexText[] = _(
+ "When it is with its friends or\n"
+ "family, its barbs are tucked away to\n"
+ "prevent injury. It appears to become\n"
+ "nervous if separated from the others.");
+
+const u8 gNidoqueenPokedexText[] = _(
+ "It is adept at sending foes flying with\n"
+ "harsh tackles using its tough, scaly body.\n"
+ "This POKéMON is at its strongest when\n"
+ "it is defending its young.");
+
+const u8 gNidoranMPokedexText[] = _(
+ "The male NIDORAN has developed muscles\n"
+ "that freely move its ears in any direction.\n"
+ "Even the slightest sound does not escape\n"
+ "this POKéMON’s notice.");
+
+const u8 gNidorinoPokedexText[] = _(
+ "Its horn is harder than a diamond.\n"
+ "If it senses a hostile presence, all the\n"
+ "barbs on its back bristle up at once, and it\n"
+ "challenges the foe with all its might.");
+
+const u8 gNidokingPokedexText[] = _(
+ "A NIDOKING’s thick tail packs enormously\n"
+ "destructive power capable of toppling\n"
+ "a metal transmission tower. Once it goes\n"
+ "on a rampage, there is no stopping it.");
+
+const u8 gClefairyPokedexText[] = _(
+ "On every night of a full moon, they come\n"
+ "out to play. When dawn arrives, the tired\n"
+ "CLEFAIRY go to sleep nestled up against\n"
+ "each other in deep and quiet mountains.");
+
+const u8 gClefablePokedexText[] = _(
+ "A CLEFABLE uses its wings to skip lightly \n"
+ "as if it were flying. Its bouncy step\n"
+ "lets it even walk on water. On quiet,\n"
+ "moonlit nights, it strolls on lakes.");
+
+const u8 gVulpixPokedexText[] = _(
+ "It can freely control fire, making fiery\n"
+ "orbs fly like will-o’-the-wisps. Just\n"
+ "before evolution, its six tails grow hot \n"
+ "as if on fire.");
+
+const u8 gNinetalesPokedexText[] = _(
+ "It has long been said that each of the\n"
+ "nine tails embody an enchanted power.\n"
+ "A long-lived NINETALES will have fur that\n"
+ "shines like gold.");
+
+const u8 gJigglypuffPokedexText[] = _(
+ "Nothing can avoid falling asleep hearing a\n"
+ "JIGGLYPUFF’s song. The sound waves of its\n"
+ "singing voice match the brain waves of\n"
+ "someone in a deep sleep.");
+
+const u8 gWigglytuffPokedexText[] = _(
+ "Its fur is the ultimate in luxuriousness.\n"
+ "Sleeping alongside a WIGGLYTUFF is simply\n"
+ "divine. Its body expands seemingly without\n"
+ "end when it inhales.");
+
+const u8 gZubatPokedexText[] = _(
+ "While living in pitch-black caverns, their\n"
+ "eyes gradually grew shut and deprived\n"
+ "them of vision. They use ultrasonic waves\n"
+ "to detect obstacles.");
+
+const u8 gGolbatPokedexText[] = _(
+ "Its fangs easily puncture even thick\n"
+ "animal hide. It loves to feast on the blood\n"
+ "of people and POKéMON. It flits about in\n"
+ "darkness and strikes from behind.");
+
+const u8 gOddishPokedexText[] = _(
+ "This POKéMON grows by absorbing moonlight.\n"
+ "During the daytime, it buries itself in the\n"
+ "ground, leaving only its leaves exposed to\n"
+ "avoid detection by its enemies.");
+
+const u8 gGloomPokedexText[] = _(
+ "A horribly noxious honey drools from its\n"
+ "mouth. One whiff of the honey can result\n"
+ "in memory loss. Some fans are said to\n"
+ "enjoy this overwhelming stink, however.");
+
+const u8 gVileplumePokedexText[] = _(
+ "In seasons when it produces more pollen,\n"
+ "the air around a VILEPLUME turns yellow\n"
+ "with the powder as it walks. The pollen is\n"
+ "highly toxic and causes paralysis.");
+
+const u8 gParasPokedexText[] = _(
+ "A PARAS has parasitic tochukaso\n"
+ "mushrooms growing on its back. They grow\n"
+ "by drawing nutrients from the host. They\n"
+ "are valued as a medicine for long life.");
+
+const u8 gParasectPokedexText[] = _(
+ "PARASECT are known to infest the roots of\n"
+ "large trees en masse and drain nutrients.\n"
+ "When an infested tree dies, they move\n"
+ "onto another tree all at once.");
+
+const u8 gVenonatPokedexText[] = _(
+ "Its coat of thin, stiff hair that covers\n"
+ "its entire body is said to have evolved\n"
+ "for protection. Its large eyes never fail\n"
+ "to spot even miniscule prey.");
+
+const u8 gVenomothPokedexText[] = _(
+ "VENOMOTH are nocturnal--they only are\n"
+ "active at night. Their favorite prey are\n"
+ "insects that gather around streetlights,\n"
+ "attracted by the light in the darkness.");
+
+const u8 gDiglettPokedexText[] = _(
+ "DIGLETT are raised in most farms.\n"
+ "The reason is simple--wherever they\n"
+ "burrow, the soil is left perfectly tilled\n"
+ "for growing delicious crops.");
+
+const u8 gDugtrioPokedexText[] = _(
+ "Because the triplets originally split from\n"
+ "one body, they think exactly alike.\n"
+ "They work cooperatively to burrow\n"
+ "endlessly through the ground.");
+
+const u8 gMeowthPokedexText[] = _(
+ "MEOWTH withdraw their sharp claws into\n"
+ "their paws to silently sneak about.\n"
+ "For some reason, this POKéMON loves\n"
+ "shiny coins that glitter with light.");
+
+const u8 gPersianPokedexText[] = _(
+ "A PERSIAN’s six bold whiskers sense air\n"
+ "movements to determine what is in its\n"
+ "vicinity. It becomes docile if grabbed\n"
+ "by the whiskers.");
+
+const u8 gPsyduckPokedexText[] = _(
+ "When its headache intensifies, it starts\n"
+ "using strange powers. However, it has no\n"
+ "recollection of its powers, so it always\n"
+ "looks befuddled and bewildered.");
+
+const u8 gGolduckPokedexText[] = _(
+ "A GOLDUCK is an adept swimmer.\n"
+ "It sometimes joins competitive swimmers\n"
+ "in training. It uses psychic powers when\n"
+ "its forehead shimmers with light.");
+
+const u8 gMankeyPokedexText[] = _(
+ "When it starts shaking and its nasal\n"
+ "breathing turns rough, it’s a sure sign\n"
+ "of anger. However, since this happens\n"
+ "instantly, there is no time to flee.");
+
+const u8 gPrimeapePokedexText[] = _(
+ "When it becomes furious, its blood\n"
+ "circulation becomes more robust, and\n"
+ "its muscles are made stronger. But it\n"
+ "also becomes much less intelligent.");
+
+const u8 gGrowlithePokedexText[] = _(
+ "Its superb sense of smell ensures that\n"
+ "this POKéMON won’t forget any scent,\n"
+ "no matter what. It uses its sense of smell\n"
+ "to detect the emotions of others.");
+
+const u8 gArcaninePokedexText[] = _(
+ "This fleet-footed POKéMON is said to run\n"
+ "over 6,200 miles in a single day and night.\n"
+ "The fire that blazes wildly within its body\n"
+ "is its source of power.");
+
+const u8 gPoliwagPokedexText[] = _(
+ "It is possible to see this POKéMON’s spiral\n"
+ "innards right through its thin skin.\n"
+ "However, the skin is also very flexible.\n"
+ "Even sharp fangs bounce right off it.");
+
+const u8 gPoliwhirlPokedexText[] = _(
+ "Its body surface is always wet and slick\n"
+ "with an oily fluid. Because of this greasy\n"
+ "covering, it can easily slip and slide out\n"
+ "of the clutches of any enemy in battle.");
+
+const u8 gPoliwrathPokedexText[] = _(
+ "Its highly developed muscles never grow\n"
+ "fatigued, however much it exercises.\n"
+ "This POKéMON can swim back and forth\n"
+ "across the Pacific Ocean without effort.");
+
+const u8 gAbraPokedexText[] = _(
+ "A POKéMON that sleeps 18 hours a day.\n"
+ "Observation revealed that it uses\n"
+ "TELEPORT to change its location once\n"
+ "every hour.");
+
+const u8 gKadabraPokedexText[] = _(
+ "It is rumored that a boy with psychic\n"
+ "abilities suddenly transformed into\n"
+ "KADABRA while he was assisting research\n"
+ "into extrasensory powers.");
+
+const u8 gAlakazamPokedexText[] = _(
+ "While it has strong psychic abilities and\n"
+ "high intelligence, an ALAKAZAM’s muscles\n"
+ "are very weak. It uses psychic power to\n"
+ "move its body.");
+
+const u8 gMachopPokedexText[] = _(
+ "It continually undertakes strenuous\n"
+ "training to master all forms of martial\n"
+ "arts. Its strength lets it easily hoist\n"
+ "a sumo wrestler onto its shoulders.");
+
+const u8 gMachokePokedexText[] = _(
+ "A belt is worn by a MACHOKE to keep its\n"
+ "overwhelming power under control.\n"
+ "Because it is so dangerous, no one has\n"
+ "ever removed the belt.");
+
+const u8 gMachampPokedexText[] = _(
+ "It is impossible to defend against punches\n"
+ "and chops doled out by its four arms.\n"
+ "Its fighting spirit flares up when it faces\n"
+ "a tough opponent.");
+
+const u8 gBellsproutPokedexText[] = _(
+ "A BELLSPROUT’s thin and flexible body lets\n"
+ "it bend and sway to avoid any attack,\n"
+ "however strong it may be. From its mouth,\n"
+ "it leaks a fluid that melts even iron.");
+
+const u8 gWeepinbellPokedexText[] = _(
+ "At night, a WEEPINBELL hangs on to a tree\n"
+ "branch with its hooked rear and sleeps.\n"
+ "If it moves around in its sleep, it may\n"
+ "wake up to find itself on the ground.");
+
+const u8 gVictreebelPokedexText[] = _(
+ "The long vine extending from its head is\n"
+ "waved about as if it were a living thing to\n"
+ "attract prey. When an unsuspecting victim\n"
+ "approaches, it is swallowed whole.");
+
+const u8 gTentacoolPokedexText[] = _(
+ "Its body is almost entirely composed of\n"
+ "water. It ensnares its foe with its two\n"
+ "long tentacles, then stabs with the poison\n"
+ "stingers at their tips.");
+
+const u8 gTentacruelPokedexText[] = _(
+ "It lives in complex rock formations on\n"
+ "the ocean floor and traps prey using its\n"
+ "80 tentacles. Its red orbs glow when it\n"
+ "grows excited or agitated.");
+
+const u8 gGeodudePokedexText[] = _(
+ "It climbs mountain paths using only the\n"
+ "power of its arms. Because they look just\n"
+ "like boulders lining paths, hikers may step\n"
+ "on them without noticing.");
+
+const u8 gGravelerPokedexText[] = _(
+ "They descend from mountains by tumbling\n"
+ "down steep slopes. They are so brutal,\n"
+ "they smash aside obstructing trees and\n"
+ "massive boulders with thunderous tackles.");
+
+const u8 gGolemPokedexText[] = _(
+ "It is said to live in volcanic craters\n"
+ "on mountain peaks. Once a year, it sheds\n"
+ "its hide and grows larger. The shed hide\n"
+ "crumbles and returns to the soil.");
+
+const u8 gPonytaPokedexText[] = _(
+ "A PONYTA is very weak at birth. It can\n"
+ "barely stand up. Its legs become stronger\n"
+ "as it stumbles and falls while trying to\n"
+ "keep up with its parent.");
+
+const u8 gRapidashPokedexText[] = _(
+ "It usually canters casually in the fields\n"
+ "and plains. But once a RAPIDASH turns\n"
+ "serious, its fiery manes flare and blaze\n"
+ "as it gallops its way up to 150 mph.");
+
+const u8 gSlowpokePokedexText[] = _(
+ "It catches prey by dipping its tail in\n"
+ "water at the side of a river. But it often\n"
+ "forgets what it is doing and spends entire\n"
+ "days just loafing at water’s edge.");
+
+const u8 gSlowbroPokedexText[] = _(
+ "Its tail has a SHELLDER firmly attached\n"
+ "with a bite. As a result, the tail can’t be\n"
+ "used for fishing anymore. This forces it\n"
+ "to reluctantly swim and catch prey.");
+
+const u8 gMagnemitePokedexText[] = _(
+ "The units at its sides are extremely\n"
+ "powerful magnets. They generate enough\n"
+ "magnetism to draw in iron objects from\n"
+ "over 300 feet away.");
+
+const u8 gMagnetonPokedexText[] = _(
+ "It is actually three MAGNEMITE linked\n"
+ "by magnetism. It generates powerful radio\n"
+ "waves that raise temperatures by 3.6\n"
+ "degrees F within a 3,300-foot radius.");
+
+const u8 gFarfetchdPokedexText[] = _(
+ "It is always seen with a stick from a plant.\n"
+ "Apparently, there are good sticks and bad\n"
+ "sticks. This POKéMON occasionally fights\n"
+ "with others over choice sticks.");
+
+const u8 gDoduoPokedexText[] = _(
+ "Even while eating or sleeping, one of the\n"
+ "heads remains always vigilant for any sign\n"
+ "of danger. When threatened, it flees at\n"
+ "over 60 miles per hour.");
+
+const u8 gDodrioPokedexText[] = _(
+ "A peculiar POKéMON species with three\n"
+ "heads. It vigorously races across grassy\n"
+ "plains even in arid seasons with little\n"
+ "rainfall.");
+
+const u8 gSeelPokedexText[] = _(
+ "SEEL hunt for prey in frigid, ice-covered\n"
+ "seas. When it needs to breathe, it punches\n"
+ "a hole through the ice with the sharply\n"
+ "protruding section of its head.");
+
+const u8 gDewgongPokedexText[] = _(
+ "It loves to snooze on bitterly cold ice.\n"
+ "The sight of this POKéMON sleeping on\n"
+ "a glacier was mistakenly thought to be\n"
+ "a mermaid by a mariner long ago.");
+
+const u8 gGrimerPokedexText[] = _(
+ "Born from polluted sludge in the sea,\n"
+ "GRIMER’s favorite food is anything filthy.\n"
+ "They feed on wastewater pumped out from\n"
+ "factories.");
+
+const u8 gMukPokedexText[] = _(
+ "It prefers warm and humid habitats.\n"
+ "In the summertime, the toxic substances\n"
+ "in its body intensify, making MUK reek like\n"
+ "putrid kitchen garbage.");
+
+const u8 gShellderPokedexText[] = _(
+ "At night, it burrows a hole in the seafloor\n"
+ "with its broad tongue to make a place to\n"
+ "sleep. While asleep, it closes its shell,\n"
+ "but leaves its tongue hanging out.");
+
+const u8 gCloysterPokedexText[] = _(
+ "It swims in the sea by swallowing water,\n"
+ "then jetting it out toward the rear.\n"
+ "The CLOYSTER shoots spikes from its\n"
+ "shell using the same system.");
+
+const u8 gGastlyPokedexText[] = _(
+ "When exposed to a strong wind, a GASTLY’s\n"
+ "gaseous body quickly dwindles away.\n"
+ "They cluster under the eaves of houses\n"
+ "to escape the ravages of wind.");
+
+const u8 gHaunterPokedexText[] = _(
+ "If a HAUNTER beckons you while it is\n"
+ "floating in darkness, don’t approach it.\n"
+ "This POKéMON will try to lick you with its\n"
+ "tongue and steal your life away.");
+
+const u8 gGengarPokedexText[] = _(
+ "Deep in the night, your shadow cast by\n"
+ "a streetlight may suddenly overtake you.\n"
+ "It is actually a GENGAR running past\n"
+ "you, pretending to be your shadow.");
+
+const u8 gOnixPokedexText[] = _(
+ "There is a magnet in its brain that\n"
+ "prevents an ONIX from losing direction\n"
+ "while tunneling. As it grows older, its body\n"
+ "becomes steadily rounder and smoother.");
+
+const u8 gDrowzeePokedexText[] = _(
+ "If your nose becomes itchy while you are\n"
+ "sleeping, it’s a sure sign that a DROWZEE is\n"
+ "standing above your pillow and trying to\n"
+ "eat your dream through your nostrils.");
+
+const u8 gHypnoPokedexText[] = _(
+ "The arcing movement and glitter of the\n"
+ "pendulum in a HYPNO’s hand lull the foe\n"
+ "into deep hypnosis. While searching for\n"
+ "prey, it polishes the pendulum.");
+
+const u8 gKrabbyPokedexText[] = _(
+ "KRABBY live in holes dug into beaches.\n"
+ "On sandy shores with little in the way\n"
+ "of food, they can be seen squabbling with\n"
+ "each other over territory.");
+
+const u8 gKinglerPokedexText[] = _(
+ "It waves its huge, oversized claw in the\n"
+ "air to communicate with others.\n"
+ "But since the claw is so heavy, this\n"
+ "POKéMON quickly tires.");
+
+const u8 gVoltorbPokedexText[] = _(
+ "It bears an uncanny and unexplained\n"
+ "resemblance to a POKé BALL. Because it\n"
+ "explodes at the slightest shock, even\n"
+ "veteran TRAINERS treat it with caution.");
+
+const u8 gElectrodePokedexText[] = _(
+ "They appear in great numbers at electric\n"
+ "power plants. Because they feed on\n"
+ "electricity, they cause massive and\n"
+ "chaotic blackouts in nearby cities.");
+
+const u8 gExeggcutePokedexText[] = _(
+ "It consists of six eggs that care for each\n"
+ "other. The eggs attract each other and\n"
+ "spin around. When cracks increasingly\n"
+ "appear, it is close to evolution.");
+
+const u8 gExeggutorPokedexText[] = _(
+ "Originally from the tropics, EXEGGUTOR’s\n"
+ "heads grow larger from exposure to strong\n"
+ "sunlight. It is said that when the heads\n"
+ "fall, they group to form an EXEGGCUTE.");
+
+const u8 gCubonePokedexText[] = _(
+ "It pines for the mother it will never see\n"
+ "again. Seeing a likeness of its mother in\n"
+ "the full moon, it cries. The stains on the\n"
+ "skull it wears are from its tears.");
+
+const u8 gMarowakPokedexText[] = _(
+ "A MAROWAK is the evolved form of a CUBONE\n"
+ "that has grown tough by overcoming the\n"
+ "grief of losing its mother. Its tempered\n"
+ "and hardened spirit is not easily broken.");
+
+const u8 gHitmonleePokedexText[] = _(
+ "Its legs freely stretch and contract.\n"
+ "Using these springlike limbs, it bowls over\n"
+ "foes with devastating kicks. After battle,\n"
+ "it rubs down its tired legs.");
+
+const u8 gHitmonchanPokedexText[] = _(
+ "A HITMONCHAN is said to possess the\n"
+ "spirit of a boxer who aimed to become the\n"
+ "world champion. Having an indomitable\n"
+ "spirit means that it will never give up.");
+
+const u8 gLickitungPokedexText[] = _(
+ "Whenever it sees something unfamiliar,\n"
+ "it always licks the object because it\n"
+ "memorizes things by texture and taste.\n"
+ "It is somewhat put off by sour things.");
+
+const u8 gKoffingPokedexText[] = _(
+ "Getting up close to a KOFFING will give\n"
+ "you a chance to observe, through its thin\n"
+ "skin, the toxic gases swirling inside. It\n"
+ "blows up at the slightest stimulation.");
+
+const u8 gWeezingPokedexText[] = _(
+ "By diluting its toxic gases with a special\n"
+ "process, the highest grade of perfume can\n"
+ "be extracted. To WEEZING, gases emanating\n"
+ "from garbage are the ultimate feast.");
+
+const u8 gRhyhornPokedexText[] = _(
+ "Once it starts running, it doesn’t stop.\n"
+ "Its tiny brain makes it so stupid that it\n"
+ "can’t remember why it started running in\n"
+ "the first place.");
+
+const u8 gRhydonPokedexText[] = _(
+ "Its horn, which rotates like a drill,\n"
+ "destroys tall buildings with one strike.\n"
+ "It stands on its hind legs, and its brain\n"
+ "is well developed.");
+
+const u8 gChanseyPokedexText[] = _(
+ "CHANSEY lay nutritionally excellent eggs\n"
+ "every day. The eggs are so delicious, they\n"
+ "are eagerly devoured by even those people\n"
+ "who have lost their appetite.");
+
+const u8 gTangelaPokedexText[] = _(
+ "Its vines snap off easily and painlessly\n"
+ "if they are grabbed, allowing it to make a\n"
+ "quick getaway. The lost vines are replaced\n"
+ "by new growth the very next day.");
+
+const u8 gKangaskhanPokedexText[] = _(
+ "If you come across a young KANGASKHAN\n"
+ "playing by itself, never try to catch it.\n"
+ "The baby’s parent is sure to be in the area,\n"
+ "and it will become violently enraged.");
+
+const u8 gHorseaPokedexText[] = _(
+ "By cleverly flicking the fins on its back\n"
+ "side to side, it moves in any direction\n"
+ "while facing forward. It spits ink to\n"
+ "escape if it senses danger.");
+
+const u8 gSeadraPokedexText[] = _(
+ "The poisonous barbs all over its body are\n"
+ "highly valued as ingredients for making\n"
+ "traditional herbal medicine. It shows no\n"
+ "mercy to anything approaching its nest.");
+
+const u8 gGoldeenPokedexText[] = _(
+ "In the springtime, schools of GOLDEEN\n"
+ "can be seen swimming up falls and rivers.\n"
+ "It metes out staggering damage with its\n"
+ "single horn.");
+
+const u8 gSeakingPokedexText[] = _(
+ "It punches holes in boulders on stream-\n"
+ "beds. This is a clever innovation that\n"
+ "prevents its eggs from being attacked or\n"
+ "washed away by the current.");
+
+const u8 gStaryuPokedexText[] = _(
+ "It gathers with others in the night and\n"
+ "makes its red core glow on and off with\n"
+ "the twinkling stars. It can regenerate\n"
+ "limbs if they are severed from its body.");
+
+const u8 gStarmiePokedexText[] = _(
+ "People in ancient times imagined that\n"
+ "STARMIE were transformed from the\n"
+ "reflections of stars that twinkled on\n"
+ "gentle waves at night.");
+
+const u8 gMrmimePokedexText[] = _(
+ "A MR. MIME is a master of pantomime. It can\n"
+ "convince others that something unseeable\n"
+ "actually exists. Once believed, the\n"
+ "imaginary object does become real.");
+
+const u8 gScytherPokedexText[] = _(
+ "Its blindingly fast speed adds to the\n"
+ "sharpness of its twin forearm scythes.\n"
+ "The scythes can slice through thick logs\n"
+ "in one wicked stroke.");
+
+const u8 gJynxPokedexText[] = _(
+ "A JYNX sashays rhythmically as if it were\n"
+ "dancing. Its motions are so bouncingly\n"
+ "alluring, people seeing it are compelled to\n"
+ "shake their hips without noticing.");
+
+const u8 gElectabuzzPokedexText[] = _(
+ "When a storm approaches, it competes with\n"
+ "others to scale heights that are likely to\n"
+ "be stricken by lightning. Some towns use\n"
+ "ELECTABUZZ in place of lightning rods.");
+
+const u8 gMagmarPokedexText[] = _(
+ "In battle, it blows out intense flames from\n"
+ "all over its body to intimidate its foe.\n"
+ "These fiery bursts create heat waves that\n"
+ "ignite grass and trees in the area.");
+
+const u8 gPinsirPokedexText[] = _(
+ "Their pincers are strong enough to\n"
+ "shatter thick logs. Because they dislike\n"
+ "cold, PINSIR burrow and sleep under\n"
+ "the ground on chilly nights.");
+
+const u8 gTaurosPokedexText[] = _(
+ "It is not satisfied unless it is rampaging\n"
+ "at all times. If there is no opponent for\n"
+ "TAUROS to battle, it will charge at thick\n"
+ "trees and knock them down to calm itself.");
+
+const u8 gMagikarpPokedexText[] = _(
+ "Its swimming muscles are weak, so it is\n"
+ "easily washed away by currents. In places\n"
+ "where water pools, you can see many\n"
+ "MAGIKARP deposited there by the flow.");
+
+const u8 gGyaradosPokedexText[] = _(
+ "It is an extremely vicious and violent\n"
+ "POKéMON. When humans begin to fight,\n"
+ "it will appear and burn everything to the\n"
+ "ground with intensely hot flames.");
+
+const u8 gLaprasPokedexText[] = _(
+ "People have driven LAPRAS almost to the\n"
+ "point of extinction. In the evenings,\n"
+ "it is said to sing plaintively as it seeks\n"
+ "what few others of its kind still remain.");
+
+const u8 gDittoPokedexText[] = _(
+ "A DITTO rearranges its cell structure to\n"
+ "transform itself. However, if it tries to\n"
+ "change based on its memory, it will get\n"
+ "details wrong.");
+
+const u8 gEeveePokedexText[] = _(
+ "An EEVEE has an unstable genetic makeup\n"
+ "that suddenly mutates due to its\n"
+ "environment. Radiation from various\n"
+ "STONES causes this POKéMON to evolve.");
+
+const u8 gVaporeonPokedexText[] = _(
+ "VAPOREON underwent a spontaneous\n"
+ "mutation and grew fins and gills that\n"
+ "allow them to live underwater. They have\n"
+ "the ability to freely control water.");
+
+const u8 gJolteonPokedexText[] = _(
+ "Its cells generate weak power that is\n"
+ "amplified by its fur’s static electricity\n"
+ "to drop thunderbolts. The bristling fur is\n"
+ "made of electrically charged needles.");
+
+const u8 gFlareonPokedexText[] = _(
+ "FLAREON’s fluffy fur releases heat into\n"
+ "the air so that its body does not get\n"
+ "excessively hot. Its body temperature can\n"
+ "rise to a maximum of 1,650 degrees F.");
+
+const u8 gPorygonPokedexText[] = _(
+ "It is capable of reverting itself entirely\n"
+ "back to program data in order to enter\n"
+ "cyberspace. A PORYGON is copy-\n"
+ "protected so it cannot be duplicated.");
+
+const u8 gOmanytePokedexText[] = _(
+ "One of the ancient and long-since-extinct\n"
+ "POKéMON that have been regenerated\n"
+ "from fossils by humans. If attacked,\n"
+ "it withdraws into its hard shell.");
+
+const u8 gOmastarPokedexText[] = _(
+ "An OMASTAR uses its tentacles to capture\n"
+ "its prey. It is believed to have become\n"
+ "extinct because its shell grew too large,\n"
+ "making its movements slow and ponderous.");
+
+const u8 gKabutoPokedexText[] = _(
+ "It is a POKéMON that has been regenerated\n"
+ "from a fossil. However, in rare cases, living\n"
+ "examples have been discovered. KABUTO\n"
+ "have not changed for 300 million years.");
+
+const u8 gKabutopsPokedexText[] = _(
+ "KABUTOPS once swam underwater to hunt \n"
+ "for prey. It was apparently evolving from\n"
+ "being a water dweller to living on land as\n"
+ "evident from changes in its gills and legs.");
+
+const u8 gAerodactylPokedexText[] = _(
+ "AERODACTYL is a POKéMON from the age\n"
+ "of dinosaurs. It was regenerated from DNA\n"
+ "extracted from amber. It is imagined to\n"
+ "have been the king of the skies.");
+
+const u8 gSnorlaxPokedexText[] = _(
+ "SNORLAX’s typical day consists of nothing\n"
+ "more than eating and sleeping. It is such\n"
+ "a docile POKéMON that there are children\n"
+ "who use its big belly as a place to play.");
+
+const u8 gArticunoPokedexText[] = _(
+ "ARTICUNO is a legendary bird POKéMON that\n"
+ "can control ice. The flapping of its wings\n"
+ "chills the air. As a result, it is said that\n"
+ "when this POKéMON flies, snow will fall.");
+
+const u8 gZapdosPokedexText[] = _(
+ "ZAPDOS is a legendary bird POKéMON that\n"
+ "has the ability to control electricity.\n"
+ "It usually lives in thunderclouds. It gains\n"
+ "power if it is stricken by lightning bolts.");
+
+const u8 gMoltresPokedexText[] = _(
+ "MOLTRES is a legendary bird POKéMON\n"
+ "that can control fire. If injured, it is said\n"
+ "to dip its body in the molten magma of\n"
+ "a volcano to burn and heal itself.");
+
+const u8 gDratiniPokedexText[] = _(
+ "A DRATINI continually molts and sloughs\n"
+ "off its old skin. It does so because the\n"
+ "life energy within its body steadily builds\n"
+ "to reach uncontrollable levels.");
+
+const u8 gDragonairPokedexText[] = _(
+ "A DRAGONAIR stores an enormous amount of\n"
+ "energy inside its body. It is said to alter\n"
+ "the weather around it by loosing energy\n"
+ "from the crystals on its neck and tail.");
+
+const u8 gDragonitePokedexText[] = _(
+ "It can circle the globe in just 16 hours.\n"
+ "It is a kindhearted POKéMON that leads\n"
+ "lost and foundering ships in a storm\n"
+ "to the safety of land.");
+
+const u8 gMewtwoPokedexText[] = _(
+ "A POKéMON that was created by genetic\n"
+ "manipulation. However, even though the\n"
+ "scientific power of humans made its body,\n"
+ "they failed to give it a warm heart.");
+
+const u8 gMewPokedexText[] = _(
+ "A MEW is said to possess the genes of all\n"
+ "POKéMON. It is capable of making itself\n"
+ "invisible at will, so it entirely avoids\n"
+ "notice even if it approaches people.");
+
+const u8 gChikoritaPokedexText[] = _(
+ "It waves its leaf around to keep foes\n"
+ "at bay. However, a sweet fragrance also\n"
+ "wafts from the leaf, creating a friendly\n"
+ "atmosphere that becalms the battlers.");
+
+const u8 gBayleefPokedexText[] = _(
+ "A BAYLEEF’s neck is ringed by curled-up\n"
+ "leaves. Inside each leaf is a small tree\n"
+ "shoot. The fragrance of this shoot\n"
+ "makes people peppy.");
+
+const u8 gMeganiumPokedexText[] = _(
+ "The fragrance of a MEGANIUM’s flower\n"
+ "soothes and calms emotions. In battle,\n"
+ "it gives off more of its becalming scent\n"
+ "to blunt the foe’s fighting spirit.");
+
+const u8 gCyndaquilPokedexText[] = _(
+ "It flares flames from its back to protect\n"
+ "itself. The fire burns vigorously if the\n"
+ "POKéMON is angry. When it is tired,\n"
+ "it sputters with incomplete combustion.");
+
+const u8 gQuilavaPokedexText[] = _(
+ "It intimidates foes with intense gusts of\n"
+ "flames and superheated air. Its quick\n"
+ "nimbleness lets it dodge attacks even\n"
+ "while scorching an enemy.");
+
+const u8 gTyphlosionPokedexText[] = _(
+ "It can hide behind a shimmering heat haze\n"
+ "that it creates using its intense flames.\n"
+ "TYPHLOSION create blazing explosive\n"
+ "blasts that burn everything to cinders.");
+
+const u8 gTotodilePokedexText[] = _(
+ "Despite its small body, TOTODILE’s jaws\n"
+ "are very powerful. While it may think it is\n"
+ "just playfully nipping, its bite has enough\n"
+ "strength to cause serious injury.");
+
+const u8 gCroconawPokedexText[] = _(
+ "Once its jaws clamp down on its foe, it will\n"
+ "absolutely not let go. Because the tips of\n"
+ "its fangs are forked back like fishhooks,\n"
+ "they become irremovably embedded.");
+
+const u8 gFeraligatrPokedexText[] = _(
+ "It opens its huge mouth to intimidate\n"
+ "enemies. In battle, it runs using its thick\n"
+ "and powerful hind legs to charge the\n"
+ "foe with incredible speed.");
+
+const u8 gSentretPokedexText[] = _(
+ "They take turns standing guard when it\n"
+ "is time to sleep. The sentry awakens the\n"
+ "others if it senses danger. If one becomes\n"
+ "separated, it turns sleepless with fear.");
+
+const u8 gFurretPokedexText[] = _(
+ "A FURRET has a very slim build. When under\n"
+ "attack, it can squirm through narrow\n"
+ "spaces and get away. In spite of its short\n"
+ "limbs, it is very nimble and fleet.");
+
+const u8 gHoothootPokedexText[] = _(
+ "It has an internal organ that senses\n"
+ "the earth’s rotation. Using this special\n"
+ "organ, a HOOTHOOT begins hooting at\n"
+ "precisely the same time every day.");
+
+const u8 gNoctowlPokedexText[] = _(
+ "It unfailingly catches prey in darkness.\n"
+ "NOCTOWL owe their success to superior\n"
+ "vision that allows them to see in minimal\n"
+ "light, and to their supple and silent wings.");
+
+const u8 gLedybaPokedexText[] = _(
+ "LEDYBA communicate using a fluid that\n"
+ "they secrete from where the legs join the\n"
+ "body. They are said to convey feelings to\n"
+ "others by altering the fluid’s scent.");
+
+const u8 gLedianPokedexText[] = _(
+ "It is said that in lands with clean air,\n"
+ "where the stars fill the sky, there live\n"
+ "many LEDIAN. For good reason, they use\n"
+ "the light of the stars as energy.");
+
+const u8 gSpinarakPokedexText[] = _(
+ "The web it spins can be considered its\n"
+ "second nervous system. It is said that a\n"
+ "SPINARAK determines its prey by the tiny\n"
+ "vibrations it feels through the web.");
+
+const u8 gAriadosPokedexText[] = _(
+ "Its feet are tipped with tiny hooked claws\n"
+ "that enable it to scuttle on ceilings and\n"
+ "vertical walls. It constricts its foe with\n"
+ "thin and strong silk webbing.");
+
+const u8 gCrobatPokedexText[] = _(
+ "Over the course of evolution, its hind legs\n"
+ "turned into wings. By alternately resting\n"
+ "its front and rear wings, it can fly all day\n"
+ "without having to stop.");
+
+const u8 gChinchouPokedexText[] = _(
+ "When it senses danger, it discharges\n"
+ "positive and negative electricity from its\n"
+ "two antennae. It lives in depths beyond\n"
+ "sunlight’s reach.");
+
+const u8 gLanturnPokedexText[] = _(
+ "The light-emitting orbs on its back are\n"
+ "very bright. They are formed from a part of\n"
+ "its dorsal fin. This POKéMON illuminates\n"
+ "the inky darkness of deep seas.");
+
+const u8 gPichuPokedexText[] = _(
+ "It is still inept at retaining electricity.\n"
+ "When it is startled, it discharges power\n"
+ "accidentally. It gets better at holding\n"
+ "power as it grows older.");
+
+const u8 gCleffaPokedexText[] = _(
+ "On nights with many shooting stars,\n"
+ "CLEFFA can be seen dancing in a ring.\n"
+ "They dance until daybreak, when they\n"
+ "quench their thirst with the morning dew.");
+
+const u8 gIgglybuffPokedexText[] = _(
+ "Its soft and pliable body is very bouncy.\n"
+ "When it sings continuously with all its\n"
+ "might, its body steadily turns a deepening\n"
+ "pink color.");
+
+const u8 gTogepiPokedexText[] = _(
+ "As its energy, it uses the feelings of\n"
+ "compassion and pleasure exuded by\n"
+ "people and POKéMON. It stores up happy\n"
+ "feelings in its shell, then shares them out.");
+
+const u8 gTogeticPokedexText[] = _(
+ "It is said to be a POKéMON that brings good\n"
+ "fortune. When it spots someone who is pure\n"
+ "of heart, a TOGETIC appears and shares its\n"
+ "happiness with that person.");
+
+const u8 gNatuPokedexText[] = _(
+ "It runs up short trees that grow on the\n"
+ "savanna to peck at new shoots.\n"
+ "A NATU’s eyes look as if they are\n"
+ "always observing something.");
+
+const u8 gXatuPokedexText[] = _(
+ "It has the enigmatic power of foreseeing\n"
+ "the future. Some people in different lands\n"
+ "have long believed that XATU are\n"
+ "emissaries from another world.");
+
+const u8 gMareepPokedexText[] = _(
+ "Its fluffy wool rubs together and builds\n"
+ "a static charge. The more energy is\n"
+ "charged, the more brightly the lightbulb\n"
+ "at the tip of its tail glows.");
+
+const u8 gFlaaffyPokedexText[] = _(
+ "Its fleece quality changes to generate\n"
+ "strong static electricity with a small\n"
+ "amount of wool. The bare, slick parts of its\n"
+ "hide are shielded against electricity.");
+
+const u8 gAmpharosPokedexText[] = _(
+ "It gives off so much light that it can be\n"
+ "seen even from space. People in the old\n"
+ "days used its light to send signals back\n"
+ "and forth with others far away.");
+
+const u8 gBellossomPokedexText[] = _(
+ "Its flower petals deepen in color through\n"
+ "exposure to sunlight. When cloudy weather\n"
+ "persists, it does a dance that is thought\n"
+ "to be a ritual for summoning the sun.");
+
+const u8 gMarillPokedexText[] = _(
+ "Its body is covered with water-repellent\n"
+ "fur. Because of the fur, it can swim\n"
+ "through water at high speed without being\n"
+ "slowed by the water’s resistance.");
+
+const u8 gAzumarillPokedexText[] = _(
+ "It lives in water virtually all day long.\n"
+ "Its body color and pattern act as\n"
+ "camouflage that makes it tough for\n"
+ "enemies to spot in water.");
+
+const u8 gSudowoodoPokedexText[] = _(
+ "It mimics a tree to avoid being attacked\n"
+ "by enemies. But since its forelegs\n"
+ "remain green throughout the year, it is\n"
+ "easily identified as a fake in the winter.");
+
+const u8 gPolitoedPokedexText[] = _(
+ "The curled hair on its head proves its\n"
+ "status as a king. It is said that the\n"
+ "longer and curlier the hair, the more\n"
+ "respect it earns from its peers.");
+
+const u8 gHoppipPokedexText[] = _(
+ "This POKéMON drifts and floats with the\n"
+ "wind. If it senses the approach of strong\n"
+ "winds, a HOPPIP links leaves with others\n"
+ "to prepare against being blown away.");
+
+const u8 gSkiploomPokedexText[] = _(
+ "It blossoms when the temperature rises\n"
+ "above 64 degrees F. Because its flower’s\n"
+ "blooming changes with the temperature,\n"
+ "it is sometimes used as a thermometer.");
+
+const u8 gJumpluffPokedexText[] = _(
+ "JUMPLUFF ride warm southern winds to\n"
+ "cross the sea and fly to foreign lands.\n"
+ "This POKéMON lands when it encounters\n"
+ "cold air while it is floating.");
+
+const u8 gAipomPokedexText[] = _(
+ "Its tail ends with a dexterous, handlike\n"
+ "appendage. However, because it uses the\n"
+ "tail so much, AIPOM’s real hands have\n"
+ "become rather clumsy.");
+
+const u8 gSunkernPokedexText[] = _(
+ "SUNKERN try to minimize movement to\n"
+ "conserve the nutrients they have stored\n"
+ "in their bodies for evolution. They will\n"
+ "not eat, subsisting only on morning dew.");
+
+const u8 gSunfloraPokedexText[] = _(
+ "SUNFLORA convert solar energy into\n"
+ "nutrition. They are highly active in the\n"
+ "warm daytime but suddenly stop moving as\n"
+ "soon as the sun sets.");
+
+const u8 gYanmaPokedexText[] = _(
+ "It can see 360 degrees without moving\n"
+ "its eyes. It is a great flier capable of\n"
+ "making sudden stops and turning midair to\n"
+ "quickly chase down targeted prey.");
+
+const u8 gWooperPokedexText[] = _(
+ "WOOPER usually live in water but come\n"
+ "out onto land seeking food occasionally.\n"
+ "On land, they coat their bodies with a\n"
+ "gooey, toxic film.");
+
+const u8 gQuagsirePokedexText[] = _(
+ "A QUAGSIRE hunts by leaving its mouth wide\n"
+ "open in water and waiting for its prey to\n"
+ "blunder in. Because it doesn’t move, it\n"
+ "does not get very hungry.");
+
+const u8 gEspeonPokedexText[] = _(
+ "An ESPEON is extremely loyal to any\n"
+ "TRAINER it considers to be worthy. It is\n"
+ "said to have developed precognitive\n"
+ "powers to protect its TRAINER from harm.");
+
+const u8 gUmbreonPokedexText[] = _(
+ "UMBREON evolved from exposure to the\n"
+ "moon’s energy pulses. It lurks in darkness\n"
+ "and waits for its foes to move. The rings\n"
+ "on its body glow when it leaps to attack.");
+
+const u8 gMurkrowPokedexText[] = _(
+ "MURKROW were feared as the alleged\n"
+ "bearers of ill fortune. It shows strong\n"
+ "interest in anything that sparkles. It will\n"
+ "even try to steal rings from women.");
+
+const u8 gSlowkingPokedexText[] = _(
+ "It undertakes research every day to\n"
+ "solve the mysteries of the world.\n"
+ "However, it apparently forgets everything\n"
+ "if the SHELLDER on its head comes off.");
+
+const u8 gMisdreavusPokedexText[] = _(
+ "A MISDREAVUS frightens people with a\n"
+ "creepy, sobbing cry. It apparently uses\n"
+ "its red spheres to absorb the fear of foes\n"
+ "as its nutrition.");
+
+const u8 gUnownPokedexText[] = _(
+ "This POKéMON is shaped like ancient text\n"
+ "characters. Although research is ongoing,\n"
+ "it is a mystery as to which came first,\n"
+ "the ancient writings or the various UNOWN.");
+
+const u8 gWobbuffetPokedexText[] = _(
+ "Usually docile, a WOBBUFFET strikes back\n"
+ "ferociously if its black tail is attacked.\n"
+ "It makes its lair in caves where it waits\n"
+ "for nightfall.");
+
+const u8 gGirafarigPokedexText[] = _(
+ "A GIRAFARIG is an herbivore--it eats\n"
+ "grass and tree shoots. While it is eating,\n"
+ "its tail makes chewing and swallowing\n"
+ "motions as if it were also eating.");
+
+const u8 gPinecoPokedexText[] = _(
+ "A PINECO hangs from a tree branch and\n"
+ "waits for prey. While eating, if it is\n"
+ "disturbed by someone shaking its tree, it\n"
+ "falls on the ground and suddenly explodes.");
+
+const u8 gForretressPokedexText[] = _(
+ "It keeps itself inside its steel shell.\n"
+ "The shell is opened when it is catching\n"
+ "prey, but it is so quick that the shell’s\n"
+ "inside cannot be seen.");
+
+const u8 gDunsparcePokedexText[] = _(
+ "Its drill-tipped tail is used to burrow into\n"
+ "the ground backwards. This POKéMON is\n"
+ "known to make its nest in complex shapes\n"
+ "deep under the ground.");
+
+const u8 gGligarPokedexText[] = _(
+ "It glides without making a single sound.\n"
+ "It grasps the face of its foe using its\n"
+ "hind and large front claws, then stabs\n"
+ "with its poison barb.");
+
+const u8 gSteelixPokedexText[] = _(
+ "STEELIX live even further underground\n"
+ "than ONIX. This POKéMON is known to dig\n"
+ "toward the earth’s core, reaching a depth\n"
+ "of over six-tenths of a mile underground.");
+
+const u8 gSnubbullPokedexText[] = _(
+ "By baring its fangs and making a scary\n"
+ "face, it sends smaller POKéMON scurrying\n"
+ "in terror. The SNUBBULL does seem a\n"
+ "little sad at making its foes flee.");
+
+const u8 gGranbullPokedexText[] = _(
+ "It has a particularly well-developed lower\n"
+ "jaw. The huge fangs are heavy, causing\n"
+ "it to tilt its head. Unless it is startled, it\n"
+ "will not try to bite.");
+
+const u8 gQwilfishPokedexText[] = _(
+ "A QWILFISH uses the pressure of water\n"
+ "it swallows to shoot toxic quills all at\n"
+ "once from all over its body. It finds\n"
+ "swimming to be somewhat challenging.");
+
+const u8 gScizorPokedexText[] = _(
+ "A SCIZOR has a body with the hardness of\n"
+ "steel. It is not easily fazed by ordinary\n"
+ "sorts of attacks. It flaps its wings to\n"
+ "regulate its body temperature.");
+
+const u8 gShucklePokedexText[] = _(
+ "A SHUCKLE hides under rocks, keeping its\n"
+ "body concealed inside its shell while\n"
+ "eating stored berries. The berries mix with\n"
+ "its body fluids to become a juice.");
+
+const u8 gHeracrossPokedexText[] = _(
+ "They gather in forests seeking the sweet\n"
+ "sap of trees. It is completely clad in a\n"
+ "steel-hard shell. It is proud of its horn,\n"
+ "which it uses to fling foes.");
+
+const u8 gSneaselPokedexText[] = _(
+ "A SNEASEL scales trees by punching its\n"
+ "hooked claws into the bark. It seeks out\n"
+ "unguarded nests and steals eggs for food\n"
+ "while the parents are away.");
+
+const u8 gTeddiursaPokedexText[] = _(
+ "It licks its palms that are sweetened by\n"
+ "being soaked in honey. A TEDDIURSA makes\n"
+ "its own honey by blending fruits and pollen\n"
+ "collected by BEEDRILL.");
+
+const u8 gUrsaringPokedexText[] = _(
+ "In forests, it is said that there are many\n"
+ "streams and towering trees where an\n"
+ "URSARING gathers food. It walks through\n"
+ "its forest collecting food every day.");
+
+const u8 gSlugmaPokedexText[] = _(
+ "It is a species of POKéMON that lives in\n"
+ "volcanic areas. If its body cools, its skin\n"
+ "hardens and immobilizes it. To avoid that,\n"
+ "it sleeps near magma.");
+
+const u8 gMagcargoPokedexText[] = _(
+ "The shell on its back is made of hardened\n"
+ "magma. Tens of thousands of years spent\n"
+ "living in volcanic craters have turned\n"
+ "MAGCARGO’s bodies into magma.");
+
+const u8 gSwinubPokedexText[] = _(
+ "It roots for food by rubbing its snout\n"
+ "against the ground. Its favorite food is a\n"
+ "mushroom that grows under dried grass.\n"
+ "It occasionally roots out hot springs.");
+
+const u8 gPiloswinePokedexText[] = _(
+ "A PILOSWINE is covered by a thick coat\n"
+ "of long hair for enduring freezing cold.\n"
+ "It uses its tusks to dig up food that has\n"
+ "been buried under ice.");
+
+const u8 gCorsolaPokedexText[] = _(
+ "CORSOLA live in warm southern seas.\n"
+ "If the sea becomes polluted, the beautiful\n"
+ "coral stalks become discolored and crumble\n"
+ "away in tatters.");
+
+const u8 gRemoraidPokedexText[] = _(
+ "A REMORAID uses its abdominal muscles\n"
+ "to forcefully expel swallowed water, then\n"
+ "shoot down flying prey. When evolution\n"
+ "approaches, it travels down rivers.");
+
+const u8 gOctilleryPokedexText[] = _(
+ "It ensnares its foe with its suction-\n"
+ "cupped tentacles before delivering the\n"
+ "finishing blow. If the foe turns out to be\n"
+ "too strong, it spews ink to escape.");
+
+const u8 gDelibirdPokedexText[] = _(
+ "It carries food bundled up in its tail.\n"
+ "There was a famous explorer who\n"
+ "managed to scale Mt. Everest thanks\n"
+ "to a DELIBIRD sharing its food.");
+
+const u8 gMantinePokedexText[] = _(
+ "On sunny days, schools of MANTINE can be\n"
+ "seen elegantly leaping over the waves.\n"
+ "It is not bothered by the REMORAID that\n"
+ "hitches rides.");
+
+const u8 gSkarmoryPokedexText[] = _(
+ "A POKéMON that has a body and wings of\n"
+ "steel. People in the past used feathers\n"
+ "fallen from SKARMORY to make swords and\n"
+ "knives.");
+
+const u8 gHoundourPokedexText[] = _(
+ "HOUNDOUR communicate with each other\n"
+ "using a variety of cries to corner their\n"
+ "prey. This POKéMON’s remarkable teamwork\n"
+ "is simply unparalleled.");
+
+const u8 gHoundoomPokedexText[] = _(
+ "In a HOUNDOOM pack, the one with its horns\n"
+ "raked sharply back serves a leadership\n"
+ "role. They choose their leader by fighting\n"
+ "among themselves.");
+
+const u8 gKingdraPokedexText[] = _(
+ "It sleeps quietly, deep on the seafloor.\n"
+ "When it comes up to the surface, it\n"
+ "creates a huge whirlpool that can swallow\n"
+ "even ships.");
+
+const u8 gPhanpyPokedexText[] = _(
+ "PHANPY’s big ears serve as broad fans.\n"
+ "When it becomes hot, it flaps the ears\n"
+ "busily to cool down. Even the young are\n"
+ "very strong.");
+
+const u8 gDonphanPokedexText[] = _(
+ "A DONPHAN is so strong it can easily haul\n"
+ "a dump truck. Its hide has toughened to a\n"
+ "rock-hard state. An ordinary sort of\n"
+ "attack won’t even leave a scratch.");
+
+const u8 gPorygon2PokedexText[] = _(
+ "It was created by humans using the power\n"
+ "of science. It has been given artificial\n"
+ "intelligence that enables it to learn new\n"
+ "gestures and emotions on its own.");
+
+const u8 gStantlerPokedexText[] = _(
+ "STANTLER’s magnificent antlers were\n"
+ "once traded at high prices as works of art.\n"
+ "As a result, this POKéMON was hunted\n"
+ "close to extinction.");
+
+const u8 gSmearglePokedexText[] = _(
+ "A SMEARGLE marks its territory using a\n"
+ "fluid that leaks out from the tip of its\n"
+ "tail. About 5,000 different marks left by\n"
+ "this POKéMON have been found.");
+
+const u8 gTyroguePokedexText[] = _(
+ "TYROGUE become stressed out if they do\n"
+ "not get to train every day. When raising\n"
+ "this POKéMON, the TRAINER must establish\n"
+ "a regular training schedule.");
+
+const u8 gHitmontopPokedexText[] = _(
+ "Its technique of kicking while spinning is\n"
+ "a remarkable mix of both offense and\n"
+ "defense. HITMONTOP travel faster\n"
+ "spinning than they do walking.");
+
+const u8 gSmoochumPokedexText[] = _(
+ "It actively runs about, but also falls\n"
+ "often. Whenever it falls, it will check its\n"
+ "reflection on a lake’s surface to make\n"
+ "sure its face hasn’t become dirty.");
+
+const u8 gElekidPokedexText[] = _(
+ "If it touches metal and discharges the\n"
+ "electricity it has stored in its body, an\n"
+ "ELEKID begins swinging its arms in circles\n"
+ "to recharge itself.");
+
+const u8 gMagbyPokedexText[] = _(
+ "If a MAGBY is spouting yellow flames from\n"
+ "its mouth, it is in good health. When it is\n"
+ "fatigued, black smoke will be mixed in with\n"
+ "the flames.");
+
+const u8 gMiltankPokedexText[] = _(
+ "It gives over five gallons of milk daily.\n"
+ "Its sweet milk is enjoyed by children and\n"
+ "grown-ups alike. People who can’t drink\n"
+ "milk turn it into yogurt and eat it instead.");
+
+const u8 gBlisseyPokedexText[] = _(
+ "If it senses sadness with its fluffy fur,\n"
+ "a BLISSEY will rush over to the sad person,\n"
+ "however far away, to share an egg of\n"
+ "happiness that brings a smile to any face.");
+
+const u8 gRaikouPokedexText[] = _(
+ "RAIKOU embodies the speed of lightning.\n"
+ "Its roars send shock waves shuddering\n"
+ "through the air and ground as if\n"
+ "lightning bolts were crashing down.");
+
+const u8 gEnteiPokedexText[] = _(
+ "ENTEI embodies the passion of magma.\n"
+ "It is thought to have been born in the\n"
+ "eruption of a volcano. It blasts fire that\n"
+ "consumes all that it touches.");
+
+const u8 gSuicunePokedexText[] = _(
+ "SUICUNE embodies the compassion of\n"
+ "a pure spring of water. It runs across\n"
+ "the land with gliding elegance. It has the\n"
+ "power to purify dirty water.");
+
+const u8 gLarvitarPokedexText[] = _(
+ "A LARVITAR is born deep under the ground.\n"
+ "It must eat its way through the soil above\n"
+ "and reach the surface for it to see its\n"
+ "parents’ faces.");
+
+const u8 gPupitarPokedexText[] = _(
+ "A PUPITAR creates a gas inside its body\n"
+ "that it ejects under compression to propel\n"
+ "itself like a jet. Its body can withstand\n"
+ "a collision with solid steel.");
+
+const u8 gTyranitarPokedexText[] = _(
+ "A TYRANITAR is so overwhelmingly powerful,\n"
+ "it can bring down a whole mountain to make\n"
+ "its nest. It roams in mountains seeking\n"
+ "new opponents to fight.");
+
+const u8 gLugiaPokedexText[] = _(
+ "LUGIA is so powerful even a light\n"
+ "fluttering of its wings can blow apart\n"
+ "houses. As a result, it chooses to live out\n"
+ "of sight deep under the sea.");
+
+const u8 gHoOhPokedexText[] = _(
+ "Its feathers--which glow in seven colors\n"
+ "depending on the angle at which they are\n"
+ "struck by light--are thought to bring joy.\n"
+ "It is said to live at the foot of a rainbow.");
+
+const u8 gCelebiPokedexText[] = _(
+ "This POKéMON came from the future by\n"
+ "crossing over time. It is thought that so\n"
+ "long as CELEBI appears, a bright and\n"
+ "shining future awaits us.");
+
+const u8 gTreeckoPokedexText[] = _(
+ "It makes its nest in a giant tree in the\n"
+ "forest. It ferociously guards against\n"
+ "anything nearing its territory. It is said\n"
+ "to be the protector of the forest’s trees.");
+
+const u8 gGrovylePokedexText[] = _(
+ "Leaves grow out of this POKéMON’s body.\n"
+ "They help obscure a GROVYLE from the eyes\n"
+ "of its enemies while it is in a thickly\n"
+ "overgrown forest.");
+
+const u8 gSceptilePokedexText[] = _(
+ "In the jungle, its power is without equal.\n"
+ "This POKéMON carefully grows trees and\n"
+ "plants. It regulates its body temperature\n"
+ "by basking in sunlight.");
+
+const u8 gTorchicPokedexText[] = _(
+ "If attacked, it strikes back by spitting\n"
+ "balls of fire it forms in its stomach.\n"
+ "A TORCHIC dislikes darkness because it\n"
+ "can’t see its surroundings.");
+
+const u8 gCombuskenPokedexText[] = _(
+ "It lashes out with 10 kicks per second.\n"
+ "Its strong fighting instinct compels it\n"
+ "to keep up its offensive until the\n"
+ "opponent gives up.");
+
+const u8 gBlazikenPokedexText[] = _(
+ "It learns martial arts that use punches\n"
+ "and kicks. Every several years, its old\n"
+ "feathers burn off, and new, supple\n"
+ "feathers grow back in their place.");
+
+const u8 gMudkipPokedexText[] = _(
+ "On land, it can powerfully lift large\n"
+ "boulders by planting its four feet and\n"
+ "heaving. It sleeps by burying itself in soil\n"
+ "at the water’s edge.");
+
+const u8 gMarshtompPokedexText[] = _(
+ "Its toughened hind legs enable it to stand\n"
+ "upright. Because it weakens if its skin\n"
+ "dries out, it replenishes fluids by playing\n"
+ "in mud.");
+
+const u8 gSwampertPokedexText[] = _(
+ "If it senses the approach of a storm and\n"
+ "a tidal wave, it protects its seaside nest\n"
+ "by piling up boulders. It swims as fast as\n"
+ "a jet ski.");
+
+const u8 gPoochyenaPokedexText[] = _(
+ "It savagely threatens foes with bared\n"
+ "fangs. It chases after fleeing targets\n"
+ "tenaciously. It turns tail and runs,\n"
+ "however, if the foe strikes back.");
+
+const u8 gMightyenaPokedexText[] = _(
+ "In the wild, MIGHTYENA live in a pack.\n"
+ "They never defy their leader’s orders.\n"
+ "They defeat foes with perfectly\n"
+ "coordinated teamwork.");
+
+const u8 gZigzagoonPokedexText[] = _(
+ "Rubbing its nose against the ground, it\n"
+ "always wanders about back and forth in\n"
+ "search of something. It is distinguished\n"
+ "by the zigzag footprints it leaves.");
+
+const u8 gLinoonePokedexText[] = _(
+ "It is exceedingly fast if it only has to run\n"
+ "in a straight line. When it spots pond-\n"
+ "dwelling prey underwater, it quickly leaps\n"
+ "in and catches it with its sharp claws.");
+
+const u8 gWurmplePokedexText[] = _(
+ "It sticks to tree branches and eats\n"
+ "leaves. The thread it spits from its mouth,\n"
+ "which becomes gooey when it touches\n"
+ "air, slows the movement of its foes.");
+
+const u8 gSilcoonPokedexText[] = _(
+ "It prepares for evolution using the\n"
+ "energy it stored while it was a WURMPLE.\n"
+ "It keeps watch over the surroundings with\n"
+ "its two eyes.");
+
+const u8 gBeautiflyPokedexText[] = _(
+ "Its colorfully patterned wings are its\n"
+ "most prominent feature. It flies through\n"
+ "flower-covered fields collecting pollen.\n"
+ "It attacks ferociously when angered.");
+
+const u8 gCascoonPokedexText[] = _(
+ "To avoid detection by its enemies, it hides\n"
+ "motionlessly beneath large leaves and in\n"
+ "the gaps of branches. It also attaches\n"
+ "dead leaves to its body for camouflage.");
+
+const u8 gDustoxPokedexText[] = _(
+ "It is a nocturnal POKéMON that flies from\n"
+ "fields and mountains to the attraction of\n"
+ "streetlights at night. It looses highly\n"
+ "toxic powder from its wings.");
+
+const u8 gLotadPokedexText[] = _(
+ "This POKéMON lives in ponds with clean\n"
+ "water. It is known to ferry small POKéMON\n"
+ "across ponds by carrying them on the\n"
+ "broad leaf on its head.");
+
+const u8 gLombrePokedexText[] = _(
+ "In the evening, it takes great delight in\n"
+ "popping out of rivers and startling people.\n"
+ "It feeds on aquatic moss that grows on\n"
+ "rocks in the riverbed.");
+
+const u8 gLudicoloPokedexText[] = _(
+ "When it hears festive music, all the cells\n"
+ "in its body become stimulated, and it\n"
+ "begins moving in rhythm. It does not\n"
+ "quail even when it faces a tough opponent.");
+
+const u8 gSeedotPokedexText[] = _(
+ "It hangs off branches and absorbs\n"
+ "nutrients. When it finishes eating, its\n"
+ "body becomes so heavy that it drops to\n"
+ "the ground with a thump.");
+
+const u8 gNuzleafPokedexText[] = _(
+ "A forest-dwelling POKéMON that is skilled\n"
+ "at climbing trees. Its long and pointed\n"
+ "nose is its weak point. It loses power if\n"
+ "the nose is gripped.");
+
+const u8 gShiftryPokedexText[] = _(
+ "It is said to arrive on chilly, wintry winds.\n"
+ "Feared from long ago as the guardian of\n"
+ "forests, this POKéMON lives in a deep\n"
+ "forest where people do not venture.");
+
+const u8 gTaillowPokedexText[] = _(
+ "Although it is small, it is very courageous.\n"
+ "It will take on a larger SKARMORY on an\n"
+ "equal footing. However, its will weakens if\n"
+ "it becomes hungry.");
+
+const u8 gSwellowPokedexText[] = _(
+ "A SWELLOW dives upon prey from far above.\n"
+ "It never misses its targets. It takes to\n"
+ "the skies in search of lands with a warm\n"
+ "climate.");
+
+const u8 gWingullPokedexText[] = _(
+ "It makes its nest on a sheer cliff at the\n"
+ "edge of the sea. It has trouble keeping\n"
+ "its wings flapping in flight. Instead, it\n"
+ "soars on updrafts.");
+
+const u8 gPelipperPokedexText[] = _(
+ "It skims the tops of waves as it flies.\n"
+ "When it spots prey, it uses its large beak\n"
+ "to scoop up the victim with water.\n"
+ "It protects its eggs in its beak.");
+
+const u8 gRaltsPokedexText[] = _(
+ "A RALTS has the power to sense the\n"
+ "emotions of people and POKéMON with the\n"
+ "horns on its head. It takes cover if it\n"
+ "senses any hostility.");
+
+const u8 gKirliaPokedexText[] = _(
+ "A KIRLIA has the psychic power to create \n"
+ "a rip in the dimensions and see into the\n"
+ "future. It is said to dance with pleasure\n"
+ "on sunny mornings.");
+
+const u8 gGardevoirPokedexText[] = _(
+ "It apparently does not feel the pull of\n"
+ "gravity because it supports itself with\n"
+ "psychic power. It will give its life to\n"
+ "protect its TRAINER.");
+
+const u8 gSurskitPokedexText[] = _(
+ "They gather on puddles after evening\n"
+ "downpours, gliding across the surface\n"
+ "of water as if sliding. It secretes honey\n"
+ "with a sweet aroma from its head.");
+
+const u8 gMasquerainPokedexText[] = _(
+ "It intimidates foes with the large eyelike\n"
+ "patterns on its antennae. Because it can’t\n"
+ "fly if its wings get wet, it shelters itself\n"
+ "from rain under large trees and eaves.");
+
+const u8 gShroomishPokedexText[] = _(
+ "It loves to eat damp, composted soil in\n"
+ "forests. If you enter a forest after a\n"
+ "long rain, you can see many SHROOMISH\n"
+ "feasting on composted soil.");
+
+const u8 gBreloomPokedexText[] = _(
+ "It scatters spores from holes in the cap\n"
+ "on its head. It loves warm and humid\n"
+ "climates. It feeds on trees and plants in\n"
+ "fields and forests.");
+
+const u8 gSlakothPokedexText[] = _(
+ "It sleeps virtually all day and night long.\n"
+ "It doesn’t change its nest its entire life,\n"
+ "but it sometimes travels great distances\n"
+ "by swimming in rivers.");
+
+const u8 gVigorothPokedexText[] = _(
+ "It can’t keep still because its blood boils\n"
+ "with energy. It runs through the fields\n"
+ "and mountains all day to calm itself. If it\n"
+ "doesn’t, it can’t sleep at night.");
+
+const u8 gSlakingPokedexText[] = _(
+ "Hordes of SLAKING gather around trees\n"
+ "when fruits come into season. They wait\n"
+ "around patiently for ripened fruits to fall\n"
+ "out of the trees.");
+
+const u8 gNincadaPokedexText[] = _(
+ "It makes its nest at the roots of a mighty\n"
+ "tree. Using its whiskerlike antennae, it\n"
+ "probes its surroundings in the\n"
+ "pitch-black darkness of soil.");
+
+const u8 gNinjaskPokedexText[] = _(
+ "Because it darts about vigorously at high\n"
+ "speed, it is very difficult to see. Hearing\n"
+ "its distinctive cries for too long induces\n"
+ "a headache.");
+
+const u8 gShedinjaPokedexText[] = _(
+ "A peculiar POKéMON that floats in air even\n"
+ "though its wings remain completely still.\n"
+ "The inside of its body is hollow and\n"
+ "utterly dark.");
+
+const u8 gWhismurPokedexText[] = _(
+ "Its cries equal a jet plane in volume.\n"
+ "It inhales through its ear canals. Because\n"
+ "of this system, it can cry continually\n"
+ "without having to catch its breath.");
+
+const u8 gLoudredPokedexText[] = _(
+ "It positions the round speakers on its\n"
+ "head to assail foes with ultrasonic waves\n"
+ "at massive volume. It builds power by\n"
+ "stomping the ground.");
+
+const u8 gExploudPokedexText[] = _(
+ "It has sound-generating organs all over\n"
+ "its body. It communicates with others by\n"
+ "adjusting the tone and volume of the cries\n"
+ "it emits.");
+
+const u8 gMakuhitaPokedexText[] = _(
+ "It loves to toughen up its body above all\n"
+ "else. If you hear quaking rumbles in a cave,\n"
+ "it is the sound of MAKUHITA undertaking\n"
+ "strenuous training.");
+
+const u8 gHariyamaPokedexText[] = _(
+ "It has the habit of challenging others\n"
+ "without hesitation to tests of strength.\n"
+ "It’s been known to stand on train tracks\n"
+ "and stop trains using forearm thrusts.");
+
+const u8 gAzurillPokedexText[] = _(
+ "Its tail, which is packed with nutrition,\n"
+ "is very bouncy like a rubber ball. On sunny\n"
+ "days they gather at the edge of water and\n"
+ "splash about for fun.");
+
+const u8 gNosepassPokedexText[] = _(
+ "Its body emits a powerful magnetism.\n"
+ "It feeds on prey that is pulled in by the\n"
+ "force. Its magnetism is stronger in cold\n"
+ "seasons.");
+
+const u8 gSkittyPokedexText[] = _(
+ "A SKITTY’s adorably cute behavior makes it\n"
+ "highly popular. In battle, it makes its tail\n"
+ "puff out. It threatens foes with a sharp\n"
+ "growl.");
+
+const u8 gDelcattyPokedexText[] = _(
+ "Rather than keeping a permanent lair,\n"
+ "it habitually seeks comfortable spots and\n"
+ "sleeps there. It is nocturnal and becomes\n"
+ "active at dusk.");
+
+const u8 gSableyePokedexText[] = _(
+ "It digs branching holes in caves using its\n"
+ "sharp claws in search of food--raw gems.\n"
+ "A SABLEYE lurks in darkness and is seen\n"
+ "only rarely.");
+
+const u8 gMawilePokedexText[] = _(
+ "Its giant jaws are actually steel horns\n"
+ "that transformed. It fools foes into\n"
+ "complacency with its adorable gestures,\n"
+ "then chomps them with its huge jaws.");
+
+const u8 gAronPokedexText[] = _(
+ "A POKéMON that is clad in steel armor.\n"
+ "A new suit of armor is made when it evolves.\n"
+ "The old, discarded armor is salvaged as\n"
+ "metal for making iron products.");
+
+const u8 gLaironPokedexText[] = _(
+ "When two LAIRON meet in the wild, they\n"
+ "fight for territory by bashing into each\n"
+ "other with their steel bodies. The sound\n"
+ "of their collision carries for miles.");
+
+const u8 gAggronPokedexText[] = _(
+ "Its iron horns grow longer a little at\n"
+ "a time. They are used to determine the\n"
+ "AGGRON’s age. The gouges in its armor are\n"
+ "worn with pride as mementos from battles.");
+
+const u8 gMedititePokedexText[] = _(
+ "It continually meditates for hours every\n"
+ "day. As a result of rigorous and dedicated\n"
+ "yoga training, it has tempered its\n"
+ "spiritual power so much it can fly.");
+
+const u8 gMedichamPokedexText[] = _(
+ "Through crushingly harsh yoga training, it\n"
+ "gained the power to foretell its foe’s\n"
+ "actions. It battles with elegant, dance-\n"
+ "like movement.");
+
+const u8 gElectrikePokedexText[] = _(
+ "It generates electricity using friction\n"
+ "from the atmosphere. In seasons with\n"
+ "especially arid air, its entire body blazes\n"
+ "with violent showers of sparks.");
+
+const u8 gManectricPokedexText[] = _(
+ "Because lightning falls in their vicinities,\n"
+ "MANECTRIC were thought to have been born\n"
+ "from lightning. In battle, they create\n"
+ "thunderclouds.");
+
+const u8 gPluslePokedexText[] = _(
+ "It has the trait of cheering on its fellow\n"
+ "POKéMON. By shorting out the electricity\n"
+ "it releases from its paws, it creates\n"
+ "pom-poms for cheering.");
+
+const u8 gMinunPokedexText[] = _(
+ "At a meeting of POKéMON academics, it was\n"
+ "announced that simultaneous exposure to\n"
+ "electricity from a PLUSLE and MINUN will\n"
+ "promote circulation and boost vitality.");
+
+const u8 gVolbeatPokedexText[] = _(
+ "With their taillights lit, VOLBEAT fly in\n"
+ "a swarm, drawing geometric designs in the\n"
+ "night sky. They move their nests if their\n"
+ "pond water becomes dirty.");
+
+const u8 gIllumisePokedexText[] = _(
+ "A nocturnal POKéMON that becomes active\n"
+ "upon nightfall. It leads a VOLBEAT swarm\n"
+ "to draw patterns in the night sky. Over 200\n"
+ "different patterns have been confirmed.");
+
+const u8 gRoseliaPokedexText[] = _(
+ "A ROSELIA that drinks nutritionally rich\n"
+ "springwater blooms with lovely flowers.\n"
+ "The fragrance of its flowers has the\n"
+ "effect of making its foes careless.");
+
+const u8 gGulpinPokedexText[] = _(
+ "This POKéMON’s stomach fluid can even\n"
+ "digest scrap iron. In one gulp, it can\n"
+ "swallow something that is as large as\n"
+ "itself.");
+
+const u8 gSwalotPokedexText[] = _(
+ "Its powerful stomach acid is capable of\n"
+ "digesting almost anything. The one thing\n"
+ "in the whole world a SWALOT can’t digest is\n"
+ "its own stomach.");
+
+const u8 gCarvanhaPokedexText[] = _(
+ "CARVANHA attack ships in swarms, making\n"
+ "them sink. Although it is said to be a very\n"
+ "vicious POKéMON, it timidly flees as soon\n"
+ "as it finds itself alone.");
+
+const u8 gSharpedoPokedexText[] = _(
+ "The vicious and sly gangster of the sea.\n"
+ "Its skin is specially textured to minimize\n"
+ "drag in water. Its speed tops out at over\n"
+ "75 miles per hour.");
+
+const u8 gWailmerPokedexText[] = _(
+ "While this POKéMON usually lives in the sea,\n"
+ "it can survive on land, although not too\n"
+ "long. It loses vitality if its body becomes\n"
+ "dried out.");
+
+const u8 gWailordPokedexText[] = _(
+ "It breathes through nostrils that it\n"
+ "raises above the sea. By inhaling to its\n"
+ "maximum capacity, a WAILORD can dive close\n"
+ "to 10,000 feet beneath the waves.");
+
+const u8 gNumelPokedexText[] = _(
+ "A NUMEL stores boiling magma in the hump\n"
+ "on its back. It is a hardy POKéMON that can\n"
+ "transport a 220-pound load. It has served\n"
+ "humans at work since long ago.");
+
+const u8 gCameruptPokedexText[] = _(
+ "A POKéMON that lives in the crater of\n"
+ "a volcano. Every 10 years, the volcanoes\n"
+ "on its back erupt violently. Research is\n"
+ "under way on the cause of eruption.");
+
+const u8 gTorkoalPokedexText[] = _(
+ "It battles using energy it gets from\n"
+ "burning coal. When loosing smoke from its\n"
+ "nostrils, it lets off a sound that is\n"
+ "similar to a locomotive’s horn.");
+
+const u8 gSpoinkPokedexText[] = _(
+ "A POKéMON that manipulates psychic power\n"
+ "at will. It doesn’t stop bouncing even when\n"
+ "it is asleep. It loves eating mushrooms\n"
+ "that grow underground.");
+
+const u8 gGrumpigPokedexText[] = _(
+ "It stores power in the black pearls on its\n"
+ "forehead. When it uses psychic power, it\n"
+ "performs an odd dance step. Its style of\n"
+ "dancing became hugely popular overseas.");
+
+const u8 gSpindaPokedexText[] = _(
+ "It is distinguished by a pattern of\n"
+ "spots that is always different. Its\n"
+ "unsteady, tottering walk has the\n"
+ "effect of fouling its foe’s aim.");
+
+const u8 gTrapinchPokedexText[] = _(
+ "Its big jaws crunch through boulders.\n"
+ "Because its head is so big, it has a hard\n"
+ "time getting back upright if it tips over\n"
+ "onto its back.");
+
+const u8 gVibravaPokedexText[] = _(
+ "It looses ultrasonic waves by rubbing its\n"
+ "wings together. Since a VIBRAVA’s wings\n"
+ "are still in the process of growing, it can\n"
+ "only fly short distances.");
+
+const u8 gFlygonPokedexText[] = _(
+ "The flapping of its wings sounds like\n"
+ "singing. To prevent detection by enemies,\n"
+ "it hides itself by flapping up a cloud of\n"
+ "desert sand.");
+
+const u8 gCacneaPokedexText[] = _(
+ "CACNEA live in deserts with virtually no\n"
+ "rainfall. It battles by swinging its thick,\n"
+ "spiked arms. Once a year, a yellow flower\n"
+ "blooms.");
+
+const u8 gCacturnePokedexText[] = _(
+ "After spending thousands of years in\n"
+ "harsh deserts, its blood transformed into\n"
+ "the same substances as sand. It is\n"
+ "nocturnal, so it hunts at night.");
+
+const u8 gSwabluPokedexText[] = _(
+ "A POKéMON that has wings like cottony\n"
+ "clouds. After enduring winter, in which\n"
+ "little food is available, SWABLU flocks\n"
+ "move closer to towns in the spring.");
+
+const u8 gAltariaPokedexText[] = _(
+ "It hums in a beautiful soprano voice.\n"
+ "It flies among white clouds in the blue\n"
+ "sky. It launches intensely hot fireballs\n"
+ "from its mouth.");
+
+const u8 gZangoosePokedexText[] = _(
+ "When it battles, it stands on its hind legs\n"
+ "and attacks with its sharply clawed\n"
+ "forelegs. Its fur bristles if it encounters\n"
+ "any SEVIPER.");
+
+const u8 gSeviperPokedexText[] = _(
+ "SEVIPER and ZANGOOSE are eternal rivals.\n"
+ "It counters a ZANGOOSE’s dazzling agility\n"
+ "with its swordlike tail, which also oozes\n"
+ "a horrible poison.");
+
+const u8 gLunatonePokedexText[] = _(
+ "It becomes very active on the night of\n"
+ "a full moon. This POKéMON was first\n"
+ "discovered 40 years ago at the site of\n"
+ "a meteor strike.");
+
+const u8 gSolrockPokedexText[] = _(
+ "Solar energy is the source of this \n"
+ "POKéMON’s power. On sunny days, groups of\n"
+ "SOLROCK line up facing the sun and absorb\n"
+ "its light.");
+
+const u8 gBarboachPokedexText[] = _(
+ "Its body is covered with a slimy film.\n"
+ "The film acts as a barrier to prevent germs\n"
+ "in muddy water from entering the\n"
+ "BARBOACH’s body.");
+
+const u8 gWhiscashPokedexText[] = _(
+ "Mysteriously, it can foretell earthquakes.\n"
+ "In the daytime, it sleeps in mud at the\n"
+ "bottom of a pond. When it awakens, it\n"
+ "continually feeds throughout the night.");
+
+const u8 gCorphishPokedexText[] = _(
+ "Once it grips prey with its large pincers,\n"
+ "it will never let go, no matter what.\n"
+ "It is a hardy POKéMON that can thrive\n"
+ "in any environment.");
+
+const u8 gCrawdauntPokedexText[] = _(
+ "A brutish POKéMON that loves to battle.\n"
+ "A veteran CRAWDAUNT that has prevailed in\n"
+ "hundreds of battles has giant pincers\n"
+ "marked with countless scars.");
+
+const u8 gBaltoyPokedexText[] = _(
+ "A BALTOY moves by spinning on its single\n"
+ "foot. It has been depicted in murals \n"
+ "adorning the walls of a once-bustling city\n"
+ "in an ancient age.");
+
+const u8 gClaydolPokedexText[] = _(
+ "A CLAYDOL sleeps while hovering in midair.\n"
+ "Its arms are separate from its body.\n"
+ "They are kept floating by the POKéMON’s\n"
+ "manipulation of psychic power.");
+
+const u8 gLileepPokedexText[] = _(
+ "It disguises itself as seaweed by making\n"
+ "its tentacles sway. Unsuspecting prey\n"
+ "that come too close are swallowed whole.\n"
+ "It became extinct 100 million years ago.");
+
+const u8 gCradilyPokedexText[] = _(
+ "It drags its heavy body along the\n"
+ "seafloor. It makes its nest in the shallows\n"
+ "of warm seas. CRADILY can be seen on\n"
+ "beaches when the tide goes out.");
+
+const u8 gAnorithPokedexText[] = _(
+ "It was resurrected from a fossil using the\n"
+ "power of science. It swims by undulating\n"
+ "the eight wings at its sides. They were\n"
+ "feet that adapted to life in the sea.");
+
+const u8 gArmaldoPokedexText[] = _(
+ "ARMALDO usually lives on land. However,\n"
+ "when it hunts for prey, it dives beneath\n"
+ "the ocean. It swims around using its two\n"
+ "large wings.");
+
+const u8 gFeebasPokedexText[] = _(
+ "FEEBAS live in ponds that are heavily\n"
+ "infested with weeds. Because of its\n"
+ "hopelessly shabby appearance, it\n"
+ "seems as if few TRAINERS raise it.");
+
+const u8 gMiloticPokedexText[] = _(
+ "It is said to live at the bottom of\n"
+ "large lakes. Considered to be the most\n"
+ "beautiful of all POKéMON, it has been\n"
+ "depicted in paintings and statues.");
+
+const u8 gCastformPokedexText[] = _(
+ "It alters its form depending on the\n"
+ "weather. Changes in the climate such as\n"
+ "the temperature and humidity appear to\n"
+ "affect its cellular structure.");
+
+const u8 gKecleonPokedexText[] = _(
+ "A POKéMON that has the ability to alter its\n"
+ "body colors to match its surroundings.\n"
+ "A KECLEON reverts to its original colors if\n"
+ "it is startled.");
+
+const u8 gShuppetPokedexText[] = _(
+ "This POKéMON roams about deep in the\n"
+ "night seeking such negative emotions as\n"
+ "grudges and envy. It retreats to its nest\n"
+ "when the sun begins to rise.");
+
+const u8 gBanettePokedexText[] = _(
+ "An abandoned plush doll became this\n"
+ "POKéMON. They are said to live in garbage\n"
+ "dumps and wander about in search of the\n"
+ "children that threw them away.");
+
+const u8 gDuskullPokedexText[] = _(
+ "A glare from its single scarlet eye makes\n"
+ "even burly grown-ups freeze in utter fear.\n"
+ "It is a nocturnal POKéMON that roams\n"
+ "about under the cloak of darkness.");
+
+const u8 gDusclopsPokedexText[] = _(
+ "It is thought that its body is hollow with\n"
+ "only a spectral ball of fire burning inside.\n"
+ "However, no one has been able to\n"
+ "confirm this theory as fact.");
+
+const u8 gTropiusPokedexText[] = _(
+ "It flies by flapping its broad leaves.\n"
+ "The bunch of fruit that grows around its\n"
+ "neck is deliciously sweet. In the spring,\n"
+ "it scatters pollen from its neck.");
+
+const u8 gChimechoPokedexText[] = _(
+ "They fly about very actively when the hot\n"
+ "season arrives. They communicate among\n"
+ "themselves using seven different and\n"
+ "distinguishing cries.");
+
+const u8 gAbsolPokedexText[] = _(
+ "It sharply senses even subtle changes in\n"
+ "the sky and the land to predict natural\n"
+ "disasters. It is a long-lived POKéMON that\n"
+ "has a life-span of 100 years.");
+
+const u8 gWynautPokedexText[] = _(
+ "A WYNAUT loves to eat sweet fruits.\n"
+ "It cleverly picks fruits using its earlike\n"
+ "arms. They gather in fruit gardens, drawn\n"
+ "by the fragrance.");
+
+const u8 gSnoruntPokedexText[] = _(
+ "They tend to move about in groups of\n"
+ "around five SNORUNT. In snowy regions,\n"
+ "it is said that when they are seen late at\n"
+ "night, snowfall will arrive by morning.");
+
+const u8 gGlaliePokedexText[] = _(
+ "A GLALIE has the power to instantaneously\n"
+ "freeze moisture in the atmosphere.\n"
+ "A dazzling cloud of diamondlike ice\n"
+ "crystals forms around its body.");
+
+const u8 gSphealPokedexText[] = _(
+ "It is completely covered with plushy fur.\n"
+ "As a result, it never feels the cold even\n"
+ "when it is rolling about on ice floes or\n"
+ "diving in the sea.");
+
+const u8 gSealeoPokedexText[] = _(
+ "SEALEO live in herds on ice floes. Using its\n"
+ "powerful flippers, it shatters ice.\n"
+ "It dives into the sea to hunt prey five\n"
+ "times a day.");
+
+const u8 gWalreinPokedexText[] = _(
+ "To protect its herd, the leader battles\n"
+ "anything that invades its territory, even\n"
+ "at the cost of its life. Its tusks may snap\n"
+ "off in battle.");
+
+const u8 gClamperlPokedexText[] = _(
+ "A CLAMPERL slams its shell closed on prey\n"
+ "to prevent escape. The pearl it creates\n"
+ "upon evolution is said to be infused with\n"
+ "a mysterious energy.");
+
+const u8 gHuntailPokedexText[] = _(
+ "To withstand the crushing pressure of\n"
+ "water deep under the sea, its spine is very\n"
+ "thick and sturdy. Its tail, which is shaped\n"
+ "like a small fish, has eyes that light up.");
+
+const u8 gGorebyssPokedexText[] = _(
+ "A GOREBYSS siphons the body fluids of prey\n"
+ "through its thin, tubular mouth. Its light\n"
+ "pink body color turns vivid when it\n"
+ "finishes feeding.");
+
+const u8 gRelicanthPokedexText[] = _(
+ "A POKéMON that was once believed to have\n"
+ "been extinct. The species has not changed\n"
+ "its form for 100 million years. It walks on\n"
+ "the seafloor using its pectoral fins.");
+
+const u8 gLuvdiscPokedexText[] = _(
+ "LUVDISC make the branches of CORSOLA\n"
+ "their nests. There is a custom from long\n"
+ "ago of giving a LUVDISC as a gift to\n"
+ "express one’s feelings of love.");
+
+const u8 gBagonPokedexText[] = _(
+ "Although it is small, this POKéMON is very\n"
+ "powerful because its body is a bundle of\n"
+ "muscles. It launches head-butts with its\n"
+ "ironlike skull.");
+
+const u8 gShelgonPokedexText[] = _(
+ "It hardly eats while it awaits evolution.\n"
+ "It becomes hardier by enduring hunger.\n"
+ "Its shell peels off the instant it begins\n"
+ "to evolve.");
+
+const u8 gSalamencePokedexText[] = _(
+ "After many long years, its cellular\n"
+ "structure underwent a sudden mutation to\n"
+ "grow wings. When angered, it loses all\n"
+ "thought and rampages out of control.");
+
+const u8 gBeldumPokedexText[] = _(
+ "When BELDUM gather in a swarm, they move\n"
+ "in perfect unison as if they were but one\n"
+ "POKéMON. They communicate with each other\n"
+ "using brain waves.");
+
+const u8 gMetangPokedexText[] = _(
+ "The claws tipping its arms pack the\n"
+ "destructive power to tear through thick\n"
+ "iron sheets as if they were silk. It flies\n"
+ "at over 60 miles per hour.");
+
+const u8 gMetagrossPokedexText[] = _(
+ "METAGROSS has four brains that are joined\n"
+ "by a complex neural network. As a result of\n"
+ "integration, this POKéMON is smarter than\n"
+ "a supercomputer.");
+
+const u8 gRegirockPokedexText[] = _(
+ "A POKéMON that is made entirely of rocks\n"
+ "and boulders. If parts of its body chip off\n"
+ "in battle, REGIROCK repairs itself by\n"
+ "adding new rocks.");
+
+const u8 gRegicePokedexText[] = _(
+ "Its entire body is made of Antarctic ice.\n"
+ "After extensive studies, researchers\n"
+ "believe the ice was formed during an\n"
+ "ice age.");
+
+const u8 gRegisteelPokedexText[] = _(
+ "Its body is harder than any other kind of\n"
+ "metal. The body metal is composed of a\n"
+ "mysterious substance. Not only is it hard,\n"
+ "it shrinks and stretches flexibly.");
+
+const u8 gLatiasPokedexText[] = _(
+ "They make a small herd of only several\n"
+ "members. They rarely make contact with\n"
+ "people or other POKéMON. They disappear\n"
+ "if they sense enemies.");
+
+const u8 gLatiosPokedexText[] = _(
+ "Even in hiding, it can detect the locations\n"
+ "of others and sense their emotions since\n"
+ "it has telepathy. Its intelligence allows\n"
+ "it to understand human languages.");
+
+const u8 gKyogrePokedexText[] = _(
+ "KYOGRE has appeared in mythology as the\n"
+ "creator of the sea. After long years of\n"
+ "feuding with GROUDON, it took to sleep at\n"
+ "the bottom of the sea.");
+
+const u8 gGroudonPokedexText[] = _(
+ "GROUDON has appeared in mythology as the\n"
+ "creator of the land. It sleeps in magma\n"
+ "underground and is said to make volcanoes\n"
+ "erupt on awakening.");
+
+const u8 gRayquazaPokedexText[] = _(
+ "A POKéMON that flies endlessly in the\n"
+ "ozone layer. It is said it would descend\n"
+ "to the ground if KYOGRE and GROUDON\n"
+ "were to fight.");
+
+const u8 gJirachiPokedexText[] = _(
+ "JIRACHI is said to make wishes come true.\n"
+ "While it sleeps, a tough crystalline shell\n"
+ "envelops the body to protect it from\n"
+ "enemies.");
+
+const u8 gDeoxysPokedexText[] = _(
+ "A POKéMON that mutated from an\n"
+ "extraterrestrial virus exposed to a laser\n"
+ "beam. Its body is configured for superior\n"
+ "agility and speed.");
diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h
index 877bf3475..29d0ff32e 100644
--- a/src/data/pokemon_graphics/back_pic_coordinates.h
+++ b/src/data/pokemon_graphics/back_pic_coordinates.h
@@ -47,211 +47,212 @@ const struct MonCoords gMonBackPicCoords[] =
{0x66, 0x0a}, // SPECIES_GLOOM
{0x87, 0x07}, // SPECIES_VILEPLUME
{0x63, 0x14}, // SPECIES_PARAS
- {0x87, 0x07}, // SPECIES_VENONAT
- {0x77, 0x06}, // SPECIES_VENOMOTH
- {0x77, 0x04}, // SPECIES_DIGLETT
- {0x54, 0x10}, // SPECIES_DUGTRIO
- {0x66, 0x0b}, // SPECIES_MEOWTH
- {0x65, 0x0c}, // SPECIES_PERSIAN
- {0x87, 0x07}, // SPECIES_PSYDUCK
- {0x67, 0x07}, // SPECIES_GOLDUCK
- {0x77, 0x05}, // SPECIES_MANKEY
- {0x76, 0x0b}, // SPECIES_PRIMEAPE
- {0x77, 0x07}, // SPECIES_GROWLITHE
- {0x66, 0x08}, // SPECIES_ARCANINE
- {0x87, 0x06}, // SPECIES_POLIWAG
- {0x74, 0x10}, // SPECIES_POLIWHIRL
- {0x65, 0x0c}, // SPECIES_POLIWRATH
- {0x86, 0x0b}, // SPECIES_ABRA
- {0x66, 0x0b}, // SPECIES_KADABRA
- {0x76, 0x08}, // SPECIES_ALAKAZAM
- {0x67, 0x05}, // SPECIES_MACHOP
- {0x65, 0x0c}, // SPECIES_MACHOKE
- {0x76, 0x09}, // SPECIES_MACHAMP
- {0x67, 0x04}, // SPECIES_BELLSPROUT
- {0x66, 0x0a}, // SPECIES_WEEPINBELL
- {0x66, 0x09}, // SPECIES_VICTREEBEL
- {0x87, 0x06}, // SPECIES_TENTACOOL
- {0x56, 0x0a}, // SPECIES_TENTACRUEL
- {0x86, 0x0b}, // SPECIES_GEODUDE
- {0x66, 0x0b}, // SPECIES_GRAVELER
- {0x75, 0x0c}, // SPECIES_GOLEM
- {0x84, 0x10}, // SPECIES_PONYTA
- {0x66, 0x09}, // SPECIES_RAPIDASH
- {0x87, 0x05}, // SPECIES_SLOWPOKE
- {0x85, 0x0e}, // SPECIES_SLOWBRO
- {0x86, 0x0a}, // SPECIES_MAGNEMITE
- {0x43, 0x14}, // SPECIES_MAGNETON
+ {0x87, 0x07}, // SPECIES_PARASECT
+ {0x77, 0x06}, // SPECIES_VENONAT
+ {0x77, 0x04}, // SPECIES_VENOMOTH
+ {0x54, 0x10}, // SPECIES_DIGLETT
+ {0x66, 0x0b}, // SPECIES_DUGTRIO
+ {0x65, 0x0c}, // SPECIES_MEOWTH
+ {0x87, 0x07}, // SPECIES_PERSIAN
+ {0x67, 0x07}, // SPECIES_PSYDUCK
+ {0x77, 0x05}, // SPECIES_GOLDUCK
+ {0x76, 0x0b}, // SPECIES_MANKEY
+ {0x77, 0x07}, // SPECIES_PRIMEAPE
+ {0x66, 0x08}, // SPECIES_GROWLITHE
+ {0x87, 0x06}, // SPECIES_ARCANINE
+ {0x74, 0x10}, // SPECIES_POLIWAG
+ {0x65, 0x0c}, // SPECIES_POLIWHIRL
+ {0x86, 0x0b}, // SPECIES_POLIWRATH
+ {0x66, 0x0b}, // SPECIES_ABRA
+ {0x76, 0x08}, // SPECIES_KADABRA
+ {0x67, 0x05}, // SPECIES_ALAKAZAM
+ {0x65, 0x0c}, // SPECIES_MACHOP
+ {0x76, 0x09}, // SPECIES_MACHOKE
+ {0x67, 0x04}, // SPECIES_MACHAMP
+ {0x66, 0x0a}, // SPECIES_BELLSPROUT
+ {0x66, 0x09}, // SPECIES_WEEPINBELL
+ {0x87, 0x06}, // SPECIES_VICTREEBEL
+ {0x56, 0x0a}, // SPECIES_TENTACOOL
+ {0x86, 0x0b}, // SPECIES_TENTACRUEL
+ {0x66, 0x0b}, // SPECIES_GEODUDE
+ {0x75, 0x0c}, // SPECIES_GRAVELER
+ {0x84, 0x10}, // SPECIES_GOLEM
+ {0x66, 0x09}, // SPECIES_PONYTA
+ {0x87, 0x05}, // SPECIES_RAPIDASH
+ {0x85, 0x0e}, // SPECIES_SLOWPOKE
+ {0x86, 0x0a}, // SPECIES_SLOWBRO
+ {0x43, 0x14}, // SPECIES_MAGNEMITE
+ {0x66, 0x0a}, // SPECIES_MAGNETON
{0x66, 0x0a}, // SPECIES_FARFETCHD
- {0x66, 0x0a}, // SPECIES_DODUO
- {0x66, 0x08}, // SPECIES_DODRIO
- {0x88, 0x01}, // SPECIES_SEEL
- {0x66, 0x0a}, // SPECIES_DEWGONG
- {0x77, 0x05}, // SPECIES_GRIMER
- {0x75, 0x0c}, // SPECIES_MUK
- {0x87, 0x05}, // SPECIES_SHELLDER
- {0x76, 0x0b}, // SPECIES_CLOYSTER
- {0x87, 0x06}, // SPECIES_GASTLY
- {0x85, 0x0e}, // SPECIES_HAUNTER
- {0x76, 0x08}, // SPECIES_GENGAR
- {0x76, 0x09}, // SPECIES_ONIX
- {0x78, 0x00}, // SPECIES_DROWZEE
- {0x65, 0x0d}, // SPECIES_HYPNO
- {0x66, 0x09}, // SPECIES_KRABBY
- {0x66, 0x0a}, // SPECIES_KINGLER
- {0x77, 0x04}, // SPECIES_VOLTORB
- {0x55, 0x0e}, // SPECIES_ELECTRODE
+ {0x66, 0x08}, // SPECIES_DODUO
+ {0x88, 0x01}, // SPECIES_DODRIO
+ {0x66, 0x0a}, // SPECIES_SEEL
+ {0x77, 0x05}, // SPECIES_DEWGONG
+ {0x75, 0x0c}, // SPECIES_GRIMER
+ {0x87, 0x05}, // SPECIES_MUK
+ {0x76, 0x0b}, // SPECIES_SHELLDER
+ {0x87, 0x06}, // SPECIES_CLOYSTER
+ {0x85, 0x0e}, // SPECIES_GASTLY
+ {0x76, 0x08}, // SPECIES_HAUNTER
+ {0x76, 0x09}, // SPECIES_GENGAR
+ {0x78, 0x00}, // SPECIES_ONIX
+ {0x65, 0x0d}, // SPECIES_DROWZEE
+ {0x66, 0x09}, // SPECIES_HYPNO
+ {0x66, 0x0a}, // SPECIES_KRABBY
+ {0x77, 0x04}, // SPECIES_KINGLER
+ {0x55, 0x0e}, // SPECIES_VOLTORB
+ {0x65, 0x0d}, // SPECIES_ELECTRODE
{0x65, 0x0d}, // SPECIES_EXEGGCUTE
- {0x65, 0x0d}, // SPECIES_EXEGGUTOR
- {0x87, 0x04}, // SPECIES_CUBONE
- {0x66, 0x0a}, // SPECIES_MAROWAK
- {0x66, 0x08}, // SPECIES_HITMONLEE
+ {0x87, 0x04}, // SPECIES_EXEGGUTOR
+ {0x66, 0x0a}, // SPECIES_CUBONE
+ {0x66, 0x08}, // SPECIES_MAROWAK
+ {0x65, 0x0c}, // SPECIES_HITMONLEE
{0x65, 0x0c}, // SPECIES_HITMONCHAN
- {0x65, 0x0c}, // SPECIES_LICKITUNG
- {0x65, 0x0e}, // SPECIES_KOFFING
- {0x66, 0x09}, // SPECIES_WEEZING
- {0x77, 0x06}, // SPECIES_RHYHORN
- {0x85, 0x0c}, // SPECIES_RHYDON
- {0x88, 0x03}, // SPECIES_CHANSEY
- {0x86, 0x0b}, // SPECIES_TANGELA
- {0x85, 0x0e}, // SPECIES_KANGASKHAN
- {0x77, 0x05}, // SPECIES_HORSEA
- {0x66, 0x09}, // SPECIES_SEADRA
+ {0x65, 0x0e}, // SPECIES_LICKITUNG
+ {0x66, 0x09}, // SPECIES_KOFFING
+ {0x77, 0x06}, // SPECIES_WEEZING
+ {0x85, 0x0c}, // SPECIES_RHYHORN
+ {0x88, 0x03}, // SPECIES_RHYDON
+ {0x86, 0x0b}, // SPECIES_CHANSEY
+ {0x85, 0x0e}, // SPECIES_TANGELA
+ {0x77, 0x05}, // SPECIES_KANGASKHAN
+ {0x66, 0x09}, // SPECIES_HORSEA
+ {0x66, 0x08}, // SPECIES_SEADRA
{0x66, 0x08}, // SPECIES_GOLDEEN
- {0x66, 0x08}, // SPECIES_SEAKING
- {0x76, 0x0b}, // SPECIES_STARYU
- {0x65, 0x0d}, // SPECIES_STARMIE
- {0x85, 0x0e}, // SPECIES_MR_MIME
- {0x85, 0x0d}, // SPECIES_SCYTHER
- {0x77, 0x07}, // SPECIES_JYNX
- {0x86, 0x0a}, // SPECIES_ELECTABUZZ
+ {0x76, 0x0b}, // SPECIES_SEAKING
+ {0x65, 0x0d}, // SPECIES_STARYU
+ {0x85, 0x0e}, // SPECIES_STARMIE
+ {0x85, 0x0d}, // SPECIES_MR_MIME
+ {0x77, 0x07}, // SPECIES_SCYTHER
+ {0x86, 0x0a}, // SPECIES_JYNX
+ {0x66, 0x08}, // SPECIES_ELECTABUZZ
{0x66, 0x08}, // SPECIES_MAGMAR
- {0x66, 0x08}, // SPECIES_PINSIR
- {0x66, 0x09}, // SPECIES_TAUROS
- {0x85, 0x0d}, // SPECIES_MAGIKARP
- {0x76, 0x09}, // SPECIES_GYARADOS
- {0x78, 0x00}, // SPECIES_LAPRAS
- {0x77, 0x04}, // SPECIES_DITTO
- {0x54, 0x11}, // SPECIES_EEVEE
+ {0x66, 0x09}, // SPECIES_PINSIR
+ {0x85, 0x0d}, // SPECIES_TAUROS
+ {0x76, 0x09}, // SPECIES_MAGIKARP
+ {0x78, 0x00}, // SPECIES_GYARADOS
+ {0x77, 0x04}, // SPECIES_LAPRAS
+ {0x54, 0x11}, // SPECIES_DITTO
+ {0x66, 0x0a}, // SPECIES_EEVEE
{0x66, 0x0a}, // SPECIES_VAPOREON
- {0x66, 0x0a}, // SPECIES_JOLTEON
- {0x87, 0x06}, // SPECIES_FLAREON
- {0x67, 0x05}, // SPECIES_PORYGON
- {0x65, 0x0d}, // SPECIES_OMANYTE
- {0x66, 0x0a}, // SPECIES_OMASTAR
- {0x66, 0x08}, // SPECIES_KABUTO
- {0x65, 0x0d}, // SPECIES_KABUTOPS
- {0x77, 0x05}, // SPECIES_AERODACTYL
- {0x86, 0x08}, // SPECIES_SNORLAX
- {0x86, 0x0b}, // SPECIES_ARTICUNO
- {0x65, 0x0c}, // SPECIES_ZAPDOS
- {0x76, 0x0b}, // SPECIES_MOLTRES
- {0x87, 0x04}, // SPECIES_DRATINI
- {0x66, 0x09}, // SPECIES_DRAGONAIR
- {0x78, 0x00}, // SPECIES_DRAGONITE
- {0x87, 0x06}, // SPECIES_MEWTWO
- {0x78, 0x01}, // SPECIES_MEW
- {0x66, 0x08}, // SPECIES_CHIKORITA
- {0x56, 0x0a}, // SPECIES_BAYLEEF
- {0x66, 0x08}, // SPECIES_MEGANIUM
- {0x78, 0x00}, // SPECIES_CYNDAQUIL
- {0x76, 0x09}, // SPECIES_QUILAVA
+ {0x87, 0x06}, // SPECIES_JOLTEON
+ {0x67, 0x05}, // SPECIES_FLAREON
+ {0x65, 0x0d}, // SPECIES_PORYGON
+ {0x66, 0x0a}, // SPECIES_OMANYTE
+ {0x66, 0x08}, // SPECIES_OMASTAR
+ {0x65, 0x0d}, // SPECIES_KABUTO
+ {0x77, 0x05}, // SPECIES_KABUTOPS
+ {0x86, 0x08}, // SPECIES_AERODACTYL
+ {0x86, 0x0b}, // SPECIES_SNORLAX
+ {0x65, 0x0c}, // SPECIES_ARTICUNO
+ {0x76, 0x0b}, // SPECIES_ZAPDOS
+ {0x87, 0x04}, // SPECIES_MOLTRES
+ {0x66, 0x09}, // SPECIES_DRATINI
+ {0x78, 0x00}, // SPECIES_DRAGONAIR
+ {0x87, 0x06}, // SPECIES_DRAGONITE
+ {0x78, 0x01}, // SPECIES_MEWTWO
+ {0x66, 0x08}, // SPECIES_MEW
+ {0x56, 0x0a}, // SPECIES_CHIKORITA
+ {0x66, 0x08}, // SPECIES_BAYLEEF
+ {0x78, 0x00}, // SPECIES_MEGANIUM
+ {0x76, 0x09}, // SPECIES_CYNDAQUIL
+ {0x87, 0x04}, // SPECIES_QUILAVA
{0x87, 0x04}, // SPECIES_TYPHLOSION
- {0x87, 0x04}, // SPECIES_TOTODILE
- {0x66, 0x0b}, // SPECIES_CROCONAW
- {0x67, 0x07}, // SPECIES_FERALIGATR
- {0x88, 0x01}, // SPECIES_SENTRET
- {0x67, 0x05}, // SPECIES_FURRET
+ {0x66, 0x0b}, // SPECIES_TOTODILE
+ {0x67, 0x07}, // SPECIES_CROCONAW
+ {0x88, 0x01}, // SPECIES_FERALIGATR
+ {0x67, 0x05}, // SPECIES_SENTRET
+ {0x66, 0x08}, // SPECIES_FURRET
{0x66, 0x08}, // SPECIES_HOOTHOOT
- {0x66, 0x08}, // SPECIES_NOCTOWL
- {0x68, 0x03}, // SPECIES_LEDYBA
- {0x76, 0x0b}, // SPECIES_LEDIAN
- {0x77, 0x07}, // SPECIES_SPINARAK
- {0x73, 0x15}, // SPECIES_ARIADOS
- {0x86, 0x0b}, // SPECIES_CROBAT
- {0x87, 0x05}, // SPECIES_CHINCHOU
+ {0x68, 0x03}, // SPECIES_NOCTOWL
+ {0x76, 0x0b}, // SPECIES_LEDYBA
+ {0x77, 0x07}, // SPECIES_LEDIAN
+ {0x73, 0x15}, // SPECIES_SPINARAK
+ {0x86, 0x0b}, // SPECIES_ARIADOS
+ {0x87, 0x05}, // SPECIES_CROBAT
+ {0x86, 0x08}, // SPECIES_CHINCHOU
{0x86, 0x08}, // SPECIES_LANTURN
- {0x86, 0x08}, // SPECIES_PICHU
- {0x66, 0x0b}, // SPECIES_CLEFFA
- {0x65, 0x0f}, // SPECIES_IGGLYBUFF
- {0x66, 0x0b}, // SPECIES_TOGEPI
- {0x54, 0x10}, // SPECIES_TOGETIC
- {0x66, 0x08}, // SPECIES_NATU
- {0x54, 0x11}, // SPECIES_XATU
- {0x76, 0x08}, // SPECIES_MAREEP
+ {0x66, 0x0b}, // SPECIES_PICHU
+ {0x65, 0x0f}, // SPECIES_CLEFFA
+ {0x66, 0x0b}, // SPECIES_IGGLYBUFF
+ {0x54, 0x10}, // SPECIES_TOGEPI
+ {0x66, 0x08}, // SPECIES_TOGETIC
+ {0x54, 0x11}, // SPECIES_NATU
+ {0x76, 0x08}, // SPECIES_XATU
+ {0x66, 0x09}, // SPECIES_MAREEP
{0x66, 0x09}, // SPECIES_FLAAFFY
- {0x66, 0x09}, // SPECIES_AMPHAROS
- {0x88, 0x01}, // SPECIES_BELLOSSOM
- {0x66, 0x0b}, // SPECIES_MARILL
- {0x75, 0x0c}, // SPECIES_AZUMARILL
- {0x86, 0x08}, // SPECIES_SUDOWOODO
- {0x66, 0x08}, // SPECIES_POLITOED
- {0x66, 0x09}, // SPECIES_HOPPIP
- {0x66, 0x0b}, // SPECIES_SKIPLOOM
- {0x65, 0x0d}, // SPECIES_JUMPLUFF
- {0x87, 0x04}, // SPECIES_AIPOM
- {0x66, 0x09}, // SPECIES_SUNKERN
- {0x56, 0x0a}, // SPECIES_SUNFLORA
- {0x66, 0x08}, // SPECIES_YANMA
- {0x77, 0x04}, // SPECIES_WOOPER
- {0x85, 0x0f}, // SPECIES_QUAGSIRE
- {0x76, 0x08}, // SPECIES_ESPEON
- {0x76, 0x0b}, // SPECIES_UMBREON
- {0x87, 0x04}, // SPECIES_MURKROW
- {0x66, 0x09}, // SPECIES_SLOWKING
- {0x66, 0x08}, // SPECIES_MISDREAVUS
- {0x66, 0x0a}, // SPECIES_UNOWN
- {0x36, 0x08}, // SPECIES_WOBBUFFET
- {0x75, 0x0c}, // SPECIES_GIRAFARIG
- {0x87, 0x05}, // SPECIES_PINECO
- {0x65, 0x0f}, // SPECIES_FORRETRESS
- {0x84, 0x10}, // SPECIES_DUNSPARCE
- {0x85, 0x0f}, // SPECIES_GLIGAR
- {0x87, 0x05}, // SPECIES_STEELIX
- {0x88, 0x00}, // SPECIES_SNUBBULL
- {0x76, 0x0a}, // SPECIES_GRANBULL
- {0x87, 0x05}, // SPECIES_QWILFISH
- {0x77, 0x07}, // SPECIES_SCIZOR
- {0x77, 0x04}, // SPECIES_SHUCKLE
- {0x56, 0x0b}, // SPECIES_HERACROSS
- {0x77, 0x04}, // SPECIES_SNEASEL
+ {0x88, 0x01}, // SPECIES_AMPHAROS
+ {0x66, 0x0b}, // SPECIES_BELLOSSOM
+ {0x75, 0x0c}, // SPECIES_MARILL
+ {0x86, 0x08}, // SPECIES_AZUMARILL
+ {0x66, 0x08}, // SPECIES_SUDOWOODO
+ {0x66, 0x09}, // SPECIES_POLITOED
+ {0x66, 0x0b}, // SPECIES_HOPPIP
+ {0x65, 0x0d}, // SPECIES_SKIPLOOM
+ {0x87, 0x04}, // SPECIES_JUMPLUFF
+ {0x66, 0x09}, // SPECIES_AIPOM
+ {0x56, 0x0a}, // SPECIES_SUNKERN
+ {0x66, 0x08}, // SPECIES_SUNFLORA
+ {0x77, 0x04}, // SPECIES_YANMA
+ {0x85, 0x0f}, // SPECIES_WOOPER
+ {0x76, 0x08}, // SPECIES_QUAGSIRE
+ {0x76, 0x0b}, // SPECIES_ESPEON
+ {0x87, 0x04}, // SPECIES_UMBREON
+ {0x66, 0x09}, // SPECIES_MURKROW
+ {0x66, 0x08}, // SPECIES_SLOWKING
+ {0x66, 0x0a}, // SPECIES_MISDREAVUS
+ {0x36, 0x08}, // SPECIES_UNOWN
+ {0x75, 0x0c}, // SPECIES_WOBBUFFET
+ {0x87, 0x05}, // SPECIES_GIRAFARIG
+ {0x65, 0x0f}, // SPECIES_PINECO
+ {0x84, 0x10}, // SPECIES_FORRETRESS
+ {0x85, 0x0f}, // SPECIES_DUNSPARCE
+ {0x87, 0x05}, // SPECIES_GLIGAR
+ {0x88, 0x00}, // SPECIES_STEELIX
+ {0x76, 0x0a}, // SPECIES_SNUBBULL
+ {0x87, 0x05}, // SPECIES_GRANBULL
+ {0x77, 0x07}, // SPECIES_QWILFISH
+ {0x77, 0x04}, // SPECIES_SCIZOR
+ {0x56, 0x0b}, // SPECIES_SHUCKLE
+ {0x77, 0x04}, // SPECIES_HERACROSS
+ {0x66, 0x08}, // SPECIES_SNEASEL
{0x66, 0x08}, // SPECIES_TEDDIURSA
- {0x66, 0x08}, // SPECIES_URSARING
- {0x88, 0x03}, // SPECIES_SLUGMA
- {0x66, 0x08}, // SPECIES_MAGCARGO
- {0x76, 0x09}, // SPECIES_SWINUB
- {0x63, 0x15}, // SPECIES_PILOSWINE
- {0x75, 0x0d}, // SPECIES_CORSOLA
- {0x65, 0x0c}, // SPECIES_REMORAID
- {0x75, 0x0d}, // SPECIES_OCTILLERY
- {0x66, 0x0a}, // SPECIES_DELIBIRD
- {0x67, 0x06}, // SPECIES_MANTINE
- {0x87, 0x07}, // SPECIES_SKARMORY
- {0x87, 0x04}, // SPECIES_HOUNDOUR
- {0x55, 0x0c}, // SPECIES_HOUNDOOM
- {0x87, 0x07}, // SPECIES_KINGDRA
- {0x87, 0x06}, // SPECIES_PHANPY
- {0x65, 0x0e}, // SPECIES_DONPHAN
- {0x85, 0x0d}, // SPECIES_PORYGON2
- {0x76, 0x0a}, // SPECIES_STANTLER
- {0x78, 0x03}, // SPECIES_SMEARGLE
- {0x76, 0x0a}, // SPECIES_TYROGUE
- {0x66, 0x08}, // SPECIES_HITMONTOP
- {0x87, 0x05}, // SPECIES_SMOOCHUM
- {0x56, 0x09}, // SPECIES_ELEKID
- {0x66, 0x08}, // SPECIES_MAGBY
- {0x66, 0x0b}, // SPECIES_MILTANK
- {0x87, 0x07}, // SPECIES_BLISSEY
- {0x85, 0x0d}, // SPECIES_RAIKOU
- {0x86, 0x0a}, // SPECIES_ENTEI
- {0x87, 0x06}, // SPECIES_SUICUNE
- {0x88, 0x03}, // SPECIES_LARVITAR
- {0x66, 0x08}, // SPECIES_PUPITAR
- {0x67, 0x05}, // SPECIES_TYRANITAR
- {0x88, 0x00}, // SPECIES_LUGIA
+ {0x88, 0x03}, // SPECIES_URSARING
+ {0x66, 0x08}, // SPECIES_SLUGMA
+ {0x76, 0x09}, // SPECIES_MAGCARGO
+ {0x63, 0x15}, // SPECIES_SWINUB
+ {0x75, 0x0d}, // SPECIES_PILOSWINE
+ {0x65, 0x0c}, // SPECIES_CORSOLA
+ {0x75, 0x0d}, // SPECIES_REMORAID
+ {0x66, 0x0a}, // SPECIES_OCTILLERY
+ {0x67, 0x06}, // SPECIES_DELIBIRD
+ {0x87, 0x07}, // SPECIES_MANTINE
+ {0x87, 0x04}, // SPECIES_SKARMORY
+ {0x55, 0x0c}, // SPECIES_HOUNDOUR
+ {0x87, 0x07}, // SPECIES_HOUNDOOM
+ {0x87, 0x06}, // SPECIES_KINGDRA
+ {0x65, 0x0e}, // SPECIES_PHANPY
+ {0x85, 0x0d}, // SPECIES_DONPHAN
+ {0x76, 0x0a}, // SPECIES_PORYGON2
+ {0x78, 0x03}, // SPECIES_STANTLER
+ {0x76, 0x0a}, // SPECIES_SMEARGLE
+ {0x66, 0x08}, // SPECIES_TYROGUE
+ {0x87, 0x05}, // SPECIES_HITMONTOP
+ {0x56, 0x09}, // SPECIES_SMOOCHUM
+ {0x66, 0x08}, // SPECIES_ELEKID
+ {0x66, 0x0b}, // SPECIES_MAGBY
+ {0x87, 0x07}, // SPECIES_MILTANK
+ {0x85, 0x0d}, // SPECIES_BLISSEY
+ {0x86, 0x0a}, // SPECIES_RAIKOU
+ {0x87, 0x06}, // SPECIES_ENTEI
+ {0x88, 0x03}, // SPECIES_SUICUNE
+ {0x66, 0x08}, // SPECIES_LARVITAR
+ {0x67, 0x05}, // SPECIES_PUPITAR
+ {0x88, 0x00}, // SPECIES_TYRANITAR
+ {0x88, 0x01}, // SPECIES_LUGIA
{0x88, 0x01}, // SPECIES_HO_OH
- {0x88, 0x01}, // SPECIES_CELEBI
- {0x66, 0x08}, // SPECIES_OLD_UNOWN_B
+ {0x66, 0x08}, // SPECIES_CELEBI
+ {0x88, 0x02}, // SPECIES_OLD_UNOWN_B
{0x88, 0x02}, // SPECIES_OLD_UNOWN_C
{0x88, 0x02}, // SPECIES_OLD_UNOWN_D
{0x88, 0x02}, // SPECIES_OLD_UNOWN_E
@@ -276,168 +277,167 @@ const struct MonCoords gMonBackPicCoords[] =
{0x88, 0x02}, // SPECIES_OLD_UNOWN_X
{0x88, 0x02}, // SPECIES_OLD_UNOWN_Y
{0x88, 0x02}, // SPECIES_OLD_UNOWN_Z
- {0x88, 0x02}, // SPECIES_TREECKO
- {0x87, 0x06}, // SPECIES_GROVYLE
- {0x86, 0x08}, // SPECIES_SCEPTILE
- {0x88, 0x01}, // SPECIES_TORCHIC
- {0x67, 0x05}, // SPECIES_COMBUSKEN
+ {0x87, 0x06}, // SPECIES_TREECKO
+ {0x86, 0x08}, // SPECIES_GROVYLE
+ {0x88, 0x01}, // SPECIES_SCEPTILE
+ {0x67, 0x05}, // SPECIES_TORCHIC
+ {0x88, 0x00}, // SPECIES_COMBUSKEN
{0x88, 0x00}, // SPECIES_BLAZIKEN
- {0x88, 0x00}, // SPECIES_MUDKIP
- {0x77, 0x05}, // SPECIES_MARSHTOMP
- {0x87, 0x04}, // SPECIES_SWAMPERT
- {0x87, 0x05}, // SPECIES_POOCHYENA
- {0x76, 0x09}, // SPECIES_MIGHTYENA
- {0x87, 0x04}, // SPECIES_ZIGZAGOON
- {0x76, 0x0b}, // SPECIES_LINOONE
- {0x85, 0x0f}, // SPECIES_WURMPLE
- {0x76, 0x0b}, // SPECIES_SILCOON
- {0x83, 0x15}, // SPECIES_BEAUTIFLY
- {0x88, 0x00}, // SPECIES_CASCOON
- {0x73, 0x14}, // SPECIES_DUSTOX
- {0x83, 0x14}, // SPECIES_LOTAD
- {0x75, 0x0f}, // SPECIES_LOMBRE
- {0x86, 0x08}, // SPECIES_LUDICOLO
- {0x86, 0x0a}, // SPECIES_SEEDOT
- {0x86, 0x09}, // SPECIES_NUZLEAF
- {0x76, 0x0a}, // SPECIES_SHIFTRY
- {0x86, 0x08}, // SPECIES_NINCADA
- {0x83, 0x14}, // SPECIES_NINJASK
- {0x86, 0x08}, // SPECIES_SHEDINJA
- {0x77, 0x06}, // SPECIES_TAILLOW
- {0x64, 0x11}, // SPECIES_SWELLOW
- {0x86, 0x08}, // SPECIES_SHROOMISH
- {0x85, 0x0d}, // SPECIES_BRELOOM
- {0x87, 0x04}, // SPECIES_SPINDA
- {0x77, 0x04}, // SPECIES_WINGULL
- {0x85, 0x0e}, // SPECIES_PELIPPER
- {0x87, 0x06}, // SPECIES_SURSKIT
- {0x86, 0x0b}, // SPECIES_MASQUERAIN
- {0x88, 0x00}, // SPECIES_WAILMER
- {0x83, 0x15}, // SPECIES_WAILORD
- {0x83, 0x16}, // SPECIES_SKITTY
- {0x86, 0x0a}, // SPECIES_DELCATTY
- {0x86, 0x08}, // SPECIES_KECLEON
- {0x87, 0x06}, // SPECIES_BALTOY
- {0x86, 0x08}, // SPECIES_CLAYDOL
- {0x87, 0x07}, // SPECIES_NOSEPASS
- {0x85, 0x0c}, // SPECIES_TORKOAL
- {0x86, 0x0a}, // SPECIES_SABLEYE
- {0x76, 0x08}, // SPECIES_BARBOACH
- {0x66, 0x0a}, // SPECIES_WHISCASH
- {0x86, 0x0a}, // SPECIES_LUVDISC
- {0x46, 0x0a}, // SPECIES_CORPHISH
- {0x77, 0x07}, // SPECIES_CRAWDAUNT
- {0x87, 0x05}, // SPECIES_FEEBAS
- {0x67, 0x07}, // SPECIES_MILOTIC
- {0x68, 0x02}, // SPECIES_CARVANHA
- {0x87, 0x07}, // SPECIES_SHARPEDO
- {0x88, 0x02}, // SPECIES_TRAPINCH
- {0x75, 0x0e}, // SPECIES_VIBRAVA
- {0x74, 0x11}, // SPECIES_FLYGON
- {0x88, 0x02}, // SPECIES_MAKUHITA
- {0x76, 0x0b}, // SPECIES_HARIYAMA
- {0x87, 0x07}, // SPECIES_ELECTRIKE
- {0x84, 0x10}, // SPECIES_MANECTRIC
- {0x87, 0x04}, // SPECIES_NUMEL
- {0x86, 0x0b}, // SPECIES_CAMERUPT
- {0x84, 0x13}, // SPECIES_SPHEAL
- {0x64, 0x12}, // SPECIES_SEALEO
- {0x86, 0x0a}, // SPECIES_WALREIN
- {0x87, 0x06}, // SPECIES_CACNEA
- {0x85, 0x0f}, // SPECIES_CACTURNE
- {0x87, 0x07}, // SPECIES_SNORUNT
- {0x76, 0x0a}, // SPECIES_GLALIE
- {0x85, 0x0c}, // SPECIES_LUNATONE
+ {0x77, 0x05}, // SPECIES_MUDKIP
+ {0x87, 0x04}, // SPECIES_MARSHTOMP
+ {0x87, 0x05}, // SPECIES_SWAMPERT
+ {0x76, 0x09}, // SPECIES_POOCHYENA
+ {0x87, 0x04}, // SPECIES_MIGHTYENA
+ {0x76, 0x0b}, // SPECIES_ZIGZAGOON
+ {0x85, 0x0f}, // SPECIES_LINOONE
+ {0x76, 0x0b}, // SPECIES_WURMPLE
+ {0x83, 0x15}, // SPECIES_SILCOON
+ {0x88, 0x00}, // SPECIES_BEAUTIFLY
+ {0x73, 0x14}, // SPECIES_CASCOON
+ {0x83, 0x14}, // SPECIES_DUSTOX
+ {0x75, 0x0f}, // SPECIES_LOTAD
+ {0x86, 0x08}, // SPECIES_LOMBRE
+ {0x86, 0x0a}, // SPECIES_LUDICOLO
+ {0x86, 0x09}, // SPECIES_SEEDOT
+ {0x76, 0x0a}, // SPECIES_NUZLEAF
+ {0x86, 0x08}, // SPECIES_SHIFTRY
+ {0x83, 0x14}, // SPECIES_NINCADA
+ {0x86, 0x08}, // SPECIES_NINJASK
+ {0x77, 0x06}, // SPECIES_SHEDINJA
+ {0x64, 0x11}, // SPECIES_TAILLOW
+ {0x86, 0x08}, // SPECIES_SWELLOW
+ {0x85, 0x0d}, // SPECIES_SHROOMISH
+ {0x87, 0x04}, // SPECIES_BRELOOM
+ {0x77, 0x04}, // SPECIES_SPINDA
+ {0x85, 0x0e}, // SPECIES_WINGULL
+ {0x87, 0x06}, // SPECIES_PELIPPER
+ {0x86, 0x0b}, // SPECIES_SURSKIT
+ {0x88, 0x00}, // SPECIES_MASQUERAIN
+ {0x83, 0x15}, // SPECIES_WAILMER
+ {0x83, 0x16}, // SPECIES_WAILORD
+ {0x86, 0x0a}, // SPECIES_SKITTY
+ {0x86, 0x08}, // SPECIES_DELCATTY
+ {0x87, 0x06}, // SPECIES_KECLEON
+ {0x86, 0x08}, // SPECIES_BALTOY
+ {0x87, 0x07}, // SPECIES_CLAYDOL
+ {0x85, 0x0c}, // SPECIES_NOSEPASS
+ {0x86, 0x0a}, // SPECIES_TORKOAL
+ {0x76, 0x08}, // SPECIES_SABLEYE
+ {0x66, 0x0a}, // SPECIES_BARBOACH
+ {0x86, 0x0a}, // SPECIES_WHISCASH
+ {0x46, 0x0a}, // SPECIES_LUVDISC
+ {0x77, 0x07}, // SPECIES_CORPHISH
+ {0x87, 0x05}, // SPECIES_CRAWDAUNT
+ {0x67, 0x07}, // SPECIES_FEEBAS
+ {0x68, 0x02}, // SPECIES_MILOTIC
+ {0x87, 0x07}, // SPECIES_CARVANHA
+ {0x88, 0x02}, // SPECIES_SHARPEDO
+ {0x75, 0x0e}, // SPECIES_TRAPINCH
+ {0x74, 0x11}, // SPECIES_VIBRAVA
+ {0x88, 0x02}, // SPECIES_FLYGON
+ {0x76, 0x0b}, // SPECIES_MAKUHITA
+ {0x87, 0x07}, // SPECIES_HARIYAMA
+ {0x84, 0x10}, // SPECIES_ELECTRIKE
+ {0x87, 0x04}, // SPECIES_MANECTRIC
+ {0x86, 0x0b}, // SPECIES_NUMEL
+ {0x84, 0x13}, // SPECIES_CAMERUPT
+ {0x64, 0x12}, // SPECIES_SPHEAL
+ {0x86, 0x0a}, // SPECIES_SEALEO
+ {0x87, 0x06}, // SPECIES_WALREIN
+ {0x85, 0x0f}, // SPECIES_CACNEA
+ {0x87, 0x07}, // SPECIES_CACTURNE
+ {0x76, 0x0a}, // SPECIES_SNORUNT
+ {0x85, 0x0c}, // SPECIES_GLALIE
+ {0x87, 0x05}, // SPECIES_LUNATONE
{0x87, 0x05}, // SPECIES_SOLROCK
- {0x87, 0x05}, // SPECIES_AZURILL
- {0x86, 0x0a}, // SPECIES_SPOINK
- {0x56, 0x0b}, // SPECIES_GRUMPIG
- {0x87, 0x04}, // SPECIES_PLUSLE
+ {0x86, 0x0a}, // SPECIES_AZURILL
+ {0x56, 0x0b}, // SPECIES_SPOINK
+ {0x87, 0x04}, // SPECIES_GRUMPIG
+ {0x76, 0x08}, // SPECIES_PLUSLE
{0x76, 0x08}, // SPECIES_MINUN
- {0x76, 0x08}, // SPECIES_MAWILE
- {0x87, 0x04}, // SPECIES_MEDITITE
- {0x76, 0x0b}, // SPECIES_MEDICHAM
- {0x68, 0x03}, // SPECIES_SWABLU
- {0x86, 0x09}, // SPECIES_ALTARIA
- {0x87, 0x06}, // SPECIES_WYNAUT
- {0x77, 0x07}, // SPECIES_DUSKULL
- {0x66, 0x0b}, // SPECIES_DUSCLOPS
+ {0x87, 0x04}, // SPECIES_MAWILE
+ {0x76, 0x0b}, // SPECIES_MEDITITE
+ {0x68, 0x03}, // SPECIES_MEDICHAM
+ {0x86, 0x09}, // SPECIES_SWABLU
+ {0x87, 0x06}, // SPECIES_ALTARIA
+ {0x77, 0x07}, // SPECIES_WYNAUT
+ {0x66, 0x0b}, // SPECIES_DUSKULL
+ {0x86, 0x08}, // SPECIES_DUSCLOPS
{0x86, 0x08}, // SPECIES_ROSELIA
- {0x86, 0x08}, // SPECIES_SLAKOTH
- {0x85, 0x0f}, // SPECIES_VIGOROTH
- {0x86, 0x0a}, // SPECIES_SLAKING
- {0x86, 0x08}, // SPECIES_GULPIN
- {0x66, 0x0b}, // SPECIES_SWALOT
- {0x77, 0x06}, // SPECIES_TROPIUS
- {0x87, 0x07}, // SPECIES_WHISMUR
- {0x85, 0x0d}, // SPECIES_LOUDRED
- {0x86, 0x09}, // SPECIES_EXPLOUD
- {0x88, 0x03}, // SPECIES_CLAMPERL
- {0x85, 0x0d}, // SPECIES_HUNTAIL
- {0x68, 0x02}, // SPECIES_GOREBYSS
- {0x77, 0x05}, // SPECIES_ABSOL
- {0x78, 0x03}, // SPECIES_SHUPPET
- {0x77, 0x06}, // SPECIES_BANETTE
- {0x65, 0x0c}, // SPECIES_SEVIPER
- {0x88, 0x03}, // SPECIES_ZANGOOSE
- {0x88, 0x01}, // SPECIES_RELICANTH
- {0x86, 0x0a}, // SPECIES_ARON
- {0x54, 0x11}, // SPECIES_LAIRON
- {0x84, 0x11}, // SPECIES_AGGRON
- {0x87, 0x07}, // SPECIES_CASTFORM
- {0x45, 0x0d}, // SPECIES_VOLBEAT
- {0x76, 0x08}, // SPECIES_ILLUMISE
- {0x67, 0x06}, // SPECIES_LILEEP
- {0x86, 0x09}, // SPECIES_CRADILY
- {0x77, 0x04}, // SPECIES_ANORITH
- {0x83, 0x17}, // SPECIES_ARMALDO
- {0x77, 0x05}, // SPECIES_RALTS
- {0x45, 0x0d}, // SPECIES_KIRLIA
- {0x57, 0x06}, // SPECIES_GARDEVOIR
- {0x77, 0x04}, // SPECIES_BAGON
- {0x66, 0x08}, // SPECIES_SHELGON
- {0x85, 0x0d}, // SPECIES_SALAMENCE
- {0x77, 0x06}, // SPECIES_BELDUM
- {0x66, 0x0a}, // SPECIES_METANG
- {0x84, 0x10}, // SPECIES_METAGROSS
- {0x83, 0x14}, // SPECIES_REGIROCK
- {0x86, 0x0a}, // SPECIES_REGICE
+ {0x85, 0x0f}, // SPECIES_SLAKOTH
+ {0x86, 0x0a}, // SPECIES_VIGOROTH
+ {0x86, 0x08}, // SPECIES_SLAKING
+ {0x66, 0x0b}, // SPECIES_GULPIN
+ {0x77, 0x06}, // SPECIES_SWALOT
+ {0x87, 0x07}, // SPECIES_TROPIUS
+ {0x85, 0x0d}, // SPECIES_WHISMUR
+ {0x86, 0x09}, // SPECIES_LOUDRED
+ {0x88, 0x03}, // SPECIES_EXPLOUD
+ {0x85, 0x0d}, // SPECIES_CLAMPERL
+ {0x68, 0x02}, // SPECIES_HUNTAIL
+ {0x77, 0x05}, // SPECIES_GOREBYSS
+ {0x78, 0x03}, // SPECIES_ABSOL
+ {0x77, 0x06}, // SPECIES_SHUPPET
+ {0x65, 0x0c}, // SPECIES_BANETTE
+ {0x88, 0x03}, // SPECIES_SEVIPER
+ {0x88, 0x01}, // SPECIES_ZANGOOSE
+ {0x86, 0x0a}, // SPECIES_RELICANTH
+ {0x54, 0x11}, // SPECIES_ARON
+ {0x84, 0x11}, // SPECIES_LAIRON
+ {0x87, 0x07}, // SPECIES_AGGRON
+ {0x45, 0x0d}, // SPECIES_CASTFORM
+ {0x76, 0x08}, // SPECIES_VOLBEAT
+ {0x67, 0x06}, // SPECIES_ILLUMISE
+ {0x86, 0x09}, // SPECIES_LILEEP
+ {0x77, 0x04}, // SPECIES_CRADILY
+ {0x83, 0x17}, // SPECIES_ANORITH
+ {0x77, 0x05}, // SPECIES_ARMALDO
+ {0x45, 0x0d}, // SPECIES_RALTS
+ {0x57, 0x06}, // SPECIES_KIRLIA
+ {0x77, 0x04}, // SPECIES_GARDEVOIR
+ {0x66, 0x08}, // SPECIES_BAGON
+ {0x85, 0x0d}, // SPECIES_SHELGON
+ {0x77, 0x06}, // SPECIES_SALAMENCE
+ {0x66, 0x0a}, // SPECIES_BELDUM
+ {0x84, 0x10}, // SPECIES_METANG
+ {0x83, 0x14}, // SPECIES_METAGROSS
+ {0x86, 0x0a}, // SPECIES_REGIROCK
+ {0x85, 0x0e}, // SPECIES_REGICE
{0x85, 0x0e}, // SPECIES_REGISTEEL
- {0x85, 0x0e}, // SPECIES_KYOGRE
- {0x84, 0x13}, // SPECIES_GROUDON
- {0x87, 0x07}, // SPECIES_RAYQUAZA
- {0x78, 0x00}, // SPECIES_LATIAS
- {0x88, 0x02}, // SPECIES_LATIOS
- {0x88, 0x03}, // SPECIES_JIRACHI
- {0x87, 0x05}, // SPECIES_DEOXYS
- {0x86, 0x09}, // SPECIES_CHIMECHO
- {0x47, 0x07}, // SPECIES_EGG
- {0x36, 0x0a}, // SPECIES_UNOWN_B
- {0x56, 0x09}, // SPECIES_UNOWN_C
- {0x67, 0x06}, // SPECIES_UNOWN_D
- {0x56, 0x08}, // SPECIES_UNOWN_E
- {0x56, 0x0a}, // SPECIES_UNOWN_F
- {0x66, 0x0a}, // SPECIES_UNOWN_G
- {0x57, 0x05}, // SPECIES_UNOWN_H
- {0x66, 0x08}, // SPECIES_UNOWN_I
- {0x37, 0x07}, // SPECIES_UNOWN_J
- {0x46, 0x09}, // SPECIES_UNOWN_K
- {0x57, 0x07}, // SPECIES_UNOWN_L
- {0x46, 0x0a}, // SPECIES_UNOWN_M
+ {0x84, 0x13}, // SPECIES_KYOGRE
+ {0x87, 0x07}, // SPECIES_GROUDON
+ {0x78, 0x00}, // SPECIES_RAYQUAZA
+ {0x88, 0x02}, // SPECIES_LATIAS
+ {0x88, 0x03}, // SPECIES_LATIOS
+ {0x87, 0x05}, // SPECIES_JIRACHI
+ {0x86, 0x09}, // SPECIES_DEOXYS
+ {0x47, 0x07}, // SPECIES_CHIMECHO
+ {0x36, 0x0a}, // SPECIES_EGG
+ {0x56, 0x09}, // SPECIES_UNOWN_B
+ {0x67, 0x06}, // SPECIES_UNOWN_C
+ {0x56, 0x08}, // SPECIES_UNOWN_D
+ {0x56, 0x0a}, // SPECIES_UNOWN_E
+ {0x66, 0x0a}, // SPECIES_UNOWN_F
+ {0x57, 0x05}, // SPECIES_UNOWN_G
+ {0x66, 0x08}, // SPECIES_UNOWN_H
+ {0x37, 0x07}, // SPECIES_UNOWN_I
+ {0x46, 0x09}, // SPECIES_UNOWN_J
+ {0x57, 0x07}, // SPECIES_UNOWN_K
+ {0x46, 0x0a}, // SPECIES_UNOWN_L
+ {0x65, 0x0d}, // SPECIES_UNOWN_M
{0x65, 0x0d}, // SPECIES_UNOWN_N
- {0x65, 0x0d}, // SPECIES_UNOWN_O
- {0x66, 0x08}, // SPECIES_UNOWN_P
- {0x46, 0x0a}, // SPECIES_UNOWN_Q
- {0x55, 0x0f}, // SPECIES_UNOWN_R
- {0x45, 0x0c}, // SPECIES_UNOWN_S
- {0x57, 0x04}, // SPECIES_UNOWN_T
- {0x45, 0x0d}, // SPECIES_UNOWN_U
- {0x65, 0x0d}, // SPECIES_UNOWN_V
- {0x56, 0x0b}, // SPECIES_UNOWN_W
- {0x55, 0x0d}, // SPECIES_UNOWN_X
- {0x55, 0x0f}, // SPECIES_UNOWN_Y
+ {0x66, 0x08}, // SPECIES_UNOWN_O
+ {0x46, 0x0a}, // SPECIES_UNOWN_P
+ {0x55, 0x0f}, // SPECIES_UNOWN_Q
+ {0x45, 0x0c}, // SPECIES_UNOWN_R
+ {0x57, 0x04}, // SPECIES_UNOWN_S
+ {0x45, 0x0d}, // SPECIES_UNOWN_T
+ {0x65, 0x0d}, // SPECIES_UNOWN_U
+ {0x56, 0x0b}, // SPECIES_UNOWN_V
+ {0x55, 0x0d}, // SPECIES_UNOWN_W
+ {0x55, 0x0f}, // SPECIES_UNOWN_X
+ {0x46, 0x0a}, // SPECIES_UNOWN_Y
{0x46, 0x0a}, // SPECIES_UNOWN_Z
- {0x46, 0x0a}, // SPECIES_UNOWN_EMARK
- {0x37, 0x06}, // SPECIES_UNOWN_QMARK
- {0x47, 0x06},
+ {0x37, 0x06}, // SPECIES_UNOWN_EMARK
+ {0x47, 0x06}, // SPECIES_UNOWN_QMARK
};
diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h
new file mode 100644
index 000000000..779ce3dcd
--- /dev/null
+++ b/src/data/pokemon_graphics/footprint_table.h
@@ -0,0 +1,416 @@
+const u8 *const gMonFootprintTable[] =
+{
+ gMonFootprint_Bulbasaur,
+ gMonFootprint_Bulbasaur,
+ gMonFootprint_Ivysaur,
+ gMonFootprint_Venusaur,
+ gMonFootprint_Charmander,
+ gMonFootprint_Charmeleon,
+ gMonFootprint_Charizard,
+ gMonFootprint_Squirtle,
+ gMonFootprint_Wartortle,
+ gMonFootprint_Blastoise,
+ gMonFootprint_Caterpie,
+ gMonFootprint_Metapod,
+ gMonFootprint_Butterfree,
+ gMonFootprint_Weedle,
+ gMonFootprint_Kakuna,
+ gMonFootprint_Beedrill,
+ gMonFootprint_Pidgey,
+ gMonFootprint_Pidgeotto,
+ gMonFootprint_Pidgeot,
+ gMonFootprint_Rattata,
+ gMonFootprint_Raticate,
+ gMonFootprint_Spearow,
+ gMonFootprint_Fearow,
+ gMonFootprint_Ekans,
+ gMonFootprint_Arbok,
+ gMonFootprint_Pikachu,
+ gMonFootprint_Raichu,
+ gMonFootprint_Sandshrew,
+ gMonFootprint_Sandslash,
+ gMonFootprint_NidoranF,
+ gMonFootprint_Nidorina,
+ gMonFootprint_Nidoqueen,
+ gMonFootprint_NidoranM,
+ gMonFootprint_Nidorino,
+ gMonFootprint_Nidoking,
+ gMonFootprint_Clefairy,
+ gMonFootprint_Clefable,
+ gMonFootprint_Vulpix,
+ gMonFootprint_Ninetales,
+ gMonFootprint_Jigglypuff,
+ gMonFootprint_Wigglytuff,
+ gMonFootprint_Zubat,
+ gMonFootprint_Golbat,
+ gMonFootprint_Oddish,
+ gMonFootprint_Gloom,
+ gMonFootprint_Vileplume,
+ gMonFootprint_Paras,
+ gMonFootprint_Parasect,
+ gMonFootprint_Venonat,
+ gMonFootprint_Venomoth,
+ gMonFootprint_Diglett,
+ gMonFootprint_Dugtrio,
+ gMonFootprint_Meowth,
+ gMonFootprint_Persian,
+ gMonFootprint_Psyduck,
+ gMonFootprint_Golduck,
+ gMonFootprint_Mankey,
+ gMonFootprint_Primeape,
+ gMonFootprint_Growlithe,
+ gMonFootprint_Arcanine,
+ gMonFootprint_Poliwag,
+ gMonFootprint_Poliwhirl,
+ gMonFootprint_Poliwrath,
+ gMonFootprint_Abra,
+ gMonFootprint_Kadabra,
+ gMonFootprint_Alakazam,
+ gMonFootprint_Machop,
+ gMonFootprint_Machoke,
+ gMonFootprint_Machamp,
+ gMonFootprint_Bellsprout,
+ gMonFootprint_Weepinbell,
+ gMonFootprint_Victreebel,
+ gMonFootprint_Tentacool,
+ gMonFootprint_Tentacruel,
+ gMonFootprint_Geodude,
+ gMonFootprint_Graveler,
+ gMonFootprint_Golem,
+ gMonFootprint_Ponyta,
+ gMonFootprint_Rapidash,
+ gMonFootprint_Slowpoke,
+ gMonFootprint_Slowbro,
+ gMonFootprint_Magnemite,
+ gMonFootprint_Magneton,
+ gMonFootprint_Farfetchd,
+ gMonFootprint_Doduo,
+ gMonFootprint_Dodrio,
+ gMonFootprint_Seel,
+ gMonFootprint_Dewgong,
+ gMonFootprint_Grimer,
+ gMonFootprint_Muk,
+ gMonFootprint_Shellder,
+ gMonFootprint_Cloyster,
+ gMonFootprint_Gastly,
+ gMonFootprint_Haunter,
+ gMonFootprint_Gengar,
+ gMonFootprint_Onix,
+ gMonFootprint_Drowzee,
+ gMonFootprint_Hypno,
+ gMonFootprint_Krabby,
+ gMonFootprint_Kingler,
+ gMonFootprint_Voltorb,
+ gMonFootprint_Electrode,
+ gMonFootprint_Exeggcute,
+ gMonFootprint_Exeggutor,
+ gMonFootprint_Cubone,
+ gMonFootprint_Marowak,
+ gMonFootprint_Hitmonlee,
+ gMonFootprint_Hitmonchan,
+ gMonFootprint_Lickitung,
+ gMonFootprint_Koffing,
+ gMonFootprint_Weezing,
+ gMonFootprint_Rhyhorn,
+ gMonFootprint_Rhydon,
+ gMonFootprint_Chansey,
+ gMonFootprint_Tangela,
+ gMonFootprint_Kangaskhan,
+ gMonFootprint_Horsea,
+ gMonFootprint_Seadra,
+ gMonFootprint_Goldeen,
+ gMonFootprint_Seaking,
+ gMonFootprint_Staryu,
+ gMonFootprint_Starmie,
+ gMonFootprint_Mrmime,
+ gMonFootprint_Scyther,
+ gMonFootprint_Jynx,
+ gMonFootprint_Electabuzz,
+ gMonFootprint_Magmar,
+ gMonFootprint_Pinsir,
+ gMonFootprint_Tauros,
+ gMonFootprint_Magikarp,
+ gMonFootprint_Gyarados,
+ gMonFootprint_Lapras,
+ gMonFootprint_Ditto,
+ gMonFootprint_Eevee,
+ gMonFootprint_Vaporeon,
+ gMonFootprint_Jolteon,
+ gMonFootprint_Flareon,
+ gMonFootprint_Porygon,
+ gMonFootprint_Omanyte,
+ gMonFootprint_Omastar,
+ gMonFootprint_Kabuto,
+ gMonFootprint_Kabutops,
+ gMonFootprint_Aerodactyl,
+ gMonFootprint_Snorlax,
+ gMonFootprint_Articuno,
+ gMonFootprint_Zapdos,
+ gMonFootprint_Moltres,
+ gMonFootprint_Dratini,
+ gMonFootprint_Dragonair,
+ gMonFootprint_Dragonite,
+ gMonFootprint_Mewtwo,
+ gMonFootprint_Mew,
+ gMonFootprint_Chikorita,
+ gMonFootprint_Bayleef,
+ gMonFootprint_Meganium,
+ gMonFootprint_Cyndaquil,
+ gMonFootprint_Quilava,
+ gMonFootprint_Typhlosion,
+ gMonFootprint_Totodile,
+ gMonFootprint_Croconaw,
+ gMonFootprint_Feraligatr,
+ gMonFootprint_Sentret,
+ gMonFootprint_Furret,
+ gMonFootprint_Hoothoot,
+ gMonFootprint_Noctowl,
+ gMonFootprint_Ledyba,
+ gMonFootprint_Ledian,
+ gMonFootprint_Spinarak,
+ gMonFootprint_Ariados,
+ gMonFootprint_Crobat,
+ gMonFootprint_Chinchou,
+ gMonFootprint_Lanturn,
+ gMonFootprint_Pichu,
+ gMonFootprint_Cleffa,
+ gMonFootprint_Igglybuff,
+ gMonFootprint_Togepi,
+ gMonFootprint_Togetic,
+ gMonFootprint_Natu,
+ gMonFootprint_Xatu,
+ gMonFootprint_Mareep,
+ gMonFootprint_Flaaffy,
+ gMonFootprint_Ampharos,
+ gMonFootprint_Bellossom,
+ gMonFootprint_Marill,
+ gMonFootprint_Azumarill,
+ gMonFootprint_Sudowoodo,
+ gMonFootprint_Politoed,
+ gMonFootprint_Hoppip,
+ gMonFootprint_Skiploom,
+ gMonFootprint_Jumpluff,
+ gMonFootprint_Aipom,
+ gMonFootprint_Sunkern,
+ gMonFootprint_Sunflora,
+ gMonFootprint_Yanma,
+ gMonFootprint_Wooper,
+ gMonFootprint_Quagsire,
+ gMonFootprint_Espeon,
+ gMonFootprint_Umbreon,
+ gMonFootprint_Murkrow,
+ gMonFootprint_Slowking,
+ gMonFootprint_Misdreavus,
+ gMonFootprint_Unown,
+ gMonFootprint_Wobbuffet,
+ gMonFootprint_Girafarig,
+ gMonFootprint_Pineco,
+ gMonFootprint_Forretress,
+ gMonFootprint_Dunsparce,
+ gMonFootprint_Gligar,
+ gMonFootprint_Steelix,
+ gMonFootprint_Snubbull,
+ gMonFootprint_Granbull,
+ gMonFootprint_Qwilfish,
+ gMonFootprint_Scizor,
+ gMonFootprint_Shuckle,
+ gMonFootprint_Heracross,
+ gMonFootprint_Sneasel,
+ gMonFootprint_Teddiursa,
+ gMonFootprint_Ursaring,
+ gMonFootprint_Slugma,
+ gMonFootprint_Magcargo,
+ gMonFootprint_Swinub,
+ gMonFootprint_Piloswine,
+ gMonFootprint_Corsola,
+ gMonFootprint_Remoraid,
+ gMonFootprint_Octillery,
+ gMonFootprint_Delibird,
+ gMonFootprint_Mantine,
+ gMonFootprint_Skarmory,
+ gMonFootprint_Houndour,
+ gMonFootprint_Houndoom,
+ gMonFootprint_Kingdra,
+ gMonFootprint_Phanpy,
+ gMonFootprint_Donphan,
+ gMonFootprint_Porygon2,
+ gMonFootprint_Stantler,
+ gMonFootprint_Smeargle,
+ gMonFootprint_Tyrogue,
+ gMonFootprint_Hitmontop,
+ gMonFootprint_Smoochum,
+ gMonFootprint_Elekid,
+ gMonFootprint_Magby,
+ gMonFootprint_Miltank,
+ gMonFootprint_Blissey,
+ gMonFootprint_Raikou,
+ gMonFootprint_Entei,
+ gMonFootprint_Suicune,
+ gMonFootprint_Larvitar,
+ gMonFootprint_Pupitar,
+ gMonFootprint_Tyranitar,
+ gMonFootprint_Lugia,
+ gMonFootprint_HoOh,
+ gMonFootprint_Celebi,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_QuestionMark,
+ gMonFootprint_Treecko,
+ gMonFootprint_Grovyle,
+ gMonFootprint_Sceptile,
+ gMonFootprint_Torchic,
+ gMonFootprint_Combusken,
+ gMonFootprint_Blaziken,
+ gMonFootprint_Mudkip,
+ gMonFootprint_Marshtomp,
+ gMonFootprint_Swampert,
+ gMonFootprint_Poochyena,
+ gMonFootprint_Mightyena,
+ gMonFootprint_Zigzagoon,
+ gMonFootprint_Linoone,
+ gMonFootprint_Wurmple,
+ gMonFootprint_Silcoon,
+ gMonFootprint_Beautifly,
+ gMonFootprint_Cascoon,
+ gMonFootprint_Dustox,
+ gMonFootprint_Lotad,
+ gMonFootprint_Lombre,
+ gMonFootprint_Ludicolo,
+ gMonFootprint_Seedot,
+ gMonFootprint_Nuzleaf,
+ gMonFootprint_Shiftry,
+ gMonFootprint_Nincada,
+ gMonFootprint_Ninjask,
+ gMonFootprint_Shedinja,
+ gMonFootprint_Taillow,
+ gMonFootprint_Swellow,
+ gMonFootprint_Shroomish,
+ gMonFootprint_Breloom,
+ gMonFootprint_Spinda,
+ gMonFootprint_Wingull,
+ gMonFootprint_Pelipper,
+ gMonFootprint_Surskit,
+ gMonFootprint_Masquerain,
+ gMonFootprint_Wailmer,
+ gMonFootprint_Wailord,
+ gMonFootprint_Skitty,
+ gMonFootprint_Delcatty,
+ gMonFootprint_Kecleon,
+ gMonFootprint_Baltoy,
+ gMonFootprint_Claydol,
+ gMonFootprint_Nosepass,
+ gMonFootprint_Torkoal,
+ gMonFootprint_Sableye,
+ gMonFootprint_Barboach,
+ gMonFootprint_Whiscash,
+ gMonFootprint_Luvdisc,
+ gMonFootprint_Corphish,
+ gMonFootprint_Crawdaunt,
+ gMonFootprint_Feebas,
+ gMonFootprint_Milotic,
+ gMonFootprint_Carvanha,
+ gMonFootprint_Sharpedo,
+ gMonFootprint_Trapinch,
+ gMonFootprint_Vibrava,
+ gMonFootprint_Flygon,
+ gMonFootprint_Makuhita,
+ gMonFootprint_Hariyama,
+ gMonFootprint_Electrike,
+ gMonFootprint_Manectric,
+ gMonFootprint_Numel,
+ gMonFootprint_Camerupt,
+ gMonFootprint_Spheal,
+ gMonFootprint_Sealeo,
+ gMonFootprint_Walrein,
+ gMonFootprint_Cacnea,
+ gMonFootprint_Cacturne,
+ gMonFootprint_Snorunt,
+ gMonFootprint_Glalie,
+ gMonFootprint_Lunatone,
+ gMonFootprint_Solrock,
+ gMonFootprint_Azurill,
+ gMonFootprint_Spoink,
+ gMonFootprint_Grumpig,
+ gMonFootprint_Plusle,
+ gMonFootprint_Minun,
+ gMonFootprint_Mawile,
+ gMonFootprint_Meditite,
+ gMonFootprint_Medicham,
+ gMonFootprint_Swablu,
+ gMonFootprint_Altaria,
+ gMonFootprint_Wynaut,
+ gMonFootprint_Duskull,
+ gMonFootprint_Dusclops,
+ gMonFootprint_Roselia,
+ gMonFootprint_Slakoth,
+ gMonFootprint_Vigoroth,
+ gMonFootprint_Slaking,
+ gMonFootprint_Gulpin,
+ gMonFootprint_Swalot,
+ gMonFootprint_Tropius,
+ gMonFootprint_Whismur,
+ gMonFootprint_Loudred,
+ gMonFootprint_Exploud,
+ gMonFootprint_Clamperl,
+ gMonFootprint_Huntail,
+ gMonFootprint_Gorebyss,
+ gMonFootprint_Absol,
+ gMonFootprint_Shuppet,
+ gMonFootprint_Banette,
+ gMonFootprint_Seviper,
+ gMonFootprint_Zangoose,
+ gMonFootprint_Relicanth,
+ gMonFootprint_Aron,
+ gMonFootprint_Lairon,
+ gMonFootprint_Aggron,
+ gMonFootprint_Castform,
+ gMonFootprint_Volbeat,
+ gMonFootprint_Illumise,
+ gMonFootprint_Lileep,
+ gMonFootprint_Cradily,
+ gMonFootprint_Anorith,
+ gMonFootprint_Armaldo,
+ gMonFootprint_Ralts,
+ gMonFootprint_Kirlia,
+ gMonFootprint_Gardevoir,
+ gMonFootprint_Bagon,
+ gMonFootprint_Shelgon,
+ gMonFootprint_Salamence,
+ gMonFootprint_Beldum,
+ gMonFootprint_Metang,
+ gMonFootprint_Metagross,
+ gMonFootprint_Regirock,
+ gMonFootprint_Regice,
+ gMonFootprint_Registeel,
+ gMonFootprint_Kyogre,
+ gMonFootprint_Groudon,
+ gMonFootprint_Rayquaza,
+ gMonFootprint_Latias,
+ gMonFootprint_Latios,
+ gMonFootprint_Jirachi,
+ gMonFootprint_Deoxys,
+ gMonFootprint_Chimecho,
+ gMonFootprint_Bulbasaur,
+};
diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h
index fde423570..923df2cde 100644
--- a/src/data/pokemon_graphics/front_pic_coordinates.h
+++ b/src/data/pokemon_graphics/front_pic_coordinates.h
@@ -47,211 +47,212 @@ const struct MonCoords gMonFrontPicCoords[] =
{0x66, 0x0a}, // SPECIES_GLOOM
{0x77, 0x06}, // SPECIES_VILEPLUME
{0x55, 0x0f}, // SPECIES_PARAS
- {0x86, 0x08}, // SPECIES_VENONAT
- {0x66, 0x08}, // SPECIES_VENOMOTH
- {0x88, 0x02}, // SPECIES_DIGLETT
- {0x54, 0x12}, // SPECIES_DUGTRIO
- {0x75, 0x0d}, // SPECIES_MEOWTH
- {0x55, 0x0c}, // SPECIES_PERSIAN
- {0x77, 0x07}, // SPECIES_PSYDUCK
- {0x56, 0x09}, // SPECIES_GOLDUCK
- {0x78, 0x02}, // SPECIES_MANKEY
- {0x65, 0x0e}, // SPECIES_PRIMEAPE
- {0x77, 0x07}, // SPECIES_GROWLITHE
- {0x66, 0x0b}, // SPECIES_ARCANINE
- {0x88, 0x02}, // SPECIES_POLIWAG
- {0x74, 0x13}, // SPECIES_POLIWHIRL
- {0x76, 0x0a}, // SPECIES_POLIWRATH
- {0x76, 0x08}, // SPECIES_ABRA
- {0x66, 0x0b}, // SPECIES_KADABRA
- {0x77, 0x05}, // SPECIES_ALAKAZAM
- {0x87, 0x04}, // SPECIES_MACHOP
- {0x56, 0x0b}, // SPECIES_MACHOKE
- {0x67, 0x06}, // SPECIES_MACHAMP
- {0x88, 0x01}, // SPECIES_BELLSPROUT
- {0x65, 0x0f}, // SPECIES_WEEPINBELL
- {0x66, 0x0b}, // SPECIES_VICTREEBEL
- {0x77, 0x05}, // SPECIES_TENTACOOL
- {0x46, 0x09}, // SPECIES_TENTACRUEL
- {0x87, 0x04}, // SPECIES_GEODUDE
- {0x54, 0x12}, // SPECIES_GRAVELER
- {0x87, 0x04}, // SPECIES_GOLEM
- {0x77, 0x05}, // SPECIES_PONYTA
- {0x66, 0x08}, // SPECIES_RAPIDASH
- {0x88, 0x01}, // SPECIES_SLOWPOKE
- {0x66, 0x0b}, // SPECIES_SLOWBRO
- {0x86, 0x08}, // SPECIES_MAGNEMITE
- {0x43, 0x15}, // SPECIES_MAGNETON
- {0x76, 0x08}, // SPECIES_FARFETCHD
- {0x66, 0x09}, // SPECIES_DODUO
- {0x57, 0x05}, // SPECIES_DODRIO
- {0x88, 0x00}, // SPECIES_SEEL
- {0x76, 0x0a}, // SPECIES_DEWGONG
- {0x87, 0x07}, // SPECIES_GRIMER
- {0x65, 0x0c}, // SPECIES_MUK
- {0x87, 0x04}, // SPECIES_SHELLDER
- {0x55, 0x10}, // SPECIES_CLOYSTER
- {0x87, 0x05}, // SPECIES_GASTLY
- {0x77, 0x06}, // SPECIES_HAUNTER
+ {0x86, 0x08}, // SPECIES_PARASECT
+ {0x66, 0x08}, // SPECIES_VENONAT
+ {0x88, 0x02}, // SPECIES_VENOMOTH
+ {0x54, 0x12}, // SPECIES_DIGLETT
+ {0x75, 0x0d}, // SPECIES_DUGTRIO
+ {0x55, 0x0c}, // SPECIES_MEOWTH
+ {0x77, 0x07}, // SPECIES_PERSIAN
+ {0x56, 0x09}, // SPECIES_PSYDUCK
+ {0x78, 0x02}, // SPECIES_GOLDUCK
+ {0x65, 0x0e}, // SPECIES_MANKEY
+ {0x77, 0x07}, // SPECIES_PRIMEAPE
+ {0x66, 0x0b}, // SPECIES_GROWLITHE
+ {0x88, 0x02}, // SPECIES_ARCANINE
+ {0x74, 0x13}, // SPECIES_POLIWAG
+ {0x76, 0x0a}, // SPECIES_POLIWHIRL
+ {0x76, 0x08}, // SPECIES_POLIWRATH
+ {0x66, 0x0b}, // SPECIES_ABRA
+ {0x77, 0x05}, // SPECIES_KADABRA
+ {0x87, 0x04}, // SPECIES_ALAKAZAM
+ {0x56, 0x0b}, // SPECIES_MACHOP
+ {0x67, 0x06}, // SPECIES_MACHOKE
+ {0x88, 0x01}, // SPECIES_MACHAMP
+ {0x65, 0x0f}, // SPECIES_BELLSPROUT
+ {0x66, 0x0b}, // SPECIES_WEEPINBELL
+ {0x77, 0x05}, // SPECIES_VICTREEBEL
+ {0x46, 0x09}, // SPECIES_TENTACOOL
+ {0x87, 0x04}, // SPECIES_TENTACRUEL
+ {0x54, 0x12}, // SPECIES_GEODUDE
+ {0x87, 0x04}, // SPECIES_GRAVELER
+ {0x77, 0x05}, // SPECIES_GOLEM
+ {0x66, 0x08}, // SPECIES_PONYTA
+ {0x88, 0x01}, // SPECIES_RAPIDASH
+ {0x66, 0x0b}, // SPECIES_SLOWPOKE
+ {0x86, 0x08}, // SPECIES_SLOWBRO
+ {0x43, 0x15}, // SPECIES_MAGNEMITE
+ {0x76, 0x08}, // SPECIES_MAGNETON
+ {0x66, 0x09}, // SPECIES_FARFETCHD
+ {0x57, 0x05}, // SPECIES_DODUO
+ {0x88, 0x00}, // SPECIES_DODRIO
+ {0x76, 0x0a}, // SPECIES_SEEL
+ {0x87, 0x07}, // SPECIES_DEWGONG
+ {0x65, 0x0c}, // SPECIES_GRIMER
+ {0x87, 0x04}, // SPECIES_MUK
+ {0x55, 0x10}, // SPECIES_SHELLDER
+ {0x87, 0x05}, // SPECIES_CLOYSTER
+ {0x77, 0x06}, // SPECIES_GASTLY
+ {0x77, 0x05}, // SPECIES_HAUNTER
{0x77, 0x05}, // SPECIES_GENGAR
- {0x77, 0x05}, // SPECIES_ONIX
- {0x78, 0x02}, // SPECIES_DROWZEE
- {0x77, 0x07}, // SPECIES_HYPNO
- {0x77, 0x04}, // SPECIES_KRABBY
- {0x65, 0x0d}, // SPECIES_KINGLER
- {0x88, 0x03}, // SPECIES_VOLTORB
- {0x44, 0x13}, // SPECIES_ELECTRODE
- {0x55, 0x0e}, // SPECIES_EXEGGCUTE
- {0x87, 0x07}, // SPECIES_EXEGGUTOR
- {0x88, 0x00}, // SPECIES_CUBONE
- {0x55, 0x0f}, // SPECIES_MAROWAK
- {0x76, 0x0b}, // SPECIES_HITMONLEE
- {0x87, 0x04}, // SPECIES_HITMONCHAN
- {0x67, 0x04}, // SPECIES_LICKITUNG
- {0x86, 0x08}, // SPECIES_KOFFING
- {0x66, 0x08}, // SPECIES_WEEZING
- {0x88, 0x02}, // SPECIES_RHYHORN
- {0x76, 0x09}, // SPECIES_RHYDON
- {0x88, 0x02}, // SPECIES_CHANSEY
- {0x76, 0x09}, // SPECIES_TANGELA
- {0x67, 0x07}, // SPECIES_KANGASKHAN
- {0x88, 0x00}, // SPECIES_HORSEA
- {0x45, 0x0f}, // SPECIES_SEADRA
- {0x67, 0x07}, // SPECIES_GOLDEEN
- {0x66, 0x0a}, // SPECIES_SEAKING
- {0x77, 0x04}, // SPECIES_STARYU
- {0x66, 0x0a}, // SPECIES_STARMIE
- {0x77, 0x06}, // SPECIES_MR_MIME
- {0x66, 0x08}, // SPECIES_SCYTHER
- {0x88, 0x00}, // SPECIES_JYNX
- {0x77, 0x04}, // SPECIES_ELECTABUZZ
- {0x78, 0x02}, // SPECIES_MAGMAR
+ {0x78, 0x02}, // SPECIES_ONIX
+ {0x77, 0x07}, // SPECIES_DROWZEE
+ {0x77, 0x04}, // SPECIES_HYPNO
+ {0x65, 0x0d}, // SPECIES_KRABBY
+ {0x88, 0x03}, // SPECIES_KINGLER
+ {0x44, 0x13}, // SPECIES_VOLTORB
+ {0x55, 0x0e}, // SPECIES_ELECTRODE
+ {0x87, 0x07}, // SPECIES_EXEGGCUTE
+ {0x88, 0x00}, // SPECIES_EXEGGUTOR
+ {0x55, 0x0f}, // SPECIES_CUBONE
+ {0x76, 0x0b}, // SPECIES_MAROWAK
+ {0x87, 0x04}, // SPECIES_HITMONLEE
+ {0x67, 0x04}, // SPECIES_HITMONCHAN
+ {0x86, 0x08}, // SPECIES_LICKITUNG
+ {0x66, 0x08}, // SPECIES_KOFFING
+ {0x88, 0x02}, // SPECIES_WEEZING
+ {0x76, 0x09}, // SPECIES_RHYHORN
+ {0x88, 0x02}, // SPECIES_RHYDON
+ {0x76, 0x09}, // SPECIES_CHANSEY
+ {0x67, 0x07}, // SPECIES_TANGELA
+ {0x88, 0x00}, // SPECIES_KANGASKHAN
+ {0x45, 0x0f}, // SPECIES_HORSEA
+ {0x67, 0x07}, // SPECIES_SEADRA
+ {0x66, 0x0a}, // SPECIES_GOLDEEN
+ {0x77, 0x04}, // SPECIES_SEAKING
+ {0x66, 0x0a}, // SPECIES_STARYU
+ {0x77, 0x06}, // SPECIES_STARMIE
+ {0x66, 0x08}, // SPECIES_MR_MIME
+ {0x88, 0x00}, // SPECIES_SCYTHER
+ {0x77, 0x04}, // SPECIES_JYNX
+ {0x78, 0x02}, // SPECIES_ELECTABUZZ
+ {0x77, 0x04}, // SPECIES_MAGMAR
{0x77, 0x04}, // SPECIES_PINSIR
- {0x77, 0x04}, // SPECIES_TAUROS
- {0x78, 0x00}, // SPECIES_MAGIKARP
- {0x67, 0x06}, // SPECIES_GYARADOS
- {0x88, 0x08}, // SPECIES_LAPRAS
- {0x85, 0x0d}, // SPECIES_DITTO
- {0x54, 0x11}, // SPECIES_EEVEE
- {0x56, 0x09}, // SPECIES_VAPOREON
- {0x67, 0x06}, // SPECIES_JOLTEON
- {0x76, 0x09}, // SPECIES_FLAREON
- {0x66, 0x0a}, // SPECIES_PORYGON
- {0x55, 0x0d}, // SPECIES_OMANYTE
- {0x45, 0x0f}, // SPECIES_OMASTAR
- {0x67, 0x07}, // SPECIES_KABUTO
- {0x54, 0x11}, // SPECIES_KABUTOPS
- {0x88, 0x03}, // SPECIES_AERODACTYL
- {0x88, 0x01}, // SPECIES_SNORLAX
- {0x87, 0x05}, // SPECIES_ARTICUNO
- {0x88, 0x03}, // SPECIES_ZAPDOS
- {0x87, 0x04}, // SPECIES_MOLTRES
- {0x88, 0x00}, // SPECIES_DRATINI
- {0x75, 0x0e}, // SPECIES_DRAGONAIR
- {0x87, 0x06}, // SPECIES_DRAGONITE
+ {0x78, 0x00}, // SPECIES_TAUROS
+ {0x67, 0x06}, // SPECIES_MAGIKARP
+ {0x88, 0x08}, // SPECIES_GYARADOS
+ {0x85, 0x0d}, // SPECIES_LAPRAS
+ {0x54, 0x11}, // SPECIES_DITTO
+ {0x56, 0x09}, // SPECIES_EEVEE
+ {0x67, 0x06}, // SPECIES_VAPOREON
+ {0x76, 0x09}, // SPECIES_JOLTEON
+ {0x66, 0x0a}, // SPECIES_FLAREON
+ {0x55, 0x0d}, // SPECIES_PORYGON
+ {0x45, 0x0f}, // SPECIES_OMANYTE
+ {0x67, 0x07}, // SPECIES_OMASTAR
+ {0x54, 0x11}, // SPECIES_KABUTO
+ {0x88, 0x03}, // SPECIES_KABUTOPS
+ {0x88, 0x01}, // SPECIES_AERODACTYL
+ {0x87, 0x05}, // SPECIES_SNORLAX
+ {0x88, 0x03}, // SPECIES_ARTICUNO
+ {0x87, 0x04}, // SPECIES_ZAPDOS
+ {0x88, 0x00}, // SPECIES_MOLTRES
+ {0x75, 0x0e}, // SPECIES_DRATINI
+ {0x87, 0x06}, // SPECIES_DRAGONAIR
+ {0x88, 0x00}, // SPECIES_DRAGONITE
{0x88, 0x00}, // SPECIES_MEWTWO
- {0x88, 0x00}, // SPECIES_MEW
- {0x55, 0x0d}, // SPECIES_CHIKORITA
- {0x75, 0x0d}, // SPECIES_BAYLEEF
- {0x77, 0x04}, // SPECIES_MEGANIUM
- {0x88, 0x00}, // SPECIES_CYNDAQUIL
- {0x55, 0x0e}, // SPECIES_QUILAVA
- {0x76, 0x08}, // SPECIES_TYPHLOSION
- {0x78, 0x00}, // SPECIES_TOTODILE
- {0x55, 0x0f}, // SPECIES_CROCONAW
- {0x67, 0x06}, // SPECIES_FERALIGATR
- {0x88, 0x00}, // SPECIES_SENTRET
- {0x47, 0x04}, // SPECIES_FURRET
- {0x67, 0x07}, // SPECIES_HOOTHOOT
- {0x55, 0x0d}, // SPECIES_NOCTOWL
- {0x58, 0x03}, // SPECIES_LEDYBA
- {0x56, 0x0c}, // SPECIES_LEDIAN
- {0x67, 0x04}, // SPECIES_SPINARAK
- {0x54, 0x13}, // SPECIES_ARIADOS
- {0x87, 0x05}, // SPECIES_CROBAT
- {0x88, 0x00}, // SPECIES_CHINCHOU
- {0x75, 0x10}, // SPECIES_LANTURN
- {0x87, 0x0b}, // SPECIES_PICHU
- {0x45, 0x0c}, // SPECIES_CLEFFA
- {0x44, 0x14}, // SPECIES_IGGLYBUFF
- {0x44, 0x12}, // SPECIES_TOGEPI
- {0x34, 0x14}, // SPECIES_TOGETIC
- {0x46, 0x09}, // SPECIES_NATU
- {0x44, 0x14}, // SPECIES_XATU
- {0x47, 0x07}, // SPECIES_MAREEP
- {0x55, 0x10}, // SPECIES_FLAAFFY
- {0x56, 0x0a}, // SPECIES_AMPHAROS
- {0x77, 0x05}, // SPECIES_BELLOSSOM
- {0x45, 0x0e}, // SPECIES_MARILL
- {0x65, 0x0e}, // SPECIES_AZUMARILL
- {0x76, 0x09}, // SPECIES_SUDOWOODO
+ {0x55, 0x0d}, // SPECIES_MEW
+ {0x75, 0x0d}, // SPECIES_CHIKORITA
+ {0x77, 0x04}, // SPECIES_BAYLEEF
+ {0x88, 0x00}, // SPECIES_MEGANIUM
+ {0x55, 0x0e}, // SPECIES_CYNDAQUIL
+ {0x76, 0x08}, // SPECIES_QUILAVA
+ {0x78, 0x00}, // SPECIES_TYPHLOSION
+ {0x55, 0x0f}, // SPECIES_TOTODILE
+ {0x67, 0x06}, // SPECIES_CROCONAW
+ {0x88, 0x00}, // SPECIES_FERALIGATR
+ {0x47, 0x04}, // SPECIES_SENTRET
+ {0x67, 0x07}, // SPECIES_FURRET
+ {0x55, 0x0d}, // SPECIES_HOOTHOOT
+ {0x58, 0x03}, // SPECIES_NOCTOWL
+ {0x56, 0x0c}, // SPECIES_LEDYBA
+ {0x67, 0x04}, // SPECIES_LEDIAN
+ {0x54, 0x13}, // SPECIES_SPINARAK
+ {0x87, 0x05}, // SPECIES_ARIADOS
+ {0x88, 0x00}, // SPECIES_CROBAT
+ {0x75, 0x10}, // SPECIES_CHINCHOU
+ {0x87, 0x0b}, // SPECIES_LANTURN
+ {0x45, 0x0c}, // SPECIES_PICHU
+ {0x44, 0x14}, // SPECIES_CLEFFA
+ {0x44, 0x12}, // SPECIES_IGGLYBUFF
+ {0x34, 0x14}, // SPECIES_TOGEPI
+ {0x46, 0x09}, // SPECIES_TOGETIC
+ {0x44, 0x14}, // SPECIES_NATU
+ {0x47, 0x07}, // SPECIES_XATU
+ {0x55, 0x10}, // SPECIES_MAREEP
+ {0x56, 0x0a}, // SPECIES_FLAAFFY
+ {0x77, 0x05}, // SPECIES_AMPHAROS
+ {0x45, 0x0e}, // SPECIES_BELLOSSOM
+ {0x65, 0x0e}, // SPECIES_MARILL
+ {0x76, 0x09}, // SPECIES_AZUMARILL
+ {0x67, 0x06}, // SPECIES_SUDOWOODO
{0x67, 0x06}, // SPECIES_POLITOED
- {0x67, 0x06}, // SPECIES_HOPPIP
- {0x66, 0x0a}, // SPECIES_SKIPLOOM
- {0x55, 0x0f}, // SPECIES_JUMPLUFF
- {0x77, 0x07}, // SPECIES_AIPOM
- {0x58, 0x03}, // SPECIES_SUNKERN
- {0x44, 0x10}, // SPECIES_SUNFLORA
- {0x56, 0x08}, // SPECIES_YANMA
- {0x86, 0x0a}, // SPECIES_WOOPER
- {0x54, 0x10}, // SPECIES_QUAGSIRE
- {0x77, 0x07}, // SPECIES_ESPEON
- {0x66, 0x08}, // SPECIES_UMBREON
- {0x67, 0x08}, // SPECIES_MURKROW
- {0x66, 0x0b}, // SPECIES_SLOWKING
- {0x58, 0x01}, // SPECIES_MISDREAVUS
- {0x55, 0x0c}, // SPECIES_UNOWN
- {0x35, 0x0f}, // SPECIES_WOBBUFFET
- {0x77, 0x06}, // SPECIES_GIRAFARIG
- {0x88, 0x03}, // SPECIES_PINECO
- {0x56, 0x0a}, // SPECIES_FORRETRESS
- {0x76, 0x09}, // SPECIES_DUNSPARCE
- {0x74, 0x11}, // SPECIES_GLIGAR
- {0x78, 0x03}, // SPECIES_STEELIX
- {0x88, 0x00}, // SPECIES_SNUBBULL
- {0x55, 0x0d}, // SPECIES_GRANBULL
- {0x57, 0x06}, // SPECIES_QWILFISH
- {0x56, 0x0a}, // SPECIES_SCIZOR
- {0x88, 0x00}, // SPECIES_SHUCKLE
- {0x66, 0x09}, // SPECIES_HERACROSS
- {0x88, 0x03}, // SPECIES_SNEASEL
- {0x67, 0x05}, // SPECIES_TEDDIURSA
- {0x45, 0x0d}, // SPECIES_URSARING
- {0x78, 0x01}, // SPECIES_SLUGMA
- {0x45, 0x0d}, // SPECIES_MAGCARGO
- {0x57, 0x0d}, // SPECIES_SWINUB
- {0x43, 0x14}, // SPECIES_PILOSWINE
- {0x66, 0x08}, // SPECIES_CORSOLA
- {0x65, 0x0c}, // SPECIES_REMORAID
- {0x55, 0x0e}, // SPECIES_OCTILLERY
- {0x66, 0x0a}, // SPECIES_DELIBIRD
- {0x56, 0x08}, // SPECIES_MANTINE
- {0x88, 0x01}, // SPECIES_SKARMORY
- {0x88, 0x00}, // SPECIES_HOUNDOUR
- {0x56, 0x0b}, // SPECIES_HOUNDOOM
- {0x77, 0x05}, // SPECIES_KINGDRA
- {0x78, 0x04}, // SPECIES_PHANPY
- {0x54, 0x10}, // SPECIES_DONPHAN
- {0x86, 0x08}, // SPECIES_PORYGON2
- {0x55, 0x0f}, // SPECIES_STANTLER
- {0x88, 0x00}, // SPECIES_SMEARGLE
- {0x77, 0x06}, // SPECIES_TYROGUE
- {0x46, 0x09}, // SPECIES_HITMONTOP
- {0x67, 0x05}, // SPECIES_SMOOCHUM
- {0x35, 0x0f}, // SPECIES_ELEKID
- {0x76, 0x0a}, // SPECIES_MAGBY
- {0x45, 0x0d}, // SPECIES_MILTANK
- {0x77, 0x04}, // SPECIES_BLISSEY
- {0x77, 0x06}, // SPECIES_RAIKOU
+ {0x66, 0x0a}, // SPECIES_HOPPIP
+ {0x55, 0x0f}, // SPECIES_SKIPLOOM
+ {0x77, 0x07}, // SPECIES_JUMPLUFF
+ {0x58, 0x03}, // SPECIES_AIPOM
+ {0x44, 0x10}, // SPECIES_SUNKERN
+ {0x56, 0x08}, // SPECIES_SUNFLORA
+ {0x86, 0x0a}, // SPECIES_YANMA
+ {0x54, 0x10}, // SPECIES_WOOPER
+ {0x77, 0x07}, // SPECIES_QUAGSIRE
+ {0x66, 0x08}, // SPECIES_ESPEON
+ {0x67, 0x08}, // SPECIES_UMBREON
+ {0x66, 0x0b}, // SPECIES_MURKROW
+ {0x58, 0x01}, // SPECIES_SLOWKING
+ {0x55, 0x0c}, // SPECIES_MISDREAVUS
+ {0x35, 0x0f}, // SPECIES_UNOWN
+ {0x77, 0x06}, // SPECIES_WOBBUFFET
+ {0x88, 0x03}, // SPECIES_GIRAFARIG
+ {0x56, 0x0a}, // SPECIES_PINECO
+ {0x76, 0x09}, // SPECIES_FORRETRESS
+ {0x74, 0x11}, // SPECIES_DUNSPARCE
+ {0x78, 0x03}, // SPECIES_GLIGAR
+ {0x88, 0x00}, // SPECIES_STEELIX
+ {0x55, 0x0d}, // SPECIES_SNUBBULL
+ {0x57, 0x06}, // SPECIES_GRANBULL
+ {0x56, 0x0a}, // SPECIES_QWILFISH
+ {0x88, 0x00}, // SPECIES_SCIZOR
+ {0x66, 0x09}, // SPECIES_SHUCKLE
+ {0x88, 0x03}, // SPECIES_HERACROSS
+ {0x67, 0x05}, // SPECIES_SNEASEL
+ {0x45, 0x0d}, // SPECIES_TEDDIURSA
+ {0x78, 0x01}, // SPECIES_URSARING
+ {0x45, 0x0d}, // SPECIES_SLUGMA
+ {0x57, 0x0d}, // SPECIES_MAGCARGO
+ {0x43, 0x14}, // SPECIES_SWINUB
+ {0x66, 0x08}, // SPECIES_PILOSWINE
+ {0x65, 0x0c}, // SPECIES_CORSOLA
+ {0x55, 0x0e}, // SPECIES_REMORAID
+ {0x66, 0x0a}, // SPECIES_OCTILLERY
+ {0x56, 0x08}, // SPECIES_DELIBIRD
+ {0x88, 0x01}, // SPECIES_MANTINE
+ {0x88, 0x00}, // SPECIES_SKARMORY
+ {0x56, 0x0b}, // SPECIES_HOUNDOUR
+ {0x77, 0x05}, // SPECIES_HOUNDOOM
+ {0x78, 0x04}, // SPECIES_KINGDRA
+ {0x54, 0x10}, // SPECIES_PHANPY
+ {0x86, 0x08}, // SPECIES_DONPHAN
+ {0x55, 0x0f}, // SPECIES_PORYGON2
+ {0x88, 0x00}, // SPECIES_STANTLER
+ {0x77, 0x06}, // SPECIES_SMEARGLE
+ {0x46, 0x09}, // SPECIES_TYROGUE
+ {0x67, 0x05}, // SPECIES_HITMONTOP
+ {0x35, 0x0f}, // SPECIES_SMOOCHUM
+ {0x76, 0x0a}, // SPECIES_ELEKID
+ {0x45, 0x0d}, // SPECIES_MAGBY
+ {0x77, 0x04}, // SPECIES_MILTANK
+ {0x77, 0x06}, // SPECIES_BLISSEY
+ {0x88, 0x00}, // SPECIES_RAIKOU
{0x88, 0x00}, // SPECIES_ENTEI
{0x88, 0x00}, // SPECIES_SUICUNE
- {0x88, 0x00}, // SPECIES_LARVITAR
- {0x46, 0x09}, // SPECIES_PUPITAR
- {0x56, 0x09}, // SPECIES_TYRANITAR
+ {0x46, 0x09}, // SPECIES_LARVITAR
+ {0x56, 0x09}, // SPECIES_PUPITAR
+ {0x88, 0x00}, // SPECIES_TYRANITAR
{0x88, 0x00}, // SPECIES_LUGIA
{0x88, 0x00}, // SPECIES_HO_OH
- {0x88, 0x00}, // SPECIES_CELEBI
- {0x55, 0x0e}, // SPECIES_OLD_UNOWN_B
+ {0x55, 0x0e}, // SPECIES_CELEBI
+ {0x87, 0x04}, // SPECIES_OLD_UNOWN_B
{0x87, 0x04}, // SPECIES_OLD_UNOWN_C
{0x87, 0x04}, // SPECIES_OLD_UNOWN_D
{0x87, 0x04}, // SPECIES_OLD_UNOWN_E
@@ -276,168 +277,167 @@ const struct MonCoords gMonFrontPicCoords[] =
{0x87, 0x04}, // SPECIES_OLD_UNOWN_X
{0x87, 0x04}, // SPECIES_OLD_UNOWN_Y
{0x87, 0x04}, // SPECIES_OLD_UNOWN_Z
- {0x87, 0x04}, // SPECIES_TREECKO
- {0x66, 0x08}, // SPECIES_GROVYLE
- {0x87, 0x04}, // SPECIES_SCEPTILE
- {0x88, 0x00}, // SPECIES_TORCHIC
- {0x56, 0x08}, // SPECIES_COMBUSKEN
- {0x88, 0x01}, // SPECIES_BLAZIKEN
- {0x88, 0x00}, // SPECIES_MUDKIP
- {0x56, 0x0c}, // SPECIES_MARSHTOMP
- {0x67, 0x06}, // SPECIES_SWAMPERT
- {0x88, 0x00}, // SPECIES_POOCHYENA
- {0x55, 0x0c}, // SPECIES_MIGHTYENA
- {0x87, 0x04}, // SPECIES_ZIGZAGOON
- {0x85, 0x0f}, // SPECIES_LINOONE
- {0x78, 0x03}, // SPECIES_WURMPLE
- {0x45, 0x0e}, // SPECIES_SILCOON
- {0x75, 0x11}, // SPECIES_BEAUTIFLY
- {0x86, 0x09}, // SPECIES_CASCOON
- {0x74, 0x10}, // SPECIES_DUSTOX
- {0x86, 0x0f}, // SPECIES_LOTAD
- {0x65, 0x0e}, // SPECIES_LOMBRE
- {0x66, 0x09}, // SPECIES_LUDICOLO
- {0x88, 0x00}, // SPECIES_SEEDOT
- {0x46, 0x10}, // SPECIES_NUZLEAF
- {0x56, 0x08}, // SPECIES_SHIFTRY
- {0x88, 0x02}, // SPECIES_NINCADA
- {0x74, 0x12}, // SPECIES_NINJASK
- {0x86, 0x0a}, // SPECIES_SHEDINJA
- {0x66, 0x0a}, // SPECIES_TAILLOW
- {0x64, 0x10}, // SPECIES_SWELLOW
- {0x87, 0x06}, // SPECIES_SHROOMISH
- {0x54, 0x10}, // SPECIES_BRELOOM
- {0x77, 0x04}, // SPECIES_SPINDA
- {0x68, 0x08}, // SPECIES_WINGULL
- {0x84, 0x18}, // SPECIES_PELIPPER
- {0x77, 0x04}, // SPECIES_SURSKIT
- {0x65, 0x0f}, // SPECIES_MASQUERAIN
- {0x88, 0x01}, // SPECIES_WAILMER
- {0x75, 0x0f}, // SPECIES_WAILORD
- {0x87, 0x0a}, // SPECIES_SKITTY
- {0x66, 0x0b}, // SPECIES_DELCATTY
- {0x66, 0x08}, // SPECIES_KECLEON
- {0x67, 0x07}, // SPECIES_BALTOY
- {0x55, 0x10}, // SPECIES_CLAYDOL
- {0x78, 0x06}, // SPECIES_NOSEPASS
- {0x56, 0x0c}, // SPECIES_TORKOAL
- {0x88, 0x02}, // SPECIES_SABLEYE
- {0x66, 0x09}, // SPECIES_BARBOACH
- {0x46, 0x0b}, // SPECIES_WHISCASH
- {0x76, 0x09}, // SPECIES_LUVDISC
- {0x46, 0x18}, // SPECIES_CORPHISH
- {0x66, 0x0c}, // SPECIES_CRAWDAUNT
- {0x88, 0x01}, // SPECIES_FEEBAS
- {0x46, 0x0d}, // SPECIES_MILOTIC
- {0x88, 0x00}, // SPECIES_CARVANHA
- {0x67, 0x06}, // SPECIES_SHARPEDO
- {0x78, 0x03}, // SPECIES_TRAPINCH
- {0x54, 0x10}, // SPECIES_VIBRAVA
- {0x86, 0x0c}, // SPECIES_FLYGON
- {0x88, 0x01}, // SPECIES_MAKUHITA
- {0x65, 0x0c}, // SPECIES_HARIYAMA
- {0x88, 0x01}, // SPECIES_ELECTRIKE
- {0x64, 0x12}, // SPECIES_MANECTRIC
- {0x67, 0x04}, // SPECIES_NUMEL
- {0x65, 0x0f}, // SPECIES_CAMERUPT
- {0x87, 0x09}, // SPECIES_SPHEAL
- {0x65, 0x10}, // SPECIES_SEALEO
- {0x86, 0x0a}, // SPECIES_WALREIN
- {0x88, 0x01}, // SPECIES_CACNEA
- {0x74, 0x10}, // SPECIES_CACTURNE
- {0x88, 0x00}, // SPECIES_SNORUNT
- {0x56, 0x0b}, // SPECIES_GLALIE
- {0x76, 0x0a}, // SPECIES_LUNATONE
- {0x66, 0x09}, // SPECIES_SOLROCK
- {0x88, 0x01}, // SPECIES_AZURILL
- {0x55, 0x0f}, // SPECIES_SPOINK
- {0x46, 0x09}, // SPECIES_GRUMPIG
- {0x77, 0x05}, // SPECIES_PLUSLE
- {0x56, 0x0e}, // SPECIES_MINUN
- {0x66, 0x0c}, // SPECIES_MAWILE
- {0x76, 0x08}, // SPECIES_MEDITITE
- {0x65, 0x0c}, // SPECIES_MEDICHAM
- {0x68, 0x01}, // SPECIES_SWABLU
- {0x76, 0x11}, // SPECIES_ALTARIA
- {0x88, 0x02}, // SPECIES_WYNAUT
- {0x55, 0x0c}, // SPECIES_DUSKULL
- {0x66, 0x0a}, // SPECIES_DUSCLOPS
- {0x77, 0x05}, // SPECIES_ROSELIA
- {0x76, 0x08}, // SPECIES_SLAKOTH
- {0x74, 0x12}, // SPECIES_VIGOROTH
- {0x78, 0x00}, // SPECIES_SLAKING
- {0x86, 0x08}, // SPECIES_GULPIN
- {0x55, 0x12}, // SPECIES_SWALOT
- {0x66, 0x08}, // SPECIES_TROPIUS
- {0x88, 0x00}, // SPECIES_WHISMUR
- {0x55, 0x0e}, // SPECIES_LOUDRED
- {0x78, 0x03}, // SPECIES_EXPLOUD
- {0x88, 0x01}, // SPECIES_CLAMPERL
- {0x55, 0x0e}, // SPECIES_HUNTAIL
- {0x78, 0x03}, // SPECIES_GOREBYSS
- {0x86, 0x0b}, // SPECIES_ABSOL
- {0x68, 0x00}, // SPECIES_SHUPPET
- {0x56, 0x0e}, // SPECIES_BANETTE
- {0x55, 0x0c}, // SPECIES_SEVIPER
- {0x77, 0x08}, // SPECIES_ZANGOOSE
- {0x87, 0x05}, // SPECIES_RELICANTH
- {0x77, 0x0b}, // SPECIES_ARON
- {0x43, 0x14}, // SPECIES_LAIRON
- {0x75, 0x0d}, // SPECIES_AGGRON
- {0x88, 0x00}, // SPECIES_CASTFORM
- {0x34, 0x11}, // SPECIES_VOLBEAT
- {0x66, 0x08}, // SPECIES_ILLUMISE
- {0x56, 0x08}, // SPECIES_LILEEP
- {0x67, 0x07}, // SPECIES_CRADILY
- {0x78, 0x00}, // SPECIES_ANORITH
- {0x66, 0x08}, // SPECIES_ARMALDO
- {0x88, 0x00}, // SPECIES_RALTS
- {0x35, 0x0f}, // SPECIES_KIRLIA
- {0x47, 0x06}, // SPECIES_GARDEVOIR
- {0x78, 0x01}, // SPECIES_BAGON
- {0x56, 0x0b}, // SPECIES_SHELGON
- {0x66, 0x09}, // SPECIES_SALAMENCE
- {0x87, 0x04}, // SPECIES_BELDUM
- {0x55, 0x0f}, // SPECIES_METANG
- {0x87, 0x07}, // SPECIES_METAGROSS
- {0x87, 0x06}, // SPECIES_REGIROCK
- {0x78, 0x04}, // SPECIES_REGICE
- {0x88, 0x02}, // SPECIES_REGISTEEL
- {0x88, 0x03}, // SPECIES_KYOGRE
- {0x87, 0x04}, // SPECIES_GROUDON
- {0x88, 0x01}, // SPECIES_RAYQUAZA
- {0x88, 0x00}, // SPECIES_LATIAS
- {0x88, 0x01}, // SPECIES_LATIOS
- {0x88, 0x02}, // SPECIES_JIRACHI
- {0x66, 0x0d}, // SPECIES_DEOXYS
- {0x88, 0x01}, // SPECIES_CHIMECHO
- {0x37, 0x06}, // SPECIES_EGG
- {0x33, 0x14}, // SPECIES_UNOWN_B
- {0x34, 0x10}, // SPECIES_UNOWN_C
+ {0x66, 0x08}, // SPECIES_TREECKO
+ {0x87, 0x04}, // SPECIES_GROVYLE
+ {0x88, 0x00}, // SPECIES_SCEPTILE
+ {0x56, 0x08}, // SPECIES_TORCHIC
+ {0x88, 0x01}, // SPECIES_COMBUSKEN
+ {0x88, 0x00}, // SPECIES_BLAZIKEN
+ {0x56, 0x0c}, // SPECIES_MUDKIP
+ {0x67, 0x06}, // SPECIES_MARSHTOMP
+ {0x88, 0x00}, // SPECIES_SWAMPERT
+ {0x55, 0x0c}, // SPECIES_POOCHYENA
+ {0x87, 0x04}, // SPECIES_MIGHTYENA
+ {0x85, 0x0f}, // SPECIES_ZIGZAGOON
+ {0x78, 0x03}, // SPECIES_LINOONE
+ {0x45, 0x0e}, // SPECIES_WURMPLE
+ {0x75, 0x11}, // SPECIES_SILCOON
+ {0x86, 0x09}, // SPECIES_BEAUTIFLY
+ {0x74, 0x10}, // SPECIES_CASCOON
+ {0x86, 0x0f}, // SPECIES_DUSTOX
+ {0x65, 0x0e}, // SPECIES_LOTAD
+ {0x66, 0x09}, // SPECIES_LOMBRE
+ {0x88, 0x00}, // SPECIES_LUDICOLO
+ {0x46, 0x10}, // SPECIES_SEEDOT
+ {0x56, 0x08}, // SPECIES_NUZLEAF
+ {0x88, 0x02}, // SPECIES_SHIFTRY
+ {0x74, 0x12}, // SPECIES_NINCADA
+ {0x86, 0x0a}, // SPECIES_NINJASK
+ {0x66, 0x0a}, // SPECIES_SHEDINJA
+ {0x64, 0x10}, // SPECIES_TAILLOW
+ {0x87, 0x06}, // SPECIES_SWELLOW
+ {0x54, 0x10}, // SPECIES_SHROOMISH
+ {0x77, 0x04}, // SPECIES_BRELOOM
+ {0x68, 0x08}, // SPECIES_SPINDA
+ {0x84, 0x18}, // SPECIES_WINGULL
+ {0x77, 0x04}, // SPECIES_PELIPPER
+ {0x65, 0x0f}, // SPECIES_SURSKIT
+ {0x88, 0x01}, // SPECIES_MASQUERAIN
+ {0x75, 0x0f}, // SPECIES_WAILMER
+ {0x87, 0x0a}, // SPECIES_WAILORD
+ {0x66, 0x0b}, // SPECIES_SKITTY
+ {0x66, 0x08}, // SPECIES_DELCATTY
+ {0x67, 0x07}, // SPECIES_KECLEON
+ {0x55, 0x10}, // SPECIES_BALTOY
+ {0x78, 0x06}, // SPECIES_CLAYDOL
+ {0x56, 0x0c}, // SPECIES_NOSEPASS
+ {0x88, 0x02}, // SPECIES_TORKOAL
+ {0x66, 0x09}, // SPECIES_SABLEYE
+ {0x46, 0x0b}, // SPECIES_BARBOACH
+ {0x76, 0x09}, // SPECIES_WHISCASH
+ {0x46, 0x18}, // SPECIES_LUVDISC
+ {0x66, 0x0c}, // SPECIES_CORPHISH
+ {0x88, 0x01}, // SPECIES_CRAWDAUNT
+ {0x46, 0x0d}, // SPECIES_FEEBAS
+ {0x88, 0x00}, // SPECIES_MILOTIC
+ {0x67, 0x06}, // SPECIES_CARVANHA
+ {0x78, 0x03}, // SPECIES_SHARPEDO
+ {0x54, 0x10}, // SPECIES_TRAPINCH
+ {0x86, 0x0c}, // SPECIES_VIBRAVA
+ {0x88, 0x01}, // SPECIES_FLYGON
+ {0x65, 0x0c}, // SPECIES_MAKUHITA
+ {0x88, 0x01}, // SPECIES_HARIYAMA
+ {0x64, 0x12}, // SPECIES_ELECTRIKE
+ {0x67, 0x04}, // SPECIES_MANECTRIC
+ {0x65, 0x0f}, // SPECIES_NUMEL
+ {0x87, 0x09}, // SPECIES_CAMERUPT
+ {0x65, 0x10}, // SPECIES_SPHEAL
+ {0x86, 0x0a}, // SPECIES_SEALEO
+ {0x88, 0x01}, // SPECIES_WALREIN
+ {0x74, 0x10}, // SPECIES_CACNEA
+ {0x88, 0x00}, // SPECIES_CACTURNE
+ {0x56, 0x0b}, // SPECIES_SNORUNT
+ {0x76, 0x0a}, // SPECIES_GLALIE
+ {0x66, 0x09}, // SPECIES_LUNATONE
+ {0x88, 0x01}, // SPECIES_SOLROCK
+ {0x55, 0x0f}, // SPECIES_AZURILL
+ {0x46, 0x09}, // SPECIES_SPOINK
+ {0x77, 0x05}, // SPECIES_GRUMPIG
+ {0x56, 0x0e}, // SPECIES_PLUSLE
+ {0x66, 0x0c}, // SPECIES_MINUN
+ {0x76, 0x08}, // SPECIES_MAWILE
+ {0x65, 0x0c}, // SPECIES_MEDITITE
+ {0x68, 0x01}, // SPECIES_MEDICHAM
+ {0x76, 0x11}, // SPECIES_SWABLU
+ {0x88, 0x02}, // SPECIES_ALTARIA
+ {0x55, 0x0c}, // SPECIES_WYNAUT
+ {0x66, 0x0a}, // SPECIES_DUSKULL
+ {0x77, 0x05}, // SPECIES_DUSCLOPS
+ {0x76, 0x08}, // SPECIES_ROSELIA
+ {0x74, 0x12}, // SPECIES_SLAKOTH
+ {0x78, 0x00}, // SPECIES_VIGOROTH
+ {0x86, 0x08}, // SPECIES_SLAKING
+ {0x55, 0x12}, // SPECIES_GULPIN
+ {0x66, 0x08}, // SPECIES_SWALOT
+ {0x88, 0x00}, // SPECIES_TROPIUS
+ {0x55, 0x0e}, // SPECIES_WHISMUR
+ {0x78, 0x03}, // SPECIES_LOUDRED
+ {0x88, 0x01}, // SPECIES_EXPLOUD
+ {0x55, 0x0e}, // SPECIES_CLAMPERL
+ {0x78, 0x03}, // SPECIES_HUNTAIL
+ {0x86, 0x0b}, // SPECIES_GOREBYSS
+ {0x68, 0x00}, // SPECIES_ABSOL
+ {0x56, 0x0e}, // SPECIES_SHUPPET
+ {0x55, 0x0c}, // SPECIES_BANETTE
+ {0x77, 0x08}, // SPECIES_SEVIPER
+ {0x87, 0x05}, // SPECIES_ZANGOOSE
+ {0x77, 0x0b}, // SPECIES_RELICANTH
+ {0x43, 0x14}, // SPECIES_ARON
+ {0x75, 0x0d}, // SPECIES_LAIRON
+ {0x88, 0x00}, // SPECIES_AGGRON
+ {0x34, 0x11}, // SPECIES_CASTFORM
+ {0x66, 0x08}, // SPECIES_VOLBEAT
+ {0x56, 0x08}, // SPECIES_ILLUMISE
+ {0x67, 0x07}, // SPECIES_LILEEP
+ {0x78, 0x00}, // SPECIES_CRADILY
+ {0x66, 0x08}, // SPECIES_ANORITH
+ {0x88, 0x00}, // SPECIES_ARMALDO
+ {0x35, 0x0f}, // SPECIES_RALTS
+ {0x47, 0x06}, // SPECIES_KIRLIA
+ {0x78, 0x01}, // SPECIES_GARDEVOIR
+ {0x56, 0x0b}, // SPECIES_BAGON
+ {0x66, 0x09}, // SPECIES_SHELGON
+ {0x87, 0x04}, // SPECIES_SALAMENCE
+ {0x55, 0x0f}, // SPECIES_BELDUM
+ {0x87, 0x07}, // SPECIES_METANG
+ {0x87, 0x06}, // SPECIES_METAGROSS
+ {0x78, 0x04}, // SPECIES_REGIROCK
+ {0x88, 0x02}, // SPECIES_REGICE
+ {0x88, 0x03}, // SPECIES_REGISTEEL
+ {0x87, 0x04}, // SPECIES_KYOGRE
+ {0x88, 0x01}, // SPECIES_GROUDON
+ {0x88, 0x00}, // SPECIES_RAYQUAZA
+ {0x88, 0x01}, // SPECIES_LATIAS
+ {0x88, 0x02}, // SPECIES_LATIOS
+ {0x66, 0x0d}, // SPECIES_JIRACHI
+ {0x88, 0x01}, // SPECIES_DEOXYS
+ {0x37, 0x06}, // SPECIES_CHIMECHO
+ {0x33, 0x14}, // SPECIES_EGG
+ {0x34, 0x10}, // SPECIES_UNOWN_B
+ {0x44, 0x10}, // SPECIES_UNOWN_C
{0x44, 0x10}, // SPECIES_UNOWN_D
- {0x44, 0x10}, // SPECIES_UNOWN_E
+ {0x44, 0x11}, // SPECIES_UNOWN_E
{0x44, 0x11}, // SPECIES_UNOWN_F
- {0x44, 0x11}, // SPECIES_UNOWN_G
- {0x35, 0x0e}, // SPECIES_UNOWN_H
- {0x44, 0x10}, // SPECIES_UNOWN_I
- {0x34, 0x10}, // SPECIES_UNOWN_J
- {0x34, 0x11}, // SPECIES_UNOWN_K
- {0x44, 0x11}, // SPECIES_UNOWN_L
- {0x34, 0x13}, // SPECIES_UNOWN_M
- {0x44, 0x13}, // SPECIES_UNOWN_N
- {0x43, 0x14}, // SPECIES_UNOWN_O
- {0x44, 0x10}, // SPECIES_UNOWN_P
- {0x34, 0x13}, // SPECIES_UNOWN_Q
- {0x43, 0x15}, // SPECIES_UNOWN_R
- {0x34, 0x13}, // SPECIES_UNOWN_S
- {0x45, 0x0c}, // SPECIES_UNOWN_T
- {0x34, 0x12}, // SPECIES_UNOWN_U
+ {0x35, 0x0e}, // SPECIES_UNOWN_G
+ {0x44, 0x10}, // SPECIES_UNOWN_H
+ {0x34, 0x10}, // SPECIES_UNOWN_I
+ {0x34, 0x11}, // SPECIES_UNOWN_J
+ {0x44, 0x11}, // SPECIES_UNOWN_K
+ {0x34, 0x13}, // SPECIES_UNOWN_L
+ {0x44, 0x13}, // SPECIES_UNOWN_M
+ {0x43, 0x14}, // SPECIES_UNOWN_N
+ {0x44, 0x10}, // SPECIES_UNOWN_O
+ {0x34, 0x13}, // SPECIES_UNOWN_P
+ {0x43, 0x15}, // SPECIES_UNOWN_Q
+ {0x34, 0x13}, // SPECIES_UNOWN_R
+ {0x45, 0x0c}, // SPECIES_UNOWN_S
+ {0x34, 0x12}, // SPECIES_UNOWN_T
+ {0x44, 0x12}, // SPECIES_UNOWN_U
{0x44, 0x12}, // SPECIES_UNOWN_V
- {0x44, 0x12}, // SPECIES_UNOWN_W
- {0x44, 0x13}, // SPECIES_UNOWN_X
- {0x33, 0x15}, // SPECIES_UNOWN_Y
- {0x34, 0x11}, // SPECIES_UNOWN_Z
- {0x34, 0x10}, // SPECIES_UNOWN_EMARK
- {0x35, 0x0f}, // SPECIES_UNOWN_QMARK
- {0x35, 0x0d},
+ {0x44, 0x13}, // SPECIES_UNOWN_W
+ {0x33, 0x15}, // SPECIES_UNOWN_X
+ {0x34, 0x11}, // SPECIES_UNOWN_Y
+ {0x34, 0x10}, // SPECIES_UNOWN_Z
+ {0x35, 0x0f}, // SPECIES_UNOWN_EMARK
+ {0x35, 0x0d}, // SPECIES_UNOWN_QMARK
};
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index 44b42c123..3050ebecf 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -1,13 +1,14 @@
#include "global.h"
#include "dewford_trend.h"
#include "easy_chat.h"
-#include "constants/easy_chat.h"
#include "event_data.h"
#include "link.h"
#include "malloc.h"
#include "random.h"
#include "text.h"
#include "tv.h"
+#include "string_util.h"
+#include "constants/easy_chat.h"
// static functions
static void sub_8122804(struct EasyChatPair *s, u16 b, u8 c);
diff --git a/src/dragon.c b/src/dragon.c
index 20ef357a0..49f1b57c8 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -1,13 +1,21 @@
#include "global.h"
#include "battle_anim.h"
+#include "scanline_effect.h"
+#include "task.h"
+#include "trig.h"
#include "constants/rgb.h"
-extern void sub_8113064(struct Sprite *);
-extern void sub_8113224(struct Sprite *);
-extern void sub_81131B4(struct Sprite *);
-extern void sub_8113224(struct Sprite *);
-extern void sub_8113250(struct Sprite *);
-extern void sub_81135EC(struct Sprite *);
+extern u16 gUnknown_0203A100[];
+
+void sub_8113064(struct Sprite *);
+void sub_81131B4(struct Sprite *);
+void sub_8113224(struct Sprite *);
+void sub_8113250(struct Sprite *);
+void sub_81135EC(struct Sprite *);
+static void sub_81132E0(struct Sprite *);
+static void sub_81134B8(u8);
+static void sub_8113574(struct Task *);
+static void sub_811369C(struct Sprite *);
const union AnimCmd gUnknown_08596E60[] =
{
@@ -178,3 +186,252 @@ const struct SpriteTemplate gUnknown_08596FB0 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_81135EC,
};
+
+void sub_8113064(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ gBattleAnimArgs[4] = -gBattleAnimArgs[4];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->invisible = 1;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A66DC;
+}
+
+static void sub_8113100(struct Sprite *sprite)
+{
+ sub_80A6838(sprite);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[1];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] -= gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+}
+
+void sub_81131B4(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
+
+ sub_80A6864(sprite, gBattleAnimArgs[1]);
+ sprite->pos1.y += gBattleAnimArgs[2];
+ sprite->callback = sub_80A67D8;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+}
+
+void sub_8113224(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ StartSpriteAffineAnim(sprite, 1);
+
+ sub_8113100(sprite);
+}
+
+void sub_8113250(struct Sprite *sprite)
+{
+ u16 r5;
+ u16 r0;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ sprite->data[6] = gBattleAnimArgs[0];
+ r5 = sub_80A861C(gBattlerAttacker, 0);
+ r0 = sub_80A861C(gBattlerAttacker, 1);
+ if (r5 > r0)
+ sprite->data[7] = r5 / 2;
+ else
+ sprite->data[7] = r0 / 2;
+ sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
+ sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
+ sprite->callback = sub_81132E0;
+}
+
+static void sub_81132E0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF;
+ sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
+ sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
+ if (++sprite->data[4] > 5)
+ {
+ sprite->data[4] = 0;
+ if (sprite->data[5] <= 15 && ++sprite->data[5] > 15)
+ sprite->data[5] = 16;
+ }
+ if (++sprite->data[3] > 0x3C)
+ {
+ sprite->data[3] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF;
+ if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95)
+ sprite->data[7] = 0x96;
+ sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
+ sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
+ if (++sprite->data[4] > 5)
+ {
+ sprite->data[4] = 0;
+ if (sprite->data[5] <= 15 && ++sprite->data[5] > 15)
+ sprite->data[5] = 16;
+ }
+ if (++sprite->data[3] > 20)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_81133E8(u8 taskId)
+{
+ struct ScanlineEffectParams sp;
+ struct Task *task = &gTasks[taskId];
+ u16 i;
+ u8 r1;
+ if (sub_80A8364(gBattleAnimAttacker) == 1)
+ {
+ sp.dmaDest = &REG_BG1HOFS;
+ task->data[2] = gBattle_BG1_X;
+ }
+ else
+ {
+ sp.dmaDest = &REG_BG2HOFS;
+ task->data[2] = gBattle_BG2_X;
+ }
+
+ sp.dmaControl = 0xA2600001;
+ sp.initState = 1;
+ sp.unused9 = 0;
+ r1 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ task->data[3] = r1 - 32;
+ task->data[4] = r1 + 32;
+ if (task->data[3] < 0)
+ task->data[3] = 0;
+
+ for (i = task->data[3]; i <= task->data[4]; i++)
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[2];
+ gScanlineEffectRegBuffers[1][i] = task->data[2];
+ }
+
+ ScanlineEffect_SetParams(sp);
+ task->func = sub_81134B8;
+}
+
+static void sub_81134B8(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[7] > 1)
+ {
+ task->data[7] = 0;
+ if (++task->data[6] == 3)
+ task->data[0]++;
+ }
+ sub_8113574(task);
+ break;
+ case 1:
+ if (++task->data[1] > 0x3C)
+ task->data[0]++;
+ sub_8113574(task);
+ break;
+ case 2:
+ if (++task->data[7] > 1)
+ {
+ task->data[7] = 0;
+ if (--task->data[6] == 0)
+ task->data[0]++;
+ }
+ sub_8113574(task);
+ break;
+ case 3:
+ gScanlineEffect.state = 3;
+ task->data[0]++;
+ break;
+ case 4:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_8113574(struct Task *task)
+{
+ u16 r3 = task->data[5];
+ u16 i;
+ for (i = task->data[3]; i <= task->data[4]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2];
+ r3 = (r3 + 8) & 0xFF;
+ }
+
+ task->data[5] = (task->data[5] + 9) & 0xFF;
+}
+
+void sub_81135EC(struct Sprite *sprite)
+{
+ int r6 = (gBattleAnimArgs[2] * 3) / 5;
+ int i;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4];
+ sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]);
+ sprite->data[2] = Sin(gBattleAnimArgs[1], r6);
+ sprite->pos1.x += sprite->data[1] * gBattleAnimArgs[0];
+ sprite->pos1.y += sprite->data[2] * gBattleAnimArgs[0];
+ sprite->data[3] = gBattleAnimArgs[3];
+ sprite->callback = sub_811369C;
+ for (i = 0; i < 7; i++)
+ gUnknown_0203A100[i] = sprite->data[i];
+}
+
+static void sub_811369C(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[1];
+ sprite->data[5] += sprite->data[2];
+ sprite->pos2.x = sprite->data[4] / 10;
+ sprite->pos2.y = sprite->data[5] / 10;
+ if (++sprite->data[0] > sprite->data[3])
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/effects_1.c b/src/effects_1.c
index 36676b70d..a8687bc38 100644
--- a/src/effects_1.c
+++ b/src/effects_1.c
@@ -13,7 +13,7 @@ extern void sub_80FED28(struct Sprite *);
extern void sub_80FEE78(struct Sprite *);
extern void sub_80FEF44(struct Sprite *);
extern void sub_80FEFFC(struct Sprite *);
-extern void sub_80FF268(struct Sprite *);
+extern void AnimMoveTwisterParticle(struct Sprite *);
extern void sub_80FF0F4(struct Sprite *);
extern void sub_80FF374(struct Sprite *);
extern void sub_80FF698(struct Sprite *);
@@ -437,7 +437,7 @@ const struct SpriteTemplate gUnknown_085923A8 =
.anims = gUnknown_08592388,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF268,
+ .callback = AnimMoveTwisterParticle,
};
const union AnimCmd gUnknown_085923C0[] =
diff --git a/src/field_effect.c b/src/field_effect.c
index 2ec5edf1e..a26d43030 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -32,6 +32,8 @@
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
+extern struct CompressedSpritePalette gMonPaletteTable[]; // GF made a mistake and did not extern it as const.
+
EWRAM_DATA s32 gFieldEffectArguments[8] = {0};
// Static type declarations
@@ -755,67 +757,15 @@ u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
return CreateSprite(&gNewGameBirchObjectTemplate, x, y, subpriority);
}
-#ifdef NONMATCHING
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
{
- u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
+ s32 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;
-
- return spriteId;
+ else
+ return spriteId;
}
-#else
-NAKED
-u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
-{
- asm_unified("push {r4,r5,lr}\n\
- sub sp, 0x10\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r3, 0x80\n\
- lsls r3, 8\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- str r1, [sp]\n\
- lsls r2, 16\n\
- asrs r2, 16\n\
- str r2, [sp, 0x4]\n\
- movs r1, 0\n\
- str r1, [sp, 0x8]\n\
- ldr r1, =gMonPaletteTable\n\
- lsls r4, r0, 3\n\
- adds r4, r1\n\
- ldrh r1, [r4, 0x4]\n\
- str r1, [sp, 0xC]\n\
- movs r1, 0\n\
- adds r2, r3, 0\n\
- movs r3, 0x1\n\
- bl CreateMonPicSprite_HandleDeoxys\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrh r0, [r4, 0x4]\n\
- bl IndexOfSpritePaletteTag\n\
- adds r0, 0x10\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- bl PreservePaletteInWeather\n\
- ldr r0, =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080B5FDC\n\
- lsls r0, r5, 24\n\
- lsrs r0, 24\n\
- b _080B5FDE\n\
- .pool\n\
-_080B5FDC:\n\
- movs r0, 0x40\n\
-_080B5FDE:\n\
- add sp, 0x10\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1");
-}
-#endif //NONMATCHING
u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
{
@@ -824,8 +774,8 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
return 0x40;
-
- return spriteId;
+ else
+ return spriteId;
}
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
@@ -3123,134 +3073,134 @@ NAKED
u8 sub_80B8F98(void)
{
asm_unified("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r0, =gFieldEffectObjectTemplatePointers\n\
- adds r0, 0x90\n\
- ldr r0, [r0]\n\
- movs r2, 0x18\n\
- negs r2, r2\n\
- movs r1, 0x78\n\
- movs r3, 0x1\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r1, r0, 4\n\
- add r1, r8\n\
- lsls r1, 2\n\
- ldr r0, =gSprites\n\
- adds r1, r0\n\
- ldrb r2, [r1, 0x5]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- movs r2, 0x4\n\
- orrs r0, r2\n\
- movs r2, 0xF\n\
- ands r0, r2\n\
- movs r2, 0x40\n\
- orrs r0, r2\n\
- strb r0, [r1, 0x5]\n\
- movs r2, 0\n\
- strh r2, [r1, 0x2E]\n\
- strh r2, [r1, 0x30]\n\
- strh r2, [r1, 0x32]\n\
- ldr r0, =0x0000ffff\n\
- strh r0, [r1, 0x34]\n\
- ldrh r0, [r1, 0x22]\n\
- strh r0, [r1, 0x36]\n\
- strh r2, [r1, 0x38]\n\
- ldr r1, =0x00003e41\n\
- movs r0, 0x50\n\
- bl SetGpuReg\n\
- ldr r1, =0x00000e0e\n\
- movs r0, 0x52\n\
- bl SetGpuReg\n\
- ldr r1, =0x00003f3f\n\
- movs r0, 0x48\n\
- bl SetGpuReg\n\
- ldr r0, =gUnknown_0855B610\n\
- movs r1, 0xC0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- movs r0, 0x12\n\
- movs r1, 0x78\n\
- bl SetGpuReg\n\
- movs r4, 0x3\n\
- ldr r7, =0x0600f800\n\
- ldr r0, =0x0000bff4\n\
- adds r6, r0, 0\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldr r0, =gFieldEffectObjectTemplatePointers\n\
+ adds r0, 0x90\n\
+ ldr r0, [r0]\n\
+ movs r2, 0x18\n\
+ negs r2, r2\n\
+ movs r1, 0x78\n\
+ movs r3, 0x1\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r0, 4\n\
+ add r1, r8\n\
+ lsls r1, 2\n\
+ ldr r0, =gSprites\n\
+ adds r1, r0\n\
+ ldrb r2, [r1, 0x5]\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ movs r2, 0x4\n\
+ orrs r0, r2\n\
+ movs r2, 0xF\n\
+ ands r0, r2\n\
+ movs r2, 0x40\n\
+ orrs r0, r2\n\
+ strb r0, [r1, 0x5]\n\
+ movs r2, 0\n\
+ strh r2, [r1, 0x2E]\n\
+ strh r2, [r1, 0x30]\n\
+ strh r2, [r1, 0x32]\n\
+ ldr r0, =0x0000ffff\n\
+ strh r0, [r1, 0x34]\n\
+ ldrh r0, [r1, 0x22]\n\
+ strh r0, [r1, 0x36]\n\
+ strh r2, [r1, 0x38]\n\
+ ldr r1, =0x00003e41\n\
+ movs r0, 0x50\n\
+ bl SetGpuReg\n\
+ ldr r1, =0x00000e0e\n\
+ movs r0, 0x52\n\
+ bl SetGpuReg\n\
+ ldr r1, =0x00003f3f\n\
+ movs r0, 0x48\n\
+ bl SetGpuReg\n\
+ ldr r0, =gUnknown_0855B610\n\
+ movs r1, 0xC0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ movs r0, 0x12\n\
+ movs r1, 0x78\n\
+ bl SetGpuReg\n\
+ movs r4, 0x3\n\
+ ldr r7, =0x0600f800\n\
+ ldr r0, =0x0000bff4\n\
+ adds r6, r0, 0\n\
_080B901A:\n\
- movs r2, 0xC\n\
- lsls r0, r4, 1\n\
- lsls r5, r4, 5\n\
- adds r0, r4\n\
- lsls r3, r0, 1\n\
+ movs r2, 0xC\n\
+ lsls r0, r4, 1\n\
+ lsls r5, r4, 5\n\
+ adds r0, r4\n\
+ lsls r3, r0, 1\n\
_080B9024:\n\
- adds r0, r5, r2\n\
- lsls r0, 1\n\
- adds r0, r7\n\
- adds r1, r2, r6\n\
- adds r1, r3, r1\n\
- adds r1, 0x1\n\
- strh r1, [r0]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x11\n\
- bls _080B9024\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0xE\n\
- bls _080B901A\n\
- movs r0, 0\n\
- ldr r5, =gUnknown_0855B630\n\
+ adds r0, r5, r2\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ adds r1, r2, r6\n\
+ adds r1, r3, r1\n\
+ adds r1, 0x1\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0x11\n\
+ bls _080B9024\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0xE\n\
+ bls _080B901A\n\
+ movs r0, 0\n\
+ ldr r5, =gUnknown_0855B630\n\
_080B904A:\n\
- movs r4, 0\n\
- adds r7, r0, 0x1\n\
- lsls r6, r0, 5\n\
+ movs r4, 0\n\
+ adds r7, r0, 0x1\n\
+ lsls r6, r0, 5\n\
_080B9050:\n\
- lsls r1, r4, 2\n\
- adds r1, r6, r1\n\
- ldr r0, =0x06008020\n\
- adds r3, r1, r0\n\
- adds r0, r1, 0x1\n\
- adds r0, r5\n\
- ldrb r2, [r0]\n\
- lsls r2, 8\n\
- adds r0, r1, r5\n\
- ldrb r0, [r0]\n\
- adds r0, r2\n\
- strh r0, [r3]\n\
- ldr r0, =0x06008022\n\
- adds r3, r1, r0\n\
- adds r0, r1, 0x3\n\
- adds r0, r5\n\
- ldrb r2, [r0]\n\
- lsls r2, 8\n\
- adds r1, 0x2\n\
- adds r1, r5\n\
- ldrb r0, [r1]\n\
- adds r0, r2\n\
- strh r0, [r3]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x7\n\
- bls _080B9050\n\
- lsls r0, r7, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x59\n\
- bls _080B904A\n\
- mov r0, r8\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .pool");
+ lsls r1, r4, 2\n\
+ adds r1, r6, r1\n\
+ ldr r0, =0x06008020\n\
+ adds r3, r1, r0\n\
+ adds r0, r1, 0x1\n\
+ adds r0, r5\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 8\n\
+ adds r0, r1, r5\n\
+ ldrb r0, [r0]\n\
+ adds r0, r2\n\
+ strh r0, [r3]\n\
+ ldr r0, =0x06008022\n\
+ adds r3, r1, r0\n\
+ adds r0, r1, 0x3\n\
+ adds r0, r5\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 8\n\
+ adds r1, 0x2\n\
+ adds r1, r5\n\
+ ldrb r0, [r1]\n\
+ adds r0, r2\n\
+ strh r0, [r3]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x7\n\
+ bls _080B9050\n\
+ lsls r0, r7, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x59\n\
+ bls _080B904A\n\
+ mov r0, r8\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
}
#endif // NONMATCHING
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index 856f7d5ef..1f90c02b9 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -142,7 +142,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
reflectionSprite->pos2.x = mainSprite->pos2.x;
reflectionSprite->pos2.y = -mainSprite->pos2.y;
reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;
-
+
if (eventObject->unk3_3 == TRUE)
reflectionSprite->invisible = TRUE;
@@ -1022,19 +1022,19 @@ static void SynchroniseSurfAnim(struct EventObject *eventObject, struct Sprite *
StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[eventObject->movementDirection]);
}
-#ifdef NONMATCHING
void sub_81556E8(struct EventObject *eventObject, struct Sprite *sprite)
{
- s16 x;
- s16 y;
u8 i;
+ s16 x = eventObject->currentCoords.x;
+ s16 y = eventObject->currentCoords.y;
+ s32 spriteY = sprite->pos2.y;
- x = eventObject->currentCoords.x;
- y = eventObject->currentCoords.y;
- if (sprite->pos2.y == 0 && (x != sprite->data[6] || y != sprite->data[7]))
+ if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7]))
{
- sprite->data[5] = sprite->pos2.y;
- for (sprite->data[6] = x, sprite->data[7] = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data[6], y = sprite->data[7])
+ sprite->data[5] = spriteY;
+ sprite->data[6] = x;
+ sprite->data[7] = y;
+ for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7])
{
MoveCoords(i, &x, &y);
if (MapGridGetZCoordAt(x, y) == 3)
@@ -1045,87 +1045,6 @@ void sub_81556E8(struct EventObject *eventObject, struct Sprite *sprite)
}
}
}
-#else
-NAKED void sub_81556E8(struct EventObject *eventObject, struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x4\n\
- adds r4, r1, 0\n\
- ldrh r2, [r0, 0x10]\n\
- mov r1, sp\n\
- strh r2, [r1]\n\
- ldrh r1, [r0, 0x12]\n\
- mov r0, sp\n\
- adds r0, 0x2\n\
- strh r1, [r0]\n\
- movs r2, 0x26\n\
- ldrsh r3, [r4, r2]\n\
- mov r8, r0\n\
- cmp r3, 0\n\
- bne _08155770\n\
- mov r0, sp\n\
- movs r5, 0\n\
- ldrsh r2, [r0, r5]\n\
- movs r5, 0x3A\n\
- ldrsh r0, [r4, r5]\n\
- cmp r2, r0\n\
- bne _08155724\n\
- lsls r0, r1, 16\n\
- asrs r0, 16\n\
- movs r5, 0x3C\n\
- ldrsh r1, [r4, r5]\n\
- cmp r0, r1\n\
- beq _08155770\n\
-_08155724:\n\
- strh r3, [r4, 0x38]\n\
- strh r2, [r4, 0x3A]\n\
- mov r1, r8\n\
- movs r2, 0\n\
- ldrsh r0, [r1, r2]\n\
- strh r0, [r4, 0x3C]\n\
- movs r5, 0x1\n\
- mov r7, r8\n\
- mov r6, sp\n\
-_08155736:\n\
- adds r0, r5, 0\n\
- mov r1, sp\n\
- adds r2, r7, 0\n\
- bl MoveCoords\n\
- movs r1, 0\n\
- ldrsh r0, [r6, r1]\n\
- movs r2, 0\n\
- ldrsh r1, [r7, r2]\n\
- bl MapGridGetZCoordAt\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x3\n\
- bne _0815575C\n\
- ldrh r0, [r4, 0x38]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x38]\n\
- b _08155770\n\
-_0815575C:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldrh r0, [r4, 0x3A]\n\
- strh r0, [r6]\n\
- ldrh r0, [r4, 0x3C]\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- cmp r5, 0x4\n\
- bls _08155736\n\
-_08155770:\n\
- add sp, 0x4\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0");
-}
-#endif
static void CreateBobbingEffect(struct EventObject *eventObject, struct Sprite *linkedSprite, struct Sprite *sprite)
{
@@ -1450,7 +1369,7 @@ void sub_8155EA0(struct Sprite *sprite)
bool8 sub_8155EA8(struct Sprite *sprite)
{
bool8 returnBool = FALSE;
-
+
switch (sprite->data[7])
{
case 0:
@@ -1470,7 +1389,7 @@ bool8 sub_8155EA8(struct Sprite *sprite)
sprite->pos2.y += sub_8097728(0x47 - sprite->data[6]);
break;
}
-
+
SetGpuReg(REG_OFFSET_BG0HOFS, -sprite->pos2.x);
if (++sprite->data[6] == 72)
{
@@ -1483,14 +1402,14 @@ bool8 sub_8155EA8(struct Sprite *sprite)
sprite->pos2.x = 0;
returnBool = TRUE;
}
-
+
return returnBool;
}
void sub_8155F80(struct Sprite *sprite)
{
u8 i, j;
-
+
switch (sprite->data[2])
{
case 0:
@@ -1594,7 +1513,7 @@ void sub_8155F80(struct Sprite *sprite)
FieldEffectStop(sprite, FLDEFF_64);
break;
}
-
+
if (sprite->data[2] == 1)
{
if ((sprite->data[1] & 7) == 0)
@@ -1603,7 +1522,7 @@ void sub_8155F80(struct Sprite *sprite)
sprite->data[3] = -sprite->data[3];
sprite->data[1]++;
}
-
+
sprite->data[0]++;
}
@@ -1676,102 +1595,102 @@ static void sub_81561FC(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
NAKED void sub_81561FC(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
{
asm_unified("push {r4-r7,lr}\n\
- adds r6, r0, 0\n\
- adds r0, r1, 0\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r1, r6, 0\n\
- bl SetObjectSubpriorityByZCoord\n\
- movs r7, 0\n\
+ adds r6, r0, 0\n\
+ adds r0, r1, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r1, r6, 0\n\
+ bl SetObjectSubpriorityByZCoord\n\
+ movs r7, 0\n\
_08156212:\n\
- lsls r0, r7, 3\n\
- adds r0, r7\n\
- lsls r0, 2\n\
- ldr r1, =gEventObjects\n\
- adds r4, r0, r1\n\
- ldrb r0, [r4]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _081562B4\n\
- ldrb r0, [r4, 0x5]\n\
- bl GetEventObjectGraphicsInfo\n\
- ldrb r1, [r4, 0x4]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, =gSprites\n\
- adds r5, r0, r1\n\
- adds r0, r6, 0\n\
- adds r0, 0x28\n\
- movs r2, 0\n\
- ldrsb r2, [r0, r2]\n\
- ldrh r0, [r6, 0x20]\n\
- adds r1, r0, r2\n\
- subs r0, r2\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- movs r0, 0x20\n\
- ldrsh r2, [r5, r0]\n\
- cmp r1, r2\n\
- bge _081562B4\n\
- lsls r0, r4, 16\n\
- asrs r0, 16\n\
- cmp r0, r2\n\
- ble _081562B4\n\
- adds r0, r5, 0\n\
- adds r0, 0x29\n\
- movs r3, 0\n\
- ldrsb r3, [r0, r3]\n\
- ldrh r2, [r5, 0x22]\n\
- adds r2, r3\n\
- ldrh r4, [r5, 0x22]\n\
- adds r0, r6, 0\n\
- adds r0, 0x29\n\
- movs r1, 0\n\
- ldrsb r1, [r0, r1]\n\
- ldrh r0, [r6, 0x22]\n\
- subs r0, r1\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- adds r3, r0, r3\n\
- lsls r2, 16\n\
- asrs r2, 16\n\
- lsls r3, 16\n\
- asrs r3, 16\n\
- cmp r2, r3\n\
- blt _0815628C\n\
- cmp r2, r0\n\
- bge _081562B4\n\
+ lsls r0, r7, 3\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ ldr r1, =gEventObjects\n\
+ adds r4, r0, r1\n\
+ ldrb r0, [r4]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _081562B4\n\
+ ldrb r0, [r4, 0x5]\n\
+ bl GetEventObjectGraphicsInfo\n\
+ ldrb r1, [r4, 0x4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ ldr r1, =gSprites\n\
+ adds r5, r0, r1\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x28\n\
+ movs r2, 0\n\
+ ldrsb r2, [r0, r2]\n\
+ ldrh r0, [r6, 0x20]\n\
+ adds r1, r0, r2\n\
+ subs r0, r2\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ movs r0, 0x20\n\
+ ldrsh r2, [r5, r0]\n\
+ cmp r1, r2\n\
+ bge _081562B4\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ cmp r0, r2\n\
+ ble _081562B4\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x29\n\
+ movs r3, 0\n\
+ ldrsb r3, [r0, r3]\n\
+ ldrh r2, [r5, 0x22]\n\
+ adds r2, r3\n\
+ ldrh r4, [r5, 0x22]\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x29\n\
+ movs r1, 0\n\
+ ldrsb r1, [r0, r1]\n\
+ ldrh r0, [r6, 0x22]\n\
+ subs r0, r1\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ adds r3, r0, r3\n\
+ lsls r2, 16\n\
+ asrs r2, 16\n\
+ lsls r3, 16\n\
+ asrs r3, 16\n\
+ cmp r2, r3\n\
+ blt _0815628C\n\
+ cmp r2, r0\n\
+ bge _081562B4\n\
_0815628C:\n\
- lsls r0, r4, 16\n\
- asrs r0, 16\n\
- cmp r0, r3\n\
- ble _081562B4\n\
- adds r2, r6, 0\n\
- adds r2, 0x43\n\
- adds r0, r5, 0\n\
- adds r0, 0x43\n\
- ldrb r1, [r0]\n\
- ldrb r0, [r2]\n\
- cmp r0, r1\n\
- bhi _081562B4\n\
- adds r0, r1, 0x2\n\
- strb r0, [r2]\n\
- b _081562BE\n\
- .pool\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ cmp r0, r3\n\
+ ble _081562B4\n\
+ adds r2, r6, 0\n\
+ adds r2, 0x43\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x43\n\
+ ldrb r1, [r0]\n\
+ ldrb r0, [r2]\n\
+ cmp r0, r1\n\
+ bhi _081562B4\n\
+ adds r0, r1, 0x2\n\
+ strb r0, [r2]\n\
+ b _081562BE\n\
+ .pool\n\
_081562B4:\n\
- adds r0, r7, 0x1\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- cmp r7, 0xF\n\
- bls _08156212\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ cmp r7, 0xF\n\
+ bls _08156212\n\
_081562BE:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0");
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0");
}
#endif
diff --git a/src/fight.c b/src/fight.c
index 89fe5900b..c9000fae4 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -1,25 +1,42 @@
#include "global.h"
#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "random.h"
+#include "task.h"
+#include "trig.h"
#include "constants/rgb.h"
-extern void unc_080B08A0(struct Sprite *);
-extern void sub_810CE68(struct Sprite *);
-extern void sub_810CEB4(struct Sprite *);
-extern void sub_810CEE0(struct Sprite *);
-extern void sub_810CF30(struct Sprite *);
-extern void sub_810D10C(struct Sprite *);
-extern void sub_810D1B4(struct Sprite *);
-extern void sub_810D278(struct Sprite *);
-extern void sub_810D2E4(struct Sprite *);
-extern void sub_810D37C(struct Sprite *);
-extern void sub_810D40C(struct Sprite *);
-extern void sub_810D4F4(struct Sprite *);
-extern void sub_810D608(struct Sprite *);
-extern void sub_810D714(struct Sprite *);
-extern void sub_810D874(struct Sprite *);
-extern void sub_810D984(struct Sprite *);
-extern void sub_810DA10(struct Sprite *);
-extern void sub_810DA7C(struct Sprite *);
+void unc_080B08A0(struct Sprite *);
+void sub_810CE68(struct Sprite *);
+void sub_810CEB4(struct Sprite *);
+void AnimBasicFistOrFoot(struct Sprite *);
+void sub_810CF30(struct Sprite *);
+void sub_810D10C(struct Sprite *);
+void sub_810D1B4(struct Sprite *);
+void AnimSpinningKickOrPunch(struct Sprite *);
+void AnimStompFoot(struct Sprite *);
+void sub_810D37C(struct Sprite *);
+void sub_810D40C(struct Sprite *);
+void sub_810D4F4(struct Sprite *);
+void sub_810D608(struct Sprite *);
+void sub_810D714(struct Sprite *);
+void sub_810D874(struct Sprite *);
+void sub_810D984(struct Sprite *);
+void sub_810DA10(struct Sprite *);
+void sub_810DA7C(struct Sprite *);
+static void sub_810D0B8(struct Sprite *);
+static void sub_810D164(struct Sprite *);
+static void sub_810D240(struct Sprite *);
+static void AnimSpinningKickOrPunchFinish(struct Sprite *);
+static void AnimStompFootStep(struct Sprite *);
+static void AnimStompFootEnd(struct Sprite *);
+static void sub_810D47C(struct Sprite *);
+static void sub_810D5DC(struct Sprite *);
+static void sub_810D6A8(struct Sprite *);
+static void sub_810D770(struct Sprite *);
+static void sub_810D830(struct Sprite *);
+
+extern struct SpriteTemplate gBasicHitSplatSpriteTemplate;
const struct SpriteTemplate gUnknown_08595E14 =
{
@@ -109,7 +126,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810CEE0,
+ .callback = AnimBasicFistOrFoot,
};
const struct SpriteTemplate gUnknown_08595EB0 =
@@ -165,7 +182,7 @@ const struct SpriteTemplate gUnknown_08595F14 =
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gUnknown_08595F10,
- .callback = sub_810D278,
+ .callback = AnimSpinningKickOrPunch,
};
const union AffineAnimCmd gUnknown_08595F2C[] =
@@ -188,7 +205,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gUnknown_08595F44,
- .callback = sub_810D278,
+ .callback = AnimSpinningKickOrPunch,
};
const struct SpriteTemplate gUnknown_08595F60 =
@@ -199,7 +216,7 @@ const struct SpriteTemplate gUnknown_08595F60 =
.anims = gUnknown_08595E58,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810D2E4,
+ .callback = AnimStompFoot,
};
const struct SpriteTemplate gUnknown_08595F78 =
@@ -396,3 +413,623 @@ const struct SpriteTemplate gUnknown_08596104 =
.affineAnims = gUnknown_08596100,
.callback = sub_810DA7C,
};
+
+void unc_080B08A0(struct Sprite *sprite)
+{
+ sub_80A6864(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = 15;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810CE68(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[7] == 1 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[6]);
+ gBattleAnimArgs[6] = 0;
+ sub_80A7938(sprite);
+}
+
+void sub_810CEB4(struct Sprite *sprite)
+{
+ if (IsContest())
+ {
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ sub_810CE68(sprite);
+}
+
+// Displays a basic fist or foot sprite for a given duration.
+// Used by many fighting moves (and elemental "punch" moves).
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: ? (todo: related to initial pixel offsets)
+// arg 4: anim num
+void AnimBasicFistOrFoot(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+
+ if (gBattleAnimArgs[3] == 0)
+ InitAnimSpritePos(sprite, 1);
+ else
+ sub_80A6980(sprite, TRUE);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810CF30(struct Sprite *sprite)
+{
+ u8 battler;
+ s16 xMod, yMod;
+ s16 x, y;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (gBattleAnimArgs[2] < 0)
+ gBattleAnimArgs[2] = Random2() % 5;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
+
+ xMod = sub_80A861C(battler, 1) / 2;
+ yMod = sub_80A861C(battler, 0) / 4;
+
+ x = Random2() % xMod;
+ y = Random2() % yMod;
+
+ if (Random2() & 1)
+ x *= -1;
+ if (Random2() & 1)
+ y *= -1;
+
+ if ((gBattlerPositions[battler] & BIT_SIDE) == B_SIDE_PLAYER)
+ y += 0xFFF0;
+
+ sprite->pos1.x += x;
+ sprite->pos1.y += y;
+
+ sprite->data[0] = gBattleAnimArgs[1];
+ sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ if (sprite->data[7] != 64)
+ {
+ StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0);
+ gSprites[sprite->data[7]].callback = SpriteCallbackDummy;
+ }
+
+ sprite->callback = sub_810D0B8;
+}
+
+static void sub_810D0B8(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (sprite->data[7] != 64)
+ {
+ FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum);
+ DestroySprite(&gSprites[sprite->data[7]]);
+ }
+
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->data[0]--;
+ }
+}
+
+void sub_810D10C(struct Sprite *sprite)
+{
+ sub_80A6980(sprite, TRUE);
+ sprite->data[0] = 30;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[2] = sprite->pos1.x - 20;
+ }
+ else
+ {
+ sprite->data[2] = sprite->pos1.x + 20;
+ sprite->hFlip = 1;
+ }
+
+ sprite->data[4] = sprite->pos1.y - 20;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_810D164);
+}
+
+static void sub_810D164(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 11)
+ {
+ sprite->data[2] = sprite->pos1.x - sprite->pos2.x;
+ sprite->data[4] = sprite->pos1.y - sprite->pos2.y;
+ sprite->data[0] = 8;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+void sub_810D1B4(struct Sprite *sprite)
+{
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
+ gBattleAnimArgs[0] *= -1;
+
+ sub_80A6980(sprite, TRUE);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y;
+
+ InitAnimLinearTranslation(sprite);
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ sprite->data[6] = gBattleAnimArgs[4];
+ sprite->data[7] = 0;
+
+ sprite->callback = sub_810D240;
+}
+
+static void sub_810D240(struct Sprite *sprite)
+{
+ if (!TranslateAnimLinear(sprite))
+ {
+ sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]);
+ sprite->data[7] += sprite->data[6];
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Animates the spinning, shrinking kick or punch, which then
+// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: anim num
+// arg 3: spin duration
+void AnimSpinningKickOrPunch(struct Sprite *sprite)
+{
+ sub_80A6980(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0] = gBattleAnimArgs[3];
+
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish);
+}
+
+static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = 20;
+
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates MOVE_STOMP's foot that slides downward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wait duration
+void AnimStompFoot(struct Sprite *sprite)
+{
+ sub_80A6980(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+
+ sprite->callback = AnimStompFootStep;
+}
+
+static void AnimStompFootStep(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == -1)
+ {
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, AnimStompFootEnd);
+ }
+}
+
+static void AnimStompFootEnd(struct Sprite *sprite)
+{
+ sprite->data[0] = 15;
+
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810D37C(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sub_80A6980(sprite, TRUE);
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+
+ if (sprite->data[3] > 100)
+ sprite->invisible = sprite->data[3] % 2;
+
+ if (sprite->data[3] > 120)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_810D40C(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[1];
+ sprite->pos1.y += gBattleAnimArgs[2];
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = 0;
+ sprite->callback = sub_810D47C;
+}
+
+static void sub_810D47C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (--sprite->data[1] == 0)
+ {
+ if (sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[3]++;
+ if (sprite->data[3] & 1)
+ sprite->pos2.x = 2;
+ else
+ sprite->pos2.x = -2;
+ }
+
+ if (--sprite->data[2] == 0)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_810D4F4(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3];
+ }
+
+ sprite->oam.tileNum += gBattleAnimArgs[1] * 16;
+ sprite->data[0] = 0;
+
+ switch (gBattleAnimArgs[1])
+ {
+ case 0:
+ sprite->data[6] = -3;
+ sprite->data[7] = -3;
+ break;
+ case 1:
+ sprite->data[6] = 3;
+ sprite->data[7] = -3;
+ break;
+ case 2:
+ sprite->data[6] = -3;
+ sprite->data[7] = 3;
+ break;
+ case 3:
+ sprite->data[6] = 3;
+ sprite->data[7] = 3;
+ break;
+ default:
+ DestroyAnimSprite(sprite);
+ return;
+ }
+
+ sprite->callback = sub_810D5DC;
+}
+
+static void sub_810D5DC(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[6];
+ sprite->pos1.y += sprite->data[7];
+
+ if (++sprite->data[0] > 40)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810D608(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ sprite->oam.priority = sub_80A8328(gBattleAnimAttacker);
+ sprite->data[7] = gBattleAnimTarget;
+ }
+ else
+ {
+ sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ sprite->data[7] = gBattleAnimAttacker;
+ }
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 12;
+ sprite->data[2] = 8;
+ sprite->callback = sub_810D6A8;
+}
+
+static void sub_810D6A8(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 180)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
+
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A6F98;
+ }
+}
+
+void sub_810D714(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = 120;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sub_80A8048(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
+
+ sprite->data[6] = gBattleAnimArgs[1];
+ sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
+
+ sprite->callback = sub_810D770;
+}
+
+static void sub_810D770(struct Sprite *sprite)
+{
+ void *var0;
+
+ if (sprite->data[0] != 0)
+ {
+ var0 = sub_80A8050(sprite->data[4], sprite->data[5]);
+ var0 -= sprite->data[6];
+ sub_80A8048(&sprite->data[4], &sprite->data[5], var0);
+
+ var0 = (void *)(((intptr_t)var0) >> 8);
+ sprite->pos1.y = (intptr_t)var0;
+ if (sprite->pos1.y < -8)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[0]--;
+ }
+ else
+ {
+ s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ sprite->data[0] = pos2 - pos0;
+ sprite->data[1] = pos3 - pos1;
+ sprite->data[2] = sprite->pos1.x << 4;
+ sprite->data[3] = sprite->pos1.y << 4;
+
+ sprite->callback = sub_810D830;
+ }
+}
+
+static void sub_810D830(struct Sprite *sprite)
+{
+ u16 edgeX;
+
+ sprite->data[2] += sprite->data[0];
+ sprite->data[3] += sprite->data[1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+
+ edgeX = sprite->pos1.x + 8;
+ if (edgeX > 256 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810D874(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
+ battler = gBattleAnimTarget;
+ sprite->oam.priority = sub_80A8328(gBattleAnimAttacker);
+ }
+ else
+ {
+ battler = gBattleAnimAttacker;
+ sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ }
+
+ if (IsContest())
+ sprite->oam.matrixNum |= 0x8;
+ else if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ sprite->oam.matrixNum |= 0x18;
+
+ sprite->data[0] = 16;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(battler, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(battler, 3);
+
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = sub_80A6F98;
+}
+
+static void sub_810D960(struct Sprite *sprite)
+{
+ if (sprite->data[0] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+
+ sprite->data[0]++;
+}
+
+void sub_810D984(struct Sprite *sprite)
+{
+ u8 turn;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[0];
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->data[4] = gBattleAnimArgs[2];
+
+ turn = gAnimMoveTurn;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ turn++;
+
+ if (turn & 1)
+ {
+ sprite->data[2] = -sprite->data[2];
+ sprite->data[1]++;
+ }
+
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->pos2.x = sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+ sprite->callback = sub_810D960;
+}
+
+void sub_810DA10(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[2] == 0)
+ InitAnimSpritePos(sprite, 0);
+ else
+ sub_80A6980(sprite, FALSE);
+
+ if (IsContest())
+ {
+ StartSpriteAnim(sprite, 2);
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->callback = sub_80A67D8;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810DA7C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ sprite->data[1] = (sprite->data[1] + 40) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 2);
+ if (++sprite->data[0] > 40)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_810DABC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80A6DAC(0);
+ task->data[8] = gBattleAnimArgs[0];
+ task->data[0]++;
+ break;
+ case 1:
+ if (--task->data[8] == -1)
+ task->data[0]++;
+ break;
+ case 2:
+ default:
+ task->data[9] += 1280;
+ break;
+ }
+
+ task->data[10] += 2816;
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattle_BG3_X += task->data[9] >> 8;
+ else
+ gBattle_BG3_X -= task->data[9] >> 8;
+
+ gBattle_BG3_Y += task->data[10] >> 8;
+ task->data[9] &= 0xFF;
+ task->data[10] &= 0xFF;
+
+ if (gBattleAnimArgs[7] == -1)
+ {
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ sub_80A6DAC(1);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 7ac2e6fa7..d90628184 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -36,7 +36,7 @@
#include "constants/items.h"
#include "constants/event_objects.h"
-extern u8 gUnknown_0203CEF8[];
+extern u8 gSelectedOrderFromParty[];
struct FrontierBrainMon
{
@@ -107,397 +107,397 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
// Silver Symbol.
{
{
- .species = SPECIES_ALAKAZAM,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 24,
- .nature = 15,
- .evs = {106, 0, 152, 152, 100, 0},
- .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE},
+ .species = SPECIES_ALAKAZAM,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 24,
+ .nature = 15,
+ .evs = {106, 0, 152, 152, 100, 0},
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE},
},
{
- .species = SPECIES_ENTEI,
- .heldItem = ITEM_LUM_BERRY,
- .fixedIV = 24,
- .nature = 1,
- .evs = {100, 152, 152, 0, 100, 6},
- .moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR},
+ .species = SPECIES_ENTEI,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 24,
+ .nature = 1,
+ .evs = {100, 152, 152, 0, 100, 6},
+ .moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR},
},
{
- .species = SPECIES_SNORLAX,
- .heldItem = ITEM_QUICK_CLAW,
- .fixedIV = 24,
- .nature = 3,
- .evs = {152, 152, 0, 0, 106, 100},
- .moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL},
+ .species = SPECIES_SNORLAX,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 24,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 106, 100},
+ .moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_RAIKOU,
- .heldItem = ITEM_LUM_BERRY,
- .fixedIV = 31,
- .nature = 15,
- .evs = {158, 0, 252, 100, 0, 0},
- .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST},
+ .species = SPECIES_RAIKOU,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {158, 0, 252, 100, 0, 0},
+ .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST},
},
{
- .species = SPECIES_LATIOS,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 31,
- .nature = 15,
- .evs = {252, 0, 252, 6, 0, 0},
- .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW},
+ .species = SPECIES_LATIOS,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW},
},
{
- .species = SPECIES_SNORLAX,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 31,
- .nature = 3,
- .evs = {252, 252, 0, 0, 6, 0},
- .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL},
+ .species = SPECIES_SNORLAX,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {252, 252, 0, 0, 6, 0},
+ .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL},
},
},
},
- [FRONTIER_FACILITY_DOME] =
- {
+ [FRONTIER_FACILITY_DOME] =
+ {
// Silver Symbol.
{
{
- .species = SPECIES_SWAMPERT,
- .heldItem = ITEM_FOCUS_BAND,
- .fixedIV = 20,
- .nature = 2,
- .evs = {152, 152, 106, 0, 100, 0},
- .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
+ .species = SPECIES_SWAMPERT,
+ .heldItem = ITEM_FOCUS_BAND,
+ .fixedIV = 20,
+ .nature = 2,
+ .evs = {152, 152, 106, 0, 100, 0},
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
},
{
- .species = SPECIES_SALAMENCE,
- .heldItem = ITEM_LUM_BERRY,
- .fixedIV = 20,
- .nature = 3,
- .evs = {152, 152, 106, 100, 0, 0},
- .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
+ .species = SPECIES_SALAMENCE,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 20,
+ .nature = 3,
+ .evs = {152, 152, 106, 100, 0, 0},
+ .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
},
{
- .species = SPECIES_CHARIZARD,
- .heldItem = ITEM_WHITE_HERB,
- .fixedIV = 20,
- .nature = 17,
- .evs = {100, 152, 106, 152, 0, 0},
- .moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE},
+ .species = SPECIES_CHARIZARD,
+ .heldItem = ITEM_WHITE_HERB,
+ .fixedIV = 20,
+ .nature = 17,
+ .evs = {100, 152, 106, 152, 0, 0},
+ .moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_SWAMPERT,
- .heldItem = ITEM_LEFTOVERS,
- .fixedIV = 31,
- .nature = 2,
- .evs = {252, 252, 6, 0, 0, 0},
- .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ .species = SPECIES_SWAMPERT,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 252, 6, 0, 0, 0},
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
},
{
- .species = SPECIES_METAGROSS,
- .heldItem = ITEM_QUICK_CLAW,
- .fixedIV = 31,
- .nature = 2,
- .evs = {252, 252, 6, 0, 0, 0},
- .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT},
+ .species = SPECIES_METAGROSS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 252, 6, 0, 0, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT},
},
{
- .species = SPECIES_LATIAS,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 31,
- .nature = 15,
- .evs = {252, 0, 252, 6, 0, 0},
- .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST},
+ .species = SPECIES_LATIAS,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST},
},
},
},
- [FRONTIER_FACILITY_PALACE] =
- {
+ [FRONTIER_FACILITY_PALACE] =
+ {
// Silver Symbol.
{
{
- .species = SPECIES_CROBAT,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 16,
- .nature = 3,
- .evs = {152, 0, 0, 152, 100, 106},
- .moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY},
+ .species = SPECIES_CROBAT,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 0, 0, 152, 100, 106},
+ .moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY},
},
{
- .species = SPECIES_SLAKING,
- .heldItem = ITEM_SCOPE_LENS,
- .fixedIV = 16,
- .nature = 0,
- .evs = {152, 152, 0, 106, 100, 0},
- .moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 16,
+ .nature = 0,
+ .evs = {152, 152, 0, 106, 100, 0},
+ .moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
},
{
- .species = SPECIES_LAPRAS,
- .heldItem = ITEM_QUICK_CLAW,
- .fixedIV = 16,
- .nature = 17,
- .evs = {0, 0, 252, 0, 106, 152},
- .moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT},
+ .species = SPECIES_LAPRAS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 17,
+ .evs = {0, 0, 252, 0, 106, 152},
+ .moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_ARCANINE,
- .heldItem = ITEM_WHITE_HERB,
- .fixedIV = 31,
- .nature = 11,
- .evs = {6, 252, 252, 0, 0, 0},
- .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT},
+ .species = SPECIES_ARCANINE,
+ .heldItem = ITEM_WHITE_HERB,
+ .fixedIV = 31,
+ .nature = 11,
+ .evs = {6, 252, 252, 0, 0, 0},
+ .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT},
},
{
- .species = SPECIES_SLAKING,
- .heldItem = ITEM_SCOPE_LENS,
- .fixedIV = 31,
- .nature = 0,
- .evs = {6, 252, 0, 252, 0, 0},
- .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN},
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 31,
+ .nature = 0,
+ .evs = {6, 252, 0, 252, 0, 0},
+ .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN},
},
{
- .species = SPECIES_SUICUNE,
- .heldItem = ITEM_KINGS_ROCK,
- .fixedIV = 31,
- .nature = 11,
- .evs = {252, 0, 252, 6, 0, 0},
- .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND},
+ .species = SPECIES_SUICUNE,
+ .heldItem = ITEM_KINGS_ROCK,
+ .fixedIV = 31,
+ .nature = 11,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND},
},
},
},
- [FRONTIER_FACILITY_ARENA] =
- {
+ [FRONTIER_FACILITY_ARENA] =
+ {
// Silver Symbol.
{
{
- .species = SPECIES_HERACROSS,
- .heldItem = ITEM_SALAC_BERRY,
- .fixedIV = 20,
- .nature = 13,
- .evs = {106, 152, 0, 152, 0, 100},
- .moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL},
+ .species = SPECIES_HERACROSS,
+ .heldItem = ITEM_SALAC_BERRY,
+ .fixedIV = 20,
+ .nature = 13,
+ .evs = {106, 152, 0, 152, 0, 100},
+ .moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL},
},
{
- .species = SPECIES_UMBREON,
- .heldItem = ITEM_LEFTOVERS,
- .fixedIV = 20,
- .nature = 20,
- .evs = {152, 0, 100, 0, 152, 106},
- .moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK},
+ .species = SPECIES_UMBREON,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 20,
+ .nature = 20,
+ .evs = {152, 0, 100, 0, 152, 106},
+ .moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK},
},
{
- .species = SPECIES_SHEDINJA,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 20,
- .nature = 3,
- .evs = {0, 252, 6, 252, 0, 0},
- .moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
+ .species = SPECIES_SHEDINJA,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 20,
+ .nature = 3,
+ .evs = {0, 252, 6, 252, 0, 0},
+ .moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_UMBREON,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 31,
- .nature = 20,
- .evs = {252, 0, 0, 0, 252, 6},
- .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC},
+ .species = SPECIES_UMBREON,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 20,
+ .evs = {252, 0, 0, 0, 252, 6},
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC},
},
{
- .species = SPECIES_GENGAR,
- .heldItem = ITEM_LEFTOVERS,
- .fixedIV = 31,
- .nature = 15,
- .evs = {252, 0, 252, 0, 6, 0},
- .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND},
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 0, 6, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND},
},
{
- .species = SPECIES_BRELOOM,
- .heldItem = ITEM_LUM_BERRY,
- .fixedIV = 31,
- .nature = 13,
- .evs = {6, 252, 0, 252, 0, 0},
- .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT},
+ .species = SPECIES_BRELOOM,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 13,
+ .evs = {6, 252, 0, 252, 0, 0},
+ .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT},
},
},
},
- [FRONTIER_FACILITY_FACTORY] =
- {
+ [FRONTIER_FACILITY_FACTORY] =
+ {
// Because Factory's pokemon are random, this facility's Brain also uses random pokemon.
// What is interesting, this team is actually the one Steven uses in the multi tag battle alongside the player.
{
{
- .species = SPECIES_METANG,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 2,
- .evs = {0, 252, 252, 0, 6, 0},
- .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
+ .species = SPECIES_METANG,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {0, 252, 252, 0, 6, 0},
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
},
{
- .species = SPECIES_SKARMORY,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 8,
- .evs = {252, 0, 0, 0, 6, 252},
- .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 8,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
},
{
- .species = SPECIES_AGGRON,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 3,
- .evs = {0, 252, 0, 0, 252, 6},
- .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
+ .species = SPECIES_AGGRON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {0, 252, 0, 0, 252, 6},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
},
},
{
{
- .species = SPECIES_METANG,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 2,
- .evs = {0, 252, 252, 0, 6, 0},
- .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
+ .species = SPECIES_METANG,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {0, 252, 252, 0, 6, 0},
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
},
{
- .species = SPECIES_SKARMORY,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 8,
- .evs = {252, 0, 0, 0, 6, 252},
- .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 8,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
},
{
- .species = SPECIES_AGGRON,
- .heldItem = ITEM_SITRUS_BERRY,
- .fixedIV = 31,
- .nature = 3,
- .evs = {0, 252, 0, 0, 252, 6},
- .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
+ .species = SPECIES_AGGRON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {0, 252, 0, 0, 252, 6},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
},
},
},
- [FRONTIER_FACILITY_PIKE] =
- {
+ [FRONTIER_FACILITY_PIKE] =
+ {
// Silver Symbol.
{
{
- .species = SPECIES_SEVIPER,
- .heldItem = ITEM_QUICK_CLAW,
- .fixedIV = 16,
- .nature = 2,
- .evs = {252, 0, 252, 0, 6, 0},
- .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN},
+ .species = SPECIES_SEVIPER,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 2,
+ .evs = {252, 0, 252, 0, 6, 0},
+ .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN},
},
{
- .species = SPECIES_SHUCKLE,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 16,
- .nature = 5,
- .evs = {252, 0, 0, 0, 106, 252},
- .moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST},
+ .species = SPECIES_SHUCKLE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 16,
+ .nature = 5,
+ .evs = {252, 0, 0, 0, 106, 252},
+ .moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST},
},
{
- .species = SPECIES_MILOTIC,
- .heldItem = ITEM_LEFTOVERS,
- .fixedIV = 16,
- .nature = 15,
- .evs = {152, 0, 100, 0, 152, 106},
- .moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER},
+ .species = SPECIES_MILOTIC,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 16,
+ .nature = 15,
+ .evs = {152, 0, 100, 0, 152, 106},
+ .moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_SEVIPER,
- .heldItem = ITEM_FOCUS_BAND,
- .fixedIV = 31,
- .nature = 5,
- .evs = {252, 0, 0, 0, 252, 6},
- .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
+ .species = SPECIES_SEVIPER,
+ .heldItem = ITEM_FOCUS_BAND,
+ .fixedIV = 31,
+ .nature = 5,
+ .evs = {252, 0, 0, 0, 252, 6},
+ .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
},
{
- .species = SPECIES_STEELIX,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 31,
- .nature = 2,
- .evs = {252, 0, 0, 0, 6, 252},
- .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH},
+ .species = SPECIES_STEELIX,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH},
},
{
- .species = SPECIES_GYARADOS,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 31,
- .nature = 3,
- .evs = {252, 6, 0, 0, 0, 252},
- .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST},
+ .species = SPECIES_GYARADOS,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {252, 6, 0, 0, 0, 252},
+ .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST},
},
},
},
- [FRONTIER_FACILITY_PYRAMID] =
- {
+ [FRONTIER_FACILITY_PYRAMID] =
+ {
// Silver Symbol.
{
{
- .species = SPECIES_REGIROCK,
- .heldItem = ITEM_QUICK_CLAW,
- .fixedIV = 16,
- .nature = 3,
- .evs = {152, 152, 0, 0, 106, 100},
- .moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER},
+ .species = SPECIES_REGIROCK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 106, 100},
+ .moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER},
},
{
- .species = SPECIES_REGISTEEL,
- .heldItem = ITEM_LEFTOVERS,
- .fixedIV = 16,
- .nature = 3,
- .evs = {152, 152, 0, 0, 6, 200},
- .moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE},
+ .species = SPECIES_REGISTEEL,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 6, 200},
+ .moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE},
},
{
- .species = SPECIES_REGICE,
- .heldItem = ITEM_CHESTO_BERRY,
- .fixedIV = 16,
- .nature = 15,
- .evs = {106, 0, 152, 0, 100, 152},
- .moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST},
+ .species = SPECIES_REGICE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 16,
+ .nature = 15,
+ .evs = {106, 0, 152, 0, 100, 152},
+ .moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST},
},
},
// Gold Symbol.
{
{
- .species = SPECIES_ARTICUNO,
- .heldItem = ITEM_SCOPE_LENS,
- .fixedIV = 31,
- .nature = 16,
- .evs = {6, 0, 252, 252, 0, 0},
- .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT},
+ .species = SPECIES_ARTICUNO,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT},
},
{
- .species = SPECIES_ZAPDOS,
- .heldItem = ITEM_LUM_BERRY,
- .fixedIV = 31,
- .nature = 16,
- .evs = {6, 0, 252, 252, 0, 0},
- .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN},
+ .species = SPECIES_ZAPDOS,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN},
},
{
- .species = SPECIES_MOLTRES,
- .heldItem = ITEM_BRIGHT_POWDER,
- .fixedIV = 31,
- .nature = 16,
- .evs = {6, 0, 252, 252, 0, 0},
- .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD},
+ .species = SPECIES_MOLTRES,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD},
},
},
},
@@ -610,29 +610,29 @@ static const u16 gUnknown_08611BFC[][2] =
static void (* const sFrontierUtilFuncs[])(void) =
{
- sub_81A17A0,
- sub_81A1830,
- sub_81A1968,
- sub_81A1AD4,
- DoSoftReset_,
- sub_81A1B28,
- sub_81A1B38,
- ShowFacilityResultsWindow,
- sub_81A31FC,
- sub_81A35EC,
- sub_81A3B00,
- sub_81A3B64,
- sub_81A3D30,
- sub_81A3D58,
- sub_81A3DA0,
- sub_81A3FD4,
- sub_81A4224,
- sub_81A4230,
- sub_81A43A8,
- sub_81A4410,
- sub_81A443C,
- sub_81A447C,
- sub_81A457C,
+ sub_81A17A0,
+ sub_81A1830,
+ sub_81A1968,
+ sub_81A1AD4,
+ DoSoftReset_,
+ sub_81A1B28,
+ sub_81A1B38,
+ ShowFacilityResultsWindow,
+ sub_81A31FC,
+ sub_81A35EC,
+ sub_81A3B00,
+ sub_81A3B64,
+ sub_81A3D30,
+ sub_81A3D58,
+ sub_81A3DA0,
+ sub_81A3FD4,
+ sub_81A4224,
+ sub_81A4230,
+ sub_81A43A8,
+ sub_81A4410,
+ sub_81A443C,
+ sub_81A447C,
+ sub_81A457C,
};
static const struct WindowTemplate gUnknown_08611C74 =
@@ -672,12 +672,12 @@ static const struct WindowTemplate gUnknown_08611C84 =
static const u8 sFacilityToBrainEventObjGfx[][2] =
{
[FRONTIER_FACILITY_TOWER] = {EVENT_OBJ_GFX_ANABEL, TRUE},
- [FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE},
- [FRONTIER_FACILITY_PALACE] = {EVENT_OBJ_GFX_SPENSER, FALSE},
- [FRONTIER_FACILITY_ARENA] = {EVENT_OBJ_GFX_GRETA, TRUE},
- [FRONTIER_FACILITY_FACTORY] = {EVENT_OBJ_GFX_NOLAND, FALSE},
- [FRONTIER_FACILITY_PIKE] = {EVENT_OBJ_GFX_LUCY, TRUE},
- [FRONTIER_FACILITY_PYRAMID] = {EVENT_OBJ_GFX_BRANDON, FALSE},
+ [FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE},
+ [FRONTIER_FACILITY_PALACE] = {EVENT_OBJ_GFX_SPENSER, FALSE},
+ [FRONTIER_FACILITY_ARENA] = {EVENT_OBJ_GFX_GRETA, TRUE},
+ [FRONTIER_FACILITY_FACTORY] = {EVENT_OBJ_GFX_NOLAND, FALSE},
+ [FRONTIER_FACILITY_PIKE] = {EVENT_OBJ_GFX_LUCY, TRUE},
+ [FRONTIER_FACILITY_PYRAMID] = {EVENT_OBJ_GFX_BRANDON, FALSE},
};
const u16 gFrontierBannedSpecies[] =
@@ -887,7 +887,7 @@ static void sub_81A1968(void)
switch (gSpecialVar_0x8005)
{
- case 0:
+ case 0:
gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006;
break;
case 1:
@@ -901,7 +901,7 @@ static void sub_81A1968(void)
break;
case 4:
for (i = 0; i < 4; i++)
- gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i];
+ gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
break;
case 6:
gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006;
@@ -918,8 +918,8 @@ static void sub_81A1AD4(void)
sub_81B8558();
for (i = 0; i < gSpecialVar_0x8005; i++)
- gUnknown_0203CEF8[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i];
- ReducePlayerPartyToThree();
+ gSelectedOrderFromParty[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i];
+ ReducePlayerPartyToSelectedMons();
}
static void DoSoftReset_(void)
@@ -2556,235 +2556,235 @@ NAKED
void CreateFrontierBrainPokemon(void)
{
asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x44\n\
- ldr r0, =0x000040cf\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x20]\n\
- bl GetFronterBrainSymbol\n\
- str r0, [sp, 0x24]\n\
- ldr r0, [sp, 0x20]\n\
- cmp r0, 0x1\n\
- bne _081A4E44\n\
- ldr r0, =0x000003fe\n\
- bl TrainerIdToDomeTournamentId\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- bl GetDomeTrainerMonCountInBits\n\
- adds r4, r0, 0\n\
- b _081A4E46\n\
- .pool\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x44\n\
+ ldr r0, =0x000040cf\n\
+ bl VarGet\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x20]\n\
+ bl GetFronterBrainSymbol\n\
+ str r0, [sp, 0x24]\n\
+ ldr r0, [sp, 0x20]\n\
+ cmp r0, 0x1\n\
+ bne _081A4E44\n\
+ ldr r0, =0x000003fe\n\
+ bl TrainerIdToDomeTournamentId\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl GetDomeTrainerMonCountInBits\n\
+ adds r4, r0, 0\n\
+ b _081A4E46\n\
+ .pool\n\
_081A4E44:\n\
- movs r4, 0x7\n\
+ movs r4, 0x7\n\
_081A4E46:\n\
- bl ZeroEnemyPartyMons\n\
- movs r1, 0\n\
- str r1, [sp, 0x18]\n\
- bl SetFacilityPtrsGetLevel\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x1C]\n\
- movs r2, 0\n\
- str r2, [sp, 0x14]\n\
+ bl ZeroEnemyPartyMons\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x18]\n\
+ bl SetFacilityPtrsGetLevel\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x1C]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x14]\n\
_081A4E5C:\n\
- movs r0, 0x1\n\
- ands r0, r4\n\
- asrs r4, 1\n\
- str r4, [sp, 0x30]\n\
- ldr r3, [sp, 0x14]\n\
- adds r3, 0x1\n\
- str r3, [sp, 0x28]\n\
- cmp r0, 0\n\
- bne _081A4E70\n\
- b _081A4FC4\n\
+ movs r0, 0x1\n\
+ ands r0, r4\n\
+ asrs r4, 1\n\
+ str r4, [sp, 0x30]\n\
+ ldr r3, [sp, 0x14]\n\
+ adds r3, 0x1\n\
+ str r3, [sp, 0x28]\n\
+ cmp r0, 0\n\
+ bne _081A4E70\n\
+ b _081A4FC4\n\
_081A4E70:\n\
- ldr r4, [sp, 0x14]\n\
- lsls r4, 2\n\
- mov r9, r4\n\
- ldr r0, [sp, 0x24]\n\
- lsls r0, 4\n\
- str r0, [sp, 0x38]\n\
- ldr r1, [sp, 0x20]\n\
- lsls r1, 4\n\
- str r1, [sp, 0x34]\n\
- ldr r2, [sp, 0x1C]\n\
- lsls r2, 24\n\
- str r2, [sp, 0x3C]\n\
- ldr r3, [sp, 0x18]\n\
- adds r3, 0x1\n\
- str r3, [sp, 0x2C]\n\
- ldr r0, [sp, 0x14]\n\
- add r0, r9\n\
- lsls r0, 2\n\
- mov r8, r0\n\
+ ldr r4, [sp, 0x14]\n\
+ lsls r4, 2\n\
+ mov r9, r4\n\
+ ldr r0, [sp, 0x24]\n\
+ lsls r0, 4\n\
+ str r0, [sp, 0x38]\n\
+ ldr r1, [sp, 0x20]\n\
+ lsls r1, 4\n\
+ str r1, [sp, 0x34]\n\
+ ldr r2, [sp, 0x1C]\n\
+ lsls r2, 24\n\
+ str r2, [sp, 0x3C]\n\
+ ldr r3, [sp, 0x18]\n\
+ adds r3, 0x1\n\
+ str r3, [sp, 0x2C]\n\
+ ldr r0, [sp, 0x14]\n\
+ add r0, r9\n\
+ lsls r0, 2\n\
+ mov r8, r0\n\
_081A4E96:\n\
- bl Random\n\
- adds r4, r0, 0\n\
- bl Random\n\
- lsls r4, 16\n\
- lsrs r7, r4, 16\n\
- lsls r0, 16\n\
- orrs r7, r0\n\
- ldr r0, =0x0000ef2a\n\
- adds r1, r7, 0\n\
- bl IsShinyOtIdPersonality\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _081A4E96\n\
- ldr r4, [sp, 0x38]\n\
- ldr r1, [sp, 0x24]\n\
- subs r0, r4, r1\n\
- lsls r5, r0, 2\n\
- mov r2, r8\n\
- adds r4, r2, r5\n\
- ldr r3, [sp, 0x34]\n\
- ldr r1, [sp, 0x20]\n\
- subs r0, r3, r1\n\
- lsls r6, r0, 3\n\
- adds r4, r6\n\
- ldr r2, =sFrontierBrainsMons\n\
- adds r4, r2\n\
- adds r0, r7, 0\n\
- bl GetNatureFromPersonality\n\
- ldrb r1, [r4, 0x5]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r1, r0\n\
- bne _081A4E96\n\
- ldr r4, [sp, 0x18]\n\
- movs r0, 0x64\n\
- adds r3, r4, 0\n\
- muls r3, r0\n\
- mov r8, r3\n\
- ldr r1, =gEnemyParty\n\
- add r1, r8\n\
- mov r10, r1\n\
- ldr r4, [sp, 0x14]\n\
- add r4, r9\n\
- lsls r4, 2\n\
- adds r0, r4, r5\n\
- adds r0, r6\n\
- ldr r2, =sFrontierBrainsMons\n\
- adds r0, r2\n\
- ldrh r1, [r0]\n\
- ldr r3, [sp, 0x3C]\n\
- lsrs r2, r3, 24\n\
- ldrb r3, [r0, 0x4]\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- str r7, [sp, 0x4]\n\
- str r0, [sp, 0x8]\n\
- ldr r0, =0x0000ef2a\n\
- str r0, [sp, 0xC]\n\
- mov r0, r10\n\
- bl CreateMon\n\
- ldr r0, =sFrontierBrainsMons\n\
- adds r5, r0\n\
- adds r5, r6, r5\n\
- adds r4, r5, r4\n\
- adds r4, 0x2\n\
- mov r0, r10\n\
- movs r1, 0xC\n\
- adds r2, r4, 0\n\
- bl SetMonData\n\
- movs r7, 0\n\
- mov r6, r8\n\
- ldr r3, =gEnemyParty\n\
+ bl Random\n\
+ adds r4, r0, 0\n\
+ bl Random\n\
+ lsls r4, 16\n\
+ lsrs r7, r4, 16\n\
+ lsls r0, 16\n\
+ orrs r7, r0\n\
+ ldr r0, =0x0000ef2a\n\
+ adds r1, r7, 0\n\
+ bl IsShinyOtIdPersonality\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _081A4E96\n\
+ ldr r4, [sp, 0x38]\n\
+ ldr r1, [sp, 0x24]\n\
+ subs r0, r4, r1\n\
+ lsls r5, r0, 2\n\
+ mov r2, r8\n\
+ adds r4, r2, r5\n\
+ ldr r3, [sp, 0x34]\n\
+ ldr r1, [sp, 0x20]\n\
+ subs r0, r3, r1\n\
+ lsls r6, r0, 3\n\
+ adds r4, r6\n\
+ ldr r2, =sFrontierBrainsMons\n\
+ adds r4, r2\n\
+ adds r0, r7, 0\n\
+ bl GetNatureFromPersonality\n\
+ ldrb r1, [r4, 0x5]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r1, r0\n\
+ bne _081A4E96\n\
+ ldr r4, [sp, 0x18]\n\
+ movs r0, 0x64\n\
+ adds r3, r4, 0\n\
+ muls r3, r0\n\
+ mov r8, r3\n\
+ ldr r1, =gEnemyParty\n\
+ add r1, r8\n\
+ mov r10, r1\n\
+ ldr r4, [sp, 0x14]\n\
+ add r4, r9\n\
+ lsls r4, 2\n\
+ adds r0, r4, r5\n\
+ adds r0, r6\n\
+ ldr r2, =sFrontierBrainsMons\n\
+ adds r0, r2\n\
+ ldrh r1, [r0]\n\
+ ldr r3, [sp, 0x3C]\n\
+ lsrs r2, r3, 24\n\
+ ldrb r3, [r0, 0x4]\n\
+ movs r0, 0x1\n\
+ str r0, [sp]\n\
+ str r7, [sp, 0x4]\n\
+ str r0, [sp, 0x8]\n\
+ ldr r0, =0x0000ef2a\n\
+ str r0, [sp, 0xC]\n\
+ mov r0, r10\n\
+ bl CreateMon\n\
+ ldr r0, =sFrontierBrainsMons\n\
+ adds r5, r0\n\
+ adds r5, r6, r5\n\
+ adds r4, r5, r4\n\
+ adds r4, 0x2\n\
+ mov r0, r10\n\
+ movs r1, 0xC\n\
+ adds r2, r4, 0\n\
+ bl SetMonData\n\
+ movs r7, 0\n\
+ mov r6, r8\n\
+ ldr r3, =gEnemyParty\n\
_081A4F32:\n\
- adds r1, r7, 0\n\
- adds r1, 0x1A\n\
- ldr r0, [sp, 0x14]\n\
- add r0, r9\n\
- lsls r4, r0, 2\n\
- adds r2, r5, r4\n\
- adds r0, r7, 0x6\n\
- adds r2, r0\n\
- adds r0, r6, r3\n\
- str r3, [sp, 0x40]\n\
- bl SetMonData\n\
- adds r7, 0x1\n\
- ldr r3, [sp, 0x40]\n\
- cmp r7, 0x5\n\
- ble _081A4F32\n\
- movs r1, 0xFF\n\
- add r0, sp, 0x10\n\
- strb r1, [r0]\n\
- movs r7, 0\n\
- ldr r1, [sp, 0x18]\n\
- movs r2, 0x64\n\
- adds r6, r1, 0\n\
- muls r6, r2\n\
- ldr r3, =sFrontierBrainsMons + 0xC\n\
- mov r8, r3\n\
- ldr r3, =gEnemyParty\n\
- adds r5, r4, 0\n\
+ adds r1, r7, 0\n\
+ adds r1, 0x1A\n\
+ ldr r0, [sp, 0x14]\n\
+ add r0, r9\n\
+ lsls r4, r0, 2\n\
+ adds r2, r5, r4\n\
+ adds r0, r7, 0x6\n\
+ adds r2, r0\n\
+ adds r0, r6, r3\n\
+ str r3, [sp, 0x40]\n\
+ bl SetMonData\n\
+ adds r7, 0x1\n\
+ ldr r3, [sp, 0x40]\n\
+ cmp r7, 0x5\n\
+ ble _081A4F32\n\
+ movs r1, 0xFF\n\
+ add r0, sp, 0x10\n\
+ strb r1, [r0]\n\
+ movs r7, 0\n\
+ ldr r1, [sp, 0x18]\n\
+ movs r2, 0x64\n\
+ adds r6, r1, 0\n\
+ muls r6, r2\n\
+ ldr r3, =sFrontierBrainsMons + 0xC\n\
+ mov r8, r3\n\
+ ldr r3, =gEnemyParty\n\
+ adds r5, r4, 0\n\
_081A4F6A:\n\
- ldr r4, [sp, 0x38]\n\
- ldr r0, [sp, 0x24]\n\
- subs r1, r4, r0\n\
- lsls r1, 2\n\
- adds r1, r5, r1\n\
- ldr r2, [sp, 0x34]\n\
- ldr r4, [sp, 0x20]\n\
- subs r0, r2, r4\n\
- lsls r0, 3\n\
- adds r1, r0\n\
- add r1, r8\n\
- ldrh r4, [r1]\n\
- lsls r2, r7, 24\n\
- lsrs r2, 24\n\
- adds r0, r6, r3\n\
- adds r1, r4, 0\n\
- str r3, [sp, 0x40]\n\
- bl SetMonMoveSlot\n\
- ldr r3, [sp, 0x40]\n\
- cmp r4, 0xDA\n\
- bne _081A4F9C\n\
- movs r1, 0\n\
- add r0, sp, 0x10\n\
- strb r1, [r0]\n\
+ ldr r4, [sp, 0x38]\n\
+ ldr r0, [sp, 0x24]\n\
+ subs r1, r4, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5, r1\n\
+ ldr r2, [sp, 0x34]\n\
+ ldr r4, [sp, 0x20]\n\
+ subs r0, r2, r4\n\
+ lsls r0, 3\n\
+ adds r1, r0\n\
+ add r1, r8\n\
+ ldrh r4, [r1]\n\
+ lsls r2, r7, 24\n\
+ lsrs r2, 24\n\
+ adds r0, r6, r3\n\
+ adds r1, r4, 0\n\
+ str r3, [sp, 0x40]\n\
+ bl SetMonMoveSlot\n\
+ ldr r3, [sp, 0x40]\n\
+ cmp r4, 0xDA\n\
+ bne _081A4F9C\n\
+ movs r1, 0\n\
+ add r0, sp, 0x10\n\
+ strb r1, [r0]\n\
_081A4F9C:\n\
- adds r5, 0x2\n\
- adds r7, 0x1\n\
- cmp r7, 0x3\n\
- ble _081A4F6A\n\
- ldr r0, [sp, 0x18]\n\
- movs r1, 0x64\n\
- adds r4, r0, 0\n\
- muls r4, r1\n\
- ldr r0, =gEnemyParty\n\
- adds r4, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0x20\n\
- add r2, sp, 0x10\n\
- bl SetMonData\n\
- adds r0, r4, 0\n\
- bl CalculateMonStats\n\
- ldr r2, [sp, 0x2C]\n\
- str r2, [sp, 0x18]\n\
+ adds r5, 0x2\n\
+ adds r7, 0x1\n\
+ cmp r7, 0x3\n\
+ ble _081A4F6A\n\
+ ldr r0, [sp, 0x18]\n\
+ movs r1, 0x64\n\
+ adds r4, r0, 0\n\
+ muls r4, r1\n\
+ ldr r0, =gEnemyParty\n\
+ adds r4, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x20\n\
+ add r2, sp, 0x10\n\
+ bl SetMonData\n\
+ adds r0, r4, 0\n\
+ bl CalculateMonStats\n\
+ ldr r2, [sp, 0x2C]\n\
+ str r2, [sp, 0x18]\n\
_081A4FC4:\n\
- ldr r4, [sp, 0x30]\n\
- ldr r3, [sp, 0x28]\n\
- str r3, [sp, 0x14]\n\
- cmp r3, 0x2\n\
- bgt _081A4FD0\n\
- b _081A4E5C\n\
+ ldr r4, [sp, 0x30]\n\
+ ldr r3, [sp, 0x28]\n\
+ str r3, [sp, 0x14]\n\
+ cmp r3, 0x2\n\
+ bgt _081A4FD0\n\
+ b _081A4E5C\n\
_081A4FD0:\n\
- add sp, 0x44\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
+ add sp, 0x44\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
");
}
#endif
diff --git a/src/graphics.c b/src/graphics.c
index 7c28aa7b6..2a21b610a 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1,8 +1,8 @@
#include "global.h"
-const u32 gBattleTextboxTiles[] = INCBIN_U32("graphics/interface/menu.4bpp.lz");
-const u32 gBattleTextboxPalette[] = INCBIN_U32("graphics/interface/menu.gbapal.lz");
-const u32 gBattleTextboxTilemap[] = INCBIN_U32("graphics/interface/menu_map.bin.lz");
+const u32 gBattleTextboxTiles[] = INCBIN_U32("graphics/battle_interface/textbox.4bpp.lz");
+const u32 gBattleTextboxPalette[] = INCBIN_U32("graphics/battle_interface/textbox.gbapal.lz");
+const u32 gBattleTextboxTilemap[] = INCBIN_U32("graphics/battle_interface/textbox_map.bin.lz");
const u32 gMonStillFrontPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/front_pics/circled_question_mark_still_front_pic.4bpp.lz");
const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/back_pics/circled_question_mark_back_pic.4bpp.lz");
diff --git a/src/ground.c b/src/ground.c
index 33eb3660a..6cb7b8557 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -1,14 +1,31 @@
#include "global.h"
#include "battle_anim.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "task.h"
+#include "trig.h"
#include "constants/rgb.h"
-extern void sub_8114994(struct Sprite *);
-extern void sub_8114A7C(struct Sprite *);
-extern void sub_8114AF0(struct Sprite *);
-extern void sub_8114AF0(struct Sprite *);
-extern void sub_8114B80(struct Sprite *);
-extern void sub_81151A0(struct Sprite *);
-extern void sub_8115244(struct Sprite *);
+void AnimBonemerangProjectile(struct Sprite *);
+void AnimBoneHitProjectile(struct Sprite *);
+void AnimDirtScatter(struct Sprite *);
+void AnimMudSportDirt(struct Sprite *);
+void AnimFissureDirtPlumeParticle(struct Sprite *);
+void AnimDigDirtMound(struct Sprite *);
+static void AnimBonemerangProjectileStep(struct Sprite *);
+static void AnimBonemerangProjectileEnd(struct Sprite *);
+static void AnimMudSportDirtRising(struct Sprite *);
+static void AnimMudSportDirtFalling(struct Sprite *);
+static void sub_8114CFC(u8);
+static void sub_8114EB4(u8);
+static void sub_8114F54(u8);
+static void sub_8114FD8(u8);
+static void sub_81150E0(u8, s16, s16);
+static void AnimFissureDirtPlumeParticleStep(struct Sprite *);
+static void sub_81153AC(u8);
+static void sub_81154A4(u8);
+static void sub_8115588(struct Task *);
+static void sub_81156D0(u8);
const union AffineAnimCmd gUnknown_08597150[] =
{
@@ -40,7 +57,7 @@ const struct SpriteTemplate gUnknown_08597178 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597170,
- .callback = sub_8114994,
+ .callback = AnimBonemerangProjectile,
};
const struct SpriteTemplate gUnknown_08597190 =
@@ -51,7 +68,7 @@ const struct SpriteTemplate gUnknown_08597190 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597174,
- .callback = sub_8114A7C,
+ .callback = AnimBoneHitProjectile,
};
const struct SpriteTemplate gUnknown_085971A8 =
@@ -62,7 +79,7 @@ const struct SpriteTemplate gUnknown_085971A8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8114AF0,
+ .callback = AnimDirtScatter,
};
const union AnimCmd gUnknown_085971C0[] =
@@ -84,7 +101,7 @@ const struct SpriteTemplate gUnknown_085971CC =
.anims = gUnknown_085971C8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8114AF0,
+ .callback = AnimDirtScatter,
};
const struct SpriteTemplate gUnknown_085971E4 =
@@ -95,7 +112,7 @@ const struct SpriteTemplate gUnknown_085971E4 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8114B80,
+ .callback = AnimMudSportDirt,
};
const struct SpriteTemplate gUnknown_085971FC =
@@ -106,7 +123,7 @@ const struct SpriteTemplate gUnknown_085971FC =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81151A0,
+ .callback = AnimFissureDirtPlumeParticle,
};
const struct SpriteTemplate gUnknown_08597214 =
@@ -117,5 +134,615 @@ const struct SpriteTemplate gUnknown_08597214 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8115244,
+ .callback = AnimDigDirtMound,
};
+
+// Moves a bone projectile towards the target mon, which moves like
+// a boomerang. After hitting the target mon, it comes back to the user.
+void AnimBonemerangProjectile(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[5] = -40;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimBonemerangProjectileStep;
+}
+
+static void AnimBonemerangProjectileStep(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[5] = 40;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimBonemerangProjectileEnd;
+ }
+}
+
+static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Moves a bone projectile towards the target mon, starting right next to
+// the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimBoneHitProjectile(struct Sprite *sprite)
+{
+ sub_80A6980(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Moves a small dirt projectile towards the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: target x pixel offset
+// arg 4: target y pixel offset
+void AnimDirtScatter(struct Sprite *sprite)
+{
+ u8 targetXPos, targetYPos;
+ s16 xOffset, yOffset;
+
+ InitAnimSpritePos(sprite, 1);
+
+ targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
+ targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
+
+ xOffset = Random2() & 0x1F;
+ yOffset = Random2() & 0x1F;
+ if (xOffset > 16)
+ xOffset = 16 - xOffset;
+ if (yOffset > 16)
+ yOffset = 16 - yOffset;
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = targetXPos + xOffset;
+ sprite->data[4] = targetYPos + yOffset;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+}
+
+// Moves a particle of dirt in the Mud Sport animation.
+// The dirt can either be rising upward, or falling down.
+// arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down
+// arg 1: initial x pixel offset
+// arg 2: initial y pixel offset
+void AnimMudSportDirt(struct Sprite *sprite)
+{
+ sprite->oam.tileNum++;
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
+ sprite->callback = AnimMudSportDirtRising;
+ }
+ else
+ {
+ sprite->pos1.x = gBattleAnimArgs[1];
+ sprite->pos1.y = gBattleAnimArgs[2];
+ sprite->pos2.y = -gBattleAnimArgs[2];
+ sprite->callback = AnimMudSportDirtFalling;
+ }
+}
+
+static void AnimMudSportDirtRising(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->pos1.x += sprite->data[0];
+ }
+
+ sprite->pos1.y -= 4;
+ if (sprite->pos1.y < -4)
+ DestroyAnimSprite(sprite);
+}
+
+static void AnimMudSportDirtFalling(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y += 4;
+ if (sprite->pos2.y >= 0)
+ {
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 0)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] == 10)
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_8114CBC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[0] == 0)
+ task->func = sub_8114CFC;
+ else
+ task->func = sub_8114EB4;
+
+ task->func(taskId);
+}
+
+static void sub_8114CFC(u8 taskId)
+{
+ u8 var0;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[10] = GetAnimBattlerSpriteId(0);
+ task->data[11] = sub_80A8364(gBattleAnimAttacker);
+ if (task->data[11] == 1)
+ {
+ task->data[12] = gBattle_BG1_X;
+ task->data[13] = gBattle_BG1_Y;
+ }
+ else
+ {
+ task->data[12] = gBattle_BG2_X;
+ task->data[13] = gBattle_BG2_Y;
+ }
+
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ task->data[14] = var0 - 32;
+ task->data[15] = var0 + 32;
+ if (task->data[14] < 0)
+ task->data[14] = 0;
+
+ gSprites[task->data[10]].invisible = 1;
+ task->data[0]++;
+ break;
+ case 1:
+ sub_81150E0(task->data[11], task->data[14], task->data[15]);
+ task->data[0]++;
+ break;
+ case 2:
+ task->data[2] = (task->data[2] + 6) & 0x7F;
+ if (++task->data[4] > 2)
+ {
+ task->data[4] = 0;
+ task->data[3]++;
+ }
+
+ task->data[5] = task->data[3] + (gSineTable[task->data[2]] >> 4);
+ if (task->data[11] == 1)
+ gBattle_BG1_Y = task->data[13] - task->data[5];
+ else
+ gBattle_BG2_Y = task->data[13] - task->data[5];
+
+ if (task->data[5] > 63)
+ {
+ task->data[5] = 120 - task->data[14];
+ if (task->data[11] == 1)
+ gBattle_BG1_Y = task->data[13] - task->data[5];
+ else
+ gBattle_BG2_Y = task->data[13] - task->data[5];
+
+ gSprites[task->data[10]].pos2.x = 272 - gSprites[task->data[10]].pos1.x;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ gScanlineEffect.state = 3;
+ task->data[0]++;
+ break;
+ case 4:
+ DestroyAnimVisualTask(taskId);
+ gSprites[task->data[10]].invisible = 1;
+ break;
+ }
+}
+
+static void sub_8114EB4(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+ gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+
+ if (sub_80A8364(gBattleAnimAttacker) == 1)
+ gBattle_BG1_Y = 0;
+ else
+ gBattle_BG2_Y = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8114F14(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[0] == 0)
+ task->func = sub_8114F54;
+ else
+ task->func = sub_8114FD8;
+
+ task->func(taskId);
+}
+
+static void sub_8114F54(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[10] = GetAnimBattlerSpriteId(0);
+ gSprites[task->data[10]].invisible = 0;
+ gSprites[task->data[10]].pos2.x = 0;
+ gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y;
+ task->data[0]++;
+ break;
+ case 1:
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_8114FD8(u8 taskId)
+{
+ u8 var0;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[10] = GetAnimBattlerSpriteId(0);
+ task->data[11] = sub_80A8364(gBattleAnimAttacker);
+ if (task->data[11] == 1)
+ task->data[12] = gBattle_BG1_X;
+ else
+ task->data[12] = gBattle_BG2_X;
+
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ task->data[14] = var0 - 32;
+ task->data[15] = var0 + 32;
+ task->data[0]++;
+ break;
+ case 1:
+ sub_81150E0(task->data[11], 0, task->data[15]);
+ task->data[0]++;
+ break;
+ case 2:
+ gSprites[task->data[10]].pos2.y = 96;
+ task->data[0]++;
+ break;
+ case 3:
+ gSprites[task->data[10]].pos2.y -= 8;
+ if (gSprites[task->data[10]].pos2.y == 0)
+ {
+ gScanlineEffect.state = 3;
+ task->data[0]++;
+ }
+ break;
+ case 4:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_81150E0(u8 useBG1, s16 y, s16 endY)
+{
+ s16 bgX;
+ struct ScanlineEffectParams scanlineParams;
+
+ if (useBG1 == 1)
+ {
+ bgX = gBattle_BG1_X;
+ scanlineParams.dmaDest = &REG_BG1HOFS;
+ }
+ else
+ {
+ bgX = gBattle_BG2_X;
+ scanlineParams.dmaDest = &REG_BG2HOFS;
+ }
+
+ if (y < 0)
+ y = 0;
+
+ while (y < endY)
+ {
+ gScanlineEffectRegBuffers[0][y] = bgX;
+ gScanlineEffectRegBuffers[1][y] = bgX;
+ y++;
+ }
+
+ while (y < 160)
+ {
+ gScanlineEffectRegBuffers[0][y] = bgX + 240;
+ gScanlineEffectRegBuffers[1][y] = bgX + 240;
+ y++;
+ }
+
+ scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ scanlineParams.initState = 1;
+ scanlineParams.unused9 = 0;
+ ScanlineEffect_SetParams(scanlineParams);
+}
+
+// Moves a particle of dirt in a plume of dirt. Used in Fissure and Dig.
+// arg 0: which mon (0 = attacker, 1 = target)
+// arg 1: which side of mon (0 = left, 1 = right)
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: wave amplitude
+// arg 5: duration
+void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
+{
+ s8 battler;
+ s16 xOffset;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ xOffset = 24;
+ if (gBattleAnimArgs[1] == 1)
+ {
+ xOffset *= -1;
+ gBattleAnimArgs[2] *= -1;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + xOffset;
+ sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 30;
+ sprite->data[0] = gBattleAnimArgs[5];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[4];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimFissureDirtPlumeParticleStep;
+}
+
+static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Displays the dirt mound seen in the move Dig for set duration.
+// The dirt mound image is too large for a single sprite, so two
+// sprites are lined up next to each other.
+// arg 0: which mon (0 = attacker, 1 = target)
+// arg 1: oam tile num (0 = left half of image, 1 = right half of image)
+// arg 2: duration
+void AnimDigDirtMound(struct Sprite *sprite)
+{
+ s8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32);
+ sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 32;
+ sprite->oam.tileNum += gBattleAnimArgs[1] * 8;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+}
+
+void sub_81152DC(u8 taskId)
+{
+ u16 i;
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[1])
+ task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3;
+ else
+ task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3;
+
+ task->data[3] = gBattleAnimArgs[2];
+ switch (gBattleAnimArgs[0])
+ {
+ case 5:
+ task->data[13] = gBattle_BG3_X;
+ task->func = sub_81153AC;
+ break;
+ case 4:
+ task->data[13] = 0;
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ if (IsBattlerSpriteVisible(i))
+ {
+ task->data[task->data[13] + 9] = gBattlerSpriteIds[i];
+ task->data[13]++;
+ }
+ }
+ task->func = sub_81154A4;
+ break;
+ default:
+ task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ if (task->data[9] == 0xFF)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ task->data[13] = 1;
+ task->func = sub_81154A4;
+ }
+
+ break;
+ }
+}
+
+static void sub_81153AC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if ((task->data[2] & 1) == 0)
+ gBattle_BG3_X = task->data[13] + task->data[15];
+ else
+ gBattle_BG3_X = task->data[13] - task->data[15];
+
+ if (++task->data[2] == task->data[3])
+ {
+ task->data[2] = 0;
+ task->data[14]--;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if ((task->data[2] & 1) == 0)
+ gBattle_BG3_X = task->data[13] + task->data[14];
+ else
+ gBattle_BG3_X = task->data[13] - task->data[14];
+
+ if (++task->data[2] == 4)
+ {
+ task->data[2] = 0;
+ if (--task->data[14] == 0)
+ task->data[0]++;
+ }
+ }
+ break;
+ case 2:
+ gBattle_BG3_X = task->data[13];
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_81154A4(u8 taskId)
+{
+ u16 i;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ sub_8115588(task);
+ if (++task->data[2] == task->data[3])
+ {
+ task->data[2] = 0;
+ task->data[14]--;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ sub_8115588(task);
+ if (++task->data[2] == 4)
+ {
+ task->data[2] = 0;
+ if (--task->data[14] == 0)
+ task->data[0]++;
+ }
+ }
+ break;
+ case 2:
+ for (i = 0; i < task->data[13]; i++)
+ gSprites[task->data[9 + i]].pos2.x = 0;
+
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_8115588(struct Task *task)
+{
+ u16 i;
+ u16 xOffset;
+
+ if ((task->data[2] & 1) == 0)
+ xOffset = (task->data[14] / 2) + (task->data[14] & 1);
+ else
+ xOffset = -(task->data[14] / 2);
+
+ for (i = 0; i < task->data[13]; i++)
+ {
+ gSprites[task->data[9 + i]].pos2.x = xOffset;
+ }
+}
+
+void AnimTask_IsPowerOver99(u8 taskId)
+{
+ gBattleAnimArgs[15] = gAnimMovePower > 99;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8115628(u8 taskId)
+{
+ struct Task *newTask;
+ u8 battler = (gBattleAnimArgs[0] & 1) ? gBattleAnimTarget : gBattleAnimAttacker;
+
+ if (gBattleAnimArgs[0] > 1)
+ battler ^= 2;
+
+ newTask = &gTasks[CreateTask(sub_81156D0, gBattleAnimArgs[1])];
+ newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF;
+ newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF;
+ gBattle_BG3_X = newTask->data[1];
+ gBattle_BG3_Y = newTask->data[2];
+ newTask->data[3] = gBattleAnimArgs[2];
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_81156D0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[7] == task->data[3])
+ {
+ gBattle_BG3_X = 0;
+ gBattle_BG3_Y = 0;
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gBattle_BG3_X = task->data[1];
+ gBattle_BG3_Y = task->data[2];
+ }
+}
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 172fcc723..ab52cb37e 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -15,7 +15,6 @@
#include "task.h"
#include "text.h"
-
// enums
enum MapPopUp_Themes
{
@@ -33,7 +32,7 @@ static void ShowMapNamePopUpWindow(void);
static void LoadMapNamePopUpWindowBg(void);
// EWRAM
-static EWRAM_DATA u8 mapNamePopupTaskId = 0;
+static EWRAM_DATA u8 sPopupTaskId = 0;
// .rodata
static const u8 gMapPopUp_Table[][960] =
@@ -202,7 +201,7 @@ bool8 sub_80D47D4(void)
{
HideStartMenu();
ShowMapNamePopup();
- return 1;
+ return TRUE;
}
void ShowMapNamePopup(void)
@@ -211,16 +210,16 @@ void ShowMapNamePopup(void)
{
if (!FuncIsActiveTask(Task_MapNamePopUpWindow))
{
- mapNamePopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
+ sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
SetGpuReg(REG_OFFSET_BG0VOFS, 40);
- gTasks[mapNamePopupTaskId].data[0] = 6;
- gTasks[mapNamePopupTaskId].data[2] = 40;
+ gTasks[sPopupTaskId].data[0] = 6;
+ gTasks[sPopupTaskId].data[2] = 40;
}
else
{
- if (gTasks[mapNamePopupTaskId].data[0] != 2)
- gTasks[mapNamePopupTaskId].data[0] = 2;
- gTasks[mapNamePopupTaskId].data[3] = 1;
+ if (gTasks[sPopupTaskId].data[0] != 2)
+ gTasks[sPopupTaskId].data[0] = 2;
+ gTasks[sPopupTaskId].data[3] = 1;
}
}
}
@@ -246,7 +245,7 @@ static void Task_MapNamePopUpWindow(u8 taskId)
{
task->data[2] = 0;
task->data[0] = 1;
- gTasks[mapNamePopupTaskId].data[1] = 0;
+ gTasks[sPopupTaskId].data[1] = 0;
}
break;
case 1:
@@ -293,7 +292,7 @@ void HideMapNamePopUpWindow(void)
sub_819746C(GetMapNamePopUpWindowId(), TRUE);
RemoveMapNamePopUpWindow();
SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0);
- DestroyTask(mapNamePopupTaskId);
+ DestroyTask(sPopupTaskId);
}
}
@@ -304,9 +303,9 @@ static void ShowMapNamePopUpWindow(void)
u8 x;
const u8* mapDisplayHeaderSource;
- if(InBattlePyramid())
+ if (InBattlePyramid())
{
- if(gMapHeader.mapLayoutId == 0x17A)
+ if (gMapHeader.mapLayoutId == 0x17A)
{
withoutPrefixPtr = &(mapDisplayHeader[3]);
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7];
@@ -333,220 +332,47 @@ static void ShowMapNamePopUpWindow(void)
CopyWindowToVram(GetMapNamePopUpWindowId(), 3);
}
-#ifdef NONMATCHING
static void sub_80D4A78(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused)
{
s32 i;
- for(i=0; i<=11; i++)
+ for (i = 0; i < 12; i++)
{
- FillBgTilemapBufferRect(bg, 0x21D + i, x + i - 1, y - 1, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x21D + i, i - 1 + x, y - 1, 1, 1, 0xE);
}
- FillBgTilemapBufferRect(bg, 0x229 + i, x - 1, y, 1, 1, 0xE);
- FillBgTilemapBufferRect(bg, 0x22A + i, deltaX + x, y, 1, 1, 0xE);
- FillBgTilemapBufferRect(bg, 0x22B + i, x - 1, y + 1 , 1, 1, 0xE);
- FillBgTilemapBufferRect(bg, 0x22C + i, deltaX + x, y + 1, 1, 1, 0xE);
- FillBgTilemapBufferRect(bg, 0x22D + i, x - 1, y + 2, 1, 1, 0xE);
- FillBgTilemapBufferRect(bg, 0x22E + i, deltaX + x, y + 2, 1, 1, 0xE);
- for(i=0; i<=11; i++)
+ FillBgTilemapBufferRect(bg, 0x229, x - 1, y, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22A, deltaX + x, y, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22B, x - 1, y + 1 , 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22C, deltaX + x, y + 1, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22D, x - 1, y + 2, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22E, deltaX + x, y + 2, 1, 1, 0xE);
+ for (i = 0; i < 12; i++)
{
- FillBgTilemapBufferRect(bg, 0x22F + i, x + i - 1, y + deltaY, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22F + i, i - 1 + x, y + deltaY, 1, 1, 0xE);
}
}
-#else
-NAKED
-static void sub_80D4A78(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused)
-{
- asm("\n\
- .syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x1C\n\
- ldr r4, [sp, 0x3C]\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r10, r1\n\
- lsls r2, 24\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- str r3, [sp, 0x10]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- str r4, [sp, 0x14]\n\
- movs r5, 0\n\
- lsls r0, r1, 24\n\
- asrs r1, r0, 24\n\
- lsrs r3, r2, 24\n\
- str r3, [sp, 0xC]\n\
- movs r6, 0xFF\n\
- lsls r6, 24\n\
- adds r6, r2\n\
- mov r8, r6\n\
- str r0, [sp, 0x18]\n\
- subs r4, r1, 0x1\n\
- _080D4AB4:\n\
- ldr r0, =0x0000021d\n\
- adds r1, r5, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- lsls r2, r4, 24\n\
- lsrs r2, 24\n\
- movs r3, 0x1\n\
- str r3, [sp]\n\
- str r3, [sp, 0x4]\n\
- movs r6, 0xE\n\
- mov r9, r6\n\
- str r6, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- mov r6, r8\n\
- lsrs r3, r6, 24\n\
- bl FillBgTilemapBufferRect\n\
- adds r4, 0x1\n\
- adds r5, 0x1\n\
- cmp r5, 0xB\n\
- ble _080D4AB4\n\
- ldr r1, =0x00000229\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- add r0, r10\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r5, 0x1\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r2, r9\n\
- str r2, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- mov r2, r8\n\
- ldr r3, [sp, 0xC]\n\
- bl FillBgTilemapBufferRect\n\
- ldr r1, =0x0000022a\n\
- ldr r6, [sp, 0x10]\n\
- add r6, r10\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r3, r9\n\
- str r3, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- adds r2, r6, 0\n\
- ldr r3, [sp, 0xC]\n\
- bl FillBgTilemapBufferRect\n\
- ldr r1, =0x0000022b\n\
- ldr r4, [sp, 0xC]\n\
- adds r4, 0x1\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r0, r9\n\
- str r0, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- mov r2, r8\n\
- adds r3, r4, 0\n\
- bl FillBgTilemapBufferRect\n\
- movs r1, 0x8B\n\
- lsls r1, 2\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r2, r9\n\
- str r2, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- adds r2, r6, 0\n\
- adds r3, r4, 0\n\
- bl FillBgTilemapBufferRect\n\
- ldr r1, =0x0000022d\n\
- ldr r4, [sp, 0xC]\n\
- adds r4, 0x2\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r3, r9\n\
- str r3, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- mov r2, r8\n\
- adds r3, r4, 0\n\
- bl FillBgTilemapBufferRect\n\
- ldr r1, =0x0000022e\n\
- str r5, [sp]\n\
- str r5, [sp, 0x4]\n\
- mov r0, r9\n\
- str r0, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- adds r2, r6, 0\n\
- adds r3, r4, 0\n\
- bl FillBgTilemapBufferRect\n\
- movs r5, 0\n\
- ldr r1, [sp, 0xC]\n\
- ldr r2, [sp, 0x14]\n\
- adds r0, r1, r2\n\
- lsls r4, r0, 24\n\
- movs r6, 0x1\n\
- _080D4B8A:\n\
- ldr r3, =0x0000022f\n\
- adds r1, r5, r3\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- subs r0, r5, 0x1\n\
- ldr r3, [sp, 0x18]\n\
- asrs r2, r3, 24\n\
- adds r2, r0\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r6, [sp]\n\
- str r6, [sp, 0x4]\n\
- movs r0, 0xE\n\
- str r0, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- lsrs r3, r4, 24\n\
- bl FillBgTilemapBufferRect\n\
- adds r5, 0x1\n\
- cmp r5, 0xB\n\
- ble _080D4B8A\n\
- add sp, 0x1C\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided");
-}
-#endif // NONMATCHING
static void LoadMapNamePopUpWindowBg(void)
{
- u8 popupWindowId;
- u16 regionMapSectionId;
u8 popUpThemeId;
+ u8 popupWindowId = GetMapNamePopUpWindowId();
+ u16 regionMapSectionId = gMapHeader.regionMapSectionId;
- popupWindowId = GetMapNamePopUpWindowId();
- regionMapSectionId = gMapHeader.regionMapSectionId;
- if(regionMapSectionId > MAPSEC_DYNAMIC)
+ if (regionMapSectionId > MAPSEC_DYNAMIC)
{
- if(regionMapSectionId > MAPSEC_SPECIAL_AREA)
+ if (regionMapSectionId > MAPSEC_SPECIAL_AREA)
regionMapSectionId -= (MAPSEC_SPECIAL_AREA - MAPSEC_DYNAMIC);
else
- regionMapSectionId = 0; //discard kanto region sections
+ regionMapSectionId = 0; // Discard kanto region sections;
}
popUpThemeId = gRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId];
- LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), &(gMapPopUp_Outline_Table[popUpThemeId][0]), 0x400, 0x21D);
+ LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), gMapPopUp_Outline_Table[popUpThemeId], 0x400, 0x21D);
CallWindowFunction(popupWindowId, sub_80D4A78);
PutWindowTilemap(popupWindowId);
if(gMapHeader.weather == WEATHER_BUBBLES)
LoadPalette(&gUnknown_0857F444, 0xE0, 0x20);
else
- LoadPalette(&(gMapPopUp_Palette_Table[popUpThemeId][0]), 0xE0, 0x20);
- BlitBitmapToWindow(popupWindowId, &(gMapPopUp_Table[popUpThemeId][0]), 0, 0, 80, 24);
+ LoadPalette(gMapPopUp_Palette_Table[popUpThemeId], 0xE0, 0x20);
+ BlitBitmapToWindow(popupWindowId, gMapPopUp_Table[popUpThemeId], 0, 0, 80, 24);
}
diff --git a/src/poison.c b/src/poison.c
index f0d8ec553..efa89ec13 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -1,14 +1,19 @@
#include "global.h"
#include "battle_anim.h"
+#include "trig.h"
#include "constants/rgb.h"
extern void sub_80A77C8(struct Sprite *);
-extern void sub_810DBAC(struct Sprite *);
-extern void sub_810DC2C(struct Sprite *);
-extern void sub_810DCD0(struct Sprite *);
-extern void sub_810DD50(struct Sprite *);
-extern void sub_810DDC4(struct Sprite *);
-extern void sub_810DDC4(struct Sprite *);
+
+void sub_810DBAC(struct Sprite *);
+void sub_810DC2C(struct Sprite *);
+void sub_810DCD0(struct Sprite *);
+void sub_810DD50(struct Sprite *);
+void AnimBubbleEffect(struct Sprite *);
+static void sub_810DC10(struct Sprite *);
+static void sub_810DCB4(struct Sprite *);
+static void sub_810DD24(struct Sprite *);
+static void AnimBubbleEffectStep(struct Sprite *);
extern const union AnimCmd *const gUnknown_08595200[];
@@ -170,7 +175,7 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
.anims = gUnknown_08596164,
.images = NULL,
.affineAnims = gUnknown_0859623C,
- .callback = sub_810DDC4,
+ .callback = AnimBubbleEffect,
};
const struct SpriteTemplate gWaterBubbleSpriteTemplate =
@@ -181,5 +186,138 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate =
.anims = gUnknown_08595200,
.images = NULL,
.affineAnims = gUnknown_0859623C,
- .callback = sub_810DDC4,
+ .callback = AnimBubbleEffect,
};
+
+void sub_810DBAC(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[3])
+ StartSpriteAnim(sprite, 2);
+
+ InitAnimSpritePos(sprite, 1);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[5] = -30;
+
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = sub_810DC10;
+}
+
+static void sub_810DC10(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810DC2C(struct Sprite *sprite)
+{
+ s16 l1, l2;
+ if (!gBattleAnimArgs[3])
+ StartSpriteAnim(sprite, 2);
+
+ InitAnimSpritePos(sprite, 1);
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2);
+
+ if (GetBattlerSide(gBattleAnimAttacker))
+ gBattleAnimArgs[4] = -gBattleAnimArgs[4];
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = l1 + gBattleAnimArgs[4];
+ sprite->data[4] = l2 + gBattleAnimArgs[5];
+ sprite->data[5] = -30;
+
+ InitAnimArcTranslation(sprite);
+
+ sprite->callback = sub_810DCB4;
+}
+
+static void sub_810DCB4(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810DCD0(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1];
+
+ InitSpriteDataForLinearTranslation(sprite);
+
+ sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2];
+ sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2];
+
+ sprite->callback = sub_810DD24;
+}
+
+static void sub_810DD24(struct Sprite *sprite)
+{
+ sub_80A656C(sprite);
+
+ sprite->data[1] -= sprite->data[5];
+ sprite->data[2] -= sprite->data[6];
+
+ if (!sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810DD50(struct Sprite *sprite)
+{
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + sprite->data[0];
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates a bubble by rising upward, swaying side to side, and
+// enlarging the sprite. This is used as an after-effect by poison-type
+// moves, along with MOVE_BUBBLE, and MOVE_BUBBLEBEAM.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: 0 = single-target, 1 = multi-target
+void AnimBubbleEffect(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[2])
+ {
+ sub_80A6980(sprite, TRUE);
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->callback = AnimBubbleEffectStep;
+}
+
+static void AnimBubbleEffectStep(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[0], 4);
+ sprite->data[1] += 0x30;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+
+ if (sprite->affineAnimEnded)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/pokeball.c b/src/pokeball.c
index 09e7ac639..ad839e6af 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -402,7 +402,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X);
gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16;
gSprites[ballSpriteId].data[5] = -40;
- sub_80A68D4(&gSprites[ballSpriteId]);
+ InitAnimArcTranslation(&gSprites[ballSpriteId]);
gSprites[ballSpriteId].oam.affineParam = taskId;
gTasks[taskId].tOpponentBattler = gBattlerTarget;
gTasks[taskId].func = TaskDummy;
@@ -898,7 +898,7 @@ static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24;
sprite->data[5] = -30;
sprite->oam.affineParam = sprite->sBattler;
- sub_80A68D4(sprite);
+ InitAnimArcTranslation(sprite);
sprite->callback = SpriteCB_PlayerMonSendOut_2;
}
diff --git a/src/pokedex.c b/src/pokedex.c
index 1405393c1..66a68f0bd 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle_main.h"
#include "bg.h"
#include "data2.h"
#include "decompress.h"
@@ -87,35 +88,6 @@ struct UnknownStruct4
u8 unk9;
};
-//TO BE CONVERTED TO C
-
-extern const u8 gUnknown_0855D30C[];
-extern struct BgTemplate gUnknown_0856E630[];
-extern struct WindowTemplate gUnknown_0856E640[];
-extern const u16 gUnknown_0856E610[16];
-extern const struct PokedexEntry gPokedexEntries[];
-extern struct BgTemplate gUnknown_0856E668[];
-extern struct WindowTemplate gUnknown_0856E670[];
-extern const u8 *gMonFootprintTable[];
-extern u8 gUnknown_0856ED08[][4];
-extern struct BgTemplate gUnknown_0856EFF8[];
-extern struct WindowTemplate gUnknown_0856F008[];
-extern const u8 gUnknown_0856ED9C[][4];
-extern const u8 gUnknown_0856EDB8[][4];
-extern const u8 gUnknown_0856EDD4[][4];
-extern const u8 gUnknown_0856EDF0[][4];
-extern const struct UnknownStruct1 gUnknown_0856EFC8[];
-extern const struct UnknownStruct3 gUnknown_0856ED30[];
-extern const struct UnknownStruct4 gUnknown_0856ED48[];
-extern const struct UnknownStruct2 gUnknown_0856EE0C[];
-extern const struct UnknownStruct2 gUnknown_0856EE5C[];
-extern const struct UnknownStruct2 gUnknown_0856EEB4[];
-extern const struct UnknownStruct2 gUnknown_0856EF14[];
-extern const struct UnknownStruct2 gUnknown_0856EE24[];
-extern const u8 gUnknown_0856EFAC[];
-extern const u8 gUnknown_0856EFAE[];
-extern const u8 gUnknown_0856EFB4[];
-
#define HOENN_DEX_COUNT 202
#define NATIONAL_DEX_COUNT 386
@@ -654,7 +626,7 @@ static const union AnimCmd *const sSpriteAnimTable_855D190[] =
sSpriteAnim_855D10C
};
-const struct SpriteTemplate gUnknown_0855D194 =
+static const struct SpriteTemplate gUnknown_0855D194 =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -665,7 +637,7 @@ const struct SpriteTemplate gUnknown_0855D194 =
.callback = sub_80BE604,
};
-const struct SpriteTemplate gUnknown_0855D1AC =
+static const struct SpriteTemplate gUnknown_0855D1AC =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -676,7 +648,7 @@ const struct SpriteTemplate gUnknown_0855D1AC =
.callback = sub_80BE658,
};
-const struct SpriteTemplate gUnknown_0855D1C4 =
+static const struct SpriteTemplate gUnknown_0855D1C4 =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -687,7 +659,7 @@ const struct SpriteTemplate gUnknown_0855D1C4 =
.callback = sub_80BE758,
};
-const struct SpriteTemplate gUnknown_0855D1DC =
+static const struct SpriteTemplate gUnknown_0855D1DC =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -698,7 +670,7 @@ const struct SpriteTemplate gUnknown_0855D1DC =
.callback = sub_80BE780,
};
-const struct SpriteTemplate gUnknown_0855D1F4 =
+static const struct SpriteTemplate gUnknown_0855D1F4 =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -709,7 +681,7 @@ const struct SpriteTemplate gUnknown_0855D1F4 =
.callback = sub_80BE44C,
};
-const struct SpriteTemplate gUnknown_0855D20C =
+static const struct SpriteTemplate gUnknown_0855D20C =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -720,7 +692,7 @@ const struct SpriteTemplate gUnknown_0855D20C =
.callback = sub_80BE44C,
};
-const struct SpriteTemplate gUnknown_0855D224 =
+static const struct SpriteTemplate gUnknown_0855D224 =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -731,7 +703,7 @@ const struct SpriteTemplate gUnknown_0855D224 =
.callback = sub_80BE44C,
};
-const struct SpriteTemplate gUnknown_0855D23C =
+static const struct SpriteTemplate gUnknown_0855D23C =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -742,7 +714,7 @@ const struct SpriteTemplate gUnknown_0855D23C =
.callback = sub_80BE44C,
};
-const struct SpriteTemplate gUnknown_0855D254 =
+static const struct SpriteTemplate gUnknown_0855D254 =
{
.tileTag = 4096,
.paletteTag = 4096,
@@ -753,22 +725,22 @@ const struct SpriteTemplate gUnknown_0855D254 =
.callback = sub_80BE834,
};
-const struct CompressedSpriteSheet gSpriteSheets_0855D26C[] =
+static const struct CompressedSpriteSheet gSpriteSheets_0855D26C[] =
{
{gPokedexMenu2_Gfx, 0x2000, 4096},
{0}
};
-const struct SpritePalette gSpritePalettes_0855D26C[] =
+static const struct SpritePalette gSpritePalettes_0855D26C[] =
{
{gPokedexText_Pal, 4096},
{0}
};
-const u8 gUnknown_0855D28C[] = {0x4, 0x8, 0x10, 0x20, 0x20};
-const u8 gUnknown_0855D291[] = {0x8, 0x4, 0x2, 0x1, 0x1};
+static const u8 gUnknown_0855D28C[] = {0x4, 0x8, 0x10, 0x20, 0x20};
+static const u8 gUnknown_0855D291[] = {0x8, 0x4, 0x2, 0x1, 0x1};
-const struct BgTemplate gBgTemplates_0855D298[] =
+static const struct BgTemplate gBgTemplates_0855D298[] =
{
{
.bg = 0,
@@ -808,15 +780,447 @@ const struct BgTemplate gBgTemplates_0855D298[] =
}
};
-const struct WindowTemplate sWindowTemplates_0855D2A8[] =
+static const struct WindowTemplate sWindowTemplates_0855D2A8[] =
{
- {2, 0, 0, 0x20, 0x20, 0, 1},
+ {
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 32,
+ .height = 32,
+ .paletteNum = 0,
+ .baseBlock = 1,
+ },
DUMMY_WIN_TEMPLATE
};
-const u8 gUnknown_0855D2B8[] = _("{NO}000");
-const u8 gUnknown_0855D2BE[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp");
-const u8 sText_TenDashes[] = _("----------");
+static const u8 gUnknown_0855D2B8[] = _("{NO}000");
+static const u8 gUnknown_0855D2BE[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp");
+static const u8 sText_TenDashes[] = _("----------");
+
+ALIGNED(4) static const u8 gExpandedPlaceholder_PokedexDescription[] = _("");
+
+#include "data/pokemon/pokedex_text.h"
+#include "data/pokemon/pokedex_entries.h"
+
+static const u16 gUnknown_0856E610[] = INCBIN_U16("graphics/pokedex/black.gbapal");
+
+static const struct BgTemplate gUnknown_0856E630[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 12,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 13,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 14,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ }
+};
+
+static const struct WindowTemplate gUnknown_0856E640[] =
+{
+ {
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 32,
+ .height = 20,
+ .paletteNum = 0,
+ .baseBlock = 0x0001,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 25,
+ .tilemapTop = 8,
+ .width = 2,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x0281,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 12,
+ .width = 32,
+ .height = 7,
+ .paletteNum = 8,
+ .baseBlock = 0x0285,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 18,
+ .tilemapTop = 3,
+ .width = 10,
+ .height = 8,
+ .paletteNum = 9,
+ .baseBlock = 0x0365,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct BgTemplate gUnknown_0856E668[] =
+{
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 14,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+};
+
+static const struct WindowTemplate gUnknown_0856E670[] =
+{
+ {
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 32,
+ .height = 20,
+ .paletteNum = 0,
+ .baseBlock = 0x0001,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 25,
+ .tilemapTop = 8,
+ .width = 2,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x0281,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const u8 sText_TenDashes2[] = _("----------");
+
+#include "data/pokemon_graphics/footprint_table.h"
+
+static const u8 gUnknown_0856ED08[][4] =
+{
+ {0x00, 0x00, 0x00, 0x00},
+ {0xbb, 0x03, 0xd5, 0x03},
+ {0xbe, 0x03, 0xd8, 0x03},
+ {0xc1, 0x03, 0xdb, 0x03},
+ {0xc4, 0x03, 0xde, 0x03},
+ {0xc7, 0x03, 0xe1, 0x03},
+ {0xca, 0x03, 0xe4, 0x03},
+ {0xcd, 0x03, 0xe7, 0x03},
+ {0xd0, 0x03, 0xea, 0x03},
+ {0xd3, 0x02, 0xed, 0x02},
+};
+
+static const struct UnknownStruct3 gUnknown_0856ED30[] =
+{
+ {
+ .text = gUnknown_085E87A5,
+ .unk4 = 0,
+ .unk5 = 0,
+ .unk6 = 5,
+ },
+ {
+ .text = gUnknown_085E87D6,
+ .unk4 = 6,
+ .unk5 = 0,
+ .unk6 = 5,
+ },
+ {
+ .text = gUnknown_085E87EF,
+ .unk4 = 12,
+ .unk5 = 0,
+ .unk6 = 5,
+ },
+};
+
+static const struct UnknownStruct4 gUnknown_0856ED48[] =
+{
+ {
+ .text = gUnknown_085E8840,
+ .unk4 = 0,
+ .unk5 = 2,
+ .unk6 = 5,
+ .unk7 = 5,
+ .unk8 = 2,
+ .unk9 = 12,
+ },
+ {
+ .text = gUnknown_085E887C,
+ .unk4 = 0,
+ .unk5 = 4,
+ .unk6 = 5,
+ .unk7 = 5,
+ .unk8 = 4,
+ .unk9 = 12,
+ },
+ {
+ .text = gUnknown_085E88A6,
+ .unk4 = 0,
+ .unk5 = 6,
+ .unk6 = 5,
+ .unk7 = 5,
+ .unk8 = 6,
+ .unk9 = 6,
+ },
+ {
+ .text = gUnknown_085E88A6,
+ .unk4 = 0,
+ .unk5 = 6,
+ .unk6 = 5,
+ .unk7 = 11,
+ .unk8 = 6,
+ .unk9 = 6,
+ },
+ {
+ .text = gUnknown_085E881F,
+ .unk4 = 0,
+ .unk5 = 8,
+ .unk6 = 5,
+ .unk7 = 5,
+ .unk8 = 8,
+ .unk9 = 12,
+ },
+ {
+ .text = gUnknown_085E8806,
+ .unk4 = 0,
+ .unk5 = 10,
+ .unk6 = 5,
+ .unk7 = 5,
+ .unk8 = 10,
+ .unk9 = 12,
+ },
+ {
+ .text = gUnknown_085E88C8,
+ .unk4 = 0,
+ .unk5 = 12,
+ .unk6 = 5,
+ .unk7 = 0,
+ .unk8 = 0,
+ .unk9 = 0,
+ },
+};
+
+static const u8 gUnknown_0856ED9C[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 1},
+ {0xFF, 0xFF, 0, 2},
+ {0xFF, 3, 1, 4},
+ { 2, 0xFF, 1, 4},
+ {0xFF, 0xFF, 2, 5},
+ {0xFF, 0xFF, 4, 6},
+ {0xFF, 0xFF, 5, 0xFF},
+};
+
+static const u8 gUnknown_0856EDB8[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 5},
+ {0xFF, 0xFF, 4, 6},
+ {0xFF, 0xFF, 5, 0xFF},
+};
+
+static const u8 gUnknown_0856EDD4[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 1},
+ {0xFF, 0xFF, 0, 2},
+ {0xFF, 3, 1, 4},
+ { 2, 0xFF, 1, 4},
+ {0xFF, 0xFF, 2, 6},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 4, 0xFF},
+};
+
+static const u8 gUnknown_0856EDF0[][4] =
+{
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0xFF, 6},
+ {0xFF, 0xFF, 0xFF, 0xFF},
+ {0xFF, 0xFF, 4, 0xFF},
+};
+
+static const struct UnknownStruct2 gUnknown_0856EE0C[] =
+{
+ {gUnknown_085E89A4, gUnknown_085E88DF},
+ {gUnknown_085E89BB, gUnknown_085E88E9},
+ {NULL, NULL},
+};
+
+static const struct UnknownStruct2 gUnknown_0856EE24[] =
+{
+ {gUnknown_085E89D4, gUnknown_085E88F6},
+ {gUnknown_085E8A02, gUnknown_085E8905},
+ {gUnknown_085E8A37, gUnknown_085E8911},
+ {gUnknown_085E8A73, gUnknown_085E891F},
+ {gUnknown_085E8AAF, gUnknown_085E892D},
+ {gUnknown_085E8AEA, gUnknown_085E893A},
+ {NULL, NULL},
+};
+
+static const struct UnknownStruct2 gUnknown_0856EE5C[] =
+{
+ {gUnknown_085E8B25, gUnknown_085E8B26},
+ {gUnknown_085E8B25, gUnknown_085E8948},
+ {gUnknown_085E8B25, gUnknown_085E894C},
+ {gUnknown_085E8B25, gUnknown_085E8950},
+ {gUnknown_085E8B25, gUnknown_085E8954},
+ {gUnknown_085E8B25, gUnknown_085E8958},
+ {gUnknown_085E8B25, gUnknown_085E895C},
+ {gUnknown_085E8B25, gUnknown_085E8960},
+ {gUnknown_085E8B25, gUnknown_085E8964},
+ {gUnknown_085E8B25, gUnknown_085E8968},
+ {NULL, NULL},
+};
+
+static const struct UnknownStruct2 gUnknown_0856EEB4[] =
+{
+ {gUnknown_085E8B25, gUnknown_085E8B26},
+ {gUnknown_085E8B25, gUnknown_085E896B},
+ {gUnknown_085E8B25, gUnknown_085E896F},
+ {gUnknown_085E8B25, gUnknown_085E8974},
+ {gUnknown_085E8B25, gUnknown_085E897B},
+ {gUnknown_085E8B25, gUnknown_085E8981},
+ {gUnknown_085E8B25, gUnknown_085E8987},
+ {gUnknown_085E8B25, gUnknown_085E898D},
+ {gUnknown_085E8B25, gUnknown_085E8994},
+ {gUnknown_085E8B25, gUnknown_085E8999},
+ {gUnknown_085E8B25, gUnknown_085E899F},
+ {NULL, NULL},
+};
+
+static const struct UnknownStruct2 gUnknown_0856EF14[] =
+{
+ {gUnknown_085E8B25, gUnknown_085E8B35},
+ {gUnknown_085E8B25, gTypeNames[TYPE_NORMAL]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_FIGHTING]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_FLYING]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_POISON]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_GROUND]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_ROCK]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_BUG]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_GHOST]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_STEEL]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_FIRE]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_WATER]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_GRASS]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_ELECTRIC]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_PSYCHIC]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_ICE]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_DRAGON]},
+ {gUnknown_085E8B25, gTypeNames[TYPE_DARK]},
+ {NULL, NULL},
+};
+
+static const u8 gUnknown_0856EFAC[] = {0x00, 0x01};
+static const u8 gUnknown_0856EFAE[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
+static const u8 gUnknown_0856EFB4[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
+
+static const struct UnknownStruct1 gUnknown_0856EFC8[] =
+{
+ {gUnknown_0856EE5C, 6, 7, 10},
+ {gUnknown_0856EEB4, 8, 9, 11},
+ {gUnknown_0856EF14, 10,11, 18},
+ {gUnknown_0856EF14, 12, 13, 18},
+ {gUnknown_0856EE24, 4, 5, 6},
+ {gUnknown_0856EE0C, 2, 3, 2},
+};
+
+static const struct BgTemplate gUnknown_0856EFF8[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 12,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 13,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 14,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+static const struct WindowTemplate gUnknown_0856F008[] =
+{
+ {
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 32,
+ .height = 20,
+ .paletteNum = 0,
+ .baseBlock = 0x0001,
+ },
+ DUMMY_WIN_TEMPLATE
+};
// .text
@@ -3514,7 +3918,7 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
if (c)
text3 = gPokedexEntries[num].description;
else
- text3 = gUnknown_0855D30C;
+ text3 = gExpandedPlaceholder_PokedexDescription;
sub_80BE8DC(text3, GetStringCenterAlignXOffset(1, text3, 0xF0), 0x5F);
}
diff --git a/src/rock.c b/src/rock.c
index 83af52865..3b8e505d8 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -1,22 +1,37 @@
#include "global.h"
#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "palette.h"
+#include "sound.h"
+#include "task.h"
+#include "trig.h"
#include "constants/rgb.h"
-
-extern void sub_81109F0(struct Sprite *);
-extern void sub_8110AB4(struct Sprite *);
-extern void sub_8110B38(struct Sprite *);
-extern void sub_8110E4C(struct Sprite *);
-extern void sub_8110F30(struct Sprite *);
-extern void sub_811131C(struct Sprite *);
-extern void sub_8111388(struct Sprite *);
-extern void sub_8111418(struct Sprite *);
-extern void sub_8111444(struct Sprite *);
-extern void sub_80FF268(struct Sprite *);
-extern void sub_80A8EE4(struct Sprite *);
+#include "constants/songs.h"
extern const union AnimCmd *const gUnknown_085950E0[];
extern const union AnimCmd *const gUnknown_085954D0[];
+extern void AnimMoveTwisterParticle(struct Sprite *);
+
+void sub_81109F0(struct Sprite *);
+void sub_8110AB4(struct Sprite *);
+void AnimDirtParticleAcrossScreen(struct Sprite *);
+void AnimRaiseSprite(struct Sprite *);
+void sub_81110A4(u8 taskId);
+void sub_811131C(struct Sprite *);
+void sub_8111388(struct Sprite *);
+void sub_8111418(struct Sprite *);
+void sub_8111444(struct Sprite *);
+void sub_8110B38(struct Sprite *);
+static void sub_8110A70(struct Sprite *);
+static void sub_8110B80(struct Sprite *sprite);
+static void sub_8110CB0(u8 taskId);
+static void sub_8111214(struct Task *task);
+static u8 sub_811135C(void);
+static void sub_81113C8(struct Sprite *sprite);
+static void sub_811149C(struct Sprite *sprite);
+
const union AnimCmd gUnknown_08596AE0[] =
{
ANIMCMD_FRAME(32, 1),
@@ -118,7 +133,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596BA0 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8110E4C,
+ .callback = AnimDirtParticleAcrossScreen,
};
const struct Subsprite gUnknown_08596BB8[] =
@@ -194,7 +209,7 @@ const struct SpriteTemplate gUnknown_08596C10 =
.anims = gUnknown_08596BF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8110F30,
+ .callback = AnimRaiseSprite,
};
const struct SpriteTemplate gUnknown_08596C28 =
@@ -278,7 +293,7 @@ const struct SpriteTemplate gUnknown_08596CC8 =
.anims = gUnknown_08596C08,
.images = NULL,
.affineAnims = gUnknown_08596C90,
- .callback = sub_80FF268,
+ .callback = AnimMoveTwisterParticle,
};
const struct SpriteTemplate gUnknown_08596CE0 =
@@ -291,3 +306,573 @@ const struct SpriteTemplate gUnknown_08596CE0 =
.affineAnims = gUnknown_08596C90,
.callback = sub_80A8EE4,
};
+
+void sub_81109F0(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != 0)
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += 14;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ AnimateSprite(sprite);
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 4;
+ sprite->data[3] = 16;
+ sprite->data[4] = -70;
+ sprite->data[5] = gBattleAnimArgs[2];
+
+ StoreSpriteCallbackInData6(sprite, sub_8110A70);
+ sprite->callback = sub_80A6450;
+ sprite->callback(sprite);
+}
+
+static void sub_8110A70(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[5];
+
+ sprite->data[0] = 192;
+ sprite->data[1] = sprite->data[5];
+ sprite->data[2] = 4;
+ sprite->data[3] = 32;
+ sprite->data[4] = -24;
+
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = sub_80A6450;
+ sprite->callback(sprite);
+}
+
+void sub_8110AB4(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[5]);
+ AnimateSprite(sprite);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3];
+
+ InitSpriteDataForLinearTranslation(sprite);
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+
+ sprite->callback = sub_80A656C;
+ StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+}
+
+void sub_8110B38(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[6] == 0)
+ InitAnimSpritePos(sprite, 0);
+ else
+ sub_80A6980(sprite, FALSE);
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+
+ sprite->callback = sub_8110B80;
+}
+
+static void sub_8110B80(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.y = -(sprite->data[4] >> 8);
+ sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]);
+ sprite->data[5] = (sprite->data[5] + sprite->data[2]) & 0xFF;
+
+ if (--sprite->data[0] == -1)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void AnimTask_LoadSandstormBackground(u8 taskId)
+{
+ int var0;
+ struct UnknownAnimStruct2 unknownStruct;
+
+ var0 = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08D8D58C, unknownStruct.tilesOffset);
+ sub_80A6D60(&unknownStruct, gUnknown_08D8D410, 0);
+ LoadCompressedPalette(&gBattleAnimSpritePalette_261, unknownStruct.unk8 * 16, 32);
+
+ if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ var0 = 1;
+
+ gTasks[taskId].data[0] = var0;
+ gTasks[taskId].func = sub_8110CB0;
+}
+
+static void sub_8110CB0(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ if (gTasks[taskId].data[0] == 0)
+ gBattle_BG1_X += -6;
+ else
+ gBattle_BG1_X += 6;
+
+ gBattle_BG1_Y += -1;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 7)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 101)
+ {
+ gTasks[taskId].data[11] = 7;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ gTasks[taskId].data[12]++;
+ break;
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Animates the sprites that fly diagonally across the screen
+// in Sandstorm and Heat Wave.
+// arg 0: initial y pixel offset
+// arg 1: projectile speed
+// arg 2: y pixel drop
+// arg 3: ??? unknown (possibly a color bit)
+void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (gBattleAnimArgs[3] != 0 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x = 304;
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ sprite->data[5] = 1;
+ sprite->oam.matrixNum = 8;
+ }
+ else
+ {
+ sprite->pos1.x = -64;
+ }
+
+ sprite->pos1.y = gBattleAnimArgs[0];
+ SetSubspriteTables(sprite, gUnknown_08596BC0);
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x += (sprite->data[3] >> 8);
+ sprite->pos2.y += (sprite->data[4] >> 8);
+ sprite->data[3] &= 0xFF;
+ sprite->data[4] &= 0xFF;
+
+ if (sprite->data[5] == 0)
+ {
+ if (sprite->pos1.x + sprite->pos2.x > 272)
+ {
+ sprite->callback = DestroyAnimSprite;
+ }
+ }
+ else if (sprite->pos1.x + sprite->pos2.x < -32)
+ {
+ sprite->callback = DestroyAnimSprite;
+ }
+ }
+}
+
+// Animates the rising rocks in Ancient Power.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: terminal y offset
+// arg 3: duration
+// arg 4: sprite size [1,5]
+void AnimRaiseSprite(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ InitAnimSpritePos(sprite, 0);
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8110F74(u8 taskId)
+{
+ u16 var0, var1, var2, var3;
+ u8 var4;
+ int var5;
+ s16 pan1, pan2;
+ struct Task *task;
+
+ task = &gTasks[taskId];
+
+ var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
+ var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
+
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
+ var3 = var1;
+
+ var4 = sub_811135C();
+ if (var4 == 1)
+ task->data[8] = 32;
+ else
+ task->data[8] = 48 - (var4 * 8);
+
+ task->data[0] = 0;
+ task->data[11] = 0;
+ task->data[9] = 0;
+ task->data[12] = 1;
+
+ var5 = task->data[8];
+ if (var5 < 0)
+ var5 += 7;
+
+ task->data[10] = (var5 >> 3) - 1;
+
+ task->data[2] = var0 * 8;
+ task->data[3] = var1 * 8;
+ task->data[4] = ((var2 - var0) * 8) / task->data[8];
+ task->data[5] = ((var3 - var1) * 8) / task->data[8];
+ task->data[6] = 0;
+ task->data[7] = 0;
+
+ pan1 = BattleAnimAdjustPanning(-64);
+ pan2 = BattleAnimAdjustPanning(63);
+
+ task->data[13] = pan1;
+ task->data[14] = (pan2 - pan1) / task->data[8];
+ task->data[1] = var4;
+ task->data[15] = GetAnimBattlerSpriteId(0);
+
+ task->func = sub_81110A4;
+}
+
+void sub_81110A4(u8 taskId)
+{
+ struct Task *task;
+
+ task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[6] -= task->data[4];
+ task->data[7] -= task->data[5];
+ gSprites[task->data[15]].pos2.x = task->data[6] >> 3;
+ gSprites[task->data[15]].pos2.y = task->data[7] >> 3;
+
+ if (++task->data[9] == 10)
+ {
+ task->data[11] = 20;
+ task->data[0]++;
+ }
+
+ PlaySE12WithPanning(SE_W029, task->data[13]);
+ break;
+ case 1:
+ if (--task->data[11] == 0)
+ task->data[0]++;
+ break;
+ case 2:
+ if (--task->data[9] != 0)
+ {
+ task->data[6] += task->data[4];
+ task->data[7] += task->data[5];
+ }
+ else
+ {
+ task->data[6] = 0;
+ task->data[7] = 0;
+ task->data[0]++;
+ }
+
+ gSprites[task->data[15]].pos2.x = task->data[6] >> 3;
+ gSprites[task->data[15]].pos2.y = task->data[7] >> 3;
+ break;
+ case 3:
+ task->data[2] += task->data[4];
+ task->data[3] += task->data[5];
+ if (++task->data[9] >= task->data[10])
+ {
+ task->data[9] = 0;
+ sub_8111214(task);
+ task->data[13] += task->data[14];
+ PlaySE12WithPanning(SE_W091, task->data[13]);
+ }
+
+ if (--task->data[8] == 0)
+ {
+ task->data[0]++;
+ }
+ break;
+ case 4:
+ if (task->data[11] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_8111214(struct Task *task)
+{
+ const struct SpriteTemplate *spriteTemplate;
+ int var0;
+ u16 x, y;
+ u8 spriteId;
+
+ switch (task->data[1])
+ {
+ case 1:
+ spriteTemplate = &gUnknown_08596C28;
+ var0 = 0;
+ break;
+ case 2:
+ case 3:
+ spriteTemplate = &gUnknown_08596C40;
+ var0 = 80;
+ break;
+ case 4:
+ spriteTemplate = &gUnknown_08596C40;
+ var0 = 64;
+ break;
+ case 5:
+ spriteTemplate = &gUnknown_08596C40;
+ var0 = 48;
+ break;
+ default:
+ return;
+ }
+
+ x = task->data[2] >> 3;
+ y = task->data[3] >> 3;
+ x += (task->data[12] * 4);
+
+ spriteId = CreateSprite(spriteTemplate, x, y, 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 18;
+ gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3);
+ gSprites[spriteId].data[4] = y;
+ gSprites[spriteId].data[5] = -16 - (task->data[1] * 2);
+ gSprites[spriteId].oam.tileNum += var0;
+
+ InitAnimArcTranslation(&gSprites[spriteId]);
+ task->data[11]++;
+ }
+
+ task->data[12] *= -1;
+}
+
+void sub_811131C(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ u8 taskId = FindTaskIdByFunc(sub_81110A4);
+ if (taskId != 0xFF)
+ gTasks[taskId].data[11]--;
+
+ DestroySprite(sprite);
+ }
+}
+
+static u8 sub_811135C(void)
+{
+ u8 retVal = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer;
+ u8 var0 = retVal - 1;
+ if (var0 > 4)
+ retVal = 1;
+
+ return retVal;
+}
+
+void sub_8111388(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+
+ sprite->pos2.x = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] -= gBattleAnimArgs[2];
+ sprite->data[0] = 3;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->callback = sub_81113C8;
+ sprite->invisible = 1;
+}
+
+static void sub_81113C8(struct Sprite *sprite)
+{
+ sprite->invisible = 0;
+ if (sprite->data[3] != 0)
+ {
+ sprite->pos2.y = sprite->data[2] + sprite->data[3];
+ sprite->data[3] += sprite->data[0];
+ sprite->data[0]++;
+ if (sprite->data[3] > 0)
+ {
+ sprite->data[3] = 0;
+ }
+ }
+ else
+ {
+ if (--sprite->data[1] == 0)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8111418(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(sprite, 1);
+
+ TranslateAnimSpriteToTargetMonLocation(sprite);
+}
+
+void sub_8111444(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[5] = gBattleAnimArgs[2];
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+ sprite->callback = sub_811149C;
+}
+
+static void sub_811149C(struct Sprite *sprite)
+{
+ sprite->data[0] += 8;
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+
+ sprite->pos2.x += sprite->data[3] / 40;
+ sprite->pos2.y -= Sin(sprite->data[0], sprite->data[5]);
+
+ if (sprite->data[0] > 140)
+ DestroyAnimSprite(sprite);
+}
+
+void AnimTask_GetSeismicTossDamageLevel(u8 taskId)
+{
+ if (gAnimMoveDmg < 33)
+ gBattleAnimArgs[7] = 0;
+ if ((u32)gAnimMoveDmg - 33 < 33)
+ gBattleAnimArgs[7] = 1;
+ if (gAnimMoveDmg > 65)
+ gBattleAnimArgs[7] = 2;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_811152C(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_80A6DAC(0);
+ gTasks[taskId].data[1] = 200;
+ }
+
+ gBattle_BG3_Y += gTasks[taskId].data[1] / 10;
+ gTasks[taskId].data[1] -= 3;
+
+ if (gTasks[taskId].data[0] == 120)
+ {
+ sub_80A6DAC(1);
+ DestroyAnimVisualTask(taskId);
+ }
+
+ gTasks[taskId].data[0]++;
+}
+
+void sub_8111590(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_80A6DAC(0);
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = gBattle_BG3_Y;
+ }
+
+ gTasks[taskId].data[1] += 80;
+ gTasks[taskId].data[1] &= 0xFF;
+ gBattle_BG3_Y = gTasks[taskId].data[2] + Cos(4, gTasks[taskId].data[1]);
+
+ if (gBattleAnimArgs[7] == 0xFFF)
+ {
+ gBattle_BG3_Y = 0;
+ sub_80A6DAC(1);
+ DestroyAnimVisualTask(taskId);
+ }
+}
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index bf16a20fc..b7ca087fd 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -1784,7 +1784,7 @@ void sub_801440C(u8 taskId)
ScriptContext2_Disable();
}
-extern u8 gUnknown_0203CEF8[];
+extern u8 gSelectedOrderFromParty[];
void sub_8014790(u8 taskId)
{
@@ -1802,8 +1802,8 @@ void sub_8014790(u8 taskId)
gLinkPlayers[0].linkType = 0x2211;
gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 2;
- sendBuff[0] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[0] - 1], MON_DATA_SPECIES);
- sendBuff[1] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[1] - 1], MON_DATA_SPECIES, NULL);
+ sendBuff[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES);
+ sendBuff[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
gMain.savedCallback = NULL;
data[0] = 4;
sub_800E3A8();
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
new file mode 100755
index 000000000..7fc61f953
--- /dev/null
+++ b/src/script_pokemon_util_80F87D8.c
@@ -0,0 +1,707 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_gfx_sfx_util.h"
+#include "berry.h"
+#include "contest.h"
+#include "contest_link_80F57C4.h"
+#include "contest_painting.h"
+#include "daycare.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "random.h"
+#include "script.h"
+#include "script_menu.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "tv.h"
+#include "constants/event_objects.h"
+#include "constants/items.h"
+#include "constants/species.h"
+#include "constants/vars.h"
+
+extern const u16 gEventObjectPalette8[];
+extern const u16 gEventObjectPalette17[];
+extern const u16 gEventObjectPalette33[];
+extern const u16 gEventObjectPalette34[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+extern u8 gSelectedOrderFromParty[];
+
+static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
+
+static void sub_80F8EE8(u8 taskId);
+static void sub_80F9088(u8 taskId);
+static void sub_80F9460(void);
+static void sub_80F94B8(void);
+
+void SetContestTrainerGfxIds(void)
+{
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
+ gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
+}
+
+void sub_80F8814(void)
+{
+ u16 var1;
+ u8 var0 = gSpecialVar_0x8005;
+ switch (var0)
+ {
+ case 0:
+ var1 = 3;
+ break;
+ case 1:
+ var1 = 4;
+ break;
+ case 2:
+ var1 = 5;
+ break;
+ default:
+ var1 = 100;
+ break;
+ }
+
+ gSpecialVar_0x8004 = var1;
+}
+
+void sub_80F8850(void)
+{
+ sub_80F8264();
+ sub_80F8290();
+ sub_80F8438();
+}
+
+void sub_80F8864(void)
+{
+ int contestWinner;
+ switch (gSpecialVar_ContestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ contestWinner = 8;
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ contestWinner = 9;
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ contestWinner = 10;
+ break;
+ case CONTEST_CATEGORY_SMART:
+ contestWinner = 11;
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ default:
+ contestWinner = 12;
+ break;
+ }
+
+ if (!gSaveBlock1Ptr->contestWinners[contestWinner].species)
+ gSpecialVar_0x8004 = 0;
+ else
+ gSpecialVar_0x8004 = 1;
+}
+
+void sub_80F88DC(void)
+{
+ sub_80DEDA8(0xFF);
+}
+
+void sub_80F88E8(void)
+{
+ if (gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == 3
+ && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
+ {
+ gSpecialVar_0x8004 = 1;
+ }
+ else
+ {
+ gSpecialVar_0x8004 = 0;
+ }
+}
+
+u8 sub_80F8940(void)
+{
+ int i;
+ u8 var0 = 0;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gSaveBlock1Ptr->contestWinners[8 + i].species)
+ var0++;
+ }
+
+ return var0;
+}
+
+void sub_80F8970(void)
+{
+ s16 sp[4];
+ int i, j;
+ s16 condition;
+ s8 var0;
+ u8 var2;
+ u8 r8;
+ u8 r7;
+
+ for (i = 0; i < 4; i++)
+ sp[i] = gContestMonConditions[i];
+
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 3; j > i; j--)
+ {
+ if (sp[j - 1] < sp[j])
+ {
+ int temp = sp[j];
+ sp[j] = sp[j - 1];
+ sp[j - 1] = temp;
+ }
+ }
+ }
+
+ condition = sp[gSpecialVar_0x8006];
+ var0 = 0;
+ r8 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ if (sp[i] == condition)
+ {
+ var0++;
+ if (i == gSpecialVar_0x8006)
+ r8 = var0;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sp[i] == condition)
+ break;
+ }
+
+ r7 = i;
+ var2 = r8;
+ for (i = 0; i < 4; i++)
+ {
+ if (condition == gContestMonConditions[i])
+ {
+ if (var2 == 1)
+ break;
+ var2--;
+ }
+ }
+
+ StringCopy(gStringVar1, gContestMons[i].nickname);
+ StringCopy(gStringVar2, gContestMons[i].trainerName);
+ sub_81DB5AC(gStringVar2);
+
+ if (var0 == 1)
+ gSpecialVar_0x8006 = r7;
+ else if (r8 == var0)
+ gSpecialVar_0x8006 = r7;
+ else
+ gSpecialVar_0x8006 = r7 + 4;
+}
+
+static void ShowContestWinnerCleanup(void)
+{
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ShowContestWinner(void)
+{
+ SetMainCallback2(sub_812FDEC);
+ gMain.savedCallback = ShowContestWinnerCleanup;
+}
+
+void sub_80F8AFC(void)
+{
+ int i;
+
+ if (gIsLinkContest & 1)
+ {
+ for (i = 0; i < gUnknown_02039F30; i++)
+ {
+ int version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ gContestMons[i].trainerGfxId = EVENT_OBJ_GFX_LINK_RS_BRENDAN;
+ else
+ gContestMons[i].trainerGfxId = EVENT_OBJ_GFX_LINK_RS_MAY;
+ }
+ }
+
+ VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
+ VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
+ }
+}
+
+void sub_80F8B94(void)
+{
+ int i;
+ u8 eventObjectId;
+ int version;
+ struct Sprite *sprite;
+
+ gReservedSpritePaletteCount = 12;
+ if (gIsLinkContest & 1)
+ {
+ for (i = 0; i < gUnknown_02039F30; i++)
+ {
+ eventObjectId = GetEventObjectIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ sprite = &gSprites[gEventObjects[eventObjectId].spriteId];
+ sprite->oam.paletteNum = 6 + i;
+ version = (u8)gLinkPlayers[i].version;
+ if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gEventObjectPalette33, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gEventObjectPalette34, 0x160 + i * 0x10, 0x20);
+ }
+ else
+ {
+ if (gLinkPlayers[i].gender == MALE)
+ LoadPalette(gEventObjectPalette8, 0x160 + i * 0x10, 0x20);
+ else
+ LoadPalette(gEventObjectPalette17, 0x160 + i * 0x10, 0x20);
+ }
+ }
+ }
+}
+
+u8 GiveMonArtistRibbon(void)
+{
+ u8 hasArtistRibbon;
+
+ hasArtistRibbon = GetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON);
+ if (!hasArtistRibbon && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3
+ && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
+ {
+ hasArtistRibbon = 1;
+ SetMonData(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
+ if (GetRibbonCount(&gPlayerParty[gUnknown_02039F24]) > 4)
+ sub_80EE4DC(&gPlayerParty[gUnknown_02039F24], MON_DATA_ARTIST_RIBBON);
+
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+u8 sub_80F8D24(void)
+{
+ return 0;
+}
+
+void ShowContestEntryMonPic(void)
+{
+ const struct CompressedSpritePalette *palette;
+ u32 personality, otId;
+ u16 species;
+ u8 spriteId;
+ u8 taskId;
+ u8 left, top;
+
+ if (FindTaskIdByFunc(sub_80F8EE8) == 0xFF)
+ {
+ AllocateMonSpritesGfx();
+ left = 10;
+ top = 3;
+ species = gContestMons[gSpecialVar_0x8006].species;
+ personality = gContestMons[gSpecialVar_0x8006].personality;
+ otId = gContestMons[gSpecialVar_0x8006].otId;
+ taskId = CreateTask(sub_80F8EE8, 0x50);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = species;
+ if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+ else
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
+ LoadCompressedObjectPalette(palette);
+ SetMultiuseSpriteTemplateToPokemon(species, 1);
+ gMultiuseSpriteTemplate.paletteTag = palette->tag;
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
+
+ if (gIsLinkContest & 1)
+ {
+ if (!(gIsLinkContest & 4))
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+ else
+ {
+ DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
+ }
+
+ gTasks[taskId].data[2] = spriteId;
+ gTasks[taskId].data[3] = left;
+ gTasks[taskId].data[4] = top;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].oam.priority = 0;
+ }
+}
+
+void sub_80F8EB8(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80F8EE8);
+ if (taskId != 0xFF)
+ {
+ gTasks[taskId].data[0]++;
+ FreeMonSpritesGfx();
+ }
+}
+
+static void sub_80F8EE8(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ struct Sprite *sprite;
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[0]++;
+ break;
+ case 1:
+ task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
+ SetStandardWindowBorderStyle(task->data[5], 1);
+ task->data[0]++;
+ break;
+ case 2:
+ break;
+ case 3:
+ sprite = &gSprites[task->data[2]];
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+
+ if(sprite->oam.affineMode)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+ task->data[0]++;
+ break;
+ case 4:
+ sub_80E2A78(gTasks[taskId].data[5]);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void ScriptGetMultiplayerId(void)
+{
+ if ((gIsLinkContest & 1) && gUnknown_02039F30 == 4 && !(gIsLinkContest & 2))
+ gSpecialVar_Result = GetMultiplayerId();
+ else
+ gSpecialVar_Result = 4;
+}
+
+void ScriptRandom(void)
+{
+ u16 random;
+ u16 *scriptPtr;
+
+ if (gIsLinkContest & 1)
+ {
+ gContestRngValue = 1103515245 * gContestRngValue + 24691;
+ random = gContestRngValue >> 16;
+ scriptPtr = &gSpecialVar_Result;
+ }
+ else
+ {
+ scriptPtr = &gSpecialVar_Result;
+ random = Random();
+ }
+ *scriptPtr = random % *scriptPtr;
+}
+
+u16 sub_80F903C(void)
+{
+ gContestRngValue = 1103515245 * gContestRngValue + 24691;
+ return gContestRngValue >> 16;
+}
+
+u8 sub_80F905C(void)
+{
+ if (gIsLinkContest & 2)
+ {
+ CreateTask(sub_80F9088, 5);
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+static void sub_80F9088(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (sub_800A520())
+ {
+ sub_800ADF8();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ gTasks[taskId].data[0]++;
+ break;
+ default:
+ if (sub_800A520() == 1)
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80F90DC(void)
+{
+ if (gIsLinkContest & 2)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(8, 8);
+ }
+ }
+}
+
+void sub_80F910C(void)
+{
+ if (gIsLinkContest & 2)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ sub_800E084();
+ }
+}
+
+u8 sub_80F9134(void)
+{
+ if (gIsLinkContest & 4)
+ return 1;
+ else
+ return 0;
+}
+
+void sub_80F9154(void)
+{
+ gIsLinkContest = 0;
+}
+
+u8 sub_80F9160(void)
+{
+ if (gIsLinkContest & 2)
+ return 1;
+ else
+ return 0;
+}
+
+void HealPlayerParty(void)
+{
+ u8 i, j;
+ u8 ppBonuses;
+ u8 arg[4];
+
+ // restore HP.
+ for(i = 0; i < gPlayerPartyCount; i++)
+ {
+ u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ arg[0] = maxHP;
+ arg[1] = maxHP >> 8;
+ SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
+ ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
+
+ // restore PP.
+ for(j = 0; j < 4; j++)
+ {
+ arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
+ SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
+ }
+
+ // since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
+ arg[0] = 0;
+ arg[1] = 0;
+ arg[2] = 0;
+ arg[3] = 0;
+ SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
+ }
+}
+
+u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
+{
+ u16 nationalDexNum;
+ int sentToPc;
+ u8 heldItem[2];
+ struct Pokemon mon;
+
+ CreateMon(&mon, species, level, 32, 0, 0, 0, 0);
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
+ sentToPc = GiveMonToPlayer(&mon);
+ nationalDexNum = SpeciesToNationalPokedexNum(species);
+
+ switch(sentToPc)
+ {
+ case 0:
+ case 1:
+ GetSetPokedexFlag(nationalDexNum, 2);
+ GetSetPokedexFlag(nationalDexNum, 3);
+ break;
+ }
+ return sentToPc;
+}
+
+u8 ScriptGiveEgg(u16 species)
+{
+ struct Pokemon mon;
+ u8 isEgg;
+
+ CreateEgg(&mon, species, TRUE);
+ isEgg = TRUE;
+ SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
+
+ return GiveMonToPlayer(&mon);
+}
+
+void HasEnoughMonsForDoubleBattle(void)
+{
+ switch (GetMonsStateToDoubles())
+ {
+ case 0:
+ gSpecialVar_Result = 0;
+ break;
+ case 1:
+ gSpecialVar_Result = 1;
+ break;
+ case 2:
+ gSpecialVar_Result = 2;
+ break;
+ }
+}
+
+static bool8 CheckPartyMonHasHeldItem(u16 item)
+{
+ int i;
+
+ for(i = 0; i < PARTY_SIZE; i++)
+ {
+ u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
+ if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_80F9370(void)
+{
+ bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
+ if (hasItem == TRUE)
+ GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
+
+ return hasItem;
+}
+
+void CreateScriptedWildMon(u16 species, u8 level, u16 item)
+{
+ u8 heldItem[2];
+
+ ZeroEnemyPartyMons();
+ CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0);
+ if (item)
+ {
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
+ }
+}
+
+void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
+{
+ if (monIndex > PARTY_SIZE)
+ monIndex = gPlayerPartyCount - 1;
+
+ SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
+}
+
+void sub_80F9438(void)
+{
+ gMain.savedCallback = sub_80F9460;
+ VarSet(VAR_FRONTIER_FACILITY, 9); // this isn't a valid frontier facility id (??)
+ sub_81B8518(0);
+}
+
+static void sub_80F9460(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = 0;
+ break;
+ default:
+ gSpecialVar_Result = 1;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void sub_80F9490(void)
+{
+ gMain.savedCallback = sub_80F94B8;
+ sub_81B8518(gSpecialVar_0x8004 + 1);
+}
+
+static void sub_80F94B8(void)
+{
+ switch (gSelectedOrderFromParty[0])
+ {
+ case 0:
+ gSpecialVar_Result = 0;
+ break;
+ default:
+ gSpecialVar_Result = 1;
+ break;
+ }
+
+ SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void ReducePlayerPartyToSelectedMons(void)
+{
+ struct Pokemon party[4];
+ int i;
+
+ CpuFill32(0, party, sizeof party);
+
+ // copy the selected pokemon according to the order.
+ for (i = 0; i < 4; i++)
+ if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
+ party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
+
+ CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
+
+ // overwrite the first 4 with the order copied to.
+ for (i = 0; i < 4; i++)
+ gPlayerParty[i] = party[i];
+
+ CalculatePlayerPartyCount();
+}
diff --git a/src/strings.c b/src/strings.c
index 72aedde6e..5dcf97e2b 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1,9 +1,7 @@
#include "global.h"
#include "strings.h"
-// Yes, all the aligns are absolutely necessary.
-// Until someone can come up with a better way to align byte arrays in C, this is what we're doing.
-asm(".align 2");
+ALIGNED(4)
const u8 gExpandedPlaceholder_Empty[] = _("");
const u8 gExpandedPlaceholder_Kun[] = _("");
const u8 gExpandedPlaceholder_Chan[] = _("");
@@ -49,24 +47,12 @@ const u8 gUnknown_085E8504[] = _("SELECT");
const u8 gUnknown_085E850B[] = _("+ Control Pad");
const u8 gUnknown_085E8519[] = _("L Button R Button");
const u8 gUnknown_085E852C[] = _("CONTROLS");
-
-asm(".align 2");
-const u8 gUnknown_085E8538[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK");
-
-asm(".align 2");
-const u8 gUnknown_085E8544[] = _("{A_BUTTON}NEXT");
-
-asm(".align 2");
-const u8 gUnknown_085E854C[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK");
-
-asm(".align 2");
-const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL");
-
-asm(".align 2");
-const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL");
-
-asm(".align 2");
-const u8 gText_UnkCtrlF800Exit[] = _("{A_BUTTON}EXIT");
+ALIGNED(4) const u8 gUnknown_085E8538[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK");
+ALIGNED(4) const u8 gUnknown_085E8544[] = _("{A_BUTTON}NEXT");
+ALIGNED(4) const u8 gUnknown_085E854C[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK");
+ALIGNED(4) const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL");
+ALIGNED(4) const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL");
+ALIGNED(4) const u8 gText_UnkCtrlF800Exit[] = _("{A_BUTTON}EXIT");
const u8 gText_BirchBoy[] = _("BOY");
const u8 gText_BirchGirl[] = _("GIRL");
const u8 gText_DefaultNameStu[] = _("STU");
@@ -486,30 +472,14 @@ const u8 gText_EscapeFromHere[] = _("Want to escape from here and return\nto {ST
const u8 gText_ReturnToHealingSpot[] = _("Want to return to the healing spot\nused last in {STR_VAR_1}?");
const u8 gText_PauseUntilPress[] = _("{PAUSE_UNTIL_PRESS}");
const u8 gJPText_PutVar1IntoSpinner[] = _("{STR_VAR_1}を ぐるぐるこうかんに\nだして よろしいですか?");
-
-asm(".align 2");
-const u8 gText_OnlyPkmnForBattle[] = _("That’s your only\nPOKéMON for battle.");
-
-asm(".align 2");
-const u8 gText_PkmnCantBeTradedNow[] = _("That POKéMON can’t be traded\nnow.");
-
-asm(".align 2");
-const u8 gText_EggCantBeTradedNow[] = _("An EGG can’t be traded now.");
-
-asm(".align 2");
-const u8 gText_OtherTrainersPkmnCantBeTraded[] = _("The other TRAINER’s POKéMON\ncan’t be traded now.");
-
-asm(".align 2");
-const u8 gText_OtherTrainerCantAcceptPkmn[] = _("The other TRAINER can’t accept\nthat POKéMON now.");
-
-asm(".align 2");
-const u8 gText_CantTradeWithTrainer[] = _("You can’t trade with that\nTRAINER now.");
-
-asm(".align 2");
-const u8 gText_NotPkmnOtherTrainerWants[] = _("That isn’t the type of POKéMON\nthat the other TRAINER wants.");
-
-asm(".align 2");
-const u8 gText_ThatIsntAnEgg[] = _("That isn’t an EGG.");
+ALIGNED(4) const u8 gText_OnlyPkmnForBattle[] = _("That’s your only\nPOKéMON for battle.");
+ALIGNED(4) const u8 gText_PkmnCantBeTradedNow[] = _("That POKéMON can’t be traded\nnow.");
+ALIGNED(4) const u8 gText_EggCantBeTradedNow[] = _("An EGG can’t be traded now.");
+ALIGNED(4) const u8 gText_OtherTrainersPkmnCantBeTraded[] = _("The other TRAINER’s POKéMON\ncan’t be traded now.");
+ALIGNED(4) const u8 gText_OtherTrainerCantAcceptPkmn[] = _("The other TRAINER can’t accept\nthat POKéMON now.");
+ALIGNED(4) const u8 gText_CantTradeWithTrainer[] = _("You can’t trade with that\nTRAINER now.");
+ALIGNED(4) const u8 gText_NotPkmnOtherTrainerWants[] = _("That isn’t the type of POKéMON\nthat the other TRAINER wants.");
+ALIGNED(4) const u8 gText_ThatIsntAnEgg[] = _("That isn’t an EGG.");
const u8 gText_Register[] = _("REGISTER");
const u8 gText_Attack3[] = _("ATTACK");
const u8 gText_Defense3[] = _("DEFENSE");
@@ -1251,20 +1221,11 @@ const u8 gText_BattleArena[] = _("BATTLE ARENA");
const u8 gText_BattlePike[] = _("BATTLE PIKE");
const u8 gText_BattlePyramid[] = _("BATTLE PYRAMID");
-asm(".align 2");
-const u8 gUnknown_085ED164[] = _("{STR_VAR_1} SINGLE");
-
-asm(".align 2");
-const u8 gUnknown_085ED170[] = _("{STR_VAR_1} DOUBLE");
-
-asm(".align 2");
-const u8 gUnknown_085ED17C[] = _("{STR_VAR_1} MULTI");
-
-asm(".align 2");
-const u8 gUnknown_085ED188[] = _("{STR_VAR_1} LINK");
-
-asm(".align 2");
-const u8 gUnknown_085ED190[] = _("{STR_VAR_1}");
+ALIGNED(4) const u8 gUnknown_085ED164[] = _("{STR_VAR_1} SINGLE");
+ALIGNED(4) const u8 gUnknown_085ED170[] = _("{STR_VAR_1} DOUBLE");
+ALIGNED(4) const u8 gUnknown_085ED17C[] = _("{STR_VAR_1} MULTI");
+ALIGNED(4) const u8 gUnknown_085ED188[] = _("{STR_VAR_1} LINK");
+ALIGNED(4) const u8 gUnknown_085ED190[] = _("{STR_VAR_1}");
const u8 gText_Give[] = _("Give");
const u8 gText_NoNeed[] = _("No need");
@@ -1332,93 +1293,35 @@ const u8 gMatchCall_MaySelfIntroductionText_Line1[] = _("My POKéMON and I help"
const u8 gMatchCall_MaySelfIntroductionText_Line2[] = _("my father’s research.");
const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!");
const u8 gText_NickHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
-
-asm(".align 2");
-const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p");
-
-asm(".align 2");
-const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY.");
-
-asm(".align 2");
-const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
-
-asm(".align 2");
-const u8 gText_RecordingGameResults[] = _("Recording your game results in the\nsave file.\lPlease wait.");
-
-asm(".align 2");
-const u8 gText_PlayBerryCrushAgain[] = _("Want to play BERRY CRUSH again?");
-
-asm(".align 2");
-const u8 gText_YouHaveNoBerries[] = _("You have no BERRIES.\nThe game will be canceled.");
-
-asm(".align 2");
-const u8 gText_MemberDroppedOut[] = _("A member dropped out.\nThe game will be canceled.");
-
-asm(".align 2");
-const u8 gText_TimesUpNoGoodPowder[] = _("Time’s up.\pGood BERRY POWDER could not be\nmade…\p");
-
-asm(".align 2");
-const u8 gText_CommunicationStandby2[] = _("Communication standby…");
-
-asm(".align 2");
-const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{SPECIAL_F7 0x00}");
-
-asm(".align 2");
-const u8 gText_1DotF700[] = _("1. {SPECIAL_F7 0x00}");
-
-asm(".align 2");
-const u8 gText_SpaceTimes2[] = _(" time(s)");
-
-asm(".align 2");
-const u8 gText_XDotY[] = _("{STR_VAR_1}.{STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_Var1Berry[] = _("{STR_VAR_1} BERRY");
-
-asm(".align 2");
-const u8 gText_TimeColon[] = _("Time:");
-
-asm(".align 2");
-const u8 gText_PressingSpeed[] = _("Pressing Speed:");
-
-asm(".align 2");
-const u8 gText_Silkiness[] = _("Silkiness:");
-
-asm(".align 2");
-const u8 gText_StrVar1[] = _("{STR_VAR_1}");
-
-asm(".align 2");
-const u8 gText_SpaceMin[] = _(" min. ");
-
-asm(".align 2");
-const u8 gText_XDotY2[] = _("{STR_VAR_1}.{STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_SpaceSec[] = _(" sec.");
-
-asm(".align 2");
-const u8 gText_XDotY3[] = _("{STR_VAR_1}.{STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_TimesPerSec[] = _(" Times/sec.");
-
-asm(".align 2");
-const u8 gText_Var1Percent[] = _("{STR_VAR_1}%");
-
-asm(".align 2");
-const u8 gText_PressesRankings[] = _("No. of Presses Rankings");
-
-asm(".align 2");
-const u8 gText_CrushingResults[] = _("Crushing Results");
-
-asm(".align 2");
-const u8 gText_NeatnessRankings[] = _("Neatness Rankings");
-
-asm(".align 2");
-const u8 gText_CoopRankings[] = _("Cooperative Rankings");
-
-asm(".align 2");
-const u8 gText_PressingPowerRankings[] = _("Pressing-Power Rankings");
+ALIGNED(4) const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p");
+ALIGNED(4) const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY.");
+ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
+ALIGNED(4) const u8 gText_RecordingGameResults[] = _("Recording your game results in the\nsave file.\lPlease wait.");
+ALIGNED(4) const u8 gText_PlayBerryCrushAgain[] = _("Want to play BERRY CRUSH again?");
+ALIGNED(4) const u8 gText_YouHaveNoBerries[] = _("You have no BERRIES.\nThe game will be canceled.");
+ALIGNED(4) const u8 gText_MemberDroppedOut[] = _("A member dropped out.\nThe game will be canceled.");
+ALIGNED(4) const u8 gText_TimesUpNoGoodPowder[] = _("Time’s up.\pGood BERRY POWDER could not be\nmade…\p");
+ALIGNED(4) const u8 gText_CommunicationStandby2[] = _("Communication standby…");
+ALIGNED(4) const u8 gText_1DotBlueF700[] = _("1. {COLOR BLUE}{SHADOW LIGHT_BLUE}{SPECIAL_F7 0x00}");
+ALIGNED(4) const u8 gText_1DotF700[] = _("1. {SPECIAL_F7 0x00}");
+ALIGNED(4) const u8 gText_SpaceTimes2[] = _(" time(s)");
+ALIGNED(4) const u8 gText_XDotY[] = _("{STR_VAR_1}.{STR_VAR_2}");
+ALIGNED(4) const u8 gText_Var1Berry[] = _("{STR_VAR_1} BERRY");
+ALIGNED(4) const u8 gText_TimeColon[] = _("Time:");
+ALIGNED(4) const u8 gText_PressingSpeed[] = _("Pressing Speed:");
+ALIGNED(4) const u8 gText_Silkiness[] = _("Silkiness:");
+ALIGNED(4) const u8 gText_StrVar1[] = _("{STR_VAR_1}");
+ALIGNED(4) const u8 gText_SpaceMin[] = _(" min. ");
+ALIGNED(4) const u8 gText_XDotY2[] = _("{STR_VAR_1}.{STR_VAR_2}");
+ALIGNED(4) const u8 gText_SpaceSec[] = _(" sec.");
+ALIGNED(4) const u8 gText_XDotY3[] = _("{STR_VAR_1}.{STR_VAR_2}");
+ALIGNED(4) const u8 gText_TimesPerSec[] = _(" Times/sec.");
+ALIGNED(4) const u8 gText_Var1Percent[] = _("{STR_VAR_1}%");
+ALIGNED(4) const u8 gText_PressesRankings[] = _("No. of Presses Rankings");
+ALIGNED(4) const u8 gText_CrushingResults[] = _("Crushing Results");
+ALIGNED(4) const u8 gText_NeatnessRankings[] = _("Neatness Rankings");
+ALIGNED(4) const u8 gText_CoopRankings[] = _("Cooperative Rankings");
+ALIGNED(4) const u8 gText_PressingPowerRankings[] = _("Pressing-Power Rankings");
const u8 gText_BerryCrush2[] = _("BERRY CRUSH");
const u8 gText_PressingSpeedRankings[] = _("Pressing-Speed Rankings");
const u8 gText_Var1Players[] = _("{STR_VAR_1} PLAYERS");
@@ -1548,29 +1451,15 @@ const u8 gText_KOsInARow[] = _("KOs in a row: {STR_VAR_1}");
const u8 gText_TimesVar1[] = _("Times: {STR_VAR_1}");
const u8 gText_FloorsCleared[] = _("Floors cleared: {STR_VAR_1}");
-asm(".align 2");
-const u8 gText_RecordsLv50[] = _("LV. 50");
-
-asm(".align 2");
-const u8 gText_RecordsOpenLevel[] = _("OPEN LEVEL");
-
-asm(".align 2");
-const u8 gText_FrontierFacilityWinStreak[] = _("Win streak: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_RecordsLv50[] = _("LV. 50");
+ALIGNED(4) const u8 gText_RecordsOpenLevel[] = _("OPEN LEVEL");
+ALIGNED(4) const u8 gText_FrontierFacilityWinStreak[] = _("Win streak: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_FrontierFacilityClearStreak[] = _("Clear streak: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_FrontierFacilityRoomsCleared[] = _("Rooms cleared: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_FrontierFacilityKOsStreak[] = _("KOs in a row: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_FrontierFacilityFloorsCleared[] = _("Floors cleared: {STR_VAR_2}");
+ALIGNED(4) const u8 gText_123Dot[][3] = {_("1."), _("2."), _("3.")};
-asm(".align 2");
-const u8 gText_FrontierFacilityClearStreak[] = _("Clear streak: {STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_FrontierFacilityRoomsCleared[] = _("Rooms cleared: {STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_FrontierFacilityKOsStreak[] = _("KOs in a row: {STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_FrontierFacilityFloorsCleared[] = _("Floors cleared: {STR_VAR_2}");
-
-asm(".align 2");
-const u8 gText_123Dot[][3] = {_("1."), _("2."), _("3.")};
const u8 gText_SavingDontTurnOff2[] = _("SAVING…\nDON’T TURN OFF THE POWER.");
const u8 gText_BlenderMaxSpeedRecord[] = _("BERRY BLENDER\nMAXIMUM SPEED RECORD!");
const u8 gText_234Players[] = _("2 PLAYERS\n3 PLAYERS\n4 PLAYERS");
@@ -1769,185 +1658,66 @@ const u8 *const gTextTable_Players[] = {
gText_F703Players
};
-asm(".align 2");
-const u8 gText_WonderCards[] = _("WONDER CARDS");
-
-asm(".align 2");
-const u8 gText_WonderNews[] = _("WONDER NEWS");
-
-asm(".align 2");
-const u8 gText_WirelessCommunication[] = _("WIRELESS COMMUNICATION");
-
-asm(".align 2");
-const u8 gText_Friend2[] = _("FRIEND");
-
-asm(".align 2");
-const u8 gText_Exit3[] = _("EXIT");
-
-asm(".align 2");
-const u8 gText_Receive[] = _("RECEIVE");
-
-asm(".align 2");
-const u8 gText_Send[] = _("SEND");
-
-asm(".align 2");
-const u8 gText_Toss[] = _("TOSS");
-
-asm(".align 2");
-const u8 gText_VarietyOfEventsImportedWireless[] = _("A variety of events will be imported\nover Wireless Communication.");
-
-asm(".align 2");
-const u8 gText_WonderCardsInPossession[] = _("Read the WONDER CARDS in your\npossession.");
-
-asm(".align 2");
-const u8 gText_ReadNewsThatArrived[] = _("Read the NEWS that arrived.");
-
-asm(".align 2");
-const u8 gText_ReturnToTitle[] = _("Return to the title screen.");
-
-asm(".align 2");
-const u8 gText_DontHaveCardNewOneInput[] = _("You don’t have a WONDER CARD,\nso a new CARD will be input.");
-
-asm(".align 2");
-const u8 gText_DontHaveNewsNewOneInput[] = _("You don’t have any WONDER NEWS,\nso new NEWS will be input.");
-
-asm(".align 2");
-const u8 gText_WhereShouldCardBeAccessed[] = _("Where should the WONDER CARD\nbe accessed?");
-
-asm(".align 2");
-const u8 gText_WhereShouldNewsBeAccessed[] = _("Where should the WONDER NEWS\nbe accessed?");
-
-asm(".align 2");
-const u8 gUnknown_085EEFC0[] = _("Communication standby…\nB Button: Cancel");
-
-asm(".align 2");
-const u8 gText_Communicating[] = _("Communicating…");
-
-asm(".align 2");
-const u8 gText_CommunicationCompleted[] = _("Communication completed.");
-
-asm(".align 2");
-const u8 gText_CommunicationError[] = _("Communication error.");
-
-asm(".align 2");
-const u8 gText_CommunicationCanceled[] = _("Communication has been canceled.");
-
-asm(".align 2");
-const u8 gText_ThrowAwayWonderCard[] = _("Throw away the WONDER CARD\nand input a new CARD?");
-
-asm(".align 2");
-const u8 gText_HaventReceivedCardsGift[] = _("You haven’t received the CARD’s gift\nyet. Input a new CARD anyway?");
-
-asm(".align 2");
-const u8 gText_WonderCardReceivedFrom[] = _("A WONDER CARD has been received\nfrom {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_WonderNewsReceivedFrom[] = _("A WONDER NEWS item has been\nreceived from {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_WonderCardReceived[] = _("A new WONDER CARD has been\nreceived.");
-
-asm(".align 2");
-const u8 gText_WonderNewsReceived[] = _("A new WONDER NEWS item has been\nreceived.");
-
-asm(".align 2");
-const u8 gText_NewStampReceived[] = _("A new STAMP has been received.");
-
-asm(".align 2");
-const u8 gText_NewTrainerReceived[] = _("A new TRAINER has arrived.");
-
-asm(".align 2");
-const u8 gText_AlreadyHadCard[] = _("You already had that\nWONDER CARD.");
-
-asm(".align 2");
-const u8 gText_AlreadyHadNews[] = _("You already had that\nWONDER NEWS item.");
-
-asm(".align 2");
-const u8 gText_AlreadyHadStamp[] = _("You already had that\nSTAMP.");
-
-asm(".align 2");
-const u8 gText_NoMoreRoomForStamps[] = _("There’s no more room for adding\nSTAMPS.");
-
-asm(".align 2");
-const u8 gText_RecordUploadedViaWireless[] = _("Your record has been uploaded via\nWIRELESS COMMUNICATION.");
-
-asm(".align 2");
-const u8 gText_CantAcceptCardFromTrainer[] = _("You can’t accept a WONDER CARD\nfrom this TRAINER.");
-
-asm(".align 2");
-const u8 gText_CantAcceptNewsFromTrainer[] = _("You can’t accept WONDER NEWS\nfrom this TRAINER.");
-
-asm(".align 2");
-const u8 gText_NothingSentOver[] = _("Nothing was sent over…");
-
-asm(".align 2");
-const u8 gText_WhatToDoWithCards[] = _("What would you like to do\nwith the WONDER CARDS?");
-
-asm(".align 2");
-const u8 gText_WhatToDoWithNews[] = _("What would you like to do\nwith the WONDER NEWS?");
-
-asm(".align 2");
-const u8 gText_SendingWonderCard[] = _("Sending your WONDER CARD…");
-
-asm(".align 2");
-const u8 gText_SendingWonderNews[] = _("Sending your WONDER NEWS item…");
-
-asm(".align 2");
-const u8 gText_WonderCardSentTo[] = _("Your WONDER CARD has been sent\nto {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_WonderNewsSentTo[] = _("Your WONDER NEWS item has been\nsent to {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_StampSentTo[] = _("A STAMP has been sent to {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_GiftSentTo[] = _("A GIFT has been sent to {STR_VAR_1}.");
-
-asm(".align 2");
-const u8 gText_OtherTrainerHasCard[] = _("The other TRAINER has the same\nWONDER CARD already.");
-
-asm(".align 2");
-const u8 gText_OtherTrainerHasNews[] = _("The other TRAINER has the same\nWONDER NEWS already.");
-
-asm(".align 2");
-const u8 gText_OtherTrainerHasStamp[] = _("The other TRAINER has the same\nSTAMP already.");
-
-asm(".align 2");
-const u8 gText_OtherTrainerCanceled[] = _("The other TRAINER canceled\ncommunication.");
-
-asm(".align 2");
-const u8 gText_CantSendGiftToTrainer[] = _("You can’t send a MYSTERY GIFT to\nthis TRAINER.");
-
-asm(".align 2");
-const u8 gText_IfThrowAwayCardEventWontHappen[] = _("If you throw away the CARD,\nits event won’t happen. Okay?");
-
-asm(".align 2");
-const u8 gText_OkayToDiscardNews[] = _("Is it okay to discard this\nNEWS item?");
-
-asm(".align 2");
-const u8 gText_HaventReceivedGiftOkayToDiscard[] = _("You haven’t received the\nGIFT. Is it okay to discard?");
-
-asm(".align 2");
-const u8 gText_DataWillBeSaved[] = _("Data will be saved.\nPlease wait.");
-
-asm(".align 2");
-const u8 gText_SaveCompletedPressA[] = _("Save completed.\nPlease press the A Button.");
-
-asm(".align 2");
-const u8 gText_WonderCardThrownAway[] = _("The WONDER CARD was thrown away.");
-
-asm(".align 2");
-const u8 gText_WonderNewsThrownAway[] = _("The WONDER NEWS was thrown away.");
-
-asm(".align 2");
-const u8 gText_MysteryGift[] = _("MYSTERY GIFT");
-
-asm(".align 2");
-const u8 gText_PickOKExit[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}EXIT");
-
-asm(".align 2");
-const u8 gText_PickOKCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL");
+ALIGNED(4) const u8 gText_WonderCards[] = _("WONDER CARDS");
+ALIGNED(4) const u8 gText_WonderNews[] = _("WONDER NEWS");
+ALIGNED(4) const u8 gText_WirelessCommunication[] = _("WIRELESS COMMUNICATION");
+ALIGNED(4) const u8 gText_Friend2[] = _("FRIEND");
+ALIGNED(4) const u8 gText_Exit3[] = _("EXIT");
+ALIGNED(4) const u8 gText_Receive[] = _("RECEIVE");
+ALIGNED(4) const u8 gText_Send[] = _("SEND");
+ALIGNED(4) const u8 gText_Toss[] = _("TOSS");
+ALIGNED(4) const u8 gText_VarietyOfEventsImportedWireless[] = _("A variety of events will be imported\nover Wireless Communication.");
+ALIGNED(4) const u8 gText_WonderCardsInPossession[] = _("Read the WONDER CARDS in your\npossession.");
+ALIGNED(4) const u8 gText_ReadNewsThatArrived[] = _("Read the NEWS that arrived.");
+ALIGNED(4) const u8 gText_ReturnToTitle[] = _("Return to the title screen.");
+ALIGNED(4) const u8 gText_DontHaveCardNewOneInput[] = _("You don’t have a WONDER CARD,\nso a new CARD will be input.");
+ALIGNED(4) const u8 gText_DontHaveNewsNewOneInput[] = _("You don’t have any WONDER NEWS,\nso new NEWS will be input.");
+ALIGNED(4) const u8 gText_WhereShouldCardBeAccessed[] = _("Where should the WONDER CARD\nbe accessed?");
+ALIGNED(4) const u8 gText_WhereShouldNewsBeAccessed[] = _("Where should the WONDER NEWS\nbe accessed?");
+ALIGNED(4) const u8 gUnknown_085EEFC0[] = _("Communication standby…\nB Button: Cancel");
+ALIGNED(4) const u8 gText_Communicating[] = _("Communicating…");
+ALIGNED(4) const u8 gText_CommunicationCompleted[] = _("Communication completed.");
+ALIGNED(4) const u8 gText_CommunicationError[] = _("Communication error.");
+ALIGNED(4) const u8 gText_CommunicationCanceled[] = _("Communication has been canceled.");
+ALIGNED(4) const u8 gText_ThrowAwayWonderCard[] = _("Throw away the WONDER CARD\nand input a new CARD?");
+ALIGNED(4) const u8 gText_HaventReceivedCardsGift[] = _("You haven’t received the CARD’s gift\nyet. Input a new CARD anyway?");
+ALIGNED(4) const u8 gText_WonderCardReceivedFrom[] = _("A WONDER CARD has been received\nfrom {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_WonderNewsReceivedFrom[] = _("A WONDER NEWS item has been\nreceived from {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_WonderCardReceived[] = _("A new WONDER CARD has been\nreceived.");
+ALIGNED(4) const u8 gText_WonderNewsReceived[] = _("A new WONDER NEWS item has been\nreceived.");
+ALIGNED(4) const u8 gText_NewStampReceived[] = _("A new STAMP has been received.");
+ALIGNED(4) const u8 gText_NewTrainerReceived[] = _("A new TRAINER has arrived.");
+ALIGNED(4) const u8 gText_AlreadyHadCard[] = _("You already had that\nWONDER CARD.");
+ALIGNED(4) const u8 gText_AlreadyHadNews[] = _("You already had that\nWONDER NEWS item.");
+ALIGNED(4) const u8 gText_AlreadyHadStamp[] = _("You already had that\nSTAMP.");
+ALIGNED(4) const u8 gText_NoMoreRoomForStamps[] = _("There’s no more room for adding\nSTAMPS.");
+ALIGNED(4) const u8 gText_RecordUploadedViaWireless[] = _("Your record has been uploaded via\nWIRELESS COMMUNICATION.");
+ALIGNED(4) const u8 gText_CantAcceptCardFromTrainer[] = _("You can’t accept a WONDER CARD\nfrom this TRAINER.");
+ALIGNED(4) const u8 gText_CantAcceptNewsFromTrainer[] = _("You can’t accept WONDER NEWS\nfrom this TRAINER.");
+ALIGNED(4) const u8 gText_NothingSentOver[] = _("Nothing was sent over…");
+ALIGNED(4) const u8 gText_WhatToDoWithCards[] = _("What would you like to do\nwith the WONDER CARDS?");
+ALIGNED(4) const u8 gText_WhatToDoWithNews[] = _("What would you like to do\nwith the WONDER NEWS?");
+ALIGNED(4) const u8 gText_SendingWonderCard[] = _("Sending your WONDER CARD…");
+ALIGNED(4) const u8 gText_SendingWonderNews[] = _("Sending your WONDER NEWS item…");
+ALIGNED(4) const u8 gText_WonderCardSentTo[] = _("Your WONDER CARD has been sent\nto {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_WonderNewsSentTo[] = _("Your WONDER NEWS item has been\nsent to {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_StampSentTo[] = _("A STAMP has been sent to {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_GiftSentTo[] = _("A GIFT has been sent to {STR_VAR_1}.");
+ALIGNED(4) const u8 gText_OtherTrainerHasCard[] = _("The other TRAINER has the same\nWONDER CARD already.");
+ALIGNED(4) const u8 gText_OtherTrainerHasNews[] = _("The other TRAINER has the same\nWONDER NEWS already.");
+ALIGNED(4) const u8 gText_OtherTrainerHasStamp[] = _("The other TRAINER has the same\nSTAMP already.");
+ALIGNED(4) const u8 gText_OtherTrainerCanceled[] = _("The other TRAINER canceled\ncommunication.");
+ALIGNED(4) const u8 gText_CantSendGiftToTrainer[] = _("You can’t send a MYSTERY GIFT to\nthis TRAINER.");
+ALIGNED(4) const u8 gText_IfThrowAwayCardEventWontHappen[] = _("If you throw away the CARD,\nits event won’t happen. Okay?");
+ALIGNED(4) const u8 gText_OkayToDiscardNews[] = _("Is it okay to discard this\nNEWS item?");
+ALIGNED(4) const u8 gText_HaventReceivedGiftOkayToDiscard[] = _("You haven’t received the\nGIFT. Is it okay to discard?");
+ALIGNED(4) const u8 gText_DataWillBeSaved[] = _("Data will be saved.\nPlease wait.");
+ALIGNED(4) const u8 gText_SaveCompletedPressA[] = _("Save completed.\nPlease press the A Button.");
+ALIGNED(4) const u8 gText_WonderCardThrownAway[] = _("The WONDER CARD was thrown away.");
+ALIGNED(4) const u8 gText_WonderNewsThrownAway[] = _("The WONDER NEWS was thrown away.");
+ALIGNED(4) const u8 gText_MysteryGift[] = _("MYSTERY GIFT");
+ALIGNED(4) const u8 gText_PickOKExit[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}EXIT");
+ALIGNED(4) const u8 gText_PickOKCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK {B_BUTTON}CANCEL");
const u8 gText_PlayersBattleResults[] = _("{PLAYER}’s BATTLE RESULTS");
const u8 gText_TotalRecordWLD[] = _("TOTAL RECORD W:{STR_VAR_1} L:{STR_VAR_2} D:{STR_VAR_3}");
const u8 gText_WinLoseDraw[] = _("{CLEAR_TO 0x53}WIN{CLEAR_TO 0x80}LOSE{CLEAR_TO 0xB0}DRAW");
diff --git a/src/text.c b/src/text.c
index b134bcacd..ecd3a3095 100644
--- a/src/text.c
+++ b/src/text.c
@@ -29,7 +29,8 @@ u8 gUnknown_03002F84;
struct Struct_03002F90 gUnknown_03002F90;
TextFlags gTextFlags;
-const u8 gFontHalfRowOffsets[] = {
+const u8 gFontHalfRowOffsets[] =
+{
0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09,
0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12,
@@ -55,7 +56,8 @@ const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("data/graphics/fonts/unused_frlg_dow
const u8 gDownArrowYCoords[] = { 0x0, 0x1, 0x2, 0x1 };
const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2, 0x4, 0x0 };
-const struct GlyphWidthFunc gGlyphWidthFuncs[] = {
+const struct GlyphWidthFunc gGlyphWidthFuncs[] =
+{
{ 0x0, GetGlyphWidthFont0 },
{ 0x1, GetGlyphWidthFont1 },
{ 0x2, GetGlyphWidthFont2 },
@@ -67,7 +69,8 @@ const struct GlyphWidthFunc gGlyphWidthFuncs[] = {
{ 0x8, GetGlyphWidthFont8 }
};
-const struct KeypadIcon gKeypadIcons[] = {
+const struct KeypadIcon gKeypadIcons[] =
+{
{ 0x0, 0x8, 0xC },
{ 0x1, 0x8, 0xC },
{ 0x2, 0x10, 0xC },
@@ -85,7 +88,8 @@ const struct KeypadIcon gKeypadIcons[] = {
const u8 gKeypadIconTiles[] = INCBIN_U8("data/graphics/fonts/keypad_icons.4bpp");
-const struct FontInfo gFontInfos[] = {
+const struct FontInfo gFontInfos[] =
+{
{ Font0Func, 0x5, 0xC, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
{ Font1Func, 0x6, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
{ Font2Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
@@ -98,7 +102,8 @@ const struct FontInfo gFontInfos[] = {
{ NULL, 0x8, 0x8, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF }
};
-const u8 gMenuCursorDimensions[][2] = {
+const u8 gMenuCursorDimensions[][2] =
+{
{ 0x8, 0xC },
{ 0x8, 0xF },
{ 0x8, 0xE },
@@ -211,25 +216,25 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi
void RunTextPrinters(void)
{
int i;
- u16 temp;
if (gUnknown_03002F84 == 0)
{
for (i = 0; i < 0x20; ++i)
{
- if (gTextPrinters[i].active != 0)
+ if (gTextPrinters[i].active)
{
- temp = RenderFont(&gTextPrinters[i]);
- switch (temp) {
- case 0:
- CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2);
- case 3:
- if (gTextPrinters[i].callback != 0)
- gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp);
- break;
- case 1:
- gTextPrinters[i].active = 0;
- break;
+ u16 temp = RenderFont(&gTextPrinters[i]);
+ switch (temp)
+ {
+ case 0:
+ CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2);
+ case 3:
+ if (gTextPrinters[i].callback != 0)
+ gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp);
+ break;
+ case 1:
+ gTextPrinters[i].active = 0;
+ break;
}
}
}
@@ -252,584 +257,156 @@ u32 RenderFont(struct TextPrinter *textPrinter)
}
}
-#ifdef NONMATCHING
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
{
- u16* current = gFontHalfRowLookupTable;
+ u32 fg12, bg12, shadow12;
+ u32 temp;
+
+ u16 *current = gFontHalfRowLookupTable;
gLastTextBgColor = bgColor;
gLastTextFgColor = fgColor;
gLastTextShadowColor = shadowColor;
- *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | bgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | fgColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (bgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (bgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (bgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (fgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (fgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (fgColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (bgColor << 8) | (shadowColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (fgColor << 8) | (shadowColor << 4) | shadowColor;
-
- *(current++) = (bgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (fgColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
-}
-#else
-NAKED
-void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
-{
- asm("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, #0x24\n\
- lsl r0, #24\n\
- lsr r0, #24\n\
- lsl r1, #24\n\
- lsr r1, #24\n\
- lsl r2, #24\n\
- lsr r2, #24\n\
- ldr r3, =gFontHalfRowLookupTable\n\
- ldr r4, =gLastTextBgColor\n\
- strh r1, [r4]\n\
- ldr r4, =gLastTextFgColor\n\
- strh r0, [r4]\n\
- ldr r4, =gLastTextShadowColor\n\
- strh r2, [r4]\n\
- lsl r5, r1, #12\n\
- lsl r6, r0, #12\n\
- lsl r4, r2, #12\n\
- mov r8, r4\n\
- lsl r7, r1, #8\n\
- str r7, [sp]\n\
- lsl r4, r1, #4\n\
- mov r9, r4\n\
- orr r7, r4\n\
- str r7, [sp, #0x4]\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- lsl r7, r0, #8\n\
- mov r10, r7\n\
- mov r4, r10\n\
- mov r7, r9\n\
- orr r4, r7\n\
- str r4, [sp, #0x8]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- lsl r7, r2, #8\n\
- mov r12, r7\n\
- mov r4, r12\n\
- mov r7, r9\n\
- orr r4, r7\n\
- str r4, [sp, #0xC]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- lsl r7, r0, #4\n\
- mov r9, r7\n\
- ldr r4, [sp]\n\
- orr r4, r7\n\
- str r4, [sp, #0x10]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- mov r7, r10\n\
- add r4, r7, #0\n\
- mov r7, r9\n\
- orr r4, r7\n\
- str r4, [sp, #0x14]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- mov r7, r12\n\
- add r4, r7, #0\n\
- mov r7, r9\n\
- orr r4, r7\n\
- str r4, [sp, #0x18]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- lsl r7, r2, #4\n\
- mov r9, r7\n\
- mov r4, r9\n\
- ldr r7, [sp]\n\
- orr r7, r4\n\
- str r7, [sp, #0x1C]\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- mov r7, r9\n\
- mov r4, r10\n\
- orr r4, r7\n\
- str r4, [sp, #0x20]\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r4, r5, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- add r4, r6, #0\n\
- orr r4, r7\n\
- strh r4, [r3]\n\
- add r3, #0x2\n\
- mov r4, r8\n\
- orr r7, r4\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- mov r4, r12\n\
- mov r7, r9\n\
- orr r4, r7\n\
- add r7, r4, #0\n\
- orr r7, r1\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x4]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x8]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0xC]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x10]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x14]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x18]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x1C]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- ldr r7, [sp, #0x20]\n\
- orr r7, r0\n\
- add r1, r5, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- add r1, r6, #0\n\
- orr r1, r7\n\
- strh r1, [r3]\n\
- add r3, #0x2\n\
- mov r1, r8\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r4, #0\n\
- orr r7, r0\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r0, [sp, #0x4]\n\
- orr r7, r0\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- orr r7, r1\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x8]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0xC]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x10]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x14]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x18]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x1C]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- ldr r1, [sp, #0x20]\n\
- orr r7, r1\n\
- add r0, r5, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- add r0, r6, #0\n\
- orr r0, r7\n\
- strh r0, [r3]\n\
- add r3, #0x2\n\
- mov r0, r8\n\
- orr r7, r0\n\
- strh r7, [r3]\n\
- add r3, #0x2\n\
- add r7, r2, #0\n\
- orr r7, r4\n\
- orr r5, r7\n\
- strh r5, [r3]\n\
- add r3, #0x2\n\
- orr r6, r7\n\
- strh r6, [r3]\n\
- orr r0, r7\n\
- strh r0, [r3, #0x2]\n\
- add sp, #0x24\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
+ bg12 = bgColor << 12;
+ fg12 = fgColor << 12;
+ shadow12 = shadowColor << 12;
+
+ temp = (bgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (bgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (fgColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (shadowColor << 4) | bgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (bgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (fgColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (shadowColor << 4) | fgColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (bgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (fgColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (bgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (fgColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
+
+ temp = (shadowColor << 8) | (shadowColor << 4) | shadowColor;
+ *(current++) = (bg12) | temp;
+ *(current++) = (fg12) | temp;
+ *(current++) = (shadow12) | temp;
}
-#endif
void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
{
@@ -843,207 +420,49 @@ void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
GenerateFontHalfRowLookupTable(*fgColor, *bgColor, *shadowColor);
}
-#ifdef NONMATCHING
-void DecompressGlyphTile(const u16 *src, u16 *dest)
+void DecompressGlyphTile(const void *src_, void *dest_)
{
u32 temp;
+ const u16 *src = src_;
+ u32 *dest = dest_;
- temp = src[0];
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
- temp = src[1];
- src += 2;
- dest[1] = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
- dest++;
temp = *(src++);
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ *(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
temp = *(src++);
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
temp = *(src++);
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
temp = *(src++);
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]];
- *(dest++) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[0] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[0] >> 8]];
- *(dest) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] >> 8]];
-}
-#else
-NAKED
-void DecompressGlyphTile(const u16 *src, u16 *dest)
-{
- asm("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldrh r7, [r0]\n\
- ldr r5, =gFontHalfRowLookupTable\n\
- ldr r4, =gFontHalfRowOffsets\n\
- mov r2, #0xFF\n\
- mov r8, r2\n\
- add r2, r7, #0\n\
- mov r3, r8\n\
- and r2, r3\n\
- add r2, r4\n\
- ldrb r2, [r2]\n\
- lsl r2, #1\n\
- add r2, r5\n\
- ldrh r3, [r2]\n\
- lsl r3, #16\n\
- lsr r2, r7, #8\n\
- add r2, r4\n\
- ldrb r2, [r2]\n\
- lsl r2, #1\n\
- add r2, r5\n\
- ldrh r2, [r2]\n\
- orr r3, r2\n\
- add r6, r1, #0\n\
- stmia r6!, {r3}\n\
- ldrh r7, [r0, #0x2]\n\
- add r0, #0x4\n\
- add r2, r7, #0\n\
- mov r3, r8\n\
- and r2, r3\n\
- add r2, r4\n\
- ldrb r2, [r2]\n\
- lsl r2, #1\n\
- add r2, r5\n\
- ldrh r3, [r2]\n\
- lsl r3, #16\n\
- lsr r2, r7, #8\n\
- add r2, r4\n\
- ldrb r2, [r2]\n\
- lsl r2, #1\n\
- add r2, r5\n\
- ldrh r2, [r2]\n\
- orr r3, r2\n\
- str r3, [r1, #0x4]\n\
- add r6, #0x4\n\
- ldrh r7, [r0]\n\
- add r0, #0x2\n\
- add r1, r7, #0\n\
- mov r2, r8\n\
- and r1, r2\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r2, [r1]\n\
- lsl r2, #16\n\
- lsr r1, r7, #8\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r1, [r1]\n\
- orr r2, r1\n\
- stmia r6!, {r2}\n\
- ldrh r7, [r0]\n\
- add r0, #0x2\n\
- add r1, r7, #0\n\
- mov r3, r8\n\
- and r1, r3\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r2, [r1]\n\
- lsl r2, #16\n\
- lsr r1, r7, #8\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r1, [r1]\n\
- orr r2, r1\n\
- stmia r6!, {r2}\n\
- ldrh r7, [r0]\n\
- add r0, #0x2\n\
- add r1, r7, #0\n\
- and r1, r3\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r2, [r1]\n\
- lsl r2, #16\n\
- lsr r1, r7, #8\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r1, [r1]\n\
- orr r2, r1\n\
- stmia r6!, {r2}\n\
- ldrh r7, [r0]\n\
- add r0, #0x2\n\
- add r1, r7, #0\n\
- and r1, r3\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r2, [r1]\n\
- lsl r2, #16\n\
- lsr r1, r7, #8\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r1, [r1]\n\
- orr r2, r1\n\
- stmia r6!, {r2}\n\
- ldrh r7, [r0]\n\
- add r1, r7, #0\n\
- and r1, r3\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r2, [r1]\n\
- lsl r2, #16\n\
- lsr r1, r7, #8\n\
- add r1, r4\n\
- ldrb r1, [r1]\n\
- lsl r1, #1\n\
- add r1, r5\n\
- ldrh r1, [r1]\n\
- orr r2, r1\n\
- stmia r6!, {r2}\n\
- ldrh r7, [r0, #0x2]\n\
- add r0, r7, #0\n\
- and r0, r3\n\
- add r0, r4\n\
- ldrb r0, [r0]\n\
- lsl r0, #1\n\
- add r0, r5\n\
- ldrh r1, [r0]\n\
- lsl r1, #16\n\
- lsr r0, r7, #8\n\
- add r0, r4\n\
- ldrb r0, [r0]\n\
- lsl r0, #1\n\
- add r0, r5\n\
- ldrh r0, [r0]\n\
- orr r1, r0\n\
- str r1, [r6]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
+ temp = *(src++);
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
+ temp = *(src++);
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
+ temp = *(src++);
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
+
+ temp = *(src++);
+ *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
}
-#endif
u8 GetLastTextColor(u8 colorType)
{
switch (colorType)
{
- case 0:
- return gLastTextFgColor;
- case 2:
- return gLastTextBgColor;
- case 1:
- return gLastTextShadowColor;
- default:
- return 0;
+ case 0:
+ return gLastTextFgColor;
+ case 2:
+ return gLastTextBgColor;
+ case 1:
+ return gLastTextShadowColor;
+ default:
+ return 0;
}
}
@@ -2802,8 +2221,8 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
if (isJapanese == 1)
{
glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); // gUnknown_03002F90 + 0x40
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.unk80 = 8; // gGlyphWidth
gUnknown_03002F90.unk81 = 12; // gGlyphHeight
}
@@ -2814,15 +2233,15 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
if (gUnknown_03002F90.unk80 <= 8)
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
}
else
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gUnknown_03002F90.unk60));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
+ DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
}
gUnknown_03002F90.unk81 = 13;
@@ -2845,8 +2264,8 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese)
{
int eff;
glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); // gUnknown_03002F90 + 0x40
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.unk80 = 8; // gGlyphWidth
gUnknown_03002F90.unk81 = 15; // gGlyphHeight
}
@@ -2857,15 +2276,15 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese)
if (gUnknown_03002F90.unk80 <= 8)
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
}
else
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gUnknown_03002F90.unk60));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
+ DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
}
gUnknown_03002F90.unk81 = 15;
@@ -2887,8 +2306,8 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese)
if (isJapanese == TRUE)
{
glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); // gUnknown_03002F90 + 0x40
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.unk80 = 8; // gGlyphWidth
gUnknown_03002F90.unk81 = 12; // gGlyphHeight
}
@@ -2899,15 +2318,15 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese)
if (gUnknown_03002F90.unk80 <= 8)
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
}
else
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gUnknown_03002F90.unk60));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
+ DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
}
gUnknown_03002F90.unk81 = 12;
@@ -2929,10 +2348,10 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
if (isJapanese == TRUE)
{
glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20)); // gUnknown_03002F90 + 0x40
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); // gUnknown_03002F90 + 0x20
- DecompressGlyphTile(glyphs + 0x88, (u16 *)(gUnknown_03002F90.unk60)); // gUnknown_03002F90 + 0x60
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20
+ DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60
gUnknown_03002F90.unk80 = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth
gUnknown_03002F90.unk81 = 14; // gGlyphHeight
}
@@ -2943,15 +2362,15 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
if (gUnknown_03002F90.unk80 <= 8)
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
}
else
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gUnknown_03002F90.unk60));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
+ DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
}
gUnknown_03002F90.unk81 = 14;
@@ -2974,8 +2393,8 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
{
int eff;
glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40)); // gUnknown_03002F90 + 0x40
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
gUnknown_03002F90.unk80 = 8; // gGlyphWidth
gUnknown_03002F90.unk81 = 15; // gGlyphHeight
}
@@ -2986,15 +2405,15 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
if (gUnknown_03002F90.unk80 <= 8)
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
}
else
{
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, (u16 *)(gUnknown_03002F90.unk20));
- DecompressGlyphTile(glyphs + 0x10, (u16 *)(gUnknown_03002F90.unk40));
- DecompressGlyphTile(glyphs + 0x18, (u16 *)(gUnknown_03002F90.unk60));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
+ DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
+ DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
}
gUnknown_03002F90.unk81 = 15;
@@ -3014,8 +2433,8 @@ void DecompressGlyphFont9(u16 glyphId)
const u16* glyphs;
glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, (u16 *)gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, (u16 *)(gUnknown_03002F90.unk40));
+ DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
+ DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40);
gUnknown_03002F90.unk80 = 8;
gUnknown_03002F90.unk81 = 12;
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index bff045d1c..ba06a3dc1 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -472,7 +472,7 @@ gUnknown_0203CEF0: @ 203CEF0
gUnknown_0203CEF4: @ 203CEF4
.space 0x4
-gUnknown_0203CEF8: @ 203CEF8
+gSelectedOrderFromParty: @ 203CEF8
.space 0x4
gUnknown_0203CEFC: @ 203CEFC