summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/icon_constants.asm51
-rw-r--r--constants/menu_constants.asm5
-rw-r--r--constants/phone_constants.asm2
-rw-r--r--constants/pokemon_data_constants.asm15
-rw-r--r--constants/wram_constants.asm2
-rw-r--r--data/events/elevator_floors.asm35
-rwxr-xr-xdata/text/common_1.asm4
-rw-r--r--data/text/common_2.asm46
-rw-r--r--engine/billspctop.asm2
-rw-r--r--engine/events/elevator.asm215
-rwxr-xr-xengine/events/misc_scripts.asm8
-rwxr-xr-xengine/events/misc_scripts_2.asm4
-rwxr-xr-xengine/events/overworld.asm4
-rwxr-xr-xengine/events/std_collision.asm8
-rw-r--r--engine/events/sweet_scent.asm66
-rwxr-xr-xengine/items.asm30
-rw-r--r--engine/learn.asm18
-rwxr-xr-xengine/learn_tm.asm2
-rw-r--r--engine/menus/start_menu.asm541
-rwxr-xr-xengine/move_mon.asm10
-rw-r--r--engine/namingscreen.asm2
-rwxr-xr-xengine/overworld/map_objects.asm2
-rwxr-xr-xengine/overworld/player_movement.asm88
-rwxr-xr-xengine/overworld/player_object.asm2
-rw-r--r--engine/overworld/select_menu.asm172
-rwxr-xr-xengine/pack.asm81
-rw-r--r--engine/pokemon/mon_menu.asm1294
-rwxr-xr-xengine/specials.asm8
-rw-r--r--home/gfx.asm4
-rw-r--r--home/map.asm8
-rw-r--r--home/menu.asm8
-rwxr-xr-xhome/pokemon.asm2
-rwxr-xr-xitems/item_effects.asm31
-rw-r--r--main.asm87
-rwxr-xr-xpredef/cgb.asm6
-rwxr-xr-xpredef/sgb.asm6
-rwxr-xr-xsram.asm1553
-rw-r--r--wram.asm248
38 files changed, 2876 insertions, 1794 deletions
diff --git a/constants/icon_constants.asm b/constants/icon_constants.asm
new file mode 100644
index 00000000..870175f4
--- /dev/null
+++ b/constants/icon_constants.asm
@@ -0,0 +1,51 @@
+; IconPointers indexes (see data/icon_pointers.asm)
+ const_def
+ const ICON_NULL
+ const ICON_POLIWAG
+ const ICON_JIGGLYPUFF
+ const ICON_DIGLETT
+ const ICON_PIKACHU
+ const ICON_STARYU
+ const ICON_FISH
+ const ICON_BIRD
+ const ICON_MONSTER
+ const ICON_CLEFAIRY
+ const ICON_ODDISH
+ const ICON_BUG
+ const ICON_GHOST
+ const ICON_LAPRAS
+ const ICON_HUMANSHAPE
+ const ICON_FOX
+ const ICON_EQUINE
+ const ICON_SHELL
+ const ICON_BLOB
+ const ICON_SERPENT
+ const ICON_VOLTORB
+ const ICON_SQUIRTLE
+ const ICON_BULBASAUR
+ const ICON_CHARMANDER
+ const ICON_CATERPILLAR
+ const ICON_UNOWN
+ const ICON_GEODUDE
+ const ICON_FIGHTER
+ const ICON_EGG
+ const ICON_JELLYFISH
+ const ICON_MOTH
+ const ICON_BAT
+ const ICON_SNORLAX
+ const ICON_HO_OH
+ const ICON_LUGIA
+ const ICON_GYARADOS
+ const ICON_SLOWPOKE
+ const ICON_SUDOWOODO
+ const ICON_BIGMON
+
+; LoadMenuMonIcon.Jumptable indexes (see engine/gfx/mon_icons.asm)
+ const_def
+ const MONICON_PARTYMENU
+ const MONICON_NAMINGSCREEN
+ const MONICON_MOVES
+ const MONICON_TRADE
+ const MONICON_MOBILE1
+ const MONICON_MOBILE2
+ const MONICON_UNUSED
diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm
index 7c5f2337..2c6c7910 100644
--- a/constants/menu_constants.asm
+++ b/constants/menu_constants.asm
@@ -32,6 +32,11 @@
shift_const SCROLLINGMENU_ENABLE_START
shift_const SCROLLINGMENU_ENABLE_SELECT
+; ScrollingMenu items structure format
+ const_def 1
+ const SCROLLINGMENU_ITEMS_NORMAL
+ const SCROLLINGMENU_ITEMS_QUANTITY
+
; MonMenuOptions indexes (see data/mon_menu.asm)
; used by PokemonActionSubmenu (see engine/menus/start_menu.asm)
const_def 1
diff --git a/constants/phone_constants.asm b/constants/phone_constants.asm
index 9247e927..1718e892 100644
--- a/constants/phone_constants.asm
+++ b/constants/phone_constants.asm
@@ -63,5 +63,5 @@
const PHONE_CONTACT_SCRIPT2_BANK
const PHONE_CONTACT_SCRIPT2_ADDR_LO
const PHONE_CONTACT_SCRIPT2_ADDR_HI
-PHONE_TABLE_WIDTH EQU const_value
+PHONE_CONTACT_SIZE EQU const_value
CONTACT_LIST_SIZE EQU 10
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index 04df889b..d29b4121 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -62,8 +62,9 @@ GENDER_UNKNOWN EQU -1
const EGG_DRAGON ; e
const EGG_NONE ; f (Undiscovered)
-; menu sprites
-const_value SET 1
+; IconPointers indexes (see data/icon_pointers.asm)
+ const_def
+ const ICON_NULL
const ICON_POLIWAG
const ICON_JIGGLYPUFF
const ICON_DIGLETT
@@ -103,6 +104,16 @@ const_value SET 1
const ICON_SUDOWOODO
const ICON_BIGMON
+; LoadMenuMonIcon.Jumptable indexes (see engine/gfx/mon_icons.asm)
+ const_def
+ const MONICON_PARTYMENU
+ const MONICON_NAMINGSCREEN
+ const MONICON_MOVES
+ const MONICON_TRADE
+ const MONICON_MOBILE1
+ const MONICON_MOBILE2
+ const MONICON_UNUSED
+
; maximum number of party pokemon
PARTY_LENGTH EQU 6
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm
index 7cdebc05..fba6f2ff 100644
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -148,6 +148,8 @@ NUM_JOHTO_BADGES EQU const_value
NUM_KANTO_BADGES EQU const_value
NUM_BADGES EQU NUM_JOHTO_BADGES + NUM_KANTO_BADGES
+POKEGEAR_OBTAINED_F EQU 7
+
; WhichRegisteredItem: ; d95b
REGISTERED_POCKET EQU %11000000
REGISTERED_NUMBER EQU %00111111
diff --git a/data/events/elevator_floors.asm b/data/events/elevator_floors.asm
new file mode 100644
index 00000000..abc793cf
--- /dev/null
+++ b/data/events/elevator_floors.asm
@@ -0,0 +1,35 @@
+ElevatorFloorNames:
+; entries correspond to FLOOR_* constants
+ dw .B4F
+ dw .B3F
+ dw .B2F
+ dw .B1F
+ dw ._1F
+ dw ._2F
+ dw ._3F
+ dw ._4F
+ dw ._5F
+ dw ._6F
+ dw ._7F
+ dw ._8F
+ dw ._9F
+ dw ._10F
+ dw ._11F
+ dw .ROOF
+
+.B4F: db "B4F@"
+.B3F: db "B3F@"
+.B2F: db "B2F@"
+.B1F: db "B1F@"
+._1F: db "1F@"
+._2F: db "2F@"
+._3F: db "3F@"
+._4F: db "4F@"
+._5F: db "5F@"
+._6F: db "6F@"
+._7F: db "7F@"
+._8F: db "8F@"
+._9F: db "9F@"
+._10F: db "10F@"
+._11F: db "11F@"
+.ROOF: db "ROOF@"
diff --git a/data/text/common_1.asm b/data/text/common_1.asm
index 40f4bb79..82f153d0 100755
--- a/data/text/common_1.asm
+++ b/data/text/common_1.asm
@@ -223,7 +223,7 @@ Text_BreedingIsNotPossible::
UnknownText_0x1bd0d8::
text "The compatibility"
line "is @"
- text_decimal wTempNumBuffer, 1, 3
+ text_decimal wBreedingCompatibility, 1, 3
text "."
cont "Should they breed?"
done
@@ -961,7 +961,7 @@ _RocketRadioText10::
text "Is he listening?"
done
-UnknownText_0x1bd2bc::
+_AskFloorElevatorText::
text "Which floor?"
done
diff --git a/data/text/common_2.asm b/data/text/common_2.asm
index 9f6c9413..5d712ccc 100644
--- a/data/text/common_2.asm
+++ b/data/text/common_2.asm
@@ -981,19 +981,19 @@ UnknownText_0x1c1a65::
text "Darn…"
done
-UnknownText_0x1c1a6c::
+_StartMenuContestEndText::
text "Would you like to"
line "end the Contest?"
done
-UnknownText_0x1c1a90::
+_ItemsTossOutHowManyText::
text "Toss out how many"
line "@"
text_ram wStringBuffer2
text "(S)?"
done
-UnknownText_0x1c1aad::
+_ItemsThrowAwayText::
text "Throw away @"
text_decimal wItemQuantityChangeBuffer, 1, 2
text_start
@@ -1002,25 +1002,25 @@ UnknownText_0x1c1aad::
text "(S)?"
done
-UnknownText_0x1c1aca::
+_ItemsDiscardedText::
text "Discarded"
line "@"
text_ram wStringBuffer1
text "(S)."
prompt
-UnknownText_0x1c1adf::
+_ItemsTooImportantText::
text "That's too impor-"
line "tant to toss out!"
prompt
-UnknownText_0x1c1b03::
+_ItemsOakWarningText::
text "OAK: <PLAYER>!"
line "This isn't the"
cont "time to use that!"
done
-UnknownText_0x1c1b2c::
+_PokemonSwapItemText::
text "Took @"
text_ram wMonOrItemNameBuffer
text "'s"
@@ -1034,7 +1034,7 @@ UnknownText_0x1c1b2c::
text "."
prompt
-UnknownText_0x1c1b57::
+_PokemonHoldItemText::
text "Made @"
text_ram wMonOrItemNameBuffer
text_start
@@ -1043,23 +1043,23 @@ UnknownText_0x1c1b57::
text "."
prompt
-UnknownText_0x1c1b6f::
+_PokemonRemoveMailText::
text "Please remove the"
line "MAIL first."
prompt
-UnknownText_0x1c1b8e::
+_PokemonNotHoldingText::
text_ram wMonOrItemNameBuffer
text " isn't"
line "holding anything."
prompt
-UnknownText_0x1c1baa::
+_ItemStorageFullText::
text "Item storage space"
line "full."
prompt
-UnknownText_0x1c1bc4::
+_PokemonTookItemText::
text "Took @"
text_ram wStringBuffer1
text_start
@@ -1068,7 +1068,7 @@ UnknownText_0x1c1bc4::
text "."
prompt
-UnknownText_0x1c1bdc::
+_PokemonAskSwapItemText::
text_ram wMonOrItemNameBuffer
text " is"
line "already holding"
@@ -1079,48 +1079,48 @@ UnknownText_0x1c1bdc::
line "Switch items?"
done
-UnknownText_0x1c1c09::
+_ItemCantHeldText::
text "This item can't be"
line "held."
prompt
-UnknownText_0x1c1c22::
+_MailLoseMessageText::
text "The MAIL will lose"
line "its message. OK?"
done
-UnknownText_0x1c1c47::
+_MailDetachedText::
text "MAIL detached from"
line "@"
text_ram wStringBuffer1
text "."
prompt
-UnknownText_0x1c1c62::
+_MailNoSpaceText::
text "There's no space"
line "for removing MAIL."
prompt
-UnknownText_0x1c1c86::
+_MailAskSendToPCText::
text "Send the removed"
line "MAIL to your PC?"
done
-UnknownText_0x1c1ca9::
+_MailboxFullText::
text "Your PC's MAILBOX"
line "is full."
prompt
-UnknownText_0x1c1cc4::
+_MailSentToPCText::
text "The MAIL was sent"
line "to your PC."
prompt
-UnknownText_0x1c1ce3::
+_PokemonNotEnoughHPText::
text "Not enough HP!"
prompt
-UnknownText_0x1c1cf3::
+_MayRegisterItemText::
text "An item in your"
line "PACK may be"
@@ -1254,7 +1254,7 @@ UnknownText_0x1c41e6::
UnknownText_0x1c4212::
text "Trade @"
- text_ram wTemporaryBuffer
+ text_ram wceef
text_start
line "for @"
text_ram wStringBuffer1
diff --git a/engine/billspctop.asm b/engine/billspctop.asm
index b0ec59a5..749718db 100644
--- a/engine/billspctop.asm
+++ b/engine/billspctop.asm
@@ -31,7 +31,7 @@ BillsPC_LogIn: ; e3f7 (3:63f7)
call PrintText
pop af
ld [wOptions], a
- call Functionda5
+ call LoadFontsBattleExtra
ret
Text_BillsPCWhat:
diff --git a/engine/events/elevator.asm b/engine/events/elevator.asm
new file mode 100644
index 00000000..e51b6be1
--- /dev/null
+++ b/engine/events/elevator.asm
@@ -0,0 +1,215 @@
+Elevator::
+ call .LoadPointer
+ call .FindCurrentFloor
+ jr c, .quit
+ ld [wElevatorOriginFloor], a
+ call Elevator_AskWhichFloor
+ jr c, .quit
+ ld hl, wElevatorOriginFloor
+ cp [hl]
+ jr z, .quit
+ call Elevator_GoToFloor
+ and a
+ ret
+
+.quit
+ scf
+ ret
+
+.LoadPointer:
+ ld a, b
+ ld [wElevatorPointerBank], a
+ ld a, e
+ ld [wElevatorPointer], a
+ ld a, d
+ ld [wElevatorPointer + 1], a
+ call .LoadFloors
+ ret
+
+.LoadFloors:
+ ld de, wCurElevator
+ ld bc, wElevatorDataEnd - wElevatorData
+ ld hl, wElevatorPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ inc hl
+ ld [de], a
+ inc de
+.loop
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ ld [de], a
+ inc de
+ add hl, bc
+ cp -1
+ jr nz, .loop
+ ret
+
+.FindCurrentFloor:
+ ld hl, wElevatorPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ ld c, a
+ inc hl
+ ld a, [wBackupMapGroup]
+ ld d, a
+ ld a, [wBackupMapNumber]
+ ld e, a
+ ld b, 0
+.loop2
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ cp -1
+ jr z, .fail
+ inc hl
+ inc hl
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ inc hl
+ cp d
+ jr nz, .next1
+ ld a, [wElevatorPointerBank]
+ call GetFarByte
+ inc hl
+ cp e
+ jr nz, .next2
+ jr .done
+
+.next1
+ inc hl
+.next2
+ inc b
+ jr .loop2
+
+.done
+ xor a
+ ld a, b
+ ret
+
+.fail
+ scf
+ ret
+
+Elevator_GoToFloor:
+ push af
+ ld hl, wElevatorPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ inc hl
+ pop af
+ ld bc, wElevatorDataEnd - wElevatorData
+ call AddNTimes
+ inc hl
+ ld de, wBackupWarpNumber
+ ld a, [wElevatorPointerBank]
+ ld bc, wElevatorDataEnd - wElevatorData - 1
+ call FarCopyBytes
+ ret
+
+Elevator_AskWhichFloor:
+ call LoadStandardMenuHeader
+ ld hl, AskFloorElevatorText
+ call PrintText
+ call Elevator_GetCurrentFloorText
+ ld hl, Elevator_MenuHeader
+ call CopyMenuHeader
+ call InitScrollingMenu
+ call UpdateSprites
+ xor a
+ ld [wMenuScrollPosition], a
+ call ScrollingMenu
+ call CloseWindow
+ ld a, [wMenuJoypad]
+ cp B_BUTTON
+ jr z, .cancel
+ xor a
+ ld a, [wScrollingMenuCursorPosition]
+ ret
+
+.cancel
+ scf
+ ret
+
+AskFloorElevatorText:
+ text_far _AskFloorElevatorText
+ text_end
+
+Elevator_GetCurrentFloorText:
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+ hlcoord 0, 0
+ ld b, 4
+ ld c, 8
+ call Textbox
+ hlcoord 1, 2
+ ld de, Elevator_CurrentFloorText
+ call PlaceString
+ hlcoord 4, 4
+ call Elevator_GetCurrentFloorString
+ pop af
+ ld [wOptions], a
+ ret
+
+Elevator_CurrentFloorText:
+ db "Now on:@"
+
+Elevator_GetCurrentFloorString:
+ push hl
+ ld a, [wElevatorOriginFloor]
+ ld e, a
+ ld d, 0
+ ld hl, wCurElevatorFloors
+ add hl, de
+ ld a, [hl]
+ pop de
+ call GetFloorString
+ ret
+
+Elevator_MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 12, 1, 18, 9
+ dw Elevator_MenuData
+ db 1 ; default option
+
+Elevator_MenuData:
+ db SCROLLINGMENU_DISPLAY_ARROWS ; flags
+ db 4, 0 ; rows, columns
+ db SCROLLINGMENU_ITEMS_NORMAL ; item format
+ dbw 0, wCurElevator
+ dba GetElevatorFloorStrings
+ dba NULL
+ dba NULL
+
+GetElevatorFloorStrings:
+ ld a, [wMenuSelection]
+GetFloorString:
+ push de
+ call FloorToString
+ ld d, h
+ ld e, l
+ pop hl
+ jp PlaceString
+
+FloorToString:
+ push de
+ ld e, a
+ ld d, 0
+ ld hl, ElevatorFloorNames
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop de
+ ret
+
+INCLUDE "data/events/elevator_floors.asm"
diff --git a/engine/events/misc_scripts.asm b/engine/events/misc_scripts.asm
index f9ba459f..b08d313e 100755
--- a/engine/events/misc_scripts.asm
+++ b/engine/events/misc_scripts.asm
@@ -38,14 +38,14 @@ FindItemInBallScript::
.TryReceiveItem:
xor a
ld [wScriptVar], a
- ld a, [wcf29]
+ ld a, [wItemBallItemID]
ld [wDeciramBuffer], a
call GetItemName
ld hl, wStringBuffer3
call CopyName2
- ld a, [wcf29]
- ld [wd002], a
- ld a, [wcf2a]
+ ld a, [wItemBallItemID]
+ ld [wCurItem], a
+ ld a, [wItemBallQuantity]
ld [wItemQuantityChangeBuffer], a
ld hl, wNumItems
call ReceiveItem
diff --git a/engine/events/misc_scripts_2.asm b/engine/events/misc_scripts_2.asm
index 4a9e9484..294dc6a0 100755
--- a/engine/events/misc_scripts_2.asm
+++ b/engine/events/misc_scripts_2.asm
@@ -11,7 +11,7 @@ RepelWoreOffScript::
HiddenItemScript::
opentext
- copybytetovar wcf2b
+ copybytetovar wHiddenItemID
itemtotext STRING_BUFFER_3, USE_SCRIPT_VAR
writetext .PlayerFoundItemText
giveitem ITEM_FROM_MEM
@@ -39,7 +39,7 @@ HiddenItemScript::
db "@"
SetMemEvent:
- ld hl, wcf29
+ ld hl, wHiddenItemEvent
ld a, [hli]
ld d, [hl]
ld e, a
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
index 0787d094..7cc64dff 100755
--- a/engine/events/overworld.asm
+++ b/engine/events/overworld.asm
@@ -477,7 +477,7 @@ TrySurfOW::
jr z, .quit
cp PLAYER_SURF
jr z, .quit
- ld a, [wcf29]
+ ld a, [wFacingTileID]
call GetTileCollision
cp $1
jr nz, .quit
@@ -835,6 +835,7 @@ DigReturnMovementData:
return_dig 32
step_end
+TeleportFunction:
call FieldMoveBufferReset
.asm_cc67
ld hl, .Jumptable
@@ -1261,6 +1262,7 @@ Text_AskHeadbutt: ; cee9
text_far Text_AskHeadbutt_
db "@"
+RockSmashFunction:
call TryRockSmashFromMenu
and $7f
ld [wFieldMoveSucceeded], a
diff --git a/engine/events/std_collision.asm b/engine/events/std_collision.asm
index bb44687c..0e06b03c 100755
--- a/engine/events/std_collision.asm
+++ b/engine/events/std_collision.asm
@@ -7,12 +7,12 @@ CheckFacingTileForStdScript::
jr nc, .notintable
ld a, jumpstd_command
- ld [wcf2a], a
+ ld [wJumpStdScriptBuffer], a
inc hl
ld a, [hli]
- ld [wcf2b], a
+ ld [wJumpStdScriptBuffer + 1], a
ld a, [hli]
- ld [wTempTrainer], a
+ ld [wJumpStdScriptBuffer + 2], a
ld a, BANK(Script_JumpStdFromRAM)
ld hl, Script_JumpStdFromRAM
call CallScript
@@ -26,4 +26,4 @@ CheckFacingTileForStdScript::
INCLUDE "data/events/collision_stdscripts.asm"
Script_JumpStdFromRAM:
- jump wcf2a \ No newline at end of file
+ jump wJumpStdScriptBuffer
diff --git a/engine/events/sweet_scent.asm b/engine/events/sweet_scent.asm
new file mode 100644
index 00000000..d382936d
--- /dev/null
+++ b/engine/events/sweet_scent.asm
@@ -0,0 +1,66 @@
+SweetScentFromMenu:
+ ld hl, .SweetScent
+ call QueueScript
+ ld a, $1
+ ld [wFieldMoveSucceeded], a
+ ret
+
+.SweetScent:
+ reloadmappart
+ special UpdateTimePals
+ callasm GetPartyNick
+ writetext UseSweetScentText
+ waitbutton
+ callasm SweetScentEncounter
+ iffalse SweetScentNothing
+ checkflag ENGINE_BUG_CONTEST_TIMER
+ iftrue .BugCatchingContest
+ randomwildmon
+ startbattle
+ reloadmapafterbattle
+ end
+
+.BugCatchingContest:
+ farjump BugCatchingContestBattleScript
+
+SweetScentNothing:
+ writetext SweetScentNothingText
+ waitbutton
+ closetext
+ end
+
+SweetScentEncounter:
+ farcall CanUseSweetScent
+ jr nc, .no_battle
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ jr nz, .not_in_bug_contest
+ farcall GetMapEncounterRate
+ ld a, b
+ and a
+ jr z, .no_battle
+ farcall ChooseWildEncounter
+ jr nz, .no_battle
+ jr .start_battle
+
+.not_in_bug_contest
+ farcall ChooseWildEncounter_BugContest
+
+.start_battle
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+.no_battle
+ xor a
+ ld [wScriptVar], a
+ ld [wBattleType], a
+ ret
+
+UseSweetScentText:
+ text_far _UseSweetScentText
+ text_end
+
+SweetScentNothingText:
+ text_far _SweetScentNothingText
+ text_end
diff --git a/engine/items.asm b/engine/items.asm
index deafa60c..428f652e 100755
--- a/engine/items.asm
+++ b/engine/items.asm
@@ -33,7 +33,7 @@ ReceiveBall:
ReceiveTMHM:
ld h, d
ld l, e
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
call GetTMHMNumber
jp PutItemInTMPocket
@@ -63,7 +63,7 @@ RemoveBall:
RemoveTMHM:
ld h, d
ld l, e
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
call GetTMHMNumber
jp RemoveTMorHM
@@ -104,7 +104,7 @@ CheckBall:
CheckTMHM:
ld h, d
ld l, e
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
call GetTMHMNumber
jp CheckTMorHM
@@ -152,7 +152,7 @@ PutItemInPocketOrPC: ; d2a9 (3:52a9)
ld d, h
ld e, l
inc hl
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
ld b, $0
.asm_d2b2
@@ -184,7 +184,7 @@ PutItemInPocketOrPC: ; d2a9 (3:52a9)
.asm_d2d3
ld h, d
ld l, e
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
ld a, [wItemQuantityChangeBuffer]
ld [wItemQuantityBuffer], a
@@ -210,7 +210,7 @@ PutItemInPocketOrPC: ; d2a9 (3:52a9)
.asm_d2fc
dec hl
- ld a, [wd002]
+ ld a, [wCurItem]
ld [hli], a
ld a, [wItemQuantityBuffer]
ld [hli], a
@@ -227,14 +227,14 @@ RemoveItemAndQuantity: ; d30c (3:530c)
ld e, l
ld a, [hli]
ld c, a
- ld a, [wd003]
+ ld a, [wCurItemQuantity]
cp c
jr nc, .asm_d325
ld c, a
ld b, $0
add hl, bc
add hl, bc
- ld a, [wd002]
+ ld a, [wCurItem]
cp [hl]
inc hl
jr z, .asm_d334
@@ -242,7 +242,7 @@ RemoveItemAndQuantity: ; d30c (3:530c)
ld l, e
inc hl
.asm_d325
- ld a, [wd002]
+ ld a, [wCurItem]
ld b, a
.asm_d329
ld a, [hli]
@@ -286,7 +286,7 @@ RemoveItemAndQuantity: ; d30c (3:530c)
ret
CheckItemWithQuantity: ; d356 (3:5356)
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
.asm_d35a
inc hl
@@ -310,7 +310,7 @@ PutItemInKeyItemPocket: ; d367 (3:5367)
ld c, a
ld b, $0
add hl, bc
- ld a, [wd002]
+ ld a, [wCurItem]
ld [hli], a
ld [hl], $ff
ld hl, wNumKeyItems
@@ -323,7 +323,7 @@ PutItemInKeyItemPocket: ; d367 (3:5367)
ret
RemoveItemWithoutQuantity: ; d381 (3:5381)
- ld a, [wd003]
+ ld a, [wCurItemQuantity]
ld e, a
ld d, $0
ld hl, wItemsEnd
@@ -353,7 +353,7 @@ RemoveItemWithoutQuantity: ; d381 (3:5381)
FindAndTossKeyItem: ; d3a3 (3:53a3)
ld hl, wItemsEnd
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
.asm_d3aa
inc hl
@@ -373,7 +373,7 @@ FindAndTossKeyItem: ; d3a3 (3:53a3)
ret
CheckItemWithoutQuantity: ; d3be (3:53be)
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
ld hl, wKeyItems
.asm_d3c5
@@ -520,7 +520,7 @@ GetItemAttr: ; d46d (3:546d)
add hl, bc
xor a
ld [wItemAttributeParamBuffer], a
- ld a, [wd002]
+ ld a, [wCurItem]
dec a
ld c, a
ld a, $7
diff --git a/engine/learn.asm b/engine/learn.asm
index f61b0c6c..b28f754b 100644
--- a/engine/learn.asm
+++ b/engine/learn.asm
@@ -46,7 +46,7 @@ LearnMove:
pop de
pop hl
.asm_6643
- ld a, [wd14d]
+ ld a, [wPutativeTMHMMove]
ld [hl], a
ld bc, $15
add hl, bc
@@ -110,7 +110,7 @@ LearnMove:
ld bc, -4
add hl, bc
push hl
- ld de, wd149
+ ld de, wListMoves_MoveIndicesBuffer
ld bc, $4
call CopyBytes
pop hl
@@ -127,14 +127,14 @@ LearnMove:
ld [wBuffer1], a
predef ListMoves
ld a, $4
- ld [wMenuDataEnd], a
+ ld [w2DMenuCursorInitY], a
ld a, $6
- ld [wced9], a
- ld a, [wcfe3]
+ ld [w2DMenuCursorInitX], a
+ ld a, [wNumMoves]
inc a
- ld [wceda], a
+ ld [w2DMenuNumRows], a
ld a, $1
- ld [wcedb], a
+ ld [w2DMenuNumCols], a
ld [wMenuCursorY], a
ld [wcee1], a
ld a, $3
@@ -142,9 +142,9 @@ LearnMove:
ld a, $20
ld [w2DMenuFlags1], a
xor a
- ld [wcedd], a
+ ld [w2DMenuFlags2], a
ld a, $20
- ld [wcede], a
+ ld [w2DMenuCursorOffsets], a
call StaticMenuJoypad
push af
call SafeLoadTempTilemapToTilemap
diff --git a/engine/learn_tm.asm b/engine/learn_tm.asm
index 530ecf41..a7a135d9 100755
--- a/engine/learn_tm.asm
+++ b/engine/learn_tm.asm
@@ -4,7 +4,7 @@ CanLearnTMHMMove: ; 11a25 (4:5a25)
call GetBaseData
ld hl, wd138
push hl
- ld a, [wd14d]
+ ld a, [wPutativeTMHMMove]
ld b, a
ld c, $0
ld hl, TMMovesList
diff --git a/engine/menus/start_menu.asm b/engine/menus/start_menu.asm
new file mode 100644
index 00000000..2e5cec79
--- /dev/null
+++ b/engine/menus/start_menu.asm
@@ -0,0 +1,541 @@
+; StartMenu.Items indexes
+ const_def
+ const STARTMENUITEM_POKEDEX ; 0
+ const STARTMENUITEM_POKEMON ; 1
+ const STARTMENUITEM_PACK ; 2
+ const STARTMENUITEM_STATUS ; 3
+ const STARTMENUITEM_SAVE ; 4
+ const STARTMENUITEM_OPTION ; 5
+ const STARTMENUITEM_EXIT ; 6
+ const STARTMENUITEM_POKEGEAR ; 7
+ const STARTMENUITEM_QUIT ; 8
+
+StartMenu::
+ call ClearWindowData
+
+ ld de, SFX_MENU
+ call PlaySFX
+
+ farcall ReanchorBGMap_NoOAMUpdate
+
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ ld hl, .MenuHeader
+ jr z, .GotMenuData
+ ld hl, .ContestMenuHeader
+
+.GotMenuData:
+ call LoadMenuHeader
+ call .SetUpMenuItems
+ ld a, [wBattleMenuCursorBuffer]
+ ld [wMenuCursorBuffer], a
+ call .DrawMenuAccount
+ call DrawVariableLengthMenuBox
+ call .DrawBugContestStatusBox
+ call SafeUpdateSprites
+ call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
+ farcall LoadFonts_NoOAMUpdate
+ call .DrawBugContestStatus
+ call UpdateTimePals
+ jr .Select
+
+.Reopen:
+ call UpdateSprites
+ call UpdateTimePals
+ call .SetUpMenuItems
+ ld a, [wBattleMenuCursorBuffer]
+ ld [wMenuCursorBuffer], a
+
+.Select:
+ call .GetInput
+ jr c, .Exit
+ call ._DrawMenuAccount
+ ld a, [wMenuCursorBuffer]
+ ld [wBattleMenuCursorBuffer], a
+ call PlayClickSFX
+ call PlaceHollowCursor
+ call .OpenMenu
+
+; Menu items have different return functions.
+; For example, saving exits the menu.
+ ld hl, .MenuReturns
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.MenuReturns:
+ dw .Reopen
+ dw .Exit
+ dw .ExitMenuCallFuncCloseText
+ dw .ExitMenuRunScriptCloseText
+ dw .ExitMenuRunScript
+ dw .ReturnEnd
+ dw .ReturnRedraw
+
+.Exit:
+ ldh a, [hOAMUpdate]
+ push af
+ ld a, 1
+ ldh [hOAMUpdate], a
+ call LoadFontsExtra
+ pop af
+ ldh [hOAMUpdate], a
+.ReturnEnd:
+ call ExitMenu
+.ReturnEnd2:
+ call CloseText
+ call UpdateTimePals
+ ret
+
+.GetInput:
+; Return carry on exit, and no-carry on selection.
+ xor a
+ ldh [hBGMapMode], a
+ call ._DrawMenuAccount
+ call SetUpMenu
+ ld a, $ff
+ ld [wMenuSelection], a
+.loop
+ call .PrintMenuAccount
+ call GetScrollingMenuJoypad
+ ld a, [wMenuJoypad]
+ cp B_BUTTON
+ jr z, .b
+ cp A_BUTTON
+ jr z, .a
+ jr .loop
+.a
+ call PlayClickSFX
+ and a
+ ret
+.b
+ scf
+ ret
+
+.ExitMenuRunScript:
+ call ExitMenu
+ ld a, HMENURETURN_SCRIPT
+ ldh [hMenuReturn], a
+ ret
+
+.ExitMenuRunScriptCloseText:
+ call ExitMenu
+ ld a, HMENURETURN_SCRIPT
+ ldh [hMenuReturn], a
+ jr .ReturnEnd2
+
+.ExitMenuCallFuncCloseText:
+ call ExitMenu
+ ld hl, wQueuedScriptAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wQueuedScriptBank]
+ rst FarCall
+ jr .ReturnEnd2
+
+.ReturnRedraw:
+ call .Clear
+ jp .Reopen
+
+.Clear:
+ call ClearBGPalettes
+ call Call_ExitMenu
+ call ReloadTilesetAndPalettes
+ call .DrawMenuAccount
+ call DrawVariableLengthMenuBox
+ call .DrawBugContestStatus
+ call UpdateSprites
+ call Functiond2a
+ call FinishExitMenu
+ ret
+
+.MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 10, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw .MenuData
+ db 1 ; default selection
+
+.ContestMenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 10, 2, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw .MenuData
+ db 1 ; default selection
+
+.MenuData:
+ db STATICMENU_CURSOR | STATICMENU_WRAP | STATICMENU_ENABLE_START ; flags
+ dn 0, 0 ; rows, columns
+ dw wMenuItemsList
+ dw .MenuString
+ dw .Items
+
+.Items:
+; entries correspond to STARTMENUITEM_* constants
+ dw StartMenu_Pokedex, .PokedexString, .PokedexDesc
+ dw StartMenu_Pokemon, .PartyString, .PartyDesc
+ dw StartMenu_Pack, .PackString, .PackDesc
+ dw StartMenu_Status, .StatusString, .StatusDesc
+ dw StartMenu_Save, .SaveString, .SaveDesc
+ dw StartMenu_Option, .OptionString, .OptionDesc
+ dw StartMenu_Exit, .ExitString, .ExitDesc
+ dw StartMenu_Pokegear, .PokegearString, .PokegearDesc
+ dw StartMenu_Quit, .QuitString, .QuitDesc
+
+.PokedexString: db "#DEX@"
+.PartyString: db "#MON@"
+.PackString: db "PACK@"
+.StatusString: db "<PLAYER>@"
+.SaveString: db "SAVE@"
+.OptionString: db "OPTION@"
+.ExitString: db "EXIT@"
+.PokegearString: db "<POKE>GEAR@"
+.QuitString: db "QUIT@"
+
+.PokedexDesc:
+ db "#MON"
+ next "database@"
+
+.PartyDesc:
+ db "Party <PKMN>"
+ next "status@"
+
+.PackDesc:
+ db "Contains"
+ next "items@"
+
+.PokegearDesc:
+ db "Trainer's"
+ next "key device@"
+
+.StatusDesc:
+ db "Your own"
+ next "status@"
+
+.SaveDesc:
+ db "Save your"
+ next "progress@"
+
+.OptionDesc:
+ db "Change"
+ next "settings@"
+
+.ExitDesc:
+ db "Close this"
+ next "menu@"
+
+.QuitDesc:
+ db "Quit and"
+ next "be judged.@"
+
+.OpenMenu:
+ ld a, [wMenuSelection]
+ call .GetMenuAccountTextPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.MenuString:
+ push de
+ ld a, [wMenuSelection]
+ call .GetMenuAccountTextPointer
+ inc hl
+ inc hl
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ call PlaceString
+ ret
+
+.MenuDesc:
+ push de
+ ld a, [wMenuSelection]
+ cp $ff
+ jr z, .none
+ call .GetMenuAccountTextPointer
+rept 4
+ inc hl
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ call PlaceString
+ ret
+.none
+ pop de
+ ret
+
+.GetMenuAccountTextPointer:
+ ld e, a
+ ld d, 0
+ ld hl, wMenuDataPointerTableAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+rept 6
+ add hl, de
+endr
+ ret
+
+.SetUpMenuItems:
+ xor a
+ ld [wWhichIndexSet], a
+ call .FillMenuList
+
+ ld hl, wStatusFlags
+ bit STATUSFLAGS_POKEDEX_F, [hl]
+ jr z, .no_pokedex
+ ld a, STARTMENUITEM_POKEDEX
+ call .AppendMenuList
+.no_pokedex
+
+ ld a, [wPartyCount]
+ and a
+ jr z, .no_pokemon
+ ld a, STARTMENUITEM_POKEMON
+ call .AppendMenuList
+.no_pokemon
+
+ ld a, [wLinkMode]
+ and a
+ jr nz, .no_pack
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ jr nz, .no_pack
+ ld a, STARTMENUITEM_PACK
+ call .AppendMenuList
+.no_pack
+
+ ld hl, wPokegearFlags
+ bit POKEGEAR_OBTAINED_F, [hl]
+ jr z, .no_pokegear
+ ld a, STARTMENUITEM_POKEGEAR
+ call .AppendMenuList
+.no_pokegear
+
+ ld a, STARTMENUITEM_STATUS
+ call .AppendMenuList
+
+ ld a, [wLinkMode]
+ and a
+ jr nz, .no_save
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ ld a, STARTMENUITEM_QUIT
+ jr nz, .write
+ ld a, STARTMENUITEM_SAVE
+.write
+ call .AppendMenuList
+.no_save
+
+ ld a, STARTMENUITEM_OPTION
+ call .AppendMenuList
+ ld a, STARTMENUITEM_EXIT
+ call .AppendMenuList
+ ld a, c
+ ld [wMenuItemsList], a
+ ret
+
+.FillMenuList:
+ xor a
+ ld hl, wMenuItemsList
+ ld [hli], a
+ ld a, -1
+ ld bc, wMenuItemsListEnd - (wMenuItemsList + 1)
+ call ByteFill
+ ld de, wMenuItemsList + 1
+ ld c, 0
+ ret
+
+.AppendMenuList:
+ ld [de], a
+ inc de
+ inc c
+ ret
+
+.DrawMenuAccount:
+ jp ._DrawMenuAccount
+
+.PrintMenuAccount:
+ call .IsMenuAccountOn
+ ret z
+ call ._DrawMenuAccount
+ decoord 0, 14
+ jp .MenuDesc
+
+._DrawMenuAccount:
+ call .IsMenuAccountOn
+ ret z
+ hlcoord 0, 13
+ lb bc, 5, 10
+ call ClearBox
+ hlcoord 0, 13
+ ld b, 3
+ ld c, 8
+ jp TextboxPalette
+
+.IsMenuAccountOn:
+ ld a, [wOptions2]
+ and 1 << MENU_ACCOUNT
+ ret
+
+.DrawBugContestStatusBox:
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ ret z
+ farcall StartMenu_DrawBugContestStatusBox
+ ret
+
+.DrawBugContestStatus:
+ ld hl, wStatusFlags2
+ bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
+ jr nz, .contest
+ ret
+.contest
+ farcall StartMenu_PrintBugContestStatus
+ ret
+
+StartMenu_Exit:
+; Exit the menu.
+
+ ld a, 1
+ ret
+
+StartMenu_Quit:
+; Retire from the bug catching contest.
+
+ ld hl, .StartMenuContestEndText
+ call StartMenuYesNo
+ jr c, .DontEndContest
+ ld a, BANK(BugCatchingContestReturnToGateScript)
+ ld hl, BugCatchingContestReturnToGateScript
+ call FarQueueScript
+ ld a, 4
+ ret
+
+.DontEndContest:
+ ld a, 0
+ ret
+
+.StartMenuContestEndText:
+ text_far _StartMenuContestEndText
+ text_end
+
+StartMenu_Save:
+; Save the game.
+
+ call BufferScreen
+ farcall SaveMenu
+ jr nc, .asm_12919
+ ld a, 0
+ ret
+.asm_12919
+ ld a, 1
+ ret
+
+StartMenu_Option:
+; Game options.
+
+ call FadeToMenu
+ farcall MainMenu_Options
+ ld a, 6
+ ret
+
+StartMenu_Status:
+; Player status.
+
+ call FadeToMenu
+ farcall TrainerCard
+ call CloseSubmenu
+ ld a, 0
+ ret
+
+StartMenu_Pokedex:
+ ld a, [wPartyCount]
+ and a
+ jr z, .asm_12949
+
+ call FadeToMenu
+ farcall Pokedex
+ call CloseSubmenu
+
+.asm_12949
+ ld a, 0
+ ret
+
+StartMenu_Pokegear:
+ call FadeToMenu
+ farcall PokeGear
+ call CloseSubmenu
+ ld a, 0
+ ret
+
+StartMenu_Pack:
+ call FadeToMenu
+ farcall Pack
+ ld a, [wPackUsedItem]
+ and a
+ jr nz, .used_item
+ call CloseSubmenu
+ ld a, 0
+ ret
+
+.used_item
+ call ExitAllMenus
+ ld a, 4
+ ret
+
+StartMenu_Pokemon:
+ ld a, [wPartyCount]
+ and a
+ jr z, .return
+
+ call FadeToMenu
+
+.choosemenu
+ xor a
+ ld [wPartyMenuActionText], a ; Choose a POKéMON.
+ call ClearBGPalettes
+
+.menu
+ farcall LoadPartyMenuGFX
+ farcall InitPartyMenuWithCancel
+ farcall InitPartyMenuGFX
+
+.menunoreload
+ farcall WritePartyMenuTilemap
+ farcall PrintPartyMenuText
+ call WaitBGMap
+ call SetPalettes ; load regular palettes?
+ call DelayFrame
+ farcall PartyMenuSelect
+ jr c, .return ; if cancelled or pressed B
+
+ call PokemonActionSubmenu
+ cp 3
+ jr z, .menu
+ cp 0
+ jr z, .choosemenu
+ cp 1
+ jr z, .menunoreload
+ cp 2
+ jr z, .quit
+
+.return
+ call CloseSubmenu
+ ld a, 0
+ ret
+
+.quit
+ ld a, b
+ push af
+ call ExitAllMenus
+ pop af
+ ret
diff --git a/engine/move_mon.asm b/engine/move_mon.asm
index 7410375f..7198910d 100755
--- a/engine/move_mon.asm
+++ b/engine/move_mon.asm
@@ -1196,7 +1196,7 @@ RemoveMonFromPartyOrBox: ; e03f (3:603f)
ld a, [wCurPartyMon]
cp [hl]
jr z, .asm_e137
- ld hl, s0_a600
+ ld hl, sPartyMail
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
push hl
@@ -1502,14 +1502,14 @@ GivePoke: ; Give a Pokemon from script
push bc
push de
push af
- ld a, [wd002]
+ ld a, [wCurItem]
and a
jr z, .asm_e2fa
ld a, [wCurPartyMon]
ld hl, wPartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
- ld a, [wd002]
+ ld a, [wCurItem]
ld [hl], a
jr .asm_e2fa
@@ -1530,10 +1530,10 @@ GivePoke: ; Give a Pokemon from script
push bc
push de
push af
- ld a, [wd002]
+ ld a, [wCurItem]
and a
jr z, .asm_e2fa
- ld a, [wd002]
+ ld a, [wCurItem]
ld [sBoxMon1Item], a
.asm_e2fa
ld a, [wCurPartySpecies]
diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm
index f907c463..ca0eb213 100644
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -892,7 +892,7 @@ NamingScreenGFX_ED: INCBIN "gfx/namingscreen/ed.1bpp" ; leftover from gen 1
NamingScreenGFX_MiddleLine: INCBIN "gfx/namingscreen/middleline.1bpp"
NamingScreenGFX_UnderLine: INCBIN "gfx/namingscreen/underline.1bpp"
-ComposeMailMessage:
+_ComposeMailMessage:
ld hl, wNamingScreenDestinationPointer
ld [hl], e
inc hl
diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm
index 887fb753..774d4cd8 100755
--- a/engine/overworld/map_objects.asm
+++ b/engine/overworld/map_objects.asm
@@ -928,7 +928,7 @@ Function5730:: ; 5730 (1:5730)
ld [wce87], a
ld [wce88], a
xor a
- ld [wcf39], a
+ ld [wPlayerTurningDirection], a
ld [wPlayerObjectStepFrame], a
call Function574f
farcall Function14a44
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 3fa38cc0..e05fbb9d 100755
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -1,18 +1,18 @@
DoPlayerMovement:: ; 10000 (4:4000)
call Function10017
ld a, movement_step_sleep
- ld [wcf2d], a
+ ld [wMovementAnimation], a
xor a
- ld [wcf2c], a
+ ld [wWalkingIntoEdgeWarp], a
call Function1002d
ld c, a
- ld a, [wcf2d]
+ ld a, [wMovementAnimation]
ld [wce87], a
ret
Function10017: ; 10017 (4:4017)
ldh a, [hJoyDown]
- ld [wcf29], a
+ ld [wCurInput], a
CheckFlagHL ENGINE_DOWNHILL
ret z
ld c, a
@@ -20,7 +20,7 @@ Function10017: ; 10017 (4:4017)
ret nz
ld a, c
or $80
- ld [wcf29], a
+ ld [wCurInput], a
ret
Function1002d: ; 1002d (4:402d)
@@ -74,7 +74,7 @@ Function1002d: ; 1002d (4:402d)
ret c
call Function10226
ret c
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
cp $ff
jr z, .asm_10098
call Function103ee
@@ -84,10 +84,10 @@ Function1002d: ; 1002d (4:402d)
ret
.asm_1009d
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
cp $ff
jr z, .asm_100b2
- ld a, [wTempTrainer]
+ ld a, [wWalkingIntoEdgeWarp]
and a
jr nz, .asm_100ad
call Function103ee
@@ -130,7 +130,7 @@ Function100b7: ; 100b7 (4:40b7)
ld hl, .water_table
add hl, bc
ld a, [hl]
- ld [wcf2e], a
+ ld [wWalkingDirection], a
jr .asm_1013e
.water_table
@@ -149,7 +149,7 @@ Function100b7: ; 100b7 (4:40b7)
ld a, [hl]
cp $ff
jr z, .asm_1013c
- ld [wcf2e], a
+ ld [wWalkingDirection], a
jr .asm_1013e
.land1_table
@@ -172,7 +172,7 @@ Function100b7: ; 100b7 (4:40b7)
ld a, [hl]
cp $ff
jr z, .asm_1013c
- ld [wcf2e], a
+ ld [wWalkingDirection], a
jr .asm_1013e
.land2_table
@@ -197,7 +197,7 @@ Function100b7: ; 100b7 (4:40b7)
jr nz, .asm_1013c
.asm_10135
ld a, $0
- ld [wcf2e], a
+ ld [wWalkingDirection], a
jr .asm_1013e
.asm_1013c
@@ -212,10 +212,10 @@ Function100b7: ; 100b7 (4:40b7)
ret
Function10147: ; 10147 (4:4147)
- ld a, [wcf39]
+ ld a, [wPlayerTurningDirection]
cp $0
jr nz, .asm_10169
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
cp $ff
jr z, .asm_10169
ld e, a
@@ -256,7 +256,7 @@ Function1016b: ; 1016b (4:416b)
ld hl, wBikeFlags
bit 2, [hl]
jr z, .asm_101a7
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
cp $0
jr z, .asm_101a7
ld a, $1
@@ -291,15 +291,15 @@ Function1016b: ; 1016b (4:416b)
Function101c0: ; 101c0 (4:41c0)
call Function103b4
- ld [wcf2b], a
+ ld [wWalkingIntoLand], a
jr c, .asm_101f1
call Function10341
- ld [wcf2a], a
+ ld [wWalkingIntoNPC], a
and a
jr z, .asm_101f1
cp $2
jr z, .asm_101f1
- ld a, [wcf2b]
+ ld a, [wWalkingIntoLand]
and a
jr nz, .asm_101e2
ld a, $1
@@ -332,7 +332,7 @@ Function101f3: ; 101f3 (4:41f3)
ld d, $0
ld hl, .data_1021e
add hl, de
- ld a, [wcf2f]
+ ld a, [wFacingDirection]
and [hl]
jr z, .asm_1021c
ld de, $16
@@ -358,7 +358,7 @@ Function101f3: ; 101f3 (4:41f3)
db FACE_UP | FACE_LEFT
Function10226: ; 10226 (4:4226)
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
ld e, a
ld d, $0
ld hl, .edge_warps
@@ -367,8 +367,8 @@ Function10226: ; 10226 (4:4226)
cp [hl]
jr nz, .asm_10259
ld a, $1
- ld [wTempTrainer], a
- ld a, [wcf2e]
+ ld [wWalkingIntoEdgeWarp], a
+ ld a, [wWalkingDirection]
cp $ff
jr z, .asm_10259
ld e, a
@@ -401,17 +401,17 @@ Function1025f: ; 1025f (4:425f)
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
ld e, a
cp $ff
jp z, Function102b3
add hl, de
ld a, [hl]
- ld [wcf2d], a
+ ld [wMovementAnimation], a
ld hl, $42af
add hl, de
ld a, [hl]
- ld [wcf39], a
+ ld [wPlayerTurningDirection], a
ld a, $4
ret
@@ -468,24 +468,24 @@ Function1025f: ; 1025f (4:425f)
Function102b3: ; 102b3 (4:42b3)
ld a, $0
- ld [wcf39], a
+ ld [wPlayerTurningDirection], a
ld a, $3e
- ld [wcf2d], a
+ ld [wMovementAnimation], a
xor a
ret
Function102bf: ; 102bf (4:42bf)
ld a, $0
- ld [wTempTrainerEnd], a
+ ld [wPlayerTurningDirection], a
ld a, $50
- ld [wcf2d], a
+ ld [wMovementAnimation], a
xor a
ret
Function102cb: ; 102cb (4:42cb)
call Function10404
ret nc
- ld a, [wTempTrainerEnd]
+ ld a, [wPlayerTurningDirection]
.asm_102d2
cp $0
ret z
@@ -494,10 +494,10 @@ Function102cb: ; 102cb (4:42cb)
ld d, $0
ld hl, .forced_dpad
add hl, de
- ld a, [wcf29]
+ ld a, [wCurInput]
and $f
or [hl]
- ld [wcf29], a
+ ld [wCurInput], a
ret
.forced_dpad
@@ -506,7 +506,7 @@ Function102cb: ; 102cb (4:42cb)
Function102ec: ; 102ec (4:42ec)
ld hl, .table
ld de, .table2 - .table1
- ld a, [wcf29]
+ ld a, [wCurInput]
bit 7, a
jr nz, .asm_10307
bit 6, a
@@ -528,13 +528,13 @@ Function102ec: ; 102ec (4:42ec)
add hl, de
.asm_1030b
ld a, [hli]
- ld [wcf2e], a
+ ld [wWalkingDirection], a
ld a, [hli]
- ld [wcf2f], a
+ ld [wFacingDirection], a
ld a, [hli]
- ld [wcf30], a
+ ld [wWalkingX], a
ld a, [hli]
- ld [wcf31], a
+ ld [wWalkingY], a
ld a, [hli]
ld h, [hl]
ld l, a
@@ -567,12 +567,12 @@ Function10341: ; 10341 (4:4341)
ldh [hMapObjectIndexBuffer], a
ld a, [wPlayerStandingMapX]
ld d, a
- ld a, [wcf30]
+ ld a, [wWalkingX]
add d
ld d, a
ld a, [wPlayerStandingMapY]
ld e, a
- ld a, [wcf31]
+ ld a, [wWalkingY]
add e
ld e, a
ld bc, wPlayerSprite
@@ -607,7 +607,7 @@ Function1036f: ; 1036f (4:436f)
ld hl, $5
add hl, bc
set 2, [hl]
- ld a, [wcf2e]
+ ld a, [wWalkingDirection]
ld d, a
ld hl, $20
add hl, bc
@@ -625,7 +625,7 @@ Function1036f: ; 1036f (4:436f)
Function1039e: ; 1039e (4:439e)
ld a, [wTilePermissions]
ld d, a
- ld a, [wcf2f]
+ ld a, [wFacingDirection]
and d
jr nz, .asm_103b2
ld a, [wWinTextPointer]
@@ -641,7 +641,7 @@ Function1039e: ; 1039e (4:439e)
Function103b4: ; 103b4 (4:43b4)
ld a, [wTilePermissions]
ld d, a
- ld a, [wcf2f]
+ ld a, [wFacingDirection]
and d
jr nz, .asm_103c8
ld a, [wWinTextPointer]
@@ -705,7 +705,7 @@ Function103f9: ; 103f9 (4:43f9)
ret
Function10404: ; 10404 (4:4404)
- ld a, [wTempTrainerEnd]
+ ld a, [wPlayerTurningDirection]
cp $0
jr z, .asm_10420
cp $f0
@@ -731,5 +731,5 @@ StopPlayerForEvent::
ret z
ld [hl], a
ld a, $0
- ld [wcf39], a
+ ld [wPlayerTurningDirection], a
ret
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index 0865dbf8..26dbe9fd 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -478,7 +478,7 @@ TrainerWalkToPlayer:
call InitMovementBuffer
ld a, movement_step_sleep
call AppendToMovementBuffer
- ld a, [wcf2a]
+ ld a, [wWalkingIntoNPC]
dec a
jr z, .asm_892b
ldh a, [hLastTalked]
diff --git a/engine/overworld/select_menu.asm b/engine/overworld/select_menu.asm
new file mode 100644
index 00000000..18532eda
--- /dev/null
+++ b/engine/overworld/select_menu.asm
@@ -0,0 +1,172 @@
+SelectMenu::
+ call CheckRegisteredItem
+ jr c, .NotRegistered
+ jp UseRegisteredItem
+
+.NotRegistered:
+ call OpenText
+ ld b, BANK(MayRegisterItemText)
+ ld hl, MayRegisterItemText
+ call MapTextbox
+ call WaitButton
+ jp CloseText
+
+MayRegisterItemText:
+ text_far _MayRegisterItemText
+ text_end
+
+CheckRegisteredItem:
+ ld a, [wWhichRegisteredItem]
+ and a
+ jr z, .NoRegisteredItem
+ and REGISTERED_POCKET
+ rlca
+ rlca
+ ld hl, .Pockets
+ rst JumpTable
+ ret
+
+.Pockets:
+; entries correspond to *_POCKET constants
+ dw .CheckItem
+ dw .CheckBall
+ dw .CheckKeyItem
+ dw .CheckTMHM
+
+.CheckItem:
+ ld hl, wNumItems
+ call .CheckRegisteredNo
+ jr c, .NoRegisteredItem
+ inc hl
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ call .IsSameItem
+ jr c, .NoRegisteredItem
+ and a
+ ret
+
+.CheckKeyItem:
+ ld a, [wRegisteredItem]
+ ld hl, wKeyItems
+ ld de, 1
+ call IsInArray
+ jr nc, .NoRegisteredItem
+ ld a, [wRegisteredItem]
+ ld [wCurItem], a
+ and a
+ ret
+
+.CheckBall:
+ ld hl, wNumBalls
+ call .CheckRegisteredNo
+ jr nc, .NoRegisteredItem
+ inc hl
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ call .IsSameItem
+ jr c, .NoRegisteredItem
+ ret
+
+.CheckTMHM:
+ jr .NoRegisteredItem
+
+.NoRegisteredItem:
+ xor a
+ ld [wWhichRegisteredItem], a
+ ld [wRegisteredItem], a
+ scf
+ ret
+
+.CheckRegisteredNo:
+ ld a, [wWhichRegisteredItem]
+ and REGISTERED_NUMBER
+ dec a
+ cp [hl]
+ jr nc, .NotEnoughItems
+ ld [wCurItemQuantity], a
+ and a
+ ret
+
+.NotEnoughItems:
+ scf
+ ret
+
+.IsSameItem:
+ ld a, [wRegisteredItem]
+ cp [hl]
+ jr nz, .NotSameItem
+ ld [wCurItem], a
+ and a
+ ret
+
+.NotSameItem:
+ scf
+ ret
+
+UseRegisteredItem:
+ farcall CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .SwitchTo
+ rst JumpTable
+ ret
+
+.SwitchTo:
+; entries correspond to ITEMMENU_* constants
+ dw .CantUse
+ dw .NoFunction
+ dw .NoFunction
+ dw .NoFunction
+ dw .Current
+ dw .Party
+ dw .Overworld
+
+.NoFunction:
+ call OpenText
+ call CantUseItem
+ call CloseText
+ and a
+ ret
+
+.Current:
+ call OpenText
+ call DoItemEffect
+ call CloseText
+ and a
+ ret
+
+.Party:
+ call RefreshScreen
+ call FadeToMenu
+ call DoItemEffect
+ call CloseSubmenu
+ call CloseText
+ and a
+ ret
+
+.Overworld:
+ call RefreshScreen
+ ld a, 1
+ ld [wUsingItemWithSelect], a
+ call DoItemEffect
+ xor a
+ ld [wUsingItemWithSelect], a
+ ld a, [wItemEffectSucceeded]
+ cp 1
+ jr nz, ._cantuse
+ scf
+ ld a, HMENURETURN_SCRIPT
+ ldh [hMenuReturn], a
+ ret
+
+.CantUse:
+ call RefreshScreen
+
+._cantuse
+ call CantUseItem
+ call CloseText
+ and a
+ ret
diff --git a/engine/pack.asm b/engine/pack.asm
index 620976a9..a8c1fedc 100755
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -1,4 +1,4 @@
-Function10430:
+Pack:
ld hl, wOptions
set NO_TEXT_SCROLL, [hl]
call Function10aba
@@ -61,9 +61,9 @@ Pack_ItemsPocketMenu:
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfcf], a
ld a, [wMenuCursorY]
ld [wcfca], a
@@ -90,9 +90,9 @@ Pack_KeyItemsPocketMenu:
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd0], a
ld a, [wMenuCursorY]
ld [wcfcb], a
@@ -214,9 +214,9 @@ Pack_BallsPocketMenu:
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd1], a
ld a, [wMenuCursorY]
ld [wcfcc], a
@@ -484,7 +484,7 @@ TossMenu:
pop af
jr c, .asm_107cc
ld hl, wTMsHMsEnd
- ld a, [wd003]
+ ld a, [wCurItemQuantity]
call TossItem
call Function10e38
ld hl, Text_ThrewAway
@@ -530,12 +530,12 @@ RegisterItem:
rrca
and $c0
ld b, a
- ld a, [wd003]
+ ld a, [wCurItemQuantity]
inc a
and $3f
or b
ld [wWhichRegisteredItem], a
- ld a, [wd002]
+ ld a, [wCurItem]
ld [wRegisteredItem], a
call Function10e38
ld de, SFX_FULL_HEAL
@@ -588,7 +588,7 @@ GiveItem:
ld de, wMonOrItemNameBuffer
ld bc, $b
call CopyBytes
- call Function12fa0
+ call TryGiveItemToPartymon
pop af
ld [wce64], a
pop af
@@ -678,9 +678,9 @@ BattlePack_ItemsPocketMenu:
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfcf], a
ld a, [wMenuCursorY]
ld [wcfca], a
@@ -706,9 +706,9 @@ BattlePack_KeyItemsPocketMenu:
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd0], a
ld a, [wMenuCursorY]
ld [wcfcb], a
@@ -757,9 +757,9 @@ BattlePack_BallsPocketMenu:
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd1], a
ld a, [wMenuCursorY]
ld [wcfcc], a
@@ -895,33 +895,34 @@ Function10aba: ; 10aba (4:4aba)
ld [wce63], a
ld a, [wcfc8]
and $3
- ld [wce65], a
+ ld [wCurPocket], a
inc a
add a
dec a
ld [wce64], a
xor a
- ld [wce66], a
+ ld [wPackUsedItem], a
xor a
- ld [wcfd3], a
+ ld [wSwitchItem], a
ret
-Function10ad5: ; 10ad5 (4:4ad5)
+DepositSellInitPackBuffers: ; 10ad5 (4:4ad5)
xor a
ldh [hBGMapMode], a
ld [wce63], a
ld [wce64], a
- ld [wce65], a
- ld [wce66], a
- ld [wcfd3], a
+ ld [wCurPocket], a
+ ld [wPackUsedItem], a
+ ld [wSwitchItem], a
call Function10d70
call Function10e5b
ret
-.asm_10aee
+DepositSellPack
+.loop
call Function10af7
call Function10b9f
- jr c, .asm_10aee
+ jr c, .loop
ret
Function10af7: ; 10af7 (4:4af7)
@@ -944,9 +945,9 @@ DepositOrSell_ItemPocket:
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfcf], a
ld a, [wMenuCursorY]
ld [wcfca], a
@@ -960,9 +961,9 @@ DepositOrSell_KeyItemsPocket:
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd0], a
ld a, [wMenuCursorY]
ld [wcfcb], a
@@ -973,8 +974,8 @@ DepositOrSell_TMHMPocket:
call Function10b92
call Function10cca
farcall Pack_TMHMPocketMenu_ ; b:457a
- ld a, [wd002]
- ld [wd002], a
+ ld a, [wCurItem]
+ ld [wCurItem], a
ret
DepositOrSell_BallsPocket:
@@ -985,9 +986,9 @@ DepositOrSell_BallsPocket:
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
- ld [wcfd4], a
+ ld [wMenuScrollPosition], a
call ScrollingMenu
- ld a, [wcfd4]
+ ld a, [wMenuScrollPosition]
ld [wcfd1], a
ld a, [wMenuCursorY]
ld [wcfcc], a
@@ -1054,7 +1055,7 @@ Function10b9f: ; 10b9f (4:4b9f)
ret
TutorialPack:
- call Function10ad5
+ call DepositSellInitPackBuffers
ld a, [wInputType]
or a
jr z, .asm_10bfa
@@ -1126,8 +1127,8 @@ TutorialTMHM:
call Function10b92
call Function10cca
farcall Pack_TMHMPocketMenu_
- ld a, [wd002]
- ld [wd002], a
+ ld a, [wCurItem]
+ ld [wCurItem], a
ret
TutorialBalls:
@@ -1224,7 +1225,7 @@ PackGFXPointers:
Function10cef: ; 10cef (4:4cef)
ld hl, wMenuJoypad
- ld a, [wcfd3]
+ ld a, [wSwitchItem]
and a
jr nz, .asm_10d4c
ld a, [hl]
@@ -1302,7 +1303,7 @@ Function10cef: ; 10cef (4:4cef)
call WaitPlaySFX
.asm_10d6a
xor a
- ld [wcfd3], a
+ ld [wSwitchItem], a
scf
ret
@@ -1401,7 +1402,7 @@ Function10dd6: ; 10dd6 (4:4dd6)
db $02, $05, $05, $05, $03 ; bottom border
Function10e38: ; 10e38 (4:4e38)
- ld a, [wd002]
+ ld a, [wCurItem]
ld [wd151], a
call GetItemName
call CopyName1
diff --git a/engine/pokemon/mon_menu.asm b/engine/pokemon/mon_menu.asm
new file mode 100644
index 00000000..d40940be
--- /dev/null
+++ b/engine/pokemon/mon_menu.asm
@@ -0,0 +1,1294 @@
+HasNoItems:
+ ld a, [wNumItems]
+ and a
+ ret nz
+ ld a, [wNumKeyItems]
+ and a
+ ret nz
+ ld a, [wNumBalls]
+ and a
+ ret nz
+ ld hl, wTMsHMs
+ ld b, NUM_TMS + NUM_HMS
+.loop
+ ld a, [hli]
+ and a
+ jr nz, .done
+ dec b
+ jr nz, .loop
+ scf
+ ret
+.done
+ and a
+ ret
+
+TossItemFromPC:
+ push de
+ call PartyMonItemName
+ farcall _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr nz, .key_item
+ ld hl, .ItemsTossOutHowManyText
+ call MenuTextbox
+ farcall SelectQuantityToToss
+ push af
+ call CloseWindow
+ call ExitMenu
+ pop af
+ jr c, .quit
+ ld hl, .ItemsThrowAwayText
+ call MenuTextbox
+ call YesNoBox
+ push af
+ call ExitMenu
+ pop af
+ jr c, .quit
+ pop hl
+ ld a, [wCurItemQuantity]
+ call TossItem
+ call PartyMonItemName
+ ld hl, .ItemsDiscardedText
+ call MenuTextbox
+ call ExitMenu
+ and a
+ ret
+
+.key_item
+ call .CantToss
+.quit
+ pop hl
+ scf
+ ret
+
+.ItemsTossOutHowManyText:
+ text_far _ItemsTossOutHowManyText
+ text_end
+
+.ItemsThrowAwayText:
+ text_far _ItemsThrowAwayText
+ text_end
+
+.ItemsDiscardedText:
+ text_far _ItemsDiscardedText
+ text_end
+
+.CantToss:
+ ld hl, .ItemsTooImportantText
+ call MenuTextboxBackup
+ ret
+
+.ItemsTooImportantText:
+ text_far _ItemsTooImportantText
+ text_end
+
+CantUseItem:
+ ld hl, ItemsOakWarningText
+ call MenuTextboxWaitButton
+ ret
+
+ItemsOakWarningText:
+ text_far _ItemsOakWarningText
+ text_end
+
+PartyMonItemName:
+ ld a, [wCurItem]
+ ld [wNamedObjectIndexBuffer], a
+ call GetItemName
+ call CopyName1
+ ret
+
+CancelPokemonAction:
+ farcall InitPartyMenuWithCancel
+ farcall UnfreezeMonIcons
+ ld a, 1
+ ret
+
+PokemonActionSubmenu:
+ hlcoord 1, 15
+ lb bc, 2, 18
+ call ClearBox
+ farcall MonSubmenu
+ call GetCurNick
+ ld a, [wMenuSelection]
+ ld hl, .Actions
+ ld de, 3
+ call IsInArray
+ jr nc, .nothing
+
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.nothing
+ ld a, 0
+ ret
+
+.Actions:
+ dbw MONMENUITEM_CUT, MonMenu_Cut
+ dbw MONMENUITEM_FLY, MonMenu_Fly
+ dbw MONMENUITEM_SURF, MonMenu_Surf
+ dbw MONMENUITEM_STRENGTH, MonMenu_Strength
+ dbw MONMENUITEM_FLASH, MonMenu_Flash
+ dbw MONMENUITEM_WHIRLPOOL, MonMenu_Whirlpool
+ dbw MONMENUITEM_DIG, MonMenu_Dig
+ dbw MONMENUITEM_TELEPORT, MonMenu_Teleport
+ dbw MONMENUITEM_SOFTBOILED, MonMenu_Softboiled_MilkDrink
+ dbw MONMENUITEM_MILKDRINK, MonMenu_Softboiled_MilkDrink
+ dbw MONMENUITEM_HEADBUTT, MonMenu_Headbutt
+ dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall
+ dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash
+ dbw MONMENUITEM_SWEETSCENT, MonMenu_SweetScent
+ dbw MONMENUITEM_STATS, OpenPartyStats
+ dbw MONMENUITEM_SWITCH, SwitchPartyMons
+ dbw MONMENUITEM_ITEM, GiveTakePartyMonItem
+ dbw MONMENUITEM_CANCEL, CancelPokemonAction
+ dbw MONMENUITEM_MOVE, ManagePokemonMoves
+ dbw MONMENUITEM_MAIL, MonMailAction
+
+SwitchPartyMons:
+; Don't try if there's nothing to switch!
+ ld a, [wPartyCount]
+ cp 2
+ jr c, .DontSwitch
+
+ ld a, [wCurPartyMon]
+ inc a
+ ld [wSwitchMon], a
+
+ farcall HoldSwitchmonIcon
+ farcall InitPartyMenuNoCancel
+
+ ld a, PARTYMENUACTION_MOVE
+ ld [wPartyMenuActionText], a
+ farcall WritePartyMenuTilemap
+ farcall PrintPartyMenuText
+
+ hlcoord 0, 1
+ ld bc, SCREEN_WIDTH * 2
+ ld a, [wSwitchMon]
+ dec a
+ call AddNTimes
+ ld [hl], "▷"
+ call WaitBGMap
+ call SetPalettes
+ call DelayFrame
+
+ farcall PartyMenuSelect
+ bit 1, b
+ jr c, .DontSwitch
+
+ farcall _SwitchPartyMons
+
+ xor a
+ ld [wPartyMenuActionText], a
+
+ farcall LoadPartyMenuGFX
+ farcall InitPartyMenuWithCancel
+ farcall InitPartyMenuGFX
+
+ ld a, 1
+ ret
+
+.DontSwitch:
+ xor a
+ ld [wPartyMenuActionText], a
+ call CancelPokemonAction
+ ret
+
+GiveTakePartyMonItem:
+; Eggs can't hold items!
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .cancel
+
+ ld hl, GiveTakeItemMenuData
+ call LoadMenuHeader
+ call VerticalMenu
+ call ExitMenu
+ jr c, .cancel
+
+ call GetCurNick
+ ld hl, wStringBuffer1
+ ld de, wMonOrItemNameBuffer
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ ld a, [wMenuCursorY]
+ cp 1
+ jr nz, .take
+
+ call LoadStandardMenuHeader
+ call ClearPalettes
+ call .GiveItem
+ call ClearPalettes
+ call LoadFontsBattleExtra
+ call ExitMenu
+ ld a, 0
+ ret
+
+.take
+ call TakePartyItem
+ ld a, 3
+ ret
+
+.cancel
+ ld a, 3
+ ret
+
+.GiveItem:
+ farcall DepositSellInitPackBuffers
+
+.loop
+ farcall DepositSellPack
+
+ ld a, [wPackUsedItem]
+ and a
+ jr z, .quit
+
+ ld a, [wCurPocket]
+ cp KEY_ITEM_POCKET
+ jr z, .next
+
+ call CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr nz, .next
+
+ call TryGiveItemToPartymon
+ jr .quit
+
+.next
+ ld hl, ItemCantHeldText
+ call MenuTextboxBackup
+ jr .loop
+
+.quit
+ ret
+
+TryGiveItemToPartymon:
+ call SpeechTextbox
+ call PartyMonItemName
+ call GetPartyItemLocation
+ ld a, [hl]
+ and a
+ jr z, .give_item_to_mon
+
+ push hl
+ ld d, a
+ farcall ItemIsMail
+ pop hl
+ jr c, .please_remove_mail
+ ld a, [hl]
+ jr .already_holding_item
+
+.give_item_to_mon
+ call GiveItemToPokemon
+ ld hl, PokemonHoldItemText
+ call MenuTextboxBackup
+ call GivePartyItem
+ ret
+
+.please_remove_mail
+ ld hl, PokemonRemoveMailText
+ call MenuTextboxBackup
+ ret
+
+.already_holding_item
+ ld [wNamedObjectIndexBuffer], a
+ call GetItemName
+ ld hl, PokemonAskSwapItemText
+ call StartMenuYesNo
+ jr c, .abort
+
+ call GiveItemToPokemon
+ ld a, [wNamedObjectIndexBuffer]
+ push af
+ ld a, [wCurItem]
+ ld [wNamedObjectIndexBuffer], a
+ pop af
+ ld [wCurItem], a
+ call ReceiveItemFromPokemon
+ jr nc, .bag_full
+
+ ld hl, PokemonSwapItemText
+ call MenuTextboxBackup
+ ld a, [wNamedObjectIndexBuffer]
+ ld [wCurItem], a
+ call GivePartyItem
+ ret
+
+.bag_full
+ ld a, [wNamedObjectIndexBuffer]
+ ld [wCurItem], a
+ call ReceiveItemFromPokemon
+ ld hl, ItemStorageFullText
+ call MenuTextboxBackup
+
+.abort
+ ret
+
+GivePartyItem:
+ call GetPartyItemLocation
+ ld a, [wCurItem]
+ ld [hl], a
+ ld d, a
+ farcall ItemIsMail
+ jr nc, .done
+ call ComposeMailMessage
+
+.done
+ ret
+
+TakePartyItem:
+ call SpeechTextbox
+ call GetPartyItemLocation
+ ld a, [hl]
+ and a
+ jr z, .asm_12c8c
+
+ ld [wCurItem], a
+ call ReceiveItemFromPokemon
+ jr nc, .asm_12c94
+
+ farcall ItemIsMail
+ call GetPartyItemLocation
+ ld a, [hl]
+ ld [wNamedObjectIndexBuffer], a
+ ld [hl], NO_ITEM
+ call GetItemName
+ ld hl, PokemonTookItemText
+ call MenuTextboxBackup
+ jr .asm_12c9a
+
+.asm_12c8c
+ ld hl, PokemonNotHoldingText
+ call MenuTextboxBackup
+ jr .asm_12c9a
+
+.asm_12c94
+ ld hl, ItemStorageFullText
+ call MenuTextboxBackup
+
+.asm_12c9a
+ ret
+
+GiveTakeItemMenuData:
+ db MENU_SPRITE_ANIMS | MENU_BACKUP_TILES ; flags
+ menu_coords 12, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw .Items
+ db 1 ; default option
+
+.Items:
+ db STATICMENU_CURSOR ; flags
+ db 2 ; # items
+ db "GIVE@"
+ db "TAKE@"
+
+PokemonSwapItemText:
+ text_far _PokemonSwapItemText
+ text_end
+
+PokemonHoldItemText:
+ text_far _PokemonHoldItemText
+ text_end
+
+PokemonRemoveMailText:
+ text_far _PokemonRemoveMailText
+ text_end
+
+PokemonNotHoldingText:
+ text_far _PokemonNotHoldingText
+ text_end
+
+ItemStorageFullText:
+ text_far _ItemStorageFullText
+ text_end
+
+PokemonTookItemText:
+ text_far _PokemonTookItemText
+ text_end
+
+PokemonAskSwapItemText:
+ text_far _PokemonAskSwapItemText
+ text_end
+
+ItemCantHeldText:
+ text_far _ItemCantHeldText
+ text_end
+
+GetPartyItemLocation:
+ push af
+ ld a, MON_ITEM
+ call GetPartyParamLocation
+ pop af
+ ret
+
+ReceiveItemFromPokemon:
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, wNumItems
+ jp ReceiveItem
+
+GiveItemToPokemon:
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, wNumItems
+ jp TossItem
+
+StartMenuYesNo:
+ call MenuTextbox
+ call YesNoBox
+ jp ExitMenu
+
+ComposeMailMessage:
+ ld de, wTempMailMessage
+ farcall _ComposeMailMessage
+ ld hl, wPlayerName
+ ld de, wTempMailAuthor
+ ld bc, NAME_LENGTH - 1
+ call CopyBytes
+ ld hl, wPlayerID
+ ld bc, 2
+ call CopyBytes
+ ld a, [wCurPartySpecies]
+ ld [de], a
+ inc de
+ ld a, [wCurItem]
+ ld [de], a
+ ld a, [wCurPartyMon]
+ ld hl, sPartyMail
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld hl, wTempMail
+ ld bc, MAIL_STRUCT_LENGTH
+ ld a, BANK(sPartyMail)
+ call OpenSRAM
+ call CopyBytes
+ call CloseSRAM
+ ret
+
+MonMailAction:
+; If in the time capsule or trade center,
+; selecting the mail only allows you to
+; read the mail.
+ ld a, [wLinkMode]
+ cp LINK_TIMECAPSULE
+ jr z, .read
+ cp LINK_TRADECENTER
+ jr z, .read
+
+; Show the READ/TAKE/QUIT menu.
+ ld hl, .MenuHeader
+ call LoadMenuHeader
+ call VerticalMenu
+ call ExitMenu
+
+; Interpret the menu.
+ jp c, .done
+ ld a, [wMenuCursorY]
+ cp $1
+ jr z, .read
+ cp $2
+ jr z, .take
+ jp .done
+
+.read
+ farcall ReadPartyMonMail
+ ld a, $0
+ ret
+
+.take
+ ld hl, .MailAskSendToPCText
+ call StartMenuYesNo
+ jr c, .RemoveMailToBag
+ ld a, [wCurPartyMon]
+ ld b, a
+ farcall SendMailToPC
+ jr c, .MailboxFull
+ ld hl, .MailSentToPCText
+ call MenuTextboxBackup
+ jr .done
+
+.MailboxFull:
+ ld hl, .MailboxFullText
+ call MenuTextboxBackup
+ jr .done
+
+.RemoveMailToBag:
+ ld hl, .MailLoseMessageText
+ call StartMenuYesNo
+ jr c, .done
+ call GetPartyItemLocation
+ ld a, [hl]
+ ld [wCurItem], a
+ call ReceiveItemFromPokemon
+ jr nc, .BagIsFull
+ call GetPartyItemLocation
+ ld [hl], $0
+ call GetCurNick
+ ld hl, .MailDetachedText
+ call MenuTextboxBackup
+ jr .done
+
+.BagIsFull:
+ ld hl, .MailNoSpaceText
+ call MenuTextboxBackup
+ jr .done
+
+.done
+ ld a, $3
+ ret
+
+.MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 9, 10, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw .MenuData
+ db 1 ; default option
+
+.MenuData:
+ db STATICMENU_CURSOR ; flags
+ db 3 ; items
+ db "READ@"
+ db "TAKE@"
+ db "QUIT@"
+
+.MailLoseMessageText:
+ text_far _MailLoseMessageText
+ text_end
+
+.MailDetachedText:
+ text_far _MailDetachedText
+ text_end
+
+.MailNoSpaceText:
+ text_far _MailNoSpaceText
+ text_end
+
+.MailAskSendToPCText:
+ text_far _MailAskSendToPCText
+ text_end
+
+.MailboxFullText:
+ text_far _MailboxFullText
+ text_end
+
+.MailSentToPCText:
+ text_far _MailSentToPCText
+ text_end
+
+OpenPartyStats:
+ call LoadStandardMenuHeader
+ call ClearSprites
+; PartyMon
+ xor a
+ ld [wMonType], a
+ call LowVolume
+ predef StatsScreenInit
+ call MaxVolume
+ call Call_ExitMenu
+ ld a, 0
+ ret
+
+MonMenu_Cut:
+ farcall CutFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Fly:
+ farcall FlyFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $2
+ jr z, .Fail
+ cp $0
+ jr z, .Error
+ ;farcall StubbedTrainerRankings_Fly
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+.Error:
+ ld a, $0
+ ret
+
+.Unreferenced:
+ ld a, $1
+ ret
+
+MonMenu_Flash:
+ farcall FlashFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Strength:
+ farcall StrengthFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Whirlpool:
+ farcall WhirlpoolFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Waterfall:
+ farcall WaterfallFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Teleport:
+ farcall TeleportFunction
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jr z, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Surf:
+ farcall SurfFunction
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jr z, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Dig:
+ farcall DigFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_Softboiled_MilkDrink:
+ call .CheckMonHasEnoughHP
+ jr nc, .NotEnoughHP
+ farcall Softboiled_MilkDrinkFunction
+ jr .finish
+
+.NotEnoughHP:
+ ld hl, .PokemonNotEnoughHPText
+ call PrintText
+
+.finish
+ xor a
+ ld [wPartyMenuActionText], a
+ ld a, $3
+ ret
+
+.PokemonNotEnoughHPText:
+ text_far _PokemonNotEnoughHPText
+ text_end
+
+.CheckMonHasEnoughHP:
+; Need to have at least (MaxHP / 5) HP left.
+ ld a, MON_MAXHP
+ call GetPartyParamLocation
+ ld a, [hli]
+ ldh [hDividend + 0], a
+ ld a, [hl]
+ ldh [hDividend + 1], a
+ ld a, 5
+ ldh [hDivisor], a
+ ld b, 2
+ call Divide
+ ld a, MON_HP + 1
+ call GetPartyParamLocation
+ ldh a, [hQuotient + 2]
+ sub [hl]
+ dec hl
+ ldh a, [hQuotient + 1]
+ sbc [hl]
+ ret
+
+MonMenu_Headbutt:
+ farcall HeadbuttFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_RockSmash:
+ farcall RockSmashFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $1
+ jr nz, .Fail
+ ld b, $4
+ ld a, $2
+ ret
+
+.Fail:
+ ld a, $3
+ ret
+
+MonMenu_SweetScent:
+ farcall SweetScentFromMenu
+ ld b, $4
+ ld a, $2
+ ret
+
+ChooseMoveToDelete:
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+ call LoadFontsBattleExtra
+ call .ChooseMoveToDelete
+ pop bc
+ ld a, b
+ ld [wOptions], a
+ push af
+ call ClearBGPalettes
+ pop af
+ ret
+
+.ChooseMoveToDelete
+ call SetUpMoveScreenBG
+ ld de, DeleteMoveScreenAttrs
+ call SetMenuAttributes
+ call SetUpMoveList
+ ld hl, w2DMenuFlags1
+ set 6, [hl]
+ jr .enter_loop
+
+.loop
+ call ScrollingMenuJoypad
+ bit B_BUTTON_F, a
+ jp nz, .b_button
+ bit A_BUTTON_F, a
+ jp nz, .a_button
+
+.enter_loop
+ call PrepareToPlaceMoveData
+ call PlaceMoveData
+ jp .loop
+
+.a_button
+ and a
+ jr .finish
+
+.b_button
+ scf
+
+.finish
+ push af
+ xor a
+ ld [wSwitchMon], a
+ ld hl, w2DMenuFlags1
+ res 6, [hl]
+ call ClearSprites
+ call ClearTilemap
+ pop af
+ ret
+
+DeleteMoveScreenAttrs:
+ db 3, 1
+ db 3, 1
+ db $40, $00
+ dn 2, 0
+ db D_UP | D_DOWN | A_BUTTON | B_BUTTON
+
+ManagePokemonMoves:
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .egg
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+ call MoveScreenLoop
+ pop af
+ ld [wOptions], a
+ call ClearBGPalettes
+
+.egg
+ ld a, $0
+ ret
+
+MoveScreenLoop:
+ ld a, [wCurPartyMon]
+ inc a
+ ld [wPartyMenuCursor], a
+ call SetUpMoveScreenBG
+ call PlaceMoveScreenArrows
+ ld de, MoveScreenAttributes
+ call SetMenuAttributes
+.loop
+ call SetUpMoveList
+ ld hl, w2DMenuFlags1
+ set 6, [hl]
+ jr .skip_joy
+
+.joy_loop
+ call ScrollingMenuJoypad
+ bit 1, a
+ jp nz, .b_button
+ bit 0, a
+ jp nz, .a_button
+ bit 4, a
+ jp nz, .d_right
+ bit 5, a
+ jp nz, .d_left
+
+.skip_joy
+ call PrepareToPlaceMoveData
+ ld a, [wMoveSwapBuffer]
+ and a
+ jr nz, .moving_move
+ call PlaceMoveData
+ jp .joy_loop
+
+.moving_move
+ ld a, " "
+ hlcoord 1, 11
+ ld bc, 5
+ call ByteFill
+ hlcoord 1, 12
+ lb bc, 5, SCREEN_WIDTH - 2
+ call ClearBox
+ hlcoord 1, 12
+ ld de, String_MoveWhere
+ call PlaceString
+ jp .joy_loop
+.b_button
+ call PlayClickSFX
+ call WaitSFX
+ ld a, [wMoveSwapBuffer]
+ and a
+ jp z, .exit
+
+ ld a, [wMoveSwapBuffer]
+ ld [wMenuCursorY], a
+ xor a
+ ld [wMoveSwapBuffer], a
+ hlcoord 1, 2
+ lb bc, 8, SCREEN_WIDTH - 2
+ call ClearBox
+ jp .loop
+
+.d_right
+ ld a, [wMoveSwapBuffer]
+ and a
+ jp nz, .joy_loop
+
+ ld a, [wCurPartyMon]
+ ld b, a
+ push bc
+ call .cycle_right
+ pop bc
+ ld a, [wCurPartyMon]
+ cp b
+ jp z, .joy_loop
+ jp MoveScreenLoop
+
+.d_left
+ ld a, [wMoveSwapBuffer]
+ and a
+ jp nz, .joy_loop
+ ld a, [wCurPartyMon]
+ ld b, a
+ push bc
+ call .cycle_left
+ pop bc
+ ld a, [wCurPartyMon]
+ cp b
+ jp z, .joy_loop
+ jp MoveScreenLoop
+
+.cycle_right
+ ld a, [wCurPartyMon]
+ inc a
+ ld [wCurPartyMon], a
+ ld c, a
+ ld b, 0
+ ld hl, wPartySpecies
+ add hl, bc
+ ld a, [hl]
+ cp -1
+ jr z, .cycle_left
+ cp EGG
+ ret nz
+ jr .cycle_right
+
+.cycle_left
+ ld a, [wCurPartyMon]
+ and a
+ ret z
+.cycle_left_loop
+ ld a, [wCurPartyMon]
+ dec a
+ ld [wCurPartyMon], a
+ ld c, a
+ ld b, 0
+ ld hl, wPartySpecies
+ add hl, bc
+ ld a, [hl]
+ cp EGG
+ ret nz
+ ld a, [wCurPartyMon]
+ and a
+ jr z, .cycle_right
+ jr .cycle_left_loop
+
+.a_button
+ call PlayClickSFX
+ call WaitSFX
+ ld a, [wMoveSwapBuffer]
+ and a
+ jr nz, .place_move
+ ld a, [wMenuCursorY]
+ ld [wMoveSwapBuffer], a
+ call PlaceHollowCursor
+ jp .moving_move
+
+.place_move
+ ld hl, wPartyMon1Moves
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ push hl
+ call .copy_move
+ pop hl
+ ld bc, $15
+ add hl, bc
+ call .copy_move
+ ld a, [wBattleMode]
+ jr z, .swap_moves
+ ld hl, wBattleMonMoves
+ ld bc, $20
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ push hl
+ call .copy_move
+ pop hl
+ ld bc, 6
+ add hl, bc
+ call .copy_move
+
+.swap_moves
+ ld de, SFX_SWITCH_POKEMON
+ call PlaySFX
+ call WaitSFX
+ ld de, SFX_SWITCH_POKEMON
+ call PlaySFX
+ call WaitSFX
+ hlcoord 1, 2
+ lb bc, 8, 18
+ call ClearBox
+ hlcoord 10, 10
+ lb bc, 1, 9
+ call ClearBox
+ jp .loop
+
+.copy_move
+ push hl
+ ld a, [wMenuCursorY]
+ dec a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl
+ ld a, [wMoveSwapBuffer]
+ dec a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [de]
+ ld b, [hl]
+ ld [hl], a
+ ld a, b
+ ld [de], a
+ ret
+
+.exit
+ xor a
+ ld [wMoveSwapBuffer], a
+ ld hl, w2DMenuFlags1
+ res 6, [hl]
+ call ClearSprites
+ jp ClearTilemap
+
+MoveScreenAttributes:
+ db 3, 1
+ db 3, 1
+ db $40, $00
+ dn 2, 0
+ db D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON
+
+String_MoveWhere:
+ db "Where?@"
+
+SetUpMoveScreenBG:
+ call ClearBGPalettes
+ call ClearTilemap
+ call ClearSprites
+ xor a
+ ldh [hBGMapMode], a
+ farcall LoadStatsScreenPageTilesGFX
+ farcall ClearSpriteAnims2
+ ld a, [wCurPartyMon]
+ ld e, a
+ ld d, $0
+ ld hl, wPartySpecies
+ add hl, de
+ ld a, [hl]
+ ld [wTempIconSpecies], a
+ ld e, MONICON_MOVES
+ farcall LoadMenuMonIcon
+ hlcoord 0, 1
+ ld b, 9
+ ld c, 18
+ call Textbox
+ hlcoord 0, 11
+ ld b, 5
+ ld c, 18
+ call Textbox
+ hlcoord 2, 0
+ lb bc, 2, 3
+ call ClearBox
+ xor a
+ ld [wMonType], a
+ ld hl, wPartyMonNicknames
+ ld a, [wCurPartyMon]
+ call GetNick
+ hlcoord 5, 1
+ call PlaceString
+ push bc
+ farcall CopyMonToTempMon
+ pop hl
+ call PrintLevel
+ ld hl, wPlayerHPPal
+ call SetHPPal
+ ld b, SCGB_MOVE_LIST
+ call GetSGBLayout
+ hlcoord 16, 0
+ lb bc, 1, 3
+ jp ClearBox
+
+SetUpMoveList:
+ xor a
+ ldh [hBGMapMode], a
+ ld [wMoveSwapBuffer], a
+ ld [wMonType], a
+ predef CopyMonToTempMon
+ ld hl, wTempMonMoves
+ ld de, wListMoves_MoveIndicesBuffer
+ ld bc, NUM_MOVES
+ call CopyBytes
+ ld a, SCREEN_WIDTH * 2
+ ld [wBuffer1], a
+ hlcoord 2, 3
+ predef ListMoves
+ hlcoord 10, 4
+ predef ListMovePP
+ call WaitBGMap
+ call SetPalettes
+ ld a, [wNumMoves]
+ inc a
+ ld [w2DMenuNumRows], a
+ hlcoord 0, 11
+ ld b, 5
+ ld c, 18
+ jp Textbox
+
+PrepareToPlaceMoveData:
+ ld hl, wPartyMon1Moves
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld a, [wMenuCursorY]
+ dec a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ld [wCurSpecies], a
+ hlcoord 1, 12
+ lb bc, 5, 18
+ jp ClearBox
+
+PlaceMoveData:
+ xor a
+ ldh [hBGMapMode], a
+ hlcoord 0, 10
+ ld de, String_MoveType_Top
+ call PlaceString
+ hlcoord 0, 11
+ ld de, String_MoveType_Bottom
+ call PlaceString
+ hlcoord 11, 12
+ ld de, String_MoveAtk
+ call PlaceString
+ ld a, [wCurSpecies]
+ ld b, a
+ hlcoord 2, 12
+ predef PrintMoveType
+ ld a, [wCurSpecies]
+ dec a
+ ld hl, Moves + MOVE_POWER
+ ld bc, MOVE_LENGTH
+ call AddNTimes
+ ld a, BANK(Moves)
+ call GetFarByte
+ hlcoord 16, 12
+ cp 2
+ jr c, .no_power
+ ld [wDeciramBuffer], a
+ ld de, wDeciramBuffer
+ lb bc, 1, 3
+ call PrintNum
+ jr .description
+
+.no_power
+ ld de, String_MoveNoPower
+ call PlaceString
+
+.description
+ hlcoord 1, 14
+ predef PrintMoveDesc
+ ld a, $1
+ ldh [hBGMapMode], a
+ ret
+
+String_MoveType_Top:
+ db "┌─────┐@"
+String_MoveType_Bottom:
+ db "│TYPE/└@"
+String_MoveAtk:
+ db "ATTK/@"
+String_MoveNoPower:
+ db "---@"
+
+PlaceMoveScreenArrows:
+ call PlaceMoveScreenLeftArrow
+ call PlaceMoveScreenRightArrow
+ ret
+
+PlaceMoveScreenLeftArrow:
+ ld a, [wCurPartyMon]
+ and a
+ ret z
+ ld c, a
+ ld e, a
+ ld d, 0
+ ld hl, wPartyCount
+ add hl, de
+.loop
+ ld a, [hl]
+ and a
+ jr z, .prev
+ cp EGG
+ jr z, .prev
+ cp NUM_POKEMON + 1
+ jr c, .legal
+
+.prev
+ dec hl
+ dec c
+ jr nz, .loop
+ ret
+
+.legal
+ hlcoord 16, 0
+ ld [hl], "◀"
+ ret
+
+PlaceMoveScreenRightArrow:
+ ld a, [wCurPartyMon]
+ inc a
+ ld c, a
+ ld a, [wPartyCount]
+ cp c
+ ret z
+ ld e, c
+ ld d, 0
+ ld hl, wPartySpecies
+ add hl, de
+.loop
+ ld a, [hl]
+ cp -1
+ ret z
+ and a
+ jr z, .next
+ cp EGG
+ jr z, .next
+ cp NUM_POKEMON + 1
+ jr c, .legal
+
+.next
+ inc hl
+ jr .loop
+
+.legal
+ hlcoord 18, 0
+ ld [hl], "▶"
+ ret
diff --git a/engine/specials.asm b/engine/specials.asm
index ad6c2085..bb0086bf 100755
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -269,7 +269,7 @@ GetMysteryGiftItem: ; c463 (3:4463)
ld a, $0
call OpenSRAM
ld a, [$abe2]
- ld [wd002], a
+ ld [wCurItem], a
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, wNumItems
@@ -278,7 +278,7 @@ GetMysteryGiftItem: ; c463 (3:4463)
xor a
ld [$abe2], a
call CloseSRAM
- ld a, [wd002]
+ ld a, [wCurItem]
ld [wd151], a
call GetItemName
ld hl, ReceivedMysteryGiftText ; $449f
@@ -361,7 +361,7 @@ Functionc508: ; c508 (3:4508)
or [hl]
jr z, .asm_c51e
ld a, COIN_CASE
- ld [wd002], a
+ ld [wCurItem], a
ld hl, wNumItems
call CheckItem
jr nc, .asm_c523
@@ -472,7 +472,7 @@ SelectApricornForKurt: ; c5bb (3:45bb)
ld [wScriptVar], a
and a
ret z
- ld [wd002], a
+ ld [wCurItem], a
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, wNumItems
diff --git a/home/gfx.asm b/home/gfx.asm
index 14a46844..7c5deb51 100644
--- a/home/gfx.asm
+++ b/home/gfx.asm
@@ -32,8 +32,8 @@ Functiond9e::
farcall Functionf8000
ret
-Functionda5::
- farcall Functionf8032
+LoadFontsBattleExtra::
+ farcall _LoadFontsBattleExtra
ret
LoadFontsExtra::
diff --git a/home/map.asm b/home/map.asm
index cf60545b..d331c40d 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -2024,8 +2024,8 @@ CheckIfFacingTileCoordIsSign:: ; 2b8f (0:2b8f)
.asm_2bad
pop hl
- ld de, wcf29
- ld bc, $5
+ ld de, wCurBGEvent
+ ld bc, BG_EVENT_SIZE
call CopyBytes
scf
ret
@@ -2088,8 +2088,8 @@ CheckCurrentMapXYTriggers::
.asm_2c02
pop hl
- ld de, wcf29
- ld bc, $8
+ ld de, wCurCoordEvent
+ ld bc, COORD_EVENT_SIZE
call CopyBytes
scf
ret
diff --git a/home/menu.asm b/home/menu.asm
index a82fa3a3..634d4bf3 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -110,8 +110,8 @@ RestoreTileBackup::
ret
PopWindow::
- ld b, $10
- ld de, wMenuFlags
+ ld b, wMenuHeaderEnd - wMenuHeader
+ ld de, wMenuHeader
.loop
ld a, [hld]
ld [de], a
@@ -142,8 +142,8 @@ CopyMenuData::
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wMenuDataFlags
- ld bc, wMenuDataEnd - wMenuDataFlags
+ ld de, wMenuData
+ ld bc, wMenuDataEnd - wMenuData
call CopyBytes
pop af
pop bc
diff --git a/home/pokemon.asm b/home/pokemon.asm
index 774bc04a..0c51fba8 100755
--- a/home/pokemon.asm
+++ b/home/pokemon.asm
@@ -204,7 +204,7 @@ Print8BitNumLeftAlign::
jp PrintNum
Unreferenced_GetNthMove::
- ld hl, wd149
+ ld hl, wListMoves_MoveIndicesBuffer
ld c, a
ld b, 0
add hl, bc
diff --git a/items/item_effects.asm b/items/item_effects.asm
index cdbaacc2..5cb96ba5 100755
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -1,11 +1,11 @@
_DoItemEffect:: ; e7a6 (3:67a6)
- ld a, [wd002]
+ ld a, [wCurItem]
ld [wd151], a
call GetItemName
call CopyName1
ld a, $1
ld [wFieldMoveSucceeded], a
- ld a, [wd002]
+ ld a, [wCurItem]
dec a
ld hl, .ItemEffects
rst JumpTable
@@ -219,7 +219,7 @@ UltraBall: ; e926
.room_in_party_or_pc
xor a
ld [wWildMon], a
- ld a, [wd002]
+ ld a, [wCurItem]
cp PARK_BALL
call nz, ReturnToBattle_UseBall
ld hl, wOptions
@@ -231,10 +231,10 @@ UltraBall: ; e926
ld a, [wBattleType]
cp BATTLETYPE_TUTORIAL
jp z, .catch_without_fail
- ld a, [wd002]
+ ld a, [wCurItem]
cp MASTER_BALL
jp z, .catch_without_fail
- ld a, [wd002]
+ ld a, [wCurItem]
ld c, a
ld hl, BallMultiplierFunctionTable ; $6c73
.get_multiplier_loop
@@ -256,7 +256,7 @@ UltraBall: ; e926
jp hl
.skip_or_return_from_ball_fn
- ld a, [wd002]
+ ld a, [wCurItem]
cp LEVEL_BALL
ld a, b
jp z, .skip_hp_calc
@@ -382,7 +382,7 @@ UltraBall: ; e926
ld [wWildMon], a
ld c, 20
call DelayFrames
- ld a, [wd002]
+ ld a, [wCurItem]
cp POKE_BALL + 1
jr c, .asm_ea34
ld a, $5
@@ -519,7 +519,7 @@ UltraBall: ; e926
ld [wMonType], a
call ClearSprites
predef TryAddMonToParty
- ld a, [wd002]
+ ld a, [wCurItem]
cp FRIEND_BALL
jr nz, .skip_party_mon_friend_ball
ld a, [wPartyCount]
@@ -568,7 +568,7 @@ UltraBall: ; e926
ld hl, wBattleResult
set 7, [hl]
.not_full_yet
- ld a, [wd002]
+ ld a, [wCurItem]
cp FRIEND_BALL
jr nz, .skip_box_mon_friend_ball
ld a, FRIEND_BALL_HAPPINESS
@@ -1111,7 +1111,7 @@ StatStrings:
.special db "SPECIAL@"
Functionef2d: ; ef2d (3:6f2d)
- ld a, [wd002]
+ ld a, [wCurItem]
ld hl, StatOffsets
.asm_ef33
cp [hl]
@@ -1329,7 +1329,7 @@ Functionf086: ; f086 (3:7086)
Functionf0ae: ; f0ae (3:70ae)
push hl
- ld a, [wd002]
+ ld a, [wCurItem]
ld hl, .healingactions ; $70c7
ld bc, $3
.asm_f0b8
@@ -1421,7 +1421,7 @@ Functionf12c: ; f12c (3:712c)
.asm_f15a
xor a
ld [wLowHealthAlarm], a
- ld a, [wd002]
+ ld a, [wCurItem]
cp REVIVE
jr z, .asm_f16a
call Functionf319
@@ -1822,7 +1822,7 @@ GetOneFifthMaxHP: ; f3ce (3:73ce)
Functionf3eb: ; f3eb (3:73eb)
push hl
- ld a, [wd002]
+ ld a, [wCurItem]
ld hl, HealingItemParameters
ld d, a
.asm_f3f3
@@ -1862,6 +1862,7 @@ HealingItemParameters:
dbw BERRY_JUICE, 20
dbw -1, 0
+Softboiled_MilkDrinkFunction:
ld a, [wPartyMenuCursor]
dec a
ld b, a
@@ -2001,7 +2002,7 @@ XDefend: ; f515
XSpecial: ; f515
XSpeed: ; f515
call Functionf7d0
- ld a, [wd002]
+ ld a, [wCurItem]
ld hl, .x_item_table
.asm_f51e
cp [hl]
@@ -2148,7 +2149,7 @@ MaxElixer: ; f606
MaxEther: ; f606
Mysteryberry: ; f606
PPUp: ; f606 (3:7606)
- ld a, [wd002]
+ ld a, [wCurItem]
ld [wMovementBufferCount], a
.asm_f60c
ld b, $1
diff --git a/main.asm b/main.asm
index 12787429..0e1d7099 100644
--- a/main.asm
+++ b/main.asm
@@ -593,7 +593,7 @@ INCLUDE "items/item_effects.asm"
KnowsMove:
ld a, MON_MOVES
call GetPartyParamLocation
- ld a, [wd14d]
+ ld a, [wPutativeTMHMMove]
ld b, a
ld c, $4
.asm_fa28
@@ -627,13 +627,10 @@ INCLUDE "engine/events/heal_machine_anim.asm"
INCLUDE "engine/events/whiteout.asm"
INCLUDE "engine/events/forced_movement.asm"
INCLUDE "engine/events/itemfinder.asm"
-StartMenu:
- dr $12994, $12e33
-
-PartyMonItemName::
- dr $12e33, $12fa0
-Function12fa0:
- dr $12fa0, $1399d
+INCLUDE "engine/menus/start_menu.asm"
+INCLUDE "engine/pokemon/mon_menu.asm"
+INCLUDE "engine/overworld/select_menu.asm"
+INCLUDE "engine/events/elevator.asm"
INCLUDE "engine/events/bug_contest/contest.asm"
INCLUDE "engine/events/misc_scripts_2.asm"
INCLUDE "engine/events/std_collision.asm"
@@ -679,7 +676,9 @@ Function14a2d:: ; 14a2d
Function14a44: ; 14a44
dr $14a44, $14a73
CheckCutCollision:
- dr $14a73, $14bd2
+ dr $14a73, $14abe
+SaveMenu:
+ dr $14abe, $14bd2
StartMovePkmnWOMail_SaveGame:
dr $14bd2, $14ef5
TryLoadSaveFile: ; 14ef5
@@ -757,11 +756,19 @@ PlaceMoneyTopRight:
DisplayCoinCaseBalance:
dr $24a4d, $24a76
DisplayMoneyAndCoinBalance:
- dr $24a76, $24b8d
+ dr $24a76, $24b05
+StartMenu_DrawBugContestStatusBox:
+ dr $24b05, $24b10
+StartMenu_PrintBugContestStatus:
+ dr $24b10, $24b8d
Function24b8d:
- dr $24b8d, $24f20
+ dr $24b8d, $24c89
+MonSubmenu:
+ dr $24c89, $24f20
SelectQuantityToToss:
- dr $24f20, $267ca
+ dr $24f20, $25061
+TrainerCard:
+ dr $25061, $267ca
ProfOaksPCBoot:
dr $267ca, $2692d
InitDecorations: ; 2692d
@@ -933,6 +940,7 @@ Function3f55d:
dr $3f55d, $40000
SECTION "bank10", ROMX, BANK[$10]
+Pokedex::
dr $40000, $41afe
Moves::
dr $41afe, $421db
@@ -962,7 +970,9 @@ PokedexDataPointerTable::
dr $44360, $44648
PlaceGraphic::
- dr $44648, $44870
+ dr $44648, $44679
+SendMailToPC::
+ dr $44679, $44870
DeletePartyMonMail:
dr $44870, $4488c
@@ -992,7 +1002,10 @@ InitPartyMenuGFX:
dr $50355, $5037a
InitPartyMenuWithCancel:
- dr $5037a, $503cc
+ dr $5037a, $503a2
+
+InitPartyMenuNoCancel:
+ dr $503a2, $503cc
PartyMenuSelect:
dr $503cc, $5040f
@@ -1004,7 +1017,11 @@ PrintPartyMenuActionText:
dr $504db, $5054f
LoadFishingGFX:
- dr $5054f, $50763
+ dr $5054f, $506f2
+
+; INCLUDE "engine/events/sweet_scent.asm"
+SweetScentFromMenu:
+ dr $506f2, $50763
SquirtbottleFunction:
dr $50763, $507ac
@@ -1064,7 +1081,10 @@ CalcLevel:
dr $51524, $51550
CalcExpAtLevel:
- dr $51550, $51749
+ dr $51550, $5161b
+
+_SwitchPartyMons:
+ dr $5161b, $51749
GetUnownLetter::
dr $51749, $51780
@@ -1216,17 +1236,29 @@ _InitSpriteAnimStruct:: ; 8d1f7
_ReinitSpriteAnimFrame:: ; 8d332
IF DEF(GOLD)
- dr $8d332, $8e79f
+ dr $8d332, $8e774
+ClearSpriteAnims2::
+ dr $8e774, $8e79f
LoadMenuMonIcon::
- dr $8e79f, $90000
+ dr $8e79f, $8e922
+UnfreezeMonIcons::
+ dr $8e922, $8e93d
+HoldSwitchmonIcon::
+ dr $8e93d, $90000
ENDC
IF DEF(SILVER)
- dr $8d332, $8e785
+ dr $8d332, $8e75a
+ClearSpriteAnims2::
+ dr $8e75a, $8e785
LoadMenuMonIcon::
- dr $8e785, $90000
+ dr $8e785, $8e908
+UnfreezeMonIcons::
+ dr $8e908, $8e923
+HoldSwitchmonIcon::
+ dr $8e923, $90000
ENDC
SECTION "bank24", ROMX, BANK[$24]
@@ -1242,7 +1274,9 @@ InitialClearDSTFlag:
MrChrono:
dr $90a8d, $90b0f
PrintHour:
- dr $90b0f, $9188a
+ dr $90b0f, $90b5e
+PokeGear:
+ dr $90b5e, $9188a
Function9188a:
dr $9188a, $919c1
Function919c1:
@@ -1322,8 +1356,9 @@ TreeMonEncounter:
dr $ba378, $ba3a1
RockMonEncounter:
- dr $ba3a1, $bbaed
-
+ dr $ba3a1, $baeca
+ReadPartyMonMail:
+ dr $baeca, $bbaed
ItemIsMail:
dr $bbaed, $bc000
@@ -1453,8 +1488,10 @@ Functionf8000::
dr $f8000, $f800c
Functionf800c::
dr $f800c, $f8032
-Functionf8032::
- dr $f8032, $fb4be
+_LoadFontsBattleExtra::
+ dr $f8032, $f80d9
+LoadStatsScreenPageTilesGFX::
+ dr $f80d9, $fb4be
TileCollisionTable::
dr $fb4be, $fb5be
diff --git a/predef/cgb.asm b/predef/cgb.asm
index a7baefe8..bd822607 100755
--- a/predef/cgb.asm
+++ b/predef/cgb.asm
@@ -92,7 +92,7 @@ Function9399: ; 9399 (2:5399)
ld bc, Palettes_ad2d
add hl, bc
call Function9adb
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
ld l, a
ld h, $0
add hl, hl
@@ -553,7 +553,7 @@ Function976d: ; 976d (2:576d)
call AddNTimes
ld c, l
ld b, h
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
call Function9bcb
call Function9adb
ld hl, Palettes_9c09
@@ -685,7 +685,7 @@ Function98be: ; 98be (2:58be)
ld a, $10
call Function9ac7
call Function9ad2
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
ld l, a
ld h, $0
add hl, hl
diff --git a/predef/sgb.asm b/predef/sgb.asm
index eee36a80..e94ad9fc 100755
--- a/predef/sgb.asm
+++ b/predef/sgb.asm
@@ -66,7 +66,7 @@ Function8c97: ; 8c97 (2:4c97)
ld de, wcca9
ld bc, $10
call CopyBytes
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
ld l, a
ld h, $0
add hl, hl
@@ -133,7 +133,7 @@ Function8d1f: ; 8d1f (2:4d1f)
ld [hl], $10
inc hl
inc hl
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
add $2f
ld [hl], a
ld hl, wcca9
@@ -374,7 +374,7 @@ Function8eb7: ; 8eb7 (2:4eb7)
call AddNTimes
ld c, l
ld b, h
- ld a, [wcc99]
+ ld a, [wPlayerHPPal]
call Function9bcb
ld a, [hli]
ld [wccac], a
diff --git a/sram.asm b/sram.asm
index 176d7a92..7a76467d 100755
--- a/sram.asm
+++ b/sram.asm
@@ -365,1512 +365,53 @@ s0_a5fc:: ds 1 ; 0:a5fc
s0_a5fd:: ds 1 ; 0:a5fd
s0_a5fe:: ds 1 ; 0:a5fe
s0_a5ff:: ds 1 ; 0:a5ff
-s0_a600:: ds 1 ; 0:a600
-s0_a601:: ds 1 ; 0:a601
-s0_a602:: ds 1 ; 0:a602
-s0_a603:: ds 1 ; 0:a603
-s0_a604:: ds 1 ; 0:a604
-s0_a605:: ds 1 ; 0:a605
-s0_a606:: ds 1 ; 0:a606
-s0_a607:: ds 1 ; 0:a607
-s0_a608:: ds 1 ; 0:a608
-s0_a609:: ds 1 ; 0:a609
-s0_a60a:: ds 1 ; 0:a60a
-s0_a60b:: ds 1 ; 0:a60b
-s0_a60c:: ds 1 ; 0:a60c
-s0_a60d:: ds 1 ; 0:a60d
-s0_a60e:: ds 1 ; 0:a60e
-s0_a60f:: ds 1 ; 0:a60f
-s0_a610:: ds 1 ; 0:a610
-s0_a611:: ds 1 ; 0:a611
-s0_a612:: ds 1 ; 0:a612
-s0_a613:: ds 1 ; 0:a613
-s0_a614:: ds 1 ; 0:a614
-s0_a615:: ds 1 ; 0:a615
-s0_a616:: ds 1 ; 0:a616
-s0_a617:: ds 1 ; 0:a617
-s0_a618:: ds 1 ; 0:a618
-s0_a619:: ds 1 ; 0:a619
-s0_a61a:: ds 1 ; 0:a61a
-s0_a61b:: ds 1 ; 0:a61b
-s0_a61c:: ds 1 ; 0:a61c
-s0_a61d:: ds 1 ; 0:a61d
-s0_a61e:: ds 1 ; 0:a61e
-s0_a61f:: ds 1 ; 0:a61f
-s0_a620:: ds 1 ; 0:a620
-s0_a621:: ds 1 ; 0:a621
-s0_a622:: ds 1 ; 0:a622
-s0_a623:: ds 1 ; 0:a623
-s0_a624:: ds 1 ; 0:a624
-s0_a625:: ds 1 ; 0:a625
-s0_a626:: ds 1 ; 0:a626
-s0_a627:: ds 1 ; 0:a627
-s0_a628:: ds 1 ; 0:a628
-s0_a629:: ds 1 ; 0:a629
-s0_a62a:: ds 1 ; 0:a62a
-s0_a62b:: ds 1 ; 0:a62b
-s0_a62c:: ds 1 ; 0:a62c
-s0_a62d:: ds 1 ; 0:a62d
-s0_a62e:: ds 1 ; 0:a62e
-s0_a62f:: ds 1 ; 0:a62f
-s0_a630:: ds 1 ; 0:a630
-s0_a631:: ds 1 ; 0:a631
-s0_a632:: ds 1 ; 0:a632
-s0_a633:: ds 1 ; 0:a633
-s0_a634:: ds 1 ; 0:a634
-s0_a635:: ds 1 ; 0:a635
-s0_a636:: ds 1 ; 0:a636
-s0_a637:: ds 1 ; 0:a637
-s0_a638:: ds 1 ; 0:a638
-s0_a639:: ds 1 ; 0:a639
-s0_a63a:: ds 1 ; 0:a63a
-s0_a63b:: ds 1 ; 0:a63b
-s0_a63c:: ds 1 ; 0:a63c
-s0_a63d:: ds 1 ; 0:a63d
-s0_a63e:: ds 1 ; 0:a63e
-s0_a63f:: ds 1 ; 0:a63f
-s0_a640:: ds 1 ; 0:a640
-s0_a641:: ds 1 ; 0:a641
-s0_a642:: ds 1 ; 0:a642
-s0_a643:: ds 1 ; 0:a643
-s0_a644:: ds 1 ; 0:a644
-s0_a645:: ds 1 ; 0:a645
-s0_a646:: ds 1 ; 0:a646
-s0_a647:: ds 1 ; 0:a647
-s0_a648:: ds 1 ; 0:a648
-s0_a649:: ds 1 ; 0:a649
-s0_a64a:: ds 1 ; 0:a64a
-s0_a64b:: ds 1 ; 0:a64b
-s0_a64c:: ds 1 ; 0:a64c
-s0_a64d:: ds 1 ; 0:a64d
-s0_a64e:: ds 1 ; 0:a64e
-s0_a64f:: ds 1 ; 0:a64f
-s0_a650:: ds 1 ; 0:a650
-s0_a651:: ds 1 ; 0:a651
-s0_a652:: ds 1 ; 0:a652
-s0_a653:: ds 1 ; 0:a653
-s0_a654:: ds 1 ; 0:a654
-s0_a655:: ds 1 ; 0:a655
-s0_a656:: ds 1 ; 0:a656
-s0_a657:: ds 1 ; 0:a657
-s0_a658:: ds 1 ; 0:a658
-s0_a659:: ds 1 ; 0:a659
-s0_a65a:: ds 1 ; 0:a65a
-s0_a65b:: ds 1 ; 0:a65b
-s0_a65c:: ds 1 ; 0:a65c
-s0_a65d:: ds 1 ; 0:a65d
-s0_a65e:: ds 1 ; 0:a65e
-s0_a65f:: ds 1 ; 0:a65f
-s0_a660:: ds 1 ; 0:a660
-s0_a661:: ds 1 ; 0:a661
-s0_a662:: ds 1 ; 0:a662
-s0_a663:: ds 1 ; 0:a663
-s0_a664:: ds 1 ; 0:a664
-s0_a665:: ds 1 ; 0:a665
-s0_a666:: ds 1 ; 0:a666
-s0_a667:: ds 1 ; 0:a667
-s0_a668:: ds 1 ; 0:a668
-s0_a669:: ds 1 ; 0:a669
-s0_a66a:: ds 1 ; 0:a66a
-s0_a66b:: ds 1 ; 0:a66b
-s0_a66c:: ds 1 ; 0:a66c
-s0_a66d:: ds 1 ; 0:a66d
-s0_a66e:: ds 1 ; 0:a66e
-s0_a66f:: ds 1 ; 0:a66f
-s0_a670:: ds 1 ; 0:a670
-s0_a671:: ds 1 ; 0:a671
-s0_a672:: ds 1 ; 0:a672
-s0_a673:: ds 1 ; 0:a673
-s0_a674:: ds 1 ; 0:a674
-s0_a675:: ds 1 ; 0:a675
-s0_a676:: ds 1 ; 0:a676
-s0_a677:: ds 1 ; 0:a677
-s0_a678:: ds 1 ; 0:a678
-s0_a679:: ds 1 ; 0:a679
-s0_a67a:: ds 1 ; 0:a67a
-s0_a67b:: ds 1 ; 0:a67b
-s0_a67c:: ds 1 ; 0:a67c
-s0_a67d:: ds 1 ; 0:a67d
-s0_a67e:: ds 1 ; 0:a67e
-s0_a67f:: ds 1 ; 0:a67f
-s0_a680:: ds 1 ; 0:a680
-s0_a681:: ds 1 ; 0:a681
-s0_a682:: ds 1 ; 0:a682
-s0_a683:: ds 1 ; 0:a683
-s0_a684:: ds 1 ; 0:a684
-s0_a685:: ds 1 ; 0:a685
-s0_a686:: ds 1 ; 0:a686
-s0_a687:: ds 1 ; 0:a687
-s0_a688:: ds 1 ; 0:a688
-s0_a689:: ds 1 ; 0:a689
-s0_a68a:: ds 1 ; 0:a68a
-s0_a68b:: ds 1 ; 0:a68b
-s0_a68c:: ds 1 ; 0:a68c
-s0_a68d:: ds 1 ; 0:a68d
-s0_a68e:: ds 1 ; 0:a68e
-s0_a68f:: ds 1 ; 0:a68f
-s0_a690:: ds 1 ; 0:a690
-s0_a691:: ds 1 ; 0:a691
-s0_a692:: ds 1 ; 0:a692
-s0_a693:: ds 1 ; 0:a693
-s0_a694:: ds 1 ; 0:a694
-s0_a695:: ds 1 ; 0:a695
-s0_a696:: ds 1 ; 0:a696
-s0_a697:: ds 1 ; 0:a697
-s0_a698:: ds 1 ; 0:a698
-s0_a699:: ds 1 ; 0:a699
-s0_a69a:: ds 1 ; 0:a69a
-s0_a69b:: ds 1 ; 0:a69b
-s0_a69c:: ds 1 ; 0:a69c
-s0_a69d:: ds 1 ; 0:a69d
-s0_a69e:: ds 1 ; 0:a69e
-s0_a69f:: ds 1 ; 0:a69f
-s0_a6a0:: ds 1 ; 0:a6a0
-s0_a6a1:: ds 1 ; 0:a6a1
-s0_a6a2:: ds 1 ; 0:a6a2
-s0_a6a3:: ds 1 ; 0:a6a3
-s0_a6a4:: ds 1 ; 0:a6a4
-s0_a6a5:: ds 1 ; 0:a6a5
-s0_a6a6:: ds 1 ; 0:a6a6
-s0_a6a7:: ds 1 ; 0:a6a7
-s0_a6a8:: ds 1 ; 0:a6a8
-s0_a6a9:: ds 1 ; 0:a6a9
-s0_a6aa:: ds 1 ; 0:a6aa
-s0_a6ab:: ds 1 ; 0:a6ab
-s0_a6ac:: ds 1 ; 0:a6ac
-s0_a6ad:: ds 1 ; 0:a6ad
-s0_a6ae:: ds 1 ; 0:a6ae
-s0_a6af:: ds 1 ; 0:a6af
-s0_a6b0:: ds 1 ; 0:a6b0
-s0_a6b1:: ds 1 ; 0:a6b1
-s0_a6b2:: ds 1 ; 0:a6b2
-s0_a6b3:: ds 1 ; 0:a6b3
-s0_a6b4:: ds 1 ; 0:a6b4
-s0_a6b5:: ds 1 ; 0:a6b5
-s0_a6b6:: ds 1 ; 0:a6b6
-s0_a6b7:: ds 1 ; 0:a6b7
-s0_a6b8:: ds 1 ; 0:a6b8
-s0_a6b9:: ds 1 ; 0:a6b9
-s0_a6ba:: ds 1 ; 0:a6ba
-s0_a6bb:: ds 1 ; 0:a6bb
-s0_a6bc:: ds 1 ; 0:a6bc
-s0_a6bd:: ds 1 ; 0:a6bd
-s0_a6be:: ds 1 ; 0:a6be
-s0_a6bf:: ds 1 ; 0:a6bf
-s0_a6c0:: ds 1 ; 0:a6c0
-s0_a6c1:: ds 1 ; 0:a6c1
-s0_a6c2:: ds 1 ; 0:a6c2
-s0_a6c3:: ds 1 ; 0:a6c3
-s0_a6c4:: ds 1 ; 0:a6c4
-s0_a6c5:: ds 1 ; 0:a6c5
-s0_a6c6:: ds 1 ; 0:a6c6
-s0_a6c7:: ds 1 ; 0:a6c7
-s0_a6c8:: ds 1 ; 0:a6c8
-s0_a6c9:: ds 1 ; 0:a6c9
-s0_a6ca:: ds 1 ; 0:a6ca
-s0_a6cb:: ds 1 ; 0:a6cb
-s0_a6cc:: ds 1 ; 0:a6cc
-s0_a6cd:: ds 1 ; 0:a6cd
-s0_a6ce:: ds 1 ; 0:a6ce
-s0_a6cf:: ds 1 ; 0:a6cf
-s0_a6d0:: ds 1 ; 0:a6d0
-s0_a6d1:: ds 1 ; 0:a6d1
-s0_a6d2:: ds 1 ; 0:a6d2
-s0_a6d3:: ds 1 ; 0:a6d3
-s0_a6d4:: ds 1 ; 0:a6d4
-s0_a6d5:: ds 1 ; 0:a6d5
-s0_a6d6:: ds 1 ; 0:a6d6
-s0_a6d7:: ds 1 ; 0:a6d7
-s0_a6d8:: ds 1 ; 0:a6d8
-s0_a6d9:: ds 1 ; 0:a6d9
-s0_a6da:: ds 1 ; 0:a6da
-s0_a6db:: ds 1 ; 0:a6db
-s0_a6dc:: ds 1 ; 0:a6dc
-s0_a6dd:: ds 1 ; 0:a6dd
-s0_a6de:: ds 1 ; 0:a6de
-s0_a6df:: ds 1 ; 0:a6df
-s0_a6e0:: ds 1 ; 0:a6e0
-s0_a6e1:: ds 1 ; 0:a6e1
-s0_a6e2:: ds 1 ; 0:a6e2
-s0_a6e3:: ds 1 ; 0:a6e3
-s0_a6e4:: ds 1 ; 0:a6e4
-s0_a6e5:: ds 1 ; 0:a6e5
-s0_a6e6:: ds 1 ; 0:a6e6
-s0_a6e7:: ds 1 ; 0:a6e7
-s0_a6e8:: ds 1 ; 0:a6e8
-s0_a6e9:: ds 1 ; 0:a6e9
-s0_a6ea:: ds 1 ; 0:a6ea
-s0_a6eb:: ds 1 ; 0:a6eb
-s0_a6ec:: ds 1 ; 0:a6ec
-s0_a6ed:: ds 1 ; 0:a6ed
-s0_a6ee:: ds 1 ; 0:a6ee
-s0_a6ef:: ds 1 ; 0:a6ef
-s0_a6f0:: ds 1 ; 0:a6f0
-s0_a6f1:: ds 1 ; 0:a6f1
-s0_a6f2:: ds 1 ; 0:a6f2
-s0_a6f3:: ds 1 ; 0:a6f3
-s0_a6f4:: ds 1 ; 0:a6f4
-s0_a6f5:: ds 1 ; 0:a6f5
-s0_a6f6:: ds 1 ; 0:a6f6
-s0_a6f7:: ds 1 ; 0:a6f7
-s0_a6f8:: ds 1 ; 0:a6f8
-s0_a6f9:: ds 1 ; 0:a6f9
-s0_a6fa:: ds 1 ; 0:a6fa
-s0_a6fb:: ds 1 ; 0:a6fb
-s0_a6fc:: ds 1 ; 0:a6fc
-s0_a6fd:: ds 1 ; 0:a6fd
-s0_a6fe:: ds 1 ; 0:a6fe
-s0_a6ff:: ds 1 ; 0:a6ff
-s0_a700:: ds 1 ; 0:a700
-s0_a701:: ds 1 ; 0:a701
-s0_a702:: ds 1 ; 0:a702
-s0_a703:: ds 1 ; 0:a703
-s0_a704:: ds 1 ; 0:a704
-s0_a705:: ds 1 ; 0:a705
-s0_a706:: ds 1 ; 0:a706
-s0_a707:: ds 1 ; 0:a707
-s0_a708:: ds 1 ; 0:a708
-s0_a709:: ds 1 ; 0:a709
-s0_a70a:: ds 1 ; 0:a70a
-s0_a70b:: ds 1 ; 0:a70b
-s0_a70c:: ds 1 ; 0:a70c
-s0_a70d:: ds 1 ; 0:a70d
-s0_a70e:: ds 1 ; 0:a70e
-s0_a70f:: ds 1 ; 0:a70f
-s0_a710:: ds 1 ; 0:a710
-s0_a711:: ds 1 ; 0:a711
-s0_a712:: ds 1 ; 0:a712
-s0_a713:: ds 1 ; 0:a713
-s0_a714:: ds 1 ; 0:a714
-s0_a715:: ds 1 ; 0:a715
-s0_a716:: ds 1 ; 0:a716
-s0_a717:: ds 1 ; 0:a717
-s0_a718:: ds 1 ; 0:a718
-s0_a719:: ds 1 ; 0:a719
-s0_a71a:: ds 1 ; 0:a71a
-s0_a71b:: ds 1 ; 0:a71b
-s0_a71c:: ds 1 ; 0:a71c
-s0_a71d:: ds 1 ; 0:a71d
-s0_a71e:: ds 1 ; 0:a71e
-s0_a71f:: ds 1 ; 0:a71f
-s0_a720:: ds 1 ; 0:a720
-s0_a721:: ds 1 ; 0:a721
-s0_a722:: ds 1 ; 0:a722
-s0_a723:: ds 1 ; 0:a723
-s0_a724:: ds 1 ; 0:a724
-s0_a725:: ds 1 ; 0:a725
-s0_a726:: ds 1 ; 0:a726
-s0_a727:: ds 1 ; 0:a727
-s0_a728:: ds 1 ; 0:a728
-s0_a729:: ds 1 ; 0:a729
-s0_a72a:: ds 1 ; 0:a72a
-s0_a72b:: ds 1 ; 0:a72b
-s0_a72c:: ds 1 ; 0:a72c
-s0_a72d:: ds 1 ; 0:a72d
-s0_a72e:: ds 1 ; 0:a72e
-s0_a72f:: ds 1 ; 0:a72f
-s0_a730:: ds 1 ; 0:a730
-s0_a731:: ds 1 ; 0:a731
-s0_a732:: ds 1 ; 0:a732
-s0_a733:: ds 1 ; 0:a733
-s0_a734:: ds 1 ; 0:a734
-s0_a735:: ds 1 ; 0:a735
-s0_a736:: ds 1 ; 0:a736
-s0_a737:: ds 1 ; 0:a737
-s0_a738:: ds 1 ; 0:a738
-s0_a739:: ds 1 ; 0:a739
-s0_a73a:: ds 1 ; 0:a73a
-s0_a73b:: ds 1 ; 0:a73b
-s0_a73c:: ds 1 ; 0:a73c
-s0_a73d:: ds 1 ; 0:a73d
-s0_a73e:: ds 1 ; 0:a73e
-s0_a73f:: ds 1 ; 0:a73f
-s0_a740:: ds 1 ; 0:a740
-s0_a741:: ds 1 ; 0:a741
-s0_a742:: ds 1 ; 0:a742
-s0_a743:: ds 1 ; 0:a743
-s0_a744:: ds 1 ; 0:a744
-s0_a745:: ds 1 ; 0:a745
-s0_a746:: ds 1 ; 0:a746
-s0_a747:: ds 1 ; 0:a747
-s0_a748:: ds 1 ; 0:a748
-s0_a749:: ds 1 ; 0:a749
-s0_a74a:: ds 1 ; 0:a74a
-s0_a74b:: ds 1 ; 0:a74b
-s0_a74c:: ds 1 ; 0:a74c
-s0_a74d:: ds 1 ; 0:a74d
-s0_a74e:: ds 1 ; 0:a74e
-s0_a74f:: ds 1 ; 0:a74f
-s0_a750:: ds 1 ; 0:a750
-s0_a751:: ds 1 ; 0:a751
-s0_a752:: ds 1 ; 0:a752
-s0_a753:: ds 1 ; 0:a753
-s0_a754:: ds 1 ; 0:a754
-s0_a755:: ds 1 ; 0:a755
-s0_a756:: ds 1 ; 0:a756
-s0_a757:: ds 1 ; 0:a757
-s0_a758:: ds 1 ; 0:a758
-s0_a759:: ds 1 ; 0:a759
-s0_a75a:: ds 1 ; 0:a75a
-s0_a75b:: ds 1 ; 0:a75b
-s0_a75c:: ds 1 ; 0:a75c
-s0_a75d:: ds 1 ; 0:a75d
-s0_a75e:: ds 1 ; 0:a75e
-s0_a75f:: ds 1 ; 0:a75f
-s0_a760:: ds 1 ; 0:a760
-s0_a761:: ds 1 ; 0:a761
-s0_a762:: ds 1 ; 0:a762
-s0_a763:: ds 1 ; 0:a763
-s0_a764:: ds 1 ; 0:a764
-s0_a765:: ds 1 ; 0:a765
-s0_a766:: ds 1 ; 0:a766
-s0_a767:: ds 1 ; 0:a767
-s0_a768:: ds 1 ; 0:a768
-s0_a769:: ds 1 ; 0:a769
-s0_a76a:: ds 1 ; 0:a76a
-s0_a76b:: ds 1 ; 0:a76b
-s0_a76c:: ds 1 ; 0:a76c
-s0_a76d:: ds 1 ; 0:a76d
-s0_a76e:: ds 1 ; 0:a76e
-s0_a76f:: ds 1 ; 0:a76f
-s0_a770:: ds 1 ; 0:a770
-s0_a771:: ds 1 ; 0:a771
-s0_a772:: ds 1 ; 0:a772
-s0_a773:: ds 1 ; 0:a773
-s0_a774:: ds 1 ; 0:a774
-s0_a775:: ds 1 ; 0:a775
-s0_a776:: ds 1 ; 0:a776
-s0_a777:: ds 1 ; 0:a777
-s0_a778:: ds 1 ; 0:a778
-s0_a779:: ds 1 ; 0:a779
-s0_a77a:: ds 1 ; 0:a77a
-s0_a77b:: ds 1 ; 0:a77b
-s0_a77c:: ds 1 ; 0:a77c
-s0_a77d:: ds 1 ; 0:a77d
-s0_a77e:: ds 1 ; 0:a77e
-s0_a77f:: ds 1 ; 0:a77f
-s0_a780:: ds 1 ; 0:a780
-s0_a781:: ds 1 ; 0:a781
-s0_a782:: ds 1 ; 0:a782
-s0_a783:: ds 1 ; 0:a783
-s0_a784:: ds 1 ; 0:a784
-s0_a785:: ds 1 ; 0:a785
-s0_a786:: ds 1 ; 0:a786
-s0_a787:: ds 1 ; 0:a787
-s0_a788:: ds 1 ; 0:a788
-s0_a789:: ds 1 ; 0:a789
-s0_a78a:: ds 1 ; 0:a78a
-s0_a78b:: ds 1 ; 0:a78b
-s0_a78c:: ds 1 ; 0:a78c
-s0_a78d:: ds 1 ; 0:a78d
-s0_a78e:: ds 1 ; 0:a78e
-s0_a78f:: ds 1 ; 0:a78f
-s0_a790:: ds 1 ; 0:a790
-s0_a791:: ds 1 ; 0:a791
-s0_a792:: ds 1 ; 0:a792
-s0_a793:: ds 1 ; 0:a793
-s0_a794:: ds 1 ; 0:a794
-s0_a795:: ds 1 ; 0:a795
-s0_a796:: ds 1 ; 0:a796
-s0_a797:: ds 1 ; 0:a797
-s0_a798:: ds 1 ; 0:a798
-s0_a799:: ds 1 ; 0:a799
-s0_a79a:: ds 1 ; 0:a79a
-s0_a79b:: ds 1 ; 0:a79b
-s0_a79c:: ds 1 ; 0:a79c
-s0_a79d:: ds 1 ; 0:a79d
-s0_a79e:: ds 1 ; 0:a79e
-s0_a79f:: ds 1 ; 0:a79f
-s0_a7a0:: ds 1 ; 0:a7a0
-s0_a7a1:: ds 1 ; 0:a7a1
-s0_a7a2:: ds 1 ; 0:a7a2
-s0_a7a3:: ds 1 ; 0:a7a3
-s0_a7a4:: ds 1 ; 0:a7a4
-s0_a7a5:: ds 1 ; 0:a7a5
-s0_a7a6:: ds 1 ; 0:a7a6
-s0_a7a7:: ds 1 ; 0:a7a7
-s0_a7a8:: ds 1 ; 0:a7a8
-s0_a7a9:: ds 1 ; 0:a7a9
-s0_a7aa:: ds 1 ; 0:a7aa
-s0_a7ab:: ds 1 ; 0:a7ab
-s0_a7ac:: ds 1 ; 0:a7ac
-s0_a7ad:: ds 1 ; 0:a7ad
-s0_a7ae:: ds 1 ; 0:a7ae
-s0_a7af:: ds 1 ; 0:a7af
-s0_a7b0:: ds 1 ; 0:a7b0
-s0_a7b1:: ds 1 ; 0:a7b1
-s0_a7b2:: ds 1 ; 0:a7b2
-s0_a7b3:: ds 1 ; 0:a7b3
-s0_a7b4:: ds 1 ; 0:a7b4
-s0_a7b5:: ds 1 ; 0:a7b5
-s0_a7b6:: ds 1 ; 0:a7b6
-s0_a7b7:: ds 1 ; 0:a7b7
-s0_a7b8:: ds 1 ; 0:a7b8
-s0_a7b9:: ds 1 ; 0:a7b9
-s0_a7ba:: ds 1 ; 0:a7ba
-s0_a7bb:: ds 1 ; 0:a7bb
-s0_a7bc:: ds 1 ; 0:a7bc
-s0_a7bd:: ds 1 ; 0:a7bd
-s0_a7be:: ds 1 ; 0:a7be
-s0_a7bf:: ds 1 ; 0:a7bf
-s0_a7c0:: ds 1 ; 0:a7c0
-s0_a7c1:: ds 1 ; 0:a7c1
-s0_a7c2:: ds 1 ; 0:a7c2
-s0_a7c3:: ds 1 ; 0:a7c3
-s0_a7c4:: ds 1 ; 0:a7c4
-s0_a7c5:: ds 1 ; 0:a7c5
-s0_a7c6:: ds 1 ; 0:a7c6
-s0_a7c7:: ds 1 ; 0:a7c7
-s0_a7c8:: ds 1 ; 0:a7c8
-s0_a7c9:: ds 1 ; 0:a7c9
-s0_a7ca:: ds 1 ; 0:a7ca
-s0_a7cb:: ds 1 ; 0:a7cb
-s0_a7cc:: ds 1 ; 0:a7cc
-s0_a7cd:: ds 1 ; 0:a7cd
-s0_a7ce:: ds 1 ; 0:a7ce
-s0_a7cf:: ds 1 ; 0:a7cf
-s0_a7d0:: ds 1 ; 0:a7d0
-s0_a7d1:: ds 1 ; 0:a7d1
-s0_a7d2:: ds 1 ; 0:a7d2
-s0_a7d3:: ds 1 ; 0:a7d3
-s0_a7d4:: ds 1 ; 0:a7d4
-s0_a7d5:: ds 1 ; 0:a7d5
-s0_a7d6:: ds 1 ; 0:a7d6
-s0_a7d7:: ds 1 ; 0:a7d7
-s0_a7d8:: ds 1 ; 0:a7d8
-s0_a7d9:: ds 1 ; 0:a7d9
-s0_a7da:: ds 1 ; 0:a7da
-s0_a7db:: ds 1 ; 0:a7db
-s0_a7dc:: ds 1 ; 0:a7dc
-s0_a7dd:: ds 1 ; 0:a7dd
-s0_a7de:: ds 1 ; 0:a7de
-s0_a7df:: ds 1 ; 0:a7df
-s0_a7e0:: ds 1 ; 0:a7e0
-s0_a7e1:: ds 1 ; 0:a7e1
-s0_a7e2:: ds 1 ; 0:a7e2
-s0_a7e3:: ds 1 ; 0:a7e3
-s0_a7e4:: ds 1 ; 0:a7e4
-s0_a7e5:: ds 1 ; 0:a7e5
-s0_a7e6:: ds 1 ; 0:a7e6
-s0_a7e7:: ds 1 ; 0:a7e7
-s0_a7e8:: ds 1 ; 0:a7e8
-s0_a7e9:: ds 1 ; 0:a7e9
-s0_a7ea:: ds 1 ; 0:a7ea
-s0_a7eb:: ds 1 ; 0:a7eb
-s0_a7ec:: ds 1 ; 0:a7ec
-s0_a7ed:: ds 1 ; 0:a7ed
-s0_a7ee:: ds 1 ; 0:a7ee
-s0_a7ef:: ds 1 ; 0:a7ef
-s0_a7f0:: ds 1 ; 0:a7f0
-s0_a7f1:: ds 1 ; 0:a7f1
-s0_a7f2:: ds 1 ; 0:a7f2
-s0_a7f3:: ds 1 ; 0:a7f3
-s0_a7f4:: ds 1 ; 0:a7f4
-s0_a7f5:: ds 1 ; 0:a7f5
-s0_a7f6:: ds 1 ; 0:a7f6
-s0_a7f7:: ds 1 ; 0:a7f7
-s0_a7f8:: ds 1 ; 0:a7f8
-s0_a7f9:: ds 1 ; 0:a7f9
-s0_a7fa:: ds 1 ; 0:a7fa
-s0_a7fb:: ds 1 ; 0:a7fb
-s0_a7fc:: ds 1 ; 0:a7fc
-s0_a7fd:: ds 1 ; 0:a7fd
-s0_a7fe:: ds 1 ; 0:a7fe
-s0_a7ff:: ds 1 ; 0:a7ff
-s0_a800:: ds 1 ; 0:a800
-s0_a801:: ds 1 ; 0:a801
-s0_a802:: ds 1 ; 0:a802
-s0_a803:: ds 1 ; 0:a803
-s0_a804:: ds 1 ; 0:a804
-s0_a805:: ds 1 ; 0:a805
-s0_a806:: ds 1 ; 0:a806
-s0_a807:: ds 1 ; 0:a807
-s0_a808:: ds 1 ; 0:a808
-s0_a809:: ds 1 ; 0:a809
-s0_a80a:: ds 1 ; 0:a80a
-s0_a80b:: ds 1 ; 0:a80b
-s0_a80c:: ds 1 ; 0:a80c
-s0_a80d:: ds 1 ; 0:a80d
-s0_a80e:: ds 1 ; 0:a80e
-s0_a80f:: ds 1 ; 0:a80f
-s0_a810:: ds 1 ; 0:a810
-s0_a811:: ds 1 ; 0:a811
-s0_a812:: ds 1 ; 0:a812
-s0_a813:: ds 1 ; 0:a813
-s0_a814:: ds 1 ; 0:a814
-s0_a815:: ds 1 ; 0:a815
-s0_a816:: ds 1 ; 0:a816
-s0_a817:: ds 1 ; 0:a817
-s0_a818:: ds 1 ; 0:a818
-s0_a819:: ds 1 ; 0:a819
-s0_a81a:: ds 1 ; 0:a81a
-s0_a81b:: ds 1 ; 0:a81b
-s0_a81c:: ds 1 ; 0:a81c
-s0_a81d:: ds 1 ; 0:a81d
-s0_a81e:: ds 1 ; 0:a81e
-s0_a81f:: ds 1 ; 0:a81f
-s0_a820:: ds 1 ; 0:a820
-s0_a821:: ds 1 ; 0:a821
-s0_a822:: ds 1 ; 0:a822
-s0_a823:: ds 1 ; 0:a823
-s0_a824:: ds 1 ; 0:a824
-s0_a825:: ds 1 ; 0:a825
-s0_a826:: ds 1 ; 0:a826
-s0_a827:: ds 1 ; 0:a827
-s0_a828:: ds 1 ; 0:a828
-s0_a829:: ds 1 ; 0:a829
-s0_a82a:: ds 1 ; 0:a82a
-s0_a82b:: ds 1 ; 0:a82b
-s0_a82c:: ds 1 ; 0:a82c
-s0_a82d:: ds 1 ; 0:a82d
-s0_a82e:: ds 1 ; 0:a82e
-s0_a82f:: ds 1 ; 0:a82f
-s0_a830:: ds 1 ; 0:a830
-s0_a831:: ds 1 ; 0:a831
-s0_a832:: ds 1 ; 0:a832
-s0_a833:: ds 1 ; 0:a833
-s0_a834:: ds 1 ; 0:a834
-s0_a835:: ds 1 ; 0:a835
-s0_a836:: ds 1 ; 0:a836
-s0_a837:: ds 1 ; 0:a837
-s0_a838:: ds 1 ; 0:a838
-s0_a839:: ds 1 ; 0:a839
-s0_a83a:: ds 1 ; 0:a83a
-s0_a83b:: ds 1 ; 0:a83b
-s0_a83c:: ds 1 ; 0:a83c
-s0_a83d:: ds 1 ; 0:a83d
-s0_a83e:: ds 1 ; 0:a83e
-s0_a83f:: ds 1 ; 0:a83f
-s0_a840:: ds 1 ; 0:a840
-s0_a841:: ds 1 ; 0:a841
-s0_a842:: ds 1 ; 0:a842
-s0_a843:: ds 1 ; 0:a843
-s0_a844:: ds 1 ; 0:a844
-s0_a845:: ds 1 ; 0:a845
-s0_a846:: ds 1 ; 0:a846
-s0_a847:: ds 1 ; 0:a847
-s0_a848:: ds 1 ; 0:a848
-s0_a849:: ds 1 ; 0:a849
-s0_a84a:: ds 1 ; 0:a84a
-s0_a84b:: ds 1 ; 0:a84b
-s0_a84c:: ds 1 ; 0:a84c
-s0_a84d:: ds 1 ; 0:a84d
-s0_a84e:: ds 1 ; 0:a84e
-s0_a84f:: ds 1 ; 0:a84f
-s0_a850:: ds 1 ; 0:a850
-s0_a851:: ds 1 ; 0:a851
-s0_a852:: ds 1 ; 0:a852
-s0_a853:: ds 1 ; 0:a853
-s0_a854:: ds 1 ; 0:a854
-s0_a855:: ds 1 ; 0:a855
-s0_a856:: ds 1 ; 0:a856
-s0_a857:: ds 1 ; 0:a857
-s0_a858:: ds 1 ; 0:a858
-s0_a859:: ds 1 ; 0:a859
-s0_a85a:: ds 1 ; 0:a85a
-s0_a85b:: ds 1 ; 0:a85b
-s0_a85c:: ds 1 ; 0:a85c
-s0_a85d:: ds 1 ; 0:a85d
-s0_a85e:: ds 1 ; 0:a85e
-s0_a85f:: ds 1 ; 0:a85f
-s0_a860:: ds 1 ; 0:a860
-s0_a861:: ds 1 ; 0:a861
-s0_a862:: ds 1 ; 0:a862
-s0_a863:: ds 1 ; 0:a863
-s0_a864:: ds 1 ; 0:a864
-s0_a865:: ds 1 ; 0:a865
-s0_a866:: ds 1 ; 0:a866
-s0_a867:: ds 1 ; 0:a867
-s0_a868:: ds 1 ; 0:a868
-s0_a869:: ds 1 ; 0:a869
-s0_a86a:: ds 1 ; 0:a86a
-s0_a86b:: ds 1 ; 0:a86b
-s0_a86c:: ds 1 ; 0:a86c
-s0_a86d:: ds 1 ; 0:a86d
-s0_a86e:: ds 1 ; 0:a86e
-s0_a86f:: ds 1 ; 0:a86f
-s0_a870:: ds 1 ; 0:a870
-s0_a871:: ds 1 ; 0:a871
-s0_a872:: ds 1 ; 0:a872
-s0_a873:: ds 1 ; 0:a873
-s0_a874:: ds 1 ; 0:a874
-s0_a875:: ds 1 ; 0:a875
-s0_a876:: ds 1 ; 0:a876
-s0_a877:: ds 1 ; 0:a877
-s0_a878:: ds 1 ; 0:a878
-s0_a879:: ds 1 ; 0:a879
-s0_a87a:: ds 1 ; 0:a87a
-s0_a87b:: ds 1 ; 0:a87b
-s0_a87c:: ds 1 ; 0:a87c
-s0_a87d:: ds 1 ; 0:a87d
-s0_a87e:: ds 1 ; 0:a87e
-s0_a87f:: ds 1 ; 0:a87f
-s0_a880:: ds 1 ; 0:a880
-s0_a881:: ds 1 ; 0:a881
-s0_a882:: ds 1 ; 0:a882
-s0_a883:: ds 1 ; 0:a883
-s0_a884:: ds 1 ; 0:a884
-s0_a885:: ds 1 ; 0:a885
-s0_a886:: ds 1 ; 0:a886
-s0_a887:: ds 1 ; 0:a887
-s0_a888:: ds 1 ; 0:a888
-s0_a889:: ds 1 ; 0:a889
-s0_a88a:: ds 1 ; 0:a88a
-s0_a88b:: ds 1 ; 0:a88b
-s0_a88c:: ds 1 ; 0:a88c
-s0_a88d:: ds 1 ; 0:a88d
-s0_a88e:: ds 1 ; 0:a88e
-s0_a88f:: ds 1 ; 0:a88f
-s0_a890:: ds 1 ; 0:a890
-s0_a891:: ds 1 ; 0:a891
-s0_a892:: ds 1 ; 0:a892
-s0_a893:: ds 1 ; 0:a893
-s0_a894:: ds 1 ; 0:a894
-s0_a895:: ds 1 ; 0:a895
-s0_a896:: ds 1 ; 0:a896
-s0_a897:: ds 1 ; 0:a897
-s0_a898:: ds 1 ; 0:a898
-s0_a899:: ds 1 ; 0:a899
-s0_a89a:: ds 1 ; 0:a89a
-s0_a89b:: ds 1 ; 0:a89b
-s0_a89c:: ds 1 ; 0:a89c
-s0_a89d:: ds 1 ; 0:a89d
-s0_a89e:: ds 1 ; 0:a89e
-s0_a89f:: ds 1 ; 0:a89f
-s0_a8a0:: ds 1 ; 0:a8a0
-s0_a8a1:: ds 1 ; 0:a8a1
-s0_a8a2:: ds 1 ; 0:a8a2
-s0_a8a3:: ds 1 ; 0:a8a3
-s0_a8a4:: ds 1 ; 0:a8a4
-s0_a8a5:: ds 1 ; 0:a8a5
-s0_a8a6:: ds 1 ; 0:a8a6
-s0_a8a7:: ds 1 ; 0:a8a7
-s0_a8a8:: ds 1 ; 0:a8a8
-s0_a8a9:: ds 1 ; 0:a8a9
-s0_a8aa:: ds 1 ; 0:a8aa
-s0_a8ab:: ds 1 ; 0:a8ab
-s0_a8ac:: ds 1 ; 0:a8ac
-s0_a8ad:: ds 1 ; 0:a8ad
-s0_a8ae:: ds 1 ; 0:a8ae
-s0_a8af:: ds 1 ; 0:a8af
-s0_a8b0:: ds 1 ; 0:a8b0
-s0_a8b1:: ds 1 ; 0:a8b1
-s0_a8b2:: ds 1 ; 0:a8b2
-s0_a8b3:: ds 1 ; 0:a8b3
-s0_a8b4:: ds 1 ; 0:a8b4
-s0_a8b5:: ds 1 ; 0:a8b5
-s0_a8b6:: ds 1 ; 0:a8b6
-s0_a8b7:: ds 1 ; 0:a8b7
-s0_a8b8:: ds 1 ; 0:a8b8
-s0_a8b9:: ds 1 ; 0:a8b9
-s0_a8ba:: ds 1 ; 0:a8ba
-s0_a8bb:: ds 1 ; 0:a8bb
-s0_a8bc:: ds 1 ; 0:a8bc
-s0_a8bd:: ds 1 ; 0:a8bd
-s0_a8be:: ds 1 ; 0:a8be
-s0_a8bf:: ds 1 ; 0:a8bf
-s0_a8c0:: ds 1 ; 0:a8c0
-s0_a8c1:: ds 1 ; 0:a8c1
-s0_a8c2:: ds 1 ; 0:a8c2
-s0_a8c3:: ds 1 ; 0:a8c3
-s0_a8c4:: ds 1 ; 0:a8c4
-s0_a8c5:: ds 1 ; 0:a8c5
-s0_a8c6:: ds 1 ; 0:a8c6
-s0_a8c7:: ds 1 ; 0:a8c7
-s0_a8c8:: ds 1 ; 0:a8c8
-s0_a8c9:: ds 1 ; 0:a8c9
-s0_a8ca:: ds 1 ; 0:a8ca
-s0_a8cb:: ds 1 ; 0:a8cb
-s0_a8cc:: ds 1 ; 0:a8cc
-s0_a8cd:: ds 1 ; 0:a8cd
-s0_a8ce:: ds 1 ; 0:a8ce
-s0_a8cf:: ds 1 ; 0:a8cf
-s0_a8d0:: ds 1 ; 0:a8d0
-s0_a8d1:: ds 1 ; 0:a8d1
-s0_a8d2:: ds 1 ; 0:a8d2
-s0_a8d3:: ds 1 ; 0:a8d3
-s0_a8d4:: ds 1 ; 0:a8d4
-s0_a8d5:: ds 1 ; 0:a8d5
-s0_a8d6:: ds 1 ; 0:a8d6
-s0_a8d7:: ds 1 ; 0:a8d7
-s0_a8d8:: ds 1 ; 0:a8d8
-s0_a8d9:: ds 1 ; 0:a8d9
-s0_a8da:: ds 1 ; 0:a8da
-s0_a8db:: ds 1 ; 0:a8db
-s0_a8dc:: ds 1 ; 0:a8dc
-s0_a8dd:: ds 1 ; 0:a8dd
-s0_a8de:: ds 1 ; 0:a8de
-s0_a8df:: ds 1 ; 0:a8df
-s0_a8e0:: ds 1 ; 0:a8e0
-s0_a8e1:: ds 1 ; 0:a8e1
-s0_a8e2:: ds 1 ; 0:a8e2
-s0_a8e3:: ds 1 ; 0:a8e3
-s0_a8e4:: ds 1 ; 0:a8e4
-s0_a8e5:: ds 1 ; 0:a8e5
-s0_a8e6:: ds 1 ; 0:a8e6
-s0_a8e7:: ds 1 ; 0:a8e7
-s0_a8e8:: ds 1 ; 0:a8e8
-s0_a8e9:: ds 1 ; 0:a8e9
-s0_a8ea:: ds 1 ; 0:a8ea
-s0_a8eb:: ds 1 ; 0:a8eb
-s0_a8ec:: ds 1 ; 0:a8ec
-s0_a8ed:: ds 1 ; 0:a8ed
-s0_a8ee:: ds 1 ; 0:a8ee
-s0_a8ef:: ds 1 ; 0:a8ef
-s0_a8f0:: ds 1 ; 0:a8f0
-s0_a8f1:: ds 1 ; 0:a8f1
-s0_a8f2:: ds 1 ; 0:a8f2
-s0_a8f3:: ds 1 ; 0:a8f3
-s0_a8f4:: ds 1 ; 0:a8f4
-s0_a8f5:: ds 1 ; 0:a8f5
-s0_a8f6:: ds 1 ; 0:a8f6
-s0_a8f7:: ds 1 ; 0:a8f7
-s0_a8f8:: ds 1 ; 0:a8f8
-s0_a8f9:: ds 1 ; 0:a8f9
-s0_a8fa:: ds 1 ; 0:a8fa
-s0_a8fb:: ds 1 ; 0:a8fb
-s0_a8fc:: ds 1 ; 0:a8fc
-s0_a8fd:: ds 1 ; 0:a8fd
-s0_a8fe:: ds 1 ; 0:a8fe
-s0_a8ff:: ds 1 ; 0:a8ff
-s0_a900:: ds 1 ; 0:a900
-s0_a901:: ds 1 ; 0:a901
-s0_a902:: ds 1 ; 0:a902
-s0_a903:: ds 1 ; 0:a903
-s0_a904:: ds 1 ; 0:a904
-s0_a905:: ds 1 ; 0:a905
-s0_a906:: ds 1 ; 0:a906
-s0_a907:: ds 1 ; 0:a907
-s0_a908:: ds 1 ; 0:a908
-s0_a909:: ds 1 ; 0:a909
-s0_a90a:: ds 1 ; 0:a90a
-s0_a90b:: ds 1 ; 0:a90b
-s0_a90c:: ds 1 ; 0:a90c
-s0_a90d:: ds 1 ; 0:a90d
-s0_a90e:: ds 1 ; 0:a90e
-s0_a90f:: ds 1 ; 0:a90f
-s0_a910:: ds 1 ; 0:a910
-s0_a911:: ds 1 ; 0:a911
-s0_a912:: ds 1 ; 0:a912
-s0_a913:: ds 1 ; 0:a913
-s0_a914:: ds 1 ; 0:a914
-s0_a915:: ds 1 ; 0:a915
-s0_a916:: ds 1 ; 0:a916
-s0_a917:: ds 1 ; 0:a917
-s0_a918:: ds 1 ; 0:a918
-s0_a919:: ds 1 ; 0:a919
-s0_a91a:: ds 1 ; 0:a91a
-s0_a91b:: ds 1 ; 0:a91b
-s0_a91c:: ds 1 ; 0:a91c
-s0_a91d:: ds 1 ; 0:a91d
-s0_a91e:: ds 1 ; 0:a91e
-s0_a91f:: ds 1 ; 0:a91f
-s0_a920:: ds 1 ; 0:a920
-s0_a921:: ds 1 ; 0:a921
-s0_a922:: ds 1 ; 0:a922
-s0_a923:: ds 1 ; 0:a923
-s0_a924:: ds 1 ; 0:a924
-s0_a925:: ds 1 ; 0:a925
-s0_a926:: ds 1 ; 0:a926
-s0_a927:: ds 1 ; 0:a927
-s0_a928:: ds 1 ; 0:a928
-s0_a929:: ds 1 ; 0:a929
-s0_a92a:: ds 1 ; 0:a92a
-s0_a92b:: ds 1 ; 0:a92b
-s0_a92c:: ds 1 ; 0:a92c
-s0_a92d:: ds 1 ; 0:a92d
-s0_a92e:: ds 1 ; 0:a92e
-s0_a92f:: ds 1 ; 0:a92f
-s0_a930:: ds 1 ; 0:a930
-s0_a931:: ds 1 ; 0:a931
-s0_a932:: ds 1 ; 0:a932
-s0_a933:: ds 1 ; 0:a933
-s0_a934:: ds 1 ; 0:a934
-s0_a935:: ds 1 ; 0:a935
-s0_a936:: ds 1 ; 0:a936
-s0_a937:: ds 1 ; 0:a937
-s0_a938:: ds 1 ; 0:a938
-s0_a939:: ds 1 ; 0:a939
-s0_a93a:: ds 1 ; 0:a93a
-s0_a93b:: ds 1 ; 0:a93b
-s0_a93c:: ds 1 ; 0:a93c
-s0_a93d:: ds 1 ; 0:a93d
-s0_a93e:: ds 1 ; 0:a93e
-s0_a93f:: ds 1 ; 0:a93f
-s0_a940:: ds 1 ; 0:a940
-s0_a941:: ds 1 ; 0:a941
-s0_a942:: ds 1 ; 0:a942
-s0_a943:: ds 1 ; 0:a943
-s0_a944:: ds 1 ; 0:a944
-s0_a945:: ds 1 ; 0:a945
-s0_a946:: ds 1 ; 0:a946
-s0_a947:: ds 1 ; 0:a947
-s0_a948:: ds 1 ; 0:a948
-s0_a949:: ds 1 ; 0:a949
-s0_a94a:: ds 1 ; 0:a94a
-s0_a94b:: ds 1 ; 0:a94b
-s0_a94c:: ds 1 ; 0:a94c
-s0_a94d:: ds 1 ; 0:a94d
-s0_a94e:: ds 1 ; 0:a94e
-s0_a94f:: ds 1 ; 0:a94f
-s0_a950:: ds 1 ; 0:a950
-s0_a951:: ds 1 ; 0:a951
-s0_a952:: ds 1 ; 0:a952
-s0_a953:: ds 1 ; 0:a953
-s0_a954:: ds 1 ; 0:a954
-s0_a955:: ds 1 ; 0:a955
-s0_a956:: ds 1 ; 0:a956
-s0_a957:: ds 1 ; 0:a957
-s0_a958:: ds 1 ; 0:a958
-s0_a959:: ds 1 ; 0:a959
-s0_a95a:: ds 1 ; 0:a95a
-s0_a95b:: ds 1 ; 0:a95b
-s0_a95c:: ds 1 ; 0:a95c
-s0_a95d:: ds 1 ; 0:a95d
-s0_a95e:: ds 1 ; 0:a95e
-s0_a95f:: ds 1 ; 0:a95f
-s0_a960:: ds 1 ; 0:a960
-s0_a961:: ds 1 ; 0:a961
-s0_a962:: ds 1 ; 0:a962
-s0_a963:: ds 1 ; 0:a963
-s0_a964:: ds 1 ; 0:a964
-s0_a965:: ds 1 ; 0:a965
-s0_a966:: ds 1 ; 0:a966
-s0_a967:: ds 1 ; 0:a967
-s0_a968:: ds 1 ; 0:a968
-s0_a969:: ds 1 ; 0:a969
-s0_a96a:: ds 1 ; 0:a96a
-s0_a96b:: ds 1 ; 0:a96b
-s0_a96c:: ds 1 ; 0:a96c
-s0_a96d:: ds 1 ; 0:a96d
-s0_a96e:: ds 1 ; 0:a96e
-s0_a96f:: ds 1 ; 0:a96f
-s0_a970:: ds 1 ; 0:a970
-s0_a971:: ds 1 ; 0:a971
-s0_a972:: ds 1 ; 0:a972
-s0_a973:: ds 1 ; 0:a973
-s0_a974:: ds 1 ; 0:a974
-s0_a975:: ds 1 ; 0:a975
-s0_a976:: ds 1 ; 0:a976
-s0_a977:: ds 1 ; 0:a977
-s0_a978:: ds 1 ; 0:a978
-s0_a979:: ds 1 ; 0:a979
-s0_a97a:: ds 1 ; 0:a97a
-s0_a97b:: ds 1 ; 0:a97b
-s0_a97c:: ds 1 ; 0:a97c
-s0_a97d:: ds 1 ; 0:a97d
-s0_a97e:: ds 1 ; 0:a97e
-s0_a97f:: ds 1 ; 0:a97f
-s0_a980:: ds 1 ; 0:a980
-s0_a981:: ds 1 ; 0:a981
-s0_a982:: ds 1 ; 0:a982
-s0_a983:: ds 1 ; 0:a983
-s0_a984:: ds 1 ; 0:a984
-s0_a985:: ds 1 ; 0:a985
-s0_a986:: ds 1 ; 0:a986
-s0_a987:: ds 1 ; 0:a987
-s0_a988:: ds 1 ; 0:a988
-s0_a989:: ds 1 ; 0:a989
-s0_a98a:: ds 1 ; 0:a98a
-s0_a98b:: ds 1 ; 0:a98b
-s0_a98c:: ds 1 ; 0:a98c
-s0_a98d:: ds 1 ; 0:a98d
-s0_a98e:: ds 1 ; 0:a98e
-s0_a98f:: ds 1 ; 0:a98f
-s0_a990:: ds 1 ; 0:a990
-s0_a991:: ds 1 ; 0:a991
-s0_a992:: ds 1 ; 0:a992
-s0_a993:: ds 1 ; 0:a993
-s0_a994:: ds 1 ; 0:a994
-s0_a995:: ds 1 ; 0:a995
-s0_a996:: ds 1 ; 0:a996
-s0_a997:: ds 1 ; 0:a997
-s0_a998:: ds 1 ; 0:a998
-s0_a999:: ds 1 ; 0:a999
-s0_a99a:: ds 1 ; 0:a99a
-s0_a99b:: ds 1 ; 0:a99b
-s0_a99c:: ds 1 ; 0:a99c
-s0_a99d:: ds 1 ; 0:a99d
-s0_a99e:: ds 1 ; 0:a99e
-s0_a99f:: ds 1 ; 0:a99f
-s0_a9a0:: ds 1 ; 0:a9a0
-s0_a9a1:: ds 1 ; 0:a9a1
-s0_a9a2:: ds 1 ; 0:a9a2
-s0_a9a3:: ds 1 ; 0:a9a3
-s0_a9a4:: ds 1 ; 0:a9a4
-s0_a9a5:: ds 1 ; 0:a9a5
-s0_a9a6:: ds 1 ; 0:a9a6
-s0_a9a7:: ds 1 ; 0:a9a7
-s0_a9a8:: ds 1 ; 0:a9a8
-s0_a9a9:: ds 1 ; 0:a9a9
-s0_a9aa:: ds 1 ; 0:a9aa
-s0_a9ab:: ds 1 ; 0:a9ab
-s0_a9ac:: ds 1 ; 0:a9ac
-s0_a9ad:: ds 1 ; 0:a9ad
-s0_a9ae:: ds 1 ; 0:a9ae
-s0_a9af:: ds 1 ; 0:a9af
-s0_a9b0:: ds 1 ; 0:a9b0
-s0_a9b1:: ds 1 ; 0:a9b1
-s0_a9b2:: ds 1 ; 0:a9b2
-s0_a9b3:: ds 1 ; 0:a9b3
-s0_a9b4:: ds 1 ; 0:a9b4
-s0_a9b5:: ds 1 ; 0:a9b5
-s0_a9b6:: ds 1 ; 0:a9b6
-s0_a9b7:: ds 1 ; 0:a9b7
-s0_a9b8:: ds 1 ; 0:a9b8
-s0_a9b9:: ds 1 ; 0:a9b9
-s0_a9ba:: ds 1 ; 0:a9ba
-s0_a9bb:: ds 1 ; 0:a9bb
-s0_a9bc:: ds 1 ; 0:a9bc
-s0_a9bd:: ds 1 ; 0:a9bd
-s0_a9be:: ds 1 ; 0:a9be
-s0_a9bf:: ds 1 ; 0:a9bf
-s0_a9c0:: ds 1 ; 0:a9c0
-s0_a9c1:: ds 1 ; 0:a9c1
-s0_a9c2:: ds 1 ; 0:a9c2
-s0_a9c3:: ds 1 ; 0:a9c3
-s0_a9c4:: ds 1 ; 0:a9c4
-s0_a9c5:: ds 1 ; 0:a9c5
-s0_a9c6:: ds 1 ; 0:a9c6
-s0_a9c7:: ds 1 ; 0:a9c7
-s0_a9c8:: ds 1 ; 0:a9c8
-s0_a9c9:: ds 1 ; 0:a9c9
-s0_a9ca:: ds 1 ; 0:a9ca
-s0_a9cb:: ds 1 ; 0:a9cb
-s0_a9cc:: ds 1 ; 0:a9cc
-s0_a9cd:: ds 1 ; 0:a9cd
-s0_a9ce:: ds 1 ; 0:a9ce
-s0_a9cf:: ds 1 ; 0:a9cf
-s0_a9d0:: ds 1 ; 0:a9d0
-s0_a9d1:: ds 1 ; 0:a9d1
-s0_a9d2:: ds 1 ; 0:a9d2
-s0_a9d3:: ds 1 ; 0:a9d3
-s0_a9d4:: ds 1 ; 0:a9d4
-s0_a9d5:: ds 1 ; 0:a9d5
-s0_a9d6:: ds 1 ; 0:a9d6
-s0_a9d7:: ds 1 ; 0:a9d7
-s0_a9d8:: ds 1 ; 0:a9d8
-s0_a9d9:: ds 1 ; 0:a9d9
-s0_a9da:: ds 1 ; 0:a9da
-s0_a9db:: ds 1 ; 0:a9db
-s0_a9dc:: ds 1 ; 0:a9dc
-s0_a9dd:: ds 1 ; 0:a9dd
-s0_a9de:: ds 1 ; 0:a9de
-s0_a9df:: ds 1 ; 0:a9df
-s0_a9e0:: ds 1 ; 0:a9e0
-s0_a9e1:: ds 1 ; 0:a9e1
-s0_a9e2:: ds 1 ; 0:a9e2
-s0_a9e3:: ds 1 ; 0:a9e3
-s0_a9e4:: ds 1 ; 0:a9e4
-s0_a9e5:: ds 1 ; 0:a9e5
-s0_a9e6:: ds 1 ; 0:a9e6
-s0_a9e7:: ds 1 ; 0:a9e7
-s0_a9e8:: ds 1 ; 0:a9e8
-s0_a9e9:: ds 1 ; 0:a9e9
-s0_a9ea:: ds 1 ; 0:a9ea
-s0_a9eb:: ds 1 ; 0:a9eb
-s0_a9ec:: ds 1 ; 0:a9ec
-s0_a9ed:: ds 1 ; 0:a9ed
-s0_a9ee:: ds 1 ; 0:a9ee
-s0_a9ef:: ds 1 ; 0:a9ef
-s0_a9f0:: ds 1 ; 0:a9f0
-s0_a9f1:: ds 1 ; 0:a9f1
-s0_a9f2:: ds 1 ; 0:a9f2
-s0_a9f3:: ds 1 ; 0:a9f3
-s0_a9f4:: ds 1 ; 0:a9f4
-s0_a9f5:: ds 1 ; 0:a9f5
-s0_a9f6:: ds 1 ; 0:a9f6
-s0_a9f7:: ds 1 ; 0:a9f7
-s0_a9f8:: ds 1 ; 0:a9f8
-s0_a9f9:: ds 1 ; 0:a9f9
-s0_a9fa:: ds 1 ; 0:a9fa
-s0_a9fb:: ds 1 ; 0:a9fb
-s0_a9fc:: ds 1 ; 0:a9fc
-s0_a9fd:: ds 1 ; 0:a9fd
-s0_a9fe:: ds 1 ; 0:a9fe
-s0_a9ff:: ds 1 ; 0:a9ff
-s0_aa00:: ds 1 ; 0:aa00
-s0_aa01:: ds 1 ; 0:aa01
-s0_aa02:: ds 1 ; 0:aa02
-s0_aa03:: ds 1 ; 0:aa03
-s0_aa04:: ds 1 ; 0:aa04
-s0_aa05:: ds 1 ; 0:aa05
-s0_aa06:: ds 1 ; 0:aa06
-s0_aa07:: ds 1 ; 0:aa07
-s0_aa08:: ds 1 ; 0:aa08
-s0_aa09:: ds 1 ; 0:aa09
-s0_aa0a:: ds 1 ; 0:aa0a
-s0_aa0b:: ds 1 ; 0:aa0b
-s0_aa0c:: ds 1 ; 0:aa0c
-s0_aa0d:: ds 1 ; 0:aa0d
-s0_aa0e:: ds 1 ; 0:aa0e
-s0_aa0f:: ds 1 ; 0:aa0f
-s0_aa10:: ds 1 ; 0:aa10
-s0_aa11:: ds 1 ; 0:aa11
-s0_aa12:: ds 1 ; 0:aa12
-s0_aa13:: ds 1 ; 0:aa13
-s0_aa14:: ds 1 ; 0:aa14
-s0_aa15:: ds 1 ; 0:aa15
-s0_aa16:: ds 1 ; 0:aa16
-s0_aa17:: ds 1 ; 0:aa17
-s0_aa18:: ds 1 ; 0:aa18
-s0_aa19:: ds 1 ; 0:aa19
-s0_aa1a:: ds 1 ; 0:aa1a
-s0_aa1b:: ds 1 ; 0:aa1b
-s0_aa1c:: ds 1 ; 0:aa1c
-s0_aa1d:: ds 1 ; 0:aa1d
-s0_aa1e:: ds 1 ; 0:aa1e
-s0_aa1f:: ds 1 ; 0:aa1f
-s0_aa20:: ds 1 ; 0:aa20
-s0_aa21:: ds 1 ; 0:aa21
-s0_aa22:: ds 1 ; 0:aa22
-s0_aa23:: ds 1 ; 0:aa23
-s0_aa24:: ds 1 ; 0:aa24
-s0_aa25:: ds 1 ; 0:aa25
-s0_aa26:: ds 1 ; 0:aa26
-s0_aa27:: ds 1 ; 0:aa27
-s0_aa28:: ds 1 ; 0:aa28
-s0_aa29:: ds 1 ; 0:aa29
-s0_aa2a:: ds 1 ; 0:aa2a
-s0_aa2b:: ds 1 ; 0:aa2b
-s0_aa2c:: ds 1 ; 0:aa2c
-s0_aa2d:: ds 1 ; 0:aa2d
-s0_aa2e:: ds 1 ; 0:aa2e
-s0_aa2f:: ds 1 ; 0:aa2f
-s0_aa30:: ds 1 ; 0:aa30
-s0_aa31:: ds 1 ; 0:aa31
-s0_aa32:: ds 1 ; 0:aa32
-s0_aa33:: ds 1 ; 0:aa33
-s0_aa34:: ds 1 ; 0:aa34
-s0_aa35:: ds 1 ; 0:aa35
-s0_aa36:: ds 1 ; 0:aa36
-s0_aa37:: ds 1 ; 0:aa37
-s0_aa38:: ds 1 ; 0:aa38
-s0_aa39:: ds 1 ; 0:aa39
-s0_aa3a:: ds 1 ; 0:aa3a
-s0_aa3b:: ds 1 ; 0:aa3b
-s0_aa3c:: ds 1 ; 0:aa3c
-s0_aa3d:: ds 1 ; 0:aa3d
-s0_aa3e:: ds 1 ; 0:aa3e
-s0_aa3f:: ds 1 ; 0:aa3f
-s0_aa40:: ds 1 ; 0:aa40
-s0_aa41:: ds 1 ; 0:aa41
-s0_aa42:: ds 1 ; 0:aa42
-s0_aa43:: ds 1 ; 0:aa43
-s0_aa44:: ds 1 ; 0:aa44
-s0_aa45:: ds 1 ; 0:aa45
-s0_aa46:: ds 1 ; 0:aa46
-s0_aa47:: ds 1 ; 0:aa47
-s0_aa48:: ds 1 ; 0:aa48
-s0_aa49:: ds 1 ; 0:aa49
-s0_aa4a:: ds 1 ; 0:aa4a
-s0_aa4b:: ds 1 ; 0:aa4b
-s0_aa4c:: ds 1 ; 0:aa4c
-s0_aa4d:: ds 1 ; 0:aa4d
-s0_aa4e:: ds 1 ; 0:aa4e
-s0_aa4f:: ds 1 ; 0:aa4f
-s0_aa50:: ds 1 ; 0:aa50
-s0_aa51:: ds 1 ; 0:aa51
-s0_aa52:: ds 1 ; 0:aa52
-s0_aa53:: ds 1 ; 0:aa53
-s0_aa54:: ds 1 ; 0:aa54
-s0_aa55:: ds 1 ; 0:aa55
-s0_aa56:: ds 1 ; 0:aa56
-s0_aa57:: ds 1 ; 0:aa57
-s0_aa58:: ds 1 ; 0:aa58
-s0_aa59:: ds 1 ; 0:aa59
-s0_aa5a:: ds 1 ; 0:aa5a
-s0_aa5b:: ds 1 ; 0:aa5b
-s0_aa5c:: ds 1 ; 0:aa5c
-s0_aa5d:: ds 1 ; 0:aa5d
-s0_aa5e:: ds 1 ; 0:aa5e
-s0_aa5f:: ds 1 ; 0:aa5f
-s0_aa60:: ds 1 ; 0:aa60
-s0_aa61:: ds 1 ; 0:aa61
-s0_aa62:: ds 1 ; 0:aa62
-s0_aa63:: ds 1 ; 0:aa63
-s0_aa64:: ds 1 ; 0:aa64
-s0_aa65:: ds 1 ; 0:aa65
-s0_aa66:: ds 1 ; 0:aa66
-s0_aa67:: ds 1 ; 0:aa67
-s0_aa68:: ds 1 ; 0:aa68
-s0_aa69:: ds 1 ; 0:aa69
-s0_aa6a:: ds 1 ; 0:aa6a
-s0_aa6b:: ds 1 ; 0:aa6b
-s0_aa6c:: ds 1 ; 0:aa6c
-s0_aa6d:: ds 1 ; 0:aa6d
-s0_aa6e:: ds 1 ; 0:aa6e
-s0_aa6f:: ds 1 ; 0:aa6f
-s0_aa70:: ds 1 ; 0:aa70
-s0_aa71:: ds 1 ; 0:aa71
-s0_aa72:: ds 1 ; 0:aa72
-s0_aa73:: ds 1 ; 0:aa73
-s0_aa74:: ds 1 ; 0:aa74
-s0_aa75:: ds 1 ; 0:aa75
-s0_aa76:: ds 1 ; 0:aa76
-s0_aa77:: ds 1 ; 0:aa77
-s0_aa78:: ds 1 ; 0:aa78
-s0_aa79:: ds 1 ; 0:aa79
-s0_aa7a:: ds 1 ; 0:aa7a
-s0_aa7b:: ds 1 ; 0:aa7b
-s0_aa7c:: ds 1 ; 0:aa7c
-s0_aa7d:: ds 1 ; 0:aa7d
-s0_aa7e:: ds 1 ; 0:aa7e
-s0_aa7f:: ds 1 ; 0:aa7f
-s0_aa80:: ds 1 ; 0:aa80
-s0_aa81:: ds 1 ; 0:aa81
-s0_aa82:: ds 1 ; 0:aa82
-s0_aa83:: ds 1 ; 0:aa83
-s0_aa84:: ds 1 ; 0:aa84
-s0_aa85:: ds 1 ; 0:aa85
-s0_aa86:: ds 1 ; 0:aa86
-s0_aa87:: ds 1 ; 0:aa87
-s0_aa88:: ds 1 ; 0:aa88
-s0_aa89:: ds 1 ; 0:aa89
-s0_aa8a:: ds 1 ; 0:aa8a
-s0_aa8b:: ds 1 ; 0:aa8b
-s0_aa8c:: ds 1 ; 0:aa8c
-s0_aa8d:: ds 1 ; 0:aa8d
-s0_aa8e:: ds 1 ; 0:aa8e
-s0_aa8f:: ds 1 ; 0:aa8f
-s0_aa90:: ds 1 ; 0:aa90
-s0_aa91:: ds 1 ; 0:aa91
-s0_aa92:: ds 1 ; 0:aa92
-s0_aa93:: ds 1 ; 0:aa93
-s0_aa94:: ds 1 ; 0:aa94
-s0_aa95:: ds 1 ; 0:aa95
-s0_aa96:: ds 1 ; 0:aa96
-s0_aa97:: ds 1 ; 0:aa97
-s0_aa98:: ds 1 ; 0:aa98
-s0_aa99:: ds 1 ; 0:aa99
-s0_aa9a:: ds 1 ; 0:aa9a
-s0_aa9b:: ds 1 ; 0:aa9b
-s0_aa9c:: ds 1 ; 0:aa9c
-s0_aa9d:: ds 1 ; 0:aa9d
-s0_aa9e:: ds 1 ; 0:aa9e
-s0_aa9f:: ds 1 ; 0:aa9f
-s0_aaa0:: ds 1 ; 0:aaa0
-s0_aaa1:: ds 1 ; 0:aaa1
-s0_aaa2:: ds 1 ; 0:aaa2
-s0_aaa3:: ds 1 ; 0:aaa3
-s0_aaa4:: ds 1 ; 0:aaa4
-s0_aaa5:: ds 1 ; 0:aaa5
-s0_aaa6:: ds 1 ; 0:aaa6
-s0_aaa7:: ds 1 ; 0:aaa7
-s0_aaa8:: ds 1 ; 0:aaa8
-s0_aaa9:: ds 1 ; 0:aaa9
-s0_aaaa:: ds 1 ; 0:aaaa
-s0_aaab:: ds 1 ; 0:aaab
-s0_aaac:: ds 1 ; 0:aaac
-s0_aaad:: ds 1 ; 0:aaad
-s0_aaae:: ds 1 ; 0:aaae
-s0_aaaf:: ds 1 ; 0:aaaf
-s0_aab0:: ds 1 ; 0:aab0
-s0_aab1:: ds 1 ; 0:aab1
-s0_aab2:: ds 1 ; 0:aab2
-s0_aab3:: ds 1 ; 0:aab3
-s0_aab4:: ds 1 ; 0:aab4
-s0_aab5:: ds 1 ; 0:aab5
-s0_aab6:: ds 1 ; 0:aab6
-s0_aab7:: ds 1 ; 0:aab7
-s0_aab8:: ds 1 ; 0:aab8
-s0_aab9:: ds 1 ; 0:aab9
-s0_aaba:: ds 1 ; 0:aaba
-s0_aabb:: ds 1 ; 0:aabb
-s0_aabc:: ds 1 ; 0:aabc
-s0_aabd:: ds 1 ; 0:aabd
-s0_aabe:: ds 1 ; 0:aabe
-s0_aabf:: ds 1 ; 0:aabf
-s0_aac0:: ds 1 ; 0:aac0
-s0_aac1:: ds 1 ; 0:aac1
-s0_aac2:: ds 1 ; 0:aac2
-s0_aac3:: ds 1 ; 0:aac3
-s0_aac4:: ds 1 ; 0:aac4
-s0_aac5:: ds 1 ; 0:aac5
-s0_aac6:: ds 1 ; 0:aac6
-s0_aac7:: ds 1 ; 0:aac7
-s0_aac8:: ds 1 ; 0:aac8
-s0_aac9:: ds 1 ; 0:aac9
-s0_aaca:: ds 1 ; 0:aaca
-s0_aacb:: ds 1 ; 0:aacb
-s0_aacc:: ds 1 ; 0:aacc
-s0_aacd:: ds 1 ; 0:aacd
-s0_aace:: ds 1 ; 0:aace
-s0_aacf:: ds 1 ; 0:aacf
-s0_aad0:: ds 1 ; 0:aad0
-s0_aad1:: ds 1 ; 0:aad1
-s0_aad2:: ds 1 ; 0:aad2
-s0_aad3:: ds 1 ; 0:aad3
-s0_aad4:: ds 1 ; 0:aad4
-s0_aad5:: ds 1 ; 0:aad5
-s0_aad6:: ds 1 ; 0:aad6
-s0_aad7:: ds 1 ; 0:aad7
-s0_aad8:: ds 1 ; 0:aad8
-s0_aad9:: ds 1 ; 0:aad9
-s0_aada:: ds 1 ; 0:aada
-s0_aadb:: ds 1 ; 0:aadb
-s0_aadc:: ds 1 ; 0:aadc
-s0_aadd:: ds 1 ; 0:aadd
-s0_aade:: ds 1 ; 0:aade
-s0_aadf:: ds 1 ; 0:aadf
-s0_aae0:: ds 1 ; 0:aae0
-s0_aae1:: ds 1 ; 0:aae1
-s0_aae2:: ds 1 ; 0:aae2
-s0_aae3:: ds 1 ; 0:aae3
-s0_aae4:: ds 1 ; 0:aae4
-s0_aae5:: ds 1 ; 0:aae5
-s0_aae6:: ds 1 ; 0:aae6
-s0_aae7:: ds 1 ; 0:aae7
-s0_aae8:: ds 1 ; 0:aae8
-s0_aae9:: ds 1 ; 0:aae9
-s0_aaea:: ds 1 ; 0:aaea
-s0_aaeb:: ds 1 ; 0:aaeb
-s0_aaec:: ds 1 ; 0:aaec
-s0_aaed:: ds 1 ; 0:aaed
-s0_aaee:: ds 1 ; 0:aaee
-s0_aaef:: ds 1 ; 0:aaef
-s0_aaf0:: ds 1 ; 0:aaf0
-s0_aaf1:: ds 1 ; 0:aaf1
-s0_aaf2:: ds 1 ; 0:aaf2
-s0_aaf3:: ds 1 ; 0:aaf3
-s0_aaf4:: ds 1 ; 0:aaf4
-s0_aaf5:: ds 1 ; 0:aaf5
-s0_aaf6:: ds 1 ; 0:aaf6
-s0_aaf7:: ds 1 ; 0:aaf7
-s0_aaf8:: ds 1 ; 0:aaf8
-s0_aaf9:: ds 1 ; 0:aaf9
-s0_aafa:: ds 1 ; 0:aafa
-s0_aafb:: ds 1 ; 0:aafb
-s0_aafc:: ds 1 ; 0:aafc
-s0_aafd:: ds 1 ; 0:aafd
-s0_aafe:: ds 1 ; 0:aafe
-s0_aaff:: ds 1 ; 0:aaff
-s0_ab00:: ds 1 ; 0:ab00
-s0_ab01:: ds 1 ; 0:ab01
-s0_ab02:: ds 1 ; 0:ab02
-s0_ab03:: ds 1 ; 0:ab03
-s0_ab04:: ds 1 ; 0:ab04
-s0_ab05:: ds 1 ; 0:ab05
-s0_ab06:: ds 1 ; 0:ab06
-s0_ab07:: ds 1 ; 0:ab07
-s0_ab08:: ds 1 ; 0:ab08
-s0_ab09:: ds 1 ; 0:ab09
-s0_ab0a:: ds 1 ; 0:ab0a
-s0_ab0b:: ds 1 ; 0:ab0b
-s0_ab0c:: ds 1 ; 0:ab0c
-s0_ab0d:: ds 1 ; 0:ab0d
-s0_ab0e:: ds 1 ; 0:ab0e
-s0_ab0f:: ds 1 ; 0:ab0f
-s0_ab10:: ds 1 ; 0:ab10
-s0_ab11:: ds 1 ; 0:ab11
-s0_ab12:: ds 1 ; 0:ab12
-s0_ab13:: ds 1 ; 0:ab13
-s0_ab14:: ds 1 ; 0:ab14
-s0_ab15:: ds 1 ; 0:ab15
-s0_ab16:: ds 1 ; 0:ab16
-s0_ab17:: ds 1 ; 0:ab17
-s0_ab18:: ds 1 ; 0:ab18
-s0_ab19:: ds 1 ; 0:ab19
-s0_ab1a:: ds 1 ; 0:ab1a
-s0_ab1b:: ds 1 ; 0:ab1b
-s0_ab1c:: ds 1 ; 0:ab1c
-s0_ab1d:: ds 1 ; 0:ab1d
-s0_ab1e:: ds 1 ; 0:ab1e
-s0_ab1f:: ds 1 ; 0:ab1f
-s0_ab20:: ds 1 ; 0:ab20
-s0_ab21:: ds 1 ; 0:ab21
-s0_ab22:: ds 1 ; 0:ab22
-s0_ab23:: ds 1 ; 0:ab23
-s0_ab24:: ds 1 ; 0:ab24
-s0_ab25:: ds 1 ; 0:ab25
-s0_ab26:: ds 1 ; 0:ab26
-s0_ab27:: ds 1 ; 0:ab27
-s0_ab28:: ds 1 ; 0:ab28
-s0_ab29:: ds 1 ; 0:ab29
-s0_ab2a:: ds 1 ; 0:ab2a
-s0_ab2b:: ds 1 ; 0:ab2b
-s0_ab2c:: ds 1 ; 0:ab2c
-s0_ab2d:: ds 1 ; 0:ab2d
-s0_ab2e:: ds 1 ; 0:ab2e
-s0_ab2f:: ds 1 ; 0:ab2f
-s0_ab30:: ds 1 ; 0:ab30
-s0_ab31:: ds 1 ; 0:ab31
-s0_ab32:: ds 1 ; 0:ab32
-s0_ab33:: ds 1 ; 0:ab33
-s0_ab34:: ds 1 ; 0:ab34
-s0_ab35:: ds 1 ; 0:ab35
-s0_ab36:: ds 1 ; 0:ab36
-s0_ab37:: ds 1 ; 0:ab37
-s0_ab38:: ds 1 ; 0:ab38
-s0_ab39:: ds 1 ; 0:ab39
-s0_ab3a:: ds 1 ; 0:ab3a
-s0_ab3b:: ds 1 ; 0:ab3b
-s0_ab3c:: ds 1 ; 0:ab3c
-s0_ab3d:: ds 1 ; 0:ab3d
-s0_ab3e:: ds 1 ; 0:ab3e
-s0_ab3f:: ds 1 ; 0:ab3f
-s0_ab40:: ds 1 ; 0:ab40
-s0_ab41:: ds 1 ; 0:ab41
-s0_ab42:: ds 1 ; 0:ab42
-s0_ab43:: ds 1 ; 0:ab43
-s0_ab44:: ds 1 ; 0:ab44
-s0_ab45:: ds 1 ; 0:ab45
-s0_ab46:: ds 1 ; 0:ab46
-s0_ab47:: ds 1 ; 0:ab47
-s0_ab48:: ds 1 ; 0:ab48
-s0_ab49:: ds 1 ; 0:ab49
-s0_ab4a:: ds 1 ; 0:ab4a
-s0_ab4b:: ds 1 ; 0:ab4b
-s0_ab4c:: ds 1 ; 0:ab4c
-s0_ab4d:: ds 1 ; 0:ab4d
-s0_ab4e:: ds 1 ; 0:ab4e
-s0_ab4f:: ds 1 ; 0:ab4f
-s0_ab50:: ds 1 ; 0:ab50
-s0_ab51:: ds 1 ; 0:ab51
-s0_ab52:: ds 1 ; 0:ab52
-s0_ab53:: ds 1 ; 0:ab53
-s0_ab54:: ds 1 ; 0:ab54
-s0_ab55:: ds 1 ; 0:ab55
-s0_ab56:: ds 1 ; 0:ab56
-s0_ab57:: ds 1 ; 0:ab57
-s0_ab58:: ds 1 ; 0:ab58
-s0_ab59:: ds 1 ; 0:ab59
-s0_ab5a:: ds 1 ; 0:ab5a
-s0_ab5b:: ds 1 ; 0:ab5b
-s0_ab5c:: ds 1 ; 0:ab5c
-s0_ab5d:: ds 1 ; 0:ab5d
-s0_ab5e:: ds 1 ; 0:ab5e
-s0_ab5f:: ds 1 ; 0:ab5f
-s0_ab60:: ds 1 ; 0:ab60
-s0_ab61:: ds 1 ; 0:ab61
-s0_ab62:: ds 1 ; 0:ab62
-s0_ab63:: ds 1 ; 0:ab63
-s0_ab64:: ds 1 ; 0:ab64
-s0_ab65:: ds 1 ; 0:ab65
-s0_ab66:: ds 1 ; 0:ab66
-s0_ab67:: ds 1 ; 0:ab67
-s0_ab68:: ds 1 ; 0:ab68
-s0_ab69:: ds 1 ; 0:ab69
-s0_ab6a:: ds 1 ; 0:ab6a
-s0_ab6b:: ds 1 ; 0:ab6b
-s0_ab6c:: ds 1 ; 0:ab6c
-s0_ab6d:: ds 1 ; 0:ab6d
-s0_ab6e:: ds 1 ; 0:ab6e
-s0_ab6f:: ds 1 ; 0:ab6f
-s0_ab70:: ds 1 ; 0:ab70
-s0_ab71:: ds 1 ; 0:ab71
-s0_ab72:: ds 1 ; 0:ab72
-s0_ab73:: ds 1 ; 0:ab73
-s0_ab74:: ds 1 ; 0:ab74
-s0_ab75:: ds 1 ; 0:ab75
-s0_ab76:: ds 1 ; 0:ab76
-s0_ab77:: ds 1 ; 0:ab77
-s0_ab78:: ds 1 ; 0:ab78
-s0_ab79:: ds 1 ; 0:ab79
-s0_ab7a:: ds 1 ; 0:ab7a
-s0_ab7b:: ds 1 ; 0:ab7b
-s0_ab7c:: ds 1 ; 0:ab7c
-s0_ab7d:: ds 1 ; 0:ab7d
-s0_ab7e:: ds 1 ; 0:ab7e
-s0_ab7f:: ds 1 ; 0:ab7f
-s0_ab80:: ds 1 ; 0:ab80
-s0_ab81:: ds 1 ; 0:ab81
-s0_ab82:: ds 1 ; 0:ab82
-s0_ab83:: ds 1 ; 0:ab83
-s0_ab84:: ds 1 ; 0:ab84
-s0_ab85:: ds 1 ; 0:ab85
-s0_ab86:: ds 1 ; 0:ab86
-s0_ab87:: ds 1 ; 0:ab87
-s0_ab88:: ds 1 ; 0:ab88
-s0_ab89:: ds 1 ; 0:ab89
-s0_ab8a:: ds 1 ; 0:ab8a
-s0_ab8b:: ds 1 ; 0:ab8b
-s0_ab8c:: ds 1 ; 0:ab8c
-s0_ab8d:: ds 1 ; 0:ab8d
-s0_ab8e:: ds 1 ; 0:ab8e
-s0_ab8f:: ds 1 ; 0:ab8f
-s0_ab90:: ds 1 ; 0:ab90
-s0_ab91:: ds 1 ; 0:ab91
-s0_ab92:: ds 1 ; 0:ab92
-s0_ab93:: ds 1 ; 0:ab93
-s0_ab94:: ds 1 ; 0:ab94
-s0_ab95:: ds 1 ; 0:ab95
-s0_ab96:: ds 1 ; 0:ab96
-s0_ab97:: ds 1 ; 0:ab97
-s0_ab98:: ds 1 ; 0:ab98
-s0_ab99:: ds 1 ; 0:ab99
-s0_ab9a:: ds 1 ; 0:ab9a
-s0_ab9b:: ds 1 ; 0:ab9b
-s0_ab9c:: ds 1 ; 0:ab9c
-s0_ab9d:: ds 1 ; 0:ab9d
-s0_ab9e:: ds 1 ; 0:ab9e
-s0_ab9f:: ds 1 ; 0:ab9f
-s0_aba0:: ds 1 ; 0:aba0
-s0_aba1:: ds 1 ; 0:aba1
-s0_aba2:: ds 1 ; 0:aba2
-s0_aba3:: ds 1 ; 0:aba3
-s0_aba4:: ds 1 ; 0:aba4
-s0_aba5:: ds 1 ; 0:aba5
-s0_aba6:: ds 1 ; 0:aba6
-s0_aba7:: ds 1 ; 0:aba7
-s0_aba8:: ds 1 ; 0:aba8
-s0_aba9:: ds 1 ; 0:aba9
-s0_abaa:: ds 1 ; 0:abaa
-s0_abab:: ds 1 ; 0:abab
-s0_abac:: ds 1 ; 0:abac
-s0_abad:: ds 1 ; 0:abad
-s0_abae:: ds 1 ; 0:abae
-s0_abaf:: ds 1 ; 0:abaf
-s0_abb0:: ds 1 ; 0:abb0
-s0_abb1:: ds 1 ; 0:abb1
-s0_abb2:: ds 1 ; 0:abb2
-s0_abb3:: ds 1 ; 0:abb3
-s0_abb4:: ds 1 ; 0:abb4
-s0_abb5:: ds 1 ; 0:abb5
-s0_abb6:: ds 1 ; 0:abb6
-s0_abb7:: ds 1 ; 0:abb7
-s0_abb8:: ds 1 ; 0:abb8
-s0_abb9:: ds 1 ; 0:abb9
-s0_abba:: ds 1 ; 0:abba
-s0_abbb:: ds 1 ; 0:abbb
-s0_abbc:: ds 1 ; 0:abbc
-s0_abbd:: ds 1 ; 0:abbd
-s0_abbe:: ds 1 ; 0:abbe
-s0_abbf:: ds 1 ; 0:abbf
-s0_abc0:: ds 1 ; 0:abc0
-s0_abc1:: ds 1 ; 0:abc1
-s0_abc2:: ds 1 ; 0:abc2
-s0_abc3:: ds 1 ; 0:abc3
-s0_abc4:: ds 1 ; 0:abc4
-s0_abc5:: ds 1 ; 0:abc5
-s0_abc6:: ds 1 ; 0:abc6
-s0_abc7:: ds 1 ; 0:abc7
-s0_abc8:: ds 1 ; 0:abc8
-s0_abc9:: ds 1 ; 0:abc9
-s0_abca:: ds 1 ; 0:abca
-s0_abcb:: ds 1 ; 0:abcb
-s0_abcc:: ds 1 ; 0:abcc
-s0_abcd:: ds 1 ; 0:abcd
-s0_abce:: ds 1 ; 0:abce
-s0_abcf:: ds 1 ; 0:abcf
-s0_abd0:: ds 1 ; 0:abd0
-s0_abd1:: ds 1 ; 0:abd1
-s0_abd2:: ds 1 ; 0:abd2
-s0_abd3:: ds 1 ; 0:abd3
-s0_abd4:: ds 1 ; 0:abd4
-s0_abd5:: ds 1 ; 0:abd5
-s0_abd6:: ds 1 ; 0:abd6
-s0_abd7:: ds 1 ; 0:abd7
-s0_abd8:: ds 1 ; 0:abd8
-s0_abd9:: ds 1 ; 0:abd9
-s0_abda:: ds 1 ; 0:abda
-s0_abdb:: ds 1 ; 0:abdb
-s0_abdc:: ds 1 ; 0:abdc
-s0_abdd:: ds 1 ; 0:abdd
-s0_abde:: ds 1 ; 0:abde
-s0_abdf:: ds 1 ; 0:abdf
-s0_abe0:: ds 1 ; 0:abe0
-s0_abe1:: ds 1 ; 0:abe1
+
+; a600
+sPartyMail::
+sPartyMon1Mail:: mailmsg sPartyMon1Mail
+sPartyMon2Mail:: mailmsg sPartyMon2Mail
+sPartyMon3Mail:: mailmsg sPartyMon3Mail
+sPartyMon4Mail:: mailmsg sPartyMon4Mail
+sPartyMon5Mail:: mailmsg sPartyMon5Mail
+sPartyMon6Mail:: mailmsg sPartyMon6Mail
+
+; a71a
+sPartyMailBackup::
+sPartyMon1MailBackup:: mailmsg sPartyMon1MailBackup
+sPartyMon2MailBackup:: mailmsg sPartyMon2MailBackup
+sPartyMon3MailBackup:: mailmsg sPartyMon3MailBackup
+sPartyMon4MailBackup:: mailmsg sPartyMon4MailBackup
+sPartyMon5MailBackup:: mailmsg sPartyMon5MailBackup
+sPartyMon6MailBackup:: mailmsg sPartyMon6MailBackup
+
+; a834
+sMailboxCount:: db
+sMailbox::
+sMailbox1:: mailmsg sMailbox1
+sMailbox2:: mailmsg sMailbox2
+sMailbox3:: mailmsg sMailbox3
+sMailbox4:: mailmsg sMailbox4
+sMailbox5:: mailmsg sMailbox5
+sMailbox6:: mailmsg sMailbox6
+sMailbox7:: mailmsg sMailbox7
+sMailbox8:: mailmsg sMailbox8
+sMailbox9:: mailmsg sMailbox9
+sMailbox10:: mailmsg sMailbox10
+
+; aa0b
+sMailboxCountBackup:: db
+sMailboxBackup::
+sMailbox1Backup:: mailmsg sMailbox1Backup
+sMailbox2Backup:: mailmsg sMailbox2Backup
+sMailbox3Backup:: mailmsg sMailbox3Backup
+sMailbox4Backup:: mailmsg sMailbox4Backup
+sMailbox5Backup:: mailmsg sMailbox5Backup
+sMailbox6Backup:: mailmsg sMailbox6Backup
+sMailbox7Backup:: mailmsg sMailbox7Backup
+sMailbox8Backup:: mailmsg sMailbox8Backup
+sMailbox9Backup:: mailmsg sMailbox9Backup
+sMailbox10Backup:: mailmsg sMailbox10Backup
+
s0_abe2:: ds 1 ; 0:abe2
s0_abe3:: ds 1 ; 0:abe3
s0_abe4:: ds 1 ; 0:abe4
diff --git a/wram.asm b/wram.asm
index de20b3b9..e6608d72 100644
--- a/wram.asm
+++ b/wram.asm
@@ -1999,7 +1999,7 @@ wcc95:: ds 1 ; cc95
wcc96:: ds 1 ; cc96
wcc97:: ds 1 ; cc97
wColorLayoutPredefID:: ds 1 ; cc98
-wcc99:: ds 1 ; cc99
+wPlayerHPPal:: db ; cc99
wcc9a:: ds 1 ; cc9a
wcc9b:: ds 1 ; cc9b
wcc9c:: ds 1 ; cc9c
@@ -2106,8 +2106,12 @@ wJumpTableIndex::
wce64:: ds 1 ; ce64
wce65::
wIntroSceneTimer::
+wCurPocket::
db ; ce65
-wce66:: ds 1 ; ce66
+
+wPackUsedItem::
+wce66::
+ db ; ce66
wRequested2bpp:: ds 1 ; ce67
wRequested2bppSource:: dw ; ce68
@@ -2181,7 +2185,7 @@ wMenuJoypad:: ds 1 ; ceaa
wMenuSelection:: ds 1 ; ceab
wceac:: ds 1 ; ceac
wWhichIndexSet:: ds 1 ; cead
-wceae:: ds 1 ; ceae
+wScrollingMenuCursorPosition:: db ; ceae
wceaf:: ds 1 ; ceaf
wceb0:: ds 1 ; ceb0
wceb1:: ds 1 ; ceb1
@@ -2194,8 +2198,7 @@ wceb7:: ds 1 ; ceb7
wWindowDataEnd::
wMenuHeader::
-wMenuFlags::
-wceb8:: ds 1 ; ceb8
+wMenuFlags:: ds 1 ; ceb8
wMenuBorderTopCoord:: ds 1 ; ceb9
wMenuBorderLeftCoord:: ds 1 ; ceba
wMenuBorderBottomCoord:: ds 1 ; cebb
@@ -2230,15 +2233,25 @@ wced6:: ds 1 ; ced6
wced7:: ds 1 ; ced7
wMenuDataEnd::
-wMenuData3::
-w2DMenuCursorInitY:: ds 1 ; ced8
-wced9:: ds 1 ; ced9
-wceda:: ds 1 ; ceda
-wcedb:: ds 1 ; cedb
-w2DMenuFlags1:: ds 1 ; cedc
-wcedd:: ds 1 ; cedd
-wcede:: ds 1 ; cede
-wMenuJoypadFilter:: ds 1 ; cedf
+w2DMenuData::
+w2DMenuCursorInitY:: db ; ced8
+w2DMenuCursorInitX:: db ; ced9
+w2DMenuNumRows:: db ; ceda
+w2DMenuNumCols:: db ; cedb
+w2DMenuFlags1:: ; cedc
+; bit 7: Disable checking of wMenuJoypadFilter
+; bit 6: Enable sprite animations
+; bit 5: Wrap around vertically
+; bit 4: Wrap around horizontally
+; bit 3: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 5 is disabled and we tried to go too far down
+; bit 2: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 5 is disabled and we tried to go too far up
+; bit 1: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 4 is disabled and we tried to go too far left
+; bit 0: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 4 is disabled and we tried to go too far right
+ db
+w2DMenuFlags2:: db ; cedd
+w2DMenuCursorOffsets:: db ; cede
+wMenuJoypadFilter:: db ; cedf
+w2DMenuDataEnd::
wMenuCursorY:: ds 1 ; cee0
wcee1:: ds 1 ; cee1
wcee2:: ds 1 ; cee2
@@ -2256,27 +2269,41 @@ wVBlankOccurred:: ds 1 ; ceea
wceeb:: ds 1 ; ceeb
wceec:: ds 1 ; ceec
-wMovementBufferCount:: ; ceed
+UNION ; ceed
+; mail temp storage
+wTempMail:: mailmsg wTempMail
+
+NEXTU ; ceed
+; bug-catching contest
+wBugContestResults::
+ bugcontestwinner wBugContestFirstPlace
+ bugcontestwinner wBugContestSecondPlace
+ bugcontestwinner wBugContestThirdPlace
+wBugContestWinnersEnd::
+ bugcontestwinner wBugContestTemp
+ ds 4
+wBugContestWinnerName:: ds NAME_LENGTH
+
+NEXTU ; ceed
+; movement buffer data
+wMovementBufferCount:: db
+wMovementBufferObject:: db
+wUnusedMovementBufferBank:: db
+wUnusedMovementBufferPointer:: dw
+wMovementBuffer:: ds 55
+
+NEXTU ; ceed
+; unidentified
wceed:: ds 1 ; ceed
-
-wMovementBufferObject::
wceee:: ds 1 ; ceee
-
-wTemporaryBuffer::
-wBugContestFirstPlaceScore::
wceef:: ds 1 ; ceef
wcef0:: ds 1 ; cef0
wcef1:: ds 1 ; cef1
-
-wMovementBuffer::
wcef2:: ds 1 ; cef2
-
-wBugContestSecondPlaceScore::
wcef3:: ds 1 ; cef3
wcef4:: ds 1 ; cef4
wcef5:: ds 1 ; cef5
wcef6:: ds 1 ; cef6
-wBugContestThirdPlaceScore::
wcef7:: ds 1 ; cef7
wcef8:: ds 1 ; cef8
wcef9:: ds 1 ; cef9
@@ -2287,7 +2314,6 @@ wcefd:: ds 1 ; cefd
wcefe:: ds 1 ; cefe
wceff:: ds 1 ; ceff
wcf00:: ds 1 ; cf00
-wBugContestWinnerName::
wcf01:: ds 1 ; cf01
wcf02:: ds 1 ; cf02
wcf03:: ds 1 ; cf03
@@ -2328,33 +2354,97 @@ wcf25:: ds 1 ; cf25
wcf26:: ds 1 ; cf26
wcf27:: ds 1 ; cf27
wcf28:: ds 1 ; cf28
-wSeenTrainerBank::
-wcf29:: ds 1 ; cf29
-wSeenTrainerDistance::
-wcf2a:: ds 1 ; cf2a
-wSeenTrainerDirection::
-wcf2b:: ds 1 ; cf2b
+
+UNION ; cf29
+; trainer data
+wSeenTrainerBank:: db
+wSeenTrainerDistance:: db
+wSeenTrainerDirection:: db
wTempTrainer::
-wcf2c:: ds 1 ; cf2c
-wcf2d:: ds 1 ; cf2d
-wcf2e:: ds 1 ; cf2e
-wcf2f:: ds 1 ; cf2f
-wcf30:: ds 1 ; cf30
-wcf31:: ds 1 ; cf31
-wWinTextPointer:: dw ; cf32
-wLossTextPointer:: dw ; cf34
-wcf36:: ds 1 ; cf36
-wcf37:: ds 1 ; cf37
-wRunningTrainerBattleScript::
-wcf38:: ds 1 ; cf38
+wTempTrainerEventFlag:: dw
+wTempTrainerClass:: db
+wTempTrainerID:: db
+wSeenTextPointer:: dw
+wWinTextPointer:: dw
+wLossTextPointer:: dw
+wScriptAfterPointer:: dw
+wRunningTrainerBattleScript:: db
wTempTrainerEnd::
-wcf39:: ds 1 ; cf39
-wcf3a:: ds 1 ; cf3a
-wcf3b:: ds 1 ; cf3b
-wcf3c:: ds 1 ; cf3c
-wcf3d:: ds 1 ; cf3d
-wcf3e:: ds 1 ; cf3e
-wcf3f:: ds 1 ; cf3f
+
+NEXTU ; cf29
+; menu items list
+wMenuItemsList:: ds 16
+wMenuItemsListEnd::
+
+NEXTU ; cf29
+; item ball data
+wItemBallData::
+wItemBallItemID:: db
+wItemBallQuantity:: db
+wItemBallDataEnd::
+
+NEXTU ; cf29
+; hidden item data
+wHiddenItemData::
+wHiddenItemEvent:: dw
+wHiddenItemID:: db
+wHiddenItemDataEnd::
+
+NEXTU ; cf29
+; elevator data
+wElevatorData::
+wElevatorPointerBank:: db
+wElevatorPointer:: dw
+wElevatorOriginFloor:: db
+wElevatorDataEnd::
+
+NEXTU ; cf29
+; coord event data
+wCurCoordEvent::
+wCurCoordEventSceneID:: db
+wCurCoordEventMapY:: db
+wCurCoordEventMapX:: db
+ ds 1
+wCurCoordEventScriptAddr:: dw
+
+NEXTU ; cf29
+; BG event data
+wCurBGEvent::
+wCurBGEventYCoord:: db
+wCurBGEventXCoord:: db
+wCurBGEventType:: db
+wCurBGEventScriptAddr:: dw
+
+NEXTU ; cf29
+; player movement data
+wCurInput::
+wFacingTileID:: db
+wWalkingIntoNPC:: db
+wWalkingIntoLand:: db
+wWalkingIntoEdgeWarp:: db
+wMovementAnimation:: db
+wWalkingDirection:: db
+wFacingDirection:: db
+wWalkingX:: db
+wWalkingY:: db
+wWalkingTile:: db
+ ds 6
+wPlayerTurningDirection:: db
+
+NEXTU ; cf29
+; std script buffer
+ ds 1
+wJumpStdScriptBuffer:: ds 3
+ENDU
+
+wcf3a:: ds 1
+wcf3b:: ds 1
+wcf3c:: ds 1
+wcf3d:: ds 1
+wcf3e:: ds 1
+wcf3f:: ds 1
+ENDU
+
wcf40:: ds 1 ; cf40
wcf41:: ds 1 ; cf41
wcf42:: ds 1 ; cf42
@@ -2407,7 +2497,8 @@ wStringBuffer4:: ds 19 ; cfa4
UNION
wStringBuffer5:: ds 19 ; cfb7
NEXTU
- ds 15
+ ds 13
+wBattleMenuCursorBuffer:: dw ; cfc4
wCurBattleMon:: ds 1 ; cfc6
wcfc7:: ds 1 ; cfc7
wcfc8:: ds 1 ; cfc8
@@ -2423,20 +2514,25 @@ wcfcf:: ds 1 ; cfcf
wcfd0:: ds 1 ; cfd0
wcfd1:: ds 1 ; cfd1
wcfd2:: ds 1 ; cfd2
-wcfd3:: ds 1 ; cfd3
-wcfd4:: ds 1 ; cfd4
+
+wSwitchMon::
+wSwitchItem::
+wMoveSwapBuffer::
+wcfd3::
+ db ; cfd3
+
+wMenuScrollPosition:: ds 1 ; cfd4
wcfd5:: ds 1 ; cfd5
wcfd6:: ds 1 ; cfd6
wcfd7:: ds 1 ; cfd7
-wQueuedScriptBank:: ds 1 ; cfd8
-wQueuedScriptAddr:: ds 1 ; cfd9
-wcfda:: ds 1 ; cfda
+wQueuedScriptBank:: db ; cfd8
+wQueuedScriptAddr:: dw ; cfd9
wPredefID:: ds 1 ; cfdb
wPredefTemp:: dw ; cfdc
wPredefAddress:: dw ; cfde
wFarCallBCBuffer:: dw ; cfe0
wcfe2:: ds 1 ; cfe2
-wcfe3:: ds 1 ; cfe3
+wNumMoves:: ds 1 ; cfe3
wFieldMoveSucceeded::
wItemEffectSucceeded::
@@ -2449,8 +2545,8 @@ wcfe8:: ds 1 ; cfe8
wBattleResult:: ds 1 ; cfe9
wcfea:: ds 1 ; cfea
wUsingItemWithSelect:: ds 1 ; cfeb
-wcfec:: ds 1 ; cfec
-wcfed:: ds 1 ; cfed
+wCurElevator:: db ; cfec
+wCurElevatorFloors:: ds 1 ; cfed
wcfee:: ds 1 ; cfee
wcfef:: ds 1 ; cfef
wcff0:: ds 1 ; cff0
@@ -2473,8 +2569,8 @@ wcfff:: ds 1 ; cfff
SECTION "WRAM1", WRAMX, BANK[$1]
wd000:: ds 1 ; d000
wd001:: ds 1 ; d001
-wd002:: ds 1 ; d002
-wd003:: ds 1 ; d003
+wCurItem:: db ; d002
+wCurItemQuantity:: db ; d003
wCurPartySpecies:: ; d004
ds 1
@@ -2751,20 +2847,32 @@ wd145:: ds 1 ; d145
wd146:: ds 1 ; d146
wd147:: ds 1 ; d147
wd148:: ds 1 ; d148
-wd149:: ds 1 ; d149
-wd14a:: ds 1 ; d14a
-wd14b:: ds 1 ; d14b
-wd14c:: ds 1 ; d14c
-wd14d:: ds 1 ; d14d
+wListMoves_MoveIndicesBuffer:: ds NUM_MOVES
+wPutativeTMHMMove:: db ; d14d
wd14e:: ds 1 ; d14e
wWildMon:: ds 1 ; d14f
wd150:: ds 1 ; d150
-wTempNumBuffer::
+
+; d265 has many different short-term uses
wNamedObjectIndexBuffer::
wDeciramBuffer::
-wBreedingCompatibility::
+wTempByteValue::
wNumSetBits::
-wd151:: ds 1 ; d151
+wTypeMatchup::
+wCurType::
+wTempSpecies::
+wTempIconSpecies::
+wTempTMHM::
+wTempPP::
+wNextBoxOrPartyIndex::
+wChosenCableClubRoom::
+wBreedingCompatibility::
+wMoveGrammar::
+wApplyStatLevelMultipliersToEnemy::
+wUsePPUp::
+wd151::
+ db ; d151
+
wd152:: ds 1 ; d152
wd153:: ds 1 ; d153
wd154:: ds 1 ; d154