summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--audio/engine.asm2
-rw-r--r--constants.asm2
-rw-r--r--constants/map_object_constants.asm4
-rw-r--r--constants/script_constants.asm20
-rw-r--r--constants/text_constants.asm4
-rw-r--r--constants/wram_constants.asm73
-rw-r--r--contents.asm130
-rw-r--r--data/pokemon/egg_moves.asm1
-rw-r--r--data/pokemon/evos_attacks.asm1
-rwxr-xr-xengine/anim_hp_bar.asm22
-rw-r--r--engine/billspctop.asm26
-rwxr-xr-xengine/color.asm136
-rwxr-xr-xengine/events/misc_scripts_2.asm2
-rwxr-xr-xengine/events/overworld.asm32
-rwxr-xr-xengine/events/std_collision.asm2
-rwxr-xr-xengine/events/whiteout.asm4
-rwxr-xr-xengine/health.asm27
-rwxr-xr-xengine/items.asm8
-rw-r--r--engine/learn.asm8
-rwxr-xr-xengine/main_menu.asm80
-rwxr-xr-xengine/math.asm162
-rwxr-xr-xengine/move_mon.asm112
-rwxr-xr-xengine/movement_pattern.asm16
-rw-r--r--engine/movie/gamefreak_presents.asm38
-rw-r--r--engine/namingscreen.asm64
-rwxr-xr-xengine/overworld/map_object_action.asm2
-rwxr-xr-xengine/overworld/map_objects.asm78
-rwxr-xr-xengine/overworld/movement.asm16
-rwxr-xr-xengine/overworld/npc_movement.asm22
-rwxr-xr-xengine/overworld/player_movement.asm14
-rwxr-xr-xengine/overworld/player_object.asm48
-rwxr-xr-xengine/overworld/player_step.asm8
-rwxr-xr-xengine/overworld/time.asm18
-rwxr-xr-xengine/pack.asm54
-rw-r--r--engine/sine.asm2
-rwxr-xr-xengine/specials.asm10
-rwxr-xr-xengine/sprites.asm2
-rwxr-xr-xengine/title.asm56
-rwxr-xr-xengine/variables.asm2
-rw-r--r--gfx/pics/animation.asm1146
-rw-r--r--home.asm1855
-rwxr-xr-xhome/array.asm44
-rw-r--r--home/audio.asm4
-rw-r--r--home/battle.asm229
-rwxr-xr-xhome/battle_vars.asm111
-rwxr-xr-xhome/call_regs.asm8
-rwxr-xr-xhome/clear_sprites.asm23
-rwxr-xr-xhome/compare.asm35
-rw-r--r--home/copy.asm262
-rw-r--r--home/copy2.asm53
-rwxr-xr-xhome/copy_name.asm13
-rwxr-xr-xhome/copy_tilemap.asm21
-rw-r--r--home/cry.asm75
-rw-r--r--home/decompress.asm33
-rw-r--r--home/delay.asm23
-rw-r--r--home/fade.asm67
-rw-r--r--home/farcall.asm19
-rw-r--r--home/flag.asm67
-rw-r--r--home/game_time.asm44
-rw-r--r--home/gfx.asm286
-rwxr-xr-xhome/header.asm66
-rwxr-xr-xhome/hm_moves.asm25
-rw-r--r--home/init.asm133
-rwxr-xr-xhome/interrupts.asm16
-rw-r--r--home/item.asm28
-rw-r--r--home/joypad.asm321
-rw-r--r--home/lcd.asm51
-rw-r--r--home/map.asm194
-rw-r--r--home/map_objects.asm398
-rw-r--r--home/math.asm49
-rw-r--r--home/menu.asm587
-rw-r--r--home/movement.asm60
-rwxr-xr-xhome/names.asm268
-rw-r--r--home/palettes.asm228
-rw-r--r--home/pokedex_flags.asm39
-rwxr-xr-xhome/pokemon.asm292
-rw-r--r--home/predef.asm2
-rwxr-xr-xhome/print_bcd.asm79
-rwxr-xr-xhome/print_num.asm304
-rwxr-xr-xhome/print_text.asm166
-rw-r--r--home/printer.asm (renamed from home/handshake.asm)16
-rwxr-xr-xhome/queue_script.asm12
-rw-r--r--home/random.asm61
-rwxr-xr-xhome/region.asm94
-rw-r--r--home/rst.asm37
-rwxr-xr-xhome/scrolling_menu.asm61
-rw-r--r--home/serial.asm277
-rw-r--r--home/sine.asm9
-rwxr-xr-xhome/sprite_anims.asm31
-rwxr-xr-xhome/sprite_updates.asm19
-rw-r--r--home/sram.asm17
-rwxr-xr-xhome/stone_queue.asm137
-rw-r--r--home/string.asm28
-rw-r--r--home/text.asm185
-rwxr-xr-xhome/tilemap.asm433
-rw-r--r--home/time.asm197
-rw-r--r--home/time_palettes.asm (renamed from home/rtc.asm)12
-rwxr-xr-xhome/trainers.asm254
-rw-r--r--home/vblank.asm201
-rw-r--r--home/video.asm211
-rw-r--r--home/window.asm75
-rwxr-xr-xhram.asm297
-rwxr-xr-xitems/item_effects.asm84
-rwxr-xr-xmacros/coords.asm8
-rw-r--r--main.asm103
-rw-r--r--maps/AzaleaGym.asm2
-rw-r--r--maps/BlackthornGym1F.asm2
-rw-r--r--maps/CeladonCafe.asm4
-rw-r--r--maps/CeladonDeptStore6F.asm6
-rw-r--r--maps/CeladonGameCorner.asm2
-rw-r--r--maps/CeladonGameCornerPrizeRoom.asm12
-rw-r--r--maps/CeladonGym.asm2
-rw-r--r--maps/CeruleanGym.asm2
-rw-r--r--maps/CherrygroveCity.asm2
-rw-r--r--maps/CianwoodGym.asm2
-rw-r--r--maps/DragonsDenB1F.asm4
-rw-r--r--maps/EcruteakGym.asm2
-rw-r--r--maps/ElmsLab.asm8
-rw-r--r--maps/FuchsiaGym.asm2
-rw-r--r--maps/GoldenrodDeptStore6F.asm6
-rw-r--r--maps/GoldenrodGameCorner.asm18
-rw-r--r--maps/GoldenrodGym.asm2
-rw-r--r--maps/LavRadioTower1F.asm2
-rw-r--r--maps/MahoganyGym.asm2
-rw-r--r--maps/NationalPark.asm4
-rw-r--r--maps/OlivineGym.asm2
-rw-r--r--maps/OlivineLighthouse2F.asm2
-rw-r--r--maps/PewterGym.asm2
-rw-r--r--maps/PlayersHouse1F.asm2
-rw-r--r--maps/RadioTower1F.asm2
-rw-r--r--maps/Route26.asm4
-rw-r--r--maps/Route27.asm4
-rw-r--r--maps/Route30.asm2
-rw-r--r--maps/Route31.asm2
-rw-r--r--maps/Route32.asm4
-rw-r--r--maps/Route33.asm2
-rw-r--r--maps/Route34.asm4
-rw-r--r--maps/Route35.asm4
-rw-r--r--maps/Route35NationalParkGate.asm2
-rw-r--r--maps/Route36.asm2
-rw-r--r--maps/Route36NationalParkGate.asm2
-rw-r--r--maps/Route38.asm4
-rw-r--r--maps/Route39.asm2
-rw-r--r--maps/Route42.asm2
-rw-r--r--maps/Route43.asm4
-rw-r--r--maps/Route44.asm4
-rw-r--r--maps/Route45.asm4
-rw-r--r--maps/Route46.asm2
-rw-r--r--maps/SaffronGym.asm2
-rw-r--r--maps/TrainerHouseB1F.asm4
-rw-r--r--maps/VermilionGym.asm2
-rw-r--r--maps/VioletGym.asm2
-rw-r--r--maps/VioletPokecenter1F.asm2
-rw-r--r--maps/ViridianGym.asm2
-rw-r--r--pokegold.link5
-rw-r--r--pokesilver.link5
-rwxr-xr-xpredef/cgb.asm130
-rw-r--r--wram.asm88
159 files changed, 6071 insertions, 6216 deletions
diff --git a/Makefile b/Makefile
index 212efd54..a8309730 100644
--- a/Makefile
+++ b/Makefile
@@ -43,10 +43,10 @@ $(foreach obj, $(gold_obj), $(eval $(call DEP,$(obj),$(obj:_gold.o=.asm))))
$(foreach obj, $(silver_obj), $(eval $(call DEP,$(obj),$(obj:_silver.o=.asm))))
$(gold_obj): %_gold.o: %.asm $$(dep)
- rgbasm -D GOLD -o $@ $<
+ rgbasm -D GOLD -L -o $@ $<
$(silver_obj): %_silver.o: %.asm $$(dep)
- rgbasm -D SILVER -o $@ $<
+ rgbasm -D SILVER -L -o $@ $<
pokegold.gbc: $(gold_obj)
rgblink -n pokegold.sym -m pokegold.map -l pokegold.link -o $@ $^
diff --git a/audio/engine.asm b/audio/engine.asm
index 6b0fe1a6..d749bdb4 100644
--- a/audio/engine.asm
+++ b/audio/engine.asm
@@ -2797,7 +2797,7 @@ ChannelPointers:
ClearChannels::
; runs ClearChannel for all 4 channels
-; doesn't seem to be used, but functionally identical to MapSetup_Sound_Off
+; doesn't seem to be used, but functionally identical to InitSound
ld hl, rNR50
xor a
ld [hli], a
diff --git a/constants.asm b/constants.asm
index 4b3402e9..0dd77e29 100644
--- a/constants.asm
+++ b/constants.asm
@@ -2,8 +2,6 @@ INCLUDE "charmap.asm"
INCLUDE "macros.asm"
-INCLUDE "hram.asm"
-
INCLUDE "constants/hardware_constants.asm"
INCLUDE "constants/wram_constants.asm"
INCLUDE "constants/sram_constants.asm"
diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm
index 55a3f358..6a6cec59 100644
--- a/constants/map_object_constants.asm
+++ b/constants/map_object_constants.asm
@@ -34,7 +34,7 @@
const OBJECT_1F ; 1f
const OBJECT_RANGE ; 20
; 21-27 are not used
-OBJECT_STRUCT_LENGTH EQU 40
+OBJECT_LENGTH EQU 40
NUM_OBJECT_STRUCTS EQU 13 ; see wObjectStructs
; object_struct OBJECT_FACING values
@@ -111,7 +111,7 @@ ABSOLUTE_TILE_ID EQU 1 << ABSOLUTE_TILE_ID_F
const MAPOBJECT_FLAG_HI ; d
const MAPOBJECT_E ; unused
const MAPOBJECT_F ; unused
-OBJECT_LENGTH EQU const_value
+MAPOBJECT_LENGTH EQU const_value
; SpriteMovementData struct members (see data/sprites/map_objects.asm)
const_def
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index b0db4e70..989306d0 100644
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -1,13 +1,13 @@
-; script vars
+; person constants
PLAYER EQU 0
LAST_TALKED EQU -2
-; memory constants
+; string buffer constants
const_def
- const MEM_BUFFER_0 ; use wStringBuffer3
- const MEM_BUFFER_1 ; use wStringBuffer4
- const MEM_BUFFER_2 ; use wStringBuffer5
-NUM_MEM_BUFFERS EQU const_value
+ const STRING_BUFFER_3 ; use wStringBuffer3
+ const STRING_BUFFER_4 ; use wStringBuffer4
+ const STRING_BUFFER_5 ; use wStringBuffer5
+NUM_STRING_BUFFERS EQU const_value
; checkmoney/takemoney accounts
const_def
@@ -80,6 +80,14 @@ const_value SET -1
const PLAYEREVENT_JOYCHANGEFACING
NUM_PLAYER_EVENTS EQU const_value
+; script data sizes (see macros/scripts/maps.asm)
+SCENE_SCRIPT_SIZE EQU 4 ; scene_script
+CALLBACK_SIZE EQU 3 ; callback
+WARP_EVENT_SIZE EQU 5 ; warp_event
+COORD_EVENT_SIZE EQU 8 ; coord_event
+BG_EVENT_SIZE EQU 5 ; bg_event
+OBJECT_EVENT_SIZE EQU 13 ; object_event
+
; bg_event types
; TryBGEvent arguments (see engine/overworld/events.asm)
const_def
diff --git a/constants/text_constants.asm b/constants/text_constants.asm
index ee558956..745fb52c 100644
--- a/constants/text_constants.asm
+++ b/constants/text_constants.asm
@@ -33,12 +33,12 @@ TEXTBOX_INNERY EQU TEXTBOX_Y + 2
; PrintNum bit flags
const_def 5
const PRINTNUM_MONEY_F ; 5
- const PRINTNUM_RIGHTALIGN_F ; 6
+ const PRINTNUM_LEFTALIGN_F ; 6
const PRINTNUM_LEADINGZEROS_F ; 7
; PrintNum arguments (see engine/math/print_num.asm)
PRINTNUM_MONEY EQU 1 << PRINTNUM_MONEY_F
-PRINTNUM_RIGHTALIGN EQU 1 << PRINTNUM_RIGHTALIGN_F
+PRINTNUM_LEFTALIGN EQU 1 << PRINTNUM_LEFTALIGN_F
PRINTNUM_LEADINGZEROS EQU 1 << PRINTNUM_LEADINGZEROS_F
; character sets (see charmap.asm)
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm
index 656d2ef5..7cdebc05 100644
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -1,25 +1,43 @@
; InputType: ; c2c7
AUTO_INPUT EQU $ff
-; MonType: ; cf5f
-PARTYMON EQU 0
-OTPARTYMON EQU 1
-BOXMON EQU 2
-TEMPMON EQU 3
-WILDMON EQU 4
-
-; wOptions: ; cfcc
-FAST_TEXT EQU 0
-MED_TEXT EQU 1
-SLOW_TEXT EQU 2
-NO_TEXT_SCROLL EQU 4
-; bits
-STEREO EQU 5
-BATTLE_SHIFT EQU 6
-BATTLE_SCENE EQU 7
-
-; Options2:
-MENU_ACCOUNT EQU 0
+; wDebugFlags:: ; c2cc
+ const_def
+ const DEBUG_BATTLE_F
+ const DEBUG_FIELD_F
+
+; wMonType:: ; cf5f
+ const_def
+ const PARTYMON ; 0
+ const OTPARTYMON ; 1
+ const BOXMON ; 2
+ const TEMPMON ; 3
+ const WILDMON ; 4
+
+; wGameTimerPause:: ; cfbc
+GAMETIMERPAUSE_TIMER_PAUSED_F EQU 0
+GAMETIMERPAUSE_MOBILE_7_F EQU 7
+
+; wOptions:: ; cfcc
+TEXT_DELAY_MASK EQU %111
+ const_def 4
+ const NO_TEXT_SCROLL ; 4
+ const STEREO ; 5
+ const BATTLE_SHIFT ; 6
+ const BATTLE_SCENE ; 7
+
+TEXT_DELAY_FAST EQU %001 ; 1
+TEXT_DELAY_MED EQU %011 ; 3
+TEXT_DELAY_SLOW EQU %101 ; 5
+
+; wOptions2::
+ const_def
+ const MENU_ACCOUNT ; 0
+
+; wTextboxFlags::
+ const_def
+ const FAST_TEXT_DELAY_F ; 0
+ const NO_TEXT_DELAY_F ; 1
; GBPrinter:
PRINT_LIGHTEST EQU $00
@@ -29,11 +47,18 @@ PRINT_DARKER EQU $60
PRINT_DARKEST EQU $7f
; WalkingDirection: ; d043
-STANDING EQU -1
-DOWN EQU 0
-UP EQU 1
-LEFT EQU 2
-RIGHT EQU 3
+ const_def -1
+ const STANDING ; -1
+ const DOWN ; 0
+ const UP ; 1
+ const LEFT ; 2
+ const RIGHT ; 3
+NUM_DIRECTIONS EQU const_value
+
+DOWN_MASK EQU 1 << DOWN
+UP_MASK EQU 1 << UP
+LEFT_MASK EQU 1 << LEFT
+RIGHT_MASK EQU 1 << RIGHT
; FacingDirection: ; d044
FACE_CURRENT EQU 0
diff --git a/contents.asm b/contents.asm
deleted file mode 100644
index 5d65c938..00000000
--- a/contents.asm
+++ /dev/null
@@ -1,130 +0,0 @@
-; Doubles as bank constants.
-
-; main.o
-
-ROOFS EQU $7
-TILESETS_1 EQU $6
-TILESETS_2 EQU $7
-TILESETS_3 EQU $8
-TILESETS_4 EQU $C
-TILESETS_5 EQU $2D
-TILESETS_6 EQU $37
-TILESETS_7 EQU $77
-TILESETS_8 EQU $78
-
-
-; data/pokemon/egg_moves.o
-
-EGG_MOVES EQU $8
-
-
-; data/pokemon/evos_attacks.o
-
-EVOS_ATTACKS EQU $10
-
-
-; data/pokedex/entries.o
-
-POKEDEX_ENTRIES_1 EQU $60
-POKEDEX_ENTRIES_2 EQU $6E
-POKEDEX_ENTRIES_3 EQU $73
-POKEDEX_ENTRIES_4 EQU $74
-
-
-; engine/events.o
-; engine/scripting.o
-; engine/events_2.o
-EVENTS EQU $25
-
-
-; engine/credits.o
-
-CREDITS EQU $42
-
-
-; gfx/pics.o
-
-PIC_POINTERS EQU $48
-UNOWN_PIC_POINTERS EQU $49
-TRAINER_PIC_POINTERS EQU $4A
-
-PICS_FIX EQU $36
-
-PICS_1 EQU $48
-PICS_2 EQU $49
-PICS_3 EQU $4A
-PICS_4 EQU $4B
-PICS_5 EQU $4C
-PICS_6 EQU $4D
-PICS_7 EQU $4E
-PICS_8 EQU $4F
-PICS_9 EQU $50
-PICS_10 EQU $51
-PICS_11 EQU $52
-PICS_12 EQU $53
-PICS_13 EQU $54
-PICS_14 EQU $55
-PICS_15 EQU $56
-PICS_16 EQU $57
-PICS_17 EQU $58
-PICS_18 EQU $59
-PICS_19 EQU $5A
-
-
-; maps.o
-
-MAP_HEADERS EQU $25
-
-MAPS_1 EQU $2A
-MAPS_2 EQU $2B
-MAPS_3 EQU $2C
-
-MAP_SCRIPTS_1 EQU $15
-MAP_SCRIPTS_2 EQU $16
-MAP_SCRIPTS_3 EQU $17
-MAP_SCRIPTS_4 EQU $18
-MAP_SCRIPTS_5 EQU $1A
-MAP_SCRIPTS_6 EQU $1B
-MAP_SCRIPTS_7 EQU $1C
-MAP_SCRIPTS_8 EQU $1D
-MAP_SCRIPTS_9 EQU $1E
-MAP_SCRIPTS_10 EQU $1F
-MAP_SCRIPTS_11 EQU $26
-MAP_SCRIPTS_12 EQU $27
-MAP_SCRIPTS_13 EQU $60
-MAP_SCRIPTS_14 EQU $61
-MAP_SCRIPTS_15 EQU $62
-MAP_SCRIPTS_16 EQU $63
-MAP_SCRIPTS_17 EQU $64
-MAP_SCRIPTS_18 EQU $65
-MAP_SCRIPTS_19 EQU $66
-MAP_SCRIPTS_20 EQU $67
-MAP_SCRIPTS_21 EQU $68
-MAP_SCRIPTS_22 EQU $69
-MAP_SCRIPTS_23 EQU $6A
-MAP_SCRIPTS_24 EQU $6B
-MAP_SCRIPTS_25 EQU $6C
-
-
-; audio.o
-
-AUDIO EQU $3A
-
-SONGS_1 EQU $3A
-SONGS_2 EQU $3B
-SONGS_3 EQU $3C
-SONGS_4 EQU $3D
-SONGS_5 EQU $5E
-
-EXTRA_SONGS_1 EQU $7
-EXTRA_SONGS_2 EQU $33
-
-SOUND_EFFECTS EQU $3C
-CRYSTAL_SOUND_EFFECTS EQU $5E
-
-CRIES EQU $3C
-
-
-; misc.o
-
-MISC_CRYSTAL EQU $5E
diff --git a/data/pokemon/egg_moves.asm b/data/pokemon/egg_moves.asm
index 3e353ba4..a31a6d23 100644
--- a/data/pokemon/egg_moves.asm
+++ b/data/pokemon/egg_moves.asm
@@ -1,4 +1,3 @@
-INCLUDE "contents.asm"
INCLUDE "constants.asm"
SECTION "Egg Moves", ROMX, BANK[EGG_MOVES]
diff --git a/data/pokemon/evos_attacks.asm b/data/pokemon/evos_attacks.asm
index 8fc93897..dcacee0d 100644
--- a/data/pokemon/evos_attacks.asm
+++ b/data/pokemon/evos_attacks.asm
@@ -1,4 +1,3 @@
-INCLUDE "contents.asm"
INCLUDE "constants.asm"
SECTION "Evolutions and Attacks", ROMX, BANK[EVOS_ATTACKS]
diff --git a/engine/anim_hp_bar.asm b/engine/anim_hp_bar.asm
index 29afa8ed..561cba42 100755
--- a/engine/anim_hp_bar.asm
+++ b/engine/anim_hp_bar.asm
@@ -277,7 +277,7 @@ Functiond78a: ; d78a (3:578a)
ret
Functiond7ba: ; d7ba (3:57ba)
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret z
ld hl, wCurHPAnimPal
@@ -290,7 +290,7 @@ Functiond7ba: ; d7ba (3:57ba)
ret
Functiond7cf: ; d7cf (3:57cf)
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr nz, .asm_d7db
call DelayFrame
@@ -318,15 +318,15 @@ Functiond7cf: ; d7cf (3:57cf)
cp $5
jr z, .asm_d805
ld a, $2
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, c
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call DelayFrame
.asm_d805
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, c
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call DelayFrame
pop af
cp $2
@@ -338,14 +338,14 @@ Functiond7cf: ; d7cf (3:57cf)
.asm_d819
inc c
ld a, $2
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, c
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call DelayFrame
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, c
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call DelayFrame
ret
@@ -358,7 +358,7 @@ Functiond7cf: ; d7cf (3:57cf)
.asm_d835
call DelayFrame
ld a, c
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call DelayFrame
ret
diff --git a/engine/billspctop.asm b/engine/billspctop.asm
index 65403656..b0ec59a5 100644
--- a/engine/billspctop.asm
+++ b/engine/billspctop.asm
@@ -10,7 +10,7 @@ BillsPC_CheckHavePokemon: ; e3e5 (3:63e5)
and a
ret nz
ld hl, Text_GottaHavePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -20,8 +20,8 @@ Text_GottaHavePokemon:
BillsPC_LogIn: ; e3f7 (3:63f7)
xor a
- ld [hBGMapMode], a
- call LoadStandardMenuDataHeader
+ ldh [hBGMapMode], a
+ call LoadStandardMenuHeader
call Functione566
ld hl, wOptions
ld a, [hl]
@@ -44,14 +44,14 @@ BillsPC_LogOut: ; e41a (3:641a)
BillsPC_UsePC: ; e41e (3:641e)
ld hl, BillsPC_TopMenuDataHeader
- call LoadMenuDataHeader
+ call LoadMenuHeader
ld a, $1
.asm_e426
ld [wMenuCursorBuffer], a
call SetPalettes
xor a
ld [wWhichIndexSet], a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call DoNthMenu
jr c, .asm_e446
ld a, [wMenuCursorBuffer]
@@ -104,7 +104,7 @@ BillsPC_SeeYa:
ret
BillsPC_MovePKMNMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall IsAnyPokemonHoldingMail ; 11:488c
jr nc, .asm_e4bb
ld hl, Text_PleaseRemoveMailBeforeMovePkmnWOMail
@@ -127,7 +127,7 @@ Text_PleaseRemoveMailBeforeMovePkmnWOMail:
db "@"
BillsPC_DepositMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall DepositPokemon_ ; 38:6b9e
call ReturnToMapFromSubmenu
call Functione566
@@ -146,13 +146,13 @@ Functione4ed:
.asm_e4f9
ld hl, Text_YouDontHaveASinglePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
.asm_e501
ld hl, Text_ItsYourLastPokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -193,7 +193,7 @@ CheckCurPartyMonFainted: ; e513 (3:6513)
ret
BillsPC_WithdrawMenu:
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
farcall WithdrawPokemon_ ; 38:6d71
call ReturnToMapFromSubmenu
call Functione566
@@ -210,7 +210,7 @@ Functione548:
.asm_e551
ld hl, Text_CantTakeAnyMorePokemon
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -226,7 +226,7 @@ BillsPC_ChangeBoxMenu:
Functione566: ; e566 (3:6566)
call DisableSpriteUpdates
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call ClearBGPalettes
call ClearSprites
hlcoord 0, 0
@@ -239,7 +239,7 @@ Functione566: ; e566 (3:6566)
hlcoord 0, 12
ld bc, IncGradGBPalTable_13
call Textbox
- call Function3456
+ call WaitBGMap2
call SetPalettes
ret
diff --git a/engine/color.asm b/engine/color.asm
index 25f7179b..05c13b2b 100755
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -130,7 +130,7 @@ Function9102:
call CopyBytes
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
.BGPal:
@@ -148,7 +148,7 @@ Function9102:
Function9136:
call CheckCGB
ret nz
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
ret z
ld hl, BlkPacket_9ee5
@@ -157,7 +157,7 @@ Function9136:
Function9144:
call CheckCGB
jr nz, .asm_9153
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
ret z
ld hl, PalPacket_a095
@@ -172,7 +172,7 @@ Function9144:
Function915e:
call CheckCGB
jr nz, .asm_916d
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
ret z
ld hl, PalPacket_a0a5
@@ -187,7 +187,7 @@ Function915e:
Function9178:
call CheckCGB
jr nz, .asm_91a9
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
ret z
ld a, c
@@ -217,7 +217,7 @@ Function9178:
ret
Function91b4:
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr nz, .asm_91bf
ld hl, wc602
@@ -227,7 +227,7 @@ Function91b4:
ld a, [wc606]
ld c, a
ld a, [wc607]
- ld hl, wAttrMap
+ ld hl, wAttrmap
ld de, $14
.asm_91cc
and a
@@ -243,7 +243,7 @@ Function91b4:
ld a, [wc605]
and $3
call Function9af1
- call LoadEDTile
+ call CopyTilemapAtOnce
ret
ApplyMonOrTrainerPals: ; 91e5 (2:51e5)
@@ -293,13 +293,13 @@ ApplyHPBarPals:
ld bc, $4
call CopyBytes
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
.asm_9236
ld e, c
inc e
- hlcoord 11, 1, wAttrMap
+ hlcoord 11, 1, wAttrmap
ld bc, 2 * SCREEN_WIDTH
ld a, [wCurPartyMon]
.asm_9241
@@ -331,7 +331,7 @@ LoadStatsScreenPals:
ld [wTempBGPals + $11], a
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
LoadMailPalettes:
@@ -543,7 +543,7 @@ Function9b01: ; 9b01 (2:5b01)
ret
Function9b1d: ; 9b1d (2:5b1d)
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
xor a
call ByteFill
@@ -557,27 +557,27 @@ Function9b28: ; 9b28 (2:5b28)
ret
Function9b35: ; 9b35 (2:5b35)
- ld a, [rLCDC]
+ ldh a, [rLCDC]
bit 7, a
jr z, .asm_9b52
- ld a, [hBGMapMode]
+ ldh a, [hBGMapMode]
push af
ld a, $2
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call DelayFrame
call DelayFrame
call DelayFrame
call DelayFrame
pop af
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
.asm_9b52
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
ld de, $9800
ld b, $12
ld a, $1
- ld [rVBK], a
+ ldh [rVBK], a
.asm_9b5e
ld c, $14
.asm_9b60
@@ -595,7 +595,7 @@ Function9b35: ; 9b35 (2:5b35)
dec b
jr nz, .asm_9b5e
ld a, $0
- ld [rVBK], a
+ ldh [rVBK], a
ret
Function9b75: ; 9b75 (2:5b75)
@@ -609,7 +609,7 @@ Function9b75: ; 9b75 (2:5b75)
ld a, [de]
inc a
ld e, a
- hlcoord 11, 2, wAttrMap
+ hlcoord 11, 2, wAttrmap
ld bc, $28
ld a, [wcca9]
.asm_9b8d
@@ -683,11 +683,11 @@ Function9be9:
ret z
ld hl, Palettes_9c09
ld a, $90
- ld [rOBPI], a
+ ldh [rOBPI], a
ld c, $30
.asm_9bf6
ld a, [hli]
- ld [rOBPD], a
+ ldh [rOBPD], a
dec c
jr nz, .asm_9bf6
ld hl, Palettes_9c09
@@ -731,7 +731,7 @@ Function9c39:
call CheckCGB
ret z
ld a, $90
- ld [rOBPI], a
+ ldh [rOBPI], a
ld a, $1c
call Function9ac7
call Function9c52
@@ -744,7 +744,7 @@ Function9c52: ; 9c52 (2:5c52)
ld c, $8
.asm_9c54
ld a, [hli]
- ld [rOBPD], a
+ ldh [rOBPD], a
dec c
jr nz, .asm_9c54
ret
@@ -791,9 +791,9 @@ Function9c87: ; 9c87 (2:5c87)
.asm_9c8c
push bc
xor a
- ld [rJOYP], a
+ ldh [rJOYP], a
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
ld b, $10
.asm_9c96
ld e, $8
@@ -805,18 +805,18 @@ Function9c87: ; 9c87 (2:5c87)
jr nz, .asm_9ca2
ld a, $20
.asm_9ca2
- ld [rJOYP], a
+ ldh [rJOYP], a
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
rr d
dec e
jr nz, .asm_9c9a
dec b
jr nz, .asm_9c96
ld a, $20
- ld [rJOYP], a
+ ldh [rJOYP], a
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
call Function9ed9
pop bc
dec b
@@ -832,12 +832,12 @@ InitSGBBorder: ; 9cc0 (2:5cc0)
set 7, a
ld [wd8ba], a
xor a
- ld [rJOYP], a
- ld [hSGB], a
+ ldh [rJOYP], a
+ ldh [hSGB], a
call Function9da9
jr nc, .asm_9cf7
ld a, $1
- ld [hSGB], a
+ ldh [hSGB], a
call Function9d4a
call Function9e13
call Function9ed9
@@ -857,31 +857,31 @@ InitCGBPals:: ; 9cfd (2:5cfd)
call CheckCGB
ret z
ld a, $1
- ld [rVBK], a
+ ldh [rVBK], a
ld hl, $8000
ld bc, $2000
xor a
call ByteFill
ld a, $0
- ld [rVBK], a
+ ldh [rVBK], a
ld a, $80
- ld [rBGPI], a
+ ldh [rBGPI], a
ld c, $20
.asm_9d19
ld a, $ff
- ld [rBGPD], a
+ ldh [rBGPD], a
ld a, $7f
- ld [rBGPD], a
+ ldh [rBGPD], a
dec c
jr nz, .asm_9d19
ld a, $80
- ld [rOBPI], a
+ ldh [rOBPI], a
ld c, $20
.asm_9d2a
ld a, $ff
- ld [rOBPD], a
+ ldh [rOBPD], a
ld a, $7f
- ld [rOBPD], a
+ ldh [rOBPD], a
dec c
jr nz, .asm_9d2a
ld hl, wTempBGPals
@@ -929,7 +929,7 @@ Function9d4a: ; 9d4a (2:5d4a)
Function9d70:
di
xor a
- ld [rJOYP], a
+ ldh [rJOYP], a
ld hl, PalPacket_a1c5
call Function9c87
call Function9d8b
@@ -964,38 +964,38 @@ Function9da9: ; 9da9 (2:5da9)
ld hl, PalPacket_a195
call Function9c87
call Function9ed9
- ld a, [rJOYP]
+ ldh a, [rJOYP]
and $3
cp $3
jr nz, .asm_9e05
ld a, $20
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Function9ed9
call Function9ed9
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
call Function9ed9
call Function9ed9
ld a, $10
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Function9ed9
call Function9ed9
ld a, $30
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Function9ed9
call Function9ed9
- ld a, [rJOYP]
+ ldh a, [rJOYP]
and $3
cp $3
jr nz, .asm_9e05
@@ -1016,24 +1016,24 @@ Function9e0a: ; 9e0a (2:5e0a)
Function9e13: ; 9e13 (2:5e13)
call DisableLCD
ld a, $e4
- ld [rBGP], a
+ ldh [rBGP], a
ld hl, Palettes_a265
ld de, $8800
ld bc, $1000
call Function9eb1
call Function9ec3
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
ld hl, PalPacket_a175
call Function9c87
xor a
- ld [rBGP], a
+ ldh [rBGP], a
ret
Function9e37: ; 9e37 (2:5e37)
call DisableLCD
ld a, $e4
- ld [rBGP], a
+ ldh [rBGP], a
ld de, $8800
ld bc, $140
call Function9eb1
@@ -1057,17 +1057,17 @@ Function9e37: ; 9e37 (2:5e37)
call Function9eb1
call Function9ec3
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
ld hl, PalPacket_a1b5
call Function9c87
xor a
- ld [rBGP], a
+ ldh [rBGP], a
ret
Function9e83: ; 9e83 (2:5e83)
call DisableLCD
ld a, $e4
- ld [rBGP], a
+ ldh [rBGP], a
ld de, $8800
ld b, $80
.asm_9e8f
@@ -1081,11 +1081,11 @@ Function9e83: ; 9e83 (2:5e83)
jr nz, .asm_9e8f
call Function9ec3
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
ld hl, PalPacket_a1a5
call Function9c87
xor a
- ld [rBGP], a
+ ldh [rBGP], a
ret
Function9eb1: ; 9eb1 (2:5eb1)
diff --git a/engine/events/misc_scripts_2.asm b/engine/events/misc_scripts_2.asm
index ac0f7e31..4a9e9484 100755
--- a/engine/events/misc_scripts_2.asm
+++ b/engine/events/misc_scripts_2.asm
@@ -12,7 +12,7 @@ RepelWoreOffScript::
HiddenItemScript::
opentext
copybytetovar wcf2b
- itemtotext MEM_BUFFER_0, USE_SCRIPT_VAR
+ itemtotext STRING_BUFFER_3, USE_SCRIPT_VAR
writetext .PlayerFoundItemText
giveitem ITEM_FROM_MEM
iffalse .bag_full
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
index c4967028..0787d094 100755
--- a/engine/events/overworld.asm
+++ b/engine/events/overworld.asm
@@ -25,7 +25,7 @@ FieldMoveGetPartyNick: ; c74b (3:474b)
ld [wMonType], a
ld a, [wCurPartyMon]
call GetNick
- call Function317b
+ call CopyName1
ld de, wStringBuffer2
ld hl, wStringBuffer3
call CopyName2
@@ -48,7 +48,7 @@ FieldMoveBadgeCheck: ; c776 (3:4776)
call FieldMoveEngineFlagCheck
ret nc
ld hl, .BadgeRequiredText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
scf
ret
@@ -99,7 +99,7 @@ FieldMovePartyCheck: ; c787 (3:4787)
FieldMoveFailed: ; c7be (3:47be)
ld hl, .CantUseHereText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ret
.CantUseHereText:
@@ -146,7 +146,7 @@ CutTreeOrGrass:
FailToCut:
ld hl, Text_NothingToCut
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -206,7 +206,7 @@ CutDownTreeOrGrass:
ld a, [wBuffer5]
ld [hl], a
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call OverworldTextModeSwitch
call UpdateSprites
call DelayFrame
@@ -397,13 +397,13 @@ StartSurfing:
CantSurf:
ld hl, CantSurfText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
AlreadySurfing:
ld hl, AlreadySurfingText
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -542,8 +542,8 @@ TryToFly:
.asm_ca83
xor a
- ld [hMapAnims], a
- call LoadStandardMenuDataHeader
+ ldh [hMapAnims], a
+ call LoadStandardMenuHeader
call ClearSprites
ld a, $24
ld hl, $5a61
@@ -783,7 +783,7 @@ FailToEscapeFromDungeon:
cp $2
jr nz, .asm_cc1c
ld hl, Text_CantUseDigEscapeRopeHere ; $4c29
- call MenuTextBox
+ call MenuTextbox
call WaitPressAorB_BlinkCursor
call CloseWindow
.asm_cc1c
@@ -882,7 +882,7 @@ DoTeleport:
FailTeleport:
ld hl, Text_CantUseTeleportHere
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -932,7 +932,7 @@ Functionccf1: ; ccf1 (3:4cf1)
jr asm_cd0c
ld hl, Text_AlreadyUsingStrength
- call MenuTextBoxBackup
+ call MenuTextboxBackup
ld a, $80
ret
@@ -1134,7 +1134,7 @@ DisappearWhirlpool: ; 4e20
ld a, [wBuffer5]
ld [hl], a
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call OverworldTextModeSwitch
ld a, [wBuffer6]
ld e, a
@@ -1285,12 +1285,12 @@ TryRockSmashFromMenu: ; cef7 (3:4ef7)
GetFacingObject: ; cf10 (3:4f10)
farcall CheckFacingObject
jr nc, .asm_cf2f
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
call GetObjectStruct
ld hl, $1
add hl, bc
ld a, [hl]
- ld [hLastTalked], a
+ ldh [hLastTalked], a
call GetMapObject
ld hl, $4
add hl, bc
@@ -1547,7 +1547,7 @@ PutTheRodAway: ; d096
call ClearBox
call WaitBGMap
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, $1
ld [wPlayerAction], a
call UpdateSprites
diff --git a/engine/events/std_collision.asm b/engine/events/std_collision.asm
index 932f4db8..bb44687c 100755
--- a/engine/events/std_collision.asm
+++ b/engine/events/std_collision.asm
@@ -12,7 +12,7 @@ CheckFacingTileForStdScript::
ld a, [hli]
ld [wcf2b], a
ld a, [hli]
- ld [wTempTrainerHeader], a
+ ld [wTempTrainer], a
ld a, BANK(Script_JumpStdFromRAM)
ld hl, Script_JumpStdFromRAM
call CallScript
diff --git a/engine/events/whiteout.asm b/engine/events/whiteout.asm
index 33098f13..01d7b388 100755
--- a/engine/events/whiteout.asm
+++ b/engine/events/whiteout.asm
@@ -31,8 +31,8 @@ Script_Whiteout:
OverworldBGMap:
call ClearPalettes
- call FillScreenWithTextboxPal
- call Function3456
+ call ClearScreen
+ call WaitBGMap2
call HideSprites
call RotateThreePalettesLeft
ret
diff --git a/engine/health.asm b/engine/health.asm
index 506d5a9d..a94a3ec3 100755
--- a/engine/health.asm
+++ b/engine/health.asm
@@ -44,43 +44,46 @@ Functionc6bc: ; c6bc (3:46bc)
farcall Functionf900
ret
-ComputeHPBarPixels: ; c6de (3:46de)
+ComputeHPBarPixels:
+; e = bc * (6 * 8) / de
ld a, b
or c
jr z, .asm_c722
push hl
xor a
- ld [hPrintNum2], a
+ ldh [hMultiplicand + 0], a
ld a, b
- ld [hPrintNum3], a
+ ldh [hMultiplicand + 1], a
ld a, c
- ld [hPrintNum4], a
- ld a, $30
- ld [hPrintNum5], a
+ ldh [hMultiplicand + 2], a
+ ld a, 6 * 8
+ ldh [hMultiplier], a
call Multiply
+ ; We need de to be under 256 because hDivisor is only 1 byte.
ld a, d
and a
jr z, .asm_c711
+ ; divide de and hProduct by 4
srl d
rr e
srl d
rr e
- ld a, [hStringCmpString2]
+ ldh a, [hProduct + 2]
ld b, a
- ld a, [hPrintNum4]
+ ldh a, [hProduct + 3]
srl b
rr a
srl b
rr a
- ld [hPrintNum4], a
+ ldh [hDividend + 3], a
ld a, b
- ld [hPrintNum3], a
+ ldh [hDividend + 2], a
.asm_c711
ld a, e
- ld [hPrintNum5], a
+ ldh [hPrintNum5], a
ld b, $4
call Divide
- ld a, [hPrintNum4]
+ ldh a, [hPrintNum4]
ld e, a
pop hl
and a
diff --git a/engine/items.asm b/engine/items.asm
index 7d69c933..deafa60c 100755
--- a/engine/items.asm
+++ b/engine/items.asm
@@ -1,4 +1,4 @@
-ReceiveItem_:: ; d1e2 (3:51e2)
+_ReceiveItem:: ; d1e2 (3:51e2)
call CheckBagOrPC
jp nz, PutItemInPocketOrPC
push hl
@@ -38,7 +38,7 @@ ReceiveTMHM:
call GetTMHMNumber
jp PutItemInTMPocket
-TossItem_:: ; d21a (3:521a)
+_TossItem:: ; d21a (3:521a)
call CheckBagOrPC
jr nz, remove_item_from_bag_or_pc
push hl
@@ -79,7 +79,7 @@ RemoveNormalItem:
remove_item_from_bag_or_pc
jp RemoveItemAndQuantity
-CheckItem_:: ; d251 (3:5251)
+_CheckItem:: ; d251 (3:5251)
call CheckBagOrPC
jr nz, check_item_in_bag_or_pc
push hl
@@ -473,7 +473,7 @@ GetNumberedTM:
ld c, a
ret
-CheckTossableItem_:: ; d434 (3:5434)
+_CheckTossableItem:: ; d434 (3:5434)
ld a, $4
call GetItemAttr
bit 7, a
diff --git a/engine/learn.asm b/engine/learn.asm
index d285d326..f61b0c6c 100644
--- a/engine/learn.asm
+++ b/engine/learn.asm
@@ -1,5 +1,5 @@
LearnMove:
- call BackUpTilesToBuffer
+ call LoadTilemapToTempTilemap
ld a, [wCurPartyMon]
ld hl, wPartyMon1Nickname
call GetNick
@@ -127,7 +127,7 @@ LearnMove:
ld [wBuffer1], a
predef ListMoves
ld a, $4
- ld [wMenuData2End], a
+ ld [wMenuDataEnd], a
ld a, $6
ld [wced9], a
ld a, [wcfe3]
@@ -140,14 +140,14 @@ LearnMove:
ld a, $3
ld [wMenuJoypadFilter], a
ld a, $20
- ld [wcedc], a
+ ld [w2DMenuFlags1], a
xor a
ld [wcedd], a
ld a, $20
ld [wcede], a
call StaticMenuJoypad
push af
- call ReloadTilesFromBuffer
+ call SafeLoadTempTilemapToTilemap
pop af
pop hl
bit 1, a
diff --git a/engine/main_menu.asm b/engine/main_menu.asm
index 0bd56b1a..6f460a5c 100755
--- a/engine/main_menu.asm
+++ b/engine/main_menu.asm
@@ -8,7 +8,7 @@ MainMenu_:
call PlayMusic
.asm_5a60
xor a
- ld [wc1d6], a
+ ld [wDisableTextAcceleration], a
call Function5bf7
ld b, $8
call GetSGBLayout
@@ -18,11 +18,11 @@ MainMenu_:
ld [wWhichIndexSet], a
call Function5b27
ld hl, .MenuDataHeader
- call LoadMenuDataHeader
+ call LoadMenuHeader
call Function5b0a
call CloseWindow
jr c, .asm_5a94
- call ClearTileMap
+ call ClearTilemap
ld a, [wMenuSelection]
ld hl, .Jumptable
rst JumpTable
@@ -92,7 +92,7 @@ Function5ae4: ; 5ae4 (1:5ae4)
ret
.asm_5af0
- ld a, [hCGB]
+ ldh a, [hCGB]
cp $1
ld a, $1
ret nz
@@ -132,7 +132,7 @@ Function5b27: ; 5b27 (1:5b27)
and a
ret z
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function5b45
ld hl, wOptions
ld a, [hl]
@@ -142,7 +142,7 @@ Function5b27: ; 5b27 (1:5b27)
pop af
ld [wOptions], a
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
Function5b45: ; 5b45 (1:5b45)
@@ -175,7 +175,7 @@ Function5b5b: ; 5b5b (1:5b5b)
decoord 1, 14
call Function5bb8
decoord 4, 16
- ld a, [hHours]
+ ldh a, [hHours]
ld c, a
farcall PrintHour
ld [hl], $9c
@@ -229,8 +229,8 @@ Function5bb8: ; 5bb8 (1:5bb8)
Function5bf7: ; 5bf7 (1:5bf7)
xor a
- ld [hMapAnims], a
- call ClearTileMap
+ ldh [hMapAnims], a
+ call ClearTilemap
call LoadFontsExtra
call Functiond9e
call ClearWindowData
@@ -248,7 +248,7 @@ MainMenu_Options:
MainMenu_NewGame:
xor a
- ld [wMonStatusFlags], a
+ ld [wDebugFlags], a
call Function5c3a
call Function5bf7
call OakSpeech
@@ -256,12 +256,12 @@ MainMenu_NewGame:
ld a, $0
ld [wceec], a
ld a, $f1
- ld [hMapEntryMethod], a
+ ldh [hMapEntryMethod], a
jp FinishContinueFunction
Function5c3a: ; 5c3a (1:5c3a)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function5c41
ret
@@ -276,16 +276,16 @@ Function5c41: ; 5c41 (1:5c41)
xor a
call ByteFill
- ld a, [rLY]
- ld [hSecondsBackup], a
+ ldh a, [rLY]
+ ldh [hSecondsBackup], a
call DelayFrame
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
ld [wPlayerID], a
- ld a, [rLY]
- ld [hSecondsBackup], a
+ ldh a, [rLY]
+ ldh [hSecondsBackup], a
call DelayFrame
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
ld [wPlayerID + 1], a
ld hl, wPartyCount
@@ -478,10 +478,10 @@ LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7)
MainMenu_Continue:
farcall TryLoadSaveFile
jr c, .asm_5e41
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call DisplaySaveInfoOnContinue
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld c, 20
call DelayFrames
call ConfirmContinue
@@ -504,7 +504,7 @@ MainMenu_Continue:
ld [wMusicFadeID + 1], a
call ClearBGPalettes
call CloseWindow
- call ClearTileMap
+ call ClearTilemap
ld c, 20
call DelayFrames
farcall JumpRoamMons
@@ -514,7 +514,7 @@ MainMenu_Continue:
cp $1
jr z, .asm_5e42
ld a, $f2
- ld [hMapEntryMethod], a
+ ldh [hMapEntryMethod], a
jp FinishContinueFunction
.asm_5e41
@@ -533,7 +533,7 @@ PostCreditsSpawn: ; 5e52 (1:5e52)
xor a
ld [wd1db], a
ld a, $f1
- ld [hMapEntryMethod], a
+ ldh [hMapEntryMethod], a
ret
ConfirmContinue: ; 5e5b (1:5e5b)
@@ -613,13 +613,13 @@ DisplayContinueDataWithRTCError: ; 5ec7 (1:5ec7)
Continue_LoadMenuHeader: ; 5ed7 (1:5ed7)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld hl, .MenuDataHeader_Dex
CheckFlag ENGINE_POKEDEX
jr nz, .asm_5ee7
ld hl, .MenuDataHeader_NoDex
.asm_5ee7
- call OffsetMenuDataHeader_
+ call _OffsetMenuHeader
call MenuBox
call PlaceVerticalMenuItems
ret
@@ -724,7 +724,7 @@ OakSpeech: ; 5fa5 (1:5fa5)
farcall InitClock ; What time is it?
call RotateFourPalettesLeft
- call ClearTileMap
+ call ClearTilemap
ld de, MUSIC_ROUTE_30
call PlayMusic
@@ -747,7 +747,7 @@ OakSpeech: ; 5fa5 (1:5fa5)
call PrintText
call RotateThreePalettesRight
- call ClearTileMap
+ call ClearTilemap
ld a, MARILL
ld [wCurSpecies], a
@@ -772,7 +772,7 @@ OakSpeech: ; 5fa5 (1:5fa5)
call PrintText
call RotateThreePalettesRight
- call ClearTileMap
+ call ClearTilemap
xor a
ld [wCurPartySpecies], a
@@ -789,7 +789,7 @@ OakSpeech: ; 5fa5 (1:5fa5)
call PrintText
call RotateThreePalettesRight
- call ClearTileMap
+ call ClearTilemap
xor a
ld [wCurPartySpecies], a
@@ -862,7 +862,7 @@ NamePlayer: ; 6085 (1:6085)
ld de, wPlayerName
farcall NamingScreen
call RotateThreePalettesRight
- call ClearTileMap
+ call ClearTilemap
call LoadFontsExtra
call WaitBGMap
xor a
@@ -905,7 +905,7 @@ ENDC
db 2, "NAME@"
SelectPresetName: ; 6108 (1:6108)
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
ld a, [wMenuCursorY]
dec a
@@ -920,7 +920,7 @@ StorePlayerName: ; 6119 (1:6119)
ret
ShrinkPlayer: ; 6123 (1:6123)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, 0 << 7 | 32 ; fade out
@@ -968,7 +968,7 @@ ShrinkPlayer: ; 6123 (1:6123)
call DelayFrames
call RotateThreePalettesRight
- call ClearTileMap
+ call ClearTilemap
ret
MovePlayerPicRight: ; 617e (1:617e)
@@ -986,11 +986,11 @@ MovePlayerPic
push hl
push de
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
lb bc, 7, 7
predef PlaceGraphic
xor a
- ld [hBGMapThird], a
+ ldh [hBGMapThird], a
call WaitBGMap
call DelayFrame
pop de
@@ -1023,17 +1023,17 @@ IntroFadePalettes:
Intro_WipeInFrontpic: ; 61c5 (1:61c5)
ld a, $77
- ld [hWX], a
+ ldh [hWX], a
call DelayFrame
ld a, $e4
call DmgToCgbBGPals
.asm_61d1
call DelayFrame
- ld a, [hWX]
+ ldh a, [hWX]
sub $8
cp $ff
ret z
- ld [hWX], a
+ ldh [hWX], a
jr .asm_61d1
Intro_PrepTrainerPic: ; 61df, 61e0 (1:61df, 1:61e0)
@@ -1042,7 +1042,7 @@ Intro_PrepTrainerPic: ; 61df, 61e0 (1:61df, 1:61e0)
ld hl, $58a0
rst FarCall
xor a
- ld [hGraphicStartTile], a
+ ldh [hGraphicStartTile], a
hlcoord 6, 4
lb bc, 7, 7
predef PlaceGraphic
@@ -1053,7 +1053,7 @@ ShrinkFrame: ; 61f7 (1:61f7)
ld c, $31
predef DecompressGet2bpp
xor a
- ld [hGraphicStartTile], a
+ ldh [hGraphicStartTile], a
hlcoord 6, 4
lb bc, 7, 7
predef PlaceGraphic
diff --git a/engine/math.asm b/engine/math.asm
index 7cc35eb4..cdac2d37 100755
--- a/engine/math.asm
+++ b/engine/math.asm
@@ -1,45 +1,45 @@
-Multiply_:: ; 67bd
+_Multiply:: ; 67bd
; hMultiplier is one byte.
ld a, 8
ld b, a
xor a
- ld [hProduct], a
- ld [hMathBuffer + 1], a
- ld [hMathBuffer + 2], a
- ld [hMathBuffer + 3], a
- ld [hMathBuffer + 4], a
+ ldh [hProduct], a
+ ldh [hMathBuffer + 1], a
+ ldh [hMathBuffer + 2], a
+ ldh [hMathBuffer + 3], a
+ ldh [hMathBuffer + 4], a
.loop
- ld a, [hMultiplier]
+ ldh a, [hMultiplier]
srl a
- ld [hMultiplier], a
+ ldh [hMultiplier], a
jr nc, .next
- ld a, [hMathBuffer + 4]
+ ldh a, [hMathBuffer + 4]
ld c, a
- ld a, [hMultiplicand + 2]
+ ldh a, [hMultiplicand + 2]
add c
- ld [hMathBuffer + 4], a
+ ldh [hMathBuffer + 4], a
- ld a, [hMathBuffer + 3]
+ ldh a, [hMathBuffer + 3]
ld c, a
- ld a, [hMultiplicand + 1]
+ ldh a, [hMultiplicand + 1]
adc c
- ld [hMathBuffer + 3], a
+ ldh [hMathBuffer + 3], a
- ld a, [hMathBuffer + 2]
+ ldh a, [hMathBuffer + 2]
ld c, a
- ld a, [hMultiplicand + 0]
+ ldh a, [hMultiplicand + 0]
adc c
- ld [hMathBuffer + 2], a
+ ldh [hMathBuffer + 2], a
- ld a, [hMathBuffer + 1]
+ ldh a, [hMathBuffer + 1]
ld c, a
- ld a, [hProduct]
+ ldh a, [hProduct]
adc c
- ld [hMathBuffer + 1], a
+ ldh [hMathBuffer + 1], a
.next
dec b
@@ -47,71 +47,71 @@ Multiply_:: ; 67bd
; hMultiplicand <<= 1
- ld a, [hMultiplicand + 2]
+ ldh a, [hMultiplicand + 2]
add a
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
- ld a, [hMultiplicand + 1]
+ ldh a, [hMultiplicand + 1]
rla
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
- ld a, [hMultiplicand + 0]
+ ldh a, [hMultiplicand + 0]
rla
- ld [hMultiplicand + 0], a
+ ldh [hMultiplicand + 0], a
- ld a, [hProduct]
+ ldh a, [hProduct]
rla
- ld [hProduct], a
+ ldh [hProduct], a
jr .loop
.done
- ld a, [hMathBuffer + 4]
- ld [hProduct + 3], a
+ ldh a, [hMathBuffer + 4]
+ ldh [hProduct + 3], a
- ld a, [hMathBuffer + 3]
- ld [hProduct + 2], a
+ ldh a, [hMathBuffer + 3]
+ ldh [hProduct + 2], a
- ld a, [hMathBuffer + 2]
- ld [hProduct + 1], a
+ ldh a, [hMathBuffer + 2]
+ ldh [hProduct + 1], a
- ld a, [hMathBuffer + 1]
- ld [hProduct + 0], a
+ ldh a, [hMathBuffer + 1]
+ ldh [hProduct + 0], a
ret
-Divide_:: ; 681d
+_Divide:: ; 681d
xor a
- ld [hMathBuffer + 0], a
- ld [hMathBuffer + 1], a
- ld [hMathBuffer + 2], a
- ld [hMathBuffer + 3], a
- ld [hMathBuffer + 4], a
+ ldh [hMathBuffer + 0], a
+ ldh [hMathBuffer + 1], a
+ ldh [hMathBuffer + 2], a
+ ldh [hMathBuffer + 3], a
+ ldh [hMathBuffer + 4], a
ld a, 9
ld e, a
.loop
- ld a, [hMathBuffer + 0]
+ ldh a, [hMathBuffer + 0]
ld c, a
- ld a, [hDividend + 1]
+ ldh a, [hDividend + 1]
sub c
ld d, a
- ld a, [hDivisor]
+ ldh a, [hDivisor]
ld c, a
- ld a, [hDividend + 0]
+ ldh a, [hDividend + 0]
sbc c
jr c, .next
- ld [hDividend + 0], a
+ ldh [hDividend + 0], a
ld a, d
- ld [hDividend + 1], a
+ ldh [hDividend + 1], a
- ld a, [hMathBuffer + 4]
+ ldh a, [hMathBuffer + 4]
inc a
- ld [hMathBuffer + 4], a
+ ldh [hMathBuffer + 4], a
jr .loop
@@ -120,39 +120,39 @@ Divide_:: ; 681d
cp 1
jr z, .done
- ld a, [hMathBuffer + 4]
+ ldh a, [hMathBuffer + 4]
add a
- ld [hMathBuffer + 4], a
+ ldh [hMathBuffer + 4], a
- ld a, [hMathBuffer + 3]
+ ldh a, [hMathBuffer + 3]
rla
- ld [hMathBuffer + 3], a
+ ldh [hMathBuffer + 3], a
- ld a, [hMathBuffer + 2]
+ ldh a, [hMathBuffer + 2]
rla
- ld [hMathBuffer + 2], a
+ ldh [hMathBuffer + 2], a
- ld a, [hMathBuffer + 1]
+ ldh a, [hMathBuffer + 1]
rla
- ld [hMathBuffer + 1], a
+ ldh [hMathBuffer + 1], a
dec e
jr nz, .next2
ld e, 8
- ld a, [hMathBuffer + 0]
- ld [hDivisor], a
+ ldh a, [hMathBuffer + 0]
+ ldh [hDivisor], a
xor a
- ld [hMathBuffer + 0], a
+ ldh [hMathBuffer + 0], a
- ld a, [hDividend + 1]
- ld [hDividend + 0], a
+ ldh a, [hDividend + 1]
+ ldh [hDividend + 0], a
- ld a, [hDividend + 2]
- ld [hDividend + 1], a
+ ldh a, [hDividend + 2]
+ ldh [hDividend + 1], a
- ld a, [hDividend + 3]
- ld [hDividend + 2], a
+ ldh a, [hDividend + 3]
+ ldh [hDividend + 2], a
.next2
ld a, e
@@ -161,30 +161,30 @@ Divide_:: ; 681d
dec b
.okay
- ld a, [hDivisor]
+ ldh a, [hDivisor]
srl a
- ld [hDivisor], a
+ ldh [hDivisor], a
- ld a, [hMathBuffer + 0]
+ ldh a, [hMathBuffer + 0]
rr a
- ld [hMathBuffer + 0], a
+ ldh [hMathBuffer + 0], a
jr .loop
.done
- ld a, [hDividend + 1]
- ld [hDivisor], a
+ ldh a, [hDividend + 1]
+ ldh [hDivisor], a
- ld a, [hMathBuffer + 4]
- ld [hDividend + 3], a
+ ldh a, [hMathBuffer + 4]
+ ldh [hDividend + 3], a
- ld a, [hMathBuffer + 3]
- ld [hDividend + 2], a
+ ldh a, [hMathBuffer + 3]
+ ldh [hDividend + 2], a
- ld a, [hMathBuffer + 2]
- ld [hDividend + 1], a
+ ldh a, [hMathBuffer + 2]
+ ldh [hDividend + 1], a
- ld a, [hMathBuffer + 1]
- ld [hDividend + 0], a
+ ldh a, [hMathBuffer + 1]
+ ldh [hDividend + 0], a
ret
diff --git a/engine/move_mon.asm b/engine/move_mon.asm
index bbfea25e..7410375f 100755
--- a/engine/move_mon.asm
+++ b/engine/move_mon.asm
@@ -11,7 +11,7 @@ TryAddMonToParty:: ; d892 (3:5892)
ret nc
ld [de], a
ld a, [de]
- ld [hMoveMon], a
+ ldh [hMoveMon], a
add e
ld e, a
jr nc, .asm_d8ad
@@ -28,7 +28,7 @@ TryAddMonToParty:: ; d892 (3:5892)
jr z, .asm_d8c2
ld hl, wOTPartyMonOT
.asm_d8c2
- ld a, [hMoveMon]
+ ldh a, [hMoveMon]
dec a
call SkipNames
ld d, h
@@ -43,7 +43,7 @@ TryAddMonToParty:: ; d892 (3:5892)
ld [wd151], a
call GetPokemonName
ld hl, wPartyMonNicknames
- ld a, [hMoveMon]
+ ldh a, [hMoveMon]
dec a
call SkipNames
ld d, h
@@ -58,7 +58,7 @@ TryAddMonToParty:: ; d892 (3:5892)
jr z, .asm_d903
ld hl, wOTPartyMon1
.asm_d903
- ld a, [hMoveMon]
+ ldh a, [hMoveMon]
dec a
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
@@ -117,28 +117,34 @@ GeneratePartyMonStats:
inc de
inc de
inc de
+
+ ; Initialize ID.
ld a, [wPlayerID]
ld [de], a
inc de
ld a, [wPlayerID + 1]
ld [de], a
inc de
+
+ ; Initialize Exp.
push de
ld a, [wCurPartyLevel]
ld d, a
- callfar CalcExpAtLevel ; 14:5550
+ callfar CalcExpAtLevel
pop de
- ld a, [hPrintNum2]
+ ldh a, [hProduct + 1]
ld [de], a
inc de
- ld a, [hStringCmpString2]
+ ldh a, [hProduct + 2]
ld [de], a
inc de
- ld a, [hPrintNum4]
+ ldh a, [hProduct + 3]
ld [de], a
inc de
+
+ ; Initialize stat experience.
xor a
- ld b, $a
+ ld b, MON_DVS - MON_STAT_EXP
.asm_d980
ld [de], a
inc de
@@ -215,10 +221,10 @@ GeneratePartyMonStats:
ld c, a
ld b, $0
call CalcMonStatC
- ld a, [hStringCmpString2]
+ ldh a, [hProduct + 2]
ld [de], a
inc de
- ld a, [hPrintNum4]
+ ldh a, [hProduct + 3]
ld [de], a
inc de
jr .asm_da2f
@@ -787,11 +793,11 @@ Functiondd6a: ; dd6a (3:5d6a)
pop bc
ld hl, $8
add hl, bc
- ld a, [hQuotient]
+ ldh a, [hQuotient]
ld [hli], a
- ld a, [hPrintNum3]
+ ldh a, [hPrintNum3]
ld [hli], a
- ld a, [hPrintNum4]
+ ldh a, [hPrintNum4]
ld [hl], a
and a
ret
@@ -886,13 +892,13 @@ SendMonIntoBox: ; de74 (3:5e74)
ld d, a
callfar CalcExpAtLevel
pop de
- ld a, [hQuotient]
+ ldh a, [hQuotient]
ld [de], a
inc de
- ld a, [hPrintNum3]
+ ldh a, [hPrintNum3]
ld [de], a
inc de
- ld a, [hPrintNum4]
+ ldh a, [hPrintNum4]
ld [de], a
inc de
xor a
@@ -1057,7 +1063,7 @@ GiveEgg: ; df92 (3:5f92)
ld hl, wPartyMon1Happiness
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
- ld a, [wMonStatusFlags]
+ ld a, [wDebugFlags]
bit 1, a
ld a, $1
jr nz, .asm_e028
@@ -1130,7 +1136,7 @@ RemoveMonFromPartyOrBox: ; e03f (3:603f)
jr z, .asm_e096
ld bc, sBoxMonNicknames
.asm_e096
- call Function3231
+ call CopyDataUntil
ld hl, wPartyMon1
ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wPokemonWithdrawDepositParameter]
@@ -1156,7 +1162,7 @@ RemoveMonFromPartyOrBox: ; e03f (3:603f)
add hl, bc
ld bc, wPartyMonOT
.asm_e0c9
- call Function3231
+ call CopyDataUntil
ld hl, wPartyMonNicknames
ld a, [wPokemonWithdrawDepositParameter]
and a
@@ -1176,7 +1182,7 @@ RemoveMonFromPartyOrBox: ; e03f (3:603f)
jr z, .asm_e0f3
ld bc, sBoxEnd
.asm_e0f3
- call Function3231
+ call CopyDataUntil
.asm_e0f6
ld a, [wPokemonWithdrawDepositParameter]
and a
@@ -1256,10 +1262,10 @@ CalcMonStats: ; e16d
.loop
inc c
call CalcMonStatC
- ld a, [hMultiplicand + 1]
+ ldh a, [hMultiplicand + 1]
ld [de], a
inc de
- ld a, [hMultiplicand + 2]
+ ldh a, [hMultiplicand + 2]
ld [de], a
inc de
ld a, c
@@ -1304,22 +1310,22 @@ CalcMonStatC: ; e181
add hl, bc
.sqrt_loop
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
inc b
ld a, b
cp $ff
jr z, .no_stat_exp
- ld [hMultiplicand + 2], a
- ld [hMultiplier], a
+ ldh [hMultiplicand + 2], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hld]
ld d, a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
sub d
ld a, [hli]
ld d, a
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
sbc d
jr c, .sqrt_loop
.no_stat_exp
@@ -1408,22 +1414,22 @@ CalcMonStatC: ; e181
inc d
.no_overflow_2
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, d
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
xor a
- ld [hMultiplicand + 0], a
+ ldh [hMultiplicand + 0], a
ld a, [wCurPartyLevel]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
- ld a, [hProduct + 1]
- ld [hDividend + 0], a
- ld a, [hProduct + 2]
- ld [hDividend + 1], a
- ld a, [hProduct + 3]
- ld [hDividend + 2], a
+ ldh a, [hProduct + 1]
+ ldh [hDividend + 0], a
+ ldh a, [hProduct + 2]
+ ldh [hDividend + 1], a
+ ldh a, [hProduct + 3]
+ ldh [hDividend + 2], a
ld a, 100
- ld [hDivisor], a
+ ldh [hDivisor], a
ld a, 3
ld b, a
call Divide
@@ -1433,42 +1439,42 @@ CalcMonStatC: ; e181
jr nz, .not_hp
ld a, [wCurPartyLevel]
ld b, a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
add b
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
jr nc, .no_overflow_3
- ld a, [hQuotient + 1]
+ ldh a, [hQuotient + 1]
inc a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
.no_overflow_3
ld a, 10
.not_hp
ld b, a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
add b
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
jr nc, .no_overflow_4
- ld a, [hQuotient + 1]
+ ldh a, [hQuotient + 1]
inc a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
.no_overflow_4
- ld a, [hQuotient + 1]
+ ldh a, [hQuotient + 1]
cp (1000 / $100) + 1
jr nc, .max_stat
cp 1000 / $100
jr c, .stat_value_okay
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
cp 1000 % $100
jr c, .stat_value_okay
.max_stat
ld a, 999 / $100
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, 999 % $100
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
.stat_value_okay
pop bc
@@ -1630,7 +1636,7 @@ TextJump_WasSentToBillsPC:
InitNickname: ; e3b9 (3:63b9)
push de
- call LoadStandardMenuDataHeader
+ call LoadStandardMenuHeader
call DisableSpriteUpdates
pop de
push de
diff --git a/engine/movement_pattern.asm b/engine/movement_pattern.asm
index 0b7617ca..1909f480 100755
--- a/engine/movement_pattern.asm
+++ b/engine/movement_pattern.asm
@@ -137,26 +137,26 @@ Function47fa:
Function47fb: ; 47fb (1:47fb)
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $1
jp Function4ac9
Function4805: ; 4805 (1:4805)
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $1
or $2
jp Function4ac9
Function4811: ; 4811 (1:4811)
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $3
jp Function4ac9
Function481b: ; 481b (1:481b)
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $c
ld hl, $8
add hl, bc
@@ -170,7 +170,7 @@ Function482a: ; 482a (1:482a)
and $c
ld d, a
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $c
cp d
jr nz, .asm_483e
@@ -608,7 +608,7 @@ Function4ac9: ; 4ac9 (1:4ac9)
add hl, bc
ld [hl], $2
ld hl, wCenteredObject
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
cp [hl]
jr z, .asm_4ae9
ld hl, $9
@@ -627,13 +627,13 @@ Function4ac9: ; 4ac9 (1:4ac9)
call Function4603
Function4af6: ; 4af6 (1:4af6)
call Random
- ld a, [hRandom]
+ ldh a, [hRandom]
and $7f
jr asm_4b06
Function4aff: ; 4aff (1:4aff)
call Random
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
and $1f
asm_4b06
ld hl, $a
diff --git a/engine/movie/gamefreak_presents.asm b/engine/movie/gamefreak_presents.asm
index 6b15472f..7e9519f4 100644
--- a/engine/movie/gamefreak_presents.asm
+++ b/engine/movie/gamefreak_presents.asm
@@ -3,19 +3,19 @@ Copyright_GFPresents: ; e49a8 (39:49a8)
; Return carry if user cancels animation by pressing a button.
call ClearBGPalettes
- call ClearTileMap
+ call ClearTilemap
ld a, HIGH(vBGMap0)
- ld [hBGMapAddress + 1], a
+ ldh [hBGMapAddress + 1], a
xor a ; LOW(vBGMap0)
- ld [hBGMapAddress], a
+ ldh [hBGMapAddress], a
- ld [hJoyDown], a
- ld [hSCX], a
- ld [hSCY], a
+ ldh [hJoyDown], a
+ ldh [hSCX], a
+ ldh [hSCY], a
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
call WaitBGMap
@@ -34,7 +34,7 @@ Copyright_GFPresents: ; e49a8 (39:49a8)
ld c, 100
call DelayFrames
- call ClearTileMap
+ call ClearTilemap
call GFPresents_Init
.loop
@@ -80,14 +80,14 @@ GFPresents_Init: ; e49f3 (39:49f3)
ld [wJumpTableIndex], a
ld [$ce64], a
ld [wIntroSceneTimer], a
- ld [hSCX], a
- ld [hSCY], a
+ ldh [hSCX], a
+ ldh [hSCY], a
ld a, 1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
lb de, %00100100, %11111000
call DmgToCgbObjPals
@@ -98,7 +98,7 @@ GFPresents_PlayFrame: ; e4a37 (39:4a37)
; Return carry when the sequence completes or is canceled.
call JoyTextDelay
- ld a, [hJoyLast]
+ ldh a, [hJoyLast]
and BUTTONS
jr nz, .pressed_button
@@ -124,7 +124,7 @@ GFPresents_PlayFrame: ; e4a37 (39:4a37)
.finish
callfar ClearAnimatedObjectBuffer
- call ClearTileMap
+ call ClearTilemap
call ClearSprites
ld c, 16
@@ -175,7 +175,7 @@ GFPresents_Star: ; e4a96 (39:4a96)
depixel 10, 11, 4, 0
ld a, $16
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
; TODO set some flag in the struct?
ld hl, $c
@@ -199,7 +199,7 @@ GFPresents_PlaceLogo: ; e4ab2 (39:4ab2)
depixel 10, 11, 4, 0
ld a, $15
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
call GFPresents_NextScene
@@ -279,7 +279,7 @@ GFPresents_UpdateLogoPal: ; e4b20 (39:4b20)
; OBP1 was initialized at end of GFPresents_Init
; once we reached the final state, leave it alone
- ld a, [rOBP1]
+ ldh a, [rOBP1]
cp %10010000
ret z
@@ -291,7 +291,7 @@ GFPresents_UpdateLogoPal: ; e4b20 (39:4b20)
; rotate OBP1 by one color slot (2 bits)
; DMG: logo is white, then light gray, then dark gray
; CGB: logo is white, then yellow
- ld a, [rOBP1]
+ ldh a, [rOBP1]
rrca
rrca
call DmgToCgbObjPal1
@@ -315,7 +315,7 @@ GFPresents_Sparkle: ; e4b33 (39:4b33)
push af
depixel 11, 11
ld a, $17
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
pop af
; take the bottom 4 bits of a as an index into
diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm
index 52cc06c7..f907c463 100644
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -15,23 +15,23 @@ NamingScreen: ; 11aad (4:5aad)
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
- ld a, [hMapAnims]
+ ldh a, [hMapAnims]
push af
xor a
- ld [hMapAnims], a
- ld a, [hInMenu]
+ ldh [hMapAnims], a
+ ldh a, [hInMenu]
push af
ld a, $1
- ld [hInMenu], a
+ ldh [hInMenu], a
call Function11ae4
call DelayFrame
.asm_11ad1
call Function11cd4
jr nc, .asm_11ad1
pop af
- ld [hInMenu], a
+ ldh [hInMenu], a
pop af
- ld [hMapAnims], a
+ ldh [hMapAnims], a
pop af
ld [wOptions], a
call ClearJoypad
@@ -45,7 +45,7 @@ Function11ae4: ; 11ae4 (4:5ae4)
call Function1201e
call Function11c67
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
call Function11b09
call WaitBGMap
call WaitTop
@@ -158,7 +158,7 @@ Function11bda:
ld [hl], a
lb de, $24, $20
ld a, $1c
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ld hl, $1
add hl, bc
ld [hl], $0
@@ -190,7 +190,7 @@ Function11c11: ; 11c11 (4:5c11)
ld [hl], a
lb de, $24, $20
ld a, $1c
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ret
Function11c3a: ; 11c3a (4:5c3a)
@@ -300,14 +300,14 @@ Function11cd4: ; 11cd4 (4:5cd4)
callfar ClearAnimatedObjectBuffer
call ClearSprites
xor a
- ld [hSCX], a
- ld [hSCY], a
+ ldh [hSCX], a
+ ldh [hSCY], a
scf
ret
Function11cff: ; 11cff (4:5cff)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
hlcoord 1, 5
call Function11c5b
jr nz, .asm_11d0d
@@ -325,7 +325,7 @@ Function11cff: ; 11cff (4:5cff)
ld l, a
call PlaceString
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
Function11d27: ; 11d27 (4:5d27)
@@ -351,7 +351,7 @@ Function11d3a:
ld d, $40
.asm_11d44
ld a, $14
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ld a, c
ld [wc5d5], a
ld a, b
@@ -843,16 +843,16 @@ Function1201e: ; 1201e (4:601e)
ld [hli], a
ld [hl], $7e
xor a
- ld [hSCY], a
+ ldh [hSCY], a
ld [wGlobalAnimYOffset], a
- ld [hSCX], a
+ ldh [hSCX], a
ld [wGlobalAnimXOffset], a
ld [wce63], a
ld [wce64], a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld [wc5d2], a
ld a, $7
- ld [hWX], a
+ ldh [hWX], a
ret
NamingScreenGFX_Border: INCBIN "gfx/namingscreen/border.2bpp"
@@ -897,23 +897,23 @@ ComposeMailMessage:
ld [hl], e
inc hl
ld [hl], d
- ld a, [hMapAnims]
+ ldh a, [hMapAnims]
push af
xor a
- ld [hMapAnims], a
- ld a, [hInMenu]
+ ldh [hMapAnims], a
+ ldh a, [hInMenu]
push af
ld a, $1
- ld [hInMenu], a
+ ldh [hInMenu], a
call Function12267
call DelayFrame
.asm_1225b
call Function1238d
jr nc, .asm_1225b
pop af
- ld [hInMenu], a
+ ldh [hInMenu], a
pop af
- ld [hMapAnims], a
+ ldh [hMapAnims], a
ret
Function12267: ; 12267 (4:6267)
@@ -926,18 +926,18 @@ Function12267: ; 12267 (4:6267)
ld a, BANK(MailIcon)
call FarCopyBytes
xor a
- ld hl, wTileMapEnd
+ ld hl, wTilemapEnd
ld [hli], a
ld [hl], a
lb de, $18, $10
ld a, $0
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ld hl, $2
add hl, bc
ld [hl], $0
call Function12351
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
call Function12341
ld b, $8
call GetSGBLayout
@@ -1015,14 +1015,14 @@ Function1238d: ; 1238d (4:638d)
callfar ClearAnimatedObjectBuffer
call ClearSprites
xor a
- ld [hSCX], a
- ld [hSCY], a
+ ldh [hSCX], a
+ ldh [hSCY], a
scf
ret
Function123b8: ; 123b8 (4:63b8)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
hlcoord 1, 1
lb bc, 4, 18
call ClearBox
@@ -1033,7 +1033,7 @@ Function123b8: ; 123b8 (4:63b8)
hlcoord 2, 2
call PlaceString
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
Function123d5: ; 123d5 (4:63d5)
@@ -1055,7 +1055,7 @@ Function123d5: ; 123d5 (4:63d5)
Function123e8:
lb de, $48, $10
ld a, $1b
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ld a, c
ld [wc5d5], a
ld a, b
diff --git a/engine/overworld/map_object_action.asm b/engine/overworld/map_object_action.asm
index 40499b50..553243c4 100755
--- a/engine/overworld/map_object_action.asm
+++ b/engine/overworld/map_object_action.asm
@@ -9,7 +9,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call jp_hl
+ call _hl_
ret
Pointers4460:
diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm
index 593a1d75..887fb753 100755
--- a/engine/overworld/map_objects.asm
+++ b/engine/overworld/map_objects.asm
@@ -415,7 +415,7 @@ Function5429: ; 5429 (1:5429)
ld [hl], $2
call Function54c8
ld hl, wCenteredObject
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
cp [hl]
jr z, .asm_5450
ld hl, $9
@@ -435,7 +435,7 @@ Function5457: ; 5457 (1:5457)
ret z
ld a, [wObjectFollow_Leader]
ld d, a
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
cp d
ret nz
ld a, e
@@ -565,7 +565,7 @@ Function5504: ; 5504 (1:5504)
Function5518: ; 5518 (1:5518)
push bc
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld c, a
call Function5521
pop bc
@@ -622,7 +622,7 @@ Function5558: ; 5558 (1:5558)
ld [hli], a
ld a, [de]
ld [hli], a
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld [hli], a
push hl
ld hl, $10
@@ -646,7 +646,7 @@ Function557f:: ; 557f (1:557f)
ld bc, wPlayerStruct
xor a
.asm_5589
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
call DoesObjectHaveASprite
jr z, .asm_5593
call Function55ef
@@ -655,7 +655,7 @@ Function557f:: ; 557f (1:557f)
add hl, bc
ld b, h
ld c, l
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
inc a
cp $d
jr nz, .asm_5589
@@ -668,12 +668,12 @@ Function55a1
ld a, [wd180]
bit 7, a
jr z, .asm_55b8
- ld a, [hLastTalked]
+ ldh a, [hLastTalked]
and a
jr z, .asm_55b8
call Function55bc
.asm_55b8
- call UpdateSprites_
+ call _UpdateSprites
ret
Function55bc: ; 55bc (1:55bc)
@@ -697,13 +697,13 @@ Function55d8: ; 55d8 (1:55d8)
xor a
ld bc, wPlayerStruct
.asm_55dc
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
call Function5613
ld hl, $28
add hl, bc
ld b, h
ld c, l
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
inc a
cp $d
jr nz, .asm_55dc
@@ -812,7 +812,7 @@ Function5660: ; 5660 (1:5660)
jr c, .asm_568f
sub $20
.asm_568f
- ld [hUsedSpriteIndex], a
+ ldh [hUsedSpriteIndex], a
ld a, [wce82]
ld e, a
ld hl, $1a
@@ -841,7 +841,7 @@ Function5660: ; 5660 (1:5660)
jr c, .asm_56bf
sub $20
.asm_56bf
- ld [hUsedSpriteTile], a
+ ldh [hUsedSpriteTile], a
ld hl, $6
add hl, bc
bit 7, [hl]
@@ -854,18 +854,18 @@ Function5660: ; 5660 (1:5660)
ld e, a
.asm_56d1
ld a, d
- ld [hFFC1], a
+ ldh [hFFC1], a
.asm_56d4
- ld a, [hFFC1]
+ ldh a, [hFFC1]
ld d, a
- ld a, [hUsedSpriteTile]
+ ldh a, [hUsedSpriteTile]
add e
dec a
cp $12
jr nc, .asm_56f6
ld b, a
.asm_56e0
- ld a, [hUsedSpriteIndex]
+ ldh a, [hUsedSpriteIndex]
add d
dec a
cp $14
@@ -908,7 +908,7 @@ Function5714: ; 5714 (1:5714)
ld bc, wPlayerSprite
xor a
.asm_5718
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
call DoesObjectHaveASprite
jr z, .asm_5722
call Function437c
@@ -917,7 +917,7 @@ Function5714: ; 5714 (1:5714)
add hl, bc
ld b, h
ld c, l
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
inc a
cp $d
jr nz, .asm_5718
@@ -980,7 +980,7 @@ StartFollow::
Function578b: ; 578b (1:578b)
call CheckObjectVisibility
ret c
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Leader], a
ret
@@ -1006,7 +1006,7 @@ Function57a2: ; 57a2 (1:57a2)
ld hl, $9
add hl, bc
ld [hl], $0
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
ld [wObjectFollow_Follower], a
ret
@@ -1154,25 +1154,25 @@ Function5879: ; 5879 (1:5879)
.data db 6,7,8,9
-UpdateSprites_:: ; 5896 (1:5896)
+_UpdateSprites:: ; 5896 (1:5896)
ld a, [wVramState]
bit 0, a
ret z
xor a
- ld [hUsedSpriteIndex], a
- ld a, [hOAMUpdate]
+ ldh [hUsedSpriteIndex], a
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call Function58fe
call Function58b0
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
Function58b0: ; 58b0 (1:58b0)
ld b, $a0
- ld a, [hUsedSpriteIndex]
+ ldh a, [hUsedSpriteIndex]
cp b
ret nc
ld l, a
@@ -1333,11 +1333,11 @@ Function597a: ; 597a (1:597a)
jr z, .asm_599d
or $80
.asm_599d
- ld [hFFC4], a
+ ldh [hFFC4], a
ld hl, $2
add hl, bc
ld a, [hl]
- ld [hFFC3], a
+ ldh [hFFC3], a
ld hl, $17
add hl, bc
ld a, [hl]
@@ -1348,7 +1348,7 @@ Function597a: ; 597a (1:597a)
ld e, a
ld a, [wce81]
add e
- ld [hFFC1], a
+ ldh [hFFC1], a
ld hl, $18
add hl, bc
ld a, [hl]
@@ -1359,7 +1359,7 @@ Function597a: ; 597a (1:597a)
ld e, a
ld a, [wce82]
add e
- ld [hFFC2], a
+ ldh [hFFC2], a
ld hl, $d
add hl, bc
ld a, [hl]
@@ -1375,28 +1375,28 @@ Function597a: ; 597a (1:597a)
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [hUsedSpriteIndex]
+ ldh a, [hUsedSpriteIndex]
ld c, a
ld b, $c3
ld a, [hli]
- ld [hUsedSpriteTile], a
+ ldh [hUsedSpriteTile], a
add c
cp $a0
jr nc, .asm_5a25
.asm_59f3
- ld a, [hFFC2]
+ ldh a, [hFFC2]
add [hl]
inc hl
ld [bc], a
inc c
- ld a, [hFFC1]
+ ldh a, [hFFC1]
add [hl]
inc hl
ld [bc], a
inc c
ld e, [hl]
inc hl
- ld a, [hFFC3]
+ ldh a, [hFFC3]
bit 2, e
jr z, .asm_5a08
xor a
@@ -1408,19 +1408,19 @@ Function597a: ; 597a (1:597a)
ld a, e
bit 1, a
jr z, .asm_5a14
- ld a, [hFFC4]
+ ldh a, [hFFC4]
or e
.asm_5a14
and $f0
or d
ld [bc], a
inc c
- ld a, [hUsedSpriteTile]
+ ldh a, [hUsedSpriteTile]
dec a
- ld [hUsedSpriteTile], a
+ ldh [hUsedSpriteTile], a
jr nz, .asm_59f3
ld a, c
- ld [hUsedSpriteIndex], a
+ ldh [hUsedSpriteIndex], a
.asm_5a23
xor a
ret
diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm
index 74e44cd3..d98b47ee 100755
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -1,6 +1,6 @@
GetMovementByte:
- ld hl, wMovementDataPointerBank
- call GetMovementByte_
+ ld hl, wMovementDataBank
+ call _GetMovementByte
ret
Function4fbd:
@@ -9,7 +9,7 @@ Function4fbd:
ld e, [hl]
inc [hl]
ld d, $0
- ld hl, wMovementPerson
+ ld hl, wMovementObject
ld a, [hli]
ld h, [hl]
ld l, a
@@ -36,7 +36,7 @@ Function4fdf: ; 4fdf (1:4fdf)
jp Function4fe9
GetMovementPerson
- ld a, [wMovementPerson]
+ ld a, [wMovementObject]
ret
Function4fe9: ; 4fe9 (1:4fe9)
@@ -302,7 +302,7 @@ Function517a: ; 517a (1:517a)
Function519c: ; 519c (1:519c)
call DeleteMapObject
ld hl, wObjectFollow_Leader
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
cp [hl]
jr nz, .asm_51a9
ld [hl], $ff
@@ -719,7 +719,7 @@ Function53b1: ; 53b1 (1:53b1)
call Function54f5
.asm_53cf
ld hl, wCenteredObject
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
cp [hl]
jr z, .asm_53de
ld hl, $9
@@ -740,7 +740,7 @@ Function53e5: ; 53e5 (1:53e5)
add hl, bc
ld [hl], $4
ld hl, wCenteredObject
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
cp [hl]
jr z, .asm_5400
ld hl, $9
@@ -761,7 +761,7 @@ Function5407: ; 5407 (1:5407)
add hl, bc
ld [hl], $1
ld hl, wCenteredObject
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
cp [hl]
jr z, .asm_5422
ld hl, $9
diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm
index e776402a..84235570 100755
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -224,7 +224,7 @@ CheckFacingObject:
.asm_70d0
ld bc, wObjectStructs
ld a, $0
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
call Function7120
ret nc
ld hl, $7
@@ -249,7 +249,7 @@ WillPersonBumpIntoSomeoneElse: ; 70e8 (1:70e8)
jr Function7120
Function70f4:
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
call GetObjectStruct
call Function7100
call Function7120
@@ -288,7 +288,7 @@ Function7120: ; 7120 (1:7120)
ld bc, wPlayerStruct
xor a
.asm_7124
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
call DoesObjectHaveASprite
jr z, .asm_7172
ld hl, $4
@@ -315,9 +315,9 @@ Function7120: ; 7120 (1:7120)
cp e
jr nz, .asm_715a
.asm_7152
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld l, a
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
cp l
jr nz, .asm_7181
.asm_715a
@@ -331,9 +331,9 @@ Function7120: ; 7120 (1:7120)
ld a, [hl]
cp e
jr nz, .asm_7172
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
ld l, a
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
cp l
jr nz, .asm_7181
.asm_7172
@@ -341,7 +341,7 @@ Function7120: ; 7120 (1:7120)
add hl, bc
ld b, h
ld c, l
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
inc a
cp $d
jr nz, .asm_7124
@@ -445,7 +445,7 @@ Function71f2
ld bc, wObjectStructs
xor a
.asm_71fe
- ld [hConnectedMapWidth], a
+ ldh [hConnectedMapWidth], a
call DoesObjectHaveASprite
jr z, .asm_723f
ld hl, $3
@@ -468,7 +468,7 @@ Function71f2
ld a, [hl]
cp d
jr nz, .asm_722d
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
cp $0
jr z, .asm_723f
jr .asm_724e
@@ -491,7 +491,7 @@ Function71f2
add hl, bc
ld b, h
ld c, l
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
inc a
cp $d
jr nz, .asm_71fe
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 8af7c726..3fa38cc0 100755
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -11,7 +11,7 @@ DoPlayerMovement:: ; 10000 (4:4000)
ret
Function10017: ; 10017 (4:4017)
- ld a, [hJoyDown]
+ ldh a, [hJoyDown]
ld [wcf29], a
CheckFlagHL ENGINE_DOWNHILL
ret z
@@ -87,7 +87,7 @@ Function1002d: ; 1002d (4:402d)
ld a, [wcf2e]
cp $ff
jr z, .asm_100b2
- ld a, [wTempTrainerHeader]
+ ld a, [wTempTrainer]
and a
jr nz, .asm_100ad
call Function103ee
@@ -367,7 +367,7 @@ Function10226: ; 10226 (4:4226)
cp [hl]
jr nz, .asm_10259
ld a, $1
- ld [wTempTrainerHeader], a
+ ld [wTempTrainer], a
ld a, [wcf2e]
cp $ff
jr z, .asm_10259
@@ -476,7 +476,7 @@ Function102b3: ; 102b3 (4:42b3)
Function102bf: ; 102bf (4:42bf)
ld a, $0
- ld [wTempTrainerHeaderEnd], a
+ ld [wTempTrainerEnd], a
ld a, $50
ld [wcf2d], a
xor a
@@ -485,7 +485,7 @@ Function102bf: ; 102bf (4:42bf)
Function102cb: ; 102cb (4:42cb)
call Function10404
ret nc
- ld a, [wTempTrainerHeaderEnd]
+ ld a, [wTempTrainerEnd]
.asm_102d2
cp $0
ret z
@@ -564,7 +564,7 @@ Function102ec: ; 102ec (4:42ec)
Function10341: ; 10341 (4:4341)
ld a, 0
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ld a, [wPlayerStandingMapX]
ld d, a
ld a, [wcf30]
@@ -705,7 +705,7 @@ Function103f9: ; 103f9 (4:43f9)
ret
Function10404: ; 10404 (4:4404)
- ld a, [wTempTrainerHeaderEnd]
+ ld a, [wTempTrainerEnd]
cp $0
jr z, .asm_10420
cp $f0
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index 64977b97..0865dbf8 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -1,18 +1,18 @@
BlankScreen:
call DisableSpriteUpdates
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call ClearBGPalettes
call ClearSprites
- ld hl, wTileMap
+ ld hl, wTilemap
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, " "
call ByteFill
- ld hl, wAttrMap
+ ld hl, wAttrmap
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, $7
call ByteFill
- call Function3456
+ call WaitBGMap2
call SetPalettes
ret
@@ -26,10 +26,10 @@ SpawnPlayer: ; 861a (2:461a)
ld b, $0
call PlayerSpawn_ConvertCoords
ld a, $0
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ld de, wObjectStructs
ld a, $0
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ld bc, wMapObjects
call CopyMapObjectToObjectStruct
ld a, $0
@@ -77,7 +77,7 @@ WritePersonXY:
ld hl, $11
add hl, bc
ld e, [hl]
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
ld b, a
call CopyDECoordsToMapObject
and a
@@ -122,7 +122,7 @@ SpawnPlayer2:
.PlayerObjectTemplate:
object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1
-CopyObjectStruct_:: ; 86d7 (2:46d7)
+CopyObjectStruct:: ; 86d7 (2:46d7)
call CheckObjectMask
and a
ret nz
@@ -130,12 +130,12 @@ CopyObjectStruct_:: ; 86d7 (2:46d7)
ld a, $1
ld de, $28
.asm_86e4
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ld a, [hl]
and a
jr z, .asm_86f4
add hl, de
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
inc a
cp $d
jr nz, .asm_86e4
@@ -160,11 +160,11 @@ CopyMapObjectToObjectStruct: ; 8706 (2:4706)
ret
CopyMapObjectToTempObject: ; 870d (2:470d)
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
ld hl, $0
add hl, bc
ld [hl], a
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld [wce99], a
ld hl, $1
add hl, bc
@@ -210,7 +210,7 @@ InitializeVariableSprites:
ld bc, wMap2Object
ld a, $2
.asm_876c
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld hl, $1
add hl, bc
ld a, [hl]
@@ -242,7 +242,7 @@ InitializeVariableSprites:
cp $b
jr nc, .asm_87ab
push bc
- call CopyObjectStruct_
+ call CopyObjectStruct
pop bc
jp c, Function87b9
.asm_87ab
@@ -250,7 +250,7 @@ InitializeVariableSprites:
add hl, bc
ld b, h
ld c, l
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
inc a
cp $10
jr nz, .asm_876c
@@ -289,7 +289,7 @@ asm_87da
ld bc, wMap2Object
ld a, $2
.asm_87e4
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld hl, $1
add hl, bc
ld a, [hl]
@@ -315,7 +315,7 @@ asm_87da
jr nc, .asm_8814
push de
push bc
- call CopyObjectStruct_
+ call CopyObjectStruct
pop bc
pop de
.asm_8814
@@ -323,7 +323,7 @@ asm_87da
add hl, bc
ld b, h
ld c, l
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
inc a
cp $10
jr nz, .asm_87e4
@@ -344,7 +344,7 @@ asm_882e
ld bc, wMap2Object
ld a, $2
.asm_8838
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld hl, $1
add hl, bc
ld a, [hl]
@@ -370,7 +370,7 @@ asm_882e
jr nc, .asm_8868
push de
push bc
- call CopyObjectStruct_
+ call CopyObjectStruct
pop bc
pop de
.asm_8868
@@ -378,7 +378,7 @@ asm_882e
add hl, bc
ld b, h
ld c, l
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
inc a
cp $10
jr nz, .asm_8838
@@ -474,14 +474,14 @@ InitTempObjectRadius: ; 88fd (2:48fd)
ret
TrainerWalkToPlayer:
- ld a, [hLastTalked]
+ ldh a, [hLastTalked]
call InitMovementBuffer
ld a, movement_step_sleep
call AppendToMovementBuffer
ld a, [wcf2a]
dec a
jr z, .asm_892b
- ld a, [hLastTalked]
+ ldh a, [hLastTalked]
ld b, a
ld c, PLAYER
ld d, $1
@@ -624,7 +624,7 @@ FollowNotExact:
ld hl, $18
add hl, de
ld [hl], a
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
ld hl, $20
add hl, de
ld [hl], a
diff --git a/engine/overworld/player_step.asm b/engine/overworld/player_step.asm
index 70947346..36698ed8 100755
--- a/engine/overworld/player_step.asm
+++ b/engine/overworld/player_step.asm
@@ -39,12 +39,12 @@ ScrollScreen::
ld d, a
ld a, [wPlayerStepVectorY]
ld e, a
- ld a, [hSCX]
+ ldh a, [hSCX]
add d
- ld [hSCX], a
- ld a, [hSCY]
+ ldh [hSCX], a
+ ldh a, [hSCY]
add e
- ld [hSCY], a
+ ldh [hSCY], a
ret
Functiond4f2: ; d4f2 (3:54f2)
diff --git a/engine/overworld/time.asm b/engine/overworld/time.asm
index ce847b18..01273a75 100755
--- a/engine/overworld/time.asm
+++ b/engine/overworld/time.asm
@@ -305,7 +305,7 @@ CalcSecsMinsHoursDaysSince: ; 119c7 (4:59c7)
inc hl
inc hl
inc hl
- ld a, [hSeconds]
+ ldh a, [hSeconds]
ld c, a
sub [hl]
jr nc, .asm_119d2
@@ -315,7 +315,7 @@ CalcSecsMinsHoursDaysSince: ; 119c7 (4:59c7)
dec hl
ld [wSecsSince], a
CalcMinsHoursDaysSince_
- ld a, [hMinutes]
+ ldh a, [hMinutes]
ld c, a
sbc [hl]
jr nc, .asm_119df
@@ -325,7 +325,7 @@ CalcMinsHoursDaysSince_
dec hl
ld [wMinsSince], a
CalcHoursDaysSince_
- ld a, [hHours]
+ ldh a, [hHours]
ld c, a
sbc [hl]
jr nc, .asm_119ec
@@ -348,11 +348,11 @@ CalcDaysSince_:
CopyDayHourMinSecToHL: ; 119ff (4:59ff)
ld a, [wCurDay]
ld [hli], a
- ld a, [hHours]
+ ldh a, [hHours]
ld [hli], a
- ld a, [hMinutes]
+ ldh a, [hMinutes]
ld [hli], a
- ld a, [hSeconds]
+ ldh a, [hSeconds]
ld [hli], a
ret
@@ -364,15 +364,15 @@ CopyDayToHL: ; 11a0d (4:5a0d)
CopyDayHourToHL:
ld a, [wCurDay]
ld [hli], a
- ld a, [hHours]
+ ldh a, [hHours]
ld [hli], a
ret
CopyDayHourMinToHL: ; 11a1a (4:5a1a)
ld a, [wCurDay]
ld [hli], a
- ld a, [hHours]
+ ldh a, [hHours]
ld [hli], a
- ld a, [hMinutes]
+ ldh a, [hMinutes]
ld [hli], a
ret
diff --git a/engine/pack.asm b/engine/pack.asm
index 27db7cd2..620976a9 100755
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -39,7 +39,7 @@ Function10456: ; 10456 (4:4456)
Pack_InitGFX:
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
ld a, [wce64]
ld [wce63], a
@@ -57,7 +57,7 @@ Pack_InitItemsPocket:
Pack_ItemsPocketMenu:
ld hl, ItemsPocketMenuDataHeader
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -86,7 +86,7 @@ Pack_InitKeyItemsPocket:
Pack_KeyItemsPocketMenu:
ld hl, KeyItemsPocketMenuDataHeader ; $4e9a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -109,7 +109,7 @@ Pack_InitTMHMPocket:
call Function10e51
call Function10dd6
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10cca
call Function10c96
ret
@@ -120,7 +120,7 @@ Pack_TMHMPocketMenu:
ld c, $1
call Function10cef
ret c
- farcall CheckTossableItem_
+ farcall _CheckTossableItem
ld a, [wItemAttributeParamBuffer]
and a
jr nz, .asm_1053a
@@ -133,7 +133,7 @@ Pack_TMHMPocketMenu:
ld de, TMHMPocketSubmenuJumptable_NoGive ; $4567
.asm_10540
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -193,7 +193,7 @@ UseTMorHM:
ld [wOptions], a
.asm_105a9
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
call Function10cca
call Function10e5b
@@ -210,7 +210,7 @@ Pack_InitBallsPocket:
Pack_BallsPocketMenu:
ld hl, BallsPocketMenuDataHeader ; $4eca
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -228,7 +228,7 @@ Pack_BallsPocketMenu:
ret
Function105f5: ; 105f5 (4:45f5)
- farcall CheckTossableItem_
+ farcall _CheckTossableItem
ld a, [wItemAttributeParamBuffer]
and a
jr nz, .asm_10629
@@ -286,7 +286,7 @@ Function105f5: ; 105f5 (4:45f5)
ld de, ItemSubmenuJumptable_GiveTossQuit ; $473b
.asm_10665
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -447,7 +447,7 @@ UseItem:
jr z, .no_pokemon
call DoItemEffect
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
call Function10cca
call Function10e5b
@@ -477,7 +477,7 @@ TossMenu:
jr c, .asm_107cc
call Function10e38
ld hl, Text_ConfirmThrowAway
- call MenuTextBox
+ call MenuTextbox
call YesNoBox
push af
call ExitMenu
@@ -597,7 +597,7 @@ GiveItem:
pop af
ld [wOptions], a
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
call Function10cca
call Function10e5b
@@ -656,7 +656,7 @@ Function108e9: ; 108e9 (4:48e9)
BattlePack_InitGFX:
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
ld a, [wce64]
ld [wce63], a
@@ -674,7 +674,7 @@ BattlePack_InitItemsPocket:
BattlePack_ItemsPocketMenu:
ld hl, $4e6a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -702,7 +702,7 @@ BattlePack_InitKeyItemsPocket:
BattlePack_KeyItemsPocketMenu:
ld hl, $4e9a
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -725,7 +725,7 @@ BattlePack_InitTMHMPocket:
call Function10e51
call Function10dd6
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10cca
ld hl, Text_PackEmptyString
call Function10cb9
@@ -753,7 +753,7 @@ BattlePack_InitBallsPocket:
BattlePack_BallsPocketMenu:
ld hl, $4eca
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -785,7 +785,7 @@ Function10a0c: ; 10a0c (4:4a0c)
ld de, BattlePackQuitJumptable
.asm_10a1d
push de
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call ExitMenu
pop hl
@@ -860,7 +860,7 @@ Function10a86:
and a
jr nz, asm_10aae
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function10d70
call Function10cca
call Function10e5b
@@ -908,7 +908,7 @@ Function10aba: ; 10aba (4:4aba)
Function10ad5: ; 10ad5 (4:4ad5)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld [wce63], a
ld [wce64], a
ld [wce65], a
@@ -940,7 +940,7 @@ DepositOrSell_ItemPocket:
xor a
call Function10b92
ld hl, PC_Mart_ItemsPocketMenuDataHeader ; $4e82
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfca]
ld [wMenuCursorBuffer], a
ld a, [wcfcf]
@@ -956,7 +956,7 @@ DepositOrSell_KeyItemsPocket:
ld a, $2
call Function10b92
ld hl, PC_Mart_KeyItemsPocketMenuDataHeader ; $4eb2
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcb]
ld [wMenuCursorBuffer], a
ld a, [wcfd0]
@@ -981,7 +981,7 @@ DepositOrSell_BallsPocket:
ld a, $1
call Function10b92
ld hl, PC_Mart_BallsPocketMenuDataHeader ; $4ee2
- call CopyMenuDataHeader
+ call CopyMenuHeader
ld a, [wcfcc]
ld [wMenuCursorBuffer], a
ld a, [wcfd1]
@@ -1155,7 +1155,7 @@ asm_10c8a
push hl
call Function10b92
pop hl
- call CopyMenuDataHeader
+ call CopyMenuHeader
call ScrollingMenu
ret
@@ -1308,7 +1308,7 @@ Function10cef: ; 10cef (4:4cef)
Function10d70: ; 10d70 (4:4d70)
call ClearBGPalettes
- call ClearTileMap
+ call ClearTilemap
call ClearSprites
call DisableLCD
ld hl, PackMenuGFX
@@ -1404,7 +1404,7 @@ Function10e38: ; 10e38 (4:4e38)
ld a, [wd002]
ld [wd151], a
call GetItemName
- call Function317b
+ call CopyName1
ret
Pack_ClearTilemap:
diff --git a/engine/sine.asm b/engine/sine.asm
index 9a730219..e22d785a 100644
--- a/engine/sine.asm
+++ b/engine/sine.asm
@@ -1,4 +1,4 @@
-Sine_e:: ; 8ac9 (2:4ac9)
+_Sine:: ; 8ac9 (2:4ac9)
ld a, e
and $3f
cp $20
diff --git a/engine/specials.asm b/engine/specials.asm
index aa8aefdd..ad6c2085 100755
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -83,7 +83,7 @@ SpecialsPointers:
add_special ReloadSpritesNoPalettes, $02
add_special ClearBGPalettes
add_special UpdateTimePals
- add_special ClearTileMap
+ add_special ClearTilemap
add_special UpdateSprites
add_special ReplacePlayerSprite
add_special GameCornerPrizeMonCheckDex
@@ -342,9 +342,9 @@ DummyNonfunctionalGameCornerGame: ; c4e7 (3:44e7)
ret
Functionc4f4: ; c4f4 (3:44f4)
- call Function3425
+ call FarQueueScript
call FadeToMenu
- ld hl, wcfd8
+ ld hl, wQueuedScriptBank
ld a, [hli]
push af
ld a, [hli]
@@ -524,10 +524,10 @@ PlayCurMonCry: ; c60b (3:460b)
jp PlayMonCry
GameboyCheck: ; c611 (3:4611)
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr nz, .asm_c622
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
jr nz, .asm_c61e
xor a
diff --git a/engine/sprites.asm b/engine/sprites.asm
index eb9b2fd5..b9267d66 100755
--- a/engine/sprites.asm
+++ b/engine/sprites.asm
@@ -101,7 +101,7 @@ DoNextFrameForFirst16Sprites: ; 8d1c9
.cancel
ret ; 23:51f6
-InitAnimatedObjectStruct_:: ; 8d1f7
+_InitSpriteAnimStruct:: ; 8d1f7
push de ; 23:51f7
push af ; 23:51f8
ld hl, $c51c ; 23:51f9
diff --git a/engine/title.asm b/engine/title.asm
index 8427dfc9..94863c56 100755
--- a/engine/title.asm
+++ b/engine/title.asm
@@ -12,9 +12,9 @@ StartTitleScreen:
call ClearBGPalettes
ld hl, rLCDC
res 2, [hl]
- call ClearTileMap
+ call ClearTilemap
xor a
- ld [hLCDCPointer], a
+ ldh [hLCDCPointer], a
ld b, $8
call GetSGBLayout
call UpdateTimePals
@@ -46,14 +46,14 @@ InitTitleScreen: ; 6291 (1:6291)
ld [wTimeOfDayPal], a
ld de, MUSIC_NONE
call PlayMusic
- call ClearTileMap
+ call ClearTilemap
call DisableLCD
call ClearSprites
xor a
- ld [hBGMapMode], a
- ld [hMapAnims], a
- ld [hSCY], a
- ld [hSCX], a
+ ldh [hBGMapMode], a
+ ldh [hMapAnims], a
+ ldh [hSCY], a
+ ldh [hSCX], a
ld hl, $8000
ld bc, $2000
xor a
@@ -98,7 +98,7 @@ InitTitleScreen: ; 6291 (1:6291)
ld [hl], a
ld de, $6058
ld a, $2c ; HO-OH
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ld hl, wAnimatedObjectStruct1
ld de, wAnimatedObjectStruct10
ld bc, $a
@@ -110,7 +110,7 @@ InitTitleScreen: ; 6291 (1:6291)
xor a
call ByteFill
ld a, $43
- ld [hLCDCPointer], a
+ ldh [hLCDCPointer], a
ld b, $c
call GetSGBLayout
call Function6341
@@ -119,41 +119,41 @@ InitTitleScreen: ; 6291 (1:6291)
ret
Function6341: ; 6341 (1:6341)
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr nz, .asm_6365
- ld a, [hSGB]
+ ldh a, [hSGB]
and a
jr nz, .asm_6358
ld a, $d8
- ld [rBGP], a
+ ldh [rBGP], a
IF DEF(GOLD)
ld a, $ff
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $f8
ENDC
IF DEF(SILVER)
ld a, $f0
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $f0
ENDC
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
.asm_6358
ld a, $e4
- ld [rBGP], a
+ ldh [rBGP], a
IF DEF(GOLD)
ld a, $ff
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $e4
ENDC
IF DEF(SILVER)
ld a, $f0
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $e0
ENDC
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
.asm_6365
@@ -166,11 +166,11 @@ ENDC
ret
Function636e: ; 636e (1:636e)
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret z
ld a, $1
- ld [rVBK], a
+ ldh [rVBK], a
ld hl, $9800
ld bc, $240
xor a
@@ -188,7 +188,7 @@ Function636e: ; 636e (1:636e)
ld a, $4
call ByteFill
ld a, $0
- ld [rVBK], a
+ ldh [rVBK], a
ret
Function63a6: ; 63a6 (1:63a6)
@@ -220,7 +220,7 @@ Function63b6: ; 63b6 (1:63b6)
jr .asm_63bc
.asm_63ca
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret nz
ld hl, $9960
@@ -236,10 +236,10 @@ TitleScreenFrame: ; 63da (1:63da)
jr nz, .asm_63fc
call Function640f
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
farcall AnimatedObjects_PlayFrame
xor a
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call Function64b1
call DelayFrame
and a
@@ -251,7 +251,7 @@ TitleScreenFrame: ; 63da (1:63da)
Function63fe: ; 63fe (1:63fe)
IF DEF(GOLD)
- ld a, [hVBlankCounter]
+ ldh a, [hVBlankCounter]
and $7
ret nz
ENDC
@@ -409,7 +409,7 @@ IF DEF(SILVER)
ld de, $7c58
ENDC
ld a, $f
- call InitAnimatedObjectStruct
+ call InitSpriteAnimStruct
ret
IF DEF(GOLD)
@@ -423,7 +423,7 @@ IF DEF(GOLD)
ENDC
Copyright:
- call ClearTileMap
+ call ClearTilemap
call LoadFontsExtra
ld de, CopyrightGFX
ld hl, vTiles2 tile $60
diff --git a/engine/variables.asm b/engine/variables.asm
index e2a399f0..7e6906ee 100755
--- a/engine/variables.asm
+++ b/engine/variables.asm
@@ -25,7 +25,7 @@ GetVarAction_::
jr .loadstringbuffer2
.call
- call jp_de
+ call _de_
ret
.loadstringbuffer2
diff --git a/gfx/pics/animation.asm b/gfx/pics/animation.asm
deleted file mode 100644
index e26592fd..00000000
--- a/gfx/pics/animation.asm
+++ /dev/null
@@ -1,1146 +0,0 @@
-; Pic animation arrangement.
-
-
-AnimateMon_Slow_Normal: ; d0000
- hlcoord 12, 0
- ld a, [wBattleMode]
- cp WILD_BATTLE
- jr z, .wild
- ld e, ANIM_MON_SLOW
- ld d, $0
- call AnimateFrontpic
- ret
-
-.wild
- ld e, ANIM_MON_NORMAL
- ld d, $0
- call AnimateFrontpic
- ret
-; d001a
-
-AnimateMon_Menu: ; d001a
- ld e, ANIM_MON_MENU
- ld d, $0
- call AnimateFrontpic
- ret
-; d0022
-
-AnimateMon_Trade: ; d0022
- ld e, ANIM_MON_TRADE
- ld d, $0
- call AnimateFrontpic
- ret
-; d002a
-
-AnimateMon_Evolve: ; d002a
- ld e, ANIM_MON_EVOLVE
- ld d, $0
- call AnimateFrontpic
- ret
-; d0032
-
-AnimateMon_Hatch: ; d0032
- ld e, ANIM_MON_HATCH
- ld d, $0
- call AnimateFrontpic
- ret
-; d003a
-
-AnimateMon_Unused: ; d003a
- ld e, ANIM_MON_UNUSED
- ld d, $0
- call AnimateFrontpic
- ret
-; d0042
-
-
-POKEANIM: MACRO
- rept _NARG
-
-; Workaround for a bug where macro args can't come after the start of a symbol
-if !def(\1_POKEANIM)
-\1_POKEANIM equs "PokeAnim_\1_"
-endc
-
- db (\1_POKEANIM - PokeAnim_SetupCommands) / 2
- shift
- endr
-
- db (PokeAnim_Finish_ - PokeAnim_SetupCommands) / 2
-ENDM
-
-
-PokeAnims: ; d0042
- dw .Slow
- dw .Normal
- dw .Menu
- dw .Trade
- dw .Evolve
- dw .Hatch
- dw .Unused ; same as .Menu
- dw .Egg1
- dw .Egg2
-
-.Slow: POKEANIM StereoCry, Setup2, Play
-.Normal: POKEANIM StereoCry, Setup, Play
-.Menu: POKEANIM CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Trade: POKEANIM Extra, Play2, Extra, Play, SetWait, Wait, Cry, Setup, Play
-.Evolve: POKEANIM Extra, Play, SetWait, Wait, CryNoWait, Setup, Play
-.Hatch: POKEANIM Extra, Play, CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Unused: POKEANIM CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Egg1: POKEANIM Setup, Play
-.Egg2: POKEANIM Extra, Play
-
-
-AnimateFrontpic: ; d008e
- call AnimateMon_CheckIfPokemon
- ret c
- call LoadMonAnimation
-.loop
- call SetUpPokeAnim
- push af
- callba HDMATransferTileMapToWRAMBank3
- pop af
- jr nc, .loop
- ret
-; d00a3
-
-LoadMonAnimation: ; d00a3
- push hl
- ld c, e
- ld b, 0
- ld hl, PokeAnims
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld b, [hl]
- ld c, a
- pop hl
- call PokeAnim_InitPicAttributes
- ret
-; d00b4
-
-SetUpPokeAnim: ; d00b4
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- ld a, [wPokeAnimSceneIndex]
- ld c, a
- ld b, 0
- ld hl, wPokeAnimPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- ld a, [hl]
- ld hl, PokeAnim_SetupCommands
- rst JumpTable
- ld a, [wPokeAnimSceneIndex]
- ld c, a
- pop af
- ld [rSVBK], a
- ld a, c
- and $80
- ret z
- scf
- ret
-; d00da
-
-PokeAnim_SetupCommands: ; d00da
-setup_command: macro
-\1_: dw \1
-endm
- setup_command PokeAnim_Finish
- setup_command PokeAnim_BasePic
- setup_command PokeAnim_SetWait
- setup_command PokeAnim_Wait
- setup_command PokeAnim_Setup
- setup_command PokeAnim_Setup2
- setup_command PokeAnim_Extra
- setup_command PokeAnim_Play
- setup_command PokeAnim_Play2
- setup_command PokeAnim_Cry
- setup_command PokeAnim_CryNoWait
- setup_command PokeAnim_StereoCry
-; d00f2
-
-PokeAnim_SetWait: ; d00f2
- ld a, 18
- ld [wPokeAnimWaitCounter], a
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
-
-PokeAnim_Wait: ; d00fe
- ld hl, wPokeAnimWaitCounter
- dec [hl]
- ret nz
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d010b
-
-PokeAnim_Setup: ; d010b
- ld c, FALSE
- ld b, 0
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d011d
-
-PokeAnim_Setup2: ; d011d
- ld c, FALSE
- ld b, 4
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d012f
-
-PokeAnim_Extra: ; d012f
- ld c, TRUE
- ld b, 0
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0141
-
-PokeAnim_Play: ; d0141
- call PokeAnim_DoAnimScript
- ld a, [wPokeAnimJumptableIndex]
- bit 7, a
- ret z
- call PokeAnim_PlaceGraphic
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0155
-
-PokeAnim_Play2: ; d0155
- call PokeAnim_DoAnimScript
- ld a, [wPokeAnimJumptableIndex]
- bit 7, a
- ret z
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0166
-
-PokeAnim_BasePic: ; d0166
- call PokeAnim_DeinitFrames
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0171
-
-PokeAnim_Finish: ; d0171
- call PokeAnim_DeinitFrames
- ld hl, wPokeAnimSceneIndex
- set 7, [hl]
- ret
-; d017a
-
-PokeAnim_Cry: ; d017a
- ld a, [wPokeAnimSpecies]
- call _PlayCry
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0188
-
-PokeAnim_CryNoWait: ; d0188
- ld a, [wPokeAnimSpecies]
- call PlayCry2
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0196
-
-PokeAnim_StereoCry: ; d0196
- ld a, $f
- ld [CryTracks], a
- ld a, [wPokeAnimSpecies]
- call PlayStereoCry2
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d01a9
-
-PokeAnim_DeinitFrames: ; d01a9
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- call PokeAnim_PlaceGraphic
- callba HDMATransferTileMapToWRAMBank3
- call PokeAnim_SetVBank0
- callba HDMATransferAttrMapToWRAMBank3
- pop af
- ld [rSVBK], a
- ret
-; d01c6
-
-AnimateMon_CheckIfPokemon: ; d01c6
- ld a, [CurPartySpecies]
- cp EGG
- jr z, .fail
- call IsAPokemon
- jr c, .fail
- and a
- ret
-
-.fail
- scf
- ret
-; d01d6
-
-PokeAnim_InitPicAttributes: ; d01d6
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
-
- push bc
- push de
- push hl
- ld hl, wPokeAnimSceneIndex
- ld bc, wPokeAnimStructEnd - wPokeAnimSceneIndex
- xor a
- call ByteFill
- pop hl
- pop de
- pop bc
-
-; bc contains anim pointer
- ld a, c
- ld [wPokeAnimPointer], a
- ld a, b
- ld [wPokeAnimPointer + 1], a
-; hl contains TileMap coords
- ld a, l
- ld [wPokeAnimCoord], a
- ld a, h
- ld [wPokeAnimCoord + 1], a
-; d = start tile
- ld a, d
- ld [wPokeAnimGraphicStartTile], a
-
- ld a, $1
- ld hl, CurPartySpecies
- call GetFarWRAMByte
- ld [wPokeAnimSpecies], a
-
- ld a, $1
- ld hl, UnownLetter
- call GetFarWRAMByte
- ld [wPokeAnimUnownLetter], a
-
- call PokeAnim_GetSpeciesOrUnown
- ld [wPokeAnimSpeciesOrUnown], a
-
- call PokeAnim_GetFrontpicDims
- ld a, c
- ld [wPokeAnimFrontpicHeight], a
-
- pop af
- ld [rSVBK], a
- ret
-; d0228
-
-PokeAnim_InitAnim: ; d0228
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- push bc
- ld hl, wPokeAnimExtraFlag
- ld bc, wPokeAnimStructEnd - wPokeAnimExtraFlag
- xor a
- call ByteFill
- pop bc
- ld a, b
- ld [wPokeAnimSpeed], a
- ld a, c
- ld [wPokeAnimExtraFlag], a
- call GetMonAnimPointer
- call GetMonFramesPointer
- call GetMonBitmaskPointer
- pop af
- ld [rSVBK], a
- ret
-; d0250
-
-PokeAnim_DoAnimScript: ; d0250
- xor a
- ld [hBGMapMode], a
-.loop
- ld a, [wPokeAnimJumptableIndex]
- and $7f
- ld hl, .Jumptable
- rst JumpTable
- ret
-; d025d
-
-.Jumptable: ; d025d
- dw .RunAnim
- dw .WaitAnim
-; d0261
-
-.RunAnim: ; d0261
- call PokeAnim_GetPointer
- ld a, [wPokeAnimCommand]
- cp -1
- jr z, PokeAnim_End
- cp -2
- jr z, .SetRepeat
- cp -3
- jr z, .DoRepeat
- call PokeAnim_GetFrame
- ld a, [wPokeAnimParameter]
- call PokeAnim_GetDuration
- ld [wPokeAnimWaitCounter], a
- call PokeAnim_StartWaitAnim
-.WaitAnim: ; d0282
- ld a, [wPokeAnimWaitCounter]
- dec a
- ld [wPokeAnimWaitCounter], a
- ret nz
- call PokeAnim_StopWaitAnim
- ret
-; d028e
-
-.SetRepeat: ; d028e
- ld a, [wPokeAnimParameter]
- ld [wPokeAnimRepeatTimer], a
- jr .loop
-; d0296
-
-.DoRepeat: ; d0296
- ld a, [wPokeAnimRepeatTimer]
- and a
- ret z
- dec a
- ld [wPokeAnimRepeatTimer], a
- ret z
- ld a, [wPokeAnimParameter]
- ld [wPokeAnimFrame], a
- jr .loop
-; d02a8
-
-PokeAnim_End: ; d02a8
- ld hl, wPokeAnimJumptableIndex
- set 7, [hl]
- ret
-; d02ae
-
-PokeAnim_GetDuration: ; d02ae
-; a * (1 + [wPokeAnimSpeed] / 16)
- ld c, a
- ld b, $0
- ld hl, 0
- ld a, [wPokeAnimSpeed]
- call AddNTimes
- ld a, h
- swap a
- and $f0
- ld h, a
- ld a, l
- swap a
- and $f
- or h
- add c
- ret
-; d02c8
-
-PokeAnim_GetFrame: ; d02c8
- call PokeAnim_PlaceGraphic
- ld a, [wPokeAnimCommand]
- and a
- ret z
- call PokeAnim_GetBitmaskIndex
- push hl
- call PokeAnim_CopyBitmaskToBuffer
- pop hl
- call PokeAnim_ConvertAndApplyBitmask
- ret
-; d02dc
-
-PokeAnim_StartWaitAnim: ; d02dc
- ld a, [wPokeAnimJumptableIndex]
- inc a
- ld [wPokeAnimJumptableIndex], a
- ret
-; d02e4
-
-PokeAnim_StopWaitAnim: ; d02e4
- ld a, [wPokeAnimJumptableIndex]
- dec a
- ld [wPokeAnimJumptableIndex], a
- ret
-; d02ec
-
-PokeAnim_IsUnown: ; d02ec
- ld a, [wPokeAnimSpecies]
- cp UNOWN
- ret
-; d02f2
-
-PokeAnim_IsEgg: ; d02f2
- ld a, [wPokeAnimSpecies]
- cp EGG
- ret
-; d02f8
-
-PokeAnim_GetPointer: ; d02f8
- push hl
- ld a, [wPokeAnimFrame]
- ld e, a
- ld d, $0
- ld hl, wPokeAnimPointerAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- add hl, de
- ld a, [wPokeAnimPointerBank]
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimCommand], a
- ld a, h
- ld [wPokeAnimParameter], a
- ld hl, wPokeAnimFrame
- inc [hl]
- pop hl
- ret
-; d031b
-
-PokeAnim_GetBitmaskIndex: ; d031b
- ld a, [wPokeAnimCommand]
- dec a
- ld c, a
- ld b, $0
- ld hl, wPokeAnimFramesAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- add hl, bc
- ld a, [wPokeAnimFramesBank]
- call GetFarHalfword
- ld a, [wPokeAnimFramesBank]
- call GetFarByte
- ld [wPokeAnimCurBitmask], a
- inc hl
- ret
-; d033b
-
-PokeAnim_CopyBitmaskToBuffer: ; d033b
- call .GetSize
- push bc
- ld hl, wPokeAnimBitmaskAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wPokeAnimCurBitmask]
- call AddNTimes
- pop bc
- ld de, wPokeAnimBitmaskBuffer
- ld a, [wPokeAnimBitmaskBank]
- call FarCopyBytes
- ret
-; d0356
-
-.GetSize: ; d0356
- push hl
- ld a, [wPokeAnimFrontpicHeight]
- sub 5 ; to get a number 0, 1, or 2
- ld c, a
- ld b, 0
- ld hl, .Sizes
- add hl, bc
- ld c, [hl]
- ld b, 0
- pop hl
- ret
-; d0368
-
-.Sizes: db 4, 5, 7
-
-poke_anim_box: MACRO
-y = 7
-rept \1
-x = 7 +- \1
-rept \1
- db x + y
-x = x + 1
-endr
-y = y + 7
-endr
-endm
-
-PokeAnim_ConvertAndApplyBitmask: ; d036b
- xor a
- ld [wPokeAnimBitmaskCurBit], a
- ld [wPokeAnimBitmaskCurRow], a
- ld [wPokeAnimBitmaskCurCol], a
-.loop
- push hl
- call .IsCurBitSet
- pop hl
- ld a, b
- and a
- jr z, .next
-
- ld a, [wPokeAnimFramesBank]
- call GetFarByte
- inc hl
- push hl
- call .ApplyFrame
- pop hl
-
-.next
- push hl
- call .NextBit
- pop hl
- jr nc, .loop
- ret
-; d0392
-
-.IsCurBitSet: ; d0392
-; which byte
- ld a, [wPokeAnimBitmaskCurBit]
- and $f8
- rrca
- rrca
- rrca
- ld e, a
- ld d, 0
- ld hl, wPokeAnimBitmaskBuffer
- add hl, de
- ld b, [hl]
-; which bit
- ld a, [wPokeAnimBitmaskCurBit]
- and $7
- jr z, .skip
-
- ld c, a
- ld a, b
-.loop2
- rrca
- dec c
- jr nz, .loop2
- ld b, a
-
-.skip
- xor a
- bit 0, b
- jr z, .finish
- ld a, 1
-
-.finish
- ld b, a
- ld hl, wPokeAnimBitmaskCurBit
- inc [hl]
- ret
-; d03bd
-
-.ApplyFrame: ; d03bd
- push af
- call .GetCoord
- pop af
- push hl
- call .GetTilemap
- ld hl, wPokeAnimGraphicStartTile
- add [hl]
- pop hl
- ld [hl], a
- ret
-; d03cd
-
-.GetCoord: ; d03cd
- call .GetStartCoord
- ld a, [wPokeAnimBitmaskCurRow]
- ld bc, SCREEN_WIDTH
- call AddNTimes
- ld a, [wBoxAlignment]
- and a
- jr nz, .go
- ld a, [wPokeAnimBitmaskCurCol]
- ld e, a
- ld d, 0
- add hl, de
- jr .skip2
-
-.go
- ld a, [wPokeAnimBitmaskCurCol]
- ld e, a
- ld a, l
- sub e
- ld l, a
- ld a, h
- sbc 0
- ld h, a
-
-.skip2
- ret
-; d03f4
-
-; XXX
- db 6, 5, 4
-
-.GetTilemap: ; d03f7
- push af
- ld a, [wPokeAnimFrontpicHeight]
- cp 5
- jr z, .check_add_24
- cp 6
- jr z, .check_add_13
- pop af
- ret
-
-.check_add_24
- pop af
- cp 5 * 5
- jr nc, .add_24
- push hl
- push de
- ld hl, ._5by5
- ld e, a
- ld d, 0
- add hl, de
- ld a, [hl]
- pop de
- pop hl
- ret
-
-.add_24
- add 24
- ret
-
-.check_add_13
- pop af
- cp 6 * 6
- jr nc, .add_13
- push hl
- push de
- ld hl, ._6by6
- ld e, a
- ld d, 0
- add hl, de
- ld a, [hl]
- pop de
- pop hl
- ret
-
-.add_13
- add 13
- ret
-; d042f
-
-._5by5:
- poke_anim_box 5
- ; db 9, 10, 11, 12, 13
- ; db 16, 17, 18, 19, 20
- ; db 23, 24, 25, 26, 27
- ; db 30, 31, 32, 33, 34
- ; db 37, 38, 39, 40, 41
-
-._6by6:
- poke_anim_box 6
- ; db 8, 9, 10, 11, 12, 13
- ; db 15, 16, 17, 18, 19, 20
- ; db 22, 23, 24, 25, 26, 27
- ; db 29, 30, 31, 32, 33, 34
- ; db 36, 37, 38, 39, 40, 41
- ; db 43, 44, 45, 46, 47, 48
-
-
-.GetStartCoord: ; d046c
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
-
- ld a, [wPokeAnimFrontpicHeight]
- ld de, 0
- ld bc, 6
- cp 7
- jr z, .okay
- ld de, SCREEN_WIDTH + 1
- ld bc, SCREEN_WIDTH + 5
- cp 6
- jr z, .okay
- ld de, 2 * SCREEN_WIDTH + 1
- ld bc, 2 * SCREEN_WIDTH + 5
-.okay
-
- ld a, [wBoxAlignment]
- and a
- jr nz, .add_bc
- add hl, de
- ret
-
-.add_bc
- add hl, bc
- ret
-; d0499
-
-.NextBit: ; d0499
- ld a, [wPokeAnimBitmaskCurRow]
- inc a
- ld [wPokeAnimBitmaskCurRow], a
- ld c, a
- ld a, [wPokeAnimFrontpicHeight]
- cp c
- jr nz, .no_carry
- xor a
- ld [wPokeAnimBitmaskCurRow], a
- ld a, [wPokeAnimBitmaskCurCol]
- inc a
- ld [wPokeAnimBitmaskCurCol], a
- ld c, a
- ld a, [wPokeAnimFrontpicHeight]
- cp c
- jr nz, .no_carry
- scf
- ret
-
-.no_carry
- xor a
- ret
-; d04bd
-
-PokeAnim_PlaceGraphic: ; d04bd
- call .ClearBox
- ld a, [wBoxAlignment]
- and a
- jr nz, .flipped
- ld de, 1
- ld bc, 0
- jr .okay
-
-.flipped
- ld de, -1
- ld bc, 6
-
-.okay
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- ld c, 7
- ld b, 7
- ld a, [wPokeAnimGraphicStartTile]
-.loop
- push bc
- push hl
- push de
- ld de, SCREEN_WIDTH
-.loop2
- ld [hl], a
- inc a
- add hl, de
- dec b
- jr nz, .loop2
- pop de
- pop hl
- add hl, de
- pop bc
- dec c
- jr nz, .loop
- ret
-; d04f6
-
-.ClearBox: ; d04f6
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld b, 7
- ld c, 7
- call ClearBox
- ret
-; d0504
-
-PokeAnim_SetVBank1: ; d0504
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- xor a
- ld [hBGMapMode], a
- call .SetFlag
- callba HDMATransferAttrMapToWRAMBank3
- pop af
- ld [rSVBK], a
- ret
-; d051b
-
-.SetFlag: ; d051b
- call PokeAnim_GetAttrMapCoord
- ld b, 7
- ld c, 7
- ld de, SCREEN_WIDTH
-.row
- push bc
- push hl
-.col
- ld a, [hl]
- or 8
- ld [hl], a
- add hl, de
- dec c
- jr nz, .col
- pop hl
- inc hl
- pop bc
- dec b
- jr nz, .row
- ret
-; d0536
-
-PokeAnim_SetVBank0: ; d0536
- call PokeAnim_GetAttrMapCoord
- ld b, 7
- ld c, 7
- ld de, SCREEN_WIDTH
-.row
- push bc
- push hl
-.col
- ld a, [hl]
- and $f7
- ld [hl], a
- add hl, de
- dec c
- jr nz, .col
- pop hl
- inc hl
- pop bc
- dec b
- jr nz, .row
- ret
-; d0551
-
-PokeAnim_GetAttrMapCoord: ; d0551
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, AttrMap - TileMap
- add hl, de
- ret
-; d055c
-
-GetMonAnimPointer: ; d055c
- call PokeAnim_IsEgg
- jr z, .egg
-
- ld c, BANK(UnownAnimations)
- ld hl, UnownAnimationPointers
- ld de, UnownAnimationExtraPointers
- call PokeAnim_IsUnown
- jr z, .unown
- ld c, BANK(PicAnimations)
- ld hl, AnimationPointers
- ld de, AnimationExtraPointers
-.unown
-
- ld a, [wPokeAnimExtraFlag]
- and a
- jr z, .extras
- ld h, d
- ld l, e
-.extras
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, c
- ld [wPokeAnimPointerBank], a
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimPointerAddr], a
- ld a, h
- ld [wPokeAnimPointerAddr + 1], a
- ret
-
-.egg
- ld hl, EggAnimation
- ld c, BANK(EggAnimation)
- ld a, [wPokeAnimExtraFlag]
- and a
- jr z, .extras_egg
- ld hl, EggAnimationExtra
- ld c, BANK(EggAnimationExtra)
-.extras_egg
-
- ld a, c
- ld [wPokeAnimPointerBank], a
- ld a, l
- ld [wPokeAnimPointerAddr], a
- ld a, h
- ld [wPokeAnimPointerAddr + 1], a
- ret
-; d05b4
-
-PokeAnim_GetFrontpicDims: ; d05b4
- ld a, [rSVBK]
- push af
- ld a, $1
- ld [rSVBK], a
- ld a, [CurPartySpecies]
- ld [CurSpecies], a
- call GetBaseData
- ld a, [BasePicSize]
- and $f
- ld c, a
- pop af
- ld [rSVBK], a
- ret
-; d05ce
-
-GetMonFramesPointer: ; d05ce
- call PokeAnim_IsEgg
- jr z, .egg
-
- call PokeAnim_IsUnown
- ld b, BANK(UnownFramesPointers)
- ld c, BANK(UnownsFrames)
- ld hl, UnownFramesPointers
- jr z, .got_frames
- ld a, [wPokeAnimSpecies]
- cp CHIKORITA
- ld b, BANK(FramesPointers)
- ld c, BANK(KantoFrames)
- ld hl, FramesPointers
- jr c, .got_frames
- ld c, BANK(JohtoFrames)
-.got_frames
- ld a, c
- ld [wPokeAnimFramesBank], a
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, b
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimFramesAddr], a
- ld a, h
- ld [wPokeAnimFramesAddr + 1], a
- ret
-
-.egg
- ld hl, EggFrames
- ld c, BANK(EggFrames)
- ld a, c
- ld [wPokeAnimFramesBank], a
- ld a, l
- ld [wPokeAnimFramesAddr], a
- ld a, h
- ld [wPokeAnimFramesAddr + 1], a
- ret
-; d061b
-
-GetMonBitmaskPointer: ; d061b
- call PokeAnim_IsEgg
- jr z, .egg
-
- call PokeAnim_IsUnown
- ld a, BANK(UnownBitmasksPointers)
- ld hl, UnownBitmasksPointers
- jr z, .unown
- ld a, BANK(BitmasksPointers)
- ld hl, BitmasksPointers
-.unown
- ld [wPokeAnimBitmaskBank], a
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, [wPokeAnimBitmaskBank]
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimBitmaskAddr], a
- ld a, h
- ld [wPokeAnimBitmaskAddr + 1], a
- ret
-
-.egg
- ld c, BANK(EggBitmasks)
- ld hl, EggBitmasks
- ld a, c
- ld [wPokeAnimBitmaskBank], a
- ld a, l
- ld [wPokeAnimBitmaskAddr], a
- ld a, h
- ld [wPokeAnimBitmaskAddr + 1], a
- ret
-; d065c
-
-PokeAnim_GetSpeciesOrUnown: ; d065c
- call PokeAnim_IsUnown
- jr z, .unown
- ld a, [wPokeAnimSpecies]
- ret
-
-.unown
- ld a, [wPokeAnimUnownLetter]
- ret
-; d0669
-
-Predef48: ; d0669 Predef 48
- ld a, $1
- ld [wBoxAlignment], a
-HOF_AnimateFrontpic: ; d066e Predef 49
- call AnimateMon_CheckIfPokemon
- jr c, .fail
- ld h, d
- ld l, e
- push bc
- push hl
- ld de, VTiles2
- predef FrontpicPredef
- pop hl
- pop bc
- ld d, 0
- ld e, c
- call AnimateFrontpic
- xor a
- ld [wBoxAlignment], a
- ret
-
-.fail
- xor a
- ld [wBoxAlignment], a
- inc a
- ld [CurPartySpecies], a
- ret
-; d0695
diff --git a/home.asm b/home.asm
index a76992d3..9f0633e6 100644
--- a/home.asm
+++ b/home.asm
@@ -1,19 +1,15 @@
-INCLUDE "contents.asm"
INCLUDE "constants.asm"
-; rst vectors
-INCLUDE "home/rst.asm"
-INCLUDE "home/interrupts.asm"
+SECTION "NULL", ROM0
+NULL::
-SECTION "start", ROM0
-Start::
- nop
- jp _Start
+INCLUDE "home/header.asm"
+
+SECTION "Home", ROM0
-SECTION "bank0", ROM0
INCLUDE "home/vblank.asm"
INCLUDE "home/delay.asm"
-INCLUDE "home/rtc.asm"
+INCLUDE "home/time_palettes.asm"
INCLUDE "home/fade.asm"
INCLUDE "home/lcd.asm"
INCLUDE "home/time.asm"
@@ -22,1841 +18,44 @@ INCLUDE "home/serial.asm"
INCLUDE "home/joypad.asm"
INCLUDE "home/decompress.asm"
INCLUDE "home/palettes.asm"
-INCLUDE "home/copy.asm"
+INCLUDE "home/gfx.asm"
INCLUDE "home/text.asm"
INCLUDE "home/video.asm"
INCLUDE "home/map_objects.asm"
INCLUDE "home/sine.asm"
INCLUDE "home/movement.asm"
-INCLUDE "home/tilemap.asm"
INCLUDE "home/menu.asm"
-INCLUDE "home/handshake.asm"
+INCLUDE "home/printer.asm"
INCLUDE "home/game_time.asm"
INCLUDE "home/map.asm"
-
-InexplicablyEmptyFunction:: ; 2e16
-; Inexplicably empty.
-; Seen in PredefPointers.
- rept 16
- nop
- endr
- ret
-
INCLUDE "home/farcall.asm"
INCLUDE "home/predef.asm"
INCLUDE "home/window.asm"
INCLUDE "home/flag.asm"
-
-Function2f7b::
- ld a, [wMonStatusFlags]
- bit 1, a
- ret z
- ld a, [hJoyDown]
- bit 1, a
- ret
-
-xor_a::
- xor a
- ret
-
-xor_a_dec_a::
- xor a
- dec a
- ret
-
-Function2f8b::
- push hl
- ld hl, wMonStatusFlags
- bit 1, [hl]
- pop hl
- ret
-
-DisableSpriteUpdates:: ; 2f93 (0:2f93)
- xor a
- ld [hMapAnims], a
- ld a, [wVramState]
- res 0, a
- ld [wVramState], a
- ld a, $0
- ld [wRTCEnabled], a
- ret
-
-EnableSpriteUpdates:: ; 2fa4 (0:2fa4)
- ld a, $1
- ld [wRTCEnabled], a
- ld a, [wVramState]
- set 0, a
- ld [wVramState], a
- ld a, $1
- ld [hMapAnims], a
- ret
-
+INCLUDE "home/sprite_updates.asm"
INCLUDE "home/string.asm"
-
-IsInJohto::
- ld a, [wMapGroup]
- ld b, a
- ld a, [wMapNumber]
- ld c, a
- call GetWorldMapLocation
- cp $5e
- jr z, .asm_2ff9
- cp $0
- jr nz, .asm_2ff5
- ld a, [wd9f6]
- ld b, a
- ld a, [wd9f7]
- ld c, a
- call GetWorldMapLocation
-.asm_2ff5
- cp $2e
- jr nc, .asm_2ffb
-.asm_2ff9
- xor a
- ret
-
-.asm_2ffb
- ld a, $1
- ret
-
-Function2ffe:: ; 2ffe (0:2ffe)
- push hl
- xor a
- ld hl, wd17c
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld a, [wd17a]
- ld l, a
- ld a, [wd17b]
- ld h, a
- or l
- jr z, .quit
- ld a, [hROMBank]
- push af
- call SwitchToMapScriptHeaderBank
- ld a, [wPlayerStandingMapX]
- add $4
- ld d, a
- ld a, [wPlayerStandingMapY]
- ld a, $4 ; add $4
- ld e, a
- push bc
- ld c, $0
-.loop
- ld a, [hl]
- cp $ff
- jr z, .done
- push hl
- ld a, d
- cp [hl]
- jr nz, .next
- inc hl
- ld a, e
- cp [hl]
- jr nz, .next
- ld hl, wd17c
- ld b, SET_FLAG
- push de
- push bc
- ld d, $0
- predef SmallFarFlagAction
- pop bc
- pop de
-.next
- pop hl
- inc hl
- inc hl
- inc hl
- inc c
- ld a, c
- cp $20
- jr c, .loop
-.done
- pop bc
- pop af
- rst Bankswitch
-.quit
- pop hl
- ret
-
+INCLUDE "home/region.asm"
INCLUDE "home/item.asm"
INCLUDE "home/random.asm"
INCLUDE "home/sram.asm"
-
-jp_hl::
- jp hl
-
-jp_de::
- push de
- ret
-
-ClearSprites:: ; 30ff (0:30ff)
- ld hl, wVirtualOAM
- ld b, $a0
- xor a
-.asm_3105
- ld [hli], a
- dec b
- jr nz, .asm_3105
- ret
-
-HideSprites::
- ld hl, wVirtualOAM
- ld de, $4
- ld b, $28
- ld a, $a0
-.asm_3114
- ld [hl], a
- add hl, de
- dec b
- jr nz, .asm_3114
- ret
-
-INCLUDE "home/copy2.asm"
-
-BackUpTilesToBuffer::
- hlcoord 0, 0
- decoord 0, 0, wTileMapBackup
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
- jp CopyBytes
-
-ReloadTilesFromBuffer::
- xor a
- ld [hBGMapMode], a
- call ReloadTilesFromBuffer_
- ld a, $1
- ld [hBGMapMode], a
- ret
-
-ReloadTilesFromBuffer_::
- hlcoord 0, 0, wTileMapBackup
- decoord 0, 0
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
- jp CopyBytes
-
-Function317b:: ; 317b (0:317b)
- ld hl, wStringBuffer2
-CopyName2::
- ld a, [de]
- inc de
- ld [hli], a
- cp "@"
- jr nz, CopyName2
- ret
-
-IsInArray::
- ld b, $0
- ld c, a
-.asm_3189
- ld a, [hl]
- cp $ff
- jr z, .asm_3195
- cp c
- jr z, .asm_3197
- inc b
- add hl, de
- jr .asm_3189
-.asm_3195
- and a
- ret
-.asm_3197
- scf
- ret
-
+INCLUDE "home/call_regs.asm"
+INCLUDE "home/clear_sprites.asm"
+INCLUDE "home/copy.asm"
+INCLUDE "home/copy_tilemap.asm"
+INCLUDE "home/copy_name.asm"
+INCLUDE "home/array.asm"
INCLUDE "home/math.asm"
-
-Function31e2:: ; 31e2 (0:31e2)
- ld a, [wOptions]
- bit 4, a
- ret nz
- ld a, [wTextboxFlags]
- bit 1, a
- ret z
- push hl
- push de
- push bc
- ld hl, hOAMUpdate
- ld a, [hl]
- push af
- ld [hl], a
- ld a, [wTextboxFlags]
- bit 0, a
- jr z, .asm_3205
- ld a, [wOptions]
- and $7
- jr .asm_3207
-
-.asm_3205
- ld a, $1
-.asm_3207
- ld [wTextDelayFrames], a
-.asm_320a
- call GetJoypad
- ld a, [wc1d6]
- and a
- jr nz, .asm_3224
- ld a, [hJoyDown]
- bit 0, a
- jr z, .asm_321b
- jr .asm_321f
-
-.asm_321b
- bit 1, a
- jr z, .asm_3224
-.asm_321f
- call DelayFrame
- jr .asm_322a
-
-.asm_3224
- ld a, [wTextDelayFrames]
- and a
- jr nz, .asm_320a
-.asm_322a
- pop af
- ld [hOAMUpdate], a
- pop bc
- pop de
- pop hl
- ret
-
-Function3231::
-.asm_3231
- ld a, [hli]
- ld [de], a
- inc de
- ld a, h
- cp b
- jr nz, .asm_3231
- ld a, l
- cp c
- jr nz, .asm_3231
- ret
-
-PrintNum:: ; 323d (0:323d)
- push bc
- bit 5, b
- jr z, .asm_324f
- bit 7, b
- jr nz, .asm_324a
- bit 6, b
- jr z, .asm_324f
-.asm_324a
- ld a, $f0
- ld [hli], a
- res 5, b
-.asm_324f
- xor a
- ld [hPrintNum1], a
- ld [hMultiplicand], a
- ld [hStringCmpString2], a
- ld a, b
- and $f
- cp $1
- jr z, .asm_3277
- cp $2
- jr z, .asm_326e
- ld a, [de]
- ld [hQuotient], a
- inc de
- ld a, [de]
- ld [hPrintNum3], a
- inc de
- ld a, [de]
- ld [hPrintNum4], a
- jr .asm_327a
-
-.asm_326e
- ld a, [de]
- ld [hStringCmpString2], a
- inc de
- ld a, [de]
- ld [hPrintNum4], a
- jr .asm_327a
-
-.asm_3277
- ld a, [de]
- ld [hPrintNum4], a
-.asm_327a
- push de
- ld d, b
- ld a, c
- swap a
- and $f
- ld e, a
- ld a, c
- and $f
- ld b, a
- ld c, $0
- cp $2
- jr z, .asm_32f2
- cp $3
- jr z, .asm_32e2
- cp $4
- jr z, .asm_32d1
- cp $5
- jr z, .asm_32c0
- cp $6
- jr z, .asm_32ae
- ld a, $f
- ld [hMultiplier], a
- ld a, $42
- ld [hPrintNum6], a
- ld a, $40
- ld [hPrintNum7], a
- call Function3341
- call Function33c0
-.asm_32ae
- ld a, $1
- ld [hPrintNum5], a
- ld a, $86
- ld [hPrintNum6], a
- ld a, $a0
- ld [hPrintNum7], a
- call Function3341
- call Function33c0
-.asm_32c0
- xor a
- ld [hRemainder], a
- ld a, $27
- ld [hMathBuffer], a
- ld a, $10
- ld [hPrintNum7], a
- call Function3341
- call Function33c0
-.asm_32d1
- xor a
- ld [hMultiplier], a
- ld a, $3
- ld [hPrintNum6], a
- ld a, $e8
- ld [hPrintNum7], a
- call Function3341
- call Function33c0
-.asm_32e2
- xor a
- ld [hMultiplier], a
- xor a
- ld [hMathBuffer], a
- ld a, $64
- ld [hPrintNum7], a
- call Function3341
- call Function33c0
-.asm_32f2
- dec e
- jr nz, .asm_32f9
- ld a, $f6
- ld [hPastLeadingZeroes], a
-.asm_32f9
- ld c, $0
- ld a, [hPrintNum4]
-.asm_32fd
- cp $a
- jr c, .asm_3306
- sub $a
- inc c
- jr .asm_32fd
-
-.asm_3306
- ld b, a
- ld a, [hPrintNum1]
- or c
- jr nz, .asm_3311
- call Function33ba
- jr .asm_3323
-
-.asm_3311
- call Function3330
- push af
- ld a, $f6
- add c
- ld [hl], a
- pop af
- ld [hDividend], a
- inc e
- dec e
- jr nz, .asm_3323
- inc hl
- ld [hl], $e8
-.asm_3323
- call Function33c0
- call Function3330
- ld a, $f6
- add b
- ld [hli], a
- pop de
- pop bc
- ret
-
-Function3330:: ; 3330 (0:3330)
- push af
- ld a, [hPastLeadingZeroes]
- and a
- jr nz, .asm_333f
- bit 5, d
- jr z, .asm_333f
- ld a, $f0
- ld [hli], a
- res 5, d
-.asm_333f
- pop af
- ret
-
-Function3341:: ; 3341 (0:3341)
- dec e
- jr nz, .asm_3348
- ld a, $f6
- ld [hProduct], a
-.asm_3348
- ld c, $0
-.asm_334a
- ld a, [hPrintNum5]
- ld b, a
- ld a, [hMultiplicand]
- ld [hPrintNum8], a
- cp b
- jr c, .asm_339a
- sub b
- ld [hPrintNum2], a
- ld a, [hPrintNum6]
- ld b, a
- ld a, [hPrintNum3]
- ld [hPrintNum9], a
- cp b
- jr nc, .asm_336c
- ld a, [hPrintNum2]
- or $0
- jr z, .asm_3396
- dec a
- ld [hPrintNum2], a
- ld a, [hStringCmpString2]
-.asm_336c
- sub b
- ld [hPrintNum3], a
- ld a, [hPrintNum7]
- ld b, a
- ld a, [hPrintNum4]
- ld [hPrintNum10], a
- cp b
- jr nc, .asm_338c
- ld a, [hStringCmpString2]
- and a
- jr nz, .asm_3387
- ld a, [hQuotient]
- and a
- jr z, .asm_3392
- dec a
- ld [hMultiplicand], a
- xor a
-.asm_3387
- dec a
- ld [hPrintNum3], a
- ld a, [hPrintNum4]
-.asm_338c
- sub b
- ld [hPrintNum4], a
- inc c
- jr .asm_334a
-
-.asm_3392
- ld a, [hPrintNum9]
- ld [hStringCmpString2], a
-.asm_3396
- ld a, [hPrintNum8]
- ld [hPrintNum2], a
-.asm_339a
- ld a, [hDividend]
- or c
- jr z, Function33ba
- ld a, [hPrintNum1]
- and a
- jr nz, .asm_33ad
- bit 5, d
- jr z, .asm_33ad
- ld a, $f0
- ld [hli], a
- res 5, d
-.asm_33ad
- ld a, $f6
- add c
- ld [hl], a
- ld [hPrintNum1], a
- inc e
- dec e
- ret nz
- inc hl
- ld [hl], $e8
- ret
-
-Function33ba:: ; 33ba (0:33ba)
- bit 7, d
- ret z
- ld [hl], $f6
- ret
-
-Function33c0:: ; 33c0 (0:33c0)
- bit 7, d
- jr nz, .asm_33cc
- bit 6, d
- jr z, .asm_33cc
- ld a, [hProduct]
- and a
- ret z
-.asm_33cc
- inc hl
- ret
-
-Function33ce::
-; Print c-digit hex number from de to hl
-.asm_33ce
- push bc
- call Function33d7
- pop bc
- dec c
- jr nz, .asm_33ce
- ret
-
-Function33d7:: ; 33d7 (0:33d7)
- ld a, [de]
- swap a
- and $f
- call Function33e9
- ld [hli], a
- ld a, [de]
- and $f
- call Function33e9
- ld [hli], a
- inc de
- ret
-
-Function33e9:: ; 33e9 (0:33e9)
- ld bc, .digits
- add c
- ld c, a
- ld a, $0
- adc b
- ld b, a
- ld a, [bc]
- ret
-
-.digits db "0123456789ABCDEF"
-
-FarPrintText::
- ld [wBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [wBuffer]
- rst Bankswitch
- call PrintText
- pop af
- rst Bankswitch
- ret
-
-Function3414::
- ld a, [hROMBank]
- push af
- ld a, [hli]
- rst Bankswitch
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call jp_hl
- pop hl
- ld a, h
- rst Bankswitch
- ret
-
-QueueScript::
- ld a, [hROMBank]
-Function3425::
- ld [wcfd8], a
- ld a, l
- ld [wcfd9], a
- ld a, h
- ld [wcfda], a
- ret
-
-Function3431::
-.asm_3431
- ld a, [de]
- cp [hl]
- ret nz
- inc de
- inc hl
- dec c
- jr nz, .asm_3431
- ret
-
-Function343a::
-.asm_343a
- ld a, [de]
- cp [hl]
- jr nz, .asm_3447
- inc de
- inc hl
- dec bc
- ld a, b
- or c
- jr nz, .asm_343a
- scf
- ret
-
-.asm_3447
- and a
- ret
-
-ClearBGPalettes::
- call ClearPalettes
-WaitBGMap:: ; 344c (0:344c)
- ld a, $1
- ld [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-Function3456:: ; 3456 (0:3456)
- ld a, [hCGB]
- and a
- jr z, .asm_3464
- ld a, $2
- ld [hBGMapMode], a
- ld c, $4
- call DelayFrames
-.asm_3464
- ld a, $1
- ld [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-IsCGB::
- ld a, [hCGB]
- and a
- ret
-
-ApplyTilemap:: ; 3472 (0:3472)
- ld a, [hCGB]
- and a
- jr z, .asm_3484
- ld a, [wRTCEnabled]
- cp $0
- jr z, .asm_3484
- ld a, $1
- ld [hBGMapMode], a
- jr LoadEDTile
-
-.asm_3484
- ld a, $1
- ld [hBGMapMode], a
- ld c, $4
- call DelayFrames
- ret
-
-CGBOnly_LoadEDTile:: ; 348e (0:348e)
- ld a, [hCGB]
- and a
- jr z, WaitBGMap
-LoadEDTile::
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
- ld a, [hMapAnims]
- push af
- xor a
- ld [hMapAnims], a
-.asm_349f
- ld a, [rLY]
- cp $7f
- jr c, .asm_349f
- di
- ld a, $1
- ld [rVBK], a
- ld hl, wAttrMap
- call Function34c8
- ld a, $0
- ld [rVBK], a
- ld hl, wTileMap
- call Function34c8
-.asm_34ba
- ld a, [rLY]
- cp $7f
- jr c, .asm_34ba
- ei
- pop af
- ld [hMapAnims], a
- pop af
- ld [hBGMapMode], a
- ret
-
-Function34c8:: ; 34c8 (0:34c8)
- ld [hSPBuffer], sp
- ld sp, hl
- ld a, [hBGMapAddress + 1]
- ld h, a
- ld l, $0
- ld a, $12
- ld [hTilesPerCycle], a
- ld b, $2
- ld c, rSTAT % $100
-.asm_34d9
-rept 10
- pop de
-.loop_\@
- ld a, [$ff00+c]
- and b
- jr nz, .loop_\@
- ld [hl], e
- inc l
- ld [hl], d
- inc l
-endr
- ld de, $c
- add hl, de
- ld a, [hTilesPerCycle]
- dec a
- ld [hTilesPerCycle], a
- jr nz, .asm_34d9
- ld a, [hSPBuffer]
- ld l, a
- ld a, [hSPBuffer + 1]
- ld h, a
- ld sp, hl
- ret
-
-SetPalettes::
- ld a, [hCGB]
- and a
- jr nz, .asm_3556
- ld a, $e4
- ld [rBGP], a
- ld a, $d0
- ld [rOBP0], a
- ld [rOBP1], a
- ret
-
-.asm_3556
- push de
- ld a, $e4
- call DmgToCgbBGPals
- ld de, $e4e4
- call DmgToCgbObjPals
- pop de
- ret
-
-ClearPalettes:: ; 3564 (0:3564)
- ld a, [hCGB]
- and a
- jr nz, .asm_3571
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- ret
-
-.asm_3571
- ld hl, wBGPals
- ld bc, $80
- ld a, $ff
- call ByteFill
- ld a, $1
- ld [hCGBPalUpdate], a
- ret
-
-GetMemSGBLayout::
- ld b, $ff
-GetSGBLayout:: ; 3583 (0:3583)
- ld a, [hCGB]
- and a
- jr nz, .asm_358c
- ld a, [hSGB]
- and a
- ret z
-.asm_358c
- predef_jump LoadSGBLayout
-
-SetHPPal::
- call GetHPPal
- ld [hl], d
- ret
-
-GetHPPal:: ; 3596 (0:3596)
- ld d, $0
- ld a, e
- cp $18
- ret nc
- inc d
- cp $a
- ret nc
- inc d
- ret
-
-CountSetBits::
- ld c, $0
-.asm_35a4
- ld a, [hli]
- ld e, a
- ld d, $8
-.asm_35a8
- srl e
- ld a, $0
- adc c
- ld c, a
- dec d
- jr nz, .asm_35a8
- dec b
- jr nz, .asm_35a4
- ld a, c
- ld [wd151], a
- ret
-
-GetWeekday::
- ld a, [wCurDay]
-.mod
- sub 7
- jr nc, .mod
- add 7
- ret
-
+INCLUDE "home/print_text.asm"
+INCLUDE "home/queue_script.asm"
+INCLUDE "home/compare.asm"
+INCLUDE "home/tilemap.asm"
INCLUDE "home/pokedex_flags.asm"
-
-NamesPointers:: ; 35ee (0:35ee)
- dba PokemonNames
- dba MoveNames
- dbw 0, 0
- dba ItemNames
- dbw 0, wPartyMonOT
- dbw 0, $de7d
- dba TrainerClassNames
- dba DoPlayerMovement
-
-GetName:: ; 3606
- ld a, [hROMBank]
- push af
- push hl
- push bc
- push de
- ld a, [wce61]
- cp $1
- jr nz, .asm_3624
- ld a, [wCurSpecies]
- ld [wd151], a
- call GetPokemonName
- ld hl, $b
- add hl, de
- ld e, l
- ld d, h
- jr .asm_3646
-.asm_3624
- ld a, [wce61]
- dec a
- ld e, a
- ld d, $0
- ld hl, NamesPointers
- add hl, de
- add hl, de
- add hl, de
- ld a, [hli]
- rst Bankswitch
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wCurSpecies]
- dec a
- call GetNthString
- ld de, wStringBuffer1
- ld bc, $d
- call CopyBytes
-.asm_3646
- ld a, e
- ld [wcffe], a
- ld a, d
- ld [wcfff], a
- pop de
- pop bc
- pop hl
- pop af
- rst Bankswitch
- ret
-
-GetNthString:: ; 3654 (0:3654)
- and a
- ret z
- push bc
- ld b, a
- ld c, "@"
-.asm_365a
- ld a, [hli]
- cp c
- jr nz, .asm_365a
- dec b
- jr nz, .asm_365a
- pop bc
- ret
-
-GetBasePokemonName::
- push hl
- call GetPokemonName
- ld hl, wStringBuffer1
-.loop
- ld a, [hl]
- cp "@"
- jr z, .quit
- cp "♂"
- jr z, .end
- cp "♀"
- jr z, .end
- inc hl
- jr .loop
-.end
- ld [hl], "@"
-.quit
- pop hl
- ret
-
-GetPokemonName:: ; 367e (0:367e)
- ld a, [hROMBank]
- push af
- push hl
- ld a, BANK(PokemonNames)
- rst Bankswitch
- ld a, [wd151]
- dec a
- ld hl, PokemonNames
- ld e, a
- ld d, $0
-rept MON_NAME_LENGTH +- 1
- add hl, de
-endr
- ld de, wStringBuffer1
- push de
- ld bc, MON_NAME_LENGTH - 1
- call CopyBytes
- ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1
- ld [hl], "@"
- pop de
- pop hl
- pop af
- rst Bankswitch
- ret
-
-GetItemName::
- push hl
- push bc
- ld a, [wd151]
- cp TM01
- jr nc, .TM
- ld [wCurSpecies], a
- ld a, $4
- ld [wce61], a
- call GetName
- jr .copied
-
-.TM
- call GetTMHMName
-.copied
- ld de, wStringBuffer1
- pop bc
- pop hl
- ret
-
-GetTMHMName:: ; 36cc (0:36cc)
- push hl
- push de
- push bc
- ld a, [wd151]
- push af
- cp HM01
- push af
- jr c, .TM
- ld hl, .HMText ; $3721
- ld bc, $2
- jr .copy
-
-.TM
- ld hl, .TMText ; $371e
- ld bc, $2
-.copy
- ld de, wStringBuffer1
- call CopyBytes
- push de
- ld a, [wd151]
- ld c, a
- callfar GetTMHMNumber
- pop de
- pop af
- ld a, c
- jr c, .not_hm
- sub NUM_TMS
-.not_hm
- ld b, "0"
-.mod10
- sub 10
- jr c, .done_mod
- inc b
- jr .mod10
-
-.done_mod
- add 10
- push af
- ld a, b
- ld [de], a
- inc de
- pop af
- ld b, "0"
- add b
- ld [de], a
- inc de
- ld a, "@"
- ld [de], a
- pop af
- ld [wd151], a
- pop bc
- pop de
- pop hl
- ret
-
-.TMText db "TM@"
-.HMText db "HM@"
-
-IsHM::
- cp HM01
- jr c, .not_HM
- scf
- ret
-
-.not_HM
- and a
- ret
-
-IsHMMove::
- ld hl, .HMMoves
- ld de, $1
- jp IsInArray
-
-.HMMoves
- db CUT, FLY, SURF, STRENGTH, FLASH, WATERFALL, WHIRLPOOL, $FF
-
-GetMoveName::
- push hl
- ld a, $2
- ld [wce61], a
- ld a, [wd151]
- ld [wCurSpecies], a
- call GetName
- ld de, wStringBuffer1
- pop hl
- ret
-
-ScrollingMenu::
- call CopyMenuData2
- ld a, [hROMBank]
- push af
- ld a, BANK(ScrollingMenu_)
- rst Bankswitch
- call InitScrollingMenu
- call ScrollingMenuUpdatePalettes
- call ScrollingMenu_
- pop af
- rst Bankswitch
- ld a, [wMenuJoypad]
- ret
-
-ScrollingMenuUpdatePalettes:: ; 3769 (0:3769)
- ld hl, wVramState
- bit 0, [hl]
- jp nz, UpdateTimePals
- jp SetPalettes
-
-DrawScrollingMenu::
- ld a, [wMenuBorderTopCoord]
- dec a
- ld b, a
- ld a, [wMenuBorderBottomCoord]
- sub b
- ld d, a
- ld a, [wMenuBorderLeftCoord]
- dec a
- ld c, a
- ld a, [wMenuBorderRightCoord]
- sub c
- ld e, a
- push de
- call Coord2Tile
- pop bc
- jp Textbox
-
-ScrollingMenuJoyTextDelay::
- call DelayFrame
- ld a, [hInMenu]
- push af
- ld a, $1
- ld [hInMenu], a
- call JoyTextDelay
- pop af
- ld [hInMenu], a
- ld a, [hJoyLast]
- and $f0
- ld c, a
- ld a, [hJoyPressed]
- and $f
- or c
- ld c, a
- ret
-
-HandleStoneQueue::
- ld a, [hROMBank]
- push af
- call SwitchToMapScriptHeaderBank
- call StoneQueueWarpAction
- pop bc
- ld a, b
- rst Bankswitch
- ret
-
-StoneQueueWarpAction:: ; 37b9 (0:37b9)
- ld hl, $1
- add hl, de
- ld a, [hl]
- cp $ff
- jr z, .asm_37dc
- ld l, a
- push hl
- call IsAnyMapObjectOnAWarp
- pop hl
- jr nc, .asm_37dc
- ld d, a
- ld e, l
- call IsThisObjectInTheStoneTable
- jr nc, .asm_37dc
- call CallMapScript
- farcall EnableScriptMode
- scf
- ret
-
-.asm_37dc
- and a
- ret
-
-IsAnyMapObjectOnAWarp:: ; 37de (0:37de)
- push de
- ld hl, $10
- add hl, de
- ld a, [hl]
- ld hl, $11
- add hl, de
- ld e, [hl]
- sub $4
- ld d, a
- ld a, e
- sub $4
- ld e, a
- call IsThisMapObjectOnAWarp
- pop de
- ret
-
-IsThisMapObjectOnAWarp:: ; 37f5 (0:37f5)
- ld hl, wCurrMapWarpHeaderPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wCurrMapWarpCount]
- and a
- jr z, .no_warps
-.find_warp_loop
- push af
- ld a, [hl]
- cp e
- jr nz, .next
- inc hl
- ld a, [hld]
- cp d
- jr nz, .next
- jr .yes
-
-.next
- ld a, $5
- add l
- ld l, a
- jr nc, .asm_3814
- inc h
-.asm_3814
- pop af
- dec a
- jr nz, .find_warp_loop
-.no_warps
- and a
- ret
-
-.yes
- pop af
- ld d, a
- ld a, [wCurrMapWarpCount]
- sub d
- inc a
- scf
- ret
-
-IsThisObjectInTheStoneTable:: ; 3823 (0:3823)
- ld hl, $1
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
-.asm_382a
- ld a, [hli]
- cp $ff
- jr z, .asm_3840
- cp d
- jr nz, .asm_383b
- ld a, [hli]
- cp e
- jr nz, .asm_383c
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jr .asm_3842
-
-.asm_383b
- inc hl
-.asm_383c
- inc hl
- inc hl
- jr .asm_382a
-
-.asm_3840
- and a
- ret
-
-.asm_3842
- scf
- ret
-
-CheckTrainerBattle2::
- ld a, [hROMBank]
- push af
- call SwitchToMapScriptHeaderBank
- call CheckTrainerBattle
- pop bc
- ld a, b
- rst Bankswitch
- ret
-
-CheckTrainerBattle:: ; 3851 (0:3851)
- ld a, $2
- ld de, wMap2Object
-.asm_3856
- push af
- push de
- ld hl, $1
- add hl, de
- ld a, [hl]
- and a
- jr z, .asm_389b
- ld hl, $8
- add hl, de
- ld a, [hl]
- and $f
- cp $2
- jr nz, .asm_389b
- ld hl, MBC3SRamEnable
- add hl, de
- ld a, [hl]
- cp $ff
- jr z, .asm_389b
- call GetObjectStruct
- call FacingPlayerDistance_bc
- jr nc, .asm_389b
- ld hl, $9
- add hl, de
- ld a, [hl]
- cp b
- jr c, .asm_389b
- push bc
- push de
- ld hl, $a
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld b, $2
- call EventFlagAction
- ld a, c
- pop de
- pop bc
- and a
- jr z, .asm_38aa
-.asm_389b
- pop de
- ld hl, $10
- add hl, de
- ld d, h
- ld e, l
- pop af
- inc a
- cp $10
- jr nz, .asm_3856
- xor a
- ret
-
-.asm_38aa
- pop de
- pop af
- ld [hLastTalked], a
- ld a, b
- ld [wcf2a], a
- ld a, c
- ld [wcf2b], a
- jr continue_trainer_function
-
-TalkToTrainer::
- ld a, $1
- ld [wcf2a], a
- ld a, $ff
- ld [wcf2b], a
-continue_trainer_function
- call GetMapScriptHeaderBank
- ld [wcf29], a
- ld a, [hLastTalked]
- call GetMapObject
- ld hl, $a
- add hl, bc
- ld a, [wcf29]
- call GetFarHalfword
- ld de, wcf2c
- ld bc, $d
- ld a, [wcf29]
- call FarCopyBytes
- xor a
- ld [wcf38], a
- scf
- ret
-
-FacingPlayerDistance_bc:: ; 38e9 (0:38e9)
- push de
- call FacingPlayerDistance
- ld b, d
- ld c, e
- pop de
- ret
-
-FacingPlayerDistance:: ; 38f1 (0:38f1)
- ld hl, $10
- add hl, bc
- ld d, [hl]
- ld hl, $11
- add hl, bc
- ld e, [hl]
- ld a, [wPlayerStandingMapX]
- cp d
- jr z, .asm_3909
- ld a, [wPlayerStandingMapY]
- cp e
- jr z, .asm_391d
- and a
- ret
-
-.asm_3909
- ld a, [wPlayerStandingMapY]
- sub e
- jr z, .asm_3937
- jr nc, .asm_3918
- cpl
- inc a
- ld d, a
- ld e, $4
- jr .asm_392f
-
-.asm_3918
- ld d, a
- ld e, $0
- jr .asm_392f
-
-.asm_391d
- ld a, [wPlayerStandingMapX]
- sub d
- jr z, .asm_3937
- jr nc, .asm_392c
- cpl
- inc a
- ld d, a
- ld e, $8
- jr .asm_392f
-
-.asm_392c
- ld d, a
- ld e, $c
-.asm_392f
- call GetSpriteDirection
- cp e
- jr nz, .asm_3937
- scf
- ret
-
-.asm_3937
- and a
- ret
-
-CheckTrainerFlag::
- push bc
- ld hl, $1
- add hl, bc
- ld a, [hl]
- call GetMapObject
- ld hl, $a
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call GetMapScriptHeaderBank
- call GetFarHalfword
- ld d, h
- ld e, l
- push de
- ld b, $2
- call EventFlagAction
- pop de
- ld a, c
- and a
- pop bc
- ret
-
-PrintWinLossText::
- ld a, [wBattleType]
- cp $1
- jr which_battle_end_text
-
-PrintWinText::
- ld hl, wWinTextPointer
- jr continue_battle_end_text
-
-which_battle_end_text
- ld a, [wBattleResult]
- ld hl, wWinTextPointer
- and a
- jr z, continue_battle_end_text
- ld hl, wLossTextPointer
-continue_battle_end_text
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call GetMapScriptHeaderBank
- call FarPrintText
- call WaitBGMap
- call WaitPressAorB_BlinkCursor
- ret
-
-DrawBattleHPBar::
- push hl
- push de
- push bc
- ld a, $60
- ld [hli], a
- ld a, $61
- ld [hli], a
- push hl
- ld a, $62
-.asm_3990
- ld [hli], a
- dec d
- jr nz, .asm_3990
- ld a, $6b
- add b
- ld [hl], a
- pop hl
- ld a, e
- and a
- jr nz, .asm_39a3
- ld a, c
- and a
- jr z, .asm_39b6
- ld e, $1
-.asm_39a3
- ld a, e
- sub $8
- jr c, .asm_39b2
- ld e, a
- ld a, $6a
- ld [hli], a
- ld a, e
- and a
- jr z, .asm_39b6
- jr .asm_39a3
-
-.asm_39b2
- ld a, $62
- add e
- ld [hl], a
-.asm_39b6
- pop bc
- pop de
- pop hl
- ret
-
-PrepMonFrontpic::
- ld a, $1
- ld [wcf3b], a
-PrepMonFrontpic_::
- ld a, [wCurPartySpecies]
- and a
- jr z, .not_pokemon
- cp EGG
- jr z, .egg
- cp NUM_POKEMON + 1
- jr nc, .not_pokemon
-.egg
- push hl
- ld de, $9000
- predef GetMonFrontpic
- pop hl
- xor a
- ld [hGraphicStartTile], a
- lb bc, 7, 7
- predef PlaceGraphic
- xor a
- ld [wcf3b], a
- ret
-
-.not_pokemon
- xor a
- ld [wcf3b], a
- inc a
- ld [wCurPartySpecies], a
- ret
-
-INCLUDE "home/cry.asm"
-
-PrintLevel:: ; 3a50
- ld a, [wTempMonLevel]
- ld [hl], $6e
- inc hl
- ld c, $2
- cp MAX_LEVEL
- jr c, Print8BitNumRightAlign
- dec hl
- inc c
- jr Print8BitNumRightAlign
-
-PrintLevel_Force3Digits::
- ld [hl], $6e
- inc hl
- ld c, $3
-Print8BitNumRightAlign::
- ld [wd151], a
- ld de, wd151
- ld b, PRINTNUM_RIGHTALIGN | 1
- jp PrintNum
-
-Function3a70::
- ld hl, wd149
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [hl]
- ret
-
-GetBaseData::
- push bc
- push de
- push hl
- ld a, [hROMBank]
- push af
- ld a, BANK(BaseData) ; $14
- rst Bankswitch
- ld a, [wCurSpecies]
- cp EGG
- jr z, .egg
- dec a
- ld bc, $20
- ld hl, BaseData ; $5b0b
- call AddNTimes
- ld de, wd120
- ld bc, $20
- call CopyBytes
- jr .asm_3ab3
-
-.egg
- ld de, UnknownEggPic ; $7a83
- ln b, 5, 5
- ld hl, wd131
- ld [hl], b
- ld hl, wd132
- ld [hl], e
- inc hl
- ld [hl], d
- inc hl
- ld [hl], e
- inc hl
- ld [hl], d
- jr .asm_3ab3
-
-.asm_3ab3
- ld a, [wCurSpecies]
- ld [wd120], a
- pop af
- rst Bankswitch
- pop hl
- pop de
- pop bc
- ret
-
-GetCurNick::
- ld a, [wCurPartyMon]
- ld hl, wPartyMon1Nickname
-GetNick::
- push hl
- push bc
- call SkipNames
- ld de, wStringBuffer1
- push de
- ld bc, $b
- call CopyBytes
- pop de
- callfar CheckNickErrors
- pop bc
- pop hl
- ret
-
-PrintBCDNumber:: ; 3ade (0:3ade)
- ld b, c
- res 7, c
- res 6, c
- res 5, c
- bit 5, b
- jr z, .asm_3af0
- bit 7, b
- jr nz, .asm_3af0
- ld [hl], $f0
- inc hl
-.asm_3af0
- ld a, [de]
- swap a
- call Function3b15
- ld a, [de]
- call Function3b15
- inc de
- dec c
- jr nz, .asm_3af0
- bit 7, b
- jr z, .asm_3b14
- bit 6, b
- jr nz, .asm_3b07
- dec hl
-.asm_3b07
- bit 5, b
- jr z, .asm_3b0e
- ld [hl], $f0
- inc hl
-.asm_3b0e
- ld [hl], $f6
- call Function31e2
- inc hl
-.asm_3b14
- ret
-
-Function3b15:: ; 3b15 (0:3b15)
- and $f
- and a
- jr z, .asm_3b2f
- bit 7, b
- jr z, .asm_3b29
- bit 5, b
- jr z, .asm_3b27
- ld [hl], $f0
- inc hl
- res 5, b
-.asm_3b27
- res 7, b
-.asm_3b29
- add $f6
- ld [hli], a
- jp Function31e2
-
-.asm_3b2f
- bit 7, b
- jr z, .asm_3b29
- bit 6, b
- ret nz
- ld a, $7f
- ld [hli], a
- ret
-
-GetPartyParamLocation::
- push bc
- ld hl, wPartyMons
- ld c, a
- ld b, $0
- add hl, bc
- ld a, [wCurPartyMon]
- call GetPartyLocation
- pop bc
- ret
-
-GetPartyLocation:: ; 3b4a (0:3b4a)
- ld bc, $30
- jp AddNTimes
-
-Function3b51::
- push hl
- ld a, b
- dec a
- ld b, $0
- add hl, bc
- ld hl, BaseData + 0
- ld bc, $20
- call AddNTimes
- pop bc
- ld a, BANK(BaseData)
- call GetFarHalfword
- ld b, l
- ld c, h
- pop hl
- ret
-
+INCLUDE "home/names.asm"
+INCLUDE "home/scrolling_menu.asm"
+INCLUDE "home/stone_queue.asm"
+INCLUDE "home/trainers.asm"
+INCLUDE "home/pokemon.asm"
+INCLUDE "home/print_bcd.asm"
INCLUDE "home/battle.asm"
-
-PushLYOverrides:: ; 3d0d
- ld a, [hLCDCPointer]
- and a
- ret z
- ld a, wLYOverridesBuffer % $100
- ld [wRequested2bppSource], a
- ld a, wLYOverridesBuffer / $100
- ld [wRequested2bppSource + 1], a
- ld a, wLYOverrides % $100
- ld [wRequested2bppDest], a
- ld a, wLYOverrides / $100
- ld [wRequested2bppDest + 1], a
- ld a, $9
- ld [wRequested2bpp], a
- ret
-
-InitAnimatedObjectStruct::
- ld [wAnimatedObjectStructIDBuffer], a
- ld a, [hROMBank]
- push af
- ld a, BANK(InitAnimatedObjectStruct_) ; $23
- rst Bankswitch
- ld a, [wAnimatedObjectStructIDBuffer]
- call InitAnimatedObjectStruct_ ; $51f7
- pop af
- rst Bankswitch
- ret
-
-ReinitAnimatedObjectFrame::
- ld [wAnimatedObjectStructIDBuffer], a
- ld a, [hROMBank]
- push af
- ld a, BANK(ReinitAnimatedObjectFrame_) ; $23
- rst Bankswitch
- ld a, [wAnimatedObjectStructIDBuffer]
- call ReinitAnimatedObjectFrame_ ; $5332
- pop af
- rst Bankswitch
- ret
-
+INCLUDE "home/sprite_anims.asm"
INCLUDE "home/audio.asm"
diff --git a/home/array.asm b/home/array.asm
new file mode 100755
index 00000000..0abf9b7d
--- /dev/null
+++ b/home/array.asm
@@ -0,0 +1,44 @@
+IsInArray::
+; Find value a for every de bytes in array hl.
+; Return index in b and carry if found.
+
+ ld b, 0
+ ld c, a
+.loop
+ ld a, [hl]
+ cp -1
+ jr z, .NotInArray
+ cp c
+ jr z, .InArray
+ inc b
+ add hl, de
+ jr .loop
+
+.NotInArray:
+ and a
+ ret
+
+.InArray:
+ scf
+ ret
+
+SkipNames::
+; Skip a names.
+ ld bc, NAME_LENGTH
+ and a
+ ret z
+.loop
+ add hl, bc
+ dec a
+ jr nz, .loop
+ ret
+
+AddNTimes::
+; Add bc * a to hl.
+ and a
+ ret z
+.loop
+ add hl, bc
+ dec a
+ jr nz, .loop
+ ret
diff --git a/home/audio.asm b/home/audio.asm
index d57a126b..5ce77bd6 100644
--- a/home/audio.asm
+++ b/home/audio.asm
@@ -1,6 +1,6 @@
; Audio interfaces.
-MapSetup_Sound_Off::
+InitSound::
push hl
push de
push bc
@@ -439,7 +439,7 @@ GetMapMusic_MaybeSpecial::
call GetMapMusic
ret
-Unreferenced_Function3d9f::
+Unreferenced_Function3f7d::
; Places a BCD number at the
; upper center of the screen.
ld a, 4 * TILE_WIDTH
diff --git a/home/battle.asm b/home/battle.asm
index a29db60f..9d63a5fe 100644
--- a/home/battle.asm
+++ b/home/battle.asm
@@ -1,32 +1,67 @@
-UserPartyAttr:: ; 3b69
+GetPartyParamLocation::
+; Get the location of parameter a from wCurPartyMon in hl
+ push bc
+ ld hl, wPartyMons
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [wCurPartyMon]
+ call GetPartyLocation
+ pop bc
+ ret
+
+GetPartyLocation::
+; Add the length of a PartyMon struct to hl a times.
+ ld bc, PARTYMON_STRUCT_LENGTH
+ jp AddNTimes
+
+Unreferenced_GetDexNumber::
+; Probably used in gen 1 to convert index number to dex number
+; Not required in gen 2 because index number == dex number
+ push hl
+ ld a, b
+ dec a
+ ld b, 0
+ add hl, bc
+ ld hl, BaseData + BASE_DEX_NO
+ ld bc, BASE_DATA_SIZE
+ call AddNTimes
+ pop bc
+ ld a, BANK(BaseData)
+ call GetFarHalfword
+ ld b, l
+ ld c, h
+ pop hl
+ ret
+
+UserPartyAttr::
push af
- ld a, [hBattleTurn]
+ ldh a, [hBattleTurn]
and a
- jr nz, .asm_3b72
+ jr nz, .ot
pop af
jr BattlePartyAttr
-
-.asm_3b72
+.ot
pop af
jr OTPartyAttr
OpponentPartyAttr::
push af
- ld a, [hBattleTurn]
+ ldh a, [hBattleTurn]
and a
- jr z, .asm_3b7e
+ jr z, .ot
pop af
jr BattlePartyAttr
-
-.asm_3b7e
+.ot
pop af
jr OTPartyAttr
BattlePartyAttr::
+; Get attribute a from the party struct of the active battle mon.
push bc
ld c, a
- ld b, $0
- ld hl, wPartyMon1Species
+ ld b, 0
+ ld hl, wPartyMons
add hl, bc
ld a, [wCurBattleMon]
call GetPartyLocation
@@ -34,9 +69,10 @@ BattlePartyAttr::
ret
OTPartyAttr::
+; Get attribute a from the party struct of the active enemy mon.
push bc
ld c, a
- ld b, $0
+ ld b, 0
ld hl, wOTPartyMon1Species
add hl, bc
ld a, [wCurOTMon]
@@ -52,209 +88,170 @@ ResetDamage::
SetPlayerTurn::
xor a
- ld [hBattleTurn], a
+ ldh [hBattleTurn], a
ret
SetEnemyTurn::
- ld a, $1
- ld [hBattleTurn], a
+ ld a, 1
+ ldh [hBattleTurn], a
ret
UpdateOpponentInParty::
- ld a, [hBattleTurn]
+ ldh a, [hBattleTurn]
and a
jr z, UpdateEnemyMonInParty
jr UpdateBattleMonInParty
- ld a, [hBattleTurn]
+UpdateUserInParty::
+ ldh a, [hBattleTurn]
and a
jr z, UpdateBattleMonInParty
jr UpdateEnemyMonInParty
UpdateBattleMonInParty::
+; Update level, status, current HP
+
ld a, [wCurBattleMon]
+
+UpdateBattleMon::
ld hl, wPartyMon1Level
call GetPartyLocation
+
ld d, h
ld e, l
ld hl, wBattleMonLevel
- ld bc, 5
+ ld bc, wBattleMonMaxHP - wBattleMonLevel
jp CopyBytes
UpdateEnemyMonInParty::
+; Update level, status, current HP
+
+; No wildmons.
ld a, [wBattleMode]
dec a
ret z
+
ld a, [wCurOTMon]
ld hl, wOTPartyMon1Level
call GetPartyLocation
+
ld d, h
ld e, l
ld hl, wEnemyMonLevel
- ld bc, 5
+ ld bc, wEnemyMonMaxHP - wEnemyMonLevel
jp CopyBytes
RefreshBattleHuds::
call UpdateBattleHuds
- ld c, $3
+ ld c, 3
call DelayFrames
jp WaitBGMap
-UpdateBattleHuds:: ; 3bf8 (0:3bf8)
+UpdateBattleHuds::
farcall UpdatePlayerHUD
farcall UpdateEnemyHUD
ret
-GetBattleVar::
- push hl
- call GetBattleVarAddr
- pop hl
- ret
-
-GetBattleVarAddr:: ; 3c0b (0:3c0b)
- push bc
- ld hl, .battlevarpairs ; $3c2c
- ld c, a
- ld b, $0
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [hBattleTurn]
- and a
- jr z, .asm_3c1d
- inc hl
-.asm_3c1d
- ld a, [hl]
- ld c, a
- ld b, $0
- ld hl, .vars
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [hl]
- pop bc
- ret
-
-.battlevarpairs
- dw .substatus1, .substatus2, .substatus3, .substatus4, .substatus5
- dw .substatus1opp, .substatus2opp, .substatus3opp, .substatus4opp, .substatus5opp
- dw .status, .statusopp, .animation, .effect, .power, .type
- dw .curmove, .lastcounter, .lastcounteropp, .lastmove, .lastmoveopp
-
-; player enemy
-.substatus1 db PLAYER_SUBSTATUS_1, ENEMY_SUBSTATUS_1
-.substatus1opp db ENEMY_SUBSTATUS_1, PLAYER_SUBSTATUS_1
-.substatus2 db PLAYER_SUBSTATUS_2, ENEMY_SUBSTATUS_2
-.substatus2opp db ENEMY_SUBSTATUS_2, PLAYER_SUBSTATUS_2
-.substatus3 db PLAYER_SUBSTATUS_3, ENEMY_SUBSTATUS_3
-.substatus3opp db ENEMY_SUBSTATUS_3, PLAYER_SUBSTATUS_3
-.substatus4 db PLAYER_SUBSTATUS_4, ENEMY_SUBSTATUS_4
-.substatus4opp db ENEMY_SUBSTATUS_4, PLAYER_SUBSTATUS_4
-.substatus5 db PLAYER_SUBSTATUS_5, ENEMY_SUBSTATUS_5
-.substatus5opp db ENEMY_SUBSTATUS_5, PLAYER_SUBSTATUS_5
-.status db PLAYER_STATUS, ENEMY_STATUS
-.statusopp db ENEMY_STATUS, PLAYER_STATUS
-.animation db PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
-.effect db PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
-.power db PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
-.type db PLAYER_MOVE_TYPE, ENEMY_MOVE_TYPE
-.curmove db PLAYER_CUR_MOVE, ENEMY_CUR_MOVE
-.lastcounter db PLAYER_COUNTER_MOVE, ENEMY_COUNTER_MOVE
-.lastcounteropp db ENEMY_COUNTER_MOVE, PLAYER_COUNTER_MOVE
-.lastmove db PLAYER_LAST_MOVE, ENEMY_LAST_MOVE
-.lastmoveopp db ENEMY_LAST_MOVE, PLAYER_LAST_MOVE
-
-.vars
- dw wPlayerSubStatus1, wEnemySubStatus1
- dw wPlayerSubStatus2, wEnemySubStatus2
- dw wPlayerSubStatus3, wEnemySubStatus3
- dw wPlayerSubStatus4, wEnemySubStatus4
- dw wPlayerSubStatus5, wEnemySubStatus5
- dw wBattleMonStatus, wEnemyMonStatus
- dw wPlayerMoveStructAnimation, wEnemyMoveStructAnimation
- dw wPlayerMoveStructEffect, wEnemyMoveStructEffect
- dw wPlayerMoveStructPower, wEnemyMoveStructPower
- dw wPlayerMoveStructType, wEnemyMoveStructType
- dw wCurPlayerMove, wCurEnemyMove
- dw wLastEnemyCounterMove, wLastPlayerCounterMove
- dw wLastPlayerMove, wLastEnemyMove
-
- db $23 ; ???
+INCLUDE "home/battle_vars.asm"
FarCopyRadioText::
- ld a, [hROMBank]
+ inc hl
+ ldh a, [hROMBank]
push af
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
- ld [hROMBank], a
+ ldh [hROMBank], a
ld [MBC3RomBank], a
ld a, e
ld l, a
ld a, d
ld h, a
ld de, wcef7
- ld bc, $28
+ ld bc, 2 * SCREEN_WIDTH
call CopyBytes
pop af
- ld [hROMBank], a
+ ldh [hROMBank], a
ld [MBC3RomBank], a
ret
-StdBattleTextBox::
-GLOBAL BattleText
- ld a, [hROMBank]
+
+StdBattleTextbox::
+; Open a textbox and print battle text at 20:hl.
+
+ ldh a, [hROMBank]
push af
- ld a, BANK(BattleText) ; $40
+
+ ld a, BANK(BattleText)
rst Bankswitch
+
call PrintText
+
pop af
rst Bankswitch
ret
GetBattleAnimPointer::
-
-GLOBAL BattleAnimations
-GLOBAL BattleAnimCommands
-
- ld a, BANK(BattleAnimations) ; $32
+ ld a, BANK(BattleAnimations)
rst Bankswitch
+
ld a, [hli]
ld [wca10], a
ld a, [hl]
ld [wca11], a
- ld a, BANK(BattleAnimCommands) ; $33
+
+ ; ClearBattleAnims is the only function that calls this...
+ ld a, BANK(ClearBattleAnims)
rst Bankswitch
+
ret
GetBattleAnimByte::
push hl
push de
+
ld hl, wca10
ld e, [hl]
inc hl
ld d, [hl]
- ld a, BANK(BattleAnimations) ; $32
+ ld a, BANK(BattleAnimations)
rst Bankswitch
ld a, [de]
ld [wca17], a
inc de
- ld a, BANK(BattleAnimCommands) ; $33
+ ld a, BANK(ClearBattleAnims)
rst Bankswitch
ld [hl], d
dec hl
ld [hl], e
+
pop de
pop hl
+
ld a, [wca17]
ret
+
+PushLYOverrides::
+ ldh a, [hLCDCPointer]
+ and a
+ ret z
+
+ ld a, LOW(wLYOverridesBackup)
+ ld [wRequested2bppSource], a
+ ld a, HIGH(wLYOverridesBackup)
+ ld [wRequested2bppSource + 1], a
+
+ ld a, LOW(wLYOverrides)
+ ld [wRequested2bppDest], a
+ ld a, HIGH(wLYOverrides)
+ ld [wRequested2bppDest + 1], a
+
+ ld a, (wLYOverridesEnd - wLYOverrides) / 28
+ ld [wRequested2bpp], a
+ ret
diff --git a/home/battle_vars.asm b/home/battle_vars.asm
new file mode 100755
index 00000000..29acb040
--- /dev/null
+++ b/home/battle_vars.asm
@@ -0,0 +1,111 @@
+GetBattleVar::
+; Preserves hl.
+ push hl
+ call GetBattleVarAddr
+ pop hl
+ ret
+
+GetBattleVarAddr::
+; Get variable from pair a, depending on whose turn it is.
+; There are 21 variable pairs.
+
+ push bc
+
+ ld hl, BattleVarPairs
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+; Enemy turn uses the second byte instead.
+; This lets battle variable calls be side-neutral.
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .getvar
+ inc hl
+
+.getvar
+; var id
+ ld a, [hl]
+ ld c, a
+ ld b, 0
+
+ ld hl, BattleVarLocations
+ add hl, bc
+ add hl, bc
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [hl]
+
+ pop bc
+ ret
+
+BattleVarPairs:
+; entries correspond to BATTLE_VARS_* constants
+ dw .Substatus1
+ dw .Substatus2
+ dw .Substatus3
+ dw .Substatus4
+ dw .Substatus5
+ dw .Substatus1Opp
+ dw .Substatus2Opp
+ dw .Substatus3Opp
+ dw .Substatus4Opp
+ dw .Substatus5Opp
+ dw .Status
+ dw .StatusOpp
+ dw .MoveAnim
+ dw .MoveEffect
+ dw .MovePower
+ dw .MoveType
+ dw .CurMove
+ dw .LastCounter
+ dw .LastCounterOpp
+ dw .LastMove
+ dw .LastMoveOpp
+
+; player enemy
+.Substatus1: db PLAYER_SUBSTATUS_1, ENEMY_SUBSTATUS_1
+.Substatus1Opp: db ENEMY_SUBSTATUS_1, PLAYER_SUBSTATUS_1
+.Substatus2: db PLAYER_SUBSTATUS_2, ENEMY_SUBSTATUS_2
+.Substatus2Opp: db ENEMY_SUBSTATUS_2, PLAYER_SUBSTATUS_2
+.Substatus3: db PLAYER_SUBSTATUS_3, ENEMY_SUBSTATUS_3
+.Substatus3Opp: db ENEMY_SUBSTATUS_3, PLAYER_SUBSTATUS_3
+.Substatus4: db PLAYER_SUBSTATUS_4, ENEMY_SUBSTATUS_4
+.Substatus4Opp: db ENEMY_SUBSTATUS_4, PLAYER_SUBSTATUS_4
+.Substatus5: db PLAYER_SUBSTATUS_5, ENEMY_SUBSTATUS_5
+.Substatus5Opp: db ENEMY_SUBSTATUS_5, PLAYER_SUBSTATUS_5
+.Status: db PLAYER_STATUS, ENEMY_STATUS
+.StatusOpp: db ENEMY_STATUS, PLAYER_STATUS
+.MoveAnim: db PLAYER_MOVE_ANIMATION, ENEMY_MOVE_ANIMATION
+.MoveEffect: db PLAYER_MOVE_EFFECT, ENEMY_MOVE_EFFECT
+.MovePower: db PLAYER_MOVE_POWER, ENEMY_MOVE_POWER
+.MoveType: db PLAYER_MOVE_TYPE, ENEMY_MOVE_TYPE
+.CurMove: db PLAYER_CUR_MOVE, ENEMY_CUR_MOVE
+.LastCounter: db PLAYER_COUNTER_MOVE, ENEMY_COUNTER_MOVE
+.LastCounterOpp: db ENEMY_COUNTER_MOVE, PLAYER_COUNTER_MOVE
+.LastMove: db PLAYER_LAST_MOVE, ENEMY_LAST_MOVE
+.LastMoveOpp: db ENEMY_LAST_MOVE, PLAYER_LAST_MOVE
+
+BattleVarLocations:
+; entries correspond to PLAYER_* and ENEMY_* constants
+ dw wPlayerSubStatus1, wEnemySubStatus1
+ dw wPlayerSubStatus2, wEnemySubStatus2
+ dw wPlayerSubStatus3, wEnemySubStatus3
+ dw wPlayerSubStatus4, wEnemySubStatus4
+ dw wPlayerSubStatus5, wEnemySubStatus5
+ dw wBattleMonStatus, wEnemyMonStatus
+ dw wPlayerMoveStructAnimation, wEnemyMoveStructAnimation
+ dw wPlayerMoveStructEffect, wEnemyMoveStructEffect
+ dw wPlayerMoveStructPower, wEnemyMoveStructPower
+ dw wPlayerMoveStructType, wEnemyMoveStructType
+ dw wCurPlayerMove, wCurEnemyMove
+ dw wLastEnemyCounterMove, wLastPlayerCounterMove
+ dw wLastPlayerMove, wLastEnemyMove
diff --git a/home/call_regs.asm b/home/call_regs.asm
new file mode 100755
index 00000000..d0a4be1b
--- /dev/null
+++ b/home/call_regs.asm
@@ -0,0 +1,8 @@
+; Register aliases
+
+_hl_::
+ jp hl
+
+_de_::
+ push de
+ ret
diff --git a/home/clear_sprites.asm b/home/clear_sprites.asm
new file mode 100755
index 00000000..cbf6e78b
--- /dev/null
+++ b/home/clear_sprites.asm
@@ -0,0 +1,23 @@
+ClearSprites::
+; Erase OAM data
+ ld hl, wVirtualOAM
+ ld b, wVirtualOAMEnd - wVirtualOAM
+ xor a
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
+
+HideSprites::
+; Set all OAM y-positions to 160 to hide them offscreen
+ ld hl, wVirtualOAMSprite00YCoord
+ ld de, SPRITEOAMSTRUCT_LENGTH
+ ld b, NUM_SPRITE_OAM_STRUCTS
+ ld a, SCREEN_WIDTH_PX
+.loop
+ ld [hl], a ; y
+ add hl, de
+ dec b
+ jr nz, .loop
+ ret \ No newline at end of file
diff --git a/home/compare.asm b/home/compare.asm
new file mode 100755
index 00000000..bd665ef4
--- /dev/null
+++ b/home/compare.asm
@@ -0,0 +1,35 @@
+CompareBytes::
+; Compare c bytes at de and hl.
+; Return z if they all match.
+.loop
+ ld a, [de]
+ cp [hl]
+ ret nz
+ inc de
+ inc hl
+ dec c
+ jr nz, .loop
+ ret
+
+CompareBytesLong::
+; Compare bc bytes at de and hl.
+; Return carry if they all match.
+.loop
+ ld a, [de]
+ cp [hl]
+ jr nz, .diff
+
+ inc de
+ inc hl
+ dec bc
+
+ ld a, b
+ or c
+ jr nz, .loop
+
+ scf
+ ret
+
+.diff:
+ and a
+ ret \ No newline at end of file
diff --git a/home/copy.asm b/home/copy.asm
index 50f25e15..838bb52d 100644
--- a/home/copy.asm
+++ b/home/copy.asm
@@ -1,238 +1,70 @@
-Functiond70:: ; d70 (0:0d70)
- ld b, a
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
-
- ld a, BANK(sDecompressBuffer)
- call OpenSRAM
- ld hl, sDecompressBuffer
- ld bc, 7 * 7 * $10
- xor a
- call ByteFill
-
- ld hl, wcf3c
+CopyBytes::
+; copy bc bytes from hl to de
+ inc b ; we bail the moment b hits 0, so include the last run
+ inc c ; same thing; include last byte
+ jr .HandleLoop
+.CopyByte:
ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, sDecompressBuffer
- call Decompress
-
- call CloseSRAM
- pop af
- rst Bankswitch
- ret
-
-ReplacePlayerSprite::
- farcall Function1413c
- ret
-
-Functiond9e::
- farcall Functionf8000
- ret
-
-Functionda5::
- farcall Functionf8032
- ret
-
-LoadFontsExtra::
- farcall Functionf800c
- ret
-
-DecompressRequest2bpp::
- push de
- ld a, BANK(sScratch)
- call OpenSRAM
- push bc
-
- ld de, sScratch
- ld a, b
- call FarDecompress
-
- pop bc
- pop hl
-
- ld de, sScratch
- call Request2bpp
- call CloseSRAM
+ ld [de], a
+ inc de
+.HandleLoop:
+ dec c
+ jr nz, .CopyByte
+ dec b
+ jr nz, .CopyByte
ret
-FarCopyBytes:: ; dcd (0:0dcd)
+GetFarByte::
+; retrieve a single byte from a:hl, and return it in a.
+ ; bankswitch to new bank
ld [wBuffer], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
- call CopyBytes
- pop af
- rst Bankswitch
- ret
-FarCopyBytesDouble:: ; ddd (0:0ddd)
+ ; get byte from new bank
+ ld a, [hl]
ld [wBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [wBuffer]
- rst Bankswitch
- ld a, h
- ld h, d
- ld d, a
- ld a, l
- ld l, e
- ld e, a
- inc b
- inc c
- jr .enter_loop
-.copy
- ld a, [de]
- inc de
- ld [hli], a
- ld [hli], a
-.enter_loop
- dec c
- jr nz, .copy
- dec b
- jr nz, .copy
+ ; bankswitch to previous bank
pop af
rst Bankswitch
+
+ ; return retrieved value in a
+ ld a, [wBuffer]
ret
-Request2bpp:: ; dfe (0:0dfe)
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
- ld a, [hROMBank]
+GetFarHalfword::
+; retrieve a halfword from a:hl, and return it in hl.
+ ; bankswitch to new bank
+ ld [wBuffer], a
+ ldh a, [hROMBank]
push af
- ld a, b
- rst Bankswitch
- ld a, e
- ld [wRequested2bppSource], a
- ld a, d
- ld [wRequested2bppSource + 1], a
- ld a, l
- ld [wRequested2bppDest], a
- ld a, h
- ld [wRequested2bppDest + 1], a
-.check
- ld a, c
- cp $8 ; TilesPerCycle
- jr nc, .cycle
- ld [wRequested2bpp], a
- call DelayFrame
- pop af
+ ld a, [wBuffer]
rst Bankswitch
- pop af
- ld [hBGMapMode], a
- ret
-.cycle
- ld a, $8 ; TilesPerCycle
- ld [wRequested2bpp], a
- call DelayFrame
- ld a, c
- sub $8 ; TilesPerCycle
- ld c, a
- jr .check
+ ; get halfword from new bank, put it in hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
-Request1bpp:: ; e38 (0:0e38)
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
- ld a, e
- ld [wRequested1bppSource], a
- ld a, d
- ld [wRequested1bppSource + 1], a
- ld a, l
- ld [wRequested1bppDest], a
- ld a, h
- ld [wRequested1bppDest + 1], a
-.check
- ld a, c
- cp $8 ; TilesPerCycle
- jr nc, .cycle
- ld [wRequested1bpp], a
- call DelayFrame
+ ; bankswitch to previous bank and return
pop af
rst Bankswitch
- pop af
- ld [hBGMapMode], a
ret
-.cycle
- ld a, $8 ; TilesPerCycle
- ld [wRequested1bpp], a
- call DelayFrame
- ld a, c
- sub $8 ; TilesPerCycle
- ld c, a
- jr .check
-
-Get2bpp::
- ld a, [rLCDC]
- bit 7, a
- jp nz, Request2bpp
-Copy2bpp::
- push hl
- ld h, d
- ld l, e
- pop de
- ld a, b
- push af
- swap c
- ld a, $f
- and c
- ld b, a
- ld a, $f0
- and c
- ld c, a
- pop af
- jp FarCopyBytes
-Get1bpp::
- ld a, [rLCDC]
- bit 7, a
- jp nz, Request1bpp
-Copy1bpp::
- push de
- ld d, h
- ld e, l
- ld a, b
- push af
- ld h, $0
- ld l, c
- add hl, hl
- add hl, hl
- add hl, hl
- ld b, h
- ld c, l
- pop af
- pop hl
- jp FarCopyBytesDouble
-
-Functionea6::
- ld a, [rLCDC]
- add a
- jp c, Request2bpp
-Functioneac::
- push de
- push hl
- ld a, b
- ld h, $0
- ld l, c
- add hl, hl
- add hl, hl
- add hl, hl
- add hl, hl
- ld b, h
- ld c, l
- pop de
- pop hl
- jp FarCopyBytes
+ByteFill::
+; fill bc bytes with the value of a, starting at hl
+ inc b ; we bail the moment b hits 0, so include the last run
+ inc c ; same thing; include last byte
+ jr .HandleLoop
+.PutByte:
+ ld [hli], a
+.HandleLoop:
+ dec c
+ jr nz, .PutByte
+ dec b
+ jr nz, .PutByte
+ ret
diff --git a/home/copy2.asm b/home/copy2.asm
deleted file mode 100644
index 3ba05db9..00000000
--- a/home/copy2.asm
+++ /dev/null
@@ -1,53 +0,0 @@
-CopyBytes:: ; 311a (0:311a)
- inc b
- inc c
- jr .asm_3121
-.asm_311e
- ld a, [hli]
- ld [de], a
- inc de
-.asm_3121
- dec c
- jr nz, .asm_311e
- dec b
- jr nz, .asm_311e
- ret
-
-GetFarByte:: ; 3128 (0:3128)
- ld [wBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [wBuffer]
- rst Bankswitch
- ld a, [hl]
- ld [wBuffer], a
- pop af
- rst Bankswitch
- ld a, [wBuffer]
- ret
-
-GetFarHalfword:: ; 313c (0:313c)
- ld [wBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [wBuffer]
- rst Bankswitch
- ld a, [hli]
- ld h, [hl]
- ld l, a
- pop af
- rst Bankswitch
- ret
-
-ByteFill:: ; 314c (0:314c)
- inc b
- inc c
- jr .asm_3151
-.asm_3150
- ld [hli], a
-.asm_3151
- dec c
- jr nz, .asm_3150
- dec b
- jr nz, .asm_3150
- ret
diff --git a/home/copy_name.asm b/home/copy_name.asm
new file mode 100755
index 00000000..59c8cf6c
--- /dev/null
+++ b/home/copy_name.asm
@@ -0,0 +1,13 @@
+CopyName1::
+; Copies the name from de to wStringBuffer2
+ ld hl, wStringBuffer2
+
+CopyName2::
+; Copies the name from de to hl
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ cp "@"
+ jr nz, .loop
+ ret
diff --git a/home/copy_tilemap.asm b/home/copy_tilemap.asm
new file mode 100755
index 00000000..9ebcc04c
--- /dev/null
+++ b/home/copy_tilemap.asm
@@ -0,0 +1,21 @@
+LoadTilemapToTempTilemap::
+; Load wTilemap into wTempTileMap
+ hlcoord 0, 0
+ decoord 0, 0, wTempTileMap
+ ld bc, wTilemapEnd - wTilemap
+ jp CopyBytes
+
+SafeLoadTempTilemapToTilemap::
+ xor a
+ ldh [hBGMapMode], a
+ call LoadTempTilemapToTilemap
+ ld a, 1
+ ldh [hBGMapMode], a
+ ret
+
+LoadTempTilemapToTilemap::
+; Load wTempTilemap into wTilemap
+ hlcoord 0, 0, wTempTileMap
+ decoord 0, 0
+ ld bc, wTilemapEnd - wTilemap
+ jp CopyBytes \ No newline at end of file
diff --git a/home/cry.asm b/home/cry.asm
deleted file mode 100644
index 3fcda0c3..00000000
--- a/home/cry.asm
+++ /dev/null
@@ -1,75 +0,0 @@
-PlayStereoCry:: ; 39f0 (0:39f0)
- push af
- ld a, $1
- ld [wStereoPanningMask], a
- pop af
- jr _PlayMonCry
-
-PlayMonCry:: ; 39f9 (0:39f9)
- push af
- xor a
- ld [wStereoPanningMask], a
- ld [wCryTracks], a
- pop af
-
-_PlayMonCry::
- push hl
- push de
- push bc
- call GetCryIndex
- jr c, .asm_3a12
- ld e, c
- ld d, b
- call PlayCry
- call WaitSFX
-.asm_3a12
- pop bc
- pop de
- pop hl
- ret
-
-LoadCryHeader::
- call GetCryIndex
- ret c
- ld a, [hROMBank]
- push af
- ld a, $3c
- rst Bankswitch
- ld hl, $6747
- add hl, bc
- add hl, bc
- add hl, bc
- add hl, bc
- add hl, bc
- add hl, bc
- ld e, [hl]
- inc hl
- ld d, [hl]
- inc hl
- ld a, [hli]
- ld [wCryPitch], a
- ld a, [hli]
- ld [wCryPitch + 1], a
- ld a, [hli]
- ld [wCryLength], a
- ld a, [hl]
- ld [wCryLength + 1], a
- pop af
- rst Bankswitch
- and a
- ret
-
-GetCryIndex:: ; 3a41 (0:3a41)
- and a
- jr z, .asm_3a4e
- cp NUM_POKEMON + 1
- jr nc, .asm_3a4e
- dec a
- ld c, a
- ld b, $0
- and a
- ret
-
-.asm_3a4e
- scf
- ret
diff --git a/home/decompress.asm b/home/decompress.asm
index 11283966..1d555529 100644
--- a/home/decompress.asm
+++ b/home/decompress.asm
@@ -1,8 +1,8 @@
-FarDecompress:: ; b40
+FarDecompress::
; Decompress graphics data from a:hl to de.
ld [wLZBank], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wLZBank]
rst Bankswitch
@@ -12,10 +12,8 @@ FarDecompress:: ; b40
pop af
rst Bankswitch
ret
-; b50
-
-Decompress:: ; b50
+Decompress::
; Pokemon Gold and Silver use an lz variant for compression.
; This is mainly (but not necessarily) used for graphics.
@@ -34,13 +32,11 @@ LZ_LEN EQU %00011111 ; length n (bits 0-4)
; Commands:
-
LZ_LITERAL EQU 0 << 5 ; Read literal data for n bytes.
LZ_ITERATE EQU 1 << 5 ; Write the same byte for n bytes.
LZ_ALTERNATE EQU 2 << 5 ; Alternate two bytes for n bytes.
LZ_ZERO EQU 3 << 5 ; Write 0 for n bytes.
-
; Another class of commands reuses data from the decompressed output.
LZ_RW EQU 2 + 5 ; bit
@@ -125,7 +121,6 @@ LZ_LONG_HI EQU %00000011
; read at least 1 byte
inc c
-
.command
; Increment loop counts.
; We bail the moment they hit 0.
@@ -144,7 +139,6 @@ LZ_LONG_HI EQU %00000011
cp LZ_ZERO
jr z, .Zero
-
.Literal
; Read literal data for bc bytes.
.lloop
@@ -159,8 +153,7 @@ LZ_LONG_HI EQU %00000011
inc de
jr .lloop
-
-.Iter
+.Iter:
; Write the same byte for bc bytes.
ld a, [hli]
@@ -175,8 +168,7 @@ LZ_LONG_HI EQU %00000011
inc de
jr .iloop
-
-.Alt
+.Alt:
; Alternate two bytes for bc bytes.
dec c
jr nz, .anext1
@@ -205,8 +197,7 @@ LZ_LONG_HI EQU %00000011
inc hl
jr .Main
-
-.Zero
+.Zero:
; Write 0 for bc bytes.
xor a
@@ -221,7 +212,6 @@ LZ_LONG_HI EQU %00000011
inc de
jr .zloop
-
.rewrite
; Repeat decompressed data from output.
push hl
@@ -275,8 +265,7 @@ LZ_LONG_HI EQU %00000011
; More practically, LZ_LONG is not recursive.
; For now, it defaults to LZ_REPEAT.
-
-.Repeat
+.Repeat:
; Copy decompressed data for bc bytes.
dec c
jr nz, .rnext
@@ -289,8 +278,7 @@ LZ_LONG_HI EQU %00000011
inc de
jr .Repeat
-
-.Flip
+.Flip:
; Copy bitflipped decompressed data for bc bytes.
dec c
jr nz, .fnext
@@ -315,8 +303,7 @@ LZ_LONG_HI EQU %00000011
inc de
jr .Flip
-
-.Reverse
+.Reverse:
; Copy reversed decompressed data for bc bytes.
dec c
jr nz, .rvnext
@@ -330,7 +317,6 @@ LZ_LONG_HI EQU %00000011
inc de
jr .Reverse
-
.donerw
pop hl
@@ -340,4 +326,3 @@ LZ_LONG_HI EQU %00000011
.next
inc hl
jp .Main
-; c2f
diff --git a/home/delay.asm b/home/delay.asm
index b9b7ac1f..4ad25ef2 100644
--- a/home/delay.asm
+++ b/home/delay.asm
@@ -1,16 +1,19 @@
-DelayFrame:: ; 32e
- ld a, $1
- ld [$ceea], a
-.asm_333
- halt
- ld a, [$ceea]
+DelayFrame::
+; Wait for one frame
+ ld a, 1
+ ld [wVBlankOccurred], a
+
+; Wait for the next VBlank, halting to conserve battery
+.halt
+ halt ; rgbasm adds a nop after this instruction by default
+ ld a, [wVBlankOccurred]
and a
- jr nz, .asm_333
+ jr nz, .halt
ret
-DelayFrames:: ; 33c
-.loop
+DelayFrames::
+; Wait c frames
call DelayFrame
dec c
- jr nz, .loop
+ jr nz, DelayFrames
ret
diff --git a/home/fade.asm b/home/fade.asm
index 7b11604c..357047b6 100644
--- a/home/fade.asm
+++ b/home/fade.asm
@@ -1,5 +1,6 @@
-Function360:: ; 360 (0:0360)
-; XXX
+; Functions to fade the screen in and out.
+
+Unreferenced_Function360::
; TimeOfDayFade
ld a, [wTimeOfDayPal]
ld b, a
@@ -9,17 +10,18 @@ Function360:: ; 360 (0:0360)
ld l, a
jr nc, .okay
dec h
+
.okay
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld a, [hli]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [hli]
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
RotateFourPalettesRight::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_00
@@ -32,7 +34,7 @@ RotateFourPalettesRight::
jr RotatePalettesRight
RotateThreePalettesRight::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_05
@@ -42,8 +44,10 @@ RotateThreePalettesRight::
.dmg
ld hl, IncGradGBPalTable_13
ld b, 3
+
RotatePalettesRight::
-.loop
+; Rotate palettes to the right and fill with loaded colors from the left
+; If we're already at the leftmost color, fill with the leftmost color
push de
ld a, [hli]
call DmgToCgbBGPals
@@ -56,11 +60,11 @@ RotatePalettesRight::
call DelayFrames
pop de
dec b
- jr nz, .loop
+ jr nz, RotatePalettesRight
ret
RotateFourPalettesLeft::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_04 - 1
@@ -73,17 +77,20 @@ RotateFourPalettesLeft::
jr RotatePalettesLeft
RotateThreePalettesLeft::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
jr z, .dmg
ld hl, IncGradGBPalTable_07 - 1
ld b, 3
jr RotatePalettesLeft
+
.dmg
ld hl, IncGradGBPalTable_15 - 1
ld b, 3
+
RotatePalettesLeft::
-.loop
+; Rotate palettes to the left and fill with loaded colors from the right
+; If we're already at the rightmost color, fill with the rightmost color
push de
ld a, [hld]
ld d, a
@@ -96,27 +103,27 @@ RotatePalettesLeft::
call DelayFrames
pop de
dec b
- jr nz, .loop
+ jr nz, RotatePalettesLeft
ret
-IncGradGBPalTable_00:: db %11111111, %11111111, %11111111
-IncGradGBPalTable_01:: db %11111110, %11111110, %11111110
-IncGradGBPalTable_02:: db %11111001, %11111001, %11111001
-IncGradGBPalTable_03:: db %11100100, %11100100, %11100100
+IncGradGBPalTable_00:: dc 3,3,3,3, 3,3,3,3, 3,3,3,3
+IncGradGBPalTable_01:: dc 3,3,3,2, 3,3,3,2, 3,3,3,2
+IncGradGBPalTable_02:: dc 3,3,2,1, 3,3,2,1, 3,3,2,1
+IncGradGBPalTable_03:: dc 3,2,1,0, 3,2,1,0, 3,2,1,0
-IncGradGBPalTable_04:: db %11100100, %11100100, %11100100
-IncGradGBPalTable_05:: db %10010000, %10010000, %10010000
-IncGradGBPalTable_06:: db %01000000, %01000000, %01000000
+IncGradGBPalTable_04:: dc 3,2,1,0, 3,2,1,0, 3,2,1,0
+IncGradGBPalTable_05:: dc 2,1,0,0, 2,1,0,0, 2,1,0,0
+IncGradGBPalTable_06:: dc 1,0,0,0, 1,0,0,0, 1,0,0,0
-IncGradGBPalTable_07:: db %00000000, %00000000, %00000000
-; bgp obp1 obp2
-IncGradGBPalTable_08:: db %11111111, %11111111, %11111111
-IncGradGBPalTable_09:: db %11111110, %11111110, %11111000
-IncGradGBPalTable_10:: db %11111001, %11100100, %11100100
-IncGradGBPalTable_11:: db %11100100, %11010000, %11100000
+IncGradGBPalTable_07:: dc 0,0,0,0, 0,0,0,0, 0,0,0,0
+; bgp obp1 obp2
+IncGradGBPalTable_08:: dc 3,3,3,3, 3,3,3,3, 3,3,3,3
+IncGradGBPalTable_09:: dc 3,3,3,2, 3,3,3,2, 3,3,2,0
+IncGradGBPalTable_10:: dc 3,3,2,1, 3,2,1,0, 3,2,1,0
+IncGradGBPalTable_11:: dc 3,2,1,0, 3,1,0,0, 3,2,0,0
-IncGradGBPalTable_12:: db %11100100, %11010000, %11100000
-IncGradGBPalTable_13:: db %10010000, %10000000, %10010000
-IncGradGBPalTable_14:: db %01000000, %01000000, %01000000
+IncGradGBPalTable_12:: dc 3,2,1,0, 3,1,0,0, 3,2,0,0
+IncGradGBPalTable_13:: dc 2,1,0,0, 2,0,0,0, 2,1,0,0
+IncGradGBPalTable_14:: dc 1,0,0,0, 1,0,0,0, 1,0,0,0
-IncGradGBPalTable_15:: db %00000000, %00000000, %00000000
+IncGradGBPalTable_15:: dc 0,0,0,0, 0,0,0,0, 0,0,0,0 \ No newline at end of file
diff --git a/home/farcall.asm b/home/farcall.asm
index e1d46449..1c8b6f3f 100644
--- a/home/farcall.asm
+++ b/home/farcall.asm
@@ -1,22 +1,33 @@
-FarCall_hl:: ; 2e27 (0:2e27)
+FarCall_hl::
+; Call a:hl.
+; Preserves other registers.
+
ld [wBuffer], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
- call ._hl_
+ call FarCall_JumpToHL
+
+ReturnFarCall::
+; We want to retain the contents of f.
+; To do this, we can pop to bc instead of af.
+
ld a, b
ld [wFarCallBCBuffer], a
ld a, c
ld [wFarCallBCBuffer + 1], a
+
+; Restore the working bank.
pop bc
ld a, b
rst Bankswitch
+
ld a, [wFarCallBCBuffer]
ld b, a
ld a, [wFarCallBCBuffer + 1]
ld c, a
ret
-._hl_
+FarCall_JumpToHL::
jp hl
diff --git a/home/flag.asm b/home/flag.asm
index 2b455439..95117377 100644
--- a/home/flag.asm
+++ b/home/flag.asm
@@ -1,27 +1,27 @@
-ResetMapBufferEventFlags:: ; 2f10 (0:2f10)
+ResetMapBufferEventFlags::
xor a
ld hl, wEventFlags
ld [hli], a
ret
-ResetBikeFlags:: ; 2f16 (0:2f16)
+ResetBikeFlags::
xor a
ld hl, wBikeFlags
ld [hli], a
ld [hl], a
ret
-ResetFlashIfOutOfCave:: ; 2f1d (0:2f1d)
+ResetFlashIfOutOfCave::
ld a, [wPermission]
- cp $2
- jr z, .turn_off_lights
- cp $1
- jr z, .turn_off_lights
+ cp ROUTE
+ jr z, .outdoors
+ cp TOWN
+ jr z, .outdoors
ret
-.turn_off_lights
+.outdoors
ld hl, wStatusFlags
- res 2, [hl] ; FLASH
+ res STATUSFLAGS_FLASH_F, [hl]
ret
EventFlagAction::
@@ -29,28 +29,26 @@ EventFlagAction::
call FlagAction
ret
-FlagAction:: ; 2f36 (0:2f36)
+FlagAction::
; Perform action b on bit de in flag array hl.
; inputs:
; b: function
-; 0 clear bit
-; 1 set bit
-; 2 check bit
+; 0 RESET_FLAG clear bit
+; 1 SET_FLAG set bit
+; 2 CHECK_FLAG check bit
; de: bit number
-; hl: index within bit table
+; hl: pointer to the flag array
; get index within the byte
ld a, e
and 7
; shift de right by three bits (get the index within memory)
+rept 3
srl d
rr e
- srl d
- rr e
- srl d
- rr e
+endr
add hl, de
; implement a decoder
@@ -71,9 +69,9 @@ FlagAction:: ; 2f36 (0:2f36)
; check b's value: 0, 1, 2
ld a, b
- cp 1
- jr c, .clearbit ; 0
- jr z, .setbit ; 1
+ cp SET_FLAG
+ jr c, .clearbit ; RESET_FLAG
+ jr z, .setbit ; SET_FLAG
; check bit
ld a, [hl]
@@ -103,3 +101,30 @@ CheckReceivedDex::
ld a, c
and a
ret
+
+Unreferenced_CheckBPressedDebug::
+; Used in debug ROMs to walk through walls and avoid encounters.
+
+ ld a, [wDebugFlags]
+ bit DEBUG_FIELD_F, a
+ ret z
+
+ ldh a, [hJoyDown]
+ bit B_BUTTON_F, a
+ ret
+
+xor_a::
+ xor a
+ ret
+
+xor_a_dec_a::
+ xor a
+ dec a
+ ret
+
+Unreferenced_CheckFieldDebug::
+ push hl
+ ld hl, wDebugFlags
+ bit DEBUG_FIELD_F, [hl]
+ pop hl
+ ret
diff --git a/home/game_time.asm b/home/game_time.asm
index 01ad750b..86435991 100644
--- a/home/game_time.asm
+++ b/home/game_time.asm
@@ -1,4 +1,4 @@
-ResetGameTime:: ; 1ee6 (0:1ee6)
+ResetGameTime::
xor a
ld [wGameTimeCap], a
ld [wGameTimeHours], a
@@ -8,67 +8,93 @@ ResetGameTime:: ; 1ee6 (0:1ee6)
ld [wGameTimeFrames], a
ret
-GameTimer:: ; 1efa (0:1efa)
+GameTimer::
nop
+
+UpdateGameTimer::
+; Increment the game timer by one frame.
+; The game timer is capped at 999:59:59.00.
+
+; Don't update if game logic is paused.
ld a, [wGameLogicPaused]
and a
ret nz
+; Is the timer paused?
ld hl, wGameTimerPause
- bit 0, [hl]
+ bit GAMETIMERPAUSE_TIMER_PAUSED_F, [hl]
ret z
+; Is the timer already capped?
ld hl, wGameTimeCap
bit 0, [hl]
ret nz
+; +1 frame
ld hl, wGameTimeFrames
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; frames/second
jr nc, .second
+
ld [hl], a
ret
.second
xor a
ld [hl], a
+
+; +1 second
ld hl, wGameTimeSeconds
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; seconds/minute
jr nc, .minute
+
ld [hl], a
ret
.minute
xor a
ld [hl], a
+
+; +1 minute
ld hl, wGameTimeMinutes
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; minutes/hour
jr nc, .hour
+
ld [hl], a
ret
.hour
xor a
ld [hl], a
+
+; +1 hour
ld a, [wGameTimeHours]
ld h, a
ld a, [wGameTimeHours + 1]
ld l, a
inc hl
+
+; Cap the timer after 1000 hours.
ld a, h
- cp 1000 / $100
+ cp HIGH(1000)
jr c, .ok
+
ld a, l
- cp 1000 % $100
+ cp LOW(1000)
jr c, .ok
+
ld hl, wGameTimeCap
set 0, [hl]
- ld a, 59
+
+ ld a, 59 ; 999:59:59.00
ld [wGameTimeMinutes], a
ld [wGameTimeSeconds], a
ret
diff --git a/home/gfx.asm b/home/gfx.asm
new file mode 100644
index 00000000..14a46844
--- /dev/null
+++ b/home/gfx.asm
@@ -0,0 +1,286 @@
+Functiond70:: ; d70 (0:0d70)
+ ld b, a
+ ldh a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, BANK(sDecompressBuffer)
+ call OpenSRAM
+ ld hl, sDecompressBuffer
+ ld bc, 7 * 7 * $10
+ xor a
+ call ByteFill
+
+ ld hl, wcf3c
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, sDecompressBuffer
+ call Decompress
+
+ call CloseSRAM
+ pop af
+ rst Bankswitch
+ ret
+
+ReplacePlayerSprite::
+ farcall Function1413c
+ ret
+
+Functiond9e::
+ farcall Functionf8000
+ ret
+
+Functionda5::
+ farcall Functionf8032
+ ret
+
+LoadFontsExtra::
+ farcall Functionf800c
+ ret
+
+DecompressRequest2bpp::
+ push de
+ ld a, BANK(sScratch)
+ call OpenSRAM
+ push bc
+
+ ld de, sScratch
+ ld a, b
+ call FarDecompress
+
+ pop bc
+ pop hl
+
+ ld de, sScratch
+ call Request2bpp
+ call CloseSRAM
+ ret
+
+FarCopyBytes::
+; copy bc bytes from a:hl to de
+
+ ld [wBuffer], a
+ ldh a, [hROMBank]
+ push af
+ ld a, [wBuffer]
+ rst Bankswitch
+
+ call CopyBytes
+
+ pop af
+ rst Bankswitch
+ ret
+
+
+FarCopyBytesDouble:
+; Copy bc bytes from a:hl to bc*2 bytes at de,
+; doubling each byte in the process.
+
+ ld [wBuffer], a
+ ldh a, [hROMBank]
+ push af
+ ld a, [wBuffer]
+ rst Bankswitch
+
+; switcheroo, de <> hl
+ ld a, h
+ ld h, d
+ ld d, a
+ ld a, l
+ ld l, e
+ ld e, a
+
+ inc b
+ inc c
+ jr .dec
+
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld [hli], a
+.dec
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+ pop af
+ rst Bankswitch
+ ret
+
+Request2bpp::
+; Load 2bpp at b:de to occupy c tiles of hl.
+ ldh a, [hBGMapMode]
+ push af
+ xor a
+ ldh [hBGMapMode], a
+
+ ldh a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, e
+ ld [wRequested2bppSource], a
+ ld a, d
+ ld [wRequested2bppSource + 1], a
+ ld a, l
+ ld [wRequested2bppDest], a
+ ld a, h
+ ld [wRequested2bppDest + 1], a
+.check
+ ld a, c
+ cp 8 ; TilesPerCycle
+ jr nc, .cycle
+
+ ld [wRequested2bpp], a
+ call DelayFrame
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ldh [hBGMapMode], a
+ ret
+
+.cycle
+ ld a, 8 ; TilesPerCycle
+ ld [wRequested2bpp], a
+
+ call DelayFrame
+ ld a, c
+ sub 8 ; TilesPerCycle
+ ld c, a
+ jr .check
+
+Request1bpp::
+; Load 1bpp at b:de to occupy c tiles of hl.
+ ldh a, [hBGMapMode]
+ push af
+ xor a
+ ldh [hBGMapMode], a
+
+ ldh a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, e
+ ld [wRequested1bppSource], a
+ ld a, d
+ ld [wRequested1bppSource + 1], a
+ ld a, l
+ ld [wRequested1bppDest], a
+ ld a, h
+ ld [wRequested1bppDest + 1], a
+.check
+ ld a, c
+ cp 8 ; TilesPerCycle
+ jr nc, .cycle
+
+ ld [wRequested1bpp], a
+ call DelayFrame
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ldh [hBGMapMode], a
+ ret
+
+.cycle
+ ld a, 8 ; TilesPerCycle
+ ld [wRequested1bpp], a
+
+ call DelayFrame
+ ld a, c
+ sub 8 ; TilesPerCycle
+ ld c, a
+ jr .check
+
+Get2bpp::
+ ldh a, [rLCDC]
+ bit rLCDC_ENABLE, a
+ jp nz, Request2bpp
+
+Copy2bpp:
+; copy c 2bpp tiles from b:de to hl
+
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+
+; bank
+ ld a, b
+
+; bc = c * $10
+ push af
+ swap c
+ ld a, $f
+ and c
+ ld b, a
+ ld a, $f0
+ and c
+ ld c, a
+ pop af
+
+ jp FarCopyBytes
+
+Get1bpp::
+ ldh a, [rLCDC]
+ bit rLCDC_ENABLE, a
+ jp nz, Request1bpp
+
+Copy1bpp::
+; copy c 1bpp tiles from b:de to hl
+
+ push de
+ ld d, h
+ ld e, l
+
+; bank
+ ld a, b
+
+; bc = c * $10 / 2
+ push af
+ ld h, 0
+ ld l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop af
+
+ pop hl
+ jp FarCopyBytesDouble
+
+Function_ea6::
+ ldh a, [rLCDC]
+ add a
+ jp c, Request2bpp
+
+Function_eac::
+ push de
+ push hl
+
+; bank
+ ld a, b
+
+; bc = c * $10
+ ld h, 0
+ ld l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop de
+
+ pop hl
+ jp FarCopyBytes
diff --git a/home/header.asm b/home/header.asm
new file mode 100755
index 00000000..ae77c7e4
--- /dev/null
+++ b/home/header.asm
@@ -0,0 +1,66 @@
+; rst vectors (called through the rst instruction)
+
+SECTION "rst0", ROM0[$0000]
+ di
+ jp Start
+
+SECTION "rst8", ROM0[$0008] ; rst FarCall
+ jp FarCall_hl
+
+SECTION "rst10", ROM0[$0010] ; rst Bankswitch
+ ldh [hROMBank], a
+ ld [MBC3RomBank], a
+ ret
+
+SECTION "rst18", ROM0[$0018]
+ rst $38
+
+SECTION "rst20", ROM0[$0020]
+ rst $38
+
+SECTION "rst28", ROM0[$0028] ; rst JumpTable
+ push de
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+; SECTION "rst30", ROM0[$0030]
+ ld l, a
+ pop de
+ jp hl
+
+SECTION "rst38", ROM0[$0038]
+ rst $38
+
+
+; Game Boy hardware interrupts
+
+SECTION "vblank", ROM0[$0040]
+ jp VBlank
+
+SECTION "lcd", ROM0[$0048]
+ jp LCD
+
+SECTION "timer", ROM0[$0050]
+ reti
+
+SECTION "serial", ROM0[$0058]
+ jp Serial
+
+SECTION "joypad", ROM0[$0060]
+ jp Joypad
+
+
+; Game Boy cartridge header
+
+SECTION "Header", ROM0[$0100]
+
+Start::
+ nop
+ jp _Start
+
+; The cartridge header data is filled in by rgbfix.
+; This makes sure it doesn't get used.
+ ds $0150 - @
diff --git a/home/hm_moves.asm b/home/hm_moves.asm
new file mode 100755
index 00000000..0e3cafb6
--- /dev/null
+++ b/home/hm_moves.asm
@@ -0,0 +1,25 @@
+; HM moves can't be forgotten
+
+IsHM::
+ cp HM01
+ jr c, .NotHM
+ scf
+ ret
+.NotHM:
+ and a
+ ret
+
+IsHMMove::
+ ld hl, .HMMoves
+ ld de, 1
+ jp IsInArray
+
+.HMMoves:
+ db CUT
+ db FLY
+ db SURF
+ db STRENGTH
+ db FLASH
+ db WATERFALL
+ db WHIRLPOOL
+ db -1 ; end \ No newline at end of file
diff --git a/home/init.asm b/home/init.asm
index 747d7817..82b3cf7e 100644
--- a/home/init.asm
+++ b/home/init.asm
@@ -1,56 +1,66 @@
-Reset:: ; 5b0 (0:05b0)
- call MapSetup_Sound_Off
+Reset::
+ call InitSound
xor a
- ld [hMapAnims], a
+ ldh [hMapAnims], a
call ClearPalettes
ei
+
ld hl, wd8ba
set 7, [hl]
+
ld c, 32
call DelayFrames
+
jr Init
-_Start:: ; 5c6 (0:05c6)
+
+_Start::
cp $11
jr z, .cgb
xor a
jr .load
+
.cgb
ld a, $1
+
.load
- ld [hCGB], a
-Init:: ; 5d1 (0:05d1)
+ ldh [hCGB], a
+
+Init::
di
+
xor a
- ld [rIF], a
- ld [rIE], a
- ld [rRP], a
- ld [rSCX], a
- ld [rSCY], a
- ld [rSB], a
- ld [rSC], a
- ld [rWX], a
- ld [rWY], a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- ld [rTMA], a
- ld [rTAC], a
+ ldh [rIF], a
+ ldh [rIE], a
+ ldh [rRP], a
+ ldh [rSCX], a
+ ldh [rSCY], a
+ ldh [rSB], a
+ ldh [rSC], a
+ ldh [rWX], a
+ ldh [rWY], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
+ ldh [rTMA], a
+ ldh [rTAC], a
ld [wceeb], a
- ld a, $4
- ld [rTAC], a
+
+ ld a, %100 ; Start timer at 4096Hz
+ ldh [rTAC], a
+
.wait
- ld a, [rLY]
- cp 145
+ ldh a, [rLY]
+ cp LY_VBLANK + 1
jr nz, .wait
xor a
- ld [rLCDC], a
+ ldh [rLCDC], a
-; Clear WRAM
- ld hl, wMusicPlaying
+; Clear WRAM bank 0
+ ld hl, WRAM0_Begin
ld bc, $2000
-.ByteFill
- ld [hl], $0
+.ByteFill:
+ ld [hl], 0
inc hl
dec bc
ld a, b
@@ -60,41 +70,41 @@ Init:: ; 5d1 (0:05d1)
ld sp, wStackTop
call ClearVRAM
- ld a, [hCGB]
+ ldh a, [hCGB]
push af
xor a
- ld hl, HRAM_START
- ld bc, HRAM_END - HRAM_START
+ ld hl, HRAM_Begin
+ ld bc, HRAM_End - HRAM_Begin
call ByteFill
pop af
- ld [hCGB], a
+ ldh [hCGB], a
call ClearSprites
- ld a, BANK(LoadPushOAM)
+ ld a, BANK(WriteOAMDMACodeToHRAM)
rst Bankswitch
- call LoadPushOAM
+ call WriteOAMDMACodeToHRAM
xor a
- ld [hMapAnims], a
- ld [hSCX], a
- ld [hSCY], a
- ld [rJOYP], a
+ ldh [hMapAnims], a
+ ldh [hSCX], a
+ ldh [hSCY], a
+ ldh [rJOYP], a
ld a, $8 ; HBlank int enable
- ld [rSTAT], a
+ ldh [rSTAT], a
ld a, $90
- ld [hWY], a
- ld [rWY], a
+ ldh [hWY], a
+ ldh [rWY], a
- ld a, $7
- ld [hWX], a
- ld [rWX], a
+ ld a, 7
+ ldh [hWX], a
+ ldh [rWX], a
- ld a, -1
- ld [hLinkPlayerNumber], a
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ldh [hLinkPlayerNumber], a
ld h, $98
call BlankBGMap
@@ -103,10 +113,10 @@ Init:: ; 5d1 (0:05d1)
callfar InitCGBPals
- ld a, $9c
- ld [hBGMapAddress + 1], a
- xor a
- ld [hBGMapAddress], a
+ ld a, HIGH(vBGMap1)
+ ldh [hBGMapAddress + 1], a
+ xor a ; LOW(vBGMap1)
+ ldh [hBGMapAddress], a
farcall StartClock
@@ -116,7 +126,7 @@ Init:: ; 5d1 (0:05d1)
ld [MBC3LatchClock], a
ld [MBC3SRamEnable], a
- ld a, %11100011
+ ld a, LCDC_DEFAULT ; %11100011
; LCD on
; Win tilemap 1
; Win on
@@ -125,34 +135,33 @@ Init:: ; 5d1 (0:05d1)
; OBJ 8x8
; OBJ on
; BG on
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, $1f
- ld [rIE], a
+ ldh [rIE], a
ei
call DelayFrame
- ld a, $30
- call Predef
+ predef InitSGBBorder ; SGB init
- call MapSetup_Sound_Off
+ call InitSound
xor a
ld [wMapMusic], a
jp GameInit
-ClearVRAM:: ; 68e (0:068e)
- ld hl, $8000
- ld bc, $2000
+ClearVRAM::
+ ld hl, VRAM_Begin
+ ld bc, VRAM_End - VRAM_Begin
xor a
call ByteFill
ret
-BlankBGMap:: ; 699 (0:0699)
+BlankBGMap::
ld a, $7f
jr asm_69e
-FillBGMap:: ; 69d
+FillBGMap::
ld a, l
asm_69e
ld de, $400
diff --git a/home/interrupts.asm b/home/interrupts.asm
deleted file mode 100755
index 2b0d9e0f..00000000
--- a/home/interrupts.asm
+++ /dev/null
@@ -1,16 +0,0 @@
-; Game Boy hardware interrupts
-
-SECTION "vblank",ROM0
- jp VBlank
-
-SECTION "lcd",ROM0
- jp LCD
-
-SECTION "timer",ROM0
- reti
-
-SECTION "serial",ROM0
- jp Serial
-
-SECTION "joypad",ROM0
- jp JoypadInt
diff --git a/home/item.asm b/home/item.asm
index abad27f2..9e15879d 100644
--- a/home/item.asm
+++ b/home/item.asm
@@ -1,12 +1,12 @@
DoItemEffect::
- farcall DoItemEffect_
+ farcall _DoItemEffect
ret
CheckTossableItem::
push hl
push de
push bc
- farcall CheckTossableItem_
+ farcall _CheckTossableItem
pop bc
pop de
pop hl
@@ -16,11 +16,13 @@ TossItem::
push hl
push de
push bc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(TossItem_)
+ ld a, BANK(_TossItem)
rst Bankswitch
- call TossItem_
+
+ call _TossItem
+
pop bc
ld a, b
rst Bankswitch
@@ -31,13 +33,15 @@ TossItem::
ReceiveItem::
push bc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(ReceiveItem_)
+ ld a, BANK(_ReceiveItem)
rst Bankswitch
push hl
push de
- call ReceiveItem_
+
+ call _ReceiveItem
+
pop de
pop hl
pop bc
@@ -50,11 +54,13 @@ CheckItem::
push hl
push de
push bc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(CheckItem_)
+ ld a, BANK(_CheckItem)
rst Bankswitch
- call CheckItem_
+
+ call _CheckItem
+
pop bc
ld a, b
rst Bankswitch
diff --git a/home/joypad.asm b/home/joypad.asm
index 4f629a9f..c9b9e56f 100644
--- a/home/joypad.asm
+++ b/home/joypad.asm
@@ -1,83 +1,159 @@
-JoypadInt:: ; 8df (0:08df)
+Joypad::
+; Replaced by Joypad, called from VBlank instead of the useless
+; joypad interrupt.
+
+; This is a placeholder in case the interrupt is somehow enabled.
reti
ClearJoypad::
xor a
- ld [hJoyPressed], a
- ld [hJoyDown], a
+; Pressed this frame (delta)
+ ldh [hJoyPressed], a
+; Currently pressed
+ ldh [hJoyDown], a
ret
-Joypad:: ; 8e6 (0:08e6)
+UpdateJoypad::
+; This is called automatically every frame in VBlank.
+; Read the joypad register and translate it to something more
+; workable for use in-game. There are 8 buttons, so we can use
+; one byte to contain all player input.
+
+; Updates:
+
+; hJoypadReleased: released this frame (delta)
+; hJoypadPressed: pressed this frame (delta)
+; hJoypadDown: currently pressed
+; hJoypadSum: pressed so far
+
+; Any of these three bits can be used to disable input.
ld a, [wd8ba]
- and $d0
+ and %11010000
ret nz
+
+; If we're saving, input is disabled.
ld a, [wGameLogicPaused]
and a
ret nz
- ld a, $20
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
+
+; We can only get four inputs at a time.
+; We take d-pad first for no particular reason.
+ ld a, R_DPAD
+ ldh [rJOYP], a
+; Read twice to give the request time to take.
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+
+; The Joypad register output is in the lo nybble (inversed).
+; We make the hi nybble of our new container d-pad input.
cpl
and $f
swap a
+
+; We'll keep this in b for now.
ld b, a
- ld a, $10
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+
+; Buttons make 8 total inputs (A, B, Select, Start).
+; We can fit this into one byte.
+ ld a, R_BUTTONS
+ ldh [rJOYP], a
+; Wait for input to stabilize.
+rept 6
+ ldh a, [rJOYP]
+endr
+; Buttons take the lo nybble.
cpl
and $f
or b
ld b, a
+
+; Reset the joypad register since we're done with it.
ld a, $30
- ld [rJOYP], a
- ld a, [hJoypadDown]
+ ldh [rJOYP], a
+
+; To get the delta we xor the last frame's input with the new one.
+ ldh a, [hJoypadDown] ; last frame
ld e, a
xor b
ld d, a
+; Released this frame:
and e
- ld [hJoypadReleased], a
+ ldh [hJoypadReleased], a
+; Pressed this frame:
ld a, d
and b
- ld [hJoypadPressed], a
+ ldh [hJoypadPressed], a
+
+; Add any new presses to the list of collective presses:
ld c, a
- ld a, [hJoypadSum]
+ ldh a, [hJoypadSum]
or c
- ld [hJoypadSum], a
+ ldh [hJoypadSum], a
+
+; Currently pressed:
ld a, b
- ld [hJoypadDown], a
- and $f
- cp $f
+ ldh [hJoypadDown], a
+
+; Now that we have the input, we can do stuff with it.
+
+; For example, soft reset:
+ and A_BUTTON | B_BUTTON | SELECT | START
+ cp A_BUTTON | B_BUTTON | SELECT | START
jp z, Reset
+
ret
-GetJoypad:: ; 935 (0:0935)
+GetJoypad::
+; Update mirror joypad input from hJoypadDown (real input)
+
+; hJoyReleased: released this frame (delta)
+; hJoyPressed: pressed this frame (delta)
+; hJoyDown: currently pressed
+
+; bit 0 A
+; 1 B
+; 2 SELECT
+; 3 START
+; 4 RIGHT
+; 5 LEFT
+; 6 UP
+; 7 DOWN
+
push af
push hl
push de
push bc
+
+; The player input can be automated using an input stream.
+; See more below.
ld a, [wInputType]
- cp $ff
+ cp AUTO_INPUT
jr z, .auto
- ld a, [hJoypadDown]
+
+; To get deltas, take this and last frame's input.
+ ldh a, [hJoypadDown] ; real input
ld b, a
- ld a, [hJoyDown]
+ ldh a, [hJoyDown] ; last frame mirror
ld e, a
+
+; Released this frame:
xor b
ld d, a
and e
- ld [hJoyReleased], a
+ ldh [hJoyReleased], a
+
+; Pressed this frame:
ld a, d
and b
- ld [hJoyPressed], a
+ ldh [hJoyPressed], a
+
+; It looks like the collective presses got commented out here.
ld c, a
+
+; Currently pressed:
ld a, b
- ld [hJoyDown], a
+ ldh [hJoyDown], a ; frame input
+
.quit
pop bc
pop de
@@ -86,17 +162,28 @@ GetJoypad:: ; 935 (0:0935)
ret
.auto
- ld a, [hROMBank]
+; Use a predetermined input stream (used in the catching tutorial).
+
+; Stream format: [input][duration]
+; A value of $ff will immediately end the stream.
+
+; Read from the input stream.
+ ldh a, [hROMBank]
push af
ld a, [wAutoInputBank]
rst Bankswitch
+
ld hl, wAutoInputAddress
ld a, [hli]
ld h, [hl]
ld l, a
+
+; We only update when the input duration has expired.
ld a, [wAutoInputLength]
and a
jr z, .updateauto
+
+; Until then, don't change anything.
dec a
ld [wAutoInputLength], a
pop af
@@ -104,20 +191,26 @@ GetJoypad:: ; 935 (0:0935)
jr .quit
.updateauto
+; An input of $ff will end the stream.
ld a, [hli]
- cp $ff
+ cp -1
jr z, .stopauto
ld b, a
+
+; A duration of $ff will end the stream indefinitely.
ld a, [hli]
ld [wAutoInputLength], a
- cp $ff
+ cp -1
jr nz, .next
+
+; The current input is overwritten.
dec hl
dec hl
- ld b, $0
+ ld b, NO_INPUT
jr .finishauto
.next
+; On to the next input...
ld a, l
ld [wAutoInputAddress], a
ld a, h
@@ -126,52 +219,62 @@ GetJoypad:: ; 935 (0:0935)
.stopauto
call StopAutoInput
- ld b, $0
+ ld b, NO_INPUT
+
.finishauto
pop af
rst Bankswitch
ld a, b
- ld [hJoyPressed], a
- ld [hJoyDown], a
+ ldh [hJoyPressed], a ; pressed
+ ldh [hJoyDown], a ; input
jr .quit
StartAutoInput::
+; Start reading automated input stream at a:hl.
+
ld [wAutoInputBank], a
ld a, l
ld [wAutoInputAddress], a
ld a, h
ld [wAutoInputAddress + 1], a
+; Start reading the stream immediately.
xor a
ld [wAutoInputLength], a
+; Reset input mirrors.
xor a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
- ld [hJoyDown], a
- ld a, $ff
+ ldh [hJoyPressed], a ; pressed this frame
+ ldh [hJoyReleased], a ; released this frame
+ ldh [hJoyDown], a ; currently pressed
+
+ ld a, AUTO_INPUT
ld [wInputType], a
ret
-StopAutoInput:: ; 9bb (0:09bb)
+StopAutoInput::
+; Clear variables related to automated input.
xor a
ld [wAutoInputBank], a
ld [wAutoInputAddress], a
ld [wAutoInputAddress + 1], a
ld [wAutoInputLength], a
+; Back to normal input.
ld [wInputType], a
ret
JoyTitleScreenInput::
.loop
+
call DelayFrame
+
push bc
call JoyTextDelay
pop bc
- ld a, [hJoyDown]
+ ldh a, [hJoyDown]
cp D_UP | SELECT | B_BUTTON
jr z, .keycombo
- ld a, [hJoyLast]
+ ldh a, [hJoyLast]
and START | A_BUTTON
jr nz, .keycombo
@@ -186,35 +289,36 @@ JoyTitleScreenInput::
ret
JoyWaitAorB::
+.loop
call DelayFrame
call GetJoypad
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
and A_BUTTON | B_BUTTON
ret nz
- call RTC
- jr JoyWaitAorB
+ call UpdateTimeAndPals
+ jr .loop
WaitButton::
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
push af
- ld a, $1
- ld [hOAMUpdate], a
+ ld a, 1
+ ldh [hOAMUpdate], a
call WaitBGMap
call JoyWaitAorB
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
-JoyTextDelay:: ; a08 (0:0a08)
+JoyTextDelay::
call GetJoypad
- ld a, [hInMenu]
+ ldh a, [hInMenu]
and a
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
jr z, .ok
- ld a, [hJoyDown]
+ ldh a, [hJoyDown]
.ok
- ld [hJoyLast], a
- ld a, [hJoyPressed]
+ ldh [hJoyLast], a
+ ldh a, [hJoyPressed]
and a
jr z, .checkframedelay
ld a, 15
@@ -226,7 +330,7 @@ JoyTextDelay:: ; a08 (0:0a08)
and a
jr z, .restartframedelay
xor a
- ld [hJoyLast], a
+ ldh [hJoyLast], a
ret
.restartframedelay
@@ -235,93 +339,106 @@ JoyTextDelay:: ; a08 (0:0a08)
ret
WaitPressAorB_BlinkCursor::
- ld a, [hMapObjectIndexBuffer]
+; Show a blinking cursor in the lower right-hand
+; corner of a textbox and wait until A or B is
+; pressed.
+;
+; NOTE: The cursor has to be shown before calling
+; this function or no cursor will be shown at all.
+ ldh a, [hMapObjectIndexBuffer]
push af
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
push af
xor a
- ld [hMapObjectIndexBuffer], a
- ld a, $6
- ld [hObjectStructIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
+ ld a, 6
+ ldh [hObjectStructIndexBuffer], a
+
.loop
push hl
hlcoord 18, 17
call BlinkCursor
pop hl
+
call JoyTextDelay
- ld a, [hJoyLast]
+ ldh a, [hJoyLast]
and A_BUTTON | B_BUTTON
jr z, .loop
+
pop af
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
pop af
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ret
SimpleWaitPressAorB::
.loop
call JoyTextDelay
- ld a, [hJoyLast]
+ ldh a, [hJoyLast]
and A_BUTTON | B_BUTTON
jr z, .loop
ret
-ButtonSound::
+PromptButton::
+; Show a blinking cursor in the lower right-hand
+; corner of a textbox and wait until A or B is
+; pressed, afterwards, play a sound.
ld a, [wLinkMode]
and a
- jr nz, .link_delay
- call JoyWaitInput
+ jr nz, .link
+ call .wait_input
push de
ld de, SFX_READ_TEXT_2
call PlaySFX
pop de
ret
-.link_delay
+.link
ld c, 65
jp DelayFrames
-JoyWaitInput:: ; a77 (0:0a77)
- ld a, [hOAMUpdate]
+.wait_input
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ld a, [wInputType]
or a
- jr z, .wait_loop
- farcall DudeAutoInput_A
+ jr z, .input_wait_loop
+ farcall _DudeAutoInput_A
-.wait_loop
- call JoyBlinkCursor
+.input_wait_loop
+ call .blink_cursor
call JoyTextDelay
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
and A_BUTTON | B_BUTTON
jr nz, .received_input
- call RTC
+ call UpdateTimeAndPals
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call DelayFrame
- jr .wait_loop
+ jr .input_wait_loop
.received_input
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
-JoyBlinkCursor:: ; aa6 (0:0aa6)
- ld a, [hVBlankCounter]
- and $10
+.blink_cursor
+ ldh a, [hVBlankCounter]
+ and %00010000 ; bit 4, a
jr z, .cursor_off
ld a, "▼"
jr .load_cursor_state
.cursor_off
ld a, "─"
+
.load_cursor_state
ldcoord_a 18, 17
ret
-BlinkCursor:: ; ab6 (0:0ab6)
+BlinkCursor::
push bc
ld a, [hl]
ld b, a
@@ -329,37 +446,37 @@ BlinkCursor:: ; ab6 (0:0ab6)
cp b
pop bc
jr nz, .place_arrow
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
dec a
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ret nz
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
dec a
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ret nz
ld a, "─"
ld [hl], a
ld a, -1
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ld a, 6
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ret
.place_arrow
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
and a
ret z
dec a
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ret nz
dec a
- ld [hMapObjectIndexBuffer], a
- ld a, [hObjectStructIndexBuffer]
+ ldh [hMapObjectIndexBuffer], a
+ ldh a, [hObjectStructIndexBuffer]
dec a
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ret nz
ld a, 6
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
ld a, "▼"
ld [hl], a
ret
diff --git a/home/lcd.asm b/home/lcd.asm
index b488cbec..4ab79019 100644
--- a/home/lcd.asm
+++ b/home/lcd.asm
@@ -1,19 +1,24 @@
-LCD:: ; 41b (0:041b)
+; LCD handling
+
+LCD::
push af
- ld a, [hLCDCPointer]
+ ldh a, [hLCDCPointer]
and a
jr z, .done
+
+; At this point it's assumed we're in WRAM bank 5!
push hl
- ld a, [rLY]
+ ldh a, [rLY]
ld l, a
- ld h, wLYOverrides >> 8
+ ld h, HIGH(wLYOverrides)
ld h, [hl]
- ld a, [hLCDCPointer]
+ ldh a, [hLCDCPointer]
ld l, a
ld a, h
- ld h, rSCY >> 8
+ ld h, HIGH(rSCY)
ld [hl], a
pop hl
+
.done
pop af
reti
@@ -22,37 +27,37 @@ DisableLCD::
; Turn the LCD off
; Don't need to do anything if the LCD is already off
- ld a, [rLCDC]
- bit 7, a
+ ldh a, [rLCDC]
+ bit rLCDC_ENABLE, a
ret z
xor a
- ld [rIF], a
- ld a, [rIE]
+ ldh [rIF], a
+ ldh a, [rIE]
ld b, a
; Disable VBlank
- res 0, a
- ld [rIE], a
+ res VBLANK, a
+ ldh [rIE], a
.wait
; Wait until VBlank would normally happen
- ld a, [rLY]
- cp 145
+ ldh a, [rLY]
+ cp LY_VBLANK + 1
jr nz, .wait
- ld a, [rLCDC]
- and %01111111
- ld [rLCDC], a
+ ldh a, [rLCDC]
+ and $ff ^ (1 << rLCDC_ENABLE)
+ ldh [rLCDC], a
xor a
- ld [rIF], a
+ ldh [rIF], a
ld a, b
- ld [rIE], a
+ ldh [rIE], a
ret
EnableLCD::
- ld a, [rLCDC]
- set 7, a
- ld [rLCDC], a
- ret
+ ldh a, [rLCDC]
+ set rLCDC_ENABLE, a
+ ldh [rLCDC], a
+ ret \ No newline at end of file
diff --git a/home/map.asm b/home/map.asm
index 2766878b..036969e1 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -38,7 +38,7 @@ GetCurrentMapTrigger:: ; 1f78 (0:1f78)
GetMapTrigger:: ; 1f95 (0:1f95)
push bc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, BANK(MapTriggers)
rst Bankswitch
@@ -79,17 +79,17 @@ GetMapTrigger:: ; 1f95 (0:1f95)
OverworldTextModeSwitch:: ; 1fc1 (0:1fc1)
call LoadMapPart
- call FarCallSwapTextboxPalettes
+ call SwapTextboxPalettes
ret
LoadMapPart:: ; 1fc8 (0:1fc8)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wTilesetBlocksBank]
rst Bankswitch
call LoadMetatiles
ld a, $60
- ld hl, wTileMap
+ ld hl, wTilemap
ld bc, $168
call ByteFill
ld a, $5
@@ -186,10 +186,10 @@ endr
ReturnToMapFromSubmenu::
ld a, $fa
- ld [hMapEntryMethod], a
+ ldh [hMapEntryMethod], a
farcall RunMapSetupScript
xor a
- ld [hMapEntryMethod], a
+ ldh [hMapEntryMethod], a
ret
Function2086::
@@ -209,7 +209,7 @@ Function2086::
Function20ac::
ld a, $1
- ld [wRTCEnabled], a
+ ld [wSpriteUpdatesEnabled], a
farcall Function8c3e9
farcall UpdateTimeOfDayPal
call OverworldTextModeSwitch
@@ -222,8 +222,8 @@ Function20c7:: ; 20c7 (0:20c7)
ld [wd05c], a
xor a
ld [wd05b], a
- ld [hSCY], a
- ld [hSCX], a
+ ldh [hSCY], a
+ ldh [hSCX], a
farcall ApplyBGMapAnchorToObjects
ld a, $60
ld bc, $400
@@ -234,12 +234,12 @@ Function20c7:: ; 20c7 (0:20c7)
Function20e6:: ; 20e6 (0:20e6)
decoord 0, 0
call Function20f7
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret z
- decoord 0, 0, wAttrMap
+ decoord 0, 0, wAttrmap
ld a, $1
- ld [rVBK], a
+ ldh [rVBK], a
Function20f7:: ; 20f7 (0:20f7)
ld hl, $9800
ld c, $14
@@ -258,16 +258,16 @@ Function20f7:: ; 20f7 (0:20f7)
dec b
jr nz, .asm_20fe
ld a, $0
- ld [rVBK], a
+ ldh [rVBK], a
ret
Function2112::
call LoadTilesetHeader
call LoadTileset
xor a
- ld [hMapAnims], a
+ ldh [hMapAnims], a
xor a
- ld [hTileAnimFrame], a
+ ldh [hTileAnimFrame], a
farcall Function1416d
call LoadFontsExtra
ret
@@ -500,9 +500,9 @@ Function22a5::
Function22ad:: ; 22ad (0:22ad)
farcall Function14a18
ret nc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call Function22c1
pop de
ld a, d
@@ -516,11 +516,11 @@ Function22c1:: ; 22c1 (0:22c1)
ld a, [wPlayerStandingMapX]
sub $4
ld d, a
- ld a, [wCurrMapWarpCount]
+ ld a, [wCurMapWarpCount]
and a
ret z
ld c, a
- ld hl, wCurrMapWarpHeaderPointer
+ ld hl, wCurMapWarpsPointer
ld a, [hli]
ld h, [hl]
ld l, a
@@ -551,7 +551,7 @@ Function22c1:: ; 22c1 (0:22c1)
pop hl
call Function22fe
ret nc
- ld a, [wCurrMapWarpCount]
+ ld a, [wCurMapWarpCount]
inc a
sub c
ld c, a
@@ -565,9 +565,9 @@ Function22fe:: ; 22fe (0:22fe)
ret
Function2302:: ; 2302 (0:2302)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call Function230f
pop af
rst Bankswitch
@@ -576,7 +576,7 @@ Function2302:: ; 2302 (0:2302)
Function230f:: ; 230f (0:230f)
push bc
- ld hl, wCurrMapWarpHeaderPointer
+ ld hl, wCurMapWarpsPointer
ld a, [hli]
ld h, [hl]
ld l, a
@@ -589,7 +589,7 @@ Function230f:: ; 230f (0:230f)
ld a, [hli]
cp $ff
jr nz, .asm_232b
- ld hl, wd9f5
+ ld hl, wBackupWarpNumber
ld a, [hli]
.asm_232b
pop bc
@@ -697,7 +697,7 @@ CheckDungeonMap::
LoadMapAttributes::
call CopyMapHeaders
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call ReadMapScripts
xor a
call ReadMapEventHeader
@@ -705,7 +705,7 @@ LoadMapAttributes::
LoadMapAttributes_SkipPeople::
call CopyMapHeaders
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call ReadMapScripts
ld a, $1
call ReadMapEventHeader
@@ -829,11 +829,11 @@ ReadMapCallbacks:: ; 24a2 (0:24a2)
ReadWarps:: ; 24b9 (0:24b9)
ld a, [hli]
ld c, a
- ld [wCurrMapWarpCount], a
+ ld [wCurMapWarpCount], a
ld a, l
- ld [wCurrMapWarpHeaderPointer], a
+ ld [wCurMapWarpsPointer], a
ld a, h
- ld [wCurrMapWarpHeaderPointer + 1], a
+ ld [wCurMapWarpsPointer + 1], a
ld a, c
and a
ret z
@@ -947,7 +947,7 @@ ClearObjectStructs:: ; 2550 (0:2550)
ret
RestoreFacingAfterWarp::
- call GetMapScriptHeaderBank
+ call GetMapScriptsBank
rst Bankswitch
ld hl, wd08f
ld a, [hli]
@@ -976,11 +976,11 @@ RestoreFacingAfterWarp::
BackUpWarp:: ; 2596 (0:2596)
ld a, [wPrevWarpNumber]
- ld [wd9f5], a
+ ld [wBackupWarpNumber], a
ld a, [wPrevMapGroup]
- ld [wd9f6], a
+ ld [wBackupMapGroup], a
ld a, [wPrevMapNumber]
- ld [wd9f7], a
+ ld [wBackupMapNumber], a
ret
GetCoordOfUpperLeftCorner:: ; 25a9 (0:25a9)
@@ -1039,13 +1039,13 @@ LoadBlockData::
ret
ChangeMap:: ; 260d (0:260d)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld hl, wc700
ld a, [wMapWidth]
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
add $6
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld c, a
ld b, $0
add hl, bc
@@ -1063,7 +1063,7 @@ ChangeMap:: ; 260d (0:260d)
ld b, a
.asm_2635
push hl
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
ld c, a
.asm_2639
ld a, [de]
@@ -1072,7 +1072,7 @@ ChangeMap:: ; 260d (0:260d)
dec c
jr nz, .asm_2639
pop hl
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
add l
ld l, a
jr nc, .asm_2647
@@ -1101,9 +1101,9 @@ FillMapConnections:: ; 264d (0:264d)
ld a, [wd097]
ld d, a
ld a, [wd098]
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld a, [wd099]
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
call FillNorthConnectionStrip
.asm_2679
ld a, [wd09e]
@@ -1122,9 +1122,9 @@ FillMapConnections:: ; 264d (0:264d)
ld a, [wd0a3]
ld d, a
ld a, [wd0a4]
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld a, [wd0a5]
- ld [hObjectStructIndexBuffer], a
+ ldh [hObjectStructIndexBuffer], a
call FillSouthConnectionStrip
.asm_26a5
ld a, [wd0aa]
@@ -1145,7 +1145,7 @@ FillMapConnections:: ; 264d (0:264d)
ld a, [wd0b0]
ld b, a
ld a, [wd0b1]
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
call FillWestConnectionStrip
.asm_26d0
ld a, [wd0b6]
@@ -1166,7 +1166,7 @@ FillMapConnections:: ; 264d (0:264d)
ld a, [wd0bc]
ld b, a
ld a, [wd0bd]
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
call FillEastConnectionStrip
.asm_26fb
ret
@@ -1177,7 +1177,7 @@ FillSouthConnectionStrip:: ; 26fc (0:26fc)
.asm_26fe
push de
push hl
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld b, a
.asm_2703
ld a, [hli]
@@ -1186,7 +1186,7 @@ FillSouthConnectionStrip:: ; 26fc (0:26fc)
dec b
jr nz, .asm_2703
pop hl
- ld a, [hObjectStructIndexBuffer]
+ ldh a, [hObjectStructIndexBuffer]
ld e, a
ld d, $0
add hl, de
@@ -1206,7 +1206,7 @@ FillWestConnectionStrip:: ; 271f (0:271f)
FillEastConnectionStrip:: ; 271f (0:271f)
ld a, [wMapWidth]
add $6
- ld [hConnectedMapWidth], a
+ ldh [hConnectedMapWidth], a
push de
push hl
ld a, [hli]
@@ -1219,12 +1219,12 @@ FillEastConnectionStrip:: ; 271f (0:271f)
ld [de], a
inc de
pop hl
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld e, a
ld d, $0
add hl, de
pop de
- ld a, [hConnectedMapWidth]
+ ldh a, [hConnectedMapWidth]
add e
ld e, a
jr nc, .asm_2740
@@ -1253,17 +1253,17 @@ CallMapScript::
ld a, [wd15f]
and a
ret nz
- call GetMapScriptHeaderBank
+ call GetMapScriptsBank
jr CallScript
RunMapCallback:: ; 2764 (0:2764)
ld b, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call FindCallback
jr nc, .asm_2779
- call GetMapScriptHeaderBank
+ call GetMapScriptsBank
ld b, a
ld d, h
ld e, l
@@ -1320,23 +1320,23 @@ ExecuteCallbackScript:: ; 279d (0:279d)
ret
MapTextbox::
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
call SetUpTextbox
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call PrintTextboxText
xor a
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
pop af
rst Bankswitch
ret
Call_a_de::
ld [wBuffer], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
@@ -1350,7 +1350,7 @@ Call_a_de::
ret
GetMovementData::
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
@@ -1364,7 +1364,7 @@ GetMovementData::
GetScriptByte::
push hl
push bc
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wScriptBank]
rst Bankswitch
@@ -1407,7 +1407,7 @@ CoordinatesEventText::
db "@"
CheckObjectMask::
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
.asm_282c
ld e, a
ld d, $0
@@ -1418,7 +1418,7 @@ CheckObjectMask::
ret
MaskObject:: ; 2835 (0:2835)
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
ld e, a
ld d, $0
ld hl, wd545
@@ -1428,7 +1428,7 @@ MaskObject:: ; 2835 (0:2835)
ret
UnmaskObject:: ; 2841 (0:2841)
- ld a, [hMapObjectIndexBuffer]
+ ldh a, [hMapObjectIndexBuffer]
ld e, a
ld d, $0
ld hl, wMapObjectsEnd
@@ -1441,14 +1441,14 @@ ScrollMapDown::
ld de, wBGMapBuffer
call BackupBGMapRow
ld c, $28
- call FarCallScrollBGMapPalettes
+ call ScrollBGMapPalettes
ld a, [wd05b]
ld e, a
ld a, [wd05c]
ld d, a
call UpdateBGMapRow
ld a, $1
- ld [hBGMapUpdate], a
+ ldh [hBGMapUpdate], a
ret
ScrollMapUp::
@@ -1456,7 +1456,7 @@ ScrollMapUp::
ld de, wBGMapBuffer
call BackupBGMapRow
ld c, $28
- call FarCallScrollBGMapPalettes
+ call ScrollBGMapPalettes
ld a, [wd05b]
ld l, a
ld a, [wd05c]
@@ -1470,22 +1470,22 @@ ScrollMapUp::
ld d, a
call UpdateBGMapRow
ld a, $1
- ld [hBGMapUpdate], a
+ ldh [hBGMapUpdate], a
ret
ScrollMapRight::
- ld hl, wTileMap
+ ld hl, wTilemap
ld de, wBGMapBuffer
call BackupBGMapColumn
ld c, $24
- call FarCallScrollBGMapPalettes
+ call ScrollBGMapPalettes
ld a, [wd05b]
ld e, a
ld a, [wd05c]
ld d, a
call UpdateBGMapColumn
ld a, $1
- ld [hBGMapUpdate], a
+ ldh [hBGMapUpdate], a
ret
ScrollMapLeft::
@@ -1493,7 +1493,7 @@ ScrollMapLeft::
ld de, wBGMapBuffer
call BackupBGMapColumn
ld c, $24
- call FarCallScrollBGMapPalettes
+ call ScrollBGMapPalettes
ld a, [wd05b]
ld e, a
and $e0
@@ -1507,7 +1507,7 @@ ScrollMapLeft::
ld d, a
call UpdateBGMapColumn
ld a, $1
- ld [hBGMapUpdate], a
+ ldh [hBGMapUpdate], a
ret
BackupBGMapRow:: ; 28da (0:28da)
@@ -1566,7 +1566,7 @@ UpdateBGMapRow:: ; 28f6 (0:28f6)
dec c
jr nz, .asm_2904
ld a, $14
- ld [hFFDE], a
+ ldh [hFFDE], a
ret
UpdateBGMapColumn:: ; 291b (0:291b)
@@ -1590,7 +1590,7 @@ UpdateBGMapColumn:: ; 291b (0:291b)
dec c
jr nz, .asm_2920
ld a, $12
- ld [hFFDE], a
+ ldh [hFFDE], a
ret
Function2939::
@@ -1619,7 +1619,7 @@ LoadTileset:: ; 2944 (0:2944)
farcall LoadMapGroupRoof
.asm_2966
xor a
- ld [hTileAnimFrame], a
+ ldh [hTileAnimFrame], a
ret
BufferScreen::
@@ -1658,7 +1658,7 @@ SaveScreen::
ld de, wda04
ld a, [wMapWidth]
add $6
- ld [hConnectionStripLength], a
+ ldh [hConnectionStripLength], a
ld a, [wPlayerStepDirection]
and a
jr z, .asm_29bc
@@ -1672,7 +1672,7 @@ SaveScreen::
.asm_29b1
ld de, wda0a
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
ld c, a
ld b, $0
add hl, bc
@@ -1704,7 +1704,7 @@ LoadNeighboringBlockData::
ld l, a
ld a, [wMapWidth]
add $6
- ld [hMapObjectIndexBuffer], a
+ ldh [hMapObjectIndexBuffer], a
ld de, wda04
ld b, $6
ld c, $5
@@ -1726,7 +1726,7 @@ SaveScreen_LoadNeighbor::
inc d
.asm_29f9
pop hl
- ld a, [hConnectionStripLength]
+ ldh a, [hConnectionStripLength]
ld c, a
ld b, $0
add hl, bc
@@ -1985,9 +1985,9 @@ CheckFacingSign::
and a
ret z
ld c, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call CheckIfFacingTileCoordIsSign
pop hl
ld a, h
@@ -2035,9 +2035,9 @@ CheckCurrentMapXYTriggers::
and a
ret z
ld c, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- call SwitchToMapScriptHeaderBank
+ call SwitchToMapScriptsBank
call .TriggerCheck
pop hl
ld a, h
@@ -2096,8 +2096,8 @@ CheckCurrentMapXYTriggers::
FadeToMenu::
xor a
- ld [hBGMapMode], a
- call LoadStandardMenuDataHeader
+ ldh [hBGMapMode], a
+ call LoadStandardMenuHeader
farcall FadeOutPalettes
call ClearSprites
call DisableSpriteUpdates
@@ -2120,7 +2120,7 @@ ExitAllMenus::
FinishExitMenu::
ld b, $9
call GetSGBLayout
- call Function3456
+ call WaitBGMap2
farcall FadeInPalettes
call EnableSpriteUpdates
ret
@@ -2128,7 +2128,7 @@ FinishExitMenu::
ReturnToMapWithSpeechTextbox::
push af
ld a, $1
- ld [wRTCEnabled], a
+ ld [wSpriteUpdatesEnabled], a
call ClearBGPalettes
call ClearSprites
call ReloadTilesetAndPalettes
@@ -2138,13 +2138,13 @@ ReturnToMapWithSpeechTextbox::
ld hl, wVramState
set 0, [hl]
call UpdateSprites
- call Function3456
+ call WaitBGMap2
ld b, $9
call GetSGBLayout
call UpdateTimePals
call DelayFrame
ld a, $1
- ld [hMapAnims], a
+ ldh [hMapAnims], a
pop af
ret
@@ -2154,7 +2154,7 @@ ReloadTilesetAndPalettes:: ; 2c87 (0:2c87)
farcall RefreshSprites
call Functiond9e
call LoadFontsExtra
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wMapGroup]
ld b, a
@@ -2200,7 +2200,7 @@ GetMapHeaderMember:: ; 2cdd (0:2cdd)
ld a, [wMapNumber]
ld c, a
GetAnyMapHeaderMember:: ; 2ce5 (0:2ce5)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, BANK(MapGroupPointers)
rst Bankswitch
@@ -2239,7 +2239,7 @@ GetAnyMapBank:: ; 2d0a (0:2d0a)
ret
PartiallyCopyMapHeader:: ; 2d16 (0:2d16)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, BANK(MapGroupPointers)
rst Bankswitch
@@ -2251,12 +2251,12 @@ PartiallyCopyMapHeader:: ; 2d16 (0:2d16)
rst Bankswitch
ret
-SwitchToMapScriptHeaderBank:: ; 2d2b (0:2d2b)
+SwitchToMapScriptsBank:: ; 2d2b (0:2d2b)
ld a, [wd08c]
rst Bankswitch
ret
-GetMapScriptHeaderBank:: ; 2d30 (0:2d30)
+GetMapScriptsBank:: ; 2d30 (0:2d30)
ld a, [wd08c]
ret
@@ -2427,3 +2427,11 @@ LoadTilesetHeader:: ; 2dfa (0:2dfa)
pop bc
pop hl
ret
+
+InexplicablyEmptyFunction:: ; 2e16
+; Inexplicably empty.
+; Seen in PredefPointers.
+rept 16
+ nop
+endr
+ ret
diff --git a/home/map_objects.asm b/home/map_objects.asm
index 8742ed5e..d9cebf48 100644
--- a/home/map_objects.asm
+++ b/home/map_objects.asm
@@ -1,9 +1,13 @@
-GetSpritePalette:: ; 169c
+; Functions handling map objects.
+
+GetSpritePalette::
push hl
push de
push bc
ld c, a
- farcall GetSpritePalette_
+
+ farcall _GetSpritePalette
+
ld a, c
pop bc
pop de
@@ -16,30 +20,31 @@ GetSpriteVTile::
ld hl, wUsedSprites + 2
ld c, $b
ld b, a
- ld a, [hMapObjectIndexBuffer]
- cp $0
- jr z, .asm_16c8
+ ldh a, [hMapObjectIndexBuffer]
+ cp 0
+ jr z, .nope
ld a, b
-.asm_16ba
+.loop
cp [hl]
- jr z, .asm_16cd
+ jr z, .found
inc hl
inc hl
dec c
- jr nz, .asm_16ba
+ jr nz, .loop
ld a, [wUsedSprites + 1]
scf
- jr .asm_16d0
+ jr .done
-.asm_16c8
+.nope
ld a, [wUsedSprites + 1]
- jr .asm_16d0
+ jr .done
-.asm_16cd
+.found
inc hl
xor a
ld a, [hl]
-.asm_16d0
+
+.done
pop bc
pop hl
ret
@@ -47,17 +52,21 @@ GetSpriteVTile::
DoesSpriteHaveFacings::
push de
push hl
+
ld b, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(DoesSpriteHaveFacings_)
+ ld a, BANK(_DoesSpriteHaveFacings)
rst Bankswitch
+
ld a, b
- call DoesSpriteHaveFacings_
+ call _DoesSpriteHaveFacings
ld c, a
+
pop de
ld a, d
rst Bankswitch
+
pop hl
pop de
ret
@@ -71,27 +80,33 @@ GetPlayerStandingTile::
CheckOnWater::
ld a, [wPlayerStandingTile]
call GetTileCollision
- sub $1
+ sub WATERTILE
ret z
and a
ret
-GetTileCollision:: ; 16fa (0:16fa)
+GetTileCollision::
+; Get the collision type of tile a.
+
push de
push hl
+
ld hl, TileCollisionTable
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
- ld a, [hROMBank]
+
+ ldh a, [hROMBank]
push af
ld a, BANK(TileCollisionTable)
rst Bankswitch
ld e, [hl]
pop af
rst Bankswitch
+
ld a, e
- and $f
+ and $f ; lo nybble only
+
pop hl
pop de
ret
@@ -99,228 +114,232 @@ GetTileCollision:: ; 16fa (0:16fa)
CheckGrassTile::
ld d, a
and $f0
- cp $10
- jr z, .asm_171f
- cp $20
- jr z, .asm_1725
+ cp HI_NYBBLE_TALL_GRASS
+ jr z, .grass
+ cp HI_NYBBLE_WATER
+ jr z, .water
scf
ret
-.asm_171f
+.grass
ld a, d
- and $7
+ and LO_NYBBLE_GRASS
ret z
scf
ret
-
-.asm_1725
+; For some reason, the above code is duplicated down here.
+.water
ld a, d
- and $7
+ and LO_NYBBLE_GRASS
ret z
scf
ret
CheckSuperTallGrassTile::
- cp $14
+ cp COLL_LONG_GRASS
ret z
- cp $1c
+ cp COLL_LONG_GRASS_1C
ret
CheckCutTreeTile::
- cp $12
+ cp COLL_CUT_TREE
ret z
- cp $1a
+ cp COLL_CUT_TREE_1A
ret
CheckHeadbuttTreeTile::
- cp $15
+ cp COLL_HEADBUTT_TREE
ret z
- cp $1d
+ cp COLL_HEADBUTT_TREE_1D
ret
CheckCounterTile::
- cp $90
+ cp COLL_COUNTER
ret z
- cp $98
+ cp COLL_COUNTER_98
ret
CheckPitTile::
- cp $60
+ cp COLL_PIT
ret z
- cp $68
+ cp COLL_PIT_68
ret
CheckIceTile::
- cp $23
+ cp COLL_ICE
ret z
- cp $2b
+ cp COLL_ICE_2B
ret z
scf
ret
CheckWhirlpoolTile::
nop
- cp $24
+ cp COLL_WHIRLPOOL
ret z
- cp $2c
+ cp COLL_WHIRLPOOL_2C
ret z
scf
ret
CheckWaterfallTile::
- cp $33
+ cp COLL_WATERFALL
ret z
- cp $3b
+ cp COLL_CURRENT_DOWN
ret
CheckStandingOnEntrance::
ld a, [wPlayerStandingTile]
- cp $71
+ cp COLL_DOOR
ret z
- cp $79
+ cp COLL_DOOR_79
ret z
- cp $7a
+ cp COLL_STAIRCASE
ret z
- cp $7b
+ cp COLL_CAVE
ret
-GetMapObject:: ; 176f (0:176f)
+GetMapObject::
+; Return the location of map object a in bc.
ld hl, wMapObjects
- ld bc, $10
+ ld bc, MAPOBJECT_LENGTH
call AddNTimes
ld b, h
ld c, l
ret
-CheckObjectVisibility:: ; 177b (0:177b)
- ld [hConnectionStripLength], a
+CheckObjectVisibility::
+; Sets carry if the object is not visible on the screen.
+ ldh [hMapObjectIndexBuffer], a
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_1790
- ld [hObjectStructIndexBuffer], a
+ cp -1
+ jr z, .not_visible
+ ldh [hObjectStructIndexBuffer], a
call GetObjectStruct
and a
ret
-.asm_1790
+.not_visible
scf
ret
CheckObjectTime::
- ld hl, $6
+ ld hl, MAPOBJECT_HOUR
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_17be
- ld hl, $7
+ cp -1
+ jr nz, .check_hour
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_17b9
- ld hl, .TimeOfDayValues_17bb
+ cp -1
+ jr z, .timeofday_always
+ ld hl, .TimeOfDayValues_191e
ld a, [wTimeOfDay]
add l
ld l, a
- jr nc, .asm_17af
+ jr nc, .ok
inc h
-.asm_17af
+
+.ok
ld a, [hl]
- ld hl, $7
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
and [hl]
- jr nz, .asm_17b9
+ jr nz, .timeofday_always
scf
ret
-.asm_17b9
+.timeofday_always
and a
ret
-.TimeOfDayValues_17bb:
+.TimeOfDayValues_191e:
+; entries correspond to TimeOfDay values
db MORN
db DAY
db NITE
-.asm_17be
- ld hl, $6
+.check_hour
+ ld hl, MAPOBJECT_HOUR
add hl, bc
ld d, [hl]
- ld hl, $7
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
ld e, [hl]
ld hl, hHours
ld a, d
cp e
- jr z, .asm_17e6
- jr c, .asm_17dc
+ jr z, .yes
+ jr c, .check_timeofday
ld a, [hl]
cp d
- jr nc, .asm_17e6
+ jr nc, .yes
cp e
- jr c, .asm_17e6
- jr z, .asm_17e6
- jr .asm_17e8
+ jr c, .yes
+ jr z, .yes
+ jr .no
-.asm_17dc
+.check_timeofday
ld a, e
cp [hl]
- jr c, .asm_17e8
+ jr c, .no
ld a, [hl]
cp d
- jr nc, .asm_17e6
- jr .asm_17e8
+ jr nc, .yes
+ jr .no
-.asm_17e6
+.yes
and a
ret
-.asm_17e8
+.no
scf
ret
-Function17ea::
- ld [hMapObjectIndexBuffer], a
+; unused
+ ldh [hMapObjectIndexBuffer], a
call GetMapObject
- call CopyObjectStruct_
+ call CopyObjectStruct
ret
-CopyObjectStruct::
- ld [hMapObjectIndexBuffer], a
+_CopyObjectStruct::
+ ldh [hMapObjectIndexBuffer], a
call UnmaskObject
- ld a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
call GetMapObject
- farcall CopyObjectStruct_
+ farcall CopyObjectStruct
ret
-ApplyDeletionToMapObject:: ; 1804 (0:1804)
- ld [hConnectionStripLength], a
+ApplyDeletionToMapObject::
+ ldh [hMapObjectIndexBuffer], a
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- ret z
- ld [hl], $ff
+ cp -1
+ ret z ; already hidden
+ ld [hl], -1
push af
- call DeleteOject_CheckStopFollow
+ call .CheckStopFollow
pop af
call GetObjectStruct
farcall DeleteMapObject
ret
-DeleteOject_CheckStopFollow:: ; 1822 (0:1822)
+.CheckStopFollow:
ld hl, wObjectFollow_Leader
cp [hl]
- jr z, .asm_182d
+ jr z, .ok
ld hl, wObjectFollow_Follower
cp [hl]
ret nz
-.asm_182d
+.ok
farcall StopFollow
- ld a, $ff
+ ld a, -1
ld [wObjectFollow_Leader], a
ld [wObjectFollow_Follower], a
ret
@@ -335,106 +354,113 @@ CopyPlayerObjectTemplate::
call GetMapObject
ld d, b
ld e, c
- ld a, $ff
+ ld a, -1
ld [de], a
inc de
pop hl
- ld bc, $f
+ ld bc, MAPOBJECT_LENGTH - 1
call CopyBytes
ret
-Function1855::
+Unreferenced_Function19b8:
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
push af
- ld [hl], $ff
+ ld [hl], -1
inc hl
- ld bc, $f
+ ld bc, MAPOBJECT_LENGTH - 1
xor a
call ByteFill
pop af
- cp $ff
+ cp -1
ret z
cp $d
ret nc
ld b, a
ld a, [wObjectFollow_Leader]
cp b
- jr nz, .asm_187b
- ld a, $ff
+ jr nz, .ok
+ ld a, -1
ld [wObjectFollow_Leader], a
-.asm_187b
+
+.ok
ld a, b
call GetObjectStruct
farcall DeleteMapObject
ret
LoadMovementDataPointer::
- ld [wMovementPerson], a
- ld a, [hROMBank]
- ld [wMovementDataPointerBank], a
+; Load the movement data pointer for object a.
+ ld [wMovementObject], a
+ ldh a, [hROMBank]
+ ld [wMovementDataBank], a
ld a, l
- ld [wMovementDataPointerAddr], a
+ ld [wMovementDataAddress], a
ld a, h
- ld [wMovementDataPointerAddr + 1], a
- ld a, [wMovementPerson]
+ ld [wMovementDataAddress + 1], a
+ ld a, [wMovementObject]
call CheckObjectVisibility
ret c
- ld hl, $3
+
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
- ld [hl], $14
- ld hl, $9
+ ld [hl], SPRITEMOVEDATA_SCRIPTED
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
+
ld hl, wVramState
set 7, [hl]
and a
ret
FindFirstEmptyObjectStruct::
+; Returns the index of the first empty object struct in A and its address in HL, then sets carry.
+; If all object structs are occupied, A = 0 and Z is set.
+; Preserves BC and DE.
push bc
push de
ld hl, wObjectStructs
- ld de, $28
- ld c, $d
-.asm_18ba
+ ld de, OBJECT_LENGTH
+ ld c, NUM_OBJECT_STRUCTS
+.loop
ld a, [hl]
and a
- jr z, .asm_18c5
+ jr z, .break
add hl, de
dec c
- jr nz, .asm_18ba
+ jr nz, .loop
xor a
- jr .asm_18c9
+ jr .done
-.asm_18c5
- ld a, $d
+.break
+ ld a, NUM_OBJECT_STRUCTS
sub c
scf
-.asm_18c9
+
+.done
pop de
pop bc
ret
GetSpriteMovementFunction::
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld a, [hl]
- cp $25
- jr c, .asm_18d6
+ cp NUM_SPRITEMOVEDATA
+ jr c, .ok
xor a
-.asm_18d6
- ld hl, SpriteMovementData
+
+.ok
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_MOVEMENT
ld e, a
- ld d, $0
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld a, [hl]
ret
@@ -442,103 +468,109 @@ GetInitialFacing::
push bc
push de
ld e, a
- ld d, $0
- ld hl, SpriteMovementData + 1
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld a, BANK(SpriteMovementData)
call GetFarByte
add a
add a
- and $c
+ maskbits NUM_DIRECTIONS, 2
pop de
pop bc
ret
CopySpriteMovementData::
ld l, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, BANK(SpriteMovementData)
rst Bankswitch
ld a, l
push bc
+
call .CopyData
+
pop bc
pop af
rst Bankswitch
+
ret
.CopyData:
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, de
ld [hl], a
+
push de
ld e, a
- ld d, $0
- ld hl, $4275
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld b, h
ld c, l
pop de
+
ld a, [bc]
inc bc
rlca
rlca
- and $c
- ld hl, $8
+ maskbits NUM_DIRECTIONS, 2
+ ld hl, OBJECT_FACING
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $b
+ ld hl, OBJECT_ACTION
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $4
+ ld hl, OBJECT_FLAGS1
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $6
+ ld hl, OBJECT_PALETTE
add hl, de
ld [hl], a
ret
-GetMovementByte_::
- ld a, [hROMBank]
+_GetMovementByte::
+; Switch to the movement data bank
+ ldh a, [hROMBank]
push af
ld a, [hli]
rst Bankswitch
+; Load the current script byte as given by OBJECT_MOVEMENT_BYTE_INDEX, and increment OBJECT_MOVEMENT_BYTE_INDEX
ld a, [hli]
ld d, [hl]
- ld hl, $1b
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
add [hl]
ld e, a
ld a, d
- adc $0
+ adc 0
ld d, a
inc [hl]
ld a, [de]
ld h, a
pop af
rst Bankswitch
+
ld a, h
ret
@@ -552,16 +584,17 @@ ResetVramState_Bit0::
res 0, [hl]
ret
-UpdateSprites:: ; 196f (0:196f)
+UpdateSprites::
ld a, [wVramState]
bit 0, a
ret z
+
farcall Function557f
- farcall UpdateSprites_
+ farcall _UpdateSprites
ret
-GetObjectStruct:: ; 1982 (0:1982)
- ld bc, $28
+GetObjectStruct::
+ ld bc, OBJECT_LENGTH
ld hl, wObjectStructs
call AddNTimes
ld b, h
@@ -569,28 +602,29 @@ GetObjectStruct:: ; 1982 (0:1982)
ret
DoesObjectHaveASprite::
- ld hl, 0
+ ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
ret
SetSpriteDirection::
+ ; preserves other flags
push af
- ld hl, $8
+ ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- and $f3
+ and %11110011
ld e, a
pop af
- and $c
+ maskbits NUM_DIRECTIONS, 2
or e
ld [hl], a
ret
GetSpriteDirection::
- ld hl, $8
+ ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- and $c
+ maskbits NUM_DIRECTIONS, 2
ret
diff --git a/home/math.asm b/home/math.asm
index ffa3c282..6daa2ed9 100644
--- a/home/math.asm
+++ b/home/math.asm
@@ -1,71 +1,58 @@
-SkipNames::
- ld bc, $b
- and a
- ret z
-.asm_319e
- add hl, bc
- dec a
- jr nz, .asm_319e
- ret
-
-AddNTimes:: ; 31a3 (0:31a3)
- and a
- ret z
-.asm_31a5
- add hl, bc
- dec a
- jr nz, .asm_31a5
- ret
-
SimpleMultiply::
+; Return a * c.
and a
ret z
+
push bc
ld b, a
xor a
-.asm_31af
+.loop
add c
dec b
- jr nz, .asm_31af
+ jr nz, .loop
pop bc
ret
-
-SimpleDivide:: ; 31b5 (0:31b5)
- ld b, $0
-.asm_31b7
+
+SimpleDivide::
+; Divide a by c. Return quotient b and remainder a.
+ ld b, 0
+.loop
inc b
sub c
- jr nc, .asm_31b7
+ jr nc, .loop
dec b
add c
ret
Multiply::
+; Multiply hMultiplicand (3 bytes) by hMultiplier. Result in hProduct.
+; All values are big endian.
push hl
push bc
- callfar Multiply_ ; 1:67bd
+ callfar _Multiply
pop bc
pop hl
ret
Divide::
+; Divide hDividend length b (max 4 bytes) by hDivisor. Result in hQuotient.
+; All values are big endian.
push hl
push de
push bc
-
- homecall Divide_ ; 1:681d
-
+ homecall _Divide
pop bc
pop de
pop hl
ret
SubtractSigned::
+; Return a - b, sign in carry.
sub b
ret nc
cpl
- add $1
+ add 1
scf
ret
diff --git a/home/menu.asm b/home/menu.asm
index 91272113..a82fa3a3 100644
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -1,53 +1,324 @@
-LoadMenuDataHeader:: ; 1bac (0:1bac)
- call CopyMenuDataHeader
+SetMenuAttributes::
+ push hl
+ push bc
+ ld hl, w2DMenuCursorInitY
+ ld b, $8
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ld a, $1
+ ld [hli], a
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ pop bc
+ pop hl
+ ret
+
+StaticMenuJoypad::
+ callfar _StaticMenuJoypad
+ call GetMenuJoypad
+ ret
+
+ScrollingMenuJoypad::
+ callfar _ScrollingMenuJoypad
+ call GetMenuJoypad
+ ret
+
+GetMenuJoypad::
+ push bc
+ push af
+ ldh a, [hJoyLast]
+ and D_PAD
+ ld b, a
+ ldh a, [hJoyPressed]
+ and BUTTONS
+ or b
+ ld b, a
+ pop af
+ ld a, b
+ pop bc
+ ret
+
+PlaceHollowCursor::
+ ld hl, wCursorCurrentTile
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld [hl], "▷"
+ ret
+
+HideCursor::
+ ld hl, wCursorCurrentTile
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld [hl], " "
+ ret
+
+PushWindow::
+ callfar _PushWindow
+ ret
+
+ExitMenu::
+ push af
+ callfar _ExitMenu
+ pop af
+ ret
+
+InitVerticalMenuCursor::
+ callfar _InitVerticalMenuCursor
+ ret
+
+CloseWindow::
+ push af
+ call ExitMenu
+ call ApplyTilemap
+ call UpdateSprites
+ pop af
+ ret
+
+RestoreTileBackup::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ inc b
+ inc c
+
+.row
+ push bc
+ push hl
+
+.col
+ ld a, [de]
+ ld [hli], a
+ dec de
+ dec c
+ jr nz, .col
+
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+
+ ret
+
+PopWindow::
+ ld b, $10
+ ld de, wMenuFlags
+.loop
+ ld a, [hld]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ret
+
+GetMenuBoxDims::
+ ld a, [wMenuBorderTopCoord] ; top
+ ld b, a
+ ld a, [wMenuBorderBottomCoord] ; bottom
+ sub b
+ ld b, a
+ ld a, [wMenuBorderLeftCoord] ; left
+ ld c, a
+ ld a, [wMenuBorderRightCoord] ; right
+ sub c
+ ld c, a
+ ret
+
+CopyMenuData::
+ push hl
+ push de
+ push bc
+ push af
+ ld hl, wMenuDataPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wMenuDataFlags
+ ld bc, wMenuDataEnd - wMenuDataFlags
+ call CopyBytes
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+
+GetWindowStackTop::
+ ld hl, wWindowStackPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+PlaceVerticalMenuItems::
+ call CopyMenuData
+ ld hl, wMenuDataPointer
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call GetMenuTextStartCoord
+ call Coord2Tile ; hl now contains the tilemap address where we will start printing text.
+ inc de
+ ld a, [de] ; Number of items
+ inc de
+ ld b, a
+.loop
+ push bc
+ call PlaceString
+ inc de
+ ld bc, 2 * SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .loop
+
+ ld a, [wMenuDataFlags]
+ bit 4, a
+ ret z
+
+ call MenuBoxCoord2Tile
+ ld a, [de]
+ ld c, a
+ inc de
+ ld b, $0
+ add hl, bc
+ jp PlaceString
+
+MenuBox::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ dec b
+ dec c
+ jp Textbox
+
+GetMenuTextStartCoord::
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+ inc b
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ inc c
+; bit 6: if not set, leave extra room on top
+ ld a, [wMenuDataFlags]
+ bit 6, a
+ jr nz, .bit_6_set
+ inc b
+
+.bit_6_set
+; bit 7: if set, leave extra room on the left
+ ld a, [wMenuDataFlags]
+ bit 7, a
+ jr z, .bit_7_clear
+ inc c
+
+.bit_7_clear
+ ret
+
+ClearMenuBoxInterior::
+ call MenuBoxCoord2Tile
+ ld bc, SCREEN_WIDTH + 1
+ add hl, bc
+ call GetMenuBoxDims
+ dec b
+ dec c
+ call ClearBox
+ ret
+
+ClearWholeMenuBox::
+ call MenuBoxCoord2Tile
+ call GetMenuBoxDims
+ inc c
+ inc b
+ call ClearBox
+ ret
+
+MenuBoxCoord2Tile::
+ ld a, [wMenuBorderLeftCoord]
+ ld c, a
+ ld a, [wMenuBorderTopCoord]
+ ld b, a
+
+Coord2Tile::
+; Return the address of wTilemap(c, b) in hl.
+ xor a
+ ld h, a
+ ld l, b
+ ld a, c
+ ld b, h
+ ld c, l
+ add hl, hl
+ add hl, hl
+ add hl, bc
+ add hl, hl
+ add hl, hl
+ ld c, a
+ xor a
+ ld b, a
+ add hl, bc
+ bccoord 0, 0
+ add hl, bc
+ ret
+
+LoadMenuHeader::
+ call CopyMenuHeader
call PushWindow
ret
-CopyMenuDataHeader:: ; 1bb3 (0:1bb3)
- ld de, wMenuDataHeader
- ld bc, wMenuDataHeaderEnd - wMenuDataHeader
+CopyMenuHeader::
+ ld de, wMenuHeader
+ ld bc, wMenuHeaderEnd - wMenuHeader
call CopyBytes
ret
-StoreTo_wMenuCursorBuffer
+StoreTo_wMenuCursorBuffer::
ld [wMenuCursorBuffer], a
ret
-MenuTextBox:: ; 1bc1 (0:1bc1)
+MenuTextbox::
push hl
- call LoadMenuTextBox
+ call LoadMenuTextbox
pop hl
jp PrintText
-; XXX
-ret_1bc9
+; unused
ret
-LoadMenuTextBox:: ; 1bca (0:1bca)
- ld hl, .MenuDataHeader
- call LoadMenuDataHeader
+LoadMenuTextbox::
+ ld hl, .MenuHeader
+ call LoadMenuHeader
ret
-.MenuDataHeader:
- db $40 ; tile backup
- db 12, 0 ; start coords
- db 17, 19 ; end coords
- dw $8000
+
+.MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 0, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
+ dw vTiles0
db 0 ; default option
-MenuTextBoxBackup::
- call MenuTextBox
+MenuTextboxBackup::
+ call MenuTextbox
call CloseWindow
ret
-LoadStandardMenuDataHeader::
- ld hl, .MenuDataHeader
- call LoadMenuDataHeader
+LoadStandardMenuHeader::
+ ld hl, .MenuHeader
+ call LoadMenuHeader
ret
-.MenuDataHeader: ; 1d75
- db $40 ; tile backup
- db 0, 0 ; start coords
- db 17, 19 ; end coords
+.MenuHeader:
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw 0
db 1 ; default option
@@ -55,31 +326,31 @@ Call_ExitMenu::
call ExitMenu
ret
-VerticalMenu:: ; 1bf3 (0:1bf3)
+VerticalMenu::
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call MenuBox
call UpdateSprites
call PlaceVerticalMenuItems
call ApplyTilemap
- call CopyMenuData2
- ld a, [wMenuData2Flags]
+ call CopyMenuData
+ ld a, [wMenuDataFlags]
bit 7, a
- jr z, .asm_1c19
+ jr z, .cancel
call InitVerticalMenuCursor
call StaticMenuJoypad
call MenuClickSound
bit 1, a
- jr z, .asm_1c1b
-.asm_1c19
+ jr z, .okay
+.cancel
scf
ret
-.asm_1c1b
+.okay
and a
ret
GetMenu2::
- call LoadMenuDataHeader
+ call LoadMenuHeader
call VerticalMenu
call CloseWindow
ld a, [wMenuCursorY]
@@ -89,7 +360,7 @@ CopyNameFromMenu::
push hl
push bc
push af
- ld hl, wMenuData2Pointer
+ ld hl, wMenuDataPointer
ld a, [hli]
ld h, [hl]
ld l, a
@@ -99,34 +370,38 @@ CopyNameFromMenu::
call GetNthString
ld d, h
ld e, l
- call Function317b
+ call CopyName1
pop bc
pop hl
ret
YesNoBox::
lb bc, SCREEN_WIDTH - 6, 7
+
PlaceYesNoBox::
jr _YesNoBox
PlaceGenericTwoOptionBox::
- call LoadMenuDataHeader
+ call LoadMenuHeader
jr InterpretTwoOptionMenu
_YesNoBox::
+; Return nc (yes) or c (no).
push bc
- ld hl, YesNoMenuDataHeader
- call CopyMenuDataHeader
+ ld hl, YesNoMenuHeader
+ call CopyMenuHeader
pop bc
+
ld a, b
ld [wMenuBorderLeftCoord], a
- add $5
+ add 5
ld [wMenuBorderRightCoord], a
ld a, c
ld [wMenuBorderTopCoord], a
- add $4
+ add 4
ld [wMenuBorderBottomCoord], a
call PushWindow
+
InterpretTwoOptionMenu::
call VerticalMenu
push af
@@ -134,38 +409,39 @@ InterpretTwoOptionMenu::
call DelayFrames
call CloseWindow
pop af
- jr c, .asm_1c80
+ jr c, .no
ld a, [wMenuCursorY]
- cp $2
- jr z, .asm_1c80
+ cp 2 ; no
+ jr z, .no
and a
ret
-.asm_1c80
- ld a, $2
+
+.no
+ ld a, 2
ld [wMenuCursorY], a
scf
ret
-YesNoMenuDataHeader:: ; 1c87 (0:1c87)
- db $40 ; tile backup
- db 5, 10 ; start coords
- db 9, 15 ; end coords
- dw .MenuData2
+
+YesNoMenuHeader::
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 10, 5, 15, 9
+ dw .MenuData
db 1 ; default option
-.MenuData2: ; 1e25
- db $c0 ; flags
+.MenuData:
+ db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
db 2
db "YES@"
db "NO@"
-OffsetMenuDataHeader::
- call OffsetMenuDataHeader_
+OffsetMenuHeader::
+ call _OffsetMenuHeader
call PushWindow
ret
-OffsetMenuDataHeader_:: ; 1c9f (0:1c9f)
+_OffsetMenuHeader::
push de
- call CopyMenuDataHeader
+ call CopyMenuHeader
pop de
ld a, [wMenuBorderLeftCoord]
ld h, a
@@ -197,42 +473,42 @@ DoNthMenu::
ret
SetUpMenu::
- call DrawVariableLengthMenuBox
+ call DrawVariableLengthMenuBox ; ???
call MenuWriteText
- call InitMenuCursorAndButtonPermissions
- ld hl, wcedc
+ call InitMenuCursorAndButtonPermissions ; set up selection pointer
+ ld hl, w2DMenuFlags1
set 7, [hl]
ret
-DrawVariableLengthMenuBox:: ; 1ce9 (0:1ce9)
- call CopyMenuData2
+DrawVariableLengthMenuBox::
+ call CopyMenuData
call GetMenuIndexSet
call AutomaticGetMenuBottomCoord
call MenuBox
ret
-MenuWriteText:: ; 1cf6 (0:1cf6)
+MenuWriteText::
xor a
- ld [hBGMapMode], a
- call GetMenuIndexSet
- call RunMenuItemPrintingFunction
+ ldh [hBGMapMode], a
+ call GetMenuIndexSet ; sort out the text
+ call RunMenuItemPrintingFunction ; actually write it
call SafeUpdateSprites
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call ApplyTilemap
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
-AutomaticGetMenuBottomCoord:: ; 1d10 (0:1d10)
+AutomaticGetMenuBottomCoord::
ld a, [wMenuBorderLeftCoord]
ld c, a
ld a, [wMenuBorderRightCoord]
sub c
ld c, a
- ld a, [wMenuData2Items]
+ ld a, [wMenuDataItems]
add a
inc a
ld b, a
@@ -241,71 +517,74 @@ AutomaticGetMenuBottomCoord:: ; 1d10 (0:1d10)
ld [wMenuBorderBottomCoord], a
ret
-GetMenuIndexSet:: ; 1d27 (0:1d27)
- ld hl, wMenuData2IndicesPointer
+GetMenuIndexSet::
+ ld hl, wMenuDataIndicesPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wWhichIndexSet]
and a
- jr z, .asm_1d3d
+ jr z, .skip
ld b, a
- ld c, $ff
-.asm_1d36
+ ld c, -1
+.loop
ld a, [hli]
cp c
- jr nz, .asm_1d36
+ jr nz, .loop
dec b
- jr nz, .asm_1d36
-.asm_1d3d
+ jr nz, .loop
+
+.skip
ld d, h
ld e, l
ld a, [hl]
- ld [wMenuData2Items], a
+ ld [wMenuDataItems], a
ret
-RunMenuItemPrintingFunction:: ; 1d44 (0:1d44)
+RunMenuItemPrintingFunction::
call MenuBoxCoord2Tile
ld bc, 2 * SCREEN_WIDTH + 2
add hl, bc
-.asm_1d4b
+.loop
inc de
ld a, [de]
- cp $ff
+ cp -1
ret z
ld [wMenuSelection], a
push de
push hl
ld d, h
ld e, l
- ld hl, wMenuData2DisplayFunctionPointer
+ ld hl, wMenuDataDisplayFunctionPointer
call ._hl_
pop hl
- ld de, $28
+ ld de, 2 * SCREEN_WIDTH
add hl, de
pop de
- jr .asm_1d4b
+ jr .loop
-._hl_ ; 1d65 (0:1d65)
+._hl_
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
-InitMenuCursorAndButtonPermissions:: ; 1d69 (0:1d69)
+InitMenuCursorAndButtonPermissions::
call InitVerticalMenuCursor
ld hl, wMenuJoypadFilter
- ld a, [wMenuData2Flags]
+ ld a, [wMenuDataFlags]
bit 3, a
- jr z, .asm_1d78
- set 3, [hl]
-.asm_1d78
- ld a, [wMenuData2Flags]
+ jr z, .disallow_select
+ set START_F, [hl]
+
+.disallow_select
+ ld a, [wMenuDataFlags]
bit 2, a
- jr z, .asm_1d83
- set 5, [hl]
- set 4, [hl]
-.asm_1d83
+ jr z, .disallow_left_right
+ set D_LEFT_F, [hl]
+ set D_RIGHT_F, [hl]
+
+.disallow_left_right
ret
GetScrollingMenuJoypad::
@@ -314,36 +593,41 @@ GetScrollingMenuJoypad::
and [hl]
jr ContinueGettingMenuJoypad
-GetStaticMenuJoypad:: ; 1d8d (0:1d8d)
+GetStaticMenuJoypad::
xor a
ld [wMenuJoypad], a
call StaticMenuJoypad
-ContinueGettingMenuJoypad::
- bit 0, a
- jr nz, .asm_1dbc
- bit 1, a
- jr nz, .asm_1dd7
- bit 3, a
- jr nz, .asm_1dd7
- bit 4, a
- jr nz, .asm_1dae
- bit 5, a
- jr nz, .asm_1db5
+
+ContinueGettingMenuJoypad:
+ bit A_BUTTON_F, a
+ jr nz, .a_button
+ bit B_BUTTON_F, a
+ jr nz, .b_start
+ bit START_F, a
+ jr nz, .b_start
+ bit D_RIGHT_F, a
+ jr nz, .d_right
+ bit D_LEFT_F, a
+ jr nz, .d_left
xor a
ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1dae
- ld a, $10
+ jr .done
+
+.d_right
+ ld a, D_RIGHT
ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1db5
- ld a, $20
+ jr .done
+
+.d_left
+ ld a, D_LEFT
ld [wMenuJoypad], a
- jr .asm_1dc1
-.asm_1dbc
- ld a, $1
+ jr .done
+
+.a_button
+ ld a, A_BUTTON
ld [wMenuJoypad], a
-.asm_1dc1
+
+.done
call GetMenuIndexSet
ld a, [wMenuCursorY]
ld l, a
@@ -355,17 +639,18 @@ ContinueGettingMenuJoypad::
ld [wMenuCursorBuffer], a
and a
ret
-.asm_1dd7
- ld a, $2
+
+.b_start
+ ld a, B_BUTTON
ld [wMenuJoypad], a
- ld a, $ff
+ ld a, -1
ld [wMenuSelection], a
scf
ret
PlaceMenuStrings::
push de
- ld hl, wMenuData2PointerTableAddr
+ ld hl, wMenuDataPointerTableAddr
ld a, [hli]
ld h, [hl]
ld l, a
@@ -390,7 +675,7 @@ PlaceNthMenuStrings::
call PlaceString
ret
-Function1e08::
+Unreferenced_Function1e08::
call GetMenuDataPointerTableEntry
inc hl
inc hl
@@ -407,10 +692,10 @@ MenuJumptable::
ld l, a
jp hl
-GetMenuDataPointerTableEntry:: ; 1e1b (0:1e1b)
+GetMenuDataPointerTableEntry::
ld e, a
ld d, $0
- ld hl, wMenuData2PointerTableAddr
+ ld hl, wMenuDataPointerTableAddr
ld a, [hli]
ld h, [hl]
ld l, a
@@ -421,16 +706,18 @@ GetMenuDataPointerTableEntry:: ; 1e1b (0:1e1b)
ret
ClearWindowData::
- ld hl, wWindowData
+ ld hl, wWindowStackPointer
call .bytefill
- ld hl, wMenuDataHeader
+ ld hl, wMenuHeader
call .bytefill
- ld hl, wMenuData2
+ ld hl, wMenuDataFlags
call .bytefill
- ld hl, wMenuData3
+ ld hl, w2DMenuCursorInitY
call .bytefill
+
xor a
call OpenSRAM
+
xor a
ld hl, sWindowStackTop
ld [hld], a
@@ -439,6 +726,7 @@ ClearWindowData::
ld [wWindowStackPointer], a
ld a, h
ld [wWindowStackPointer + 1], a
+
call CloseSRAM
ret
@@ -448,44 +736,47 @@ ClearWindowData::
call ByteFill
ret
-MenuClickSound:: ; 1e5f (0:1e5f)
+MenuClickSound::
push af
- and $3
- jr z, .asm_1e6e
- ld hl, wMenuDataHeader
+ and A_BUTTON | B_BUTTON
+ jr z, .nosound
+ ld hl, wMenuHeader
bit 3, a
- jr nz, .asm_1e6e
+ jr nz, .nosound
call PlayClickSFX
-.asm_1e6e
+.nosound
pop af
ret
-PlayClickSFX:: ; 1e70 (0:1e70)
+
+PlayClickSFX::
push de
ld de, SFX_READ_TEXT_2
call PlaySFX
pop de
ret
-MenuTextBoxWaitButton::
- call MenuTextBox
+MenuTextboxWaitButton::
+ call MenuTextbox
call WaitButton
call ExitMenu
ret
Place2DMenuItemName::
ld [wBuffer], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [wBuffer]
rst Bankswitch
+
call PlaceString
pop af
rst Bankswitch
+
ret
_2DMenu::
- call CopyMenuData2
- ld a, [hROMBank]
+ call CopyMenuData
+ ldh a, [hROMBank]
ld [wMenuDataBank], a
push af
ld a, BANK(_2DMenu_)
@@ -499,8 +790,8 @@ _2DMenu::
ResetBGWindow::
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, $90
- ld [rWY], a
- ld [hWY], a
- ret
+ ldh [rWY], a
+ ldh [hWY], a
+ ret \ No newline at end of file
diff --git a/home/movement.asm b/home/movement.asm
index c15b6aa5..025fdeb6 100644
--- a/home/movement.asm
+++ b/home/movement.asm
@@ -1,12 +1,12 @@
InitMovementBuffer::
- ld [wMovementBufferPerson], a
+ ld [wMovementBufferObject], a
xor a
ld [wMovementBufferCount], a
- ld a, $0
+ ld a, $0 ; useless
ld [wceef], a
- ld a, wMovementBuffer % $100
+ ld a, LOW(wMovementBuffer)
ld [wcef0], a
- ld a, wMovementBuffer / $100
+ ld a, HIGH(wMovementBuffer)
ld [wcef1], a
ret
@@ -18,13 +18,13 @@ DecrementMovementBufferCount::
ld [wMovementBufferCount], a
ret
-AppendToMovementBuffer:: ; 19dc (0:19dc)
+AppendToMovementBuffer::
push hl
push de
ld hl, wMovementBufferCount
ld e, [hl]
inc [hl]
- ld d, $0
+ ld d, 0
ld hl, wMovementBuffer
add hl, de
ld [hl], a
@@ -32,72 +32,80 @@ AppendToMovementBuffer:: ; 19dc (0:19dc)
pop hl
ret
-AppendToMovementBufferNTimes:: ; 19ed (0:19ed)
+AppendToMovementBufferNTimes::
push af
ld a, c
and a
- jr nz, .asm_19f4
+ jr nz, .okay
pop af
ret
-.asm_19f4
+.okay
pop af
-.asm_19f5
+.loop
call AppendToMovementBuffer
dec c
- jr nz, .asm_19f5
+ jr nz, .loop
ret
ComputePathToWalkToPlayer::
push af
+; compare x coords, load left/right into h, and x distance into d
ld a, b
sub d
- ld h, $2
- jr nc, .asm_1a07
+ ld h, LEFT
+ jr nc, .got_x_distance
dec a
cpl
- ld h, $3
-.asm_1a07
+ ld h, RIGHT
+
+.got_x_distance
ld d, a
+; compare y coords, load up/down into l, and y distance into e
ld a, c
sub e
- ld l, $1
- jr nc, .asm_1a12
+ ld l, UP
+ jr nc, .got_y_distance
dec a
cpl
- ld l, $0
-.asm_1a12
+ ld l, DOWN
+
+.got_y_distance
ld e, a
+; if the x distance is less than the y distance, swap h and l, and swap d and e
cp d
- jr nc, .asm_1a1c
+ jr nc, .done
ld a, h
ld h, l
ld l, a
ld a, d
ld d, e
ld e, a
-.asm_1a1c
+
+.done
pop af
ld b, a
+; Add movement in the longer direction first...
ld a, h
- call WalkToPlayer_GetMovementByte
+ call .GetMovementData
ld c, d
call AppendToMovementBufferNTimes
+; ... then add the shorter direction.
ld a, l
- call WalkToPlayer_GetMovementByte
+ call .GetMovementData
ld c, e
call AppendToMovementBufferNTimes
ret
-WalkToPlayer_GetMovementByte:: ; 1a2f (0:1a2f)
+.GetMovementData:
push de
push hl
ld l, b
- ld h, $0
+ ld h, 0
add hl, hl
add hl, hl
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
ld de, .MovementData
add hl, de
diff --git a/home/names.asm b/home/names.asm
new file mode 100755
index 00000000..3461dc76
--- /dev/null
+++ b/home/names.asm
@@ -0,0 +1,268 @@
+NamesPointers::
+; entries correspond to GetName constants (see constants/text_constants.asm)
+ dba PokemonNames ; MON_NAME (not used; jumps to GetPokemonName)
+ dba MoveNames ; MOVE_NAME
+ dba NULL ; DUMMY_NAME
+ dba ItemNames ; ITEM_NAME
+ dbw 0, wPartyMonOT ; PARTY_OT_NAME
+ dbw 0, wOTPartyMonOT ; ENEMY_OT_NAME
+ dba TrainerClassNames ; TRAINER_NAME
+ dbw 4, MoveDescriptions ; MOVE_DESC_NAME_BROKEN (wrong bank)
+
+GetName::
+; Return name wCurSpecies from name list wNamedObjectTypeBuffer in wStringBuffer1.
+
+ ldh a, [hROMBank]
+ push af
+ push hl
+ push bc
+ push de
+
+ ld a, [wNamedObjectTypeBuffer]
+ cp MON_NAME
+ jr nz, .NotPokeName
+
+ ld a, [wCurSpecies]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, MON_NAME_LENGTH
+ add hl, de
+ ld e, l
+ ld d, h
+ jr .done
+
+.NotPokeName:
+ ld a, [wNamedObjectTypeBuffer]
+ dec a
+ ld e, a
+ ld d, 0
+ ld hl, NamesPointers
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ rst Bankswitch
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [wCurSpecies]
+ dec a
+ call GetNthString
+
+ ld de, wStringBuffer1
+ ld bc, ITEM_NAME_LENGTH
+ call CopyBytes
+
+.done
+ ld a, e
+ ld [wcffe], a
+ ld a, d
+ ld [wcffe + 1], a
+
+ pop de
+ pop bc
+ pop hl
+ pop af
+ rst Bankswitch
+ ret
+
+GetNthString::
+; Return the address of the
+; ath string starting from hl.
+
+ and a
+ ret z
+
+ push bc
+ ld b, a
+ ld c, "@"
+.readChar
+ ld a, [hli]
+ cp c
+ jr nz, .readChar
+ dec b
+ jr nz, .readChar
+ pop bc
+ ret
+
+GetBasePokemonName::
+; Discards gender (Nidoran).
+
+ push hl
+ call GetPokemonName
+
+ ld hl, wStringBuffer1
+.loop
+ ld a, [hl]
+ cp "@"
+ jr z, .quit
+ cp "♂"
+ jr z, .end
+ cp "♀"
+ jr z, .end
+ inc hl
+ jr .loop
+.end
+ ld [hl], "@"
+.quit
+ pop hl
+ ret
+
+GetPokemonName::
+; Get Pokemon name for wNamedObjectIndexBuffer.
+
+ ldh a, [hROMBank]
+ push af
+ push hl
+ ld a, BANK(PokemonNames)
+ rst Bankswitch
+
+; Each name is ten characters
+ ld a, [wNamedObjectIndexBuffer]
+ dec a
+ ld hl, PokemonNames
+ ld e, a
+ ld d, $0
+
+rept MON_NAME_LENGTH - 1
+ add hl, de
+endr
+
+; Terminator
+ ld de, wStringBuffer1
+ push de
+ ld bc, MON_NAME_LENGTH - 1
+ call CopyBytes
+ ld hl, wStringBuffer1 + MON_NAME_LENGTH - 1
+ ld [hl], "@"
+ pop de
+
+ pop hl
+ pop af
+ rst Bankswitch
+ ret
+
+GetItemName::
+; Get item name for wNamedObjectIndexBuffer.
+
+ push hl
+ push bc
+ ld a, [wNamedObjectIndexBuffer]
+
+ cp TM01
+ jr nc, .TM
+
+ ld [wCurSpecies], a
+ ld a, ITEM_NAME
+ ld [wNamedObjectTypeBuffer], a
+ call GetName
+ jr .Copied
+.TM:
+ call GetTMHMName
+.Copied:
+ ld de, wStringBuffer1
+ pop bc
+ pop hl
+ ret
+
+GetTMHMName::
+; Get TM/HM name for item wNamedObjectIndexBuffer.
+
+ push hl
+ push de
+ push bc
+ ld a, [wNamedObjectIndexBuffer]
+ push af
+
+; TM/HM prefix
+ cp HM01
+ push af
+ jr c, .TM
+
+ ld hl, .HMText
+ ld bc, .HMTextEnd - .HMText
+ jr .copy
+
+.TM:
+ ld hl, .TMText
+ ld bc, .TMTextEnd - .TMText
+
+.copy:
+ ld de, wStringBuffer1
+ call CopyBytes
+
+; TM/HM number
+ push de
+ ld a, [wNamedObjectIndexBuffer]
+ ld c, a
+ callfar GetTMHMNumber
+ pop de
+
+; HM numbers start from 51, not 1
+ pop af
+ ld a, c
+ jr c, .not_hm
+ sub NUM_TMS
+
+.not_hm:
+; Divide and mod by 10 to get the top and bottom digits respectively
+ ld b, "0"
+
+.mod10:
+ sub 10
+ jr c, .done_mod
+ inc b
+ jr .mod10
+
+.done_mod:
+ add 10
+
+ push af
+ ld a, b
+ ld [de], a
+ inc de
+ pop af
+
+ ld b, "0"
+ add b
+ ld [de], a
+
+; End the string
+ inc de
+ ld a, "@"
+ ld [de], a
+
+ pop af
+ ld [wNamedObjectIndexBuffer], a
+ pop bc
+ pop de
+ pop hl
+ ret
+
+.TMText:
+ db "TM"
+.TMTextEnd:
+ db "@"
+
+.HMText:
+ db "HM"
+.HMTextEnd:
+ db "@"
+
+INCLUDE "home/hm_moves.asm"
+
+GetMoveName::
+ push hl
+
+ ld a, MOVE_NAME
+ ld [wNamedObjectTypeBuffer], a
+
+ ld a, [wNamedObjectIndexBuffer] ; move id
+ ld [wCurSpecies], a
+
+ call GetName
+ ld de, wStringBuffer1
+
+ pop hl
+ ret \ No newline at end of file
diff --git a/home/palettes.asm b/home/palettes.asm
index 9762c124..131a7128 100644
--- a/home/palettes.asm
+++ b/home/palettes.asm
@@ -1,55 +1,90 @@
-UpdatePalsIfCGB:: ; bdf (0:0bdf)
- ld a, [hCGB]
+; Functions dealing with palettes.
+
+UpdatePalsIfCGB::
+; update bgp data from wBGPals2
+; update obp data from wOBPals2
+; return carry if successful
+
+; check cgb
+ ldh a, [hCGB]
and a
ret z
-UpdateCGBPals:: ; be3 (0:0be3)
- ld a, [hCGBPalUpdate]
+
+UpdateCGBPals::
+; return carry if successful
+; any pals to update?
+ ldh a, [hCGBPalUpdate]
and a
ret z
+
ForceUpdateCGBPals::
ld hl, wBGPals
- ld a, $80
- ld [rBGPI], a
+
+; copy 8 pals to bgpd
+ ld a, 1 << rBGPI_AUTO_INCREMENT
+ ldh [rBGPI], a
ld c, 8 / 2
.bgp
-rept 2 palettes
+rept (1 palettes) * 2
ld a, [hli]
- ld [rBGPD], a
+ ldh [rBGPD], a
endr
+
dec c
jr nz, .bgp
- ld a, $80
- ld [rOBPI], a
+
+; hl is now wOBPals2
+
+; copy 8 pals to obpd
+ ld a, 1 << rOBPI_AUTO_INCREMENT
+ ldh [rOBPI], a
ld c, 8 / 2
.obp
-rept 2 palettes
+rept (1 palettes) * 2
ld a, [hli]
- ld [rOBPD], a
+ ldh [rOBPD], a
endr
+
dec c
jr nz, .obp
+
+; clear pal update queue
xor a
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
+
scf
ret
-DmgToCgbBGPals:: ; c61 (0:0c61)
- ld [rBGP], a
+DmgToCgbBGPals::
+; exists to forego reinserting cgb-converted image data
+
+; input: a -> bgp
+
+ ldh [rBGP], a
push af
- ld a, [hCGB]
+
+; Don't need to be here if DMG
+ ldh a, [hCGB]
and a
jr z, .end
+
push hl
push de
push bc
- ld hl, wBGPals
- ld de, wTempBGPals
- ld a, [rBGP]
+
+; copy & reorder bg pal buffer
+ ld hl, wBGPals ; to
+ ld de, wTempBGPals ; from
+; order
+ ldh a, [rBGP]
ld b, a
- ld c, $8
+; all pals
+ ld c, 8
call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
+; request pal update
+ ld a, 1
+ ldh [hCGBPalUpdate], a
+
pop bc
pop de
pop hl
@@ -57,131 +92,174 @@ DmgToCgbBGPals:: ; c61 (0:0c61)
pop af
ret
-DmgToCgbObjPals:: ; c83 (0:0c83)
+DmgToCgbObjPals::
+; exists to forego reinserting cgb-converted image data
+
+; input: d -> obp1
+; e -> obp2
+
ld a, e
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, d
- ld [rOBP1], a
- ld a, [hCGB]
+ ldh [rOBP1], a
+
+ ldh a, [hCGB]
and a
ret z
+
push hl
push de
push bc
- ld hl, wOBPals
- ld de, wTempOBPals
- ld a, [rOBP0]
+
+; copy & reorder obj pal buffer
+ ld hl, wOBPals ; to
+ ld de, wTempOBPals ; from
+; order
+ ldh a, [rOBP0]
ld b, a
- ld c, $8
+; all pals
+ ld c, 8
call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
+; request pal update
+ ld a, 1
+ ldh [hCGBPalUpdate], a
+
pop bc
pop de
pop hl
ret
DmgToCgbObjPal0::
- ld [rOBP0], a
+ ldh [rOBP0], a
push af
- ld a, [hCGB]
+
+; Don't need to be here if not CGB
+ ldh a, [hCGB]
and a
- jr z, .end
+ jr z, .dmg
+
push hl
push de
push bc
- ld hl, wOBPals
- ld de, wTempOBPals
- ld a, [rOBP0]
+
+ ld hl, wOBPals palette 0
+ ld de, wTempOBPals palette 0
+ ldh a, [rOBP0]
ld b, a
- ld c, $1
+ ld c, 1
call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
+ ld a, 1
+ ldh [hCGBPalUpdate], a
+
pop bc
pop de
pop hl
-.end
+
+.dmg
pop af
ret
DmgToCgbObjPal1::
- ld [rOBP1], a
+ ldh [rOBP1], a
push af
- ld a, [hCGB]
+
+ ldh a, [hCGB]
and a
- jr z, .end
+ jr z, .dmg
+
push hl
push de
push bc
- ld hl, wOBPals + 1 palettes
- ld de, wTempOBPals + 1 palettes
- ld a, [rOBP1]
+
+ ld hl, wOBPals palette 1
+ ld de, wTempOBPals palette 1
+ ldh a, [rOBP1]
ld b, a
- ld c, $1
+ ld c, 1
call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
+ ld a, 1
+ ldh [hCGBPalUpdate], a
+
pop bc
pop de
pop hl
-.end
+
+.dmg
pop af
ret
-CopyPals:: ; cea (0:0cea)
+CopyPals::
+; copy c palettes in order b from de to hl
+
push bc
- ld c, $4
+ ld c, NUM_PAL_COLORS
.loop
push de
push hl
+
+; get pal color
ld a, b
- and $3
+ maskbits 1 << PAL_COLOR_SIZE
+; 2 bytes per color
add a
ld l, a
- ld h, $0
+ ld h, 0
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
+
+; dest
pop hl
+; write color
ld [hl], e
inc hl
ld [hl], d
inc hl
+; next pal color
+rept PAL_COLOR_SIZE
srl b
- srl b
+endr
+; source
pop de
+; done pal?
dec c
jr nz, .loop
- ld a, $8
+
+; de += 8 (next pal)
+ ld a, PALETTE_SIZE
add e
jr nc, .ok
inc d
.ok
ld e, a
+
+; how many more pals?
pop bc
dec c
jr nz, CopyPals
ret
ClearVBank1::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret z
- ld a, $1
- ld [rVBK], a
- ld hl, $8000
- ld bc, $2000
+
+ ld a, 1
+ ldh [rVBK], a
+
+ ld hl, VRAM_Begin
+ ld bc, VRAM_End - VRAM_Begin
xor a
call ByteFill
- ld a, $0
- ld [rVBK], a
+
+ ld a, 0
+ ldh [rVBK], a
ret
Functiond2a::
- ld hl, wTileMap
- ld de, wAttrMap
+ ld hl, wTilemap
+ ld de, wAttrmap
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
.asm_d33
ld a, [hli]
@@ -198,22 +276,22 @@ Functiond2a::
ret
ReloadSpritesNoPalettes::
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret z
ld hl, wBGPals
- ld bc, $50
+ ld bc, (8 palettes) + (2 palettes)
xor a
call ByteFill
- ld a, $1
- ld [hCGBPalUpdate], a
+ ld a, 1
+ ldh [hCGBPalUpdate], a
call DelayFrame
ret
-FarCallSwapTextboxPalettes::
- homecall SwapTextboxPalettes
+SwapTextboxPalettes::
+ homecall _SwapTextboxPalettes
ret
-FarCallScrollBGMapPalettes::
- homecall ScrollBGMapPalettes
+ScrollBGMapPalettes::
+ homecall _ScrollBGMapPalettes
ret
diff --git a/home/pokedex_flags.asm b/home/pokedex_flags.asm
index 424fee13..5c12da51 100644
--- a/home/pokedex_flags.asm
+++ b/home/pokedex_flags.asm
@@ -1,3 +1,35 @@
+CountSetBits::
+; Count the number of set bits in b bytes starting from hl.
+; Return in a, c and [wNumSetBits].
+ ld c, 0
+.next
+ ld a, [hli]
+ ld e, a
+ ld d, 8
+
+.count
+ srl e
+ ld a, 0
+ adc c
+ ld c, a
+ dec d
+ jr nz, .count
+
+ dec b
+ jr nz, .next
+
+ ld a, c
+ ld [wNumSetBits], a
+ ret
+
+GetWeekday::
+ ld a, [wCurDay]
+.mod
+ sub 7
+ jr nc, .mod
+ add 7
+ ret
+
SetSeenAndCaughtMon::
push af
ld c, a
@@ -5,6 +37,8 @@ SetSeenAndCaughtMon::
ld b, SET_FLAG
call PokedexFlagAction
pop af
+ ; fallthrough
+
SetSeenMon::
ld c, a
ld hl, wPokedexSeen
@@ -21,10 +55,11 @@ CheckSeenMon::
ld c, a
ld hl, wPokedexSeen
ld b, CHECK_FLAG
-PokedexFlagAction:: ; 35e4 (0:35e4)
+ ; fallthrough
+
+PokedexFlagAction::
ld d, 0
predef SmallFarFlagAction
ld a, c
and a
ret
-
diff --git a/home/pokemon.asm b/home/pokemon.asm
new file mode 100755
index 00000000..774bc04a
--- /dev/null
+++ b/home/pokemon.asm
@@ -0,0 +1,292 @@
+DrawBattleHPBar::
+; Draw an HP bar d tiles long at hl
+; Fill it up to e pixels
+
+ push hl
+ push de
+ push bc
+
+; Place 'HP:'
+ ld a, $60
+ ld [hli], a
+ ld a, $61
+ ld [hli], a
+
+; Draw a template
+ push hl
+ ld a, $62 ; empty bar
+.template
+ ld [hli], a
+ dec d
+ jr nz, .template
+ ld a, $6b ; bar end
+ add b
+ ld [hl], a
+ pop hl
+
+; Safety check # pixels
+ ld a, e
+ and a
+ jr nz, .fill
+ ld a, c
+ and a
+ jr z, .done
+ ld e, 1
+
+.fill
+; Keep drawing tiles until pixel length is reached
+ ld a, e
+ sub TILE_WIDTH
+ jr c, .lastbar
+
+ ld e, a
+ ld a, $6a ; full bar
+ ld [hli], a
+ ld a, e
+ and a
+ jr z, .done
+ jr .fill
+
+.lastbar
+ ld a, $62 ; empty bar
+ add e ; + e
+ ld [hl], a
+
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+
+PrepMonFrontpic::
+ ld a, $1
+ ld [wcf3b], a
+
+_PrepMonFrontpic::
+ ld a, [wCurPartySpecies]
+ and a
+ jr z, .not_pokemon
+ cp EGG
+ jr z, .egg
+ cp NUM_POKEMON + 1
+ jr nc, .not_pokemon
+.egg
+ push hl
+ ld de, vTiles2
+ predef GetMonFrontpic
+ pop hl
+ xor a
+ ldh [hGraphicStartTile], a
+ lb bc, 7, 7
+ predef PlaceGraphic
+ xor a
+ ld [wcf3b], a
+ ret
+
+.not_pokemon
+ xor a
+ ld [wcf3b], a
+ inc a
+ ld [wCurPartySpecies], a
+ ret
+
+PlayStereoCry::
+ push af
+ ld a, 1
+ ld [wStereoPanningMask], a
+ pop af
+ jr _PlayMonCry
+
+PlayMonCry::
+ push af
+ xor a
+ ld [wStereoPanningMask], a
+ ld [wCryTracks], a
+ pop af
+
+_PlayMonCry::
+ push hl
+ push de
+ push bc
+
+ call GetCryIndex
+ jr c, .done
+
+ ld e, c
+ ld d, b
+ call PlayCry
+ call WaitSFX
+
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+
+LoadCry::
+; Load cry bc.
+
+ call GetCryIndex
+ ret c
+
+ ldh a, [hROMBank]
+ push af
+ ld a, BANK(PokemonCries)
+ rst Bankswitch
+
+ ld hl, PokemonCries
+rept 6 ; sizeof(mon_cry)
+ add hl, bc
+endr
+
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+
+ ld a, [hli]
+ ld [wCryPitch], a
+ ld a, [hli]
+ ld [wCryPitch + 1], a
+ ld a, [hli]
+ ld [wCryLength], a
+ ld a, [hl]
+ ld [wCryLength + 1], a
+
+ pop af
+ rst Bankswitch
+ and a
+ ret
+
+GetCryIndex::
+ and a
+ jr z, .no
+ cp NUM_POKEMON + 1
+ jr nc, .no
+
+ dec a
+ ld c, a
+ ld b, 0
+ and a
+ ret
+
+.no
+ scf
+ ret
+
+PrintLevel::
+; Print wTempMonLevel at hl
+
+ ld a, [wTempMonLevel]
+ ld [hl], "<LV>"
+ inc hl
+
+; How many digits?
+ ld c, 2
+ cp 100 ; This is distinct from MAX_LEVEL.
+ jr c, Print8BitNumLeftAlign
+
+; 3-digit numbers overwrite the :L.
+ dec hl
+ inc c
+ jr Print8BitNumLeftAlign
+
+PrintLevel_Force3Digits::
+; Print :L and all 3 digits
+ ld [hl], "<LV>"
+ inc hl
+ ld c, 3
+
+Print8BitNumLeftAlign::
+ ld [wDeciramBuffer], a
+ ld de, wDeciramBuffer
+ ld b, PRINTNUM_LEFTALIGN | 1
+ jp PrintNum
+
+Unreferenced_GetNthMove::
+ ld hl, wd149
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ ret
+
+GetBaseData::
+ push bc
+ push de
+ push hl
+ ldh a, [hROMBank]
+ push af
+ ld a, BANK(BaseData)
+ rst Bankswitch
+
+; Egg doesn't have BaseData
+ ld a, [wCurSpecies]
+ cp EGG
+ jr z, .egg
+
+; Get BaseData
+ dec a
+ ld bc, BASE_DATA_SIZE
+ ld hl, BaseData
+ call AddNTimes
+ ld de, wCurBaseData
+ ld bc, BASE_DATA_SIZE
+ call CopyBytes
+ jr .end
+
+.egg
+ ld de, UnknownEggPic
+
+; Sprite dimensions
+ ld b, $55 ; 5x5
+ ld hl, wBasePicSize
+ ld [hl], b
+
+; Beta front and back sprites
+; (see pokegold-spaceworld's data/pokemon/base_stats/*)
+ ld hl, wBaseUnusedFrontpic
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ jr .end ; useless
+
+.end
+; Replace Pokedex # with species
+ ld a, [wCurSpecies]
+ ld [wBaseDexNo], a
+
+ pop af
+ rst Bankswitch
+ pop hl
+ pop de
+ pop bc
+ ret
+
+GetCurNick::
+ ld a, [wCurPartyMon]
+ ld hl, wPartyMonNicknames
+
+GetNick::
+; Get nickname a from list hl.
+
+ push hl
+ push bc
+
+ call SkipNames
+ ld de, wStringBuffer1
+
+ push de
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ pop de
+
+ callfar CorrectNickErrors
+
+ pop bc
+ pop hl
+ ret
diff --git a/home/predef.asm b/home/predef.asm
index 2796cb67..10550d12 100644
--- a/home/predef.asm
+++ b/home/predef.asm
@@ -49,4 +49,4 @@ Predef::
ld h, a
ld a, [wPredefTemp + 1]
ld l, a
- ret \ No newline at end of file
+ ret
diff --git a/home/print_bcd.asm b/home/print_bcd.asm
new file mode 100755
index 00000000..9401b26f
--- /dev/null
+++ b/home/print_bcd.asm
@@ -0,0 +1,79 @@
+PrintBCDNumber::
+; function to print a BCD (Binary-coded decimal) number
+; de = address of BCD number
+; hl = destination address
+; c = flags and length
+; bit 7: if set, do not print leading zeroes
+; if unset, print leading zeroes
+; bit 6: if set, left-align the string (do not pad empty digits with spaces)
+; if unset, right-align the string
+; bit 5: if set, print currency symbol at the beginning of the string
+; if unset, do not print the currency symbol
+; bits 0-4: length of BCD number in bytes
+; Note that bits 5 and 7 are modified during execution. The above reflects
+; their meaning at the beginning of the functions's execution.
+ ld b, c ; save flags in b
+ res PRINTNUM_LEADINGZEROS_F, c
+ res PRINTNUM_LEFTALIGN_F, c
+ res PRINTNUM_MONEY_F, c ; c now holds the length
+ bit PRINTNUM_MONEY_F, b
+ jr z, .loop
+ bit PRINTNUM_LEADINGZEROS_F, b
+ jr nz, .loop ; skip currency symbol
+ ld [hl], "¥"
+ inc hl
+.loop
+ ld a, [de]
+ swap a
+ call PrintBCDDigit ; print upper digit
+ ld a, [de]
+ call PrintBCDDigit ; print lower digit
+ inc de
+ dec c
+ jr nz, .loop
+ bit PRINTNUM_LEADINGZEROS_F, b
+ jr z, .done ; if so, we are done
+.numberEqualsZero ; if every digit of the BCD number is zero
+ bit PRINTNUM_LEFTALIGN_F, b
+ jr nz, .skipLeftAlignmentAdjustment
+ dec hl ; if the string is left-aligned, it needs to be moved back one space
+.skipLeftAlignmentAdjustment
+ bit PRINTNUM_MONEY_F, b
+ jr z, .skipCurrencySymbol
+ ld [hl], "¥" ; currency symbol
+ inc hl
+.skipCurrencySymbol
+ ld [hl], "0"
+ call PrintLetterDelay
+ inc hl
+.done
+ ret
+
+PrintBCDDigit::
+ and %00001111
+ and a
+ jr z, .zeroDigit
+.nonzeroDigit
+ bit PRINTNUM_LEADINGZEROS_F, b ; have any non-space characters been printed?
+ jr z, .outputDigit
+; if bit 7 is set, then no numbers have been printed yet
+ bit PRINTNUM_MONEY_F, b
+ jr z, .skipCurrencySymbol
+ ld [hl], "¥"
+ inc hl
+ res PRINTNUM_MONEY_F, b
+.skipCurrencySymbol
+ res PRINTNUM_LEADINGZEROS_F, b ; unset 7 to indicate that a nonzero digit has been reached
+.outputDigit
+ add "0"
+ ld [hli], a
+ jp PrintLetterDelay
+
+.zeroDigit
+ bit PRINTNUM_LEADINGZEROS_F, b ; either printing leading zeroes or already reached a nonzero digit?
+ jr z, .outputDigit ; if so, print a zero digit
+ bit PRINTNUM_LEFTALIGN_F, b
+ ret nz
+ ld a, " "
+ ld [hli], a ; if right-aligned, "print" a space by advancing the pointer
+ ret \ No newline at end of file
diff --git a/home/print_num.asm b/home/print_num.asm
new file mode 100755
index 00000000..6fba0071
--- /dev/null
+++ b/home/print_num.asm
@@ -0,0 +1,304 @@
+PrintNum::
+; Print c digits of the b-byte value from de to hl.
+; Allows 2 to 7 digits. For 1-digit numbers, add
+; the value to char "0" instead of calling PrintNum.
+; The high nybble of the c register specifies how many of the total amount of
+; digits will be in front of the decimal point.
+; Some extra flags can be given in bits 5-7 of b.
+; Bit 5: money if set (unless left-aligned without leading zeros)
+; Bit 6: left-aligned if set
+; Bit 7: print leading zeros if set
+
+ push bc
+
+ bit 5, b
+ jr z, .main
+ bit 7, b
+ jr nz, .moneyflag
+ bit 6, b
+ jr z, .main
+
+.moneyflag ; 101xxxxx or 011xxxxx
+ ld a, "¥"
+ ld [hli], a
+ res 5, b ; 100xxxxx or 010xxxxx
+
+.main
+ xor a
+ ldh [$ffb5], a
+ ldh [$ffb6], a
+ ldh [$ffb7], a
+ ld a, b
+ and $f
+ cp 1
+ jr z, .byte
+ cp 2
+ jr z, .word
+
+; maximum 3 bytes
+.long
+ ld a, [de]
+ ldh [$ffb6], a
+ inc de
+ ld a, [de]
+ ldh [$ffb7], a
+ inc de
+ ld a, [de]
+ ldh [$ffb8], a
+ jr .start
+
+.word
+ ld a, [de]
+ ldh [$ffb7], a
+ inc de
+ ld a, [de]
+ ldh [$ffb8], a
+ jr .start
+
+.byte
+ ld a, [de]
+ ldh [$ffb8], a
+
+.start
+ push de
+
+ ld d, b
+ ld a, c
+ swap a
+ and $f
+ ld e, a
+ ld a, c
+ and $f
+ ld b, a
+ ld c, 0
+ cp 2
+ jr z, .two
+ cp 3
+ jr z, .three
+ cp 4
+ jr z, .four
+ cp 5
+ jr z, .five
+ cp 6
+ jr z, .six
+
+.seven
+ ld a, HIGH(1000000 >> 8)
+ ldh [$ffb9], a
+ ld a, HIGH(1000000) ; mid
+ ldh [$ffba], a
+ ld a, LOW(1000000)
+ ldh [$ffbb], a
+ call .PrintDigit
+ call .AdvancePointer
+
+.six
+ ld a, HIGH(100000 >> 8)
+ ldh [$ffb9], a
+ ld a, HIGH(100000) ; mid
+ ldh [$ffba], a
+ ld a, LOW(100000)
+ ldh [$ffbb], a
+ call .PrintDigit
+ call .AdvancePointer
+
+.five
+ xor a ; HIGH(10000 >> 8)
+ ldh [$ffb9], a
+ ld a, HIGH(10000) ; mid
+ ldh [$ffba], a
+ ld a, LOW(10000)
+ ldh [$ffbb], a
+ call .PrintDigit
+ call .AdvancePointer
+
+.four
+ xor a ; HIGH(1000 >> 8)
+ ldh [$ffb9], a
+ ld a, HIGH(1000) ; mid
+ ldh [$ffba], a
+ ld a, LOW(1000)
+ ldh [$ffbb], a
+ call .PrintDigit
+ call .AdvancePointer
+
+.three
+ xor a ; HIGH(100 >> 8)
+ ldh [$ffb9], a
+ xor a ; HIGH(100) ; mid
+ ldh [$ffba], a
+ ld a, LOW(100)
+ ldh [$ffbb], a
+ call .PrintDigit
+ call .AdvancePointer
+
+.two
+ dec e
+ jr nz, .two_skip
+ ld a, "0"
+ ldh [$ffb5], a
+
+.two_skip
+ ld c, 0
+ ldh a, [$ffb8]
+
+.mod_10
+ cp 10
+ jr c, .modded_10
+ sub 10
+ inc c
+ jr .mod_10
+
+.modded_10
+ ld b, a
+ ldh a, [$ffb5]
+ or c
+ jr nz, .money
+ call .PrintLeadingZero
+ jr .money_leading_zero
+
+.money
+ call .PrintYen
+ push af
+ ld a, "0"
+ add c
+ ld [hl], a
+ pop af
+ ldh [$ffb5], a
+ inc e
+ dec e
+ jr nz, .money_leading_zero
+ inc hl
+ ld [hl], $e8
+
+.money_leading_zero
+ call .AdvancePointer
+ call .PrintYen
+ ld a, "0"
+ add b
+ ld [hli], a
+
+ pop de
+ pop bc
+ ret
+
+.PrintYen:
+ push af
+ ldh a, [$ffb5]
+ and a
+ jr nz, .stop
+ bit 5, d
+ jr z, .stop
+ ld a, "¥"
+ ld [hli], a
+ res 5, d
+
+.stop
+ pop af
+ ret
+
+.PrintDigit:
+ dec e
+ jr nz, .ok
+ ld a, "0"
+ ldh [$ffb5], a
+.ok
+ ld c, 0
+.loop
+ ldh a, [$ffb9]
+ ld b, a
+ ldh a, [$ffb6]
+ ldh [$ffbc], a
+ cp b
+ jr c, .skip1
+ sub b
+ ldh [$ffb6], a
+ ldh a, [$ffba]
+ ld b, a
+ ldh a, [$ffb7]
+ ldh [$ffbd], a
+ cp b
+ jr nc, .skip2
+ ldh a, [$ffb6]
+ or 0
+ jr z, .skip3
+ dec a
+ ldh [$ffb6], a
+ ldh a, [$ffb7]
+.skip2
+ sub b
+ ldh [$ffb7], a
+ ldh a, [$ffbb]
+ ld b, a
+ ldh a, [$ffb8]
+ ldh [$ffbe], a
+ cp b
+ jr nc, .skip4
+ ldh a, [$ffb7]
+ and a
+ jr nz, .skip5
+ ldh a, [$ffb6]
+ and a
+ jr z, .skip6
+ dec a
+ ldh [$ffb6], a
+ xor a
+.skip5
+ dec a
+ ldh [$ffb7], a
+ ldh a, [$ffb8]
+.skip4
+ sub b
+ ldh [$ffb8], a
+ inc c
+ jr .loop
+.skip6
+ ldh a, [$ffbd]
+ ldh [$ffb7], a
+.skip3
+ ldh a, [$ffbc]
+ ldh [$ffb6], a
+.skip1
+ ldh a, [$ffb5]
+ or c
+ jr z, .PrintLeadingZero
+ ldh a, [$ffb5]
+ and a
+ jr nz, .done
+ bit 5, d
+ jr z, .done
+ ld a, "¥"
+ ld [hli], a
+ res 5, d
+.done
+ ld a, "0"
+ add c
+ ld [hl], a
+ ldh [$ffb5], a
+ inc e
+ dec e
+ ret nz
+ inc hl
+ ld [hl], $e8
+ ret
+
+.PrintLeadingZero:
+; prints a leading zero unless they are turned off in the flags
+ bit 7, d ; print leading zeroes?
+ ret z
+ ld [hl], "0"
+ ret
+
+.AdvancePointer:
+; increments the pointer unless leading zeroes are not being printed,
+; the number is left-aligned, and no nonzero digits have been printed yet
+ bit 7, d ; print leading zeroes?
+ jr nz, .inc
+ bit 6, d ; left alignment or right alignment?
+ jr z, .inc
+ ldh a, [$ffb5]
+ and a
+ ret z
+.inc
+ inc hl
+ ret \ No newline at end of file
diff --git a/home/print_text.asm b/home/print_text.asm
new file mode 100755
index 00000000..9d80d6b4
--- /dev/null
+++ b/home/print_text.asm
@@ -0,0 +1,166 @@
+PrintLetterDelay::
+; Wait before printing the next letter.
+
+; The text speed setting in wOptions is actually a frame count:
+; fast: 1 frame
+; mid: 3 frames
+; slow: 5 frames
+
+; wTextboxFlags[!0] and A or B override text speed with a one-frame delay.
+; wOptions[4] and wTextboxFlags[!1] disable the delay.
+
+ ld a, [wOptions]
+ bit NO_TEXT_SCROLL, a
+ ret nz
+
+; non-scrolling text?
+ ld a, [wTextboxFlags]
+ bit NO_TEXT_DELAY_F, a
+ ret z
+
+ push hl
+ push de
+ push bc
+
+ ld hl, hOAMUpdate
+ ld a, [hl]
+ push af
+
+; orginally turned oam update off...
+; ld a, 1
+ ld [hl], a
+
+; force fast scroll?
+ ld a, [wTextboxFlags]
+ bit FAST_TEXT_DELAY_F, a
+ jr z, .fast
+
+; text speed
+ ld a, [wOptions]
+ and %111
+ jr .updatedelay
+
+.fast
+ ld a, TEXT_DELAY_FAST
+
+.updatedelay
+ ld [wTextDelayFrames], a
+
+.checkjoypad
+ call GetJoypad
+
+; input override
+ ld a, [wDisableTextAcceleration]
+ and a
+ jr nz, .wait
+
+; Wait one frame if holding A or B.
+ ldh a, [hJoyDown]
+ bit A_BUTTON_F, a
+ jr z, .checkb
+ jr .delay
+.checkb
+ bit B_BUTTON_F, a
+ jr z, .wait
+
+.delay
+ call DelayFrame
+ jr .end
+
+.wait
+ ld a, [wTextDelayFrames]
+ and a
+ jr nz, .checkjoypad
+
+.end
+ pop af
+ ldh [hOAMUpdate], a
+ pop bc
+ pop de
+ pop hl
+ ret
+
+CopyDataUntil::
+; Copy [hl .. bc) to de.
+
+; In other words, the source data is
+; from hl up to but not including bc,
+; and the destination is de.
+
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, h
+ cp b
+ jr nz, CopyDataUntil
+ ld a, l
+ cp c
+ jr nz, CopyDataUntil
+ ret
+
+INCLUDE "home/print_num.asm"
+
+Function33ce::
+; Print c-digit hex number from de to hl
+.asm_33ce
+ push bc
+ call Function33d7
+ pop bc
+ dec c
+ jr nz, .asm_33ce
+ ret
+
+Function33d7:: ; 33d7 (0:33d7)
+ ld a, [de]
+ swap a
+ and $f
+ call Function33e9
+ ld [hli], a
+ ld a, [de]
+ and $f
+ call Function33e9
+ ld [hli], a
+ inc de
+ ret
+
+Function33e9:: ; 33e9 (0:33e9)
+ ld bc, .digits
+ add c
+ ld c, a
+ ld a, $0
+ adc b
+ ld b, a
+ ld a, [bc]
+ ret
+
+.digits db "0123456789ABCDEF"
+
+FarPrintText::
+ ld [wBuffer], a
+ ldh a, [hROMBank]
+ push af
+ ld a, [wBuffer]
+ rst Bankswitch
+
+ call PrintText
+
+ pop af
+ rst Bankswitch
+ ret
+
+CallPointerAt::
+ ldh a, [hROMBank]
+ push af
+ ld a, [hli]
+ rst Bankswitch
+
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ call _hl_
+
+ pop hl
+ ld a, h
+ rst Bankswitch
+ ret \ No newline at end of file
diff --git a/home/handshake.asm b/home/printer.asm
index c49bca22..9747713c 100644
--- a/home/handshake.asm
+++ b/home/printer.asm
@@ -1,8 +1,8 @@
-PrinterReceive:: ; 1eb3 (0:1eb3)
- homecall PrinterReceive_
+PrinterReceive::
+ homecall _PrinterReceive
ret
-AskSerial:: ; 1ebf (0:1ebf)
+AskSerial::
; send out a handshake while serial int is off
ld a, [wPrinterConnectionOpen]
bit 0, a
@@ -28,14 +28,14 @@ AskSerial:: ; 1ebf (0:1ebf)
; handshake
ld a, $88
- ld [rSB], a
+ ldh [rSB], a
; switch to internal clock
- ld a, %00000001
- ld [rSC], a
+ ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
; start transfer
- ld a, %10000001
- ld [rSC], a
+ ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
ret
diff --git a/home/queue_script.asm b/home/queue_script.asm
new file mode 100755
index 00000000..23f80d24
--- /dev/null
+++ b/home/queue_script.asm
@@ -0,0 +1,12 @@
+QueueScript::
+; Push pointer hl in the current bank to wQueuedScriptBank.
+ ldh a, [hROMBank]
+
+FarQueueScript::
+; Push pointer a:hl to wQueuedScriptBank.
+ ld [wQueuedScriptBank], a
+ ld a, l
+ ld [wQueuedScriptAddr], a
+ ld a, h
+ ld [wQueuedScriptAddr + 1], a
+ ret \ No newline at end of file
diff --git a/home/random.asm b/home/random.asm
index 3c2972af..9d62b9b6 100644
--- a/home/random.asm
+++ b/home/random.asm
@@ -1,24 +1,46 @@
-Random:: ; 30a2 (0:30a2)
+Random::
+; A simple hardware-based random number generator (RNG).
+
+; Two random numbers are generated by adding and subtracting
+; the divider to the respective values every time it's called.
+
+; The divider is a register that increments at a rate of 16384Hz.
+; For comparison, the Game Boy operates at a clock speed of 4.2MHz.
+
+; Additionally, an equivalent function is executed in VBlank.
+
+; This leaves a with the value in hRandomSub.
+
push bc
- ld a, [rDIV]
+
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandom]
+ ldh a, [hRandomAdd]
adc b
- ld [hRandom], a
- ld a, [rDIV]
+ ldh [hRandomAdd], a
+
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
sbc b
- ld [hRandomSub], a
+ ldh [hRandomSub], a
+
pop bc
ret
BattleRandom::
- ld a, [hROMBank]
+; _BattleRandom lives in another bank.
+
+; It handles all RNG calls in the battle engine, allowing
+; link battles to remain in sync using a shared PRNG.
+
+ ldh a, [hROMBank]
push af
- ld a, BANK(BattleRandom_)
+ ld a, BANK(_BattleRandom)
rst Bankswitch
- call BattleRandom_
+
+ call _BattleRandom
+
ld [wPredefTemp + 1], a
pop af
rst Bankswitch
@@ -26,24 +48,33 @@ BattleRandom::
ret
RandomRange::
+; Return a random number between 0 and a (non-inclusive).
+
push bc
ld c, a
+
+ ; b = $100 % c
xor a
sub c
-.asm_30cb
+.mod
sub c
- jr nc, .asm_30cb
+ jr nc, .mod
add c
ld b, a
+
+ ; Get a random number
+ ; from 0 to $ff - b.
push bc
-.asm_30d1
+.loop
call Random
- ld a, [hRandom]
+ ldh a, [hRandomAdd]
ld c, a
add b
- jr c, .asm_30d1
+ jr c, .loop
ld a, c
pop bc
+
call SimpleDivide
+
pop bc
ret
diff --git a/home/region.asm b/home/region.asm
new file mode 100755
index 00000000..df5b3c27
--- /dev/null
+++ b/home/region.asm
@@ -0,0 +1,94 @@
+IsInJohto::
+; Return 0 if the player is in Johto, and 1 in Kanto.
+
+ ld a, [wMapGroup]
+ ld b, a
+ ld a, [wMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+ cp FAST_SHIP
+ jr z, .Johto
+
+ cp SPECIAL_MAP
+ jr nz, .CheckRegion
+
+ ld a, [wBackupMapGroup]
+ ld b, a
+ ld a, [wBackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+.CheckRegion:
+ cp KANTO_LANDMARK
+ jr nc, .Kanto
+
+.Johto:
+ xor a
+ ret
+
+.Kanto:
+ ld a, 1
+ ret
+
+Function2ffe::
+ push hl
+ xor a
+ ld hl, wd17c
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld a, [wd17a]
+ ld l, a
+ ld a, [wd17b]
+ ld h, a
+ or l
+ jr z, .quit
+ ldh a, [hROMBank]
+ push af
+ call SwitchToMapScriptsBank
+ ld a, [wPlayerStandingMapX]
+ add $4
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ ld a, $4 ; add $4
+ ld e, a
+ push bc
+ ld c, $0
+.loop
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+ push hl
+ ld a, d
+ cp [hl]
+ jr nz, .next
+ inc hl
+ ld a, e
+ cp [hl]
+ jr nz, .next
+ ld hl, wd17c
+ ld b, SET_FLAG
+ push de
+ push bc
+ ld d, $0
+ predef SmallFarFlagAction
+ pop bc
+ pop de
+.next
+ pop hl
+ inc hl
+ inc hl
+ inc hl
+ inc c
+ ld a, c
+ cp $20
+ jr c, .loop
+.done
+ pop bc
+ pop af
+ rst Bankswitch
+.quit
+ pop hl
+ ret \ No newline at end of file
diff --git a/home/rst.asm b/home/rst.asm
deleted file mode 100644
index 1c9b5f6e..00000000
--- a/home/rst.asm
+++ /dev/null
@@ -1,37 +0,0 @@
-; rst vectors
-
-SECTION "rst0",ROM0
- di
- jp Start
-
-SECTION "rst8",ROM0
- jp FarCall_hl
-
-SECTION "rst10",ROM0
- ld [hROMBank], a
- ld [MBC3RomBank], a
- ret
-
-SECTION "rst18",ROM0
- rst $38
-
-SECTION "rst20",ROM0
- rst $38
-
-SECTION "rst28",ROM0
- push de
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- pop de
- jp hl
-
-; SECTION "rst30",ROM0
-; rst30 is midst rst28
-
-SECTION "rst38",ROM0
- rst $38
diff --git a/home/scrolling_menu.asm b/home/scrolling_menu.asm
new file mode 100755
index 00000000..6b8c1595
--- /dev/null
+++ b/home/scrolling_menu.asm
@@ -0,0 +1,61 @@
+ScrollingMenu::
+ call CopyMenuData
+ ldh a, [hROMBank]
+ push af
+
+ ld a, BANK(_ScrollingMenu) ; aka BANK(_InitScrollingMenu)
+ rst Bankswitch
+
+ call _InitScrollingMenu
+ call .UpdatePalettes
+ call _ScrollingMenu
+
+ pop af
+ rst Bankswitch
+
+ ld a, [wMenuJoypad]
+ ret
+
+.UpdatePalettes:
+ ld hl, wVramState
+ bit 0, [hl]
+ jp nz, UpdateTimePals
+ jp SetPalettes
+
+InitScrollingMenu::
+ ld a, [wMenuBorderTopCoord]
+ dec a
+ ld b, a
+ ld a, [wMenuBorderBottomCoord]
+ sub b
+ ld d, a
+ ld a, [wMenuBorderLeftCoord]
+ dec a
+ ld c, a
+ ld a, [wMenuBorderRightCoord]
+ sub c
+ ld e, a
+ push de
+ call Coord2Tile
+ pop bc
+ jp Textbox
+
+JoyTextDelay_ForcehJoyDown::
+ call DelayFrame
+
+ ldh a, [hInMenu]
+ push af
+ ld a, $1
+ ldh [hInMenu], a
+ call JoyTextDelay
+ pop af
+ ldh [hInMenu], a
+
+ ldh a, [hJoyLast]
+ and D_RIGHT + D_LEFT + D_UP + D_DOWN
+ ld c, a
+ ldh a, [hJoyPressed]
+ and A_BUTTON + B_BUTTON + SELECT + START
+ or c
+ ld c, a
+ ret \ No newline at end of file
diff --git a/home/serial.asm b/home/serial.asm
index c57d77ee..0fb1750b 100644
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -1,4 +1,6 @@
-Serial:: ; 6aa (0:06aa)
+Serial::
+; The serial interrupt.
+
push af
push bc
push de
@@ -8,64 +10,69 @@ Serial:: ; 6aa (0:06aa)
bit 0, a
jr nz, .printer
- ld a, [hLinkPlayerNumber]
- inc a
- jr z, .init_player_number
- ld a, [rSB]
- ld [hSerialReceive], a
- ld a, [hSerialSend]
- ld [rSB], a
- ld a, [hLinkPlayerNumber]
- cp $2
+ ldh a, [hLinkPlayerNumber]
+ inc a ; is it equal to CONNECTION_NOT_ESTABLISHED?
+ jr z, .establish_connection
+
+ ldh a, [rSB]
+ ldh [hSerialReceive], a
+
+ ldh a, [hSerialSend]
+ ldh [rSB], a
+
+ ldh a, [hLinkPlayerNumber]
+ cp USING_INTERNAL_CLOCK
jr z, .player2
- ld a, 0 << rSC_ON
- ld [rSC], a
- ld a, 1 << rSC_ON
- ld [rSC], a
+
+ ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
jr .player2
.printer
call PrinterReceive
jr .end
-.init_player_number
- ld a, [rSB]
- cp $1
+.establish_connection
+ ldh a, [rSB]
+ cp USING_EXTERNAL_CLOCK
jr z, .player1
- cp $2
+ cp USING_INTERNAL_CLOCK
jr nz, .player2
.player1
- ld [hSerialReceive], a
- ld [hLinkPlayerNumber], a
- cp $2
+ ldh [hSerialReceive], a
+ ldh [hLinkPlayerNumber], a
+ cp USING_INTERNAL_CLOCK
jr z, ._player2
xor a
- ld [rSB], a
- ld a, $3
- ld [rDIV], a
+ ldh [rSB], a
+ ld a, 3
+ ldh [rDIV], a
.wait_bit_7
- ld a, [rDIV]
+ ldh a, [rDIV]
bit 7, a
jr nz, .wait_bit_7
- ; cycle the serial controller
- ld a, 0 << rSC_ON
- ld [rSC], a
- ld a, 1 << rSC_ON
- ld [rSC], a
+ ; Cycle the serial controller
+ ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
jr .player2
._player2
xor a
- ld [rSB], a
+ ldh [rSB], a
+
.player2
- ld a, $1
- ld [hFFCC], a
+ ld a, TRUE
+ ldh [hFFCC], a
ld a, SERIAL_NO_DATA_BYTE
- ld [hSerialSend], a
+ ldh [hSerialSend], a
.end
pop hl
@@ -74,13 +81,13 @@ Serial:: ; 6aa (0:06aa)
pop af
reti
-Function710:: ; 710
- ld a, $1
- ld [hFFCE], a
+Serial_ExchangeBytes::
+ ld a, 1
+ ldh [hFFCE], a
.loop
ld a, [hl]
- ld [hSerialSend], a
- call Function73b
+ ldh [hSerialSend], a
+ call Serial_ExchangeByte
push bc
ld b, a
inc hl
@@ -88,7 +95,7 @@ Function710:: ; 710
.wait
dec a
jr nz, .wait
- ld a, [hFFCE]
+ ldh a, [hFFCE]
and a
ld a, b
pop bc
@@ -97,7 +104,7 @@ Function710:: ; 710
cp SERIAL_PREAMBLE_BYTE
jr nz, .loop
xor a
- ld [hFFCE], a
+ ldh [hFFCE], a
jr .loop
.load
@@ -109,27 +116,29 @@ Function710:: ; 710
jr nz, .loop
ret
-Function73b:: ; 73b (0:073b)
+Serial_ExchangeByte::
.loop
xor a
- ld [hFFCC], a
- ld a, [hLinkPlayerNumber]
- cp $2
- jr nz, .loop2
- ld a, (1 << rSC_CLOCK) | (0 << rSC_ON)
- ld [rSC], a
- ld a, (1 << rSC_CLOCK) | (1 << rSC_ON)
- ld [rSC], a
+ ldh [hFFCC], a
+ ldh a, [hLinkPlayerNumber]
+ cp 2
+ jr nz, .not_player_2
+ ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
+
+.not_player_2
.loop2
- ld a, [hFFCC]
+ ldh a, [hFFCC]
and a
jr nz, .reset_ffcc
- ld a, [hLinkPlayerNumber]
- cp $1
+ ldh a, [hLinkPlayerNumber]
+ cp 1
jr nz, .not_player_1_or_wLinkTimeoutFrames_zero
- call CheckLinkTimeout
+ call CheckwLinkTimeoutFramesNonzero
jr z, .not_player_1_or_wLinkTimeoutFrames_zero
- call Serial15CycleDelay
+ call .delay_15_cycles
push hl
ld hl, wLinkTimeoutFrames + 1
inc [hl]
@@ -139,14 +148,14 @@ Function73b:: ; 73b (0:073b)
.no_rollover_up
pop hl
- call CheckLinkTimeout
+ call CheckwLinkTimeoutFramesNonzero
jr nz, .loop2
jp SerialDisconnected
.not_player_1_or_wLinkTimeoutFrames_zero
- ld a, [rIE]
- and $f
- cp $8
+ ldh a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ cp 1 << SERIAL
jr nz, .loop2
ld a, [wce5d]
dec a
@@ -156,33 +165,34 @@ Function73b:: ; 73b (0:073b)
dec a
ld [wce5d + 1], a
jr nz, .loop2
- ld a, [hLinkPlayerNumber]
- cp $1
+ ldh a, [hLinkPlayerNumber]
+ cp 1
jr z, .reset_ffcc
-
- ld a, $ff
+
+ ld a, 255
.delay_255_cycles
dec a
jr nz, .delay_255_cycles
.reset_ffcc
xor a
- ld [hFFCC], a
- ld a, [rIE]
- and $f
- sub $8
+ ldh [hFFCC], a
+ ldh a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ sub 1 << SERIAL
jr nz, .rIE_not_equal_8
+ ; LOW($5000)
ld [wce5d], a
- ld a, 80
+ ld a, HIGH($5000)
ld [wce5d + 1], a
.rIE_not_equal_8
- ld a, [hSerialReceive]
+ ldh a, [hSerialReceive]
cp SERIAL_NO_DATA_BYTE
ret nz
- call CheckLinkTimeout
- jr z, .link_timed_out
+ call CheckwLinkTimeoutFramesNonzero
+ jr z, .linkTimeoutFrames_zero
push hl
ld hl, wLinkTimeoutFrames + 1
ld a, [hl]
@@ -194,28 +204,28 @@ Function73b:: ; 73b (0:073b)
.no_rollover
pop hl
- call CheckLinkTimeout
+ call CheckwLinkTimeoutFramesNonzero
jr z, SerialDisconnected
-.link_timed_out
- ld a, [rIE]
- and $f
- cp $8
+.linkTimeoutFrames_zero
+ ldh a, [rIE]
+ and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+ cp 1 << SERIAL
ld a, SERIAL_NO_DATA_BYTE
ret z
ld a, [hl]
- ld [hSerialSend], a
+ ldh [hSerialSend], a
call DelayFrame
jp .loop
-Serial15CycleDelay:: ; 7d6 (0:07d6)
- ld a, $f
-.loop
+.delay_15_cycles
+ ld a, 15
+.delay_cycles
dec a
- jr nz, .loop
+ jr nz, .delay_cycles
ret
-CheckLinkTimeout:: ; 7dc (0:07dc)
+CheckwLinkTimeoutFramesNonzero::
push hl
ld hl, wLinkTimeoutFrames
ld a, [hli]
@@ -223,29 +233,31 @@ CheckLinkTimeout:: ; 7dc (0:07dc)
pop hl
ret
-SerialDisconnected:: ; 7e4 (0:07e4)
- dec a
+SerialDisconnected::
+ dec a ; a is always 0 when this is called
ld [wLinkTimeoutFrames], a
ld [wLinkTimeoutFrames + 1], a
ret
-Function7ec:: ; 7ec
+; This is used to exchange the button press and selected menu item on the link menu.
+; The data is sent thrice and read twice to increase reliability.
+Serial_ExchangeLinkMenuSelection::
ld hl, wPlayerLinkAction
ld de, wOtherPlayerLinkMode
- ld c, $2
- ld a, $1
- ld [hFFCE], a
+ ld c, 2
+ ld a, TRUE
+ ldh [hFFCE], a
.asm_7f8
call DelayFrame
ld a, [hl]
- ld [hSerialSend], a
- call Function73b
+ ldh [hSerialSend], a
+ call Serial_ExchangeByte
ld b, a
inc hl
- ld a, [hFFCE]
+ ldh a, [hFFCE]
and a
- ld a, $0
- ld [hFFCE], a
+ ld a, 0
+ ldh [hFFCE], a
jr nz, .asm_7f8
ld a, b
ld [de], a
@@ -254,26 +266,26 @@ Function7ec:: ; 7ec
jr nz, .asm_7f8
ret
-Function813:: ; 813
- call BackUpTilesToBuffer
+Serial_PrintWaitingTextAndSyncAndExchangeNybble::
+ call LoadTilemapToTempTilemap
callfar PlaceWaitingText
call WaitLinkTransfer
- jp ReloadTilesFromBuffer
+ jp SafeLoadTempTilemapToTilemap
-Function822:: ; 822
- call BackUpTilesToBuffer
+Serial_SyncAndExchangeNybble::
+ call LoadTilemapToTempTilemap
callfar PlaceWaitingText
jp WaitLinkTransfer
; One "giant" leap for machinekind
-WaitLinkTransfer:: ; 82e (0:082e)
+WaitLinkTransfer::
ld a, $ff
ld [wOtherPlayerLinkAction], a
.loop
call LinkTransfer
call DelayFrame
- call CheckLinkTimeout
+ call CheckwLinkTimeoutFramesNonzero
jr z, .check
push hl
ld hl, wLinkTimeoutFrames + 1
@@ -282,6 +294,7 @@ WaitLinkTransfer:: ; 82e (0:082e)
dec hl
dec [hl]
jr nz, .skip
+ ; We might be disconnected
pop hl
xor a
jp SerialDisconnected
@@ -312,7 +325,7 @@ WaitLinkTransfer:: ; 82e (0:082e)
ld [wOtherPlayerLinkMode], a
ret
-LinkTransfer:: ; 872 (0:0872)
+LinkTransfer::
push bc
ld b, SERIAL_TIMECAPSULE
ld a, [wLinkMode]
@@ -326,57 +339,59 @@ LinkTransfer:: ; 872 (0:0872)
ld b, SERIAL_BATTLE
.got_high_nybble
- call LinkTransferReceive
+ call .Receive
ld a, [wPlayerLinkAction]
add b
- ld [hSerialSend], a
- ld a, [hLinkPlayerNumber]
- cp $2
- jr nz, .asm_89f
- ld a, $1
- ld [rSC], a
- ld a, $81
- ld [rSC], a
-.asm_89f
- call LinkTransferReceive
+ ldh [hSerialSend], a
+ ldh a, [hLinkPlayerNumber]
+ cp USING_INTERNAL_CLOCK
+ jr nz, .player_1
+ ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
+
+.player_1
+ call .Receive
pop bc
ret
-LinkTransferReceive:: ; 8a4 (0:08a4)
- ld a, [hSerialReceive]
+.Receive:
+ ldh a, [hSerialReceive]
ld [wOtherPlayerLinkMode], a
and $f0
cp b
ret nz
xor a
- ld [hSerialReceive], a
+ ldh [hSerialReceive], a
ld a, [wOtherPlayerLinkMode]
and $f
ld [wOtherPlayerLinkAction], a
ret
-LinkDataReceived:: ; 8b9 (0:08b9)
+LinkDataReceived::
+; Let the other system know that the data has been received.
xor a
- ld [hSerialSend], a
- ld a, [hLinkPlayerNumber]
- cp $2
+ ldh [hSerialSend], a
+ ldh a, [hLinkPlayerNumber]
+ cp USING_INTERNAL_CLOCK
ret nz
- ld a, $1
- ld [rSC], a
- ld a, $81
- ld [rSC], a
+ ld a, (0 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (1 << rSC_CLOCK)
+ ldh [rSC], a
ret
-Function8ca:: ; 8ca
+Unreferenced_Function8ca::
ld a, [wLinkMode]
and a
ret nz
- ld a, $2
- ld [rSB], a
+ ld a, USING_INTERNAL_CLOCK
+ ldh [rSB], a
xor a
- ld [hSerialReceive], a
- ld a, $0
- ld [rSC], a
- ld a, $80
- ld [rSC], a
+ ldh [hSerialReceive], a
+ ld a, (0 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
+ ld a, (1 << rSC_ON) | (0 << rSC_CLOCK)
+ ldh [rSC], a
ret
diff --git a/home/sine.asm b/home/sine.asm
index 5965d497..821f7c47 100644
--- a/home/sine.asm
+++ b/home/sine.asm
@@ -1,6 +1,9 @@
-Cosine:: ; 19ac (0:19ac)
- add $10
+Cosine::
+; a = d * cos(a * pi/32)
+ add %010000 ; cos(x) = sin(x + pi/2)
+ ; fallthrough
Sine::
+; a = d * sin(a * pi/32)
ld e, a
- homecall Sine_e
+ homecall _Sine
ret
diff --git a/home/sprite_anims.asm b/home/sprite_anims.asm
new file mode 100755
index 00000000..7b5b22d5
--- /dev/null
+++ b/home/sprite_anims.asm
@@ -0,0 +1,31 @@
+InitSpriteAnimStruct::
+ ld [wAnimatedObjectStructIDBuffer], a
+ ldh a, [hROMBank]
+ push af
+
+ ld a, BANK(_InitSpriteAnimStruct)
+ rst Bankswitch
+ ld a, [wAnimatedObjectStructIDBuffer]
+
+ call _InitSpriteAnimStruct
+
+ pop af
+ rst Bankswitch
+
+ ret
+
+ReinitSpriteAnimFrame::
+ ld [wAnimatedObjectStructIDBuffer], a
+ ldh a, [hROMBank]
+ push af
+
+ ld a, BANK(_ReinitSpriteAnimFrame)
+ rst Bankswitch
+ ld a, [wAnimatedObjectStructIDBuffer]
+
+ call _ReinitSpriteAnimFrame
+
+ pop af
+ rst Bankswitch
+
+ ret
diff --git a/home/sprite_updates.asm b/home/sprite_updates.asm
new file mode 100755
index 00000000..8b8aee32
--- /dev/null
+++ b/home/sprite_updates.asm
@@ -0,0 +1,19 @@
+DisableSpriteUpdates::
+ xor a
+ ldh [hMapAnims], a
+ ld a, [wVramState]
+ res 0, a
+ ld [wVramState], a
+ ld a, $0
+ ld [wSpriteUpdatesEnabled], a
+ ret
+
+EnableSpriteUpdates::
+ ld a, $1
+ ld [wSpriteUpdatesEnabled], a
+ ld a, [wVramState]
+ set 0, a
+ ld [wVramState], a
+ ld a, $1
+ ldh [hMapAnims], a
+ ret \ No newline at end of file
diff --git a/home/sram.asm b/home/sram.asm
index 6a0ed153..4d84c350 100644
--- a/home/sram.asm
+++ b/home/sram.asm
@@ -1,16 +1,23 @@
-OpenSRAM:: ; 30e1 (0:30e1)
+OpenSRAM::
+; switch to sram bank a
push af
- ld a, $1
+; latch clock data
+ ld a, 1
ld [MBC3LatchClock], a
- ld a, $a
+; enable sram/clock write
+ ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
+; select sram bank
pop af
ld [MBC3SRamBank], a
ret
-CloseSRAM:: ; 30f1 (0:30f1)
+
+CloseSRAM::
push af
- ld a, $0
+ ld a, SRAM_DISABLE
+; reset clock latch for next time
ld [MBC3LatchClock], a
+; disable sram/clock write
ld [MBC3SRamEnable], a
pop af
ret
diff --git a/home/stone_queue.asm b/home/stone_queue.asm
new file mode 100755
index 00000000..ff59509d
--- /dev/null
+++ b/home/stone_queue.asm
@@ -0,0 +1,137 @@
+HandleStoneQueue::
+ ldh a, [hROMBank]
+ push af
+
+ call SwitchToMapScriptsBank
+ call .WarpAction
+
+ pop bc
+ ld a, b
+ rst Bankswitch
+ ret
+
+.WarpAction:
+ ld hl, OBJECT_MAP_OBJECT_INDEX
+ add hl, de
+ ld a, [hl]
+ cp $ff
+ jr z, .nope
+
+ ld l, a
+ push hl
+ call .IsObjectOnWarp
+ pop hl
+ jr nc, .nope
+ ld d, a
+ ld e, l
+ call .IsObjectInStoneTable
+ jr nc, .nope
+ call CallMapScript
+ farcall EnableScriptMode
+ scf
+ ret
+
+.nope
+ and a
+ ret
+
+.IsObjectOnWarp:
+ push de
+
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, de
+ ld e, [hl]
+
+ sub 4
+ ld d, a
+ ld a, e
+ sub 4
+ ld e, a
+ call .check_on_warp
+
+ pop de
+ ret
+
+.check_on_warp
+ ld hl, wCurMapWarpsPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wCurMapWarpCount]
+ and a
+ jr z, .nope2
+
+.loop
+ push af
+ ld a, [hl]
+ cp e
+ jr nz, .not_on_warp
+ inc hl
+ ld a, [hld]
+ cp d
+ jr nz, .not_on_warp
+ jr .found_warp
+
+.not_on_warp
+ ld a, WARP_EVENT_SIZE
+ add l
+ ld l, a
+ jr nc, .no_carry
+ inc h
+.no_carry
+
+ pop af
+ dec a
+ jr nz, .loop
+
+.nope2
+ and a
+ ret
+
+.found_warp
+ pop af
+ ld d, a
+ ld a, [wCurMapWarpCount]
+ sub d
+ inc a
+ scf
+ ret
+
+.IsObjectInStoneTable:
+ ld hl, CMDQUEUE_ADDR
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.loop2
+ ld a, [hli]
+ cp $ff
+ jr z, .nope3
+ cp d
+ jr nz, .next_inc3
+ ld a, [hli]
+ cp e
+ jr nz, .next_inc2
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jr .yes
+
+.next_inc3
+ inc hl
+
+.next_inc2
+ inc hl
+ inc hl
+ jr .loop2
+
+.nope3
+ and a
+ ret
+
+.yes
+ scf
+ ret \ No newline at end of file
diff --git a/home/string.asm b/home/string.asm
index 6f804a96..86de2e27 100644
--- a/home/string.asm
+++ b/home/string.asm
@@ -1,31 +1,35 @@
InitString::
+; Init a string of length c.
push hl
- jr InitString_
+ jr _InitString
InitName::
+; Intended for names, so this function is limited to ten characters.
push hl
- ld c, $a
-InitString_::
+ ld c, NAME_LENGTH - 1
+_InitString::
+; if the string pointed to by hl is empty (defined as "zero or more spaces
+; followed by a null"), then initialize it to the string pointed to by de.
push bc
-.asm_2fbd
+.loop
ld a, [hli]
- cp $50
- jr z, .asm_2fc9
- cp $7f
- jr nz, .asm_2fd4
+ cp "@"
+ jr z, .blank
+ cp " "
+ jr nz, .notblank
dec c
- jr nz, .asm_2fbd
-.asm_2fc9
+ jr nz, .loop
+.blank
pop bc
ld l, e
ld h, d
pop de
- ld b, $0
+ ld b, 0
inc c
call CopyBytes
ret
-.asm_2fd4
+.notblank
pop bc
pop hl
ret
diff --git a/home/text.asm b/home/text.asm
index a1bc5b08..1480dd92 100644
--- a/home/text.asm
+++ b/home/text.asm
@@ -1,7 +1,8 @@
-TEXTBOX_PAL EQU 7
-
-ClearBox:: ; ebd (0:0ebd)
+ClearBox::
+; Fill a c*b box at hl with blank tiles.
ld a, " "
+ ; fallthrough
+
FillBoxWithByte::
ld de, SCREEN_WIDTH
.row
@@ -18,24 +19,31 @@ FillBoxWithByte::
jr nz, .row
ret
-ClearTileMap::
- ld hl, wTileMap
+ClearTilemap::
+; Fill wTilemap with blank tiles.
+
+ hlcoord 0, 0
ld a, " "
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld bc, wTilemapEnd - wTilemap
call ByteFill
- ld a, [rLCDC]
- bit 7, a
+
+ ; Update the BG Map.
+ ldh a, [rLCDC]
+ bit rLCDC_ENABLE, a
ret z
jp WaitBGMap
-FillScreenWithTextboxPal::
- ld a, TEXTBOX_PAL
- hlcoord 0, 0, wAttrMap
+ClearScreen::
+ ld a, PAL_BG_TEXT
+ hlcoord 0, 0, wAttrmap
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
call ByteFill
- jr ClearTileMap
+ jr ClearTilemap
-Textbox:: ; eef (0:0eef)
+Textbox::
+; Draw a text box at hl with room for b lines of c characters each.
+; Places a border around the textbox, then switches the palette to the
+; text black-and-white scheme.
push bc
push hl
call TextboxBorder
@@ -43,13 +51,14 @@ Textbox:: ; eef (0:0eef)
pop bc
jr TextboxPalette
-TextboxBorder:: ; ef8 (0:0ef8)
+TextboxBorder::
+ ; Top
push hl
ld a, "┌"
ld [hli], a
- inc a
- call TextboxBorder_PlaceTiles
- inc a
+ inc a ; "─"
+ call .PlaceChars
+ inc a ; "┐"
ld [hl], a
pop hl
@@ -61,7 +70,7 @@ TextboxBorder:: ; ef8 (0:0ef8)
ld a, "│"
ld [hli], a
ld a, " "
- call TextboxBorder_PlaceTiles
+ call .PlaceChars
ld [hl], "│"
pop hl
@@ -74,11 +83,13 @@ TextboxBorder:: ; ef8 (0:0ef8)
ld a, "└"
ld [hli], a
ld a, "─"
- call TextboxBorder_PlaceTiles
+ call .PlaceChars
ld [hl], "┘"
+
ret
-TextboxBorder_PlaceTiles:: ; f25 (0:0f25)
+.PlaceChars:
+; Place char a c times.
ld d, c
.loop
ld [hli], a
@@ -86,14 +97,15 @@ TextboxBorder_PlaceTiles:: ; f25 (0:0f25)
jr nz, .loop
ret
-TextboxPalette
- ld de, wAttrMap - wTileMap
+TextboxPalette::
+; Fill text box width c height b at hl with pal 7
+ ld de, wAttrmap - wTilemap
add hl, de
inc b
inc b
inc c
inc c
- ld a, TEXTBOX_PAL
+ ld a, PAL_BG_TEXT
.col
push bc
push hl
@@ -109,7 +121,8 @@ TextboxPalette
jr nz, .col
ret
-SpeechTextbox:: ; f45 (0:0f45)
+SpeechTextbox::
+; Standard textbox.
hlcoord TEXTBOX_X, TEXTBOX_Y
ld b, TEXTBOX_INNERH
ld c, TEXTBOX_INNERW
@@ -119,20 +132,22 @@ TestText::
text "ゲームフりーク!"
done
-RadioTerminator:: ; 1052
+RadioTerminator::
ld hl, .stop
ret
-.stop db "@"
+.stop:
+ text_end
PrintText::
call SetUpTextbox
+
PrintTextboxText::
bccoord TEXTBOX_INNERX, TEXTBOX_INNERY
call PlaceHLTextAtBC
ret
-SetUpTextbox:: ; f68 (0:0f68)
+SetUpTextbox::
push hl
call SpeechTextbox
call UpdateSprites
@@ -140,10 +155,10 @@ SetUpTextbox:: ; f68 (0:0f68)
pop hl
ret
-PlaceString:: ; f74 (0:0f74)
+PlaceString::
push hl
-PlaceNextChar:: ; f75 (0:0f75)
+PlaceNextChar::
ld a, [de]
cp "@"
jr nz, CheckDict
@@ -151,32 +166,36 @@ PlaceNextChar:: ; f75 (0:0f75)
ld c, l
pop hl
ret
-
pop de
-NextChar:: ; f7f (0:0f7f)
+
+NextChar::
inc de
jp PlaceNextChar
-CheckDict
-dict: macro
-if \1 == 0
+CheckDict::
+dict: MACRO
+if \1 == "<NULL>"
and a
else
cp \1
endc
- jp z, \2
-endm
-dict2: macro
- cp \1
+if STRSUB("\2", 1, 1) == "\""
+; Replace a character with another one
jr nz, ._\@
ld a, \2
._\@:
-endm
+elif STRSUB("\2", 1, 1) == "."
+; Locals can use a short jump
+ jr z, \2
+else
+ jp z, \2
+endc
+ENDM
dict "<LINE>", LineChar
dict "<NEXT>", NextLineChar
- dict $00, NullChar
+ dict "<NULL>", NullChar
dict $4c, Char4C
dict $4b, Char4B
dict "<PARA>", Paragraph
@@ -201,60 +220,62 @@ endm
dict "<PROMPT>", PromptText
dict "<PKMN>", PlacePKMN
dict "<POKE>", PlacePOKE
- dict $25, NextChar
- dict2 $1f, " "
+ dict "%", NextChar
+ dict "¯", " "
dict "<DEXEND>", PlaceDexEnd
dict "<TARGET>", PlaceMoveTargetsName
dict "<USER>", PlaceMoveUsersName
dict "<ENEMY>", PlaceEnemysName
-
cp $e4
jr z, .diacritic
cp $e5
jr nz, .not_diacritic
+
.diacritic
ld b, a
call Diacritic
jp NextChar
.not_diacritic
- cp $60
+ cp FIRST_REGULAR_TEXT_CHAR
jr nc, .place
- cp $40
+
+ cp "パ"
jr nc, .handakuten
- cp $20
- jr nc, .daku1
- add $80
- jr .daku2
-
-.daku1
- add $90
-.daku2
- ld b, $e5
+
+.dakuten
+ cp FIRST_HIRAGANA_DAKUTEN_CHAR
+ jr nc, .hiragana_dakuten
+ add "カ" - "ガ"
+ jr .katakana_dakuten
+.hiragana_dakuten
+ add "か" - "が"
+.katakana_dakuten
+ ld b, "゙" ; dakuten
call Diacritic
jr .place
.handakuten
- cp $44
- jr nc, .han1
- add $59
- jr .han2
-
-.han1
- add $86
-.han2
- ld b, $e4
+ cp "ぱ"
+ jr nc, .hiragana_handakuten
+ add "ハ" - "パ"
+ jr .katakana_handakuten
+.hiragana_handakuten
+ add "は" - "ぱ"
+.katakana_handakuten
+ ld b, "゚" ; handakuten
call Diacritic
+
.place
ld [hli], a
- call Function31e2
+ call PrintLetterDelay
jp NextChar
-print_name: macro
+print_name: MACRO
push de
ld de, \1
jp PlaceCommandCharacter
-endm
+ENDM
PrintMomsName:: print_name wMomsName ; 1066 (0:1066)
PrintPlayerName:: print_name wPlayerName ; 106d (0:106d)
@@ -276,12 +297,12 @@ Char36:: print_name Char36Text ; 10cf (0:10cf)
Char37:: print_name Char37Text ; 10d6 (0:10d6)
PlaceMoveTargetsName:: ; 10dd (0:10dd)
- ld a, [hBattleTurn]
+ ldh a, [hBattleTurn]
xor $1
jr PlaceMonsName
PlaceMoveUsersName:: ; 10e3 (0:10e3)
- ld a, [hBattleTurn]
+ ldh a, [hBattleTurn]
PlaceMonsName::
push de
and a
@@ -402,7 +423,7 @@ Paragraph:: ; 1187 (0:1187)
call LoadBlinkingCursor
.asm_1192
call Text_WaitBGMap
- call ButtonSound
+ call PromptButton
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW
call ClearBox
@@ -421,7 +442,7 @@ Char4B:: ; 11b0 (0:11b0)
.link_battle
call Text_WaitBGMap
push de
- call ButtonSound
+ call PromptButton
pop de
ld a, [wLinkMode]
or a
@@ -460,7 +481,7 @@ PromptText:: ; 11eb (0:11eb)
.ok
call Text_WaitBGMap
- call ButtonSound
+ call PromptButton
ld a, [wLinkMode]
cp $3
jr z, DoneText
@@ -502,13 +523,13 @@ TextScroll:: ; 121d (0:121d)
Text_WaitBGMap:: ; 123a (0:123a)
push bc
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call WaitBGMap
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
pop bc
ret
@@ -535,7 +556,7 @@ UnloadBlinkingCursor:: ; 125b (0:125b)
FarString::
ld b, a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, b
rst Bankswitch
@@ -634,14 +655,14 @@ Text_TX_RAM:: ; 12d6 (0:12d6)
ret
Text_TX_FAR:: ; 12e2 (0:12e2)
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
- ld [hROMBank], a
+ ldh [hROMBank], a
ld [MBC3RomBank], a
push hl
ld h, d
@@ -649,7 +670,7 @@ Text_TX_FAR:: ; 12e2 (0:12e2)
call DoTextUntilTerminator
pop hl
pop af
- ld [hROMBank], a
+ ldh [hROMBank], a
ld [MBC3RomBank], a
ret
@@ -706,7 +727,7 @@ Text_WAIT_BUTTON:: ; 132c (0:132c)
push hl
call LoadBlinkingCursor
push bc
- call ButtonSound
+ call PromptButton
pop bc
call UnloadBlinkingCursor
pop hl
@@ -751,7 +772,7 @@ Text_TX_EXIT:: ; 136d (0:136d)
push hl
push bc
call GetJoypad
- ld a, [hJoyDown]
+ ldh a, [hJoyDown]
and A_BUTTON | B_BUTTON
jr nz, .skip
ld c, 30
@@ -823,7 +844,7 @@ Text_TX_DOTS:: ; 13c3 (0:13c3)
ld a, "…"
ld [hli], a
call GetJoypad
- ld a, [hJoyDown]
+ ldh a, [hJoyDown]
and A_BUTTON | B_BUTTON
jr nz, .next
ld c, 10
@@ -840,7 +861,7 @@ Text_TX_DOTS:: ; 13c3 (0:13c3)
Text_TX_0D:: ; 13e2 (0:13e2)
push hl
push bc
- call ButtonSound
+ call PromptButton
pop bc
pop hl
ret
diff --git a/home/tilemap.asm b/home/tilemap.asm
index 4cccbb61..ba251ec0 100755
--- a/home/tilemap.asm
+++ b/home/tilemap.asm
@@ -1,260 +1,219 @@
-SetMenuAttributes:: ; 1a4e
- push hl
- push bc
- ld hl, w2DMenuCursorInitY
- ld b, $8
-.asm_1a55
- ld a, [de]
- inc de
- ld [hli], a
- dec b
- jr nz, .asm_1a55
- ld a, $1
- ld [hli], a
- ld [hli], a
+ClearBGPalettes::
+ call ClearPalettes
+WaitBGMap::
+; Tell VBlank to update BG Map
+ ld a, 1 ; BG Map 0 tiles
+ ldh [hBGMapMode], a
+; Wait for it to do its magic
+ ld c, 4
+ call DelayFrames
+ ret
+
+WaitBGMap2::
+ ldh a, [hCGB]
+ and a
+ jr z, .bg0
+
+ ld a, 2
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+
+.bg0
+ ld a, 1
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+ ret
+
+IsCGB::
+ ldh a, [hCGB]
+ and a
+ ret
+
+ApplyTilemap::
+ ldh a, [hCGB]
+ and a
+ jr z, .dmg
+
+ ld a, [wSpriteUpdatesEnabled]
+ cp 0
+ jr z, .dmg
+
+ ld a, 1
+ ldh [hBGMapMode], a
+ jr CopyTilemapAtOnce
+
+.dmg
+; WaitBGMap
+ ld a, 1
+ ldh [hBGMapMode], a
+ ld c, 4
+ call DelayFrames
+ ret
+
+CGBOnly_CopyTilemapAtOnce::
+ ldh a, [hCGB]
+ and a
+ jr z, WaitBGMap
+
+CopyTilemapAtOnce::
+ ldh a, [hBGMapMode]
+ push af
xor a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- pop bc
- pop hl
- ret
-
-StaticMenuJoypad:: ; 1a66 (0:1a66)
- callfar StaticMenuJoypad_
- call GetMenuJoypad
- ret
-
-ScrollingMenuJoypad:: ; 1a70 (0:1a70)
- callfar ScrollingMenuJoypad_
- call GetMenuJoypad
- ret
+ ldh [hBGMapMode], a
-GetMenuJoypad:: ; 1a7a (0:1a7a)
- push bc
+ ldh a, [hMapAnims]
push af
- ld a, [hJoyLast]
- and D_PAD
- ld b, a
- ld a, [hJoyPressed]
- and BUTTONS
- or b
- ld b, a
- pop af
- ld a, b
- pop bc
- ret
-
-PlaceHollowCursor::
- ld hl, wCursorCurrentTile
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld [hl], "▷"
- ret
-
-HideCursor::
- ld hl, wCursorCurrentTile
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld [hl], " "
- ret
-
-PushWindow:: ; 1a9d (0:1a9d)
- callfar PushWindow_
- ret
+ xor a
+ ldh [hMapAnims], a
+
+.wait
+ ldh a, [rLY]
+ cp $7f
+ jr c, .wait
+
+ di
+ ld a, BANK(vTiles3)
+ ldh [rVBK], a
+ hlcoord 0, 0, wAttrmap
+ call .StackPointerMagic
+ ld a, BANK(vTiles0)
+ ldh [rVBK], a
+ hlcoord 0, 0
+ call .StackPointerMagic
+
+.wait2
+ ldh a, [rLY]
+ cp $7f
+ jr c, .wait2
+ ei
-ExitMenu:: ; 1aa4 (0:1aa4)
- push af
- callfar ExitMenu_
pop af
- ret
-
-InitVerticalMenuCursor:: ; 1aad (0:1aad)
- callfar InitVerticalMenuCursor_
- ret
-
-CloseWindow:: ; 1ab4 (0:1ab4)
- push af
- call ExitMenu
- call ApplyTilemap
- call UpdateSprites
+ ldh [hMapAnims], a
pop af
+ ldh [hBGMapMode], a
ret
-RestoreTileBackup::
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- inc b
- inc c
-.asm_1ac8
- push bc
- push hl
-.asm_1aca
- ld a, [de]
- ld [hli], a
- dec de
- dec c
- jr nz, .asm_1aca
- pop hl
- ld bc, $14
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_1ac8
- ret
-
-PopWindow::
- ld b, wMenuDataHeaderEnd - wMenuDataHeader
- ld de, wMenuDataHeader
-.asm_1adf
- ld a, [hld]
- ld [de], a
- inc de
- dec b
- jr nz, .asm_1adf
+.StackPointerMagic:
+; Copy all tiles to vBGMap
+ ld [hSPBuffer], sp
+ ld sp, hl
+ ldh a, [hBGMapAddress + 1]
+ ld h, a
+ ld l, 0
+ ld a, SCREEN_HEIGHT
+ ldh [hTilesPerCycle], a
+ ld b, 1 << 1 ; not in v/hblank
+ ld c, LOW(rSTAT)
+
+.loop
+rept SCREEN_WIDTH / 2
+ pop de
+; if in v/hblank, wait until not in v/hblank
+.loop\@
+ ldh a, [c]
+ and b
+ jr nz, .loop\@
+; load BGMap0
+ ld [hl], e
+ inc l
+ ld [hl], d
+ inc l
+endr
+
+ ld de, BG_MAP_WIDTH - SCREEN_WIDTH
+ add hl, de
+ ldh a, [hTilesPerCycle]
+ dec a
+ ldh [hTilesPerCycle], a
+ jr nz, .loop
+
+ ldh a, [hSPBuffer]
+ ld l, a
+ ldh a, [hSPBuffer + 1]
+ ld h, a
+ ld sp, hl
ret
-GetMenuBoxDims:: ; 1ae6 (0:1ae6)
- ld a, [wMenuBorderTopCoord]
- ld b, a
- ld a, [wMenuBorderBottomCoord]
- sub b
- ld b, a
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderRightCoord]
- sub c
- ld c, a
+SetPalettes::
+; Inits the Palettes
+; depending on the system the monochromes palettes or color palettes
+ ldh a, [hCGB]
+ and a
+ jr nz, .SetPalettesForGameBoyColor
+ ld a, %11100100
+ ldh [rBGP], a
+ ld a, %11010000
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ret
-CopyMenuData2:: ; 1af9 (0:1af9)
- push hl
+.SetPalettesForGameBoyColor:
push de
- push bc
- push af
- ld hl, wMenuData2Pointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wMenuData2
- ld bc, wMenuData2End - wMenuData2
- call CopyBytes
- pop af
- pop bc
+ ld a, %11100100
+ call DmgToCgbBGPals
+ lb de, %11100100, %11100100
+ call DmgToCgbObjPals
pop de
- pop hl
ret
-GetWindowStackTop::
- ld hl, wWindowStackPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- inc hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ret
+ClearPalettes::
+; Make all palettes white
-PlaceVerticalMenuItems:: ; 1b1c (0:1b1c)
- call CopyMenuData2
- ld hl, wMenuData2Pointer
- ld e, [hl]
- inc hl
- ld d, [hl]
- call GetMenuTextStartCoord
- call Coord2Tile
- inc de
- ld a, [de]
- inc de
- ld b, a
-.asm_1b2f
- push bc
- call PlaceString
- inc de
- ld bc, 2 * SCREEN_WIDTH
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_1b2f
- ld a, [wMenuData2Flags]
- bit 4, a
- ret z
- call MenuBoxCoord2Tile
- ld a, [de]
- ld c, a
- inc de
- ld b, $0
- add hl, bc
- jp PlaceString
-
-MenuBox:: ; 1b4e (0:1b4e)
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- dec b
- dec c
- jp Textbox
+; CGB: make all the palette colors white
+ ldh a, [hCGB]
+ and a
+ jr nz, .cgb
-GetMenuTextStartCoord:: ; 1b59 (0:1b59)
- ld a, [wMenuBorderTopCoord]
- ld b, a
- inc b
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- inc c
- ld a, [wMenuData2Flags]
- bit 6, a
- jr nz, .asm_1b6b
- inc b
-.asm_1b6b
- ld a, [wMenuData2Flags]
- bit 7, a
- jr z, .asm_1b73
- inc c
-.asm_1b73
+; DMG: just change palettes to 0 (white)
+ xor a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ret
-ClearMenuBoxInterior::
- call MenuBoxCoord2Tile
- ld bc, SCREEN_WIDTH + 1
- add hl, bc
- call GetMenuBoxDims
- dec b
- dec c
- call ClearBox
+.cgb
+; Fill wBGPals and wOBPals with $ffff (white)
+ ld hl, wBGPals
+ ld bc, 16 palettes
+ ld a, $ff
+ call ByteFill
+; Request palette update
+ ld a, 1
+ ldh [hCGBPalUpdate], a
ret
-ClearWholeMenuBox::
- call MenuBoxCoord2Tile
- call GetMenuBoxDims
- inc c
- inc b
- call ClearBox
- ret
+GetMemSGBLayout::
+ ld b, SCGB_RAM
+GetSGBLayout::
+; load sgb packets unless dmg
-MenuBoxCoord2Tile:: ; 1b90 (0:1b90)
- ld a, [wMenuBorderLeftCoord]
- ld c, a
- ld a, [wMenuBorderTopCoord]
- ld b, a
-Coord2Tile:: ; 1b98 (0:1b98)
- xor a
- ld h, a
- ld l, b
- ld a, c
- ld b, h
- ld c, l
- add hl, hl
- add hl, hl
- add hl, bc
- add hl, hl
- add hl, hl
- ld c, a
- xor a
- ld b, a
- add hl, bc
- ld bc, wTileMap
- add hl, bc
- ret
+ ldh a, [hCGB]
+ and a
+ jr nz, .sgb
+
+ ldh a, [hSGB]
+ and a
+ ret z
+
+.sgb
+ predef_jump LoadSGBLayout
+
+SetHPPal::
+; Set palette for hp bar pixel length e at hl.
+ call GetHPPal
+ ld [hl], d
+ ret
+
+GetHPPal::
+; Get palette for hp bar pixel length e in d.
+ ld d, HP_GREEN
+ ld a, e
+ cp (HP_BAR_LENGTH_PX * 50 / 100) ; 24
+ ret nc
+ inc d ; HP_YELLOW
+ cp (HP_BAR_LENGTH_PX * 21 / 100) ; 10
+ ret nc
+ inc d ; HP_RED
+ ret \ No newline at end of file
diff --git a/home/time.asm b/home/time.asm
index 8acc72d9..8e935ed2 100644
--- a/home/time.asm
+++ b/home/time.asm
@@ -1,54 +1,79 @@
-AskTimer:: ; 45b (0:045b)
+; Functions relating to the timer interrupt and the real-time-clock.
+
+Unreferenced_Timer::
reti
-LatchClock:: ; 45c (0:045c)
- ld a, $0
+LatchClock::
+; latch clock counter data
+ ld a, 0
ld [MBC3LatchClock], a
- ld a, $1
+ ld a, 1
ld [MBC3LatchClock], a
ret
-UpdateTime:: ; 467 (0:0467)
+UpdateTime::
call GetClock
call FixDays
call FixTime
farcall Function14032
ret
-GetClock:: ; 477 (0:0477)
+GetClock::
+; store clock data in hRTCDayHi-hRTCSeconds
+
+; enable clock r/w
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
+
+; clock data is 'backwards' in hram
+
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
+
ld [hl], RTC_S
ld a, [de]
- and $3f
- ld [hRTCSeconds], a
+ maskbits 60
+ ldh [hRTCSeconds], a
+
+
ld [hl], RTC_M
ld a, [de]
- and $3f
- ld [hRTCMinutes], a
+ maskbits 60
+ ldh [hRTCMinutes], a
+
ld [hl], RTC_H
ld a, [de]
- and $1f
- ld [hRTCHours], a
+ maskbits 24
+ ldh [hRTCHours], a
+
ld [hl], RTC_DL
ld a, [de]
- ld [hRTCDayLo], a
+ ldh [hRTCDayLo], a
+
ld [hl], RTC_DH
ld a, [de]
- ld [hRTCDayHi], a
+ ldh [hRTCDayHi], a
+
+; unlatch clock / disable clock r/w
call CloseSRAM
ret
-FixDays:: ; 4a8 (0:04a8)
- ld a, [hRTCDayHi]
+FixDays::
+; fix day count
+; mod by 140
+
+; check if day count > 255 (bit 8 set)
+ ldh a, [hRTCDayHi] ; DH
bit 0, a
jr z, .daylo
+; reset dh (bit 8)
res 0, a
- ld [hRTCDayHi], a
- ld a, [hRTCDayLo]
+ ldh [hRTCDayHi], a
+
+; mod 140
+; mod twice since bit 8 (DH) was set
+ ldh a, [hRTCDayLo]
.modh
sub 140
jr nc, .modh
@@ -56,133 +81,177 @@ FixDays:: ; 4a8 (0:04a8)
sub 140
jr nc, .modl
add 140
- ld [hRTCDayLo], a
- ld a, $40
+
+; update dl
+ ldh [hRTCDayLo], a
+
+; flag for sRTCStatusFlags
+ ld a, %01000000
jr .set
+
.daylo
- ld a, [hRTCDayLo]
+; quit if fewer than 140 days have passed
+ ldh a, [hRTCDayLo]
cp 140
jr c, .quit
+
+; mod 140
.mod
sub 140
jr nc, .mod
add 140
- ld [hRTCDayLo], a
- ld a, $20
+
+; update dl
+ ldh [hRTCDayLo], a
+
+; flag for sRTCStatusFlags
+ ld a, %00100000
+
.set
+; update clock with modded day value
push af
call SetClock
pop af
scf
ret
+
.quit
ccf
xor a
ret
-FixTime:: ; 4de (0:04de)
- ld a, [hRTCSeconds]
+FixTime::
+; add ingame time (set at newgame) to current time
+; store time in wCurDay, hHours, hMinutes, hSeconds
+
+; second
+ ldh a, [hRTCSeconds]
ld c, a
ld a, [wd1df]
add c
sub 60
- jr nc, .asm_4eb
+ jr nc, .updatesec
add 60
-.asm_4eb
- ld [hSeconds], a
- ccf
- ld a, [hRTCMinutes]
+.updatesec
+ ldh [hSeconds], a
+
+; minute
+ ccf ; carry is set, so turn it off
+ ldh a, [hRTCMinutes]
ld c, a
ld a, [wd1de]
adc c
sub 60
- jr nc, .asm_4fb
+ jr nc, .updatemin
add 60
-.asm_4fb
- ld [hMinutes], a
- ccf
- ld a, [hRTCHours]
+.updatemin
+ ldh [hMinutes], a
+
+; hour
+ ccf ; carry is set, so turn it off
+ ldh a, [hRTCHours]
ld c, a
ld a, [wd1dd]
adc c
sub 24
- jr nc, .asm_50b
+ jr nc, .updatehr
add 24
-.asm_50b
- ld [hHours], a
- ccf
- ld a, [hRTCDayLo]
+.updatehr
+ ldh [hHours], a
+
+; day
+ ccf ; carry is set, so turn it off
+ ldh a, [hRTCDayLo]
ld c, a
ld a, [wd1dc]
adc c
ld [wCurDay], a
ret
-SetTimeOfDay::
+InitTimeOfDay::
xor a
ld [wStringBuffer2], a
- ld a, $0
+ ld a, 0 ; useless
ld [wStringBuffer2 + 3], a
jr InitTime
-SetDayOfWeek::
+InitDayOfWeek::
call UpdateTime
- ld a, [hHours]
+ ldh a, [hHours]
ld [wStringBuffer2 + 1], a
- ld a, [hMinutes]
+ ldh a, [hMinutes]
ld [wStringBuffer2 + 2], a
- ld a, [hSeconds]
+ ldh a, [hSeconds]
ld [wStringBuffer2 + 3], a
- jr InitTime
+ jr InitTime ; useless
InitTime::
farcall Function140ff
ret
PanicResetClock::
- call ClearhRTC
+ call .ClearhRTC
call SetClock
ret
-ClearhRTC:: ; 546 (0:0546)
+.ClearhRTC:
xor a
- ld [hRTCSeconds], a
- ld [hRTCMinutes], a
- ld [hRTCHours], a
- ld [hRTCDayLo], a
- ld [hRTCDayHi], a
+ ldh [hRTCSeconds], a
+ ldh [hRTCMinutes], a
+ ldh [hRTCHours], a
+ ldh [hRTCDayLo], a
+ ldh [hRTCDayHi], a
ret
-SetClock:: ; 552 (0:0552)
+SetClock::
+; set clock data from hram
+
+; enable clock r/w
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
+
+; set clock data
+; stored 'backwards' in hram
+
call LatchClock
ld hl, MBC3SRamBank
ld de, MBC3RTC
+
+; seems to be a halt check that got partially commented out
+; this block is totally pointless
ld [hl], RTC_DH
ld a, [de]
- bit 6, a
+ bit 6, a ; halt
ld [de], a
+
+; seconds
ld [hl], RTC_S
- ld a, [hRTCSeconds]
+ ldh a, [hRTCSeconds]
ld [de], a
+; minutes
ld [hl], RTC_M
- ld a, [hRTCMinutes]
+ ldh a, [hRTCMinutes]
ld [de], a
+; hours
ld [hl], RTC_H
- ld a, [hRTCHours]
+ ldh a, [hRTCHours]
ld [de], a
+; day lo
ld [hl], RTC_DL
- ld a, [hRTCDayLo]
+ ldh a, [hRTCDayLo]
ld [de], a
+; day hi
ld [hl], RTC_DH
- ld a, [hRTCDayHi]
- res 6, a
+ ldh a, [hRTCDayHi]
+ res 6, a ; make sure timer is active
ld [de], a
- call CloseSRAM
+
+; cleanup
+ call CloseSRAM ; unlatch clock, disable clock r/w
ret
ClearRTCStatus::
+; clear sRTCStatusFlags
xor a
push af
ld a, BANK(s0_ac60)
@@ -193,6 +262,7 @@ ClearRTCStatus::
ret
RecordRTCStatus::
+; append flags to sRTCStatusFlags
ld hl, s0_ac60
push af
ld a, BANK(s0_ac60)
@@ -204,6 +274,7 @@ RecordRTCStatus::
ret
CheckRTCStatus::
+; check sRTCStatusFlags
ld a, BANK(s0_ac60)
call OpenSRAM
ld a, [s0_ac60]
diff --git a/home/rtc.asm b/home/time_palettes.asm
index afe9028e..4140b34d 100644
--- a/home/rtc.asm
+++ b/home/time_palettes.asm
@@ -1,8 +1,8 @@
-RTC:: ; 343
+UpdateTimeAndPals::
; update time and time-sensitive palettes
; rtc enabled?
- ld a, [wRTCEnabled]
+ ld a, [wSpriteUpdatesEnabled]
cp 0
ret z
@@ -10,13 +10,13 @@ RTC:: ; 343
; obj update on?
ld a, [wVramState]
- bit 0, a
+ bit 0, a ; obj update
ret z
-TimeOfDayPals:: ; 352
+TimeOfDayPals::
callfar _TimeOfDayPals
ret
-UpdateTimePals:: ; 359
+UpdateTimePals::
callfar _UpdateTimePals
- ret
+ ret \ No newline at end of file
diff --git a/home/trainers.asm b/home/trainers.asm
new file mode 100755
index 00000000..c86c8aeb
--- /dev/null
+++ b/home/trainers.asm
@@ -0,0 +1,254 @@
+CheckTrainerBattle::
+ ldh a, [hROMBank]
+ push af
+
+ call SwitchToMapScriptsBank
+ call _CheckTrainerBattle
+
+ pop bc
+ ld a, b
+ rst Bankswitch
+ ret
+
+_CheckTrainerBattle::
+; Check if any trainer on the map sees the player and wants to battle.
+
+; Skip the player object.
+ ld a, 2
+ ld de, wMap2Object
+
+.loop
+
+; Start a battle if the object:
+ push af
+ push de
+
+; Has a sprite
+ ld hl, MAPOBJECT_SPRITE
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .next
+
+; Is a trainer
+ ld hl, MAPOBJECT_COLOR
+ add hl, de
+ ld a, [hl]
+ and $f
+ cp OBJECTTYPE_TRAINER
+ jr nz, .next
+
+; Is visible on the map
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
+ add hl, de
+ ld a, [hl]
+ cp -1
+ jr z, .next
+
+; Is facing the player...
+ call GetObjectStruct
+ call FacingPlayerDistance_bc
+ jr nc, .next
+
+; ...within their sight range
+ ld hl, MAPOBJECT_RANGE
+ add hl, de
+ ld a, [hl]
+ cp b
+ jr c, .next
+
+; And hasn't already been beaten
+ push bc
+ push de
+ ld hl, MAPOBJECT_SCRIPT_POINTER
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld b, CHECK_FLAG
+ call EventFlagAction
+ ld a, c
+ pop de
+ pop bc
+ and a
+ jr z, .startbattle
+
+.next
+ pop de
+ ld hl, MAPOBJECT_LENGTH
+ add hl, de
+ ld d, h
+ ld e, l
+
+ pop af
+ inc a
+ cp NUM_OBJECTS
+ jr nz, .loop
+ xor a
+ ret
+
+.startbattle
+ pop de
+ pop af
+ ldh [hLastTalked], a
+ ld a, b
+ ld [wSeenTrainerDistance], a
+ ld a, c
+ ld [wSeenTrainerDirection], a
+ jr LoadTrainer_continue
+
+TalkToTrainer::
+ ld a, 1
+ ld [wSeenTrainerDistance], a
+ ld a, -1
+ ld [wSeenTrainerDirection], a
+
+LoadTrainer_continue::
+ call GetMapScriptsBank
+ ld [wSeenTrainerBank], a
+
+ ldh a, [hLastTalked]
+ call GetMapObject
+
+ ld hl, MAPOBJECT_SCRIPT_POINTER
+ add hl, bc
+ ld a, [wSeenTrainerBank]
+ call GetFarHalfword
+ ld de, wTempTrainer
+ ld bc, wTempTrainerEnd - wTempTrainer
+ ld a, [wSeenTrainerBank]
+ call FarCopyBytes
+ xor a
+ ld [wRunningTrainerBattleScript], a
+ scf
+ ret
+
+FacingPlayerDistance_bc::
+ push de
+ call FacingPlayerDistance
+ ld b, d
+ ld c, e
+ pop de
+ ret
+
+FacingPlayerDistance::
+; Return carry if the sprite at bc is facing the player,
+; its distance in d, and its direction in e.
+
+ ld hl, OBJECT_NEXT_MAP_X ; x
+ add hl, bc
+ ld d, [hl]
+
+ ld hl, OBJECT_NEXT_MAP_Y ; y
+ add hl, bc
+ ld e, [hl]
+
+ ld a, [wPlayerStandingMapX]
+ cp d
+ jr z, .CheckY
+
+ ld a, [wPlayerStandingMapY]
+ cp e
+ jr z, .CheckX
+
+ and a
+ ret
+
+.CheckY:
+ ld a, [wPlayerStandingMapY]
+ sub e
+ jr z, .NotFacing
+ jr nc, .Above
+
+; Below
+ cpl
+ inc a
+ ld d, a
+ ld e, OW_UP
+ jr .CheckFacing
+
+.Above:
+ ld d, a
+ ld e, OW_DOWN
+ jr .CheckFacing
+
+.CheckX:
+ ld a, [wPlayerStandingMapX]
+ sub d
+ jr z, .NotFacing
+ jr nc, .Left
+
+; Right
+ cpl
+ inc a
+ ld d, a
+ ld e, OW_LEFT
+ jr .CheckFacing
+
+.Left:
+ ld d, a
+ ld e, OW_RIGHT
+
+.CheckFacing:
+ call GetSpriteDirection
+ cp e
+ jr nz, .NotFacing
+ scf
+ ret
+
+.NotFacing:
+ and a
+ ret
+
+CheckTrainerFlag::
+ push bc
+ ld hl, OBJECT_MAP_OBJECT_INDEX
+ add hl, bc
+ ld a, [hl]
+ call GetMapObject
+ ld hl, MAPOBJECT_SCRIPT_POINTER
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call GetMapScriptsBank
+ call GetFarHalfword
+ ld d, h
+ ld e, l
+ push de
+ ld b, CHECK_FLAG
+ call EventFlagAction
+ pop de
+ ld a, c
+ and a
+ pop bc
+ ret
+
+PrintWinLossText::
+ ld a, [wBattleType]
+ cp BATTLETYPE_CANLOSE
+ jr .canlose ; ??????????
+
+; unused
+ ld hl, wWinTextPointer
+ jr .ok
+
+.canlose
+ ld a, [wBattleResult]
+ ld hl, wWinTextPointer
+ and a ; WIN?
+ jr z, .ok
+ ld hl, wLossTextPointer
+
+.ok
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call GetMapScriptsBank
+ call FarPrintText
+ call WaitBGMap
+ call WaitPressAorB_BlinkCursor
+ ret \ No newline at end of file
diff --git a/home/vblank.asm b/home/vblank.asm
index 485b875c..c32adcf6 100644
--- a/home/vblank.asm
+++ b/home/vblank.asm
@@ -1,30 +1,37 @@
+; VBlank is the interrupt responsible for updating VRAM.
+
VBlank::
push af
push bc
push de
push hl
- ld a, [hVBlank]
- and $7
+
+ ldh a, [hVBlank]
+ and 7
+
ld e, a
- ld d, $0
- ld hl, .blanks
+ ld d, 0
+ ld hl, .VBlanks
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
+
ld de, .return
push de
jp hl
-.return
+
+.return:
call GameTimer
+
pop hl
pop de
pop bc
pop af
reti
-.blanks
+.VBlanks:
dw VBlank0
dw VBlank1
dw VBlank2
@@ -33,9 +40,9 @@ VBlank::
dw VBlank5
dw VBlank0
dw VBlank0 ; just in case
-;180
-VBlank0:: ; 180
+
+VBlank0::
; normal operation
; rng
@@ -54,29 +61,29 @@ VBlank0:: ; 180
inc [hl]
; advance random variables
- ld a, [rDIV]
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
adc b
- ld [hRandomAdd], a
+ ldh [hRandomAdd], a
- ld a, [rDIV]
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
sbc b
- ld [hRandomSub], a
+ ldh [hRandomSub], a
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
- ld a, [hSCX]
- ld [rSCX], a
- ld a, [hSCY]
- ld [rSCY], a
- ld a, [hWY]
- ld [rWY], a
- ld a, [hWX]
- ld [rWX], a
+ ldh a, [hSCX]
+ ldh [rSCX], a
+ ldh a, [hSCY]
+ ldh [rSCY], a
+ ldh a, [hWY]
+ ldh [rWY], a
+ ldh a, [hWX]
+ ldh [rWX], a
; There's only time to call one of these in one vblank.
; Calls are in order of priority.
@@ -95,17 +102,14 @@ VBlank0:: ; 180
call Function1642
.done
-
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
and a
jr nz, .done_oam
- call hPushOAM
-.done_oam
-
+ call hTransferVirtualOAM
+.done_oam
; vblank-sensitive operations are done
-
xor a
ld [wVBlankOccurred], a
@@ -114,71 +118,76 @@ VBlank0:: ; 180
jr z, .ok
dec a
ld [wOverworldDelay], a
-.ok
+.ok
ld a, [wTextDelayFrames]
and a
jr z, .ok2
dec a
ld [wTextDelayFrames], a
+
.ok2
+ call UpdateJoypad
- call Joypad
ld a, BANK(_UpdateSound)
rst Bankswitch
call _UpdateSound
ld a, [wROMBankBackup]
rst Bankswitch
- ld a, [hSeconds]
- ld [hSecondsBackup], a
+
+ ldh a, [hSeconds]
+ ldh [hSecondsBackup], a
+
ret
-VBlank1:: ; 1f4
+VBlank1::
; scx, scy
; palettes
; bg map
; tiles
; oam
; sound / lcd stat
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
- ld a, [hSCX]
- ld [rSCX], a
- ld a, [hSCY]
- ld [rSCY], a
+ ldh a, [hSCX]
+ ldh [rSCX], a
+ ldh a, [hSCY]
+ ldh [rSCY], a
call UpdatePals
jr c, .done
call UpdateBGMap
call Serve2bppRequest
- call hPushOAM
+ call hTransferVirtualOAM
+
.done
- ld a, [hLCDCPointer]
+ ldh a, [hLCDCPointer]
or a
jr z, .skip_lcd
ld c, a
ld a, [wc700]
ld [$ff00+c], a
+
.skip_lcd
xor a
ld [wVBlankOccurred], a
; get requested ints
- ld a, [rIF]
+ ldh a, [rIF]
ld b, a
; discard requested ints
xor a
- ld [rIF], a
+ ldh [rIF], a
; enable lcd stat
ld a, %10 ; lcd stat
- ld [rIE], a
+ ldh [rIE], a
; rerequest serial int if applicable (still disabled)
; request lcd stat
ld a, b
and %1000 ; serial
or %10 ; lcd stat
- ld [rIF], a
+ ldh [rIF], a
ei
ld a, BANK(_UpdateSound)
@@ -188,26 +197,28 @@ VBlank1:: ; 1f4
rst Bankswitch
; enable ints
ld a, %11111
- ld [rIE], a
+ ldh [rIE], a
ret
-UpdatePals:: ; 23e
+UpdatePals::
; update pals for either dmg or cgb
- ld a, [hCGB]
+
+ ldh a, [hCGB]
and a
jp nz, UpdateCGBPals
; update gb pals
ld a, [wBGP]
- ld [rBGP], a
+ ldh [rBGP], a
ld a, [wOBP0]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [wOPB1]
- ld [rOBP1], a
+ ldh [rOBP1], a
+
and a
ret
-VBlank4:: ; 255
+VBlank4::
; bg map
; tiles
; oam
@@ -215,15 +226,15 @@ VBlank4:: ; 255
; serial
; sound
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
call UpdateBGMap
call Serve2bppRequest
- call hPushOAM
+ call hTransferVirtualOAM
- call Joypad
+ call UpdateJoypad
xor a
ld [wVBlankOccurred], a
@@ -238,37 +249,37 @@ VBlank4:: ; 255
rst Bankswitch
ret
-VBlank5:: ; 278
+VBlank5::
; scx
; palettes
; bg map
; tiles
; joypad
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
- ld a, [hSCX]
- ld [rSCX], a
+ ldh a, [hSCX]
+ ldh [rSCX], a
call UpdatePalsIfCGB
jr c, .done
call UpdateBGMap
call Serve2bppRequest
-.done
+.done
xor a
ld [wVBlankOccurred], a
- call Joypad
+ call UpdateJoypad
xor a
- ld [rIF], a
+ ldh [rIF], a
ld a, %10 ; lcd stat
- ld [rIE], a
+ ldh [rIE], a
; request lcd stat
- ld [rIF], a
+ ldh [rIF], a
ei
ld a, BANK(_UpdateSound)
@@ -279,16 +290,16 @@ VBlank5:: ; 278
di
xor a
- ld [rIF], a
+ ldh [rIF], a
; enable ints
ld a, %11111
- ld [rIE], a
+ ldh [rIE], a
ret
-VBlank2:: ; 2b0
+VBlank2::
; sound only
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
ld a, BANK(_UpdateSound)
@@ -302,7 +313,7 @@ VBlank2:: ; 2b0
ld [wVBlankOccurred], a
ret
-VBlank3:: ; 2c4
+VBlank3::
; scx, scy
; palettes
; bg map
@@ -310,46 +321,44 @@ VBlank3:: ; 2c4
; oam
; sound / lcd stat
- ld a, [hVBlankCounter]
+ ldh a, [hVBlankCounter]
inc a
- ld [hVBlankCounter], a
+ ldh [hVBlankCounter], a
- ld a, [rDIV]
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
adc b
- ld [hRandomAdd], a
+ ldh [hRandomAdd], a
- ld a, [rDIV]
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
sbc b
- ld [hRandomSub], a
+ ldh [hRandomSub], a
- call Joypad
+ call UpdateJoypad
- ld a, [hROMBank]
+ ldh a, [hROMBank]
ld [wROMBankBackup], a
- ld a, [hSCX]
- ld [rSCX], a
- ld a, [hSCY]
- ld [rSCY], a
+ ldh a, [hSCX]
+ ldh [rSCX], a
+ ldh a, [hSCY]
+ ldh [rSCY], a
- ld a, [hWY]
- ld [rWY], a
- ld a, [hWX]
- ld [rWX], a
+ ldh a, [hWY]
+ ldh [rWY], a
+ ldh a, [hWX]
+ ldh [rWX], a
call UpdateBGMap
call UpdateBGMapBuffer
call Serve2bppRequest
-
call Serve1bppRequest
call AnimateTileset
-
- call hPushOAM
+ call hTransferVirtualOAM
xor a
ld [wVBlankOccurred], a
@@ -359,14 +368,14 @@ VBlank3:: ; 2c4
jr z, .okay
dec a
ld [wTextDelayFrames], a
-.okay
+.okay
xor a
- ld [rIF], a
+ ldh [rIF], a
ld a, %10 ; lcd stat
- ld [rIE], a
+ ldh [rIE], a
; request lcd stat
- ld [rIF], a
+ ldh [rIF], a
ei
ld a, BANK(_UpdateSound)
@@ -377,8 +386,8 @@ VBlank3:: ; 2c4
di
xor a
- ld [rIF], a
+ ldh [rIF], a
; enable ints
ld a, %11111
- ld [rIE], a
+ ldh [rIE], a
ret
diff --git a/home/video.asm b/home/video.asm
index 0d105791..5b17ce44 100644
--- a/home/video.asm
+++ b/home/video.asm
@@ -1,5 +1,12 @@
-UpdateBGMapBuffer:: ; 1458 (0:1458)
- ld a, [hBGMapUpdate]
+UpdateBGMapBuffer::
+; Copy [hBGMapTileCount] 16x8 tiles from wBGMapBuffer
+; to bg map addresses in wBGMapBufferPtrs.
+
+; [hBGMapTileCount] must be even since this is done in pairs.
+
+; Return carry on success.
+
+ ldh a, [hBGMapUpdate]
and a
ret z
@@ -8,22 +15,34 @@ UpdateBGMapBuffer:: ; 1458 (0:1458)
ld hl, wBGMapBufferPtrs
ld sp, hl
+; We can now pop the addresses of affected spots on the BG Map
+
ld hl, wBGMapPalBuffer
ld de, wBGMapBuffer
.next
+; Copy a pair of 16x8 blocks (one 16x16 block)
+
+
rept 2
+; Get our BG Map address
pop bc
- ld a, $1
- ld [rVBK], a
+
+; Palettes
+ ld a, 1
+ ldh [rVBK], a
+
ld a, [hli]
ld [bc], a
inc c
ld a, [hli]
ld [bc], a
dec c
- ld a, $0
- ld [rVBK], a
+
+; Tiles
+ ld a, 0
+ ldh [rVBK], a
+
ld a, [de]
inc de
ld [bc], a
@@ -33,111 +52,127 @@ rept 2
ld [bc], a
endr
- ld a, [hFFDE]
+; We've done 2 16x8 blocks
+ ldh a, [hFFDE]
dec a
dec a
- ld [hFFDE], a
+ ldh [hFFDE], a
jr nz, .next
- ld a, [hSPBuffer]
+ ldh a, [hSPBuffer]
ld l, a
- ld a, [hSPBuffer + 1]
+ ldh a, [hSPBuffer + 1]
ld h, a
ld sp, hl
xor a
- ld [hBGMapUpdate], a
+ ldh [hBGMapUpdate], a
scf
ret
WaitTop::
- ld a, [hBGMapMode]
+; Wait until the top third of the BG Map is being updated.
+
+ ldh a, [hBGMapMode]
and a
ret z
- ld a, [hBGMapThird]
+
+ ldh a, [hBGMapThird]
and a
jr z, .done
+
call DelayFrame
jr WaitTop
.done
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
-UpdateBGMap:: ; 14bb (0:14bb)
- ld a, [hBGMapMode]
+UpdateBGMap::
+; Update the BG Map, in thirds, from wTilemap and wAttrmap.
+
+ ldh a, [hBGMapMode]
and a
ret z
- dec a
+; BG Map 0
+ dec a ; 1
jr z, .Tiles
- dec a
+ dec a ; 2
jr z, .Attr
+; BG Map 1
dec a
- ld a, [hBGMapAddress]
+ ldh a, [hBGMapAddress]
ld l, a
- ld a, [hBGMapAddress + 1]
+ ldh a, [hBGMapAddress + 1]
ld h, a
push hl
- xor a
- ld [hBGMapAddress], a
- ld a, $9c
- ld [hBGMapAddress + 1], a
+ xor a ; LOW(vBGMap1)
+ ldh [hBGMapAddress], a
+ ld a, HIGH(vBGMap1)
+ ldh [hBGMapAddress + 1], a
- ld a, [hBGMapMode]
+ ldh a, [hBGMapMode]
push af
- cp $3
+ cp 3
call z, .Tiles
pop af
- cp $4
+ cp 4
call z, .Attr
pop hl
ld a, l
- ld [hBGMapAddress], a
+ ldh [hBGMapAddress], a
ld a, h
- ld [hBGMapAddress + 1], a
+ ldh [hBGMapAddress + 1], a
ret
-.Attr
- ld a, $1
- ld [rVBK], a
+.Attr:
+ ld a, 1
+ ldh [rVBK], a
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
call .update
- ld a, $0
- ld [rVBK], a
+
+ ld a, 0
+ ldh [rVBK], a
ret
-.Tiles
+.Tiles:
hlcoord 0, 0
+
.update
ld [hSPBuffer], sp
- ld a, [hBGMapThird]
- and a
+; Which third?
+ ldh a, [hBGMapThird]
+ and a ; 0
jr z, .top
- dec a
+ dec a ; 1
jr z, .middle
+ ; 2
THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
+
+.bottom
ld de, 2 * THIRD_HEIGHT * SCREEN_WIDTH
add hl, de
ld sp, hl
- ld a, [hBGMapAddress + 1]
+ ldh a, [hBGMapAddress + 1]
ld h, a
- ld a, [hBGMapAddress]
-
+ ldh a, [hBGMapAddress]
ld l, a
+
ld de, 2 * THIRD_HEIGHT * BG_MAP_WIDTH
add hl, de
+; Next time: top third
xor a
jr .start
@@ -146,35 +181,41 @@ THIRD_HEIGHT EQU SCREEN_HEIGHT / 3
add hl, de
ld sp, hl
- ld a, [hBGMapAddress + 1]
+ ldh a, [hBGMapAddress + 1]
ld h, a
- ld a, [hBGMapAddress]
+ ldh a, [hBGMapAddress]
ld l, a
ld de, THIRD_HEIGHT * BG_MAP_WIDTH
add hl, de
- ld a, $2
+; Next time: bottom third
+ ld a, 2
jr .start
.top
ld sp, hl
- ld a, [hBGMapAddress + 1]
+ ldh a, [hBGMapAddress + 1]
ld h, a
- ld a, [hBGMapAddress]
+ ldh a, [hBGMapAddress]
ld l, a
- ld a, $1
+; Next time: middle third
+ ld a, 1
.start
- ld [hBGMapThird], a
+; Which third to update next time
+ ldh [hBGMapThird], a
+
+; Rows of tiles in a third
ld a, SCREEN_HEIGHT / 3
-; Discrepancy between TileMap and BGMap
+; Discrepancy between wTilemap and BGMap
ld bc, BG_MAP_WIDTH - (SCREEN_WIDTH - 1)
-
+
.row
+; Copy a row of 20 tiles
rept SCREEN_WIDTH / 2 - 1
pop de
ld [hl], e
@@ -191,31 +232,38 @@ endr
dec a
jr nz, .row
- ld a, [hSPBuffer]
+ ldh a, [hSPBuffer]
ld l, a
- ld a, [hSPBuffer + 1]
+ ldh a, [hSPBuffer + 1]
ld h, a
ld sp, hl
ret
-Serve1bppRequest:: ; 1579 (0:1579)
+Serve1bppRequest::
+; Only call during the first fifth of VBlank
+
ld a, [wRequested1bpp]
and a
ret z
+; Copy [wRequested1bpp] 1bpp tiles from [wRequested1bppSource] to [wRequested1bppDest]
+
ld [hSPBuffer], sp
+; Source
ld hl, wRequested1bppSource
ld a, [hli]
ld h, [hl]
ld l, a
ld sp, hl
+; Destination
ld hl, wRequested1bppDest
ld a, [hli]
ld h, [hl]
ld l, a
+; # tiles to copy
ld a, [wRequested1bpp]
ld b, a
@@ -223,6 +271,7 @@ Serve1bppRequest:: ; 1579 (0:1579)
ld [wRequested1bpp], a
.next
+
rept 3
pop de
ld [hl], e
@@ -254,32 +303,46 @@ endr
ld [wRequested1bppSource], sp
- ld a, [hSPBuffer]
+ ldh a, [hSPBuffer]
ld l, a
- ld a, [hSPBuffer + 1]
+ ldh a, [hSPBuffer + 1]
ld h, a
ld sp, hl
ret
-Serve2bppRequest:: ; 15d0 (0:15d0)
+Serve2bppRequest::
+; Only call during the first fifth of VBlank
+
ld a, [wRequested2bpp]
and a
ret z
+
+; Copy [wRequested2bpp] 2bpp tiles from [wRequested2bppSource] to [wRequested2bppDest]
+
ld [hSPBuffer], sp
+
+; Source
ld hl, wRequested2bppSource
ld a, [hli]
ld h, [hl]
ld l, a
ld sp, hl
+
+; Destination
ld hl, wRequested2bppDest
ld a, [hli]
ld h, [hl]
ld l, a
+
+; # tiles to copy
ld a, [wRequested2bpp]
ld b, a
+
xor a
ld [wRequested2bpp], a
+
.next
+
rept 7
pop de
ld [hl], e
@@ -303,41 +366,50 @@ endr
ld [wRequested2bppSource], sp
- ld a, [hSPBuffer]
+ ldh a, [hSPBuffer]
ld l, a
- ld a, [hSPBuffer + 1]
+ ldh a, [hSPBuffer + 1]
ld h, a
ld sp, hl
ret
-AnimateTileset:: ; 162b (0:162b)
- ld a, [hMapAnims]
+AnimateTileset::
+; Only call during the first fifth of VBlank
+
+ ldh a, [hMapAnims]
and a
ret z
- ld a, [hROMBank]
+
+ ldh a, [hROMBank]
push af
ld a, $3f
rst Bankswitch
- call $4003
+
+ call $4003 ; ???
+
pop af
rst Bankswitch
ret
+
ret
+
ld hl, rLCDC
set 1, [hl]
ret
-Function1642:: ; 1642 (0:1642)
+Function1642::
nop
- ld a, [hFF9E]
+ ldh a, [hVBlankCounter + 1]
and a
ret z
+
dec a
jr z, .one
dec a
jr z, .two
- ld a, $2
- ld [hFF9E], a
+
+ ld a, 2
+ ldh [hVBlankCounter + 1], a
ld hl, hBGMapAddress
ld a, [hli]
ld h, [hl]
@@ -356,15 +428,16 @@ endr
ret
.two
- ld a, $1
+ ld a, 1
ld de, $240
jr .go
.one
xor a
ld de, $320
+
.go
- ld [hFF9E], a
+ ldh [hVBlankCounter + 1], a
ld hl, hBGMapAddress
ld a, [hli]
ld h, [hl]
diff --git a/home/window.asm b/home/window.asm
index 67326091..ac08375e 100644
--- a/home/window.asm
+++ b/home/window.asm
@@ -1,37 +1,41 @@
-Function2e80:: ; 2e80 (0:2e80)
+RefreshScreen::
call ClearWindowData
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(ReanchorBGMap_NoOAMUpdate) ; and BANK(LoadFonts_NoOAMUpdate)
+ ld a, BANK(ReanchorBGMap_NoOAMUpdate) ; aka BANK(LoadFonts_NoOAMUpdate)
rst Bankswitch
+
call ReanchorBGMap_NoOAMUpdate
- call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
+ call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
call LoadFonts_NoOAMUpdate
+
pop af
rst Bankswitch
ret
-CloseText
- ld a, [hOAMUpdate]
+CloseText::
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
+
call .CloseText
+
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
.CloseText:
call ClearWindowData
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call OverworldTextModeSwitch
- call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
+ call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call SafeUpdateSprites
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
farcall Function1415c
call ReplacePlayerSprite
ld hl, wd565
@@ -41,48 +45,53 @@ CloseText
OpenText::
call ClearWindowData
- ld a, [hROMBank]
+ ldh a, [hROMBank]
push af
- ld a, BANK(ReanchorBGMap_NoOAMUpdate) ; and BANK(LoadFonts_NoOAMUpdate)
+ ld a, BANK(ReanchorBGMap_NoOAMUpdate) ; aka BANK(LoadFonts_NoOAMUpdate)
rst Bankswitch
- call ReanchorBGMap_NoOAMUpdate
+
+ call ReanchorBGMap_NoOAMUpdate ; clear bgmap
call SpeechTextbox
- call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
- call LoadFonts_NoOAMUpdate
+ call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap ; anchor bgmap
+ call LoadFonts_NoOAMUpdate ; load font
pop af
rst Bankswitch
+
ret
-_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap:: ; 2ee3 (0:2ee3)
- ld a, [hOAMUpdate]
+_OpenAndCloseMenu_HDMATransferTilemapAndAttrmap::
+ ldh a, [hOAMUpdate]
push af
- ld a, $1
- ld [hOAMUpdate], a
- call CGBOnly_LoadEDTile
+ ld a, 1
+ ldh [hOAMUpdate], a
+
+ call CGBOnly_CopyTilemapAtOnce
+
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
-SafeUpdateSprites:: ; 2ef1 (0:2ef1)
- ld a, [hOAMUpdate]
+SafeUpdateSprites::
+ ldh a, [hOAMUpdate]
push af
- ld a, [hBGMapMode]
+ ldh a, [hBGMapMode]
push af
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
+
call UpdateSprites
+
xor a
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call DelayFrame
pop af
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
-Function2f0e::
+; unused
scf
ret
-
diff --git a/hram.asm b/hram.asm
index 9e5b2924..19caf092 100755
--- a/hram.asm
+++ b/hram.asm
@@ -1,128 +1,169 @@
-HRAM_START EQU $ff80
-hPushOAM EQU $ff80 ; 10 bytes
-
-hROMBankBackup EQU $ff8c
-hBuffer EQU $ff8d
-hFF8E EQU $ff8e
-hRTCDayHi EQU $ff8f
-hRTCDayLo EQU $ff90
-hRTCHours EQU $ff91
-hRTCMinutes EQU $ff92
-hRTCSeconds EQU $ff93
-
-hHours EQU $ff96
-
-hMinutes EQU $ff98
-
-hSeconds EQU $ff9a
-
-hVBlankCounter EQU $ff9d
-hFF9E EQU $ff9e
-hROMBank EQU $ff9f
-hVBlank EQU $ffa0
-hMapEntryMethod EQU $ffa1
-hMenuReturn EQU $ffa2
-
-hJoypadReleased EQU $ffa4
-hJoypadPressed EQU $ffa5
-hJoypadDown EQU $ffa6
-hJoypadSum EQU $ffa7
-hJoyReleased EQU $ffa8
-hJoyPressed EQU $ffa9
-hJoyDown EQU $ffaa
-hJoyLast EQU $ffab
-hInMenu EQU $ffac
-
-hPrinter EQU $ffae
-hGraphicStartTile EQU $ffaf
-hMoveMon EQU $ffb0
-hMapObjectIndexBuffer EQU $ffb1
-hObjectStructIndexBuffer EQU $ffb2
-
-hConnectionStripLength EQU $ffb1
-hConnectedMapWidth EQU $ffb2
-
-hPastLeadingZeroes EQU $ffb5
-
-hStringCmpString1 EQU $ffb3
-hStringCmpString2 EQU $ffb7
-
-hDividend EQU $ffb5 ; length in b register, before 'call Divide' (max 4 bytes)
-hDivisor EQU $ffb9 ; 1 byte long
-hQuotient EQU $ffb6 ; result (3 bytes long)
-hRemainder EQU $ffb9
-
-hMultiplicand EQU $ffb6 ; 3 bytes long
-hMultiplier EQU $ffb9 ; 1 byte long
-hProduct EQU $ffb5 ; result (4 bytes long)
-
-hMathBuffer EQU $ffba
-
-hPrintNum1 EQU $ffb5
-hPrintNum2 EQU $ffb6
-hPrintNum3 EQU $ffb7
-hPrintNum4 EQU $ffb8
-hPrintNum5 EQU $ffb9
-hPrintNum6 EQU $ffba
-hPrintNum7 EQU $ffbb
-hPrintNum8 EQU $ffbc
-hPrintNum9 EQU $ffbd
-hPrintNum10 EQU $ffbe
-
-hMGStatusFlags EQU $ffbe
-
-hUsedSpriteIndex EQU $ffbf
-hUsedSpriteTile EQU $ffc0
-hFFC1 EQU $ffc1
-hFFC2 EQU $ffc2
-hFFC3 EQU $ffc3
-hFFC4 EQU $ffc4
-hMoneyTemp EQU $ffc5
-
-hMGJoypadPressed EQU $ffc5
-hMGJoypadReleased EQU $ffc6
-
-hLCDCPointer EQU $ffc8
-hLYOverrideStart EQU $ffc9
-hLYOverrideEnd EQU $ffca
-hMobileReceive EQU $ffcb
-hFFCC EQU $ffcc
-hLinkPlayerNumber EQU $ffcd
-hFFCE EQU $ffce
-hSerialSend EQU $ffcf
-hSerialReceive EQU $ffd0
-
-hSCX EQU $ffd1
-hSCY EQU $ffd2
-hWX EQU $ffd3
-hWY EQU $ffd4
-hTilesPerCycle EQU $ffd5
-hBGMapMode EQU $ffd6
-hBGMapThird EQU $ffd7
-hBGMapAddress EQU $ffd8
-
-hOAMUpdate EQU $ffda
-hSPBuffer EQU $ffdb
-
-hBGMapUpdate EQU $ffdd
-hFFDE EQU $ffde
-
-hMapAnims EQU $ffe0
-hTileAnimFrame EQU $ffe1
-
-hLastTalked EQU $ffe2
-
-hRandom EQU $ffe3
-hRandomAdd EQU $ffe3
-hRandomSub EQU $ffe4
-hSecondsBackup EQU $ffe5
-hBattleTurn EQU $ffe6 ; Which trainers turn is it? 0: Player, 1: Opponent Trainer
-hCGBPalUpdate EQU $ffe7
-hCGB EQU $ffe8
-hSGB EQU $ffe9
-hDMATransfer EQU $ffea
-hMobile EQU $ffeb
-hFFEC EQU $ffec
-hClockResetTrigger EQU $ffed
-
-HRAM_END EQU $ffff
+SECTION "HRAM", HRAM
+
+hTransferVirtualOAM:: ds 12 ; ff80
+
+hROMBankBackup:: db ; ff8c
+hBuffer:: db ; ff8d
+hFF8E:: db ; ff8e
+
+hRTCDayHi:: db ; ff8f
+hRTCDayLo:: db ; ff90
+hRTCHours:: db ; ff91
+hRTCMinutes:: db ; ff92
+hRTCSeconds:: db ; ff93
+ ds 2
+
+hHours:: db ; ff96
+ ds 1
+hMinutes:: db ; ff98
+ ds 1
+hSeconds:: db ; ff9a
+ ds 1
+ ds 1
+
+hVBlankCounter:: db ; ff9d
+ ds 1
+
+hROMBank:: db ; ff9f
+hVBlank :: db ; ffa0
+hMapEntryMethod:: db ; ffa1
+hMenuReturn:: db ; ffa2
+ ds 1
+
+hJoypadReleased:: db ; ffa4
+hJoypadPressed:: db ; ffa5
+hJoypadDown:: db ; ffa6
+hJoypadSum:: db ; ffa7
+hJoyReleased:: db ; ffa8
+hJoyPressed:: db ; ffa9
+hJoyDown:: db ; ffaa
+hJoyLast:: db ; ffab
+
+hInMenu:: db ; ffac
+ ds 1
+
+hPrinter:: db ; ffae
+hGraphicStartTile:: db ; ffaf
+hMoveMon:: db ; ffb0
+
+UNION ; ffb1
+hMapObjectIndexBuffer:: db ; ffb1
+hObjectStructIndexBuffer:: db ; ffb2
+
+NEXTU ; ffb1
+hConnectionStripLength:: db ; ffb1
+hConnectedMapWidth:: db ; ffb2
+ENDU ;ffb3
+
+hEnemyMonSpeed:: dw ; ffb3
+
+UNION ; ffb5
+ ds 2
+hPartyMon1Speed:: dw ; ffb7
+
+NEXTU ; ffb5
+
+UNION ; ffb5
+hDividend:: ds 4 ; ffb5 ; length in b register, before 'call Divide' (max 4 bytes)
+hDivisor:: db ; ffb9 ; 1 byte long
+NEXTU ; ffb5
+ ds 1
+hQuotient:: ds 3 ; ffb6 ; result (3 bytes long)
+hRemainder:: db ; ffb9
+NEXTU ; ffb5
+ ds 1
+hMultiplicand:: ds 3 ; ffb6 ; 3 bytes long
+hMultiplier:: db ; ffb9 ; 1 byte long
+NEXTU ; ffb5
+hProduct:: ds 4 ; ffb5 ; result (4 bytes long)
+ENDU ; ffba
+
+hMathBuffer:: ds 5 ; ffba
+
+NEXTU ; ffb5
+
+hPrintNum1:: db ; ffb5
+hPrintNum2:: db ; ffb6
+hPrintNum3:: db ; ffb7
+hPrintNum4:: db ; ffb8
+hPrintNum5:: db ; ffb9
+hPrintNum6:: db ; ffba
+hPrintNum7:: db ; ffbb
+hPrintNum8:: db ; ffbc
+hPrintNum9:: db ; ffbd
+hPrintNum10:: db ; ffbe
+
+NEXTU ; ffb5
+
+ ds 9
+hMGStatusFlags:: db ; ffbe
+ENDU ; ffbf
+
+hUsedSpriteIndex:: db ; ffbf
+hUsedSpriteTile:: db ; ffc0
+hFFC1:: db ; ffc1
+hFFC2:: db ; ffc2
+hFFC3:: db ; ffc3
+hFFC4:: db ; ffc4
+
+UNION ; ffc5
+hMoneyTemp:: ds 3 ; ffc5
+NEXTU ; ffc5
+hMGJoypadPressed:: db ; ffc5
+hMGJoypadReleased:: db ; ffc6
+ENDU ; ffc8
+
+hLCDCPointer:: db ; ffc8
+hLYOverrideStart:: db ; ffc9
+hLYOverrideEnd:: db ; ffca
+
+hMobileReceive:: db ; ffcb
+hFFCC:: db ; ffcc
+hLinkPlayerNumber:: db ; ffcd
+hFFCE:: db ; ffce
+hSerialSend:: db ; ffcf
+hSerialReceive:: db ; ffd0
+
+hSCX:: db ; ffd1
+hSCY:: db ; ffd2
+hWX:: db ; ffd3
+hWY:: db ; ffd4
+hTilesPerCycle:: db ; ffd5
+hBGMapMode:: db ; ffd6
+hBGMapThird:: db ; ffd7
+hBGMapAddress:: db ; ffd8
+
+ ds 1
+
+hOAMUpdate :: db ; ffda
+
+hSPBuffer:: dw ; ffdb
+
+hBGMapUpdate:: db ; ffdd
+hFFDE:: db ; ffde
+
+ ds 1
+
+hMapAnims:: db ; ffe0
+hTileAnimFrame:: db ; ffe1
+
+hLastTalked:: db ; ffe2
+
+hRandom::
+hRandomAdd:: db ; ffe3
+hRandomSub:: db ; ffe4
+
+hSecondsBackup:: db ; ffe5
+
+hBattleTurn:: ; ffe6
+;Which trainers turn is it? 0: Player, 1: Opponent Trainer
+ db
+
+hCGBPalUpdate:: db ; ffe7
+hCGB:: db ; ffe8
+hSGB:: db ; ffe9
+
+hDMATransfer:: db ; ffea
+hMobile:: db ; ffeb
+hFFEC:: db ; ffec
+hClockResetTrigger:: db ; ffed
diff --git a/items/item_effects.asm b/items/item_effects.asm
index 7689720b..9c494885 100755
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -1,8 +1,8 @@
-DoItemEffect_:: ; e7a6 (3:67a6)
+_DoItemEffect:: ; e7a6 (3:67a6)
ld a, [wd002]
ld [wd151], a
call GetItemName
- call Function317b
+ call CopyName1
ld a, $1
ld [wFieldMoveSucceeded], a
ld a, [wd002]
@@ -261,7 +261,7 @@ UltraBall: ; e926
ld a, b
jp z, .skip_hp_calc
ld a, b
- ld [hPrintNum4], a
+ ldh [hPrintNum4], a
ld hl, wEnemyMonHP
ld b, [hl]
inc hl
@@ -302,24 +302,27 @@ UltraBall: ; e926
ld c, $1
.okay_hp_div
ld b, e
+
push bc
ld a, b
sub c
- ld [hRemainder], a
+ ldh [hMultiplier], a
xor a
- ld [hDividend], a
- ld [hQuotient], a
- ld [hStringCmpString2], a
+ ldh [hDividend + 0], a
+ ldh [hMultiplicand + 0], a
+ ldh [hMultiplicand + 1], a
call Multiply
pop bc
+
ld a, b
- ld [hRemainder], a
+ ldh [hDivisor], a
ld b, $4
call Divide
- ld a, [hPrintNum4]
+
+ ldh a, [hQuotient + 2]
and a
jr nz, .statuscheck
- ld a, $1
+ ld a, 1
.statuscheck
; This routine is buggy. It was intended that SLP and FRZ provide a higher
; catch rate than BRN/PSN/PAR, which in turn provide a higher catch rate than
@@ -391,7 +394,7 @@ UltraBall: ; e926
ld a, d
ld [wcf3f], a
xor a
- ld [hBattleTurn], a
+ ldh [hBattleTurn], a
ld [wBuffer2], a
ld [wcf46], a
predef PlayBattleAnim
@@ -631,7 +634,7 @@ UltraBall: ; e926
and a
jr z, .toss
call ClearBGPalettes
- call ClearTileMap
+ call ClearTilemap
.toss
ld hl, wNumItems
inc a
@@ -1163,11 +1166,11 @@ RareCandy: ; ef68 (3:6f68)
pop de
ld a, $8
call GetPartyParamLocation
- ld a, [hQuotient]
+ ldh a, [hQuotient]
ld [hli], a
- ld a, [hPrintNum3]
+ ldh a, [hPrintNum3]
ld [hli], a
- ld a, [hPrintNum4]
+ ldh a, [hPrintNum4]
ld [hl], a
ld a, $24
call GetPartyParamLocation
@@ -1475,10 +1478,10 @@ BitterBerry: ; f1c0
jr z, .asm_f1d9
res 7, [hl]
xor a
- ld [hBattleTurn], a
+ ldh [hBattleTurn], a
call Functionf7d0
ld hl, ConfusedNoMoreText
- call StdBattleTextBox
+ call StdBattleTextbox
ld a, $0
.asm_f1d9
jp Functionf0f4
@@ -1617,7 +1620,7 @@ Functionf2a0: ; f2a0 (3:72a0)
Functionf2cf: ; f2cf (3:72cf)
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
hlcoord 0, 0
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, " "
@@ -1625,7 +1628,7 @@ Functionf2cf: ; f2cf (3:72cf)
ld a, [wPartyMenuActionText]
call Functionf2a0
ld a, $1
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ld c, 50
call DelayFrames
jp WaitPressAorB_BlinkCursor
@@ -1803,16 +1806,16 @@ GetOneFifthMaxHP: ; f3ce (3:73ce)
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
- ld [hDividend], a
+ ldh [hDividend + 0], a
ld a, [hl]
- ld [hPrintNum2], a
- ld a, $5
- ld [hMultiplier], a
- ld b, $2
+ ldh [hDividend + 1], a
+ ld a, 5
+ ldh [hDivisor], a
+ ld b, 2
call Divide
- ld a, [hStringCmpString2]
+ ldh a, [hQuotient + 1]
ld d, a
- ld a, [hPrintNum4]
+ ldh a, [hQuotient + 2]
ld e, a
pop bc
ret
@@ -1917,7 +1920,7 @@ Functionf46f: ; f46f (3:746f)
.asm_f496
push bc
ld hl, Text_MilkDrinkCantBeUsed
- call MenuTextBoxBackup
+ call MenuTextboxBackup
pop bc
jr Functionf46f
@@ -2011,7 +2014,7 @@ XSpeed: ; f515
inc hl
ld b, [hl]
xor a
- ld [hBattleTurn], a
+ ldh [hBattleTurn], a
ld [wcb45], a
ld [wcbeb], a
farcall CheckIfStatCanBeRaised
@@ -2113,7 +2116,7 @@ Text_PlayedThePokeFlute:
CoinCase: ; f5e1 (3:75e1)
ld hl, Text_CoinCase
- jp MenuTextBoxWaitButton
+ jp MenuTextboxWaitButton
Text_CoinCase:
text_far Text_CoinCase_
@@ -2184,7 +2187,7 @@ PPUp: ; f606 (3:7606)
ld a, [hl]
ld [wd151], a
call GetMoveName
- call Function317b
+ call CopyName1
pop hl
ld a, [wceed]
cp PP_UP
@@ -2528,7 +2531,7 @@ Functionf7e7: ; f7e7 (3:77e7)
ld [wcf3f], a
xor a
ld [wcb67], a
- ld [hBattleTurn], a
+ ldh [hBattleTurn], a
ld [wcf46], a
predef PlayBattleAnim
ld hl, Text_BlockedTheBall
@@ -2669,16 +2672,18 @@ Functionf893: ; f893 (3:7893)
Functionf8c8: ; f8c8 (3:78c8)
push bc
+ ; Divide the base PP by 5.
ld a, [de]
- ld [hPrintNum4], a
+ ldh [hDividend + 3], a
xor a
- ld [hPastLeadingZeroes], a
- ld [hQuotient], a
- ld [hPrintNum3], a
- ld a, $5
- ld [hRemainder], a
- ld b, $4
+ ldh [hDividend], a
+ ldh [hDividend + 1], a
+ ldh [hDividend + 2], a
+ ld a, 5
+ ldh [hDivisor], a
+ ld b, 4
call Divide
+ ; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM.
ld a, [hl]
ld b, a
swap a
@@ -2686,10 +2691,11 @@ Functionf8c8: ; f8c8 (3:78c8)
srl a
srl a
ld c, a
+ ; If this value is 0, we are done
and a
jr z, .asm_f8fd
.asm_f8ea
- ld a, [hPrintNum4]
+ ldh a, [hPrintNum4]
cp $8
jr c, .asm_f8f2
ld a, $7
diff --git a/macros/coords.asm b/macros/coords.asm
index 0833c242..0fbf96cc 100755
--- a/macros/coords.asm
+++ b/macros/coords.asm
@@ -5,7 +5,7 @@ decoord EQUS "coord de,"
coord: MACRO
; register, x, y[, origin]
if _NARG < 4
- ld \1, (\3) * SCREEN_WIDTH + (\2) + wTileMap
+ ld \1, (\3) * SCREEN_WIDTH + (\2) + wTilemap
else
ld \1, (\3) * SCREEN_WIDTH + (\2) + \4
endc
@@ -27,7 +27,7 @@ ENDM
dwcoord: MACRO
; x, y
rept _NARG / 2
- dw (\2) * SCREEN_WIDTH + (\1) + wTileMap
+ dw (\2) * SCREEN_WIDTH + (\1) + wTilemap
shift
shift
endr
@@ -36,7 +36,7 @@ ENDM
ldcoord_a: MACRO
; x, y[, origin]
if _NARG < 3
- ld [(\2) * SCREEN_WIDTH + (\1) + wTileMap], a
+ ld [(\2) * SCREEN_WIDTH + (\1) + wTilemap], a
else
ld [(\2) * SCREEN_WIDTH + (\1) + \3], a
endc
@@ -45,7 +45,7 @@ ENDM
lda_coord: MACRO
; x, y[, origin]
if _NARG < 3
- ld a, [(\2) * SCREEN_WIDTH + (\1) + wTileMap]
+ ld a, [(\2) * SCREEN_WIDTH + (\1) + wTilemap]
else
ld a, [(\2) * SCREEN_WIDTH + (\1) + \3]
endc
diff --git a/main.asm b/main.asm
index 4cfa848f..2366a2e4 100644
--- a/main.asm
+++ b/main.asm
@@ -1,4 +1,3 @@
-INCLUDE "contents.asm"
INCLUDE "constants.asm"
@@ -9,8 +8,8 @@ INCLUDE "engine/link/place_waiting_text.asm"
DummyPredef1:
ret
-LoadPushOAM:: ; 4032 (1:4032)
- ld c, hPushOAM - $ff00
+WriteOAMDMACodeToHRAM:: ; 4032 (1:4032)
+ ld c, hTransferVirtualOAM - $ff00
ld b, PushOAMEnd - PushOAM
ld hl, PushOAM
.asm_4039
@@ -23,7 +22,7 @@ LoadPushOAM:: ; 4032 (1:4032)
PushOAM:
ld a, wVirtualOAM / $100
- ld [rDMA], a
+ ldh [rDMA], a
ld a, $28
.asm_4046
dec a
@@ -38,37 +37,37 @@ INCLUDE "engine/title.asm"
ReanchorBGMap_NoOAMUpdate:: ; 6551 (1:6551)
call DelayFrame
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
- ld a, [hBGMapMode]
+ ldh [hOAMUpdate], a
+ ldh a, [hBGMapMode]
push af
xor a
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
call Function656b
pop af
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
Function656b: ; 656b (1:656b)
xor a
- ld [hLCDCPointer], a
- ld [hBGMapMode], a
+ ldh [hLCDCPointer], a
+ ldh [hBGMapMode], a
ld hl, wd565
set 7, [hl]
res 2, [hl]
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
call OverworldTextModeSwitch
ld a, $9c
call .LoadBGMapAddrIntoHRAM
- call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
+ call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
xor a
- ld [hBGMapMode], a
- ld [hWY], a
+ ldh [hBGMapMode], a
+ ldh [hWY], a
ld a, $98
call .LoadBGMapAddrIntoHRAM
call .WaitTransfer
@@ -77,60 +76,60 @@ Function656b: ; 656b (1:656b)
ld a, $98
ld [wd05c], a
xor a
- ld [hSCX], a
- ld [hSCY], a
+ ldh [hSCX], a
+ ldh [hSCY], a
call ApplyBGMapAnchorToObjects
ret
.LoadBGMapAddrIntoHRAM: ; 65a5 (1:65a5)
- ld [hBGMapAddress + 1], a
+ ldh [hBGMapAddress + 1], a
xor a
- ld [hBGMapAddress], a
+ ldh [hBGMapAddress], a
ret
.WaitTransfer: ; 65ab (1:65ab)
- ld a, [hBGMapMode]
+ ldh a, [hBGMapMode]
push af
xor a
- ld [hBGMapMode], a
- ld a, [hOAMUpdate]
+ ldh [hBGMapMode], a
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ld a, $3
- ld [hFF9E], a
+ ldh [hVBlankCounter + 1], a
.asm_65bc
call DelayFrame
- ld a, [hFF9E]
+ ldh a, [hVBlankCounter + 1]
and a
jr nz, .asm_65bc
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
pop af
- ld [hBGMapMode], a
+ ldh [hBGMapMode], a
ret
LoadFonts_NoOAMUpdate:: ; 65cb (1:65cb)
- ld a, [hOAMUpdate]
+ ldh a, [hOAMUpdate]
push af
ld a, $1
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
call .LoadGFX
pop af
- ld [hOAMUpdate], a
+ ldh [hOAMUpdate], a
ret
.LoadGFX: ; 65d9 (1:65d9)
call LoadFontsExtra
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
call SafeUpdateSprites
call Functiond9e
ret
INCLUDE "engine/learn.asm"
-CheckNickErrors:: ; 677e (1:677e)
+CorrectNickErrors:: ; 677e (1:677e)
push bc
push de
ld b, MON_NAME_LENGTH
@@ -193,9 +192,9 @@ INCLUDE "engine/events/shuckle.asm"
INCLUDE "engine/events/haircut.asm"
SECTION "bank2", ROMX, BANK[$2]
-SwapTextboxPalettes::
- ld hl, wTileMap
- ld de, wAttrMap
+_SwapTextboxPalettes::
+ ld hl, wTilemap
+ ld de, wAttrmap
ld b, $12
.asm_8008
ld c, $14
@@ -248,7 +247,7 @@ SwapTextboxPalettes::
jr nz, .asm_8008
ret
-ScrollBGMapPalettes:: ; 804f (2:404f)
+_ScrollBGMapPalettes:: ; 804f (2:404f)
ld hl, wBGMapBuffer
ld de, wBGMapPalBuffer
.asm_8055
@@ -668,9 +667,9 @@ Function1416d:: ; 1416d
dr $1416d, $14226
LoadUsedSpritesGFX:
dr $14226, $14317
-DoesSpriteHaveFacings_:: ; 14317
+_DoesSpriteHaveFacings:: ; 14317
dr $14317, $14334
-GetSpritePalette_:: ; 14334
+_GetSpritePalette:: ; 14334
dr $14334, $14a18
Function14a18:: ; 14a18
dr $14a18, $14a2d
@@ -730,21 +729,21 @@ StringBufferPointers::
dr $24000, $2400e
_2DMenu_::
dr $2400e, $24136
-StaticMenuJoypad_::
+_StaticMenuJoypad::
dr $24136, $24139
-ScrollingMenuJoypad_::
+_ScrollingMenuJoypad::
dr $24139, $242a0
-PushWindow_::
+_PushWindow::
dr $242a0, $24307
-ExitMenu_::
+_ExitMenu::
dr $24307, $24395
-InitVerticalMenuCursor_::
+_InitVerticalMenuCursor::
dr $24395, $243eb
UpdateItemDescription:
dr $243eb, $244d7
-InitScrollingMenu::
+_InitScrollingMenu::
dr $244d7, $244f3
-ScrollingMenu_::
+_ScrollingMenu::
dr $244f3, $24834
SwitchItemsInBag:
dr $24834, $249dc
@@ -915,7 +914,7 @@ UpdateEnemyHUD::
LoadEnemyMon:
dr $3e74b, $3ec11
-BattleRandom_:: ; 3ec11
+_BattleRandom:: ; 3ec11
dr $3ec11, $3f196
FillInExpBar::
@@ -1131,7 +1130,7 @@ SECTION "bank20", ROMX, BANK[$20]
SECTION "bank21", ROMX, BANK[$21]
dr $84000, $842db
-PrinterReceive_:: ; 842db
+_PrinterReceive:: ; 842db
dr $842db, $84684
Function84684:
@@ -1210,10 +1209,10 @@ AnimatedObjects_PlayFrameAndDelay:
AnimatedObjects_PlayFrame:
dr $8d18a, $8d1f7
-InitAnimatedObjectStruct_:: ; 8d1f7
+_InitSpriteAnimStruct:: ; 8d1f7
dr $8d1f7, $8d332
-ReinitAnimatedObjectFrame_:: ; 8d332
+_ReinitSpriteAnimFrame:: ; 8d332
IF DEF(GOLD)
dr $8d332, $8e79f
@@ -1376,7 +1375,7 @@ DummyPredef39::
PlayBattleAnim::
dr $cc0d7, $cc283
-BattleAnimCommands::
+ClearBattleAnims::
dr $cc283, $cfce3
SECTION "bank34", ROMX, BANK[$34]
@@ -1518,7 +1517,7 @@ SECTION "bank70", ROMX, BANK[$70]
dr $1c0000, $1c0a66
UpdateTimePredef::
dr $1c0a66, $1c0de9
-DudeAutoInput_A::
+_DudeAutoInput_A::
dr $1c0de9, $1c0dee
DudeAutoInput_RightA::
diff --git a/maps/AzaleaGym.asm b/maps/AzaleaGym.asm
index a79efc76..79176a28 100644
--- a/maps/AzaleaGym.asm
+++ b/maps/AzaleaGym.asm
@@ -144,7 +144,7 @@ AzaleaGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext BUGSY, BUGSY1, MEM_BUFFER_1
+ trainertotext BUGSY, BUGSY1, STRING_BUFFER_4
jumpstd gymstatue2
BugsyText_INeverLose:
diff --git a/maps/BlackthornGym1F.asm b/maps/BlackthornGym1F.asm
index d4a3a71a..87b35414 100644
--- a/maps/BlackthornGym1F.asm
+++ b/maps/BlackthornGym1F.asm
@@ -143,7 +143,7 @@ BlackthornGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext CLAIR, CLAIR1, MEM_BUFFER_1
+ trainertotext CLAIR, CLAIR1, STRING_BUFFER_4
jumpstd gymstatue2
ClairIntroText:
diff --git a/maps/CeladonCafe.asm b/maps/CeladonCafe.asm
index 77227fbe..07359b6d 100644
--- a/maps/CeladonCafe.asm
+++ b/maps/CeladonCafe.asm
@@ -94,7 +94,7 @@ CeladonCafeTrashcan:
giveitem LEFTOVERS
iffalse .PackFull
opentext
- itemtotext LEFTOVERS, MEM_BUFFER_0
+ itemtotext LEFTOVERS, STRING_BUFFER_3
writetext FoundLeftoversText
playsound SFX_ITEM
waitsfx
@@ -105,7 +105,7 @@ CeladonCafeTrashcan:
.PackFull:
opentext
- itemtotext LEFTOVERS, MEM_BUFFER_0
+ itemtotext LEFTOVERS, STRING_BUFFER_3
writetext FoundLeftoversText
buttonsound
writetext NoRoomForLeftoversText
diff --git a/maps/CeladonDeptStore6F.asm b/maps/CeladonDeptStore6F.asm
index 80c810f9..52cc573e 100644
--- a/maps/CeladonDeptStore6F.asm
+++ b/maps/CeladonDeptStore6F.asm
@@ -33,7 +33,7 @@ CeladonDeptStore6FVendingMachine:
giveitem FRESH_WATER
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 200
- itemtotext FRESH_WATER, MEM_BUFFER_0
+ itemtotext FRESH_WATER, STRING_BUFFER_3
jump .VendItem
.SodaPop:
@@ -42,7 +42,7 @@ CeladonDeptStore6FVendingMachine:
giveitem SODA_POP
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 300
- itemtotext SODA_POP, MEM_BUFFER_0
+ itemtotext SODA_POP, STRING_BUFFER_3
jump .VendItem
.Lemonade:
@@ -51,7 +51,7 @@ CeladonDeptStore6FVendingMachine:
giveitem LEMONADE
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 350
- itemtotext LEMONADE, MEM_BUFFER_0
+ itemtotext LEMONADE, STRING_BUFFER_3
jump .VendItem
.VendItem:
diff --git a/maps/CeladonGameCorner.asm b/maps/CeladonGameCorner.asm
index beab8cae..1b29dc01 100644
--- a/maps/CeladonGameCorner.asm
+++ b/maps/CeladonGameCorner.asm
@@ -58,7 +58,7 @@ CeladonGameCornerFisherScript:
iffalse .NoCoinCase
checkcoins MAX_COINS - 1
ifequal HAVE_MORE, .FullCoinCase
- stringtotext .coinname, MEM_BUFFER_1
+ stringtotext .coinname, STRING_BUFFER_4
scall .GiveCoins
givecoins 18
setevent EVENT_GOT_COINS_FROM_GAMBLER_AT_CELADON
diff --git a/maps/CeladonGameCornerPrizeRoom.asm b/maps/CeladonGameCornerPrizeRoom.asm
index 82642f83..543dcf82 100644
--- a/maps/CeladonGameCornerPrizeRoom.asm
+++ b/maps/CeladonGameCornerPrizeRoom.asm
@@ -34,7 +34,7 @@ CeladonPrizeRoom_tmcounterloop:
.doubleteam
checkcoins 1500
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
- itemtotext TM_DOUBLE_TEAM, MEM_BUFFER_0
+ itemtotext TM_DOUBLE_TEAM, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
giveitem TM_DOUBLE_TEAM
@@ -45,7 +45,7 @@ CeladonPrizeRoom_tmcounterloop:
.psychic
checkcoins 3500
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
- itemtotext TM_PSYCHIC_M, MEM_BUFFER_0
+ itemtotext TM_PSYCHIC_M, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
giveitem TM_PSYCHIC_M
@@ -56,7 +56,7 @@ CeladonPrizeRoom_tmcounterloop:
.hyperbeam
checkcoins 7500
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
- itemtotext TM_HYPER_BEAM, MEM_BUFFER_0
+ itemtotext TM_HYPER_BEAM, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
giveitem TM_HYPER_BEAM
@@ -137,7 +137,7 @@ CeladonGameCornerPrizeRoomPokemonVendor:
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, CeladonPrizeRoom_notenoughroom
- pokenamemem MR__MIME, MEM_BUFFER_0
+ pokenamemem MR__MIME, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
waitsfx
@@ -155,7 +155,7 @@ CeladonGameCornerPrizeRoomPokemonVendor:
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, CeladonPrizeRoom_notenoughroom
- pokenamemem EEVEE, MEM_BUFFER_0
+ pokenamemem EEVEE, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
waitsfx
@@ -173,7 +173,7 @@ CeladonGameCornerPrizeRoomPokemonVendor:
ifequal HAVE_LESS, CeladonPrizeRoom_notenoughcoins
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, CeladonPrizeRoom_notenoughroom
- pokenamemem PORYGON, MEM_BUFFER_0
+ pokenamemem PORYGON, STRING_BUFFER_3
scall CeladonPrizeRoom_askbuy
iffalse CeladonPrizeRoom_cancel
waitsfx
diff --git a/maps/CeladonGym.asm b/maps/CeladonGym.asm
index 89e8540a..38b09b84 100644
--- a/maps/CeladonGym.asm
+++ b/maps/CeladonGym.asm
@@ -107,7 +107,7 @@ CeladonGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext ERIKA, ERIKA1, MEM_BUFFER_1
+ trainertotext ERIKA, ERIKA1, STRING_BUFFER_4
jumpstd gymstatue2
ErikaBeforeBattleText:
diff --git a/maps/CeruleanGym.asm b/maps/CeruleanGym.asm
index 4fff92cd..fc0c3faf 100644
--- a/maps/CeruleanGym.asm
+++ b/maps/CeruleanGym.asm
@@ -158,7 +158,7 @@ CeruleanGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext MISTY, MISTY1, MEM_BUFFER_1
+ trainertotext MISTY, MISTY1, STRING_BUFFER_4
jumpstd gymstatue2
CeruleanGymGruntRunsDownMovement:
diff --git a/maps/CherrygroveCity.asm b/maps/CherrygroveCity.asm
index 85a27b65..ee281738 100644
--- a/maps/CherrygroveCity.asm
+++ b/maps/CherrygroveCity.asm
@@ -67,7 +67,7 @@ CherrygroveCityGuideGent:
opentext
writetext GuideGentGiftText
buttonsound
- stringtotext .mapcardname, MEM_BUFFER_1
+ stringtotext .mapcardname, STRING_BUFFER_4
scall .JumpstdReceiveItem
setflag ENGINE_MAP_CARD
writetext GotMapCardText
diff --git a/maps/CianwoodGym.asm b/maps/CianwoodGym.asm
index 8a43fe43..6dfc8257 100644
--- a/maps/CianwoodGym.asm
+++ b/maps/CianwoodGym.asm
@@ -136,7 +136,7 @@ CianwoodGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext CHUCK, CHUCK1, MEM_BUFFER_1
+ trainertotext CHUCK, CHUCK1, STRING_BUFFER_4
jumpstd gymstatue2
CianwoodGymMovement_ChuckChucksBoulder:
diff --git a/maps/DragonsDenB1F.asm b/maps/DragonsDenB1F.asm
index 0496893a..75d63cd0 100644
--- a/maps/DragonsDenB1F.asm
+++ b/maps/DragonsDenB1F.asm
@@ -37,7 +37,7 @@ DragonsDenB1FDragonFangScript:
iffalse .BagFullDragonFang
disappear DRAGONSDENB1F_POKE_BALL1
opentext
- itemtotext DRAGON_FANG, MEM_BUFFER_0
+ itemtotext DRAGON_FANG, STRING_BUFFER_3
writetext Text_FoundDragonFang
playsound SFX_ITEM
waitsfx
@@ -79,7 +79,7 @@ DragonsDenB1FDragonFangScript:
.BagFullDragonFang:
opentext
- itemtotext DRAGON_FANG, MEM_BUFFER_0
+ itemtotext DRAGON_FANG, STRING_BUFFER_3
writetext Text_FoundDragonFang
buttonsound
writetext Text_NoRoomForDragonFang
diff --git a/maps/EcruteakGym.asm b/maps/EcruteakGym.asm
index d1ec88a3..bd47d9d7 100644
--- a/maps/EcruteakGym.asm
+++ b/maps/EcruteakGym.asm
@@ -133,7 +133,7 @@ EcruteakGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext MORTY, MORTY1, MEM_BUFFER_1
+ trainertotext MORTY, MORTY1, STRING_BUFFER_4
jumpstd gymstatue2
MortyIntroText:
diff --git a/maps/ElmsLab.asm b/maps/ElmsLab.asm
index 4f7ef7b5..167c1025 100644
--- a/maps/ElmsLab.asm
+++ b/maps/ElmsLab.asm
@@ -133,7 +133,7 @@ CyndaquilPokeBallScript:
writetext ChoseStarterText
buttonsound
waitsfx
- pokenamemem CYNDAQUIL, MEM_BUFFER_0
+ pokenamemem CYNDAQUIL, STRING_BUFFER_3
writetext ReceivedStarterText
playsound SFX_CAUGHT_MON
waitsfx
@@ -163,7 +163,7 @@ TotodilePokeBallScript:
writetext ChoseStarterText
buttonsound
waitsfx
- pokenamemem TOTODILE, MEM_BUFFER_0
+ pokenamemem TOTODILE, STRING_BUFFER_3
writetext ReceivedStarterText
playsound SFX_CAUGHT_MON
waitsfx
@@ -191,7 +191,7 @@ ChikoritaPokeBallScript:
writetext ChoseStarterText
buttonsound
waitsfx
- pokenamemem CHIKORITA, MEM_BUFFER_0
+ pokenamemem CHIKORITA, STRING_BUFFER_3
writetext ReceivedStarterText
playsound SFX_CAUGHT_MON
waitsfx
@@ -455,7 +455,7 @@ AideScript_GiveYouBalls:
opentext
writetext AideText_GiveYouBalls
buttonsound
- itemtotext POKE_BALL, MEM_BUFFER_1
+ itemtotext POKE_BALL, STRING_BUFFER_4
scall AideScript_ReceiveTheBalls
giveitem POKE_BALL, 5
writetext AideText_ExplainBalls
diff --git a/maps/FuchsiaGym.asm b/maps/FuchsiaGym.asm
index 6b9c4b2b..e6a5e9bc 100644
--- a/maps/FuchsiaGym.asm
+++ b/maps/FuchsiaGym.asm
@@ -214,7 +214,7 @@ FuchsiaGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext JANINE, JANINE1, MEM_BUFFER_1
+ trainertotext JANINE, JANINE1, STRING_BUFFER_4
jumpstd gymstatue2
Movement_NinjaSpin:
diff --git a/maps/GoldenrodDeptStore6F.asm b/maps/GoldenrodDeptStore6F.asm
index b11be1ed..6b92d7c9 100644
--- a/maps/GoldenrodDeptStore6F.asm
+++ b/maps/GoldenrodDeptStore6F.asm
@@ -27,7 +27,7 @@ GoldenrodVendingMachine:
giveitem FRESH_WATER
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 200
- itemtotext FRESH_WATER, MEM_BUFFER_0
+ itemtotext FRESH_WATER, STRING_BUFFER_3
jump .VendItem
.SodaPop:
@@ -36,7 +36,7 @@ GoldenrodVendingMachine:
giveitem SODA_POP
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 300
- itemtotext SODA_POP, MEM_BUFFER_0
+ itemtotext SODA_POP, STRING_BUFFER_3
jump .VendItem
.Lemonade:
@@ -45,7 +45,7 @@ GoldenrodVendingMachine:
giveitem LEMONADE
iffalse .NotEnoughSpace
takemoney YOUR_MONEY, 350
- itemtotext LEMONADE, MEM_BUFFER_0
+ itemtotext LEMONADE, STRING_BUFFER_3
jump .VendItem
.VendItem:
diff --git a/maps/GoldenrodGameCorner.asm b/maps/GoldenrodGameCorner.asm
index ea87b115..b75414bb 100644
--- a/maps/GoldenrodGameCorner.asm
+++ b/maps/GoldenrodGameCorner.asm
@@ -40,7 +40,7 @@ GoldenrodGameCornerTMVendor_LoopScript:
.Thunder:
checkcoins 5500
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
- itemtotext TM_THUNDER, MEM_BUFFER_0
+ itemtotext TM_THUNDER, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
giveitem TM_THUNDER
@@ -51,7 +51,7 @@ GoldenrodGameCornerTMVendor_LoopScript:
.Blizzard:
checkcoins 5500
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
- itemtotext TM_BLIZZARD, MEM_BUFFER_0
+ itemtotext TM_BLIZZARD, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
giveitem TM_BLIZZARD
@@ -62,7 +62,7 @@ GoldenrodGameCornerTMVendor_LoopScript:
.FireBlast:
checkcoins 5500
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
- itemtotext TM_FIRE_BLAST, MEM_BUFFER_0
+ itemtotext TM_FIRE_BLAST, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
giveitem TM_FIRE_BLAST
@@ -145,7 +145,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem ABRA, MEM_BUFFER_0
+ pokenamemem ABRA, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
@@ -163,7 +163,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem EKANS, MEM_BUFFER_0
+ pokenamemem EKANS, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
@@ -181,7 +181,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem DRATINI, MEM_BUFFER_0
+ pokenamemem DRATINI, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
@@ -224,7 +224,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem ABRA, MEM_BUFFER_0
+ pokenamemem ABRA, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
@@ -242,7 +242,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem SANDSHREW, MEM_BUFFER_0
+ pokenamemem SANDSHREW, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
@@ -260,7 +260,7 @@ GoldenrodGameCornerPrizeMonVendorScript:
ifequal HAVE_LESS, GoldenrodGameCornerPrizeVendor_NotEnoughCoinsScript
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, GoldenrodGameCornerPrizeMonVendor_NoRoomForPrizeScript
- pokenamemem DRATINI, MEM_BUFFER_0
+ pokenamemem DRATINI, STRING_BUFFER_3
scall GoldenrodGameCornerPrizeVendor_ConfirmPurchaseScript
iffalse GoldenrodGameCornerPrizeVendor_CancelPurchaseScript
waitsfx
diff --git a/maps/GoldenrodGym.asm b/maps/GoldenrodGym.asm
index 9da4a895..2370857e 100644
--- a/maps/GoldenrodGym.asm
+++ b/maps/GoldenrodGym.asm
@@ -169,7 +169,7 @@ GoldenrodGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext WHITNEY, WHITNEY1, MEM_BUFFER_1
+ trainertotext WHITNEY, WHITNEY1, STRING_BUFFER_4
jumpstd gymstatue2
BridgetWalksUpMovement:
diff --git a/maps/LavRadioTower1F.asm b/maps/LavRadioTower1F.asm
index 5fc1c49b..7e931de3 100644
--- a/maps/LavRadioTower1F.asm
+++ b/maps/LavRadioTower1F.asm
@@ -34,7 +34,7 @@ LavRadioTower1FGentlemanScript:
.ReturnedMachinePart:
writetext LavRadioTower1FGentlemanText_ReturnedMachinePart
buttonsound
- stringtotext .expncardname, MEM_BUFFER_1
+ stringtotext .expncardname, STRING_BUFFER_4
scall .receiveitem
setflag ENGINE_EXPN_CARD
.GotExpnCard:
diff --git a/maps/MahoganyGym.asm b/maps/MahoganyGym.asm
index f578597f..a8da6137 100644
--- a/maps/MahoganyGym.asm
+++ b/maps/MahoganyGym.asm
@@ -144,7 +144,7 @@ MahoganyGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext PRYCE, PRYCE1, MEM_BUFFER_1
+ trainertotext PRYCE, PRYCE1, STRING_BUFFER_4
jumpstd gymstatue2
PryceText_Intro:
diff --git a/maps/NationalPark.asm b/maps/NationalPark.asm
index df5da9d4..b0f1d0ed 100644
--- a/maps/NationalPark.asm
+++ b/maps/NationalPark.asm
@@ -93,7 +93,7 @@ TrainerSchoolboyJack1:
askforphonenumber PHONE_SCHOOLBOY_JACK
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext SCHOOLBOY, JACK1, MEM_BUFFER_0
+ trainertotext SCHOOLBOY, JACK1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -187,7 +187,7 @@ TrainerPokefanfBeverly1:
askforphonenumber PHONE_POKEFAN_BEVERLY
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext POKEFANF, BEVERLY1, MEM_BUFFER_0
+ trainertotext POKEFANF, BEVERLY1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/OlivineGym.asm b/maps/OlivineGym.asm
index 536d3c6e..d1787cb0 100644
--- a/maps/OlivineGym.asm
+++ b/maps/OlivineGym.asm
@@ -89,7 +89,7 @@ OlivineGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext JASMINE, JASMINE1, MEM_BUFFER_1
+ trainertotext JASMINE, JASMINE1, STRING_BUFFER_4
jumpstd gymstatue2
Jasmine_SteelTypeIntro:
diff --git a/maps/OlivineLighthouse2F.asm b/maps/OlivineLighthouse2F.asm
index cf98f65e..02f0d84a 100644
--- a/maps/OlivineLighthouse2F.asm
+++ b/maps/OlivineLighthouse2F.asm
@@ -42,7 +42,7 @@ TrainerSailorHuey:
askforphonenumber PHONE_SAILOR_HUEY
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext SAILOR, HUEY1, MEM_BUFFER_0
+ trainertotext SAILOR, HUEY1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/PewterGym.asm b/maps/PewterGym.asm
index e540b213..292bfb75 100644
--- a/maps/PewterGym.asm
+++ b/maps/PewterGym.asm
@@ -70,7 +70,7 @@ PewterGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext BROCK, BROCK1, MEM_BUFFER_1
+ trainertotext BROCK, BROCK1, STRING_BUFFER_4
jumpstd gymstatue2
BrockIntroText:
diff --git a/maps/PlayersHouse1F.asm b/maps/PlayersHouse1F.asm
index 91e0cc54..8b9c071a 100644
--- a/maps/PlayersHouse1F.asm
+++ b/maps/PlayersHouse1F.asm
@@ -27,7 +27,7 @@ MeetMomScript:
opentext
writetext ElmsLookingForYouText
buttonsound
- stringtotext GearName, MEM_BUFFER_1
+ stringtotext GearName, STRING_BUFFER_4
scall PlayersHouse1FReceiveItemStd
setflag ENGINE_POKEGEAR
setflag ENGINE_PHONE_CARD
diff --git a/maps/RadioTower1F.asm b/maps/RadioTower1F.asm
index 0350ae51..c760da0e 100644
--- a/maps/RadioTower1F.asm
+++ b/maps/RadioTower1F.asm
@@ -146,7 +146,7 @@ RadioTower1FRadioCardWomanScript:
waitsfx
writetext UnknownText_0x5d37b
buttonsound
- stringtotext .RadioCardText, MEM_BUFFER_1
+ stringtotext .RadioCardText, STRING_BUFFER_4
scall .ReceiveItem
writetext UnknownText_0x5d3c0
buttonsound
diff --git a/maps/Route26.asm b/maps/Route26.asm
index aa6de49a..e99f4929 100644
--- a/maps/Route26.asm
+++ b/maps/Route26.asm
@@ -48,7 +48,7 @@ TrainerCooltrainermGaven3:
askforphonenumber PHONE_COOLTRAINERM_GAVEN
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext COOLTRAINERM, GAVEN3, MEM_BUFFER_0
+ trainertotext COOLTRAINERM, GAVEN3, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -142,7 +142,7 @@ TrainerCooltrainerfBeth1:
askforphonenumber PHONE_COOLTRAINERF_BETH
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext COOLTRAINERF, BETH1, MEM_BUFFER_0
+ trainertotext COOLTRAINERF, BETH1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route27.asm b/maps/Route27.asm
index e08ac68b..e32f013e 100644
--- a/maps/Route27.asm
+++ b/maps/Route27.asm
@@ -81,7 +81,7 @@ TrainerBirdKeeperJose2:
askforphonenumber PHONE_BIRDKEEPER_JOSE
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext BIRD_KEEPER, JOSE2, MEM_BUFFER_0
+ trainertotext BIRD_KEEPER, JOSE2, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -186,7 +186,7 @@ TrainerCooltrainerfReena:
askforphonenumber PHONE_COOLTRAINERF_REENA
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext COOLTRAINERF, REENA1, MEM_BUFFER_0
+ trainertotext COOLTRAINERF, REENA1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route30.asm b/maps/Route30.asm
index 5e47855b..3b5707eb 100644
--- a/maps/Route30.asm
+++ b/maps/Route30.asm
@@ -60,7 +60,7 @@ TrainerYoungsterJoey:
askforphonenumber PHONE_YOUNGSTER_JOEY
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext YOUNGSTER, JOEY1, MEM_BUFFER_0
+ trainertotext YOUNGSTER, JOEY1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route31.asm b/maps/Route31.asm
index 7f47a1b2..78b143d0 100644
--- a/maps/Route31.asm
+++ b/maps/Route31.asm
@@ -46,7 +46,7 @@ TrainerBugCatcherWade1:
askforphonenumber PHONE_BUG_CATCHER_WADE
ifequal PHONE_CONTACTS_FULL, .PhoneFullSTD
ifequal PHONE_CONTACT_REFUSED, .DeclinedNumberSTD
- trainertotext BUG_CATCHER, WADE1, MEM_BUFFER_0
+ trainertotext BUG_CATCHER, WADE1, STRING_BUFFER_3
scall .RegisterNumberSTD
jump .AcceptedNumberSTD
diff --git a/maps/Route32.asm b/maps/Route32.asm
index 799c7e9d..43b77274 100644
--- a/maps/Route32.asm
+++ b/maps/Route32.asm
@@ -187,7 +187,7 @@ TrainerFisherRalph1:
askforphonenumber PHONE_FISHER_RALPH
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext FISHER, RALPH1, MEM_BUFFER_0
+ trainertotext FISHER, RALPH1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -281,7 +281,7 @@ TrainerPicnickerLiz1:
askforphonenumber PHONE_PICNICKER_LIZ
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext PICNICKER, LIZ1, MEM_BUFFER_0
+ trainertotext PICNICKER, LIZ1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route33.asm b/maps/Route33.asm
index 29e7d497..7af007ee 100644
--- a/maps/Route33.asm
+++ b/maps/Route33.asm
@@ -32,7 +32,7 @@ TrainerHikerAnthony:
askforphonenumber PHONE_HIKER_ANTHONY
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext HIKER, ANTHONY2, MEM_BUFFER_0
+ trainertotext HIKER, ANTHONY2, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route34.asm b/maps/Route34.asm
index be42a190..aa0f332c 100644
--- a/maps/Route34.asm
+++ b/maps/Route34.asm
@@ -109,7 +109,7 @@ TrainerCamperTodd1:
askforphonenumber PHONE_CAMPER_TODD
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext CAMPER, TODD1, MEM_BUFFER_0
+ trainertotext CAMPER, TODD1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -192,7 +192,7 @@ TrainerPicnickerGina1:
askforphonenumber PHONE_PICNICKER_GINA
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext PICNICKER, GINA1, MEM_BUFFER_0
+ trainertotext PICNICKER, GINA1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route35.asm b/maps/Route35.asm
index fc2c80fa..954ea960 100644
--- a/maps/Route35.asm
+++ b/maps/Route35.asm
@@ -51,7 +51,7 @@ TrainerJugglerIrwin:
askforphonenumber PHONE_JUGGLER_IRWIN
ifequal PHONE_CONTACTS_FULL, Route35PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route35NumberDeclinedM
- trainertotext JUGGLER, IRWIN1, MEM_BUFFER_0
+ trainertotext JUGGLER, IRWIN1, STRING_BUFFER_3
scall Route35RegisteredNumberM
jump Route35NumberAcceptedM
@@ -178,7 +178,7 @@ TrainerBugCatcherArnie:
askforphonenumber PHONE_BUG_CATCHER_ARNIE
ifequal PHONE_CONTACTS_FULL, Route35PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route35NumberDeclinedM
- trainertotext BUG_CATCHER, ARNIE1, MEM_BUFFER_0
+ trainertotext BUG_CATCHER, ARNIE1, STRING_BUFFER_3
scall Route35RegisteredNumberM
jump Route35NumberAcceptedM
diff --git a/maps/Route35NationalParkGate.asm b/maps/Route35NationalParkGate.asm
index 18520fdd..3ba3036f 100644
--- a/maps/Route35NationalParkGate.asm
+++ b/maps/Route35NationalParkGate.asm
@@ -57,7 +57,7 @@ Route35NationalParkGate_MapScripts:
opentext
checkcode VAR_CONTESTMINUTES
addvar 1
- vartomem MEM_BUFFER_0
+ vartomem STRING_BUFFER_3
writetext UnknownText_0x6a79a
yesorno
iffalse .GoBackToContest
diff --git a/maps/Route36.asm b/maps/Route36.asm
index 992107e4..00196c92 100644
--- a/maps/Route36.asm
+++ b/maps/Route36.asm
@@ -136,7 +136,7 @@ TrainerSchoolboyAlan1:
askforphonenumber PHONE_SCHOOLBOY_ALAN
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext SCHOOLBOY, ALAN1, MEM_BUFFER_0
+ trainertotext SCHOOLBOY, ALAN1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route36NationalParkGate.asm b/maps/Route36NationalParkGate.asm
index 8e967b6c..a5c983e2 100644
--- a/maps/Route36NationalParkGate.asm
+++ b/maps/Route36NationalParkGate.asm
@@ -66,7 +66,7 @@ Route36NationalParkGate_MapScripts:
opentext
checkcode VAR_CONTESTMINUTES
addvar 1
- vartomem MEM_BUFFER_0
+ vartomem STRING_BUFFER_3
writetext UnknownText_0x6b284
yesorno
iffalse .GoBackToContest
diff --git a/maps/Route38.asm b/maps/Route38.asm
index da7645d6..6dc1d046 100644
--- a/maps/Route38.asm
+++ b/maps/Route38.asm
@@ -58,7 +58,7 @@ TrainerLassDana1:
askforphonenumber PHONE_LASS_DANA
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .DeclinedPhoneNumber
- trainertotext LASS, DANA1, MEM_BUFFER_0
+ trainertotext LASS, DANA1, STRING_BUFFER_3
scall .RegisteredPhoneNumber
jump .NumberAccepted
@@ -141,7 +141,7 @@ TrainerSchoolboyChad1:
askforphonenumber PHONE_SCHOOLBOY_CHAD
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .SaidNo
- trainertotext SCHOOLBOY, CHAD1, MEM_BUFFER_0
+ trainertotext SCHOOLBOY, CHAD1, STRING_BUFFER_3
scall .RegisteredChad
jump .HaveChadsNumber
diff --git a/maps/Route39.asm b/maps/Route39.asm
index 069e8cad..53b4edf8 100644
--- a/maps/Route39.asm
+++ b/maps/Route39.asm
@@ -47,7 +47,7 @@ TrainerPokefanmDerek:
askforphonenumber PHONE_POKEFANM_DEREK
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext POKEFANM, DEREK1, MEM_BUFFER_0
+ trainertotext POKEFANM, DEREK1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route42.asm b/maps/Route42.asm
index 622286ce..55736f29 100644
--- a/maps/Route42.asm
+++ b/maps/Route42.asm
@@ -38,7 +38,7 @@ TrainerFisherChris:
askforphonenumber PHONE_FISHER_CHRIS
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext FISHER, CHRIS1, MEM_BUFFER_0
+ trainertotext FISHER, CHRIS1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route43.asm b/maps/Route43.asm
index 9fc3d56e..d0fce5df 100644
--- a/maps/Route43.asm
+++ b/maps/Route43.asm
@@ -70,7 +70,7 @@ TrainerPokemaniacBrent:
askforphonenumber PHONE_POKEMANIAC_BRENT
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext POKEMANIAC, BRENT1, MEM_BUFFER_0
+ trainertotext POKEMANIAC, BRENT1, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
@@ -175,7 +175,7 @@ TrainerPicnickerTiffany:
askforphonenumber PHONE_PICNICKER_TIFFANY
ifequal PHONE_CONTACTS_FULL, .PhoneFull
ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
- trainertotext PICNICKER, TIFFANY3, MEM_BUFFER_0
+ trainertotext PICNICKER, TIFFANY3, STRING_BUFFER_3
scall .RegisteredNumber
jump .NumberAccepted
diff --git a/maps/Route44.asm b/maps/Route44.asm
index 1f6f0177..27e0ba1e 100644
--- a/maps/Route44.asm
+++ b/maps/Route44.asm
@@ -40,7 +40,7 @@ TrainerBirdKeeperVance1:
askforphonenumber PHONE_BIRDKEEPER_VANCE
ifequal PHONE_CONTACTS_FULL, Route44PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route44NumberDeclinedM
- trainertotext BIRD_KEEPER, VANCE1, MEM_BUFFER_0
+ trainertotext BIRD_KEEPER, VANCE1, STRING_BUFFER_3
scall Route44RegisteredNumberM
jump Route44NumberAcceptedM
@@ -134,7 +134,7 @@ TrainerFisherWilton1:
askforphonenumber PHONE_FISHER_WILTON
ifequal PHONE_CONTACTS_FULL, Route44PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route44NumberDeclinedM
- trainertotext FISHER, WILTON1, MEM_BUFFER_0
+ trainertotext FISHER, WILTON1, STRING_BUFFER_3
scall Route44RegisteredNumberM
jump Route44NumberAcceptedM
diff --git a/maps/Route45.asm b/maps/Route45.asm
index 0d84ef4f..59a02c9a 100644
--- a/maps/Route45.asm
+++ b/maps/Route45.asm
@@ -42,7 +42,7 @@ TrainerBlackbeltKenji:
askforphonenumber PHONE_BLACKBELT_KENJI
ifequal PHONE_CONTACTS_FULL, Route45PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route45NumberDeclinedM
- trainertotext BLACKBELT_T, KENJI3, MEM_BUFFER_0
+ trainertotext BLACKBELT_T, KENJI3, STRING_BUFFER_3
scall Route45RegisteredNumberM
jump Route45NumberAcceptedM
@@ -147,7 +147,7 @@ TrainerHikerParry:
askforphonenumber PHONE_HIKER_PARRY
ifequal PHONE_CONTACTS_FULL, Route45PhoneFullM
ifequal PHONE_CONTACT_REFUSED, Route45NumberDeclinedM
- trainertotext HIKER, PARRY1, MEM_BUFFER_0
+ trainertotext HIKER, PARRY1, STRING_BUFFER_3
scall Route45RegisteredNumberM
jump Route45NumberAcceptedM
diff --git a/maps/Route46.asm b/maps/Route46.asm
index ea36aed9..a48d973b 100644
--- a/maps/Route46.asm
+++ b/maps/Route46.asm
@@ -46,7 +46,7 @@ TrainerPicnickerErin1:
askforphonenumber PHONE_PICNICKER_ERIN
ifequal PHONE_CONTACTS_FULL, Route46PhoneFullF
ifequal PHONE_CONTACT_REFUSED, Route46NumberDeclinedF
- trainertotext PICNICKER, ERIN1, MEM_BUFFER_0
+ trainertotext PICNICKER, ERIN1, STRING_BUFFER_3
scall Route46RegisteredNumberF
jump Route46NumberAcceptedF
diff --git a/maps/SaffronGym.asm b/maps/SaffronGym.asm
index c495d110..5e2e0674 100644
--- a/maps/SaffronGym.asm
+++ b/maps/SaffronGym.asm
@@ -109,7 +109,7 @@ SaffronGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext SABRINA, SABRINA1, MEM_BUFFER_1
+ trainertotext SABRINA, SABRINA1, STRING_BUFFER_4
jumpstd gymstatue2
UnknownText_0x189cdf:
diff --git a/maps/TrainerHouseB1F.asm b/maps/TrainerHouseB1F.asm
index 1380d805..bbd836e4 100644
--- a/maps/TrainerHouseB1F.asm
+++ b/maps/TrainerHouseB1F.asm
@@ -20,11 +20,11 @@ TrainerHouseReceptionistScript:
buttonsound
special TrainerHouse
iffalse .GetCal3Name
- trainertotext CAL, CAL2, MEM_BUFFER_0
+ trainertotext CAL, CAL2, STRING_BUFFER_3
jump .GotName
.GetCal3Name:
- trainertotext CAL, CAL3, MEM_BUFFER_0
+ trainertotext CAL, CAL3, STRING_BUFFER_3
.GotName:
writetext TrainerHouseB1FYourOpponentIsText
buttonsound
diff --git a/maps/VermilionGym.asm b/maps/VermilionGym.asm
index 7fce0c31..992d8fb6 100644
--- a/maps/VermilionGym.asm
+++ b/maps/VermilionGym.asm
@@ -99,7 +99,7 @@ VermilionGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext LT_SURGE, LT_SURGE1, MEM_BUFFER_1
+ trainertotext LT_SURGE, LT_SURGE1, STRING_BUFFER_4
jumpstd gymstatue2
LtSurgeIntroText:
diff --git a/maps/VioletGym.asm b/maps/VioletGym.asm
index 4fefeba5..5aaf8ef6 100644
--- a/maps/VioletGym.asm
+++ b/maps/VioletGym.asm
@@ -107,7 +107,7 @@ VioletGymStatue:
iftrue .Beaten
jumpstd gymstatue1
.Beaten:
- trainertotext FALKNER, FALKNER1, MEM_BUFFER_1
+ trainertotext FALKNER, FALKNER1, STRING_BUFFER_4
jumpstd gymstatue2
FalknerIntroText:
diff --git a/maps/VioletPokecenter1F.asm b/maps/VioletPokecenter1F.asm
index b2e64a16..8895a987 100644
--- a/maps/VioletPokecenter1F.asm
+++ b/maps/VioletPokecenter1F.asm
@@ -25,7 +25,7 @@ VioletPokecenter1F_ElmsAideScript:
checkcode VAR_PARTYCOUNT
ifequal PARTY_LENGTH, .PartyFull
giveegg TOGEPI, 5
- stringtotext .eggname, MEM_BUFFER_1
+ stringtotext .eggname, STRING_BUFFER_4
scall .AideGivesEgg
setevent EVENT_GOT_TOGEPI_EGG_FROM_ELMS_AIDE
clearevent EVENT_ELMS_AIDE_IN_LAB
diff --git a/maps/ViridianGym.asm b/maps/ViridianGym.asm
index 88562e89..f3ae1b8a 100644
--- a/maps/ViridianGym.asm
+++ b/maps/ViridianGym.asm
@@ -58,7 +58,7 @@ ViridianGymStatue:
jumpstd gymstatue1
.Beaten:
- trainertotext BLUE, BLUE1, MEM_BUFFER_1
+ trainertotext BLUE, BLUE1, STRING_BUFFER_4
jumpstd gymstatue2
LeaderBlueBeforeText:
diff --git a/pokegold.link b/pokegold.link
index 0ce9ca26..522d6a8b 100644
--- a/pokegold.link
+++ b/pokegold.link
@@ -1,5 +1,6 @@
ROM0
org $0000
+ "NULL"
"rst0"
org $0008
"rst8"
@@ -24,9 +25,9 @@ ROM0
org $0060
"joypad"
org $0100
- "start"
+ "Header"
org $0150
- "bank0"
+ "Home"
ROMX $01
org $4000
"bank1"
diff --git a/pokesilver.link b/pokesilver.link
index 0ce9ca26..522d6a8b 100644
--- a/pokesilver.link
+++ b/pokesilver.link
@@ -1,5 +1,6 @@
ROM0
org $0000
+ "NULL"
"rst0"
org $0008
"rst8"
@@ -24,9 +25,9 @@ ROM0
org $0060
"joypad"
org $0100
- "start"
+ "Header"
org $0150
- "bank0"
+ "Home"
ROMX $01
org $4000
"bank1"
diff --git a/predef/cgb.asm b/predef/cgb.asm
index 748c3f15..a7baefe8 100755
--- a/predef/cgb.asm
+++ b/predef/cgb.asm
@@ -1,5 +1,5 @@
CheckCGB:
- ld a, [hCGB]
+ ldh a, [hCGB]
and a
ret
@@ -115,31 +115,31 @@ asm_93e1
ld de, wTempBGPal7
ld bc, $8
call CopyBytes
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, $2
call ByteFill
- hlcoord 0, 4, wAttrMap
+ hlcoord 0, 4, wAttrmap
lb bc, $8, $a
ld a, $0
call Function9af1
- hlcoord 10, 0, wAttrMap
+ hlcoord 10, 0, wAttrmap
lb bc, $7, $a
ld a, $1
call Function9af1
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
lb bc, $4, $a
ld a, $2
call Function9af1
- hlcoord 10, 7, wAttrMap
+ hlcoord 10, 7, wAttrmap
lb bc, $5, $a
ld a, $3
call Function9af1
- hlcoord 10, 11, wAttrMap
+ hlcoord 10, 11, wAttrmap
lb bc, $1, $9
ld a, $4
call Function9af1
- hlcoord 0, 12, wAttrMap
+ hlcoord 0, 12, wAttrmap
ld bc, $78
ld a, $7
call ByteFill
@@ -157,7 +157,7 @@ Function944a: ; 944a (2:544a)
call CopyBytes
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function945e: ; 945e (2:545e)
@@ -181,30 +181,30 @@ Function945e: ; 945e (2:545e)
ld bc, $18
call CopyBytes
call Function9b1d
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
lb bc, $8, $14
ld a, $1
call Function9af1
- hlcoord 10, 16, wAttrMap
+ hlcoord 10, 16, wAttrmap
ld bc, $a
ld a, $2
call ByteFill
- hlcoord 13, 5, wAttrMap
+ hlcoord 13, 5, wAttrmap
lb bc, $2, $2
ld a, $3
call Function9af1
- hlcoord 15, 5, wAttrMap
+ hlcoord 15, 5, wAttrmap
lb bc, $2, $2
ld a, $4
call Function9af1
- hlcoord 17, 5, wAttrMap
+ hlcoord 17, 5, wAttrmap
lb bc, $2, $2
ld a, $5
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Palettes_94d3:
@@ -232,7 +232,7 @@ StatsScreenPals:
Function94f1: ; 94f1 (2:54f1)
call Function9513
- hlcoord 1, 1, wAttrMap
+ hlcoord 1, 1, wAttrmap
lb bc, 7, 7
ld a, $1
call Function9af1
@@ -240,7 +240,7 @@ Function94f1: ; 94f1 (2:54f1)
Function9502: ; 9502 (2:5502)
call Function9513
- hlcoord 1, 1, wAttrMap
+ hlcoord 1, 1, wAttrmap
lb bc, 5, 5
ld a, $1
call Function9af1
@@ -274,7 +274,7 @@ Function9537: ; 9537 (2:5537)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Palettes_9551:
@@ -307,7 +307,7 @@ Function9561: ; 9561 (2:5561)
call Function9adb
.asm_9584
call Function9b1d
- hlcoord 1, 4, wAttrMap
+ hlcoord 1, 4, wAttrmap
lb bc, 7, 7
ld a, $1
call Function9af1
@@ -315,7 +315,7 @@ Function9561: ; 9561 (2:5561)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function95a0:
@@ -329,7 +329,7 @@ Function95a8:
call Function9adb
asm_95b1
call Function9b1d
- hlcoord 1, 1, wAttrMap
+ hlcoord 1, 1, wAttrmap
lb bc, 7, 7
ld a, $1
call Function9af1
@@ -337,7 +337,7 @@ asm_95b1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Palettes_95cd:
@@ -355,7 +355,7 @@ Function95d5: ; 95d5 (2:55d5)
call Function9be4
call Function9adb
call Function9b1d
- hlcoord 7, 5, wAttrMap
+ hlcoord 7, 5, wAttrmap
lb bc, 7, 7
ld a, $1
call Function9af1
@@ -363,7 +363,7 @@ Function95d5: ; 95d5 (2:55d5)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function9605: ; 9605 (2:5605)
@@ -372,50 +372,50 @@ Function9605: ; 9605 (2:5605)
ld bc, $80
call CopyBytes
call Function9b1d
- hlcoord 0, 2, wAttrMap
+ hlcoord 0, 2, wAttrmap
lb bc, $a, $3
ld a, $2
call Function9af1
- hlcoord 17, 2, wAttrMap
+ hlcoord 17, 2, wAttrmap
lb bc, $a, $3
ld a, $2
call Function9af1
- hlcoord 0, 4, wAttrMap
+ hlcoord 0, 4, wAttrmap
lb bc, $6, $3
ld a, $3
call Function9af1
- hlcoord 17, 4, wAttrMap
+ hlcoord 17, 4, wAttrmap
lb bc, $6, $3
ld a, $3
call Function9af1
- hlcoord 0, 6, wAttrMap
+ hlcoord 0, 6, wAttrmap
lb bc, $2, $3
ld a, $4
call Function9af1
- hlcoord 17, 6, wAttrMap
+ hlcoord 17, 6, wAttrmap
lb bc, $2, $3
ld a, $4
call Function9af1
- hlcoord 4, 2, wAttrMap
+ hlcoord 4, 2, wAttrmap
lb bc, $2, $c
ld a, $1
call Function9af1
- hlcoord 3, 2, wAttrMap
+ hlcoord 3, 2, wAttrmap
lb bc, $a, $1
ld a, $1
call Function9af1
- hlcoord 16, 2, wAttrMap
+ hlcoord 16, 2, wAttrmap
lb bc, $a, $1
ld a, $1
call Function9af1
- hlcoord 0, 12, wAttrMap
+ hlcoord 0, 12, wAttrmap
ld bc, $78
ld a, $7
call ByteFill
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function968d: ; 968d (2:568d)
@@ -426,14 +426,14 @@ Function968d: ; 968d (2:568d)
ld a, $3c
call Function9ac7
call Function9ad2
- hlcoord 0, 6, wAttrMap
+ hlcoord 0, 6, wAttrmap
lb bc, $c, $14
ld a, $1
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function96b7: ; 96b7 (2:56b7)
@@ -565,7 +565,7 @@ Function976d: ; 976d (2:576d)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function97af: ; 97af (2:57af)
@@ -581,7 +581,7 @@ Function97af: ; 97af (2:57af)
ld [wColorLayoutPredefID], a
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function97d4: ; 97d4 (2:57d4)
@@ -636,48 +636,48 @@ Function9802: ; 9802 (2:5802)
ld a, $24
call Function9ac7
call Function9ad2
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
ld bc, $168
ld a, $1
call ByteFill
- hlcoord 14, 1, wAttrMap
+ hlcoord 14, 1, wAttrmap
lb bc, $7, $5
xor a
call Function9af1
- hlcoord 18, 1, wAttrMap
+ hlcoord 18, 1, wAttrmap
ld [hl], $1
- hlcoord 2, 11, wAttrMap
+ hlcoord 2, 11, wAttrmap
lb bc, $2, $4
ld a, $1
call Function9af1
- hlcoord 6, 11, wAttrMap
+ hlcoord 6, 11, wAttrmap
lb bc, $2, $4
ld a, $2
call Function9af1
- hlcoord 10, 11, wAttrMap
+ hlcoord 10, 11, wAttrmap
lb bc, $2, $4
ld a, $3
call Function9af1
- hlcoord 14, 11, wAttrMap
+ hlcoord 14, 11, wAttrmap
lb bc, $2, $4
ld a, $4
call Function9af1
- hlcoord 2, 14, wAttrMap
+ hlcoord 2, 14, wAttrmap
lb bc, $2, $4
ld a, $5
call Function9af1
- hlcoord 6, 14, wAttrMap
+ hlcoord 6, 14, wAttrmap
lb bc, $2, $4
ld a, $6
call Function9af1
- hlcoord 10, 14, wAttrMap
+ hlcoord 10, 14, wAttrmap
lb bc, $2, $4
ld a, $7
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function98be: ; 98be (2:58be)
@@ -694,14 +694,14 @@ Function98be: ; 98be (2:58be)
add hl, bc
call Function9adb
call Function9b1d
- hlcoord 11, 1, wAttrMap
+ hlcoord 11, 1, wAttrmap
lb bc, $2, $9
ld a, $1
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function98f1: ; 98f1 (2:58f1)
@@ -711,7 +711,7 @@ Function98f1: ; 98f1 (2:58f1)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function9905: ; 9905 (2:5905)
@@ -723,7 +723,7 @@ Function9905: ; 9905 (2:5905)
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function991e: ; 991e (2:591e)
@@ -732,30 +732,30 @@ Function991e: ; 991e (2:591e)
ld bc, $40
call CopyBytes
call Function9b1d
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
lb bc, $1, $a
ld a, $1
call Function9af1
- hlcoord 10, 0, wAttrMap
+ hlcoord 10, 0, wAttrmap
lb bc, $1, $a
ld a, $2
call Function9af1
- hlcoord 7, 2, wAttrMap
+ hlcoord 7, 2, wAttrmap
lb bc, $9, $1
ld a, $3
call Function9af1
- hlcoord 0, 7, wAttrMap
+ hlcoord 0, 7, wAttrmap
lb bc, $3, $5
ld a, $4
call Function9af1
- hlcoord 0, 3, wAttrMap
+ hlcoord 0, 3, wAttrmap
lb bc, $3, $5
ld a, $5
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Palettes_996f:
@@ -791,9 +791,9 @@ Palettes_996f:
Function999f: ; 999f (2:599f)
call Function9757
- call FarCallSwapTextboxPalettes
+ call SwapTextboxPalettes
ld de, $14
- hlcoord 0, 0, wAttrMap
+ hlcoord 0, 0, wAttrmap
ld a, [wMenuBorderTopCoord]
.asm_99ae
and a
@@ -828,18 +828,18 @@ Function99d9: ; 99d9 (2:59d9)
ld hl, PalPacket_a015 + 1
call Function9ab2
call Function9b1d
- hlcoord 0, 4, wAttrMap
+ hlcoord 0, 4, wAttrmap
lb bc, $a, $14
ld a, $2
call Function9af1
- hlcoord 0, 6, wAttrMap
+ hlcoord 0, 6, wAttrmap
lb bc, $6, $14
ld a, $1
call Function9af1
call Function9b35
call Function9b28
ld a, $1
- ld [hCGBPalUpdate], a
+ ldh [hCGBPalUpdate], a
ret
Function9a03: ; 9a03 (2:5a03)
diff --git a/wram.asm b/wram.asm
index 53e3d02b..203a78fa 100644
--- a/wram.asm
+++ b/wram.asm
@@ -1,4 +1,3 @@
-INCLUDE "contents.asm"
INCLUDE "constants.asm"
INCLUDE "macros/wram.asm"
@@ -122,23 +121,23 @@ SECTION "WRAM", WRAM0
wLZAddress:: dw ; c2c2
wLZBank:: db ; c2c4
-wBoxAlignment:: db
+wBoxAlignment:: db ; c2c5
wInputType:: db ; c2c6
wAutoInputAddress:: dw ; c2c7
wAutoInputBank:: db ; c2c9
wAutoInputLength:: db ; c2ca
-wMonStatusFlags:: ds 1 ; c1cb
+wDebugFlags:: ds 1 ; c1cb
wGameLogicPaused:: ds 1 ; c1cc
-wRTCEnabled:: ds 1
+wSpriteUpdatesEnabled:: db
wc1ce:: ds 1 ; c1ce
wMapTimeOfDay:: ds 1 ; c1cf
ds 3
wPrinterConnectionOpen:: ds 1
wPrinterOpcode:: ds 1 ; c1d4
wc1d5:: ds 1 ; c1d5
-wc1d6:: ds 1 ; c1d6
+wDisableTextAcceleration:: ds 1 ; c1d6
wc1d7:: ds 1 ; c1d7
wc1d8:: ds 1 ; c1d8
wc1d9:: ds 1 ; c1d9
@@ -245,13 +244,13 @@ wVirtualOAMEnd::
SECTION "TileMap", WRAM0
-wTileMap:: ; c3a0
+wTilemap:: ; c3a0
ds SCREEN_HEIGHT * SCREEN_WIDTH
-wTileMapEnd:: ; c508
+wTilemapEnd:: ; c508
SECTION "Animated Objects", WRAM0
wMisc:: ; c508
-wTileMapBackup:: ; c508
+wTempTileMap:: ; c508
; ds SCREEN_HEIGHT * SCREEN_WIDTH
wAnimatedObjectDynamicVTileOffsets:: ds 10 * 2 ; c508
wAnimatedObjectStructs:: ; c51c
@@ -877,7 +876,7 @@ wc7fe:: ds 1 ; c7fe
wc7ff:: ds 1 ; c7ff
wLYOverridesEnd::
-wLYOverridesBuffer::
+wLYOverridesBackup::
wc800:: ds 1 ; c800
wc801:: ds 1 ; c801
wc802:: ds 1 ; c802
@@ -2065,9 +2064,9 @@ wccd6:: ds 1 ; ccd6
wccd7:: ds 1 ; ccd7
wccd8:: ds 1 ; ccd8
-wAttrMap:: ; ccd9
+wAttrmap:: ; ccd9
ds SCREEN_HEIGHT * SCREEN_WIDTH
-wAttrMapEnd:: ; ce41
+wAttrmapEnd:: ; ce41
wce41:: ds 1 ; ce41
wce42:: ds 1 ; ce42
@@ -2099,7 +2098,7 @@ wLinkTimeoutFrames:: ds 2
wce5d:: ds 2 ; ce5d
wMonType:: ds 1 ; ce5f
wCurSpecies:: ds 1 ; ce60
-wce61:: ds 1 ; ce61
+wNamedObjectTypeBuffer:: ds 1 ; ce61
wce62:: ds 1 ; ce62
wce63::
wJumpTableIndex::
@@ -2146,9 +2145,9 @@ wce87:: ds 1 ; ce87
wce88:: ds 1 ; ce88
wce89:: ds 1 ; ce89
wce8a:: ds 1 ; ce8a
-wMovementPerson:: ds 1 ; ce8b
-wMovementDataPointerBank:: ds 1 ; ce8c
-wMovementDataPointerAddr:: dw ; ce8d
+wMovementObject:: ds 1 ; ce8b
+wMovementDataBank:: ds 1 ; ce8c
+wMovementDataAddress:: dw ; ce8d
wce8f:: ds 1 ; ce8f
wce90:: ds 1 ; ce90
wce91:: ds 1 ; ce91
@@ -2194,13 +2193,14 @@ wceb6:: ds 1 ; ceb6
wceb7:: ds 1 ; ceb7
wWindowDataEnd::
-wMenuDataHeader::
+wMenuHeader::
+wMenuFlags::
wceb8:: ds 1 ; ceb8
wMenuBorderTopCoord:: ds 1 ; ceb9
wMenuBorderLeftCoord:: ds 1 ; ceba
wMenuBorderBottomCoord:: ds 1 ; cebb
wMenuBorderRightCoord:: ds 1 ; cebc
-wMenuData2Pointer:: dw ; cebd
+wMenuDataPointer:: dw ; cebd
wMenuCursorBuffer:: ds 1 ; cebf
wcec0:: ds 1 ; cec0
wcec1:: ds 1 ; cec1
@@ -2210,15 +2210,15 @@ wcec4:: ds 1 ; cec4
wcec5:: ds 1 ; cec5
wcec6:: ds 1 ; cec6
wcec7:: ds 1 ; cec7
-wMenuDataHeaderEnd::
+wMenuHeaderEnd::
-wMenuData2::
-wMenuData2Flags:: ds 1 ; cec8
-wMenuData2Items:: ds 1 ; cec9
-wMenuData2IndicesPointer:: ds 1 ; ceca
+wMenuData::
+wMenuDataFlags:: ds 1 ; cec8
+wMenuDataItems:: ds 1 ; cec9
+wMenuDataIndicesPointer:: ds 1 ; ceca
wMenuDataBank:: ds 1 ; cecb
-wMenuData2DisplayFunctionPointer:: dw ; cecc
-wMenuData2PointerTableAddr:: ds 1 ; cece
+wMenuDataDisplayFunctionPointer:: dw ; cecc
+wMenuDataPointerTableAddr:: ds 1 ; cece
wcecf:: ds 1 ; cecf
wced0:: ds 1 ; ced0
wced1:: ds 1 ; ced1
@@ -2228,14 +2228,14 @@ wced4:: ds 1 ; ced4
wced5:: ds 1 ; ced5
wced6:: ds 1 ; ced6
wced7:: ds 1 ; ced7
-wMenuData2End::
+wMenuDataEnd::
wMenuData3::
w2DMenuCursorInitY:: ds 1 ; ced8
wced9:: ds 1 ; ced9
wceda:: ds 1 ; ceda
wcedb:: ds 1 ; cedb
-wcedc:: ds 1 ; cedc
+w2DMenuFlags1:: ds 1 ; cedc
wcedd:: ds 1 ; cedd
wcede:: ds 1 ; cede
wMenuJoypadFilter:: ds 1 ; cedf
@@ -2259,7 +2259,7 @@ wceec:: ds 1 ; ceec
wMovementBufferCount:: ; ceed
wceed:: ds 1 ; ceed
-wMovementBufferPerson::
+wMovementBufferObject::
wceee:: ds 1 ; ceee
wTemporaryBuffer::
@@ -2328,10 +2328,13 @@ 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
-wTempTrainerHeader::
+wTempTrainer::
wcf2c:: ds 1 ; cf2c
wcf2d:: ds 1 ; cf2d
wcf2e:: ds 1 ; cf2e
@@ -2342,8 +2345,9 @@ wWinTextPointer:: dw ; cf32
wLossTextPointer:: dw ; cf34
wcf36:: ds 1 ; cf36
wcf37:: ds 1 ; cf37
+wRunningTrainerBattleScript::
wcf38:: ds 1 ; cf38
-wTempTrainerHeaderEnd::
+wTempTrainerEnd::
wcf39:: ds 1 ; cf39
wcf3a:: ds 1 ; cf3a
wcf3b:: ds 1 ; cf3b
@@ -2424,8 +2428,8 @@ wcfd4:: ds 1 ; cfd4
wcfd5:: ds 1 ; cfd5
wcfd6:: ds 1 ; cfd6
wcfd7:: ds 1 ; cfd7
-wcfd8:: ds 1 ; cfd8
-wcfd9:: ds 1 ; cfd9
+wQueuedScriptBank:: ds 1 ; cfd8
+wQueuedScriptAddr:: ds 1 ; cfd9
wcfda:: ds 1 ; cfda
wPredefID:: ds 1 ; cfdb
wPredefTemp:: dw ; cfdc
@@ -2697,7 +2701,8 @@ wTrainerClass:: ds 1 ; d11d
wd11e:: ds 1 ; d11e
wd11f:: ds 1 ; d11f
-wBaseData:: ; d120
+wBaseDexNo:: ; d120
+wCurBaseData:: ; d120
wd120:: ds 1 ; d120
wd121:: ds 1 ; d121
wd122:: ds 1 ; d122
@@ -2715,7 +2720,9 @@ wd12d:: ds 1 ; d12d
wd12e:: ds 1 ; d12e
wBaseEggSteps:: db ; d12f
wd130:: ds 1 ; d130
+wBasePicSize::
wd131:: ds 1 ; d131
+wBaseUnusedFrontpic::
wd132:: ds 1 ; d132
wd133:: ds 1 ; d133
wd134:: ds 1 ; d134
@@ -2730,7 +2737,7 @@ wd13c:: ds 1 ; d13c
wd13d:: ds 1 ; d13d
wd13e:: ds 1 ; d13e
wd13f:: ds 1 ; d13f
-wBaseDataEnd::
+wCurBaseDataEnd::
wd140:: ds 1 ; d140
wCurDamage:: ds 2 ; d141
@@ -2752,6 +2759,7 @@ wTempNumBuffer::
wNamedObjectIndexBuffer::
wDeciramBuffer::
wBreedingCompatibility::
+wNumSetBits::
wd151:: ds 1 ; d151
wd152:: ds 1 ; d152
wd153:: ds 1 ; d153
@@ -3381,8 +3389,8 @@ wd940:: ds 1 ; d940
wCurrentMapTriggerPointer:: dw ; d941
wd943:: ds 1 ; d943
wd944:: ds 1 ; d944
-wCurrMapWarpCount:: ds 1 ; d945
-wCurrMapWarpHeaderPointer:: dw ; d946
+wCurMapWarpCount:: ds 1 ; d945
+wCurMapWarpsPointer:: dw ; d946
wd948:: ds 1 ; d948
wd949:: ds 1 ; d949
wd94a:: ds 1 ; d94a
@@ -3553,9 +3561,11 @@ wMapData::
wVisitedSpawns:: ds 4 ; flag_array NUM_SPAWNS ; d9ee
warp_struct wDig ; d9f2
-wd9f5:: ds 1 ; d9f5
-wd9f6:: ds 1 ; d9f6
-wd9f7:: ds 1 ; d9f7
+
+wBackupWarpNumber:: db ; d9f5
+wBackupMapGroup:: db ; d9f6
+wBackupMapNumber:: db ; d9f7
+
wd9f8:: ds 1 ; d9f8
wd9f9:: ds 1 ; d9f9
wd9fa:: ds 1 ; d9fa
@@ -3778,3 +3788,5 @@ wStackTop::
ds 1
INCLUDE "sram.asm"
+
+INCLUDE "hram.asm" \ No newline at end of file