diff options
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/anim_hp_bar.asm | 137 | ||||
-rw-r--r-- | engine/battle_start.asm | 12 | ||||
-rwxr-xr-x | engine/billspctop.asm | 388 | ||||
-rw-r--r-- | engine/color.asm | 374 | ||||
-rwxr-xr-x | engine/health.asm | 110 | ||||
-rwxr-xr-x | engine/init_gender.asm | 2 | ||||
-rwxr-xr-x | engine/items.asm | 584 | ||||
-rwxr-xr-x | engine/main_menu.asm | 2 | ||||
-rw-r--r-- | engine/map_setup.asm | 2 | ||||
-rwxr-xr-x | engine/mon_icons.asm | 25 | ||||
-rw-r--r-- | engine/movement.asm | 8 | ||||
-rwxr-xr-x | engine/namingscreen.asm | 6 | ||||
-rw-r--r-- | engine/party_menu.asm | 8 | ||||
-rw-r--r-- | engine/phone.asm | 11 | ||||
-rwxr-xr-x | engine/player_movement.asm | 4 | ||||
-rwxr-xr-x | engine/player_object.asm | 856 | ||||
-rwxr-xr-x | engine/pokecenter_pc.asm | 247 | ||||
-rwxr-xr-x | engine/pokegear.asm | 23 | ||||
-rwxr-xr-x | engine/printnum.asm | 300 | ||||
-rwxr-xr-x | engine/scrolling_menu.asm | 6 | ||||
-rwxr-xr-x | engine/sine.asm | 50 | ||||
-rwxr-xr-x | engine/startmenu.asm | 88 | ||||
-rwxr-xr-x | engine/tile_events.asm | 10 | ||||
-rwxr-xr-x | engine/time.asm | 4 | ||||
-rwxr-xr-x | engine/trade/animation.asm | 2 |
25 files changed, 2710 insertions, 549 deletions
diff --git a/engine/anim_hp_bar.asm b/engine/anim_hp_bar.asm index c00a97921..404e6cbc3 100755 --- a/engine/anim_hp_bar.asm +++ b/engine/anim_hp_bar.asm @@ -1,46 +1,46 @@ _AnimateHPBar: ; d627 - call Functiond65f - jr c, .do_player - call Functiond670 -.enemy_loop + call .IsMaximumMoreThan48Pixels + jr c, .MoreThan48Pixels + call .ComputePixels +.ShortAnimLoop push bc push hl - call Functiond6e2 + call ShortAnim_UpdateVariables pop hl pop bc push af push bc push hl - call Functiond730 - call Functiond7c9 + call ShortHPBarAnim_UpdateTiles + call HPBarAnim_BGMapUpdate pop hl pop bc pop af - jr nc, .enemy_loop + jr nc, .ShortAnimLoop ret -.do_player - call Functiond670 -.player_loop +.MoreThan48Pixels + call .ComputePixels +.LongAnimLoop push bc push hl - call Functiond6f5 + call LongAnim_UpdateVariables pop hl pop bc ret c push af push bc push hl - call Functiond749 - call Functiond7c9 + call LongHPBarAnim_UpdateTiles + call HPBarAnim_BGMapUpdate pop hl pop bc pop af - jr nc, .player_loop + jr nc, .LongAnimLoop ret ; d65f -Functiond65f: ; d65f +.IsMaximumMoreThan48Pixels: ; d65f ld a, [Buffer2] and a jr nz, .player @@ -55,7 +55,7 @@ Functiond65f: ; d65f ret ; d670 -Functiond670: ; d670 +.ComputePixels: ; d670 ; Buffer1-2: Max HP ; Buffer3-4: Old HP ; Buffer5-6: New HP @@ -72,7 +72,7 @@ Functiond670: ; d670 pop hl call ComputeHPBarPixels ld a, e - ld [wd1f1], a + ld [wCurHPBarPixels], a ld a, [Buffer5] ld c, a @@ -84,7 +84,7 @@ Functiond670: ; d670 ld d, a call ComputeHPBarPixels ld a, e - ld [wd1f2], a + ld [wNewHPBarPixels], a push hl ld hl, Buffer3 @@ -103,15 +103,15 @@ Functiond670: ; d670 ld a, d sbc b ld d, a - jr c, .asm_d6c1 + jr c, .negative ld a, [Buffer3] ld [wd1f5], a ld a, [Buffer5] ld [wd1f6], a ld bc, 1 - jr .asm_d6d9 + jr .got_direction -.asm_d6c1 +.negative ld a, [Buffer3] ld [wd1f6], a ld a, [Buffer5] @@ -123,8 +123,8 @@ Functiond670: ; d670 ld a, d xor $ff ld d, a - ld bc, rIE -.asm_d6d9 + ld bc, -1 +.got_direction ld a, d ld [wd1f3], a ld a, e @@ -132,25 +132,25 @@ Functiond670: ; d670 ret ; d6e2 -Functiond6e2: ; d6e2 - ld hl, wd1f1 - ld a, [wd1f2] +ShortAnim_UpdateVariables: ; d6e2 + ld hl, wCurHPBarPixels + ld a, [wNewHPBarPixels] cp [hl] - jr nz, .asm_d6ed + jr nz, .not_finished scf ret -.asm_d6ed +.not_finished ld a, c add [hl] ld [hl], a - call Functiond839 + call ShortHPBar_CalcPixelFrame and a ret ; d6f5 -Functiond6f5: ; d6f5 -.asm_d6f5 +LongAnim_UpdateVariables: ; d6f5 +.loop ld hl, Buffer3 ld a, [hli] ld e, a @@ -158,22 +158,22 @@ Functiond6f5: ; d6f5 ld d, a ld a, e cp [hl] - jr nz, .asm_d707 + jr nz, .next inc hl ld a, d cp [hl] - jr nz, .asm_d707 + jr nz, .next scf ret -.asm_d707 +.next ld l, e ld h, d add hl, bc ld a, l ld [Buffer3], a ld a, h - ld [wd1ed], a + ld [Buffer4], a push hl push de push bc @@ -186,40 +186,45 @@ Functiond6f5: ; d6f5 ld c, a ld a, [hli] ld b, a + ; This routine is buggy. The result from ComputeHPBarPixels is stored + ; in e. However, the pop de opcode deletes this result before it is even + ; used. The game then proceeds as though it never deleted that output. + ; To fix, uncomment the line below. call ComputeHPBarPixels + ; ld a, e pop bc pop de pop hl - ld a, e - ld hl, wd1f1 + ld a, e ; Comment or delete this line to fix the above bug. + ld hl, wCurHPBarPixels cp [hl] - jr z, .asm_d6f5 + jr z, .loop ld [hl], a and a ret ; d730 -Functiond730: ; d730 - call Functiond784 +ShortHPBarAnim_UpdateTiles: ; d730 + call HPBarAnim_UpdateHPRemaining ld d, $6 ld a, [wWhichHPBar] and $1 ld b, a - ld a, [wd1f1] + ld a, [wCurHPBarPixels] ld e, a ld c, a push de - call Functiond771 + call HPBarAnim_RedrawHPBar pop de - call Functiond7b4 + call HPBarAnim_PaletteUpdate ret ; d749 -Functiond749: ; d749 - call Functiond784 +LongHPBarAnim_UpdateTiles: ; d749 + call HPBarAnim_UpdateHPRemaining ld a, [Buffer3] ld c, a - ld a, [wd1ed] + ld a, [Buffer4] ld b, a ld a, [Buffer1] ld e, a @@ -232,20 +237,20 @@ Functiond749: ; d749 and $1 ld b, a push de - call Functiond771 + call HPBarAnim_RedrawHPBar pop de - call Functiond7b4 + call HPBarAnim_PaletteUpdate ret ; d771 -Functiond771: ; d771 +HPBarAnim_RedrawHPBar: ; d771 ld a, [wWhichHPBar] cp $2 jr nz, .skip - ld a, $28 + ld a, 2 * SCREEN_WIDTH add l ld l, a - ld a, $0 + ld a, 0 adc h ld h, a .skip @@ -253,17 +258,17 @@ Functiond771: ; d771 ret ; d784 -Functiond784: ; d784 +HPBarAnim_UpdateHPRemaining: ; d784 ld a, [wWhichHPBar] and a ret z cp $1 jr z, .load_15 - ld de, $16 + ld de, SCREEN_WIDTH + 2 jr .loaded_de .load_15 - ld de, $15 + ld de, SCREEN_WIDTH + 1 .loaded_de push hl add hl, de @@ -275,7 +280,7 @@ endr dec hl ld a, [Buffer3] ld [StringBuffer2 + 1], a - ld a, [wd1ed] + ld a, [Buffer4] ld [StringBuffer2], a ld de, StringBuffer2 lb bc, 2, 3 @@ -284,7 +289,7 @@ endr ret ; d7b4 -Functiond7b4: ; d7b4 +HPBarAnim_PaletteUpdate: ; d7b4 ld a, [hCGB] and a ret z @@ -296,7 +301,7 @@ Functiond7b4: ; d7b4 ret ; d7c9 -Functiond7c9: ; d7c9 +HPBarAnim_BGMapUpdate: ; d7c9 ld a, [hCGB] and a jr nz, .cgb @@ -312,13 +317,13 @@ Functiond7c9: ; d7c9 jr z, .load_1 ld a, [CurPartyMon] cp $3 - jr nc, .c_is_1 + jr nc, .bottom_half_of_screen ld c, $0 - jr .c_is_0 + jr .got_third -.c_is_1 +.bottom_half_of_screen ld c, $1 -.c_is_0 +.got_third push af cp $2 jr z, .skip_delay @@ -370,14 +375,14 @@ Functiond7c9: ; d7c9 ret ; d839 -Functiond839: ; d839 +ShortHPBar_CalcPixelFrame: ; d839 ld a, [Buffer1] ld c, a ld b, 0 ld hl, 0 - ld a, [wd1f1] + ld a, [wCurHPBarPixels] cp 6 * 8 - jr nc, .coppy_buffer + jr nc, .return_max and a jr z, .return_zero call AddNTimes @@ -423,7 +428,7 @@ Functiond839: ; d839 ld [Buffer3], a ret -.coppy_buffer +.return_max ld a, [Buffer1] ld [Buffer3], a ret diff --git a/engine/battle_start.asm b/engine/battle_start.asm index 6fb64e9b1..083469b0d 100644 --- a/engine/battle_start.asm +++ b/engine/battle_start.asm @@ -1,5 +1,5 @@ Predef_StartBattle: ; 8c20f - call Function8c26d + call .InitGFX ld a, [rBGP] ld [wBGP], a ld a, [rOBP0] @@ -52,15 +52,15 @@ Predef_StartBattle: ; 8c20f ret ; 8c26d -Function8c26d: ; 8c26d +.InitGFX: ; 8c26d ld a, [wLinkMode] cp LINK_MOBILE jr z, .mobile callba Function6454 call UpdateSprites call DelayFrame - call Function8c2a0 - call Function8cf4f + call .NonMobile_LoadPokeballTiles + call BattleStart_LoadEDTile jr .resume .mobile @@ -81,7 +81,7 @@ Function8c26d: ; 8c26d ret ; 8c2a0 -Function8c2a0: ; 8c2a0 +.NonMobile_LoadPokeballTiles: ; 8c2a0 call LoadTrainerBattlePokeballTiles hlbgcoord 0, 0 call Function8c2cf @@ -663,7 +663,7 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) ld a, $1 ld [hCGBPalUpdate], a call DelayFrame - call Function8cf4f + call BattleStart_LoadEDTile .nextscene: ; 8c673 (23:4673) call StartTrainerBattle_NextScene diff --git a/engine/billspctop.asm b/engine/billspctop.asm new file mode 100755 index 000000000..038341ccc --- /dev/null +++ b/engine/billspctop.asm @@ -0,0 +1,388 @@ +_BillsPC: ; e3fd + call .CheckCanUsePC + ret c + call .LogIn + call .UseBillsPC + jp .LogOut + +.CheckCanUsePC: ; e40a (3:640a) + ld a, [PartyCount] + and a + ret nz + ld hl, .Text_GottaHavePokemon + call MenuTextBoxBackup + scf + ret + +.Text_GottaHavePokemon: ; 0xe417 + ; You gotta have #MON to call! + text_jump UnknownText_0x1c1006 + db "@" + +.LogIn: ; e41c (3:641c) + xor a + ld [hBGMapMode], a + call LoadStandardMenuDataHeader + call ClearPCItemScreen + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + ld hl, .Text_What + call PrintText + pop af + ld [Options], a + call LoadFontsBattleExtra + ret + +.Text_What: ; 0xe43a + ; What? + text_jump UnknownText_0x1c1024 + db "@" + +.LogOut: ; e43f (3:643f) + call CloseSubmenu + ret + +.UseBillsPC: ; e443 (3:6443) + ld hl, .MenuDataHeader + call LoadMenuDataHeader + ld a, $1 +.loop + ld [wMenuCursorBuffer], a + call SetPalettes + xor a + ld [wWhichIndexSet], a + ld [hBGMapMode], a + call DoNthMenu + jr c, .cancel + ld a, [wMenuCursorBuffer] + push af + ld a, [MenuSelection] + ld hl, .Jumptable + rst JumpTable + pop bc + ld a, b + jr nc, .loop +.cancel + call CloseWindow + ret + +.MenuDataHeader: ; 0xe46f + db $40 ; flags + db 00, 00 ; start coords + db 17, 19 ; end coords + dw .MenuData2 + db 1 ; default option + +.MenuData2: ; 0xe477 + db $80 ; flags + db 0 ; items + dw .items + dw PlaceMenuStrings + dw .strings + +.strings: ; e47f + db "WITHDRAW <PK><MN>@" + db "DEPOSIT <PK><MN>@" + db "CHANGE BOX@" + db "MOVE <PK><MN> W/O MAIL@" + db "SEE YA!@" + +.Jumptable: ; e4ba (3:64ba) + dw BillsPC_WithdrawMenu + dw BillsPC_DepositMenu + dw BillsPC_ChangeBoxMenu + dw BillsPC_MovePKMNMenu + dw BillsPC_SeeYa + +.items: ; e4c4 + db 5 + db 0 ; WITHDRAW + db 1; DEPOSIT + db 2 ; CHANGE BOX + db 3 ; MOVE PKMN + db 4 ; SEE YA! + db -1 + +BillsPC_SeeYa: ; e4cb + scf + ret + +BillsPC_MovePKMNMenu: ; e4cd + call LoadStandardMenuDataHeader + callba IsAnyMonHoldingMail + jr nc, .no_mail + ld hl, .Text_MonHoldingMail + call PrintText + jr .quit + +.no_mail + callba StartMovePkmnWOMail_SaveGame + jr c, .quit + callba _MovePKMNWithoutMail + call ReturnToMapFromSubmenu + call ClearPCItemScreen + +.quit + call CloseWindow + and a + ret + +.Text_MonHoldingMail: ; 0xe4f9 + ; There is a #MON holding MAIL. Please remove the MAIL. + text_jump UnknownText_0x1c102b + db "@" + +BillsPC_DepositMenu: ; e4fe (3:64fe) + call LoadStandardMenuDataHeader + callba _DepositPKMN + call ReturnToMapFromSubmenu + call ClearPCItemScreen + call CloseWindow + and a + ret + +Functione512: ; unused + ld a, [PartyCount] + and a + jr z, .no_pkmn + cp 2 + jr c, .only_one_pkmn + and a + ret + +.no_pkmn + ld hl, .Text_NoPKMN + call MenuTextBoxBackup + scf + ret + +.only_one_pkmn + ld hl, .Text_ItsYourLastPKMN + call MenuTextBoxBackup + scf + ret + +.Text_NoPKMN: ; 0xe52e + ; You don't have a single #MON! + text_jump UnknownText_0x1c1062 + db "@" + +.Text_ItsYourLastPKMN: ; 0xe533 + ; You can't deposit your last #MON! + text_jump UnknownText_0x1c1080 + db "@" + +CheckCurPartyMonFainted: ; e538 + ld hl, PartyMon1HP + ld de, PARTYMON_STRUCT_LENGTH + ld b, $0 +.loop + ld a, [CurPartyMon] + cp b + jr z, .skip + ld a, [hli] + or [hl] + jr nz, .notfainted + dec hl + +.skip + inc b + ld a, [PartyCount] + cp b + jr z, .done + add hl, de + jr .loop + +.done + scf + ret + +.notfainted + and a + ret + +BillsPC_WithdrawMenu: ; e559 (3:6559) + call LoadStandardMenuDataHeader + callba _WithdrawPKMN + call ReturnToMapFromSubmenu + call ClearPCItemScreen + call CloseWindow + and a + ret + +Functione56d: ; unused + ld a, [PartyCount] + cp PARTY_LENGTH + jr nc, .asm_e576 + and a + ret + +.asm_e576 + ld hl, UnknownText_0xe57e + call MenuTextBoxBackup + scf + ret + +UnknownText_0xe57e: ; 0xe57e + ; You can't take any more #MON. + text_jump UnknownText_0x1c10a2 + db "@" + +BillsPC_ChangeBoxMenu: ; e583 (3:6583) + callba _ChangeBox + and a + ret + +ClearPCItemScreen: ; e58b + call DisableSpriteUpdates + xor a + ld [hBGMapMode], a + call ClearBGPalettes + call ClearSprites + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + hlcoord 0,0 + lb bc, 10, 18 + call TextBox + hlcoord 0,12 + lb bc, 4, 18 + call TextBox + call WaitBGMap2 + call SetPalettes ; load regular palettes? + ret + +CopyBoxmonToTempMon: ; e5bb + ld a, [CurPartyMon] + ld hl, sBoxMon1Species + ld bc, BOXMON_STRUCT_LENGTH + call AddNTimes + ld de, TempMonSpecies + ld bc, BOXMON_STRUCT_LENGTH + ld a, BANK(sBoxMon1Species) + call GetSRAMBank + call CopyBytes + call CloseSRAM + ret + +Functione5d9: ; unreferenced + ld a, [wCurBox] + cp b + jr z, .same_box + ld a, b + ld hl, .BoxAddrs + ld bc, 3 + call AddNTimes + ld a, [hli] + push af + ld a, [hli] + ld h, [hl] + ld l, a + pop af + jr .okay + +.same_box + ld a, BANK(sBoxCount) + ld hl, sBoxCount + +.okay + call GetSRAMBank + ld a, [hl] + ld bc, 1 + MONS_PER_BOX + 1 + add hl, bc + ld b, a + ld c, $0 + ld de, wc608 + ld a, b + and a + jr z, .empty_box +.loop + push hl + push bc + ld a, c + ld bc, 0 + add hl, bc + ld bc, BOXMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + ld [de], a + inc de + ld [CurSpecies], a + call GetBaseData + pop bc + pop hl + + push hl + push bc + ld a, c + ld bc, MONS_PER_BOX * (BOXMON_STRUCT_LENGTH + NAME_LENGTH) + add hl, bc + call SkipNames + call CopyBytes + pop bc + pop hl + + push hl + push bc + ld a, c + ld bc, MON_LEVEL + add hl, bc + ld bc, BOXMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + ld [de], a + inc de + pop bc + pop hl + + push hl + push bc + ld a, c + ld bc, MON_DVS + add hl, bc + ld bc, BOXMON_STRUCT_LENGTH + call AddNTimes + ld a, [hli] + and $f0 + ld b, a + ld a, [hl] + and $f0 + swap a + or b + ld b, a + ld a, [BaseGender] + cp b + ld a, $1 + jr c, .okay2 + xor a +.okay2 + ld [de], a + inc de + pop bc + pop hl + + inc c + dec b + jr nz, .loop +.empty_box + call CloseSRAM + ret + +.BoxAddrs: ; e66e + dba sBox1 + dba sBox2 + dba sBox3 + dba sBox4 + dba sBox5 + dba sBox6 + dba sBox7 + dba sBox8 + dba sBox9 + dba sBox10 + dba sBox11 + dba sBox12 + dba sBox13 + dba sBox14 diff --git a/engine/color.asm b/engine/color.asm index 57f616955..435f0e57b 100644 --- a/engine/color.asm +++ b/engine/color.asm @@ -5,10 +5,8 @@ SHINY_ATK_BIT EQU 5 SHINY_DEF_VAL EQU 10 SHINY_SPD_VAL EQU 10 SHINY_SPC_VAL EQU 10 -LO_NYBBLE EQU $0f -HI_NYBBLE EQU $f0 -CheckShininess: ; 8a68 +CheckShininess: ; Check if a mon is shiny by DVs at bc. ; Return carry if shiny. @@ -22,19 +20,19 @@ CheckShininess: ; 8a68 ; Defense ld a, [hli] - and LO_NYBBLE + and $f cp SHINY_DEF_VAL jr nz, .NotShiny ; Speed ld a, [hl] - and HI_NYBBLE + and $f0 cp SHINY_SPD_VAL << 4 jr nz, .NotShiny ; Special ld a, [hl] - and LO_NYBBLE + and $f cp SHINY_SPC_VAL jr nz, .NotShiny @@ -45,10 +43,8 @@ CheckShininess: ; 8a68 .NotShiny and a ret -; 8a88 - -CheckContestMon: ; 8a88 +CheckContestMon: ; Check a mon's DVs at hl in the bug catching contest. ; Return carry if its DVs are good enough to place in the contest. @@ -59,7 +55,7 @@ CheckContestMon: ; 8a88 ; Defense ld a, [hli] - and LO_NYBBLE + and $f cp 10 jr c, .Bad @@ -70,7 +66,7 @@ CheckContestMon: ; 8a88 ; Special ld a, [hl] - and LO_NYBBLE + and $f cp 10 jr c, .Bad @@ -81,10 +77,8 @@ CheckContestMon: ; 8a88 .Bad and a ret -; 8aa4 - -Function8aa4: ; 8aa4 +Function8aa4: push de push bc ld hl, PalPacket_9ce6 @@ -106,16 +100,13 @@ Function8aa4: ; 8aa4 ld hl, BlkPacket_9a86 call Function9809 ret -; 8ad1 - -InitPartyMenuPalettes: ; 8ad1 +InitPartyMenuPalettes: ld hl, PalPacket_9c56 + 1 call CopyFourPalettes call InitPartyMenuOBPals call WipeAttrMap ret -; 8ade SGB_ApplyPartyMenuHPPals: ; 8ade SGB layout $fc ld hl, wHPPals @@ -142,9 +133,8 @@ SGB_ApplyPartyMenuHPPals: ; 8ade SGB layout $fc pop de ld [hl], e ret -; 8b07 -Function8b07: ; 8b07 +Function8b07: ; Unreferenced call CheckCGB ret z @@ -177,9 +167,7 @@ Function8b07: ; 8b07 RGB 08, 16, 28 RGB 00, 00, 00 -; 8b3f - -Function8b3f: ; 8b3f +Function8b3f: ; Unreferenced call CheckCGB ret nz @@ -188,9 +176,8 @@ Function8b3f: ; 8b3f ret z ld hl, BlkPacket_9a86 jp Function9809 -; 8b4d -Function8b4d: ; 8b4d +Function8b4d: call CheckCGB jr nz, .cgb ld a, [hSGB] @@ -204,9 +191,8 @@ Function8b4d: ; 8b4d ld a, $3b call GetPredefPal jp LoadHLPaletteIntoDE -; 8b67 -Function8b67: ; 8b67 +Function8b67: call CheckCGB jr nz, .cgb ld a, [hSGB] @@ -220,9 +206,8 @@ Function8b67: ; 8b67 ld a, $3c call GetPredefPal jp LoadHLPaletteIntoDE -; 8b81 -Function8b81: ; 8b81 +Function8b81: call CheckCGB jr nz, .asm_8bb2 ld a, [hSGB] @@ -253,9 +238,8 @@ Function8b81: ; 8b81 call GetMonPalettePointer_ call LoadPalette_White_Col1_Col2_Black ret -; 8bbd -Function8bbd: ; 8bbd +Function8bbd: ld a, [TrainerClass] call GetTrainerPalettePointer ld a, e @@ -290,9 +274,8 @@ asm_8bd7 pop hl call LoadPalette_White_Col1_Col2_Black ret -; 8bec -Function8bec: ; 8bec +Function8bec: ld a, [hCGB] and a jr nz, .asm_8bf7 @@ -321,9 +304,8 @@ Function8bec: ; 8bec call FillBoxCGB call LoadEDTile ret -; 8c1d -ApplyMonOrTrainerPals: ; 8c1d +ApplyMonOrTrainerPals: call CheckCGB ret z ld a, e @@ -344,9 +326,8 @@ ApplyMonOrTrainerPals: ; 8c1d call ApplyAttrMap call ApplyPals ret -; 8c43 -ApplyHPBarPals: ; 8c43 +ApplyHPBarPals: ld a, [wWhichHPBar] and a jr z, .Enemy @@ -395,9 +376,8 @@ ApplyHPBarPals: ; 8c43 ld a, e call FillBoxCGB ret -; 8c8a -LoadStatsScreenPals: ; 8c8a +LoadStatsScreenPals: call CheckCGB ret z ld hl, StatsScreenPals @@ -420,9 +400,8 @@ LoadStatsScreenPals: ; 8c8a call ApplyPals ld a, $1 ret -; 8cb4 -Function8cb4: ; 8cb4 +Function8cb4: ld l, e ld h, 0 rept 3 @@ -463,9 +442,8 @@ endr call WipeAttrMap call ApplyAttrMap ret -; 8d05 -Palettes_8d05: ; 8d05 +Palettes_8d05: RGB 20, 31, 11 RGB 31, 19, 00 RGB 31, 10, 09 @@ -516,12 +494,9 @@ Palettes_8d05: ; 8d05 RGB 00, 21, 00 RGB 00, 00, 00 -; 8d55 - INCLUDE "predef/cgb.asm" - -Function95f0: ; 95f0 +Function95f0: ld hl, Palette_9608 ld de, UnknBGPals ld bc, 8 @@ -531,22 +506,18 @@ Function95f0: ; 95f0 call WipeAttrMap call ApplyAttrMap ret -; 9608 -Palette_9608: ; 9608 +Palette_9608: RGB 31, 31, 31 RGB 09, 31, 31 RGB 10, 12, 31 RGB 00, 03, 19 -; 9610 - - -CopyFourPalettes: ; 9610 +CopyFourPalettes: ld de, UnknBGPals ld c, $4 -CopyPalettes: ; 9615 +CopyPalettes: .loop push bc ld a, [hli] @@ -559,9 +530,8 @@ CopyPalettes: ; 9615 dec c jr nz, .loop ret -; 9625 -GetPredefPal: ; 9625 +GetPredefPal: ld l, a ld h, $0 rept 3 ; multiply by 8 @@ -570,9 +540,8 @@ endr ld bc, Palettes_9df6 add hl, bc ret -; 9630 -LoadHLPaletteIntoDE: ; 9630 +LoadHLPaletteIntoDE: ld a, [rSVBK] push af ld a, $5 @@ -587,9 +556,8 @@ LoadHLPaletteIntoDE: ; 9630 pop af ld [rSVBK], a ret -; 9643 -LoadPalette_White_Col1_Col2_Black: ; 9643 +LoadPalette_White_Col1_Col2_Black: ld a, [rSVBK] push af ld a, $5 @@ -619,9 +587,8 @@ LoadPalette_White_Col1_Col2_Black: ; 9643 pop af ld [rSVBK], a ret -; 9663 -FillBoxCGB: ; 9663 +FillBoxCGB: .row push bc push hl @@ -636,9 +603,8 @@ FillBoxCGB: ; 9663 dec b jr nz, .row ret -; 9673 -Function9673: ; 9673 +Function9673: push af push bc push de @@ -667,27 +633,23 @@ endr pop bc pop af ret -; 9699 - -WipeAttrMap: ; 9699 +WipeAttrMap: hlcoord 0, 0, AttrMap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT xor a call ByteFill ret -; 96a4 -ApplyPals: ; 96a4 +ApplyPals: ld hl, UnknBGPals ld de, BGPals ld bc, 16 palettes ld a, $5 call FarCopyWRAM ret -; 96b3 -ApplyAttrMap: ; 96b3 +ApplyAttrMap: ld a, [rLCDC] bit 7, a jr z, .UpdateVBank1 @@ -728,7 +690,6 @@ ApplyAttrMap: ; 96b3 ld a, $0 ld [rVBK], a ret -; 96f3 CGB_ApplyPartyMenuHPPals: ; 96f3 CGB layout $fc ld hl, wHPPals @@ -755,19 +716,16 @@ CGB_ApplyPartyMenuHPPals: ; 96f3 CGB layout $fc ld a, e call FillBoxCGB ret -; 971a - -InitPartyMenuOBPals: ; 971a +InitPartyMenuOBPals: ld hl, Palettes_b681 ld de, UnknOBPals ld bc, 2 palettes ld a, $5 call FarCopyWRAM ret -; 9729 -GetBattlemonBackpicPalettePointer: ; 9729 +GetBattlemonBackpicPalettePointer: push de callba GetPartyMonDVs ld c, l @@ -776,9 +734,8 @@ GetBattlemonBackpicPalettePointer: ; 9729 call GetPlayerOrMonPalettePointer pop de ret -; 973a -GetEnemyFrontpicPalettePointer: ; 973a +GetEnemyFrontpicPalettePointer: push de callba GetEnemyMonDVs ld c, l @@ -787,9 +744,8 @@ GetEnemyFrontpicPalettePointer: ; 973a call GetFrontpicPalettePointer pop de ret -; 974b -GetPlayerOrMonPalettePointer: ; 974b +GetPlayerOrMonPalettePointer: and a jp nz, GetMonNormalOrShinyPalettePointer ld a, [wPlayerSpriteSetupFlags] @@ -804,14 +760,13 @@ GetPlayerOrMonPalettePointer: ; 974b .male ld hl, PlayerPalette ret -; 9764 -GetFrontpicPalettePointer: ; 9764 +GetFrontpicPalettePointer: and a jp nz, GetMonNormalOrShinyPalettePointer ld a, [TrainerClass] -GetTrainerPalettePointer: ; 976b +GetTrainerPalettePointer: ld l, a ld h, 0 add hl,hl @@ -819,14 +774,12 @@ GetTrainerPalettePointer: ; 976b ld bc, TrainerPalettes add hl, bc ret -; 9775 -GetMonPalettePointer_: ; 9775 +GetMonPalettePointer_: call GetMonPalettePointer ret -; 9779 -Function9779: mobile ; 9779 +Function9779: mobile call CheckCGB ret z ld hl, Palettes_979c @@ -844,9 +797,8 @@ Function9779: mobile ; 9779 ld a, $5 call FarCopyWRAM ret -; 979c -Palettes_979c: ; 979c +Palettes_979c: RGB 31, 31, 31 RGB 25, 25, 25 RGB 13, 13, 13 @@ -877,9 +829,7 @@ Palettes_979c: ; 979c RGB 20, 15, 03 RGB 00, 00, 00 -; 97cc - -Function97cc: ; 97cc +Function97cc: call CheckCGB ret z ld a, $90 @@ -891,9 +841,8 @@ Function97cc: ; 97cc call GetPredefPal call Function97e5 ret -; 97e5 -Function97e5: ; 97e5 +Function97e5: ld c, 1 palettes .loop ld a, [hli] @@ -901,9 +850,8 @@ Function97e5: ; 97e5 dec c jr nz, .loop ret -; 97ee -GetMonPalettePointer: ; 97ee +GetMonPalettePointer: ld l, a ld h, $0 rept 3 @@ -912,9 +860,8 @@ endr ld bc, PokemonPalettes add hl, bc ret -; 97f9 -GetMonNormalOrShinyPalettePointer: ; 97f9 +GetMonNormalOrShinyPalettePointer: push bc call GetMonPalettePointer pop bc @@ -926,9 +873,8 @@ rept 4 inc hl endr ret -; 9809 -Function9809: ; 9809 +Function9809: ld a, [wcfbe] push af set 7, a @@ -937,9 +883,8 @@ Function9809: ; 9809 pop af ld [wcfbe], a ret -; 981a -PushSGBPals: ; 981a +PushSGBPals: ld a, [hl] and $7 ret z @@ -978,9 +923,8 @@ PushSGBPals: ; 981a dec b jr nz, .loop ret -; 9853 -Function9853: ; 9853 +Function9853: call CheckCGB ret nz di @@ -1010,10 +954,8 @@ Function9853: ; 9853 ld [wcfbe], a ei ret -; 9890 - -Function9890:: ; 9890 +Function9890:: call CheckCGB ret z ld a, $1 @@ -1066,9 +1008,8 @@ Function9890:: ; 9890 dec c jr nz, .loop ret -; 98eb -Function98eb: ; 98eb +Function98eb: ld hl, .PalPacketPointerTable ld c, 9 .loop @@ -1084,9 +1025,8 @@ Function98eb: ; 98eb dec c jr nz, .loop ret -; 98ff -.PalPacketPointerTable: ; 98ff +.PalPacketPointerTable: dw PalPacket_9d56 dw PalPacket_9d76 dw PalPacket_9d86 @@ -1096,9 +1036,8 @@ Function98eb: ; 98eb dw PalPacket_9dc6 dw PalPacket_9dd6 dw PalPacket_9de6 -; 9911 -Function9911: ; 9911 +Function9911: di xor a ld [rJOYP], a @@ -1111,32 +1050,28 @@ Function9911: ; 9911 call PushSGBPals ei ret -; 992c -Function992c: ; 992c +Function992c: call .LoadSGBBorderPointers push de call Function9a24 pop hl call Function99d8 ret -; 9938 -.LoadSGBBorderPointers: ; 9938 +.LoadSGBBorderPointers: ld hl, SGBBorder ld de, SGBBorderMap ret -; 993f -Function993f: ; 993f +Function993f: ld hl, VTiles0 ld bc, $2000 xor a call ByteFill ret -; 994a -Function994a: ; 994a +Function994a: ld hl, PalPacket_9d26 call PushSGBPals call SGBDelayCycles @@ -1180,15 +1115,13 @@ endr call Function99ab scf ret -; 99ab -Function99ab: ; 99ab +Function99ab: ld hl, PalPacket_9d16 call PushSGBPals jp SGBDelayCycles -; 99b4 -Function99b4: ; 99b4 +Function99b4: call DisableLCD ld a, $e4 ld [rBGP], a @@ -1204,9 +1137,8 @@ Function99b4: ; 99b4 xor a ld [rBGP], a ret -; 99d8 -Function99d8: ; 99d8 +Function99d8: call DisableLCD ld a, $e4 ld [rBGP], a @@ -1239,9 +1171,8 @@ Function99d8: ; 99d8 xor a ld [rBGP], a ret -; 9a24 -Function9a24: ; 9a24 +Function9a24: call DisableLCD ld a, %11100100 ld [rBGP], a @@ -1264,7 +1195,6 @@ Function9a24: ; 9a24 xor a ld [rBGP], a ret -; 9a52 CopyData: ; 0x9a52 ; copy bc bytes of data from hl to de @@ -1310,7 +1240,7 @@ DrawDefaultTiles: ; 0x9a64 ret ; 0x9a7a -SGBDelayCycles: ; 9a7a +SGBDelayCycles: ld de, 7000 .wait nop @@ -1321,51 +1251,47 @@ SGBDelayCycles: ; 9a7a or e jr nz, .wait ret -; 9a86 -BlkPacket_9a86: ; 9a86 +BlkPacket_9a86: db $21, $01, $03, $00, $00, $00, $13, $11, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9a96: ; 9a96 +BlkPacket_9a96: db $21, $01, $07, $05, $00, $0a, $13, $0d, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9aa6: ; 9a86 +BlkPacket_9aa6: db $22, $05, $07, $0a, $00, $0c, $13, $11, $03, $05, $01, $00, $0a, $03, $03, $00 db $0a, $08, $13, $0a, $03, $0a, $00, $04, $08, $0b, $03, $0f, $0b, $00, $13, $07 -BlkPacket_9ac6: ; 9a86 +BlkPacket_9ac6: db $21, $01, $07, $05, $00, $01, $07, $07, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9ad6: ; 9a86 +BlkPacket_9ad6: db $21, $01, $07, $05, $0b, $01, $13, $02, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9ae6: ; 9a86 +BlkPacket_9ae6: db $21, $01, $07, $05, $01, $01, $08, $08, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9af6: ; 9a86 +BlkPacket_9af6: db $21, $01, $07, $05, $07, $05, $0d, $0b, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9b06: ; 9a86 +BlkPacket_9b06: db $22, $05, $03, $05, $00, $00, $13, $0b, $03, $0a, $00, $04, $13, $09, $02, $0f db $00, $06, $13, $07, $03, $00, $04, $04, $0f, $09, $03, $00, $00, $0c, $13, $11 -BlkPacket_9b26: ; 9a86 +BlkPacket_9b26: db $23, $07, $07, $10, $00, $00, $02, $0c, $02, $00, $0c, $00, $12, $01, $02, $00 db $0c, $02, $12, $03, $02, $00, $0c, $04, $12, $05, $02, $00, $0c, $06, $12, $07 db $02, $00, $0c, $08, $12, $09, $02, $00, $0c, $0a, $12, $0b, $00, $00, $00, $00 -BlkPacket_9b56: ; 9a86 +BlkPacket_9b56: db $22, $03, $07, $20, $00, $00, $13, $04, $03, $0f, $00, $06, $13, $11, $03, $05 db $0f, $01, $12, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9b76: ; 9a86 +BlkPacket_9b76: db $21, $01, $07, $10, $00, $00, $13, $05, $00, $00, $00, $00, $00, $00, $00, $00 -BlkPacket_9b86: ; 9a86 +BlkPacket_9b86: db $21, $02, $07, $0a, $00, $04, $13, $0d, $03, $05, $00, $06, $13, $0b, $00, $00 -; 9b96 - -; 9b96 PalPacket_9b96: db $51, $48, $00, $49, $00, $4a, $00, $4b, $00, $00, $00, $00, $00, $00, $00, $00 PalPacket_9ba6: db $51, $2b, $00, $24, $00, $20, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 @@ -1405,9 +1331,8 @@ PalPacket_9db6: db $79, $31, $08, $00, $0b, $0c, $a5, $ca, $c9, $7e, $d0, $06, $ PalPacket_9dc6: db $79, $26, $08, $00, $0b, $39, $cd, $48, $0c, $d0, $34, $a5, $c9, $c9, $80, $d0 PalPacket_9dd6: db $79, $1b, $08, $00, $0b, $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0 PalPacket_9de6: db $79, $10, $08, $00, $0b, $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea -; 9df6 -Palettes_9df6: ; 9df6 +Palettes_9df6: RGB 31, 31, 31 RGB 22, 25, 19 RGB 16, 21, 30 @@ -1803,9 +1728,7 @@ Palettes_9df6: ; 9df6 RGB 21, 21, 21 RGB 31, 31, 31 -; a06e - -SGBBorderMap: ; a06e +SGBBorderMap: db $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $14,$14, $15,$14, $16,$14, $17,$14, $17,$54, $16,$54, $15,$54, $14,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14 db $01,$14, $02,$14, $03,$14, $03,$54, $02,$54, $01,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $24,$14, $25,$14, $26,$14, $07,$14, $07,$54, $26,$54, $25,$54, $24,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$54, $01,$14, $02,$14, $03,$14, $03,$54, $02,$54, $01,$54 db $11,$14, $12,$14, $13,$14, $13,$54, $12,$54, $11,$54, $10,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $24,$14, $34,$14, $35,$14, $35,$54, $34,$54, $33,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $10,$14, $11,$14, $12,$14, $13,$14, $13,$54, $12,$54, $11,$54 @@ -1834,9 +1757,8 @@ SGBBorderMap: ; a06e db $25,$14, $26,$14, $07,$14, $07,$54, $26,$54, $25,$54, $24,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $01,$14, $02,$14, $03,$14, $03,$54, $02,$54, $01,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $24,$14, $25,$14, $26,$14, $07,$14, $07,$54, $26,$54, $25,$54 db $33,$14, $34,$14, $35,$14, $35,$54, $34,$54, $24,$54, $07,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $10,$14, $11,$14, $12,$14, $13,$14, $13,$54, $12,$54, $11,$54, $10,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $24,$14, $34,$14, $35,$14, $35,$54, $34,$54, $33,$54 db $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $20,$14, $21,$14, $22,$14, $23,$14, $23,$54, $22,$54, $21,$54, $20,$54, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14, $07,$14 -; a49e -SGBBorderPalettes: ; a49e +SGBBorderPalettes: RGB 24, 06, 06 RGB 24, 24, 26 RGB 14, 15, 20 @@ -1917,13 +1839,10 @@ SGBBorderPalettes: ; a49e RGB 31, 31, 25 RGB 31, 31, 25 -; a51e - -SGBBorder: ; a51e +SGBBorder: INCBIN "gfx/misc/sgb_border.2bpp" -; a8be -Palettes_a8be: ; a8be +Palettes_a8be: RGB 30, 26, 15 RGB 00, 23, 00 @@ -1933,23 +1852,19 @@ Palettes_a8be: ; a8be RGB 30, 26, 15 RGB 31, 00, 00 -Palettes_a8ca: ; a8ca +Palettes_a8ca: RGB 30, 26, 15 RGB 04, 17, 31 -; a8ce -; a8ce INCLUDE "gfx/pics/palette_pointers.asm" -; b0ce -; b0ce INCLUDE "gfx/trainers/palette_pointers.asm" -; b1de -LoadMapPals: ; b1de +LoadMapPals: callba LoadSpecialMapPalette jr c, .got_pals + ; Which palette group is based on whether we're outside or inside ld a, [wPermission] and 7 ld e, a @@ -1960,16 +1875,18 @@ LoadMapPals: ; b1de ld a, [hli] ld h, [hl] ld l, a + ; Futher refine by time of day ld a, [TimeOfDayPal] and 3 -rept 3 add a -endr + add a + add a ld e, a ld d, 0 add hl, de ld e, l ld d, h + ; Switch to palettes WRAM bank ld a, [rSVBK] push af ld a, $5 @@ -1977,14 +1894,14 @@ endr ld hl, UnknBGPals ld b, 8 .outer_loop - ld a, [de] + ld a, [de] ; lookup index for TilesetBGPalette push de push hl ld l, a ld h, 0 -rept 3 - add hl,hl -endr + add hl, hl + add hl, hl + add hl, hl ld de, TilesetBGPalette add hl, de ld e, l @@ -2042,43 +1959,41 @@ endr ld a, $5 call FarCopyWRAM ret -; b279 - -.TilesetColorsPointers: ; b279 - dw TilesetColors1 - dw TilesetColors1 - dw TilesetColors1 - dw TilesetColors2 - dw TilesetColors3 - dw TilesetColors4 - dw TilesetColors2 - dw TilesetColors3 -; b289 - -TilesetColors1: ; b289 - db $00, $01, $02, $28, $04, $05, $06, $07 - db $08, $09, $0a, $28, $0c, $0d, $0e, $0f - db $10, $11, $12, $29, $14, $15, $16, $17 - db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f - -TilesetColors2: ; b289 - db $20, $21, $22, $23, $24, $25, $26, $07 - db $20, $21, $22, $23, $24, $25, $26, $07 - db $10, $11, $12, $13, $14, $15, $16, $07 - db $18, $19, $1a, $1b, $1c, $1d, $1e, $07 - -TilesetColors3: ; b289 - db $00, $01, $02, $03, $04, $05, $06, $07 - db $08, $09, $0a, $0b, $0c, $0d, $0e, $0f - db $10, $11, $12, $13, $14, $15, $16, $17 - db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f - -TilesetColors4: ; b289 - db $00, $01, $02, $03, $04, $05, $06, $07 - db $08, $09, $0a, $0b, $0c, $0d, $0e, $0f - db $10, $11, $12, $13, $14, $15, $16, $17 - db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f -; b309 + +.TilesetColorsPointers + dw .OutdoorColors ; unused + dw .OutdoorColors ; TOWN + dw .OutdoorColors ; ROUTE + dw .IndoorColors ; INDOOR + dw .DungeonColors ; CAVE + dw .Perm5Colors ; PERM_5 + dw .IndoorColors ; GATE + dw .DungeonColors ; DUNGEON + +; Valid indices: $00 - $29 +.OutdoorColors + db $00, $01, $02, $28, $04, $05, $06, $07 ; morn + db $08, $09, $0a, $28, $0c, $0d, $0e, $0f ; day + db $10, $11, $12, $29, $14, $15, $16, $17 ; nite + db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f ; dark + +.IndoorColors + db $20, $21, $22, $23, $24, $25, $26, $07 ; morn + db $20, $21, $22, $23, $24, $25, $26, $07 ; day + db $10, $11, $12, $13, $14, $15, $16, $07 ; nite + db $18, $19, $1a, $1b, $1c, $1d, $1e, $07 ; dark + +.DungeonColors + db $00, $01, $02, $03, $04, $05, $06, $07 ; morn + db $08, $09, $0a, $0b, $0c, $0d, $0e, $0f ; day + db $10, $11, $12, $13, $14, $15, $16, $17 ; nite + db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f ; dark + +.Perm5Colors + db $00, $01, $02, $03, $04, $05, $06, $07 ; morn + db $08, $09, $0a, $0b, $0c, $0d, $0e, $0f ; day + db $10, $11, $12, $13, $14, $15, $16, $17 ; nite + db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f ; dark Palette_b309: ; b309 mobile RGB 31, 31, 31 @@ -2086,26 +2001,22 @@ Palette_b309: ; b309 mobile RGB 30, 10, 06 RGB 00, 00, 00 -; b311 - Palette_b311: ; b311 not mobile RGB 31, 31, 31 RGB 17, 19, 31 RGB 14, 16, 31 RGB 00, 00, 00 -; b319 - -TilesetBGPalette: ; b319 +TilesetBGPalette: INCLUDE "tilesets/bg.pal" -MapObjectPals:: ; b469 +MapObjectPals:: INCLUDE "tilesets/ob.pal" -RoofPals: ; b569 +RoofPals: INCLUDE "tilesets/roof.pal" -Palettes_b641: ; b641 +Palettes_b641: RGB 27, 31, 27 RGB 21, 21, 21 RGB 13, 13, 13 @@ -2146,9 +2057,7 @@ Palettes_b641: ; b641 RGB 07, 07, 12 RGB 00, 00, 00 -; b681 - -Palettes_b681: ; b681 +Palettes_b681: RGB 27, 31, 27 RGB 31, 19, 10 RGB 31, 07, 04 @@ -2219,8 +2128,7 @@ Palettes_b681: ; b681 RGB 20, 15, 03 RGB 07, 07, 07 - -Palettes_b6f1: ; b6f1 +Palettes_b6f1: RGB 31, 31, 31 RGB 18, 23, 31 RGB 15, 20, 31 @@ -2246,8 +2154,7 @@ Palettes_b6f1: ; b6f1 RGB 18, 23, 31 RGB 00, 00, 00 - -Palettes_b719: ; b719 +Palettes_b719: RGB 31, 31, 31 RGB 07, 06, 03 RGB 07, 06, 03 @@ -2258,9 +2165,7 @@ Palettes_b719: ; b719 RGB 26, 22, 00 RGB 00, 00, 00 -; b729 - -MalePokegearPals: ; b729 +MalePokegearPals: RGB 28, 31, 20 RGB 21, 21, 21 RGB 13, 13, 13 @@ -2291,9 +2196,7 @@ MalePokegearPals: ; b729 RGB 15, 07, 00 RGB 31, 00, 00 -; b759 - -FemalePokegearPals: ; b759 +FemalePokegearPals: RGB 28, 31, 20 RGB 21, 21, 21 RGB 13, 13, 13 @@ -2324,9 +2227,7 @@ FemalePokegearPals: ; b759 RGB 15, 07, 00 RGB 31, 00, 00 -; b789 - -Palettes_b789: ; b789 +Palettes_b789: RGB 31, 31, 31 RGB 30, 22, 24 RGB 18, 18, 18 @@ -2347,9 +2248,7 @@ Palettes_b789: ; b789 RGB 18, 18, 18 RGB 00, 00, 00 -; b7a9 - -Palettes_b7a9: ; b7a9 +Palettes_b7a9: RGB 31, 31, 31 RGB 24, 25, 28 RGB 24, 24, 09 @@ -2430,4 +2329,3 @@ Palettes_b7a9: ; b7a9 RGB 00, 00, 00 RGB 00, 00, 00 -; b829 diff --git a/engine/health.asm b/engine/health.asm new file mode 100755 index 000000000..1c926f677 --- /dev/null +++ b/engine/health.asm @@ -0,0 +1,110 @@ +HealParty: ; c658 + xor a + ld [CurPartyMon], a + ld hl, PartySpecies +.loop + ld a, [hli] + cp -1 + jr z, .done + cp EGG + jr z, .next + + push hl + call HealPartyMon + pop hl + +.next + ld a, [CurPartyMon] + inc a + ld [CurPartyMon], a + jr .loop + +.done + ret + +HealPartyMon: ; c677 + ld a, MON_SPECIES + call GetPartyParamLocation + ld d, h + ld e, l + + ld hl, MON_STATUS + add hl, de + xor a + ld [hli], a + ld [hl], a + + ld hl, MON_MAXHP + add hl, de + + ; bc = MON_HP + ld b, h + ld c, l + dec bc + dec bc + + ld a, [hli] + ld [bc], a + inc bc + ld a, [hl] + ld [bc], a + + callba RestoreAllPP + ret + +ComputeHPBarPixels: ; c699 +; e = bc * (6 * 8) / de + ld a, b + or c + jr z, .zero + push hl + xor a + ld [hMultiplicand + 0], a + ld a, b + ld [hMultiplicand + 1], a + ld a, c + ld [hMultiplicand + 2], a + ld a, 6 * 8 + ld [hMultiplier], a + call Multiply + ; We need de to be under 256 because hDivisor is only 1 byte. + ld a, d + and a + jr z, .divide + ; divide de and hProduct by 4 + srl d + rr e + srl d + rr e + ld a, [hProduct + 2] + ld b, a + ld a, [hProduct + 3] + srl b + rr a + srl b + rr a + ld [hDividend + 3], a + ld a, b + ld [hDividend + 2], a +.divide + ld a, e + ld [hDivisor], a + ld b, 4 + call Divide + ld a, [hQuotient + 2] + ld e, a + pop hl + and a + ret nz + ld e, 1 + ret + +.zero + ld e, 0 + ret + +AnimateHPBar: ; c6e0 + call WaitBGMap + call _AnimateHPBar + call WaitBGMap + ret diff --git a/engine/init_gender.asm b/engine/init_gender.asm index 5de576c2a..ff5babdf9 100755 --- a/engine/init_gender.asm +++ b/engine/init_gender.asm @@ -67,7 +67,7 @@ TextJump_AreYouABoyOrAreYouAGirl: ; 0x48e0f InitGenderScreen: ; 48e14 (12:4e14) ld a, $10 ld [MusicFade], a - ld a, $0 + ld a, MUSIC_NONE ld [MusicFadeIDLo], a ld a, $0 ld [MusicFadeIDHi], a diff --git a/engine/items.asm b/engine/items.asm new file mode 100755 index 000000000..ede8e4f73 --- /dev/null +++ b/engine/items.asm @@ -0,0 +1,584 @@ +_ReceiveItem:: ; d1d5 + call DoesHLEqualNumItems + jp nz, PutItemInPocket + push hl + call CheckItemPocket + pop de + ld a, [wItemAttributeParamBuffer] + dec a + ld hl, .Pockets + rst JumpTable + ret + +.Pockets: ; d1e9 + dw .Item + dw .KeyItem + dw .Ball + dw .TMHM + +.Item: ; d1f1 + ld h, d + ld l, e + jp PutItemInPocket + +.KeyItem: ; d1f6 + ld h, d + ld l, e + jp ReceiveKeyItem + +.Ball: ; d1fb + ld hl, NumBalls + jp PutItemInPocket + +.TMHM: ; d201 + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + call GetTMHMNumber + jp ReceiveTMHM + +_TossItem:: ; d20d + call DoesHLEqualNumItems + jr nz, .remove + push hl + call CheckItemPocket + pop de + ld a, [wItemAttributeParamBuffer] + dec a + ld hl, .Pockets + rst JumpTable + ret + +.Pockets + dw .Item + dw .KeyItem + dw .Ball + dw .TMHM + +.Ball ; d228 + ld hl, NumBalls + jp RemoveItemFromPocket + +.TMHM ; d22e + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + call GetTMHMNumber + jp TossTMHM + +.KeyItem ; d23a + ld h, d + ld l, e + jp TossKeyItem + +.Item ; d23f + ld h, d + ld l, e + +.remove + jp RemoveItemFromPocket + +_CheckItem:: ; d244 + call DoesHLEqualNumItems + jr nz, .nope + push hl + call CheckItemPocket + pop de + ld a, [wItemAttributeParamBuffer] + dec a + ld hl, .Pockets + rst JumpTable + ret + +.Pockets + dw .Item + dw .KeyItem + dw .Ball + dw .TMHM + +.Ball ; d25f + ld hl, NumBalls + jp CheckTheItem + +.TMHM ; d265 + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + call GetTMHMNumber + jp CheckTMHM + +.KeyItem ; d271 + ld h, d + ld l, e + jp CheckKeyItems + +.Item ; d276 + ld h, d + ld l, e + +.nope + jp CheckTheItem + +DoesHLEqualNumItems: ; d27b + ld a, l + cp NumItems % $100 + ret nz + ld a, h + cp NumItems / $100 + ret + +GetPocketCapacity: ; d283 + ld c, MAX_ITEMS + ld a, e + cp NumItems % $100 + jr nz, .not_bag + ld a, d + cp NumItems / $100 + ret z + +.not_bag + ld c, MAX_PC_ITEMS + ld a, e + cp PCItems % $100 + jr nz, .not_pc + ld a, d + cp PCItems / $100 + ret z + +.not_pc + ld c, MAX_BALLS + ret + +PutItemInPocket: ; d29c + ld d, h + ld e, l + inc hl + ld a, [CurItem] + ld c, a + ld b, 0 +.loop + ld a, [hli] + cp -1 + jr z, .terminator + cp c + jr nz, .next + ld a, 99 + sub [hl] + add b + ld b, a + ld a, [wItemQuantityChangeBuffer] + cp b + jr z, .ok + jr c, .ok + +.next + inc hl + jr .loop + +.terminator + call GetPocketCapacity + ld a, [de] + cp c + jr c, .ok + and a + ret + +.ok + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + ld a, [wItemQuantityChangeBuffer] + ld [wItemQuantityBuffer], a +.loop2 + inc hl + ld a, [hli] + cp -1 + jr z, .terminator2 + cp c + jr nz, .loop2 + ld a, [wItemQuantityBuffer] + add [hl] + cp 100 + jr nc, .newstack + ld [hl], a + jr .done + +.newstack + ld [hl], 99 + sub 99 + ld [wItemQuantityBuffer], a + jr .loop2 + +.terminator2 + dec hl + ld a, [CurItem] + ld [hli], a + ld a, [wItemQuantityBuffer] + ld [hli], a + ld [hl], -1 + ld h, d + ld l, e + inc [hl] + +.done + scf + ret + +RemoveItemFromPocket: ; d2ff + ld d, h + ld e, l + ld a, [hli] + ld c, a + ld a, [CurItemQuantity] + cp c + jr nc, .ok ; memory + ld c, a + ld b, $0 + add hl, bc + add hl, bc + ld a, [CurItem] + cp [hl] + inc hl + jr z, .skip + ld h, d + ld l, e + inc hl + +.ok + ld a, [CurItem] + ld b, a +.loop + ld a, [hli] + cp b + jr z, .skip + cp -1 + jr z, .nope + inc hl + jr .loop + +.skip + ld a, [wItemQuantityChangeBuffer] + ld b, a + ld a, [hl] + sub b + jr c, .nope + ld [hl], a + ld [wItemQuantityBuffer], a + and a + jr nz, .yup + dec hl + ld b, h + ld c, l + inc hl + inc hl +.loop2 + ld a, [hli] + ld [bc], a + inc bc + cp -1 + jr nz, .loop2 + ld h, d + ld l, e + dec [hl] + +.yup + scf + ret + +.nope + and a + ret + +CheckTheItem: ; d349 + ld a, [CurItem] + ld c, a +.loop + inc hl + ld a, [hli] + cp -1 + jr z, .done + cp c + jr nz, .loop + scf + ret + +.done + and a + ret + +ReceiveKeyItem: ; d35a + ld hl, NumKeyItems + ld a, [hli] + cp MAX_KEY_ITEMS + jr nc, .nope + ld c, a + ld b, 0 + add hl, bc + ld a, [CurItem] + ld [hli], a + ld [hl], -1 + ld hl, NumKeyItems + inc [hl] + scf + ret + +.nope + and a + ret + +TossKeyItem: ; d374 + ld a, [wd107] + ld e, a + ld d, 0 + ld hl, NumKeyItems + ld a, [hl] + cp e + jr nc, .ok + call .Toss + ret nc + jr .ok2 + +.ok + dec [hl] + inc hl + add hl, de + +.ok2 + ld d, h + ld e, l + inc hl +.loop + ld a, [hli] + ld [de], a + inc de + cp -1 + jr nz, .loop + scf + ret + +.Toss: ; d396 + ld hl, NumKeyItems + ld a, [CurItem] + ld c, a +.loop3 + inc hl + ld a, [hl] + cp c + jr z, .ok3 + cp -1 + jr nz, .loop3 + xor a + ret + +.ok3 + ld a, [NumKeyItems] + dec a + ld [NumKeyItems], a + scf + ret + +CheckKeyItems: ; d3b1 + ld a, [CurItem] + ld c, a + ld hl, KeyItems +.loop + ld a, [hli] + cp c + jr z, .done + cp -1 + jr nz, .loop + and a + ret + +.done + scf + ret + +ReceiveTMHM: ; d3c4 + dec c + ld b, 0 + ld hl, TMsHMs + add hl, bc + ld a, [wItemQuantityChangeBuffer] + add [hl] + cp 100 + jr nc, .toomany + ld [hl], a + scf + ret + +.toomany + and a + ret + +TossTMHM: ; d3d8 + dec c + ld b, 0 + ld hl, TMsHMs + add hl, bc + ld a, [wItemQuantityChangeBuffer] + ld b, a + ld a, [hl] + sub b + jr c, .nope + ld [hl], a + ld [wItemQuantityBuffer], a + jr nz, .yup + ld a, [wTMHMPocketScrollPosition] + and a + jr z, .yup + dec a + ld [wTMHMPocketScrollPosition], a + +.yup + scf + ret + +.nope + and a + ret + +CheckTMHM: ; d3fb + dec c + ld b, $0 + ld hl, TMsHMs + add hl, bc + ld a, [hl] + and a + ret z + scf + ret + +GetTMHMNumber:: ; d407 +; Return the number of a TM/HM by item id c. + + ld a, c + +; Skip any dummy items. + cp ITEM_C3 ; TM04-05 + jr c, .done + cp ITEM_DC ; TM28-29 + jr c, .skip + + dec a +.skip + dec a +.done + sub TM01 + inc a + ld c, a + ret + +GetNumberedTMHM: ; d417 +; Return the item id of a TM/HM by number c. + + ld a, c + +; Skip any gaps. + cp ITEM_C3 - (TM01 - 1) + jr c, .done + cp ITEM_DC - (TM01 - 1) - 1 + jr c, .skip_one + +.skip_two + inc a +.skip_one + inc a +.done + add TM01 + dec a + ld c, a + ret + +_CheckTossableItem:: ; d427 +; Return 1 in wItemAttributeParamBuffer and carry if CurItem can't be removed from the bag. + ld a, ITEMATTR_PERMISSIONS + call GetItemAttr + bit 7, a + jr nz, ItemAttr_ReturnCarry + and a + ret + +CheckSelectableItem: ; d432 +; Return 1 in wItemAttributeParamBuffer and carry if CurItem can't be selected. + ld a, ITEMATTR_PERMISSIONS + call GetItemAttr + bit 6, a + jr nz, ItemAttr_ReturnCarry + and a + ret + +CheckItemPocket:: ; d43d +; Return the pocket for CurItem in wItemAttributeParamBuffer. + ld a, ITEMATTR_POCKET + call GetItemAttr + and $f + ld [wItemAttributeParamBuffer], a + ret + +CheckItemContext: ; d448 +; Return the context for CurItem in wItemAttributeParamBuffer. + ld a, ITEMATTR_HELP + call GetItemAttr + and $f + ld [wItemAttributeParamBuffer], a + ret + +CheckItemMenu: ; d453 +; Return the menu for CurItem in wItemAttributeParamBuffer. + ld a, ITEMATTR_HELP + call GetItemAttr + swap a + and $f + ld [wItemAttributeParamBuffer], a + ret + +GetItemAttr: ; d460 +; Get attribute a of CurItem. + + push hl + push bc + + ld hl, ItemAttributes + ld c, a + ld b, 0 + add hl, bc + + xor a + ld [wItemAttributeParamBuffer], a + + ld a, [CurItem] + dec a + ld c, a + ld a, NUM_ITEMATTRS + call AddNTimes + ld a, BANK(ItemAttributes) + call GetFarByte + + pop bc + pop hl + ret + +ItemAttr_ReturnCarry: ; d47f + ld a, 1 + ld [wItemAttributeParamBuffer], a + scf + ret + +GetItemPrice: ; d486 +; Return the price of CurItem in de. + push hl + push bc + ld a, ITEMATTR_PRICE + call GetItemAttr + ld e, a + ld a, ITEMATTR_PRICE_HI + call GetItemAttr + ld d, a + pop bc + pop hl + ret diff --git a/engine/main_menu.asm b/engine/main_menu.asm index 637253c12..2c9afcc07 100755 --- a/engine/main_menu.asm +++ b/engine/main_menu.asm @@ -202,7 +202,7 @@ MainMenuJoypadLoop: ; 49de4 ld a, [w2DMenuFlags1] set 5, a ld [w2DMenuFlags1], a - call Function1f1a + call GetScrollingMenuJoypad ld a, [wMenuJoypad] cp B_BUTTON jr z, .b_button diff --git a/engine/map_setup.asm b/engine/map_setup.asm index 8fa768c87..952c12ac1 100644 --- a/engine/map_setup.asm +++ b/engine/map_setup.asm @@ -248,7 +248,7 @@ MapSetupCommands: ; 15440 dba EnterMapMusic ; 07 dba ForceMapMusic ; 08 dba FadeInMusic ; 09 - dba LoadBlockData ; 0a + dba LoadBlockData ; 0a (callback 1) dba LoadNeighboringBlockData ; 0b dba SaveScreen ; 0c dba BufferScreen ; 0d diff --git a/engine/mon_icons.asm b/engine/mon_icons.asm index 5e41cd4a1..6a5c7484f 100755 --- a/engine/mon_icons.asm +++ b/engine/mon_icons.asm @@ -14,7 +14,7 @@ LoadOverworldMonIcon: ; 8e82b ret ; 8e83f -Function8e83f: ; 8e83f +LoadMenuMonIcon: ; 8e83f push hl push de push bc @@ -28,9 +28,8 @@ Function8e83f: ; 8e83f .LoadIcon: ; 8e849 ld d, 0 ld hl, .Jumptable -rept 2 add hl, de -endr + add hl, de ld a, [hli] ld h, [hl] ld l, a @@ -39,13 +38,13 @@ endr .Jumptable: ; 8e854 (23:6854) - dw Function8e8d5 ; init - dw Function8e961 - dw Function8e97d - dw Trade_LoadMonIconGFX - dw Function8e898 - dw Mobile_InitPartyMenuBGPal71 - dw .GetPartyMenuMonIcon + dw Function8e8d5 ; party menu + dw Function8e961 ; naming screen + dw Function8e97d ; moves (?) + dw Trade_LoadMonIconGFX ; trade + dw Function8e898 ; mobile + dw Mobile_InitPartyMenuBGPal71 ; mobile + dw .GetPartyMenuMonIcon ; unused .GetPartyMenuMonIcon: ; 8e862 (23:6862) @@ -89,7 +88,7 @@ Function8e898: ; 8e898 (23:6898) call Function8e8d5 ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc - ld a, $0 + ld a, SPRITE_ANIM_SEQ_NULL ld [hl], a ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc @@ -106,7 +105,7 @@ Mobile_InitPartyMenuBGPal71: ; 8e8b1 (23:68b1) call SetPartyMonIconAnimSpeed ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc - ld a, $0 + ld a, SPRITE_ANIM_SEQ_NULL ld [hl], a ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc @@ -229,7 +228,7 @@ Function8e961: ; 8e961 (23:6961) call InitSpriteAnimStruct ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc - ld [hl], $0 + ld [hl], SPRITE_ANIM_SEQ_NULL ret Function8e97d: ; 8e97d (23:697d) diff --git a/engine/movement.asm b/engine/movement.asm index ca3ac55b5..04f3f5208 100644 --- a/engine/movement.asm +++ b/engine/movement.asm @@ -55,8 +55,8 @@ MovementPointers: ; 5075 dw Movement_fast_jump_step_up ; 35 dw Movement_fast_jump_step_left ; 36 dw Movement_fast_jump_step_right ; 37 - dw Movement_38 ; 38 - dw Movement_39 ; 39 + dw Movement_remove_sliding ; 38 + dw Movement_set_sliding ; 39 dw Movement_remove_fixed_facing ; 3a dw Movement_fix_facing ; 3b dw Movement_show_person ; 3c @@ -373,14 +373,14 @@ Movement_56: ; 5279 ret ; 5293 -Movement_38: ; 5293 +Movement_remove_sliding: ; 5293 ld hl, OBJECT_FLAGS1 add hl, bc res SLIDING, [hl] jp ContinueReadingMovement ; 529c -Movement_39: ; 529c +Movement_set_sliding: ; 529c ld hl, OBJECT_FLAGS1 add hl, bc set SLIDING, [hl] diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm index ac56ec250..e65a2d54f 100755 --- a/engine/namingscreen.asm +++ b/engine/namingscreen.asm @@ -88,10 +88,10 @@ endr .Pokemon: ; 1173e (4:573e) ld a, [CurPartySpecies] ld [wd265], a - ld hl, Function8e83f - ld a, BANK(Function8e83f) + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) ld e, $1 - rst FarCall ; ; indirect jump to Function8e83f (8e83f (23:683f)) + rst FarCall ; ; indirect jump to LoadMenuMonIcon (8e83f (23:683f)) ld a, [CurPartySpecies] ld [wd265], a call GetPokemonName diff --git a/engine/party_menu.asm b/engine/party_menu.asm index b9048da10..9bf02351e 100644 --- a/engine/party_menu.asm +++ b/engine/party_menu.asm @@ -658,8 +658,8 @@ InitPartyMenuGFX: ; 503e0 .loop push bc push hl - ld hl, Function8e83f - ld a, BANK(Function8e83f) + ld hl, LoadMenuMonIcon + ld a, BANK(LoadMenuMonIcon) ld e, $0 rst FarCall ld a, [hObjectStructIndexBuffer] @@ -752,8 +752,8 @@ PartyMenuSelect: ; 0x50457 ld [wPartyMenuCursor], a ld a, [hJoyLast] ld b, a - bit 1, b - jr nz, .exitmenu ; B button? + bit B_BUTTON_F, b + jr nz, .exitmenu ; B button ld a, [wMenuCursorY] dec a ld [CurPartyMon], a diff --git a/engine/phone.asm b/engine/phone.asm index 1a3023bf1..ac21c1565 100644 --- a/engine/phone.asm +++ b/engine/phone.asm @@ -451,22 +451,20 @@ Script_ReceivePhoneCall: ; 0x90241 ; 0x90255 Script_SpecialBillCall:: ; 0x90255 - callasm Function9025c + callasm .LoadBillScript jump Script_ReceivePhoneCall -; 0x9025c -Function9025c: ; 9025c +.LoadBillScript ld e, PHONE_BILL jp LoadCallerScript ; 90261 UnknownScript_0x90261: ; 0x90261 - callasm Function9026a + callasm .LoadElmScript pause 30 jump Script_ReceivePhoneCall -; 0x9026a -Function9026a: ; 9026a +.LoadElmScript ld e, PHONE_ELM jp LoadCallerScript ; 9026f @@ -494,7 +492,6 @@ Phone_CallerTextboxWithName: ; 90292 (24:4292) call Function90363 ret - PhoneCall:: ; 9029a ld a, b ld [PhoneScriptBank], a diff --git a/engine/player_movement.asm b/engine/player_movement.asm index 80c5e6edc..6ab121f61 100755 --- a/engine/player_movement.asm +++ b/engine/player_movement.asm @@ -121,12 +121,12 @@ DoPlayerMovement:: ; 80000 ld a, [PlayerStandingTile] ld c, a call CheckWhirlpoolTile - jr c, .asm_800c4 + jr c, .not_whirlpool ld a, 3 scf ret -.asm_800c4 +.not_whirlpool and $f0 cp $30 ; moving water jr z, .water diff --git a/engine/player_object.asm b/engine/player_object.asm new file mode 100755 index 000000000..e84dff23e --- /dev/null +++ b/engine/player_object.asm @@ -0,0 +1,856 @@ +BlankScreen: ; 8000 + call DisableSpriteUpdates + xor a + ld [hBGMapMode], a + call ClearBGPalettes + call ClearSprites + hlcoord 0, 0 + ld bc, TileMapEnd - TileMap + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, AttrMapEnd - AttrMap + ld a, $7 + call ByteFill + call WaitBGMap2 + call SetPalettes + ret + +SpawnPlayer: ; 8029 + ld a, -1 + ld [wObjectFollow_Leader], a + ld [wObjectFollow_Follower], a + ld a, $0 + ld hl, PlayerObjectTemplate + call CopyPlayerObjectTemplate + ld b, $0 + call PlayerSpawn_ConvertCoords + ld a, $0 + call GetMapObject + ld hl, MAPOBJECT_COLOR + add hl, bc + ln e, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT + ld a, [wPlayerSpriteSetupFlags] + bit 2, a + jr nz, .ok + ld a, [PlayerGender] + bit 0, a + jr z, .ok + ln e, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT + +.ok + ld [hl], e + ld a, $0 + ld [hMapObjectIndexBuffer], a + ld bc, MapObjects + ld a, $0 + ld [hObjectStructIndexBuffer], a + ld de, ObjectStructs + call CopyMapObjectToObjectStruct + ld a, PLAYER + ld [wCenteredObject], a + ret + +PlayerObjectTemplate: ; 8071 +; A dummy map object used to initialize the player object. +; Shorter than the actual amount copied by two bytes. +; Said bytes seem to be unused. + person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1 + +CopyDECoordsToMapObject:: ; 807e + push de + ld a, b + call GetMapObject + pop de + ld hl, MAPOBJECT_X_COORD + add hl, bc + ld [hl], d + ld hl, MAPOBJECT_Y_COORD + add hl, bc + ld [hl], e + ret + +PlayerSpawn_ConvertCoords: ; 808f + push bc + ld a, [XCoord] + add 4 + ld d, a + ld a, [YCoord] + add 4 + ld e, a + pop bc + call CopyDECoordsToMapObject + ret + +WritePersonXY:: ; 80a1 + ld a, b + call CheckObjectVisibility + ret c + + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld e, [hl] + ld a, [hMapObjectIndexBuffer] + ld b, a + call CopyDECoordsToMapObject + and a + ret + +RefreshPlayerCoords: ; 80b8 + ld a, [XCoord] + add 4 + ld d, a + ld hl, PlayerStandingMapX + sub [hl] + ld [hl], d + ld hl, MapObjects + MAPOBJECT_X_COORD + ld [hl], d + ld hl, PlayerLastMapX + ld [hl], d + ld d, a + ld a, [YCoord] + add 4 + ld e, a + ld hl, PlayerStandingMapY + sub [hl] + ld [hl], e + ld hl, MapObjects + MAPOBJECT_Y_COORD + ld [hl], e + ld hl, PlayerLastMapY + ld [hl], e + ld e, a + ld a, [wObjectFollow_Leader] + cp $0 + ret nz ; wtf + ret + +CopyObjectStruct:: ; 80e7 + call CheckObjectMask + and a + ret nz ; masked + + ld hl, ObjectStructs + OBJECT_STRUCT_LENGTH * 1 + ld a, 1 + ld de, OBJECT_STRUCT_LENGTH +.loop + ld [hObjectStructIndexBuffer], a + ld a, [hl] + and a + jr z, .done + add hl, de + ld a, [hObjectStructIndexBuffer] + inc a + cp NUM_OBJECT_STRUCTS + jr nz, .loop + scf + ret ; overflow + +.done + ld d, h + ld e, l + call CopyMapObjectToObjectStruct + ld hl, VramState + bit 7, [hl] + ret z + + ld hl, OBJECT_FLAGS2 + add hl, de + set 5, [hl] + ret + +CopyMapObjectToObjectStruct: ; 8116 + call .CopyMapObjectToTempObject + call CopyTempObjectToObjectStruct + ret + +.CopyMapObjectToTempObject: ; 811d + ld a, [hObjectStructIndexBuffer] + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld [hl], a + + ld a, [hMapObjectIndexBuffer] + ld [wTempObjectCopyMapObjectIndex], a + + ld hl, MAPOBJECT_SPRITE + add hl, bc + ld a, [hl] + ld [wTempObjectCopySprite], a + + call GetSpriteVTile + ld [wTempObjectCopySpriteVTile], a + + ld a, [hl] + call GetSpritePalette + ld [wTempObjectCopyPalette], a + + ld hl, MAPOBJECT_COLOR + add hl, bc + ld a, [hl] + and $f0 + jr z, .skip_color_override + swap a + and $7 ; OAM_PALETTE + ld [wTempObjectCopyPalette], a + +.skip_color_override + ld hl, MAPOBJECT_MOVEMENT + add hl, bc + ld a, [hl] + ld [wTempObjectCopyMovement], a + + ld hl, MAPOBJECT_RANGE + add hl, bc + ld a, [hl] + ld [wTempObjectCopyRange], a + + ld hl, MAPOBJECT_X_COORD + add hl, bc + ld a, [hl] + ld [wTempObjectCopyX], a + + ld hl, MAPOBJECT_Y_COORD + add hl, bc + ld a, [hl] + ld [wTempObjectCopyY], a + + ld hl, MAPOBJECT_RADIUS + add hl, bc + ld a, [hl] + ld [wTempObjectCopyRadius], a + ret + +InitializeVisibleSprites: ; 8177 + ld bc, MapObjects + OBJECT_LENGTH + ld a, 1 +.loop + ld [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .next + + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + cp -1 + jr nz, .next + + ld a, [XCoord] + ld d, a + ld a, [YCoord] + ld e, a + + ld hl, MAPOBJECT_X_COORD + add hl, bc + ld a, [hl] + add 1 + sub d + jr c, .next + + cp MAPOBJECT_SCREEN_WIDTH + jr nc, .next + + ld hl, MAPOBJECT_Y_COORD + add hl, bc + ld a, [hl] + add 1 + sub e + jr c, .next + + cp MAPOBJECT_SCREEN_HEIGHT + jr nc, .next + + push bc + call CopyObjectStruct + pop bc + jp c, .ret + +.next + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + ld a, [hMapObjectIndexBuffer] + inc a + cp NUM_OBJECTS + jr nz, .loop + ret + +.ret: ; 81c9 + ret + +CheckObjectEnteringVisibleRange:: ; 81ca + nop + ld a, [wPlayerStepDirection] + cp STANDING + ret z + ld hl, .dw + rst JumpTable + ret + +.dw: ; 81d6 + dw .Down + dw .Up + dw .Left + dw .Right + +.Up: ; 81de + ld a, [YCoord] + sub 1 + jr .Vertical + +.Down: ; 81e5 + ld a, [YCoord] + add 9 +.Vertical: ; 81ea + ld d, a + ld a, [XCoord] + ld e, a + ld bc, MapObjects + OBJECT_LENGTH + ld a, 1 +.loop_v + ld [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .next_v + ld hl, MAPOBJECT_Y_COORD + add hl, bc + ld a, d + cp [hl] + jr nz, .next_v + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + cp -1 + jr nz, .next_v + ld hl, MAPOBJECT_X_COORD + add hl, bc + ld a, [hl] + add 1 + sub e + jr c, .next_v + cp MAPOBJECT_SCREEN_WIDTH + jr nc, .next_v + push de + push bc + call CopyObjectStruct + pop bc + pop de + +.next_v + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + ld a, [hMapObjectIndexBuffer] + inc a + cp NUM_OBJECTS + jr nz, .loop_v + ret + +.Left: ; 8232 + ld a, [XCoord] + sub 1 + jr .Horizontal + +.Right: ; 8239 + ld a, [XCoord] + add 10 +.Horizontal: ; 823e + ld e, a + ld a, [YCoord] + ld d, a + ld bc, MapObjects + OBJECT_LENGTH + ld a, 1 +.loop_h + ld [hMapObjectIndexBuffer], a + ld hl, MAPOBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .next_h + ld hl, MAPOBJECT_X_COORD + add hl, bc + ld a, e + cp [hl] + jr nz, .next_h + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + cp -1 + jr nz, .next_h + ld hl, MAPOBJECT_Y_COORD + add hl, bc + ld a, [hl] + add 1 + sub d + jr c, .next_h + cp MAPOBJECT_SCREEN_HEIGHT + jr nc, .next_h + push de + push bc + call CopyObjectStruct + pop bc + pop de + +.next_h + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + ld a, [hMapObjectIndexBuffer] + inc a + cp NUM_OBJECTS + jr nz, .loop_h + ret + +CopyTempObjectToObjectStruct: ; 8286 + ld a, [wTempObjectCopyMapObjectIndex] + ld hl, OBJECT_MAP_OBJECT_INDEX + add hl, de + ld [hl], a + + ld a, [wTempObjectCopyMovement] + call CopySpriteMovementData + + ld a, [wTempObjectCopyPalette] + ld hl, OBJECT_PALETTE + add hl, de + or [hl] + ld [hl], a + + ld a, [wTempObjectCopyY] + call .InitYCoord + + ld a, [wTempObjectCopyX] + call .InitXCoord + + ld a, [wTempObjectCopySprite] + ld hl, OBJECT_SPRITE + add hl, de + ld [hl], a + + ld a, [wTempObjectCopySpriteVTile] + ld hl, OBJECT_SPRITE_TILE + add hl, de + ld [hl], a + + ld hl, OBJECT_STEP_TYPE + add hl, de + ld [hl], STEP_TYPE_00 + + ld hl, OBJECT_FACING_STEP + add hl, de + ld [hl], STANDING + + ld a, [wTempObjectCopyRadius] + call .InitRadius + + ld a, [wTempObjectCopyRange] + ld hl, OBJECT_RANGE + add hl, de + ld [hl], a + + and a + ret + +.InitYCoord: ; 82d5 + ld hl, OBJECT_INIT_Y + add hl, de + ld [hl], a + + ld hl, OBJECT_NEXT_MAP_Y + add hl, de + ld [hl], a + + ld hl, YCoord + sub [hl] + and $f + swap a + ld hl, wFollowNotExactPersonY + sub [hl] + ld hl, OBJECT_SPRITE_Y + add hl, de + ld [hl], a + ret + +.InitXCoord: ; 82f1 + ld hl, OBJECT_INIT_X + add hl, de + ld [hl], a + ld hl, OBJECT_NEXT_MAP_X + add hl, de + ld [hl], a + ld hl, XCoord + sub [hl] + and $f + swap a + ld hl, wFollowNotExactPersonX + sub [hl] + ld hl, OBJECT_SPRITE_X + add hl, de + ld [hl], a + ret + +.InitRadius: ; 830d + ld h, a + inc a + and $f + ld l, a + ld a, h + add $10 + and $f0 + or l + ld hl, OBJECT_RADIUS + add hl, de + ld [hl], a + ret + +TrainerWalkToPlayer: ; 831e + ld a, [hLastTalked] + call InitMovementBuffer + ld a, movement_step_sleep_1 + call AppendToMovementBuffer + ld a, [wd03f] + dec a + jr z, .TerminateStep + ld a, [hLastTalked] + ld b, a + ld c, PLAYER + ld d, 1 + call .GetPathToPlayer + call DecrementMovementBufferCount + +.TerminateStep + ld a, movement_step_end + call AppendToMovementBuffer + ret + +.GetPathToPlayer: ; 8341 + push de + push bc +; get player object struct, load to de + ld a, c + call GetMapObject + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + call GetObjectStruct + ld d, b + ld e, c + +; get last talked object struct, load to bc + pop bc + ld a, b + call GetMapObject + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + call GetObjectStruct + +; get last talked coords, load to bc + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld c, [hl] + ld b, a + +; get player coords, load to 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] + ld d, a + + pop af + call ComputePathToWalkToPlayer + ret + +Special_SurfStartStep: ; 8379 + call InitMovementBuffer + call .GetMovementData + call AppendToMovementBuffer + ld a, movement_step_end + call AppendToMovementBuffer + ret + +.GetMovementData: ; 8388 + ld a, [PlayerDirection] + srl a + srl a + and 3 + ld e, a + ld d, 0 + ld hl, .movement_data + add hl, de + ld a, [hl] + ret + +.movement_data + slow_step_down + slow_step_up + slow_step_left + slow_step_right + +FollowNotExact:: ; 839e + push bc + ld a, c + call CheckObjectVisibility + ld d, b + ld e, c + pop bc + ret c + + ld a, b + call CheckObjectVisibility + ret c + +; Person 2 is now in bc, person 1 is now in de + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld c, [hl] + ld b, a + + ld hl, OBJECT_NEXT_MAP_X + add hl, de + ld a, [hl] + cp b + jr z, .same_x + jr c, .to_the_left + inc b + jr .continue + +.to_the_left + dec b + jr .continue + +.same_x + ld hl, OBJECT_NEXT_MAP_Y + add hl, de + ld a, [hl] + cp c + jr z, .continue + jr c, .below + inc c + jr .continue + +.below + dec c + +.continue + ld hl, OBJECT_NEXT_MAP_X + add hl, de + ld [hl], b + ld a, b + ld hl, XCoord + sub [hl] + and $f + swap a + ld hl, wFollowNotExactPersonX + sub [hl] + ld hl, OBJECT_SPRITE_X + add hl, de + ld [hl], a + ld hl, OBJECT_NEXT_MAP_Y + add hl, de + ld [hl], c + ld a, c + ld hl, YCoord + sub [hl] + and $f + swap a + ld hl, wFollowNotExactPersonY + sub [hl] + ld hl, OBJECT_SPRITE_Y + add hl, de + ld [hl], a + ld a, [hObjectStructIndexBuffer] + ld hl, OBJECT_RANGE + add hl, de + ld [hl], a + ld hl, OBJECT_MOVEMENTTYPE + add hl, de + ld [hl], SPRITEMOVEDATA_FOLLOWNOTEXACT + ld hl, OBJECT_STEP_TYPE + add hl, de + ld [hl], STEP_TYPE_00 + ret + +GetRelativeFacing:: ; 8417 +; Determines which way map object e would have to turn to face map object d. Returns carry if it's impossible for whatever reason. + ld a, d + call GetMapObject + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + cp NUM_OBJECT_STRUCTS + jr nc, .carry + ld d, a + ld a, e + call GetMapObject + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, bc + ld a, [hl] + cp NUM_OBJECT_STRUCTS + jr nc, .carry + ld e, a + call .GetFacing_e_relativeto_d + ret + +.carry + scf + ret + +.GetFacing_e_relativeto_d: ; 8439 +; Determines which way object e would have to turn to face object d. Returns carry if it's impossible. +; load the coordinates of object d into bc + ld a, d + call GetObjectStruct + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld c, [hl] + ld b, a + push bc +; load the coordinates of object e into de + ld a, e + call GetObjectStruct + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld e, [hl] + pop bc +; |x1 - x2| + ld a, b + sub d + jr z, .same_x_1 + jr nc, .b_right_of_d_1 + cpl + inc a + +.b_right_of_d_1 +; |y1 - y2| + ld h, a + ld a, c + sub e + jr z, .same_y_1 + jr nc, .c_below_e_1 + cpl + inc a + +.c_below_e_1 +; |y1 - y2| - |x1 - x2| + sub h + jr c, .same_y_1 + +.same_x_1 +; compare the y coordinates + ld a, c + cp e + jr z, .same_x_and_y + jr c, .c_directly_below_e +; c directly above e + ld d, DOWN + and a + ret + +.c_directly_below_e + ld d, UP + and a + ret + +.same_y_1 + ld a, b + cp d + jr z, .same_x_and_y + jr c, .b_directly_right_of_d +; b directly left of d + ld d, RIGHT + and a + ret + +.b_directly_right_of_d + ld d, LEFT + and a + ret + +.same_x_and_y + scf + ret + +QueueFollowerFirstStep: ; 848a + call .QueueFirstStep + jr c, .same + ld [wFollowMovementQueue], a + xor a + ld [wFollowerMovementQueueLength], a + ret + +.same + ld a, -1 + ld [wFollowerMovementQueueLength], a + ret + +.QueueFirstStep + ld a, [wObjectFollow_Leader] + call GetObjectStruct + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld e, [hl] + ld a, [wObjectFollow_Follower] + call GetObjectStruct + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, d + cp [hl] + jr z, .check_y + jr c, .left + and a + ld a, movement_step_right + ret + +.left + and a + ld a, movement_step_left + ret + +.check_y + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, e + cp [hl] + jr z, .same_xy + jr c, .up + and a + ld a, movement_step_down + ret + +.up + and a + ld a, movement_step_up + ret + +.same_xy + scf + ret diff --git a/engine/pokecenter_pc.asm b/engine/pokecenter_pc.asm index a75798709..4c4effb6b 100755 --- a/engine/pokecenter_pc.asm +++ b/engine/pokecenter_pc.asm @@ -2,9 +2,9 @@ PokemonCenterPC: ; 1559a call PC_CheckPartyForPokemon ret c call PC_PlayBootSound - ld hl, UnknownText_0x15a27 + ld hl, PokeCenterPCText_BootedUpPC call PC_DisplayText - ld hl, UnknownText_0x15a2c + ld hl, PokeCenterPCText_AccessWhosePC call PC_DisplayTextWaitMenu ld hl, .TopMenu call LoadMenuDataHeader @@ -25,40 +25,35 @@ PokemonCenterPC: ; 1559a call ExitMenu call CloseWindow ret -; 155d6 -.TopMenu: ; 0x155d6 +.TopMenu db $48 ; flags db 00, 00 ; start coords db 12, 15 ; end coords dw .MenuData2 db 1 ; default option -; 0x155de -.MenuData2: ; 0x155de +.MenuData2 db $a0 ; flags db 0 ; items dw .WhichPC dw PlaceNthMenuStrings dw .JumpTable -; 0x155e6 -.JumpTable: ; 155e6 +.JumpTable dw PlayersPC, .String_PlayersPC dw BillsPC, .String_BillsPC dw OaksPC, .String_OaksPC dw HallOfFamePC, .String_HallOfFame dw TurnOffPC, .String_TurnOff -; 155fa -.String_PlayersPC: db "<PLAYER>'s PC@" -.String_BillsPC: db "BILL's PC@" -.String_OaksPC: db "PROF.OAK's PC@" -.String_HallOfFame: db "HALL OF FAME@" -.String_TurnOff: db "TURN OFF@" -; 1562c +.String_PlayersPC: db "<PLAYER>'s PC@" +.String_BillsPC: db "BILL's PC@" +.String_OaksPC: db "PROF.OAK's PC@" +.String_HallOfFame: db "HALL OF FAME@" +.String_TurnOff: db "TURN OFF@" -.WhichPC: ; 1562c +.WhichPC ; before pokedex db 3 ; items db 1, 0, 4 ; bill's, player's, turn off @@ -73,9 +68,8 @@ PokemonCenterPC: ; 1559a db 5 ; items db 1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off db -1 -; 1563e -.ChooseWhichPCListToUse: ; 1563e +.ChooseWhichPCListToUse call CheckReceivedDex jr nz, .got_dex ld a, $0 @@ -96,13 +90,12 @@ PC_CheckPartyForPokemon: ; 15650 ret nz ld de, SFX_CHOOSE_PC_OPTION call PlaySFX - ld hl, UnknownText_0x15663 + ld hl, .MustHavePokemonToUse call PC_DisplayText scf ret -; 15663 -UnknownText_0x15663: ; 0x15663 +.MustHavePokemonToUse ; Bzzzzt! You must have a #MON to use this! text_jump UnknownText_0x1c1328 db "@" @@ -110,7 +103,7 @@ UnknownText_0x15663: ; 0x15663 BillsPC: ; 15668 call PC_PlayChoosePCSound - ld hl, UnknownText_0x15a31 + ld hl, PokeCenterPCText_AccessedBillsPC call PC_DisplayText callba _BillsPC and a @@ -119,7 +112,7 @@ BillsPC: ; 15668 PlayersPC: ; 15679 call PC_PlayChoosePCSound - ld hl, UnknownText_0x15a36 + ld hl, PokeCenterPCText_AccessedOwnPC call PC_DisplayText ld b, $0 call _PlayersPC @@ -129,7 +122,7 @@ PlayersPC: ; 15679 OaksPC: ; 15689 call PC_PlayChoosePCSound - ld hl, UnknownText_0x15a3b + ld hl, PokeCenterPCText_AccessedOaksPC call PC_DisplayText callba ProfOaksPC and a @@ -146,7 +139,7 @@ HallOfFamePC: ; 1569a ; 156ab TurnOffPC: ; 156ab - ld hl, UnknownText_0x15a40 + ld hl, PokeCenterPCText_LinkClosed call PrintText scf ret @@ -166,7 +159,7 @@ PC_PlayChoosePCSound: ; 156c2 ld de, SFX_CHOOSE_PC_OPTION jr PC_WaitPlaySFX -Function156c7: ; 156c7 +PC_PlaySwapItemsSound: ; 156c7 ld de, SFX_SWITCH_POKEMON call PC_WaitPlaySFX ld de, SFX_SWITCH_POKEMON @@ -218,8 +211,8 @@ _PlayersPC: ; 15704 Function15715: ; 15715 xor a - ld [wd0d7], a - ld [wd0dd], a + ld [wPCItemsCursor], a + ld [wPCItemsScrollPosition], a ld hl, KrissPCMenuData call LoadMenuDataHeader .asm_15722 @@ -316,19 +309,18 @@ UnknownText_0x157cc: ; 0x157cc KrisWithdrawItemMenu: ; 0x157d1 call LoadStandardMenuDataHeader callba ClearPCItemScreen -.asm_157da - call Function15985 - jr c, .asm_157e4 - call Function157e9 - jr .asm_157da +.loop + call PCItemsJoypad + jr c, .quit + call .Submenu + jr .loop -.asm_157e4 +.quit call CloseSubmenu xor a ret -; 0x157e9 -Function157e9: ; 0x157e9 +.Submenu ; check if the item has a quantity callba _CheckTossableItem ld a, [wItemAttributeParamBuffer] @@ -351,7 +343,7 @@ Function157e9: ; 0x157e9 .withdraw ld a, [wItemQuantityChangeBuffer] ld [Buffer1], a ; quantity - ld a, [wd107] + ld a, [CurItemQuantity] ld [Buffer2], a ld hl, NumItems call ReceiveItem @@ -359,7 +351,7 @@ Function157e9: ; 0x157e9 ld a, [Buffer1] ld [wItemQuantityChangeBuffer], a ld a, [Buffer2] - ld [wd107], a + ld [CurItemQuantity], a ld hl, PCItems call TossItem predef PartyMonItemName @@ -377,7 +369,6 @@ Function157e9: ; 0x157e9 .done ret -; 0x15850 .HowManyText ; 0x15850 text_jump _KrissPCHowManyWithdrawText @@ -391,24 +382,22 @@ Function157e9: ; 0x157e9 text_jump _KrissPCNoRoomWithdrawText db "@" - KrisTossItemMenu: ; 0x1585f call LoadStandardMenuDataHeader callba ClearPCItemScreen -.asm_15868 - call Function15985 - jr c, .asm_15878 +.loop + call PCItemsJoypad + jr c, .quit ld de, PCItems - callba Function129f4 - jr .asm_15868 + callba TossItemFromPC + jr .loop -.asm_15878 +.quit call CloseSubmenu xor a ret ; 0x1587d - KrisDecorationMenu: ; 0x1587d callba _KrisDecorationMenu ld a, c @@ -418,54 +407,48 @@ KrisDecorationMenu: ; 0x1587d ret ; 0x15888 - KrisLogOffMenu: ; 0x15888 xor a scf ret ; 0x1588b - KrisDepositItemMenu: ; 0x1588b - call Function158b8 - jr c, .asm_158b6 + call .CheckItemsInBag + jr c, .nope call DisableSpriteUpdates call LoadStandardMenuDataHeader callba DepositSellInitPackBuffers -.asm_1589c +.loop callba DepositSellPack ld a, [wcf66] and a - jr z, .asm_158b3 - call Function158cc + jr z, .close + call .TryDepositItem callba CheckRegisteredItem - jr .asm_1589c + jr .loop -.asm_158b3 +.close call CloseSubmenu -.asm_158b6 +.nope xor a ret -; 0x158b8 -Function158b8: ; 0x158b8 +.CheckItemsInBag callba HasNoItems ret nc - ld hl, UnknownText_0x158c7 + ld hl, .NoItemsInBag call MenuTextBoxBackup scf ret -; 0x158c7 -UnknownText_0x158c7: ; 0x158c7 +.NoItemsInBag ; No items here! text_jump UnknownText_0x1c13df db "@" -; 0x158cc - -Function158cc: ; 0x158cc +.TryDepositItem ld a, [wSpriteUpdatesEnabled] push af ld a, $0 @@ -477,9 +460,8 @@ Function158cc: ; 0x158cc pop af ld [wSpriteUpdatesEnabled], a ret -; 0x158e7 -.dw: ; 0x158e7 +.dw dw .tossable dw .no_toss dw .no_toss @@ -488,32 +470,31 @@ Function158cc: ; 0x158cc dw .tossable dw .tossable -.no_toss: +.no_toss ret -.tossable: +.tossable ld a, [Buffer1] push af ld a, [Buffer2] push af - call Function1590a + call .DepositItem_ pop af ld [Buffer2], a pop af ld [Buffer1], a ret -; 0x1590a -Function1590a: ; 0x1590a +.DepositItem_ callba _CheckTossableItem ld a, [wItemAttributeParamBuffer] and a - jr z, .asm_1591d + jr z, .AskQuantity ld a, $1 ld [wItemQuantityChangeBuffer], a - jr .asm_15933 + jr .DepositItem -.asm_1591d +.AskQuantity ld hl, .HowManyText call MenuTextBox callba SelectQuantityToToss @@ -521,20 +502,20 @@ Function1590a: ; 0x1590a call ExitMenu call ExitMenu pop af - jr c, .asm_1596c + jr c, .DeclinedToDeposit -.asm_15933 +.DepositItem ld a, [wItemQuantityChangeBuffer] ld [Buffer1], a - ld a, [wd107] + ld a, [CurItemQuantity] ld [Buffer2], a ld hl, PCItems call ReceiveItem - jr nc, .asm_15965 + jr nc, .NoRoomInPC ld a, [Buffer1] ld [wItemQuantityChangeBuffer], a ld a, [Buffer2] - ld [wd107], a + ld [CurItemQuantity], a ld hl, NumItems call TossItem predef PartyMonItemName @@ -542,16 +523,14 @@ Function1590a: ; 0x1590a call PrintText ret -.asm_15965 +.NoRoomInPC ld hl, .NoRoomText call PrintText ret -.asm_1596c +.DeclinedToDeposit and a ret -; 0x1596e - .HowManyText ; 0x1596e text_jump _KrissPCHowManyDepositText @@ -565,87 +544,82 @@ Function1590a: ; 0x1590a text_jump _KrissPCNoRoomDepositText db "@" - KrisMailBoxMenu: ; 0x1597d callba _KrisMailBoxMenu xor a ret ; 0x15985 - -Function15985: ; 0x15985 +PCItemsJoypad: ; 0x15985 xor a - ld [wd0e3], a -.asm_15989 + ld [wSwitchItem], a +.loop ld a, [wSpriteUpdatesEnabled] push af ld a, $0 ld [wSpriteUpdatesEnabled], a - ld hl, MenuData15a08 + ld hl, .PCItemsMenuData call CopyMenuDataHeader hlcoord 0, 0 - ld b, $a - ld c, $12 + ld b, 10 + ld c, 18 call TextBox - ld a, [wd0d7] + ld a, [wPCItemsCursor] ld [wMenuCursorBuffer], a - ld a, [wd0dd] + ld a, [wPCItemsScrollPosition] ld [wMenuScrollPosition], a call ScrollingMenu ld a, [wMenuScrollPosition] - ld [wd0dd], a + ld [wPCItemsScrollPosition], a ld a, [wMenuCursorY] - ld [wd0d7], a + ld [wPCItemsCursor], a pop af ld [wSpriteUpdatesEnabled], a - ld a, [wd0e3] + ld a, [wSwitchItem] and a - jr nz, .asm_159d8 + jr nz, .moving_stuff_around ld a, [wMenuJoypad] - cp $2 - jr z, .asm_15a06 - cp $1 - jr z, .asm_159fb - cp $4 - jr z, .asm_159f2 - jr .asm_159f8 - -.asm_159d8 + cp B_BUTTON + jr z, .b_1 + cp A_BUTTON + jr z, .a_1 + cp SELECT + jr z, .select_1 + jr .next + +.moving_stuff_around ld a, [wMenuJoypad] - cp $2 - jr z, .asm_159e9 - cp $1 - jr z, .asm_159ef - cp $4 - jr z, .asm_159ef - jr .asm_159f8 - -.asm_159e9 + cp B_BUTTON + jr z, .b_2 + cp A_BUTTON + jr z, .a_select_2 + cp SELECT + jr z, .a_select_2 + jr .next + +.b_2 xor a - ld [wd0e3], a - jr .asm_159f8 - -.asm_159ef - call Function156c7 + ld [wSwitchItem], a + jr .next -.asm_159f2 +.a_select_2 + call PC_PlaySwapItemsSound +.select_1 callba SwitchItemsInBag +.next + jp .loop -.asm_159f8 - jp .asm_15989 - -.asm_159fb - callba Function24706 +.a_1 + callba ScrollingMenu_ClearLeftColumn call PlaceHollowCursor and a ret -.asm_15a06 +.b_1 scf ret -; 0x15a08 -MenuData15a08: ; 0x15a08 +.PCItemsMenuData db %01000000 db 1, 4 ; start coords db 10, 18 ; end coords @@ -667,38 +641,37 @@ PC_DisplayText: ; 15a20 ret ; 15a27 - -UnknownText_0x15a27: ; 0x15a27 +PokeCenterPCText_BootedUpPC: ; 0x15a27 ; turned on the PC. text_jump UnknownText_0x1c144d db "@" ; 0x15a2c -UnknownText_0x15a2c: ; 0x15a2c +PokeCenterPCText_AccessWhosePC: ; 0x15a2c ; Access whose PC? text_jump UnknownText_0x1c1462 db "@" ; 0x15a31 -UnknownText_0x15a31: ; 0x15a31 +PokeCenterPCText_AccessedBillsPC: ; 0x15a31 ; BILL's PC accessed. #MON Storage System opened. text_jump UnknownText_0x1c1474 db "@" ; 0x15a36 -UnknownText_0x15a36: ; 0x15a36 +PokeCenterPCText_AccessedOwnPC: ; 0x15a36 ; Accessed own PC. Item Storage System opened. text_jump UnknownText_0x1c14a4 db "@" ; 0x15a3b -UnknownText_0x15a3b: ; 0x15a3b +PokeCenterPCText_AccessedOaksPC: ; 0x15a3b ; PROF.OAK's PC accessed. #DEX Rating System opened. text_jump UnknownText_0x1c14d2 db "@" ; 0x15a40 -UnknownText_0x15a40: ; 0x15a40 +PokeCenterPCText_LinkClosed: ; 0x15a40 ; … Link closed… text_jump UnknownText_0x1c1505 db "@" diff --git a/engine/pokegear.asm b/engine/pokegear.asm index 44127fafc..c6829adbe 100755 --- a/engine/pokegear.asm +++ b/engine/pokegear.asm @@ -2841,7 +2841,7 @@ TownMapPals: ; 91f13 ; The palette data is condensed to nybbles, ; least-significant first. - ld hl, TownMapPalMap + ld hl, .PalMap srl a jr c, .odd ; Even-numbered tile ids take the bottom nybble... @@ -2878,13 +2878,20 @@ TownMapPals: ; 91f13 jr nz, .loop ret -TownMapPalMap: - dn 1, 1, 2, 1, 2, 2, 0, 0, 1, 1, 1, 3, 5, 4, 5, 4 - dn 1, 1, 2, 1, 2, 2, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0 - dn 1, 1, 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - dn 0, 0, 0, 0, 4, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0 - dn 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3 - dn 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0 +.PalMap +townmappals: MACRO +rept _NARG / 2 + dn \2, \1 + shift + shift +endr +endm + townmappals 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 3, 1, 4, 5, 4, 5 + townmappals 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0 + townmappals 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + townmappals 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 + townmappals 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 + townmappals 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0 ; 91f7b TownMapMon: ; 91f7b diff --git a/engine/printnum.asm b/engine/printnum.asm new file mode 100755 index 000000000..4ef7721c8 --- /dev/null +++ b/engine/printnum.asm @@ -0,0 +1,300 @@ +_PrintNum:: ; c4c7 +; 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. +; 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: right-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 + ld [hPrintNum1], a + ld [hPrintNum2], a + ld [hPrintNum3], a + ld a, b + and $f + cp 1 + jr z, .byte + cp 2 + jr z, .word +; maximum 3 bytes +.long + ld a, [de] + ld [hPrintNum2], a + inc de + ld a, [de] + ld [hPrintNum3], a + inc de + ld a, [de] + ld [hPrintNum4], a + jr .start + +.word + ld a, [de] + ld [hPrintNum3], a + inc de + ld a, [de] + ld [hPrintNum4], a + jr .start + +.byte + ld a, [de] + ld [hPrintNum4], 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, 1000000 / $10000 % $100 + ld [hPrintNum5], a + ld a, 1000000 / $100 % $100 + ld [hPrintNum6], a + ld a, 1000000 % $100 + ld [hPrintNum7], a + call .PrintDigit + call .AdvancePointer + +.six + ld a, 100000 / $10000 % $100 + ld [hPrintNum5], a + ld a, 100000 / $100 % $100 + ld [hPrintNum6], a + ld a, 100000 % $100 + ld [hPrintNum7], a + call .PrintDigit + call .AdvancePointer + +.five + xor a + ld [hPrintNum5], a + ld a, 10000 / $100 + ld [hPrintNum6], a + ld a, 10000 % $100 + ld [hPrintNum7], a + call .PrintDigit + call .AdvancePointer + +.four + xor a + ld [hPrintNum5], a + ld a, 1000 / $100 + ld [hPrintNum6], a + ld a, 1000 % $100 + ld [hPrintNum7], a + call .PrintDigit + call .AdvancePointer + +.three + xor a + ld [hPrintNum5], a + xor a + ld [hPrintNum6], a + ld a, 100 + ld [hPrintNum7], a + call .PrintDigit + call .AdvancePointer + +.two + dec e + jr nz, .two_skip + ld a, "0" + ld [hPrintNum1], a +.two_skip + + ld c, 0 + ld a, [hPrintNum4] +.mod_10 + cp 10 + jr c, .modded_10 + sub 10 + inc c + jr .mod_10 +.modded_10 + + ld b, a + ld a, [hPrintNum1] + 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 + ld [hPrintNum1], a + inc e + dec e + jr nz, .money_leading_zero + inc hl + ld [hl], $f2 ; XXX + +.money_leading_zero + call .AdvancePointer + call .PrintYen + ld a, "0" + add b + ld [hli], a + + pop de + pop bc + ret + +.PrintYen: ; c5ba + push af + ld a, [hPrintNum1] + and a + jr nz, .stop + bit 5, d + jr z, .stop + ld a, "¥" + ld [hli], a + res 5, d + +.stop + pop af + ret + +.PrintDigit: ; c5cb (3:45cb) + dec e + jr nz, .ok + ld a, "0" + ld [hPrintNum1], a +.ok + ld c, 0 +.loop + ld a, [hPrintNum5] + ld b, a + ld a, [hPrintNum2] + ld [hPrintNum8], a + cp b + jr c, .skip1 + sub b + ld [hPrintNum2], a + ld a, [hPrintNum6] + ld b, a + ld a, [hPrintNum3] + ld [hPrintNum9], a + cp b + jr nc, .skip2 + ld a, [hPrintNum2] + or 0 + jr z, .skip3 + dec a + ld [hPrintNum2], a + ld a, [hPrintNum3] +.skip2 + sub b + ld [hPrintNum3], a + ld a, [hPrintNum7] + ld b, a + ld a, [hPrintNum4] + ld [hPrintNum10], a + cp b + jr nc, .skip4 + ld a, [hPrintNum3] + and a + jr nz, .skip5 + ld a, [hPrintNum2] + and a + jr z, .skip6 + dec a + ld [hPrintNum2], a + xor a +.skip5 + dec a + ld [hPrintNum3], a + ld a, [hPrintNum4] +.skip4 + sub b + ld [hPrintNum4], a + inc c + jr .loop +.skip6 + ld a, [hPrintNum9] + ld [hPrintNum3], a +.skip3 + ld a, [hPrintNum8] + ld [hPrintNum2], a +.skip1 + ld a, [hPrintNum1] + or c + jr z, .PrintLeadingZero + ld a, [hPrintNum1] + 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 + ld [hPrintNum1], a + inc e + dec e + ret nz + inc hl + ld [hl], "·" + ret + +.PrintLeadingZero: ; c644 +; 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: ; c64a +; 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 + ld a, [hPrintNum1] + and a + ret z +.inc + inc hl + ret diff --git a/engine/scrolling_menu.asm b/engine/scrolling_menu.asm index b09453239..001beb71b 100755 --- a/engine/scrolling_menu.asm +++ b/engine/scrolling_menu.asm @@ -210,17 +210,17 @@ ScrollingMenu_GetCursorPosition: ; 246fc ret ; 24706 -Function24706: ; 24706 (9:4706) +ScrollingMenu_ClearLeftColumn: ; 24706 (9:4706) call MenuBoxCoord2Tile ld de, SCREEN_WIDTH add hl, de ld de, 2 * SCREEN_WIDTH ld a, [wMenuData2_ScrollingMenuHeight] -.asm_24713 +.loop ld [hl], " " add hl, de dec a - jr nz, .asm_24713 + jr nz, .loop ret InitScrollingMenuCursor: ; 2471a diff --git a/engine/sine.asm b/engine/sine.asm new file mode 100755 index 000000000..b5da8059c --- /dev/null +++ b/engine/sine.asm @@ -0,0 +1,50 @@ +_Sine:: ; 84d9 +; A simple sine function. +; Return d * sin(e) in hl. + +; e is a signed 6-bit value. + ld a, e + and %111111 + cp %100000 + jr nc, .negative + + call .ApplySineWave + ld a, h + ret + +.negative + and %011111 + call .ApplySineWave + ld a, h + xor -1 + inc a + ret + +.ApplySineWave: ; 84ef + ld e, a + ld a, d + ld d, 0 + ld hl, .sinewave + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 + +; Factor amplitude +.multiply + srl a + jr nc, .even + add hl, de +.even + sla e + rl d + and a + jr nz, .multiply + ret + +.sinewave: ; 850b +; A $20-word table representing a sine wave. +; 90 degrees is index $10 at a base amplitude of $100. + sine_wave $100 diff --git a/engine/startmenu.asm b/engine/startmenu.asm index 25a3eee39..acad9bb88 100755 --- a/engine/startmenu.asm +++ b/engine/startmenu.asm @@ -91,7 +91,7 @@ StartMenu:: ; 125cd ld [MenuSelection], a .loop call .PrintMenuAccount - call Function1f1a + call GetScrollingMenuJoypad ld a, [wMenuJoypad] cp B_BUTTON jr z, .b @@ -591,70 +591,66 @@ HasNoItems: ; 129d5 and a ret -Function129f4: ; 129f4 +TossItemFromPC: ; 129f4 push de call PartyMonItemName callba _CheckTossableItem ld a, [wItemAttributeParamBuffer] and a - jr nz, .asm_12a3f - ld hl, UnknownText_0x12a45 + jr nz, .key_item + ld hl, .TossHowMany call MenuTextBox callba SelectQuantityToToss push af call CloseWindow call ExitMenu pop af - jr c, .asm_12a42 - ld hl, UnknownText_0x12a4a + jr c, .quit + ld hl, .ConfirmToss call MenuTextBox call YesNoBox push af call ExitMenu pop af - jr c, .asm_12a42 + jr c, .quit pop hl ld a, [wd107] call TossItem call PartyMonItemName - ld hl, UnknownText_0x12a4f + ld hl, .TossedThisMany call MenuTextBox call ExitMenu and a ret -.asm_12a3f - call Function12a54 -.asm_12a42 + +.key_item + call .CantToss +.quit pop hl scf ret -; 12a45 (4:6a45) -UnknownText_0x12a45: ; 0x12a45 +.TossHowMany ; Toss out how many @ (S)? text_jump UnknownText_0x1c1a90 db "@" -; 0x12a4a -UnknownText_0x12a4a: ; 0x12a4a +.ConfirmToss ; Throw away @ @ (S)? text_jump UnknownText_0x1c1aad db "@" -; 0x12a4f -UnknownText_0x12a4f: ; 0x12a4f +.TossedThisMany ; Discarded @ (S). text_jump UnknownText_0x1c1aca db "@" -; 0x12a54 -Function12a54: ; 12a54 (4:6a54) - ld hl, UnknownText_0x12a5b +.CantToss + ld hl, .TooImportantToToss call MenuTextBoxBackup ret -; 12a5b (4:6a5b) -UnknownText_0x12a5b: ; 0x12a5b +.TooImportantToToss ; That's too impor- tant to toss out! text_jump UnknownText_0x1c1adf db "@" @@ -830,7 +826,7 @@ GiveTakePartyMonItem: ; 12b60 ; 12ba9 -.GiveItem: ; 12ba9 +.GiveItem callba DepositSellInitPackBuffers @@ -1168,7 +1164,7 @@ MonMailAction: ; 12d45 ; 12dc9 -.MenuDataHeader: ; 0x12dc9 +.MenuDataHeader db $40 ; flags db 10, 12 ; start coords db 17, 19 ; end coords @@ -1176,7 +1172,7 @@ MonMailAction: ; 12d45 db 1 ; default option ; 0x12dd1 -.MenuData2: ; 0x12dd1 +.MenuData2 db $80 ; flags db 3 ; items db "READ@" @@ -1185,37 +1181,37 @@ MonMailAction: ; 12d45 ; 0x12de2 -.mailwilllosemessagetext: ; 0x12de2 +.mailwilllosemessagetext ; The MAIL will lose its message. OK? text_jump UnknownText_0x1c1c22 db "@" ; 0x12de7 -.tookmailfrommontext: ; 0x12de7 +.tookmailfrommontext ; MAIL detached from <POKEMON>. text_jump UnknownText_0x1c1c47 db "@" ; 0x12dec -.bagfulltext: ; 0x12dec +.bagfulltext ; There's no space for removing MAIL. text_jump UnknownText_0x1c1c62 db "@" ; 0x12df1 -.sendmailtopctext: ; 0x12df1 +.sendmailtopctext ; Send the removed MAIL to your PC? text_jump UnknownText_0x1c1c86 db "@" ; 0x12df6 -.mailboxfulltext: ; 0x12df6 +.mailboxfulltext ; Your PC's MAILBOX is full. text_jump UnknownText_0x1c1ca9 db "@" ; 0x12dfb -.sentmailtopctext: ; 0x12dfb +.sentmailtopctext ; The MAIL was sent to your PC. text_jump UnknownText_0x1c1cc4 db "@" @@ -1392,13 +1388,13 @@ MonMenu_Softboiled_MilkDrink: ; 12ee6 ret ; 12f00 -.Text_NotEnoughHP: ; 0x12f00 +.Text_NotEnoughHP ; Not enough HP! text_jump UnknownText_0x1c1ce3 db "@" ; 0x12f05 -.CheckMonHasEnoughHP: ; 12f05 +.CheckMonHasEnoughHP ; Need to have at least (MaxHP / 5) HP left. ld a, MON_MAXHP call GetPartyParamLocation @@ -1471,7 +1467,7 @@ ChooseMoveToDelete: ; 12f5b ret ; 12f73 -.asm_12f73: ; 12f73 +.asm_12f73 call SetUpMoveScreenBG ld de, DeleteMoveScreenAttrs call SetMenuAttributes @@ -1480,27 +1476,27 @@ ChooseMoveToDelete: ; 12f5b set 6, [hl] jr .asm_12f93 -.asm_12f86: ; 12f86 +.asm_12f86 call ScrollingMenuJoypad bit 1, a jp nz, .asm_12f9f bit 0, a jp nz, .asm_12f9c -.asm_12f93: ; 12f93 +.asm_12f93 call PrepareToPlaceMoveData call PlaceMoveData jp .asm_12f86 ; 12f9c -.asm_12f9c: ; 12f9c +.asm_12f9c and a jr .asm_12fa0 -.asm_12f9f: ; 12f9f +.asm_12f9f scf -.asm_12fa0: ; 12fa0 +.asm_12fa0 push af xor a ld [wSwitchMon], a @@ -1583,7 +1579,7 @@ MoveScreenLoop: ; 12fd5 ld de, String_1316b call PlaceString jp .joy_loop -.b_button: ; 13038 +.b_button call PlayClickSFX call WaitSFX ld a, [wMoveSwapBuffer] @@ -1600,7 +1596,7 @@ MoveScreenLoop: ; 12fd5 jp .loop ; 1305b -.d_right: ; 1305b +.d_right ld a, [wMoveSwapBuffer] and a jp nz, .joy_loop @@ -1615,7 +1611,7 @@ MoveScreenLoop: ; 12fd5 jp z, .joy_loop jp MoveScreenLoop -.d_left: ; 13075 +.d_left ld a, [wMoveSwapBuffer] and a jp nz, .joy_loop @@ -1665,7 +1661,7 @@ MoveScreenLoop: ; 12fd5 jr .cycle_left_loop ; 130c6 -.a_button: ; 130c6 +.a_button call PlayClickSFX call WaitSFX ld a, [wMoveSwapBuffer] @@ -1716,7 +1712,7 @@ MoveScreenLoop: ; 12fd5 jp .loop ; 1313a -.copy_move: ; 1313a +.copy_move push hl ld a, [wMenuCursorY] dec a @@ -1739,7 +1735,7 @@ MoveScreenLoop: ; 12fd5 ret ; 13154 -.exit: ; 13154 +.exit xor a ld [wMoveSwapBuffer], a ld hl, w2DMenuFlags1 @@ -1776,7 +1772,7 @@ SetUpMoveScreenBG: ; 13172 ld a, [hl] ld [wd265], a ld e, $2 - callba Function8e83f + callba LoadMenuMonIcon hlcoord 0, 1 ld b, 9 ld c, 18 diff --git a/engine/tile_events.asm b/engine/tile_events.asm index a6794e817..77f267b4f 100755 --- a/engine/tile_events.asm +++ b/engine/tile_events.asm @@ -21,17 +21,17 @@ CheckDirectionalWarp:: ; 149af ; Else, set carry (immediate warp). ld a, [PlayerStandingTile] cp $70 ; Warp on down - jr z, .not_warp + jr z, .directional cp $76 ; Warp on left - jr z, .not_warp + jr z, .directional cp $78 ; Warp on up - jr z, .not_warp + jr z, .directional cp $7e ; Warp on right - jr z, .not_warp + jr z, .directional scf ret -.not_warp +.directional xor a ret ; 149c6 diff --git a/engine/time.asm b/engine/time.asm index 4240522c2..29670afdc 100755 --- a/engine/time.asm +++ b/engine/time.asm @@ -124,16 +124,14 @@ endr jr z, .RestartKenjiBreakCountdown dec [hl] jr nz, .DontRestartKenjiBreakCountdown - .RestartKenjiBreakCountdown call Special_SampleKenjiBreakCountdown - .DontRestartKenjiBreakCountdown jr RestartDailyResetTimer ; 11485 Special_SampleKenjiBreakCountdown: ; 11485 -; Generate a random number between 3 and 5 +; Generate a random number between 3 and 6 call Random and 3 add 3 diff --git a/engine/trade/animation.asm b/engine/trade/animation.asm index 719a230ff..be5318b2e 100755 --- a/engine/trade/animation.asm +++ b/engine/trade/animation.asm @@ -1440,7 +1440,7 @@ LoadTradeBallAndCableGFX: ; 2982b LoadTradeBubbleGFX: ; 2985a call DelayFrame ld e, $3 - callab Function8e83f + callab LoadMenuMonIcon ld de, TradeBubbleGFX ld hl, VTiles0 tile $72 lb bc, BANK(TradeBubbleGFX), $4 |