diff options
159 files changed, 6071 insertions, 6216 deletions
@@ -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 @@ -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 - @@ -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 @@ -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) @@ -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 |