diff options
Diffstat (limited to 'engine/overworld')
24 files changed, 1582 insertions, 514 deletions
diff --git a/engine/overworld/cable_club_npc.asm b/engine/overworld/cable_club_npc.asm index 88bf177f..9ae5b508 100755 --- a/engine/overworld/cable_club_npc.asm +++ b/engine/overworld/cable_club_npc.asm @@ -1,7 +1,7 @@ CableClubNPC: ; 71c5 (1:71c5) ld hl, CableClubNPCText1 call PrintText - ld a, [$d74b] + ld a, [wd74b] bit 5, a jp nz, Func_71e1 ld c, $3c @@ -12,9 +12,9 @@ CableClubNPC: ; 71c5 (1:71c5) Func_71e1: ; 71e1 (1:71e1) ld a, $1 - ld [$cc34], a + ld [wMenuJoypadPollCount], a ld a, $5a - ld [$cc47], a + ld [wcc47], a .asm_71eb ld a, [$ffaa] cp $2 @@ -29,9 +29,9 @@ Func_71e1: ; 71e1 (1:71e1) ld [$ffad], a ld a, $80 ld [$ff02], a - ld a, [$cc47] + ld a, [wcc47] dec a - ld [$cc47], a + ld [wcc47], a jr z, .asm_7287 ; 0x720b $7a ld a, $1 ld [$ff01], a @@ -48,11 +48,11 @@ Func_71e1: ; 71e1 (1:71e1) ld hl, CableClubNPCText2 call PrintText xor a - ld [$cc34], a + ld [wMenuJoypadPollCount], a call YesNoChoice ld a, $1 - ld [$cc34], a - ld a, [$cc26] + ld [wMenuJoypadPollCount], a + ld a, [wCurrentMenuItem] and a jr nz, .asm_728f ; 0x723e $4f callab SaveSAVtoSRAM @@ -61,15 +61,15 @@ Func_71e1: ; 71e1 (1:71e1) call PlaySoundWaitForCurrent ld hl, CableClubNPCText3 call PrintText - ld hl, $cc47 + ld hl, wcc47 ld a, $3 ld [hli], a xor a ld [hl], a ld [$ffa9], a - ld [$cc42], a + ld [wcc42], a call Func_227f - ld hl, $cc47 + ld hl, wcc47 ld a, [hli] inc a jr nz, Func_72a8 ; 0x726b $3b @@ -98,13 +98,13 @@ Func_71e1: ; 71e1 (1:71e1) Func_7298: ; 7298 (1:7298) xor a - ld hl, $cc47 + ld hl, wcc47 ld [hli], a ld [hl], a - ld hl, $d72e + ld hl, wd72e res 6, [hl] xor a - ld [$cc34], a + ld [wMenuJoypadPollCount], a ret Func_72a8: ; 72a8 (1:72a8) diff --git a/engine/overworld/card_key.asm b/engine/overworld/card_key.asm index 658f4712..f48c26f4 100755 --- a/engine/overworld/card_key.asm +++ b/engine/overworld/card_key.asm @@ -8,9 +8,8 @@ PrintCardKeyText: ; 52673 (14:6673) ret z cp b jr nz, .asm_5267a - ld a, $35 - call Predef ; indirect jump to Func_c586 (c586 (3:4586)) - ld a, [$cfc6] + predef Func_c586 + ld a, [wcfc6] cp $18 jr z, .asm_5269c cp $24 @@ -35,12 +34,12 @@ PrintCardKeyText: ; 52673 (14:6673) srl d ld a, d ld b, a - ld [$d73f], a + ld [wd73f], a srl e ld a, e ld c, a - ld [$d740], a - ld a, [W_CURMAP] ; $d35e + ld [wd740], a + ld a, [W_CURMAP] ; W_CURMAP cp SILPH_CO_11F jr nz, .asm_526c8 ld a, $3 @@ -48,10 +47,9 @@ PrintCardKeyText: ; 52673 (14:6673) .asm_526c8 ld a, $e .asm_526ca - ld [$d09f], a - ld a, $17 - call Predef ; indirect jump to Func_ee9e - ld hl, $d126 + ld [wd09f], a + predef Func_ee9e + ld hl, wd126 set 5, [hl] ld a, (SFX_1f_57 - SFX_Headers_1f) / 3 jp PlaySound @@ -84,11 +82,11 @@ CardKeyFailText: ; 526f8 (14:66f8) db "@" Func_526fd: ; 526fd (14:66fd) - ld a, [W_YCOORD] ; $d361 + ld a, [W_YCOORD] ; wd361 ld d, a - ld a, [W_XCOORD] ; $d362 + ld a, [W_XCOORD] ; wd362 ld e, a - ld a, [$c109] + ld a, [wSpriteStateData1 + 9] and a jr nz, .asm_5270d inc d diff --git a/engine/overworld/cinnabar_lab.asm b/engine/overworld/cinnabar_lab.asm index 4087b334..eefa2176 100755 --- a/engine/overworld/cinnabar_lab.asm +++ b/engine/overworld/cinnabar_lab.asm @@ -1,18 +1,18 @@ GiveFossilToCinnabarLab: ; 61006 (18:5006) - ld hl, $d730 + ld hl, wd730 set 6, [hl] xor a - ld [wCurrentMenuItem], a ; $cc26 + ld [wCurrentMenuItem], a ; wCurrentMenuItem ld a, $3 - ld [wMenuWatchedKeys], a ; $cc29 - ld a, [$cd37] + ld [wMenuWatchedKeys], a ; wMenuWatchedKeys + ld a, [wcd37] dec a - ld [wMaxMenuItem], a ; $cc28 + ld [wMaxMenuItem], a ; wMaxMenuItem ld a, $2 - ld [wTopMenuItemY], a ; $cc24 + ld [wTopMenuItemY], a ; wTopMenuItemY ld a, $1 - ld [wTopMenuItemX], a ; $cc25 - ld a, [$cd37] + ld [wTopMenuItemX], a ; wTopMenuItemX + ld a, [wcd37] dec a ld bc, $2 ld hl, $3 @@ -24,13 +24,13 @@ GiveFossilToCinnabarLab: ; 61006 (18:5006) call TextBoxBorder call UpdateSprites call Func_610c2 - ld hl, $d730 + ld hl, wd730 res 6, [hl] call HandleMenuInput bit 1, a jr nz, .asm_610a7 - ld hl, $cc5b - ld a, [wCurrentMenuItem] ; $cc26 + ld hl, wcc5b + ld a, [wCurrentMenuItem] ; wCurrentMenuItem ld d, $0 ld e, a add hl, de @@ -55,7 +55,7 @@ GiveFossilToCinnabarLab: ; 61006 (18:5006) ld hl, LabFossil_610ae call PrintText call YesNoChoice - ld a, [wCurrentMenuItem] ; $cc26 + ld a, [wCurrentMenuItem] ; wCurrentMenuItem and a jr nz, .asm_610a7 ld hl, LabFossil_610b3 @@ -65,7 +65,7 @@ GiveFossilToCinnabarLab: ; 61006 (18:5006) callba RemoveItemByID ld hl, LabFossil_610b8 call PrintText - ld hl, $d7a3 + ld hl, wd7a3 set 0, [hl] set 1, [hl] ret @@ -91,7 +91,7 @@ LabFossil_610bd: ; 610bd (18:50bd) db "@" Func_610c2: ; 610c2 (18:50c2) - ld hl, $cc5b + ld hl, wcc5b xor a ld [$ffdb], a .asm_610c8 @@ -99,14 +99,13 @@ Func_610c2: ; 610c2 (18:50c2) cp $ff ret z push hl - ld [$d11e], a + ld [wd11e], a call GetItemName - FuncCoord 2, 2 ; $c3ca - ld hl, Coord + hlCoord 2, 2 ld a, [$ffdb] ld bc, $28 call AddNTimes - ld de, $cd6d + ld de, wcd6d call PlaceString ld hl, $ffdb inc [hl] @@ -116,10 +115,10 @@ Func_610c2: ; 610c2 (18:50c2) ; loads the names of the fossil item and the resulting mon LoadFossilItemAndMonName: ; 610eb (18:50eb) ld a, [W_FOSSILMON] - ld [$d11e], a + ld [wd11e], a call GetMonName call CopyStringToCF4B ld a, [W_FOSSILITEM] - ld [$d11e], a + ld [wd11e], a call GetItemName ret diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm index 6c888e7f..29b52eb9 100755 --- a/engine/overworld/cut.asm +++ b/engine/overworld/cut.asm @@ -1,18 +1,18 @@ UsedCut: ; ef54 (3:6f54) xor a - ld [$cd6a], a - ld a, [W_CURMAPTILESET] ; $d367 + ld [wcd6a], a + ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET and a ; OVERWORLD jr z, .asm_ef6b cp GYM jr nz, .asm_ef77 - ld a, [$cfc6] + ld a, [wcfc6] cp $50 ; gym cut tree jr nz, .asm_ef77 jr asm_ef82 .asm_ef6b dec a - ld a, [$cfc6] + ld a, [wcfc6] cp $3d ; cut tree jr z, asm_ef82 cp $52 ; grass @@ -26,16 +26,16 @@ NothingToCutText: ; ef7d (3:6f7d) db "@" asm_ef82: ; ef82 (3:6f82) - ld [$cd4d], a + ld [wcd4d], a ld a, $1 - ld [$cd6a], a - ld a, [wWhichPokemon] ; $cf92 - ld hl, W_PARTYMON1NAME ; $d2b5 + ld [wcd6a], a + ld a, [wWhichPokemon] ; wWhichPokemon + ld hl, wPartyMonNicks ; wPartyMonNicks call GetPartyMonName - ld hl, $d730 + ld hl, wd730 set 6, [hl] call GBPalWhiteOutWithDelay3 - call CleanLCD_OAM + call ClearSprites call Func_3dbe ld a, $90 ld [$ffb0], a @@ -49,17 +49,17 @@ asm_ef82: ; ef82 (3:6f82) ld hl, UsedCutText call PrintText call LoadScreenTilesFromBuffer2 - ld hl, $d730 + ld hl, wd730 res 6, [hl] ld a, $ff - ld [$cfcb], a + ld [wcfcb], a call AnimateCutTree ld de, CutTreeBlockSwaps ; $7100 call Func_f09f call Func_eedc callba Func_79e96 ld a, $1 - ld [$cfcb], a + ld [wcfcb], a ld a, (SFX_02_56 - SFX_Headers_02) / 3 call PlaySound ld a, $90 @@ -73,32 +73,32 @@ UsedCutText: ; eff2 (3:6ff2) AnimateCutTree: ; eff7 (3:6ff7) xor a - ld [$cd50], a + ld [wcd50], a ld a, $e4 ld [rOBP1], a ; $ff49 - ld a, [$cd4d] + ld a, [wcd4d] cp $52 jr z, .asm_f020 ld de, Overworld_GFX + $2d0 ; $42d0 ; cuttable tree sprite top row - ld hl, $8fc0 + ld hl, vChars1 + $7c0 ld bc, (BANK(Overworld_GFX) << 8) + $02 call CopyVideoData ld de, Overworld_GFX + $3d0 ; $43d0 ; cuttable tree sprite bottom row - ld hl, $8fe0 + ld hl, vChars1 + $7e0 ld bc, (BANK(Overworld_GFX) << 8) + $02 call CopyVideoData jr asm_f055 .asm_f020 - ld hl, $8fc0 + ld hl, vChars1 + $7c0 call LoadCutTreeOAM - ld hl, $8fd0 + ld hl, vChars1 + $7d0 call LoadCutTreeOAM - ld hl, $8fe0 + ld hl, vChars1 + $7e0 call LoadCutTreeOAM - ld hl, $8ff0 + ld hl, vChars1 + $7f0 call LoadCutTreeOAM call asm_f055 - ld hl, $c393 + ld hl, wOAMBuffer + $93 ld de, $4 ld a, $30 ld c, e @@ -125,7 +125,7 @@ CutTreeOAM: ; f060 (3:7060) db $FE,$10,$FF,$10 Func_f068: ; f068 (3:7068) - ld hl, $c104 + ld hl, wSpriteStateData1 + 4 ld a, [hli] ld b, a inc hl @@ -137,7 +137,7 @@ Func_f068: ; f068 (3:7068) srl a ld e, a ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right) - ld a, [$cd50] + ld a, [wcd50] and a ld hl, CutTreeAnimationOffsets ; $708f jr z, .asm_f084 @@ -173,39 +173,39 @@ CutTreeAnimationOffsets2: ; f097 (3:7097) Func_f09f: ; f09f (3:709f) push de - ld a, [W_CURMAPWIDTH] ; $d369 + ld a, [W_CURMAPWIDTH] ; wd369 add $6 ld c, a ld b, $0 ld d, $0 - ld hl, $d35f + ld hl, wd35f ld a, [hli] ld h, [hl] ld l, a add hl, bc - ld a, [$c109] + ld a, [wSpriteStateData1 + 9] and a jr z, .asm_f0c7 cp $4 jr z, .asm_f0cf cp $8 jr z, .asm_f0d7 - ld a, [W_XBLOCKCOORD] ; $d364 + ld a, [W_XBLOCKCOORD] ; wd364 and a jr z, .asm_f0e0 jr .asm_f0ec .asm_f0c7 - ld a, [W_YBLOCKCOORD] ; $d363 + ld a, [W_YBLOCKCOORD] ; wd363 and a jr z, .asm_f0e0 jr .asm_f0df .asm_f0cf - ld a, [W_YBLOCKCOORD] ; $d363 + ld a, [W_YBLOCKCOORD] ; wd363 and a jr z, .asm_f0e1 jr .asm_f0e0 .asm_f0d7 - ld a, [W_XBLOCKCOORD] ; $d364 + ld a, [W_XBLOCKCOORD] ; wd364 and a jr z, .asm_f0e6 jr .asm_f0e0 diff --git a/engine/overworld/cut2.asm b/engine/overworld/cut2.asm index c83e571b..08f6d651 100755 --- a/engine/overworld/cut2.asm +++ b/engine/overworld/cut2.asm @@ -1,18 +1,18 @@ Func_79e96: ; 79e96 (1e:5e96) - ld a, [$cd4d] + ld a, [wcd4d] cp $52 jr z, .asm_79ec8 ld c, $8 .asm_79e9f push bc - ld hl, $c391 + ld hl, wOAMBuffer + $91 ld a, $1 - ld [$d08a], a + ld [wd08a], a ld c, $2 call Func_79339 - ld hl, $c399 + ld hl, wOAMBuffer + $99 ld a, $ff - ld [$d08a], a + ld [wd08a], a ld c, $2 call Func_79339 ld a, [rOBP1] ; $ff49 @@ -33,9 +33,9 @@ Func_79e96: ; 79e96 (1e:5e96) ld c, $8 call Func_79eed call Func_79f30 - ld hl, $c390 + ld hl, wOAMBuffer + $90 ld a, $2 - ld [$d08a], a + ld [wd08a], a ld c, $4 call Func_79352 pop bc @@ -45,24 +45,24 @@ Func_79e96: ; 79e96 (1e:5e96) Func_79eed: ; 79eed (1e:5eed) push bc - ld hl, $c391 + ld hl, wOAMBuffer + $91 ld a, $1 - ld [$d08a], a + ld [wd08a], a ld c, $1 call Func_79339 - ld hl, $c395 + ld hl, wOAMBuffer + $95 ld a, $2 - ld [$d08a], a + ld [wd08a], a ld c, $1 call Func_79339 - ld hl, $c399 + ld hl, wOAMBuffer + $99 ld a, $fe - ld [$d08a], a + ld [wd08a], a ld c, $1 call Func_79339 - ld hl, $c39d + ld hl, wOAMBuffer + $9d ld a, $ff - ld [$d08a], a + ld [wd08a], a ld c, $1 call Func_79339 ld a, [rOBP1] ; $ff49 @@ -75,15 +75,15 @@ Func_79eed: ; 79eed (1e:5eed) ret Func_79f30: ; 79f30 (1e:5f30) - ld hl, $c390 - ld de, $cee9 + ld hl, wOAMBuffer + $90 + ld de, wHPBarMaxHP ld bc, $8 call CopyData - ld hl, $c398 - ld de, $c390 + ld hl, wOAMBuffer + $98 + ld de, wOAMBuffer + $90 ld bc, $8 call CopyData - ld hl, $cee9 - ld de, $c398 + ld hl, wHPBarMaxHP + ld de, wOAMBuffer + $98 ld bc, $8 jp CopyData diff --git a/engine/overworld/doors.asm b/engine/overworld/doors.asm index ff58b752..42ebb174 100755 --- a/engine/overworld/doors.asm +++ b/engine/overworld/doors.asm @@ -1,7 +1,7 @@ HandleDoors: ; 1a609 (6:6609) push de ld hl, DoorTileIDPointers ; $662c - ld a, [W_CURMAPTILESET] ; $d367 + ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET ld de, $3 call IsInArray pop de @@ -10,8 +10,7 @@ HandleDoors: ; 1a609 (6:6609) ld a, [hli] ld h, [hl] ld l, a - FuncCoord 8, 9 ; $c45c - ld a, [Coord] + aCoord 8, 9 ld b, a .asm_1a621 ld a, [hli] diff --git a/engine/overworld/elevator.asm b/engine/overworld/elevator.asm index e483e0c3..10b3b003 100755 --- a/engine/overworld/elevator.asm +++ b/engine/overworld/elevator.asm @@ -34,14 +34,14 @@ ShakeElevator: ; 7bf15 (1e:7f15) ld a, (SFX_02_5f - SFX_Headers_02) / 3 call PlayMusic .asm_7bf57 - ld a, [$c02a] + ld a, [wc02a] cp $b9 jr z, .asm_7bf57 call UpdateSprites jp Func_2307 Func_7bf64: ; 7bf64 (1e:7f64) - ld hl, $d527 + ld hl, wd527 ld a, [hld] push af ld a, [hl] diff --git a/engine/overworld/emotion_bubbles.asm b/engine/overworld/emotion_bubbles.asm index b480c06d..ae7702b4 100755 --- a/engine/overworld/emotion_bubbles.asm +++ b/engine/overworld/emotion_bubbles.asm @@ -1,5 +1,5 @@ -PrintEmotionBubble: ; 17c47 (5:7c47) - ld a, [$cd50] +EmotionBubble: ; 17c47 (5:7c47) + ld a, [wcd50] ld c, a ld b, $0 ld hl, EmotionBubblesPointerTable ; $7caf @@ -8,20 +8,20 @@ PrintEmotionBubble: ; 17c47 (5:7c47) ld e, [hl] inc hl ld d, [hl] - ld hl, $8f80 + ld hl, vChars1 + $780 ld bc, (BANK(EmotionBubblesPointerTable) << 8) + $04 call CopyVideoData - ld a, [$cfcb] + ld a, [wcfcb] push af ld a, $ff - ld [$cfcb], a - ld a, [$d736] + ld [wcfcb], a + ld a, [wd736] bit 6, a - ld hl, $c38f - ld de, $c39f + ld hl, wOAMBuffer + $8f + ld de, wOAMBuffer + $9f jr z, .asm_17c7a - ld hl, $c37f - ld de, $c38f + ld hl, wOAMBuffer + $7f + ld de, wOAMBuffer + $8f .asm_17c7a ld bc, $90 .asm_17c7d @@ -33,8 +33,8 @@ PrintEmotionBubble: ; 17c47 (5:7c47) ld a, c or b jr nz, .asm_17c7d - ld hl, $c104 - ld a, [$cd4f] + ld hl, wSpriteStateData1 + 4 + ld a, [wcd4f] swap a ld c, a ld b, $0 @@ -51,7 +51,7 @@ PrintEmotionBubble: ; 17c47 (5:7c47) ld c, $3c call DelayFrames pop af - ld [$cfcb], a + ld [wcfcb], a call DelayFrame jp UpdateSprites @@ -65,4 +65,4 @@ EmotionBubblesOAM: ; 17cb5 (5:7cb5) db $FA,$00,$FB,$00 EmotionBubbles: ; 17cbd (5:7cbd) - INCBIN "gfx/emotion_bubbles.w16.2bpp" + INCBIN "gfx/emotion_bubbles.2bpp" diff --git a/engine/overworld/healing_machine.asm b/engine/overworld/healing_machine.asm index 77ff4ccc..9c93583d 100755 --- a/engine/overworld/healing_machine.asm +++ b/engine/overworld/healing_machine.asm @@ -1,9 +1,9 @@ AnimateHealingMachine: ; 70433 (1c:4433) ld de, PokeCenterFlashingMonitorAndHealBall ; $44b7 - ld hl, $87c0 + ld hl, vChars0 + $7c0 ld bc, (BANK(PokeCenterFlashingMonitorAndHealBall) << 8) + $03 call CopyVideoData - ld hl, $cfcb + ld hl, wcfcb ld a, [hl] push af ld [hl], $ff @@ -12,19 +12,19 @@ AnimateHealingMachine: ; 70433 (1c:4433) push af ld a, $e0 ld [rOBP1], a ; $ff49 - ld hl, $c384 + ld hl, wOAMBuffer + $84 ld de, PokeCenterOAMData ; $44d7 call Func_70503 ld a, $4 ld [wMusicHeaderPointer], a ld a, $ff - ld [$c0ee], a + ld [wc0ee], a call PlaySound .asm_70464 ld a, [wMusicHeaderPointer] and a jr nz, .asm_70464 - ld a, [W_NUMINPARTY] ; $d163 + ld a, [wPartyCount] ; wPartyCount ld b, a .asm_7046e call Func_70503 @@ -34,23 +34,23 @@ AnimateHealingMachine: ; 70433 (1c:4433) call DelayFrames dec b jr nz, .asm_7046e - ld a, [$c0ef] + ld a, [wc0ef] cp $1f - ld [$c0f0], a + ld [wc0f0], a jr nz, .asm_70495 ld a, $ff - ld [$c0ee], a + ld [wc0ee], a call PlaySound - ld a, Bank(Func_9876) - ld [$c0ef], a + ld a, BANK(Music_PkmnHealed) + ld [wc0ef], a .asm_70495 ld a, MUSIC_PKMN_HEALED - ld [$c0ee], a + ld [wc0ee], a call PlaySound ld d, $28 call Func_704f3 .asm_704a2 - ld a, [$c026] + ld a, [wc026] cp MUSIC_PKMN_HEALED jr z, .asm_704a2 ld c, $20 diff --git a/engine/overworld/hidden_items.asm b/engine/overworld/hidden_items.asm index db6bf1cd..77bd8fe6 100755 --- a/engine/overworld/hidden_items.asm +++ b/engine/overworld/hidden_items.asm @@ -1,21 +1,20 @@ HiddenItems: ; 76688 (1d:6688) ld hl, HiddenItemCoords call Func_76857 - ld [$cd41], a - ld hl, $d6f0 - ld a, [$cd41] + ld [wTrainerScreenX], a + ld hl, wd6f0 + ld a, [wTrainerScreenX] ld c, a ld b, $2 - ld a, $10 - call Predef + predef FlagActionPredef ld a, c and a ret nz call EnableAutoTextBoxDrawing ld a, $1 - ld [$cc3c], a - ld a, [$cd3d] ; item ID - ld [$d11e], a + ld [wcc3c], a + ld a, [wWhichTrade] ; item ID + ld [wd11e], a call GetItemName ld a, $24 jp PrintPredefTextID @@ -26,17 +25,16 @@ FoundHiddenItemText: ; 7675b (1d:675b) ; XXX where is the pointer to this? TX_FAR _FoundHiddenItemText db $8 - ld a, [$cd3d] ; item ID + ld a, [wWhichTrade] ; item ID ld b, a ld c, 1 call GiveItem jr nc, .BagFull - ld hl, $d6f0 - ld a, [$cd41] + ld hl, wd6f0 + ld a, [wTrainerScreenX] ld c, a ld b, $1 - ld a, $10 - call Predef + predef FlagActionPredef ld a, (SFX_02_3b - SFX_Headers_02) / 3 call PlaySoundWaitForCurrent ; play sound call WaitForSoundToFinish ; wait for sound to finish playing @@ -44,7 +42,7 @@ FoundHiddenItemText: ; 7675b (1d:675b) .BagFull call WaitForTextScrollButtonPress ; wait for button press xor a - ld [$cc3c], a + ld [wcc3c], a ld hl, HiddenItemBagFullText call PrintText jp TextScriptEnd @@ -55,20 +53,18 @@ HiddenItemBagFullText: ; 76794 (1d:6794) HiddenCoins: ; 76799 (1d:6799) ld b, COIN_CASE - ld a, $1c - call Predef + predef IsItemInBag_ ld a, b and a ret z ld hl, HiddenCoinCoords call Func_76857 - ld [$cd41], a - ld hl, $d6fe - ld a, [$cd41] + ld [wTrainerScreenX], a + ld hl, wd6fe + ld a, [wTrainerScreenX] ld c, a ld b, $2 - ld a, $10 - call Predef + predef FlagActionPredef ld a, c and a ret nz @@ -76,7 +72,7 @@ HiddenCoins: ; 76799 (1d:6799) ld [$ff9f], a ld [$ffa0], a ld [$ffa1], a - ld a, [$cd3d] + ld a, [wWhichTrade] sub COIN cp 10 jr z, .bcd10 @@ -101,17 +97,15 @@ HiddenCoins: ; 76799 (1d:6799) ld a, $1 ld [$ffa0], a .bcddone - ld de, $d5a5 + ld de, wPlayerCoins + 1 ld hl, $ffa1 ld c, $2 - ld a, $b - call Predef - ld hl, $d6fe - ld a, [$cd41] + predef AddBCDPredef + ld hl, wd6fe + ld a, [wTrainerScreenX] ld c, a ld b, $1 - ld a, $10 - call Predef + predef FlagActionPredef call EnableAutoTextBoxDrawing ld a, [wPlayerCoins] cp $99 @@ -139,9 +133,9 @@ DroppedHiddenCoinsText: ; 7684d (1d:684d) db "@" Func_76857: ; 76857 (1d:6857) - ld a, [$cd40] + ld a, [wTrainerScreenY] ld d, a - ld a, [$cd41] + ld a, [wTrainerScreenX] ld e, a ld a, [W_CURMAP] ld b, a diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm index e4777a84..d2114293 100755 --- a/engine/overworld/hidden_objects.asm +++ b/engine/overworld/hidden_objects.asm @@ -1,16 +1,16 @@ Func_46981: ; 46981 (11:6981) xor a - ld [$d71e], a - ld a, [$d72d] + ld [wd71e], a + ld a, [wd72d] bit 4, a ret nz call ArePlayerCoordsInArray ret nc - ld a, [wWhichTrade] ; $cd3d - ld [$d71e], a - ld hl, $d72d + ld a, [wWhichTrade] ; wWhichTrade + ld [wd71e], a + ld hl, wd72d set 4, [hl] - ld hl, $d732 + ld hl, wd732 set 4, [hl] ret @@ -28,7 +28,7 @@ Func_469a0: ; 469a0 (11:69a0) ld b, a cp $ff jr z, .asm_469fc - ld a, [W_CURMAP] ; $d35e + ld a, [W_CURMAP] ; W_CURMAP cp b jr z, .asm_469be inc de @@ -41,7 +41,7 @@ Func_469a0: ; 469a0 (11:69a0) ld h, [hl] ld l, a push hl - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade xor a ld [hli], a ld [hli], a @@ -51,10 +51,10 @@ Func_469a0: ; 469a0 (11:69a0) ld a, [hli] cp $ff jr z, .asm_469fc - ld [$cd40], a + ld [wTrainerScreenY], a ld b, a ld a, [hli] - ld [$cd41], a + ld [wTrainerScreenX], a ld c, a call Func_46a01 ld a, [$ffea] @@ -65,15 +65,15 @@ Func_469a0: ; 469a0 (11:69a0) inc hl inc hl push hl - ld hl, $cd3f + ld hl, wTrainerFacingDirection inc [hl] pop hl jr .asm_469ce .asm_469f0 ld a, [hli] - ld [wWhichTrade], a ; $cd3d + ld [wWhichTrade], a ; wWhichTrade ld a, [hli] - ld [$cd3e], a + ld [wTrainerEngageDistance], a ld a, [hli] ld h, [hl] ld l, a @@ -84,37 +84,37 @@ Func_469a0: ; 469a0 (11:69a0) ret Func_46a01: ; 46a01 (11:6a01) - ld a, [$c109] + ld a, [wSpriteStateData1 + 9] cp $4 jr z, .asm_46a16 cp $8 jr z, .asm_46a25 cp $c jr z, .asm_46a2b - ld a, [W_YCOORD] ; $d361 + ld a, [W_YCOORD] ; wd361 inc a jr .asm_46a1a .asm_46a16 - ld a, [W_YCOORD] ; $d361 + ld a, [W_YCOORD] ; wd361 dec a .asm_46a1a cp b jr nz, .asm_46a3b - ld a, [W_XCOORD] ; $d362 + ld a, [W_XCOORD] ; wd362 cp c jr nz, .asm_46a3b jr .asm_46a38 .asm_46a25 - ld a, [W_XCOORD] ; $d362 + ld a, [W_XCOORD] ; wd362 dec a jr .asm_46a2f .asm_46a2b - ld a, [W_XCOORD] ; $d362 + ld a, [W_XCOORD] ; wd362 inc a .asm_46a2f cp c jr nz, .asm_46a3b - ld a, [W_YCOORD] ; $d361 + ld a, [W_YCOORD] ; wd361 cp b jr nz, .asm_46a3b .asm_46a38 diff --git a/engine/overworld/item.asm b/engine/overworld/item.asm new file mode 100644 index 00000000..a69ec106 --- /dev/null +++ b/engine/overworld/item.asm @@ -0,0 +1,54 @@ +PickupItem: + call EnableAutoTextBoxDrawing + + ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c + ld b, a + ld hl, W_MISSABLEOBJECTLIST +.missableObjectsListLoop + ld a, [hli] + cp $ff + ret z + cp b + jr z, .isMissable + inc hl + jr .missableObjectsListLoop + +.isMissable + ld a, [hl] + ld [$ffdb], a + + ld hl, W_MAPSPRITEEXTRADATA + ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c + dec a + add a + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + ld b, a ; item + ld c, 1 ; quantity + call GiveItem + jr nc, .BagFull + + ld a, [$ffdb] + ld [wcc4d], a + predef HideObject + ld a, 1 + ld [wcc3c], a + ld hl, FoundItemText + jr .print + +.BagFull + ld hl, NoMoreRoomForItemText +.print + call PrintText + ret + +FoundItemText: + TX_FAR _FoundItemText + db $0B + db "@" + +NoMoreRoomForItemText: + TX_FAR _NoMoreRoomForItemText + db "@" diff --git a/engine/overworld/ledges.asm b/engine/overworld/ledges.asm index d2f248cd..43df82e2 100755 --- a/engine/overworld/ledges.asm +++ b/engine/overworld/ledges.asm @@ -1,18 +1,16 @@ HandleLedges: ; 1a672 (6:6672) - ld a, [$d736] + ld a, [wd736] bit 6, a ret nz - ld a, [W_CURMAPTILESET] ; $d367 + ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET and a ; OVERWORLD ret nz - ld a, $35 - call Predef ; indirect jump to Func_c586 (c586 (3:4586)) - ld a, [$c109] + predef Func_c586 + ld a, [wSpriteStateData1 + 9] ld b, a - FuncCoord 8, 9 ; $c45c - ld a, [Coord] + aCoord 8, 9 ld c, a - ld a, [$cfc6] + ld a, [wcfc6] ld d, a ld hl, LedgeTiles ; $66cf .asm_1a691 @@ -38,19 +36,19 @@ HandleLedges: ; 1a672 (6:6672) inc hl jr .asm_1a691 .asm_1a6a9 - ld a, [H_CURRENTPRESSEDBUTTONS] + ld a, [hJoyHeld] and e ret z ld a, $ff - ld [wJoypadForbiddenButtonsMask], a - ld hl, $d736 + ld [wJoyIgnore], a + ld hl, wd736 set 6, [hl] call Func_3486 ld a, e - ld [$ccd3], a - ld [$ccd4], a + ld [wccd3], a + ld [wccd4], a ld a, $2 - ld [$cd38], a + ld [wcd38], a call LoadHoppingShadowOAM ld a, (SFX_02_4e - SFX_Headers_02) / 3 call PlaySound @@ -69,7 +67,7 @@ LedgeTiles: ; 1a6cf (6:66cf) db $FF LoadHoppingShadowOAM: ; 1a6f0 (6:66f0) - ld hl, $8ff0 + ld hl, vChars1 + $7f0 ld de, LedgeHoppingShadow ; $6708 ld bc, (BANK(LedgeHoppingShadow) << 8) + $01 call CopyVideoDataDouble diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index a734319d..81443c9f 100755 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -4,7 +4,7 @@ ; This is also called after displaying text because loading ; text tile patterns overwrites half of the sprite tile pattern data. ; Note on notation: -; $C1X* and $C2X* are used to denote $C100-$C1FF and $C200-$C2FF sprite slot +; $C1X* and $C2X* are used to denote wSpriteStateData1-wSpriteStateData1 + $ff and wSpriteStateData2 + $00-wSpriteStateData2 + $ff sprite slot ; fields, respectively, within loops. The X is the loop index. ; If there is an inner loop, Y is the inner loop index, i.e. $C1Y* and $C2Y* ; denote fields of the sprite slots interated over in the inner loop. @@ -13,7 +13,7 @@ InitMapSprites: ; 1785b (5:785b) ret c ; return if the map is an outside map (already handled by above call) ; if the map is an inside map (i.e. mapID >= $25) ld hl,wSpriteStateData1 - ld de,$c20d + ld de,wSpriteStateData2 + $0d ; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns. .copyPictureIDLoop ld a,[hl] ; $C1X0 (picture ID) @@ -37,7 +37,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) .spritesExist ld c,a ; c = [W_NUMSPRITES] ld b,$10 ; number of sprite slots - ld hl,$c20d + ld hl,wSpriteStateData2 + $0d xor a ld [$ff8e],a ; 4-tile sprite counter .copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE @@ -48,9 +48,9 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) ld l,a dec b jr nz,.copyPictureIDLoop - ld hl,$c21e + ld hl,wSpriteStateData2 + $1e .loadTilePatternLoop - ld de,$c21d + ld de,wSpriteStateData2 + $1d ; Check if the current picture ID has already had its tile patterns loaded. ; This done by looping through the previous sprite slots and seeing if any of ; their picture ID's match that of the current sprite slot. @@ -70,7 +70,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) ld e,a jr .checkIfAlreadyLoadedLoop .notAlreadyLoaded - ld de,$c20e + ld de,wSpriteStateData2 + $0e ld b,$01 ; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot ; this is done in order to find the first free VRAM slot available @@ -126,7 +126,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) push af push de push bc - ld hl,$8000 ; VRAM base address + ld hl,vNPCSprites ; VRAM base address ld bc,$c0 ; number of bytes per VRAM slot ld a,[$ff8d] cp a,11 ; is it a 4-tile sprite? @@ -141,12 +141,12 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) jr nz,.calculateVRAMAddrLoop jr .loadStillTilePattern .fourTileSpriteVRAMAddr - ld hl,$87c0 ; address for second 4-tile sprite + ld hl,vSprites + $7c0 ; address for second 4-tile sprite ld a,[$ff8e] ; 4-tile sprite counter and a ; is it the first 4-tile sprite? jr nz,.loadStillTilePattern ; if it's the first 4-tile sprite - ld hl,$8780 ; address for first 4-tile sprite + ld hl,vSprites + $780 ; address for first 4-tile sprite inc a ld [$ff8e],a ; 4-tile sprite counter .loadStillTilePattern @@ -159,7 +159,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) ld l,e pop de ld b,a - ld a,[$cfc4] + ld a,[wcfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.skipFirstLoad ; if so, skip loading data into the lower half ld a,b @@ -180,7 +180,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) jr nc,.noCarry3 inc d .noCarry3 - ld a,[$cfc4] + ld a,[wcfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.loadWhileLCDOn pop af @@ -216,7 +216,7 @@ LoadMapSpriteTilePatterns: ; 17871 (5:7871) ld l,a dec c jp nz,.loadTilePatternLoop - ld hl,$c20d + ld hl,wSpriteStateData2 + $0d ld b,$10 ; the pictures ID's stored at $C2XD are no longer needed, so zero them .zeroStoredPictureIDLoop @@ -264,7 +264,7 @@ InitOutsideMapSprites: ; 1797b (5:797b) cp a,$f0 ; does the map have 2 sprite sets? call nc,GetSplitMapSpriteSetID ; if so, choose the appropriate one ld b,a ; b = spriteSetID - ld a,[$cfc4] + ld a,[wcfc4] bit 0,a ; reloading upper half of tile patterns after displaying text? jr nz,.loadSpriteSet ; if so, forcibly reload the sprite set ld a,[W_SPRITESETID] @@ -288,7 +288,7 @@ InitOutsideMapSprites: ; 1797b (5:797b) jr nc,.noCarry2 inc d .noCarry2 - ld hl,$c20d + ld hl,wSpriteStateData2 + $0d ld a,SPRITE_RED ld [hl],a ld bc,W_SPRITESET @@ -324,7 +324,7 @@ InitOutsideMapSprites: ; 1797b (5:797b) call LoadMapSpriteTilePatterns pop af ld [W_NUMSPRITES],a ; restore number of sprites - ld hl,$c21e + ld hl,wSpriteStateData2 + $1e ld b,$0f ; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the ; order of the map's sprite set, not the order of the actual sprites loaded @@ -338,7 +338,7 @@ InitOutsideMapSprites: ; 1797b (5:797b) dec b jr nz,.zeroVRAMSlotsLoop .skipLoadingSpriteSet - ld hl,$c110 + ld hl,wSpriteStateData1 + $10 ; This loop stores the correct VRAM tile pattern slots according the sprite ; data from the map's header. Since the VRAM tile pattern slots are filled in ; the order of the sprite set, in order to find the VRAM tile pattern slot diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm new file mode 100644 index 00000000..f08a20cb --- /dev/null +++ b/engine/overworld/movement.asm @@ -0,0 +1,856 @@ +UpdatePlayerSprite: ; 4e31 (1:4e31) + ld a, [wSpriteStateData2] + and a + jr z, .asm_4e41 + cp $ff + jr z, .asm_4e4a + dec a + ld [wSpriteStateData2], a + jr .asm_4e4a +.asm_4e41 + aCoord 8, 9 + ld [$ff93], a + cp $60 + jr c, .asm_4e50 +.asm_4e4a + ld a, $ff + ld [wSpriteStateData1 + 2], a + ret +.asm_4e50 + call Func_4c70 + ld h, $c1 + ld a, [wWalkCounter] ; wcfc5 + and a + jr nz, .asm_4e90 + ld a, [wd528] + bit 2, a + jr z, .asm_4e65 + xor a + jr .asm_4e86 +.asm_4e65 + bit 3, a + jr z, .asm_4e6d + ld a, $4 + jr .asm_4e86 +.asm_4e6d + bit 1, a + jr z, .asm_4e75 + ld a, $8 + jr .asm_4e86 +.asm_4e75 + bit 0, a + jr z, .asm_4e7d + ld a, $c + jr .asm_4e86 +.asm_4e7d + xor a + ld [wSpriteStateData1 + 7], a + ld [wSpriteStateData1 + 8], a + jr .asm_4eab +.asm_4e86 + ld [wSpriteStateData1 + 9], a + ld a, [wcfc4] + bit 0, a + jr nz, .asm_4e7d +.asm_4e90 + ld a, [wd736] + bit 7, a + jr nz, .asm_4eb6 + ld a, [H_CURRENTSPRITEOFFSET] + add $7 + ld l, a + ld a, [hl] + inc a + ld [hl], a + cp $4 + jr nz, .asm_4eab + xor a + ld [hl], a + inc hl + ld a, [hl] + inc a + and $3 + ld [hl], a +.asm_4eab + ld a, [wSpriteStateData1 + 8] + ld b, a + ld a, [wSpriteStateData1 + 9] + add b + ld [wSpriteStateData1 + 2], a +.asm_4eb6 + ld a, [$ff93] + ld c, a + ld a, [W_GRASSTILE] + cp c + ld a, $0 + jr nz, .asm_4ec3 + ld a, $80 +.asm_4ec3 + ld [wSpriteStateData2 + $07], a + ret + +Func_4ec7: ; 4ec7 (1:4ec7) + push bc + push af + ld a, [$ffda] + ld c, a + pop af + add c + ld l, a + pop bc + ret + +Func_4ed1: ; 4ed1 (1:4ed1) + ld a, [H_CURRENTSPRITEOFFSET] + swap a + dec a + add a + ld hl, W_MAPSPRITEDATA ; wd4e4 + add l + ld l, a + ld a, [hl] ; read movement byte 2 + ld [wCurSpriteMovement2], a + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + ld l, a + inc l + ld a, [hl] ; c1x1 + and a + jp z, InitializeSpriteStatus + call CheckSpriteAvailability + ret c ; if sprite is invisible, on tile >=$60, in grass or player is currently walking + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + ld l, a + inc l + ld a, [hl] ; c1x1 + bit 7, a + jp nz, InitializeSpriteFacingDirection ; c1x1 >= $80 + ld b, a + ld a, [wcfc4] + bit 0, a + jp nz, notYetMoving + ld a, b + cp $2 + jp z, UpdateSpriteMovementDelay ; c1x1 == 2 + cp $3 + jp z, UpdateSpriteInWalkingAnimation ; c1x1 == 3 + ld a, [wWalkCounter] ; wcfc5 + and a + ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability) + call InitializeSpriteScreenPosition + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $6 + ld l, a + ld a, [hl] ; c2x6: movement byte 1 + inc a + jr z, .asm_4f59 ; value $FF + inc a + jr z, .asm_4f59 ; value $FE + dec a + ld [hl], a ; (temporarily) increment movement byte 1 + dec a + push hl + ld hl, wcf0f + dec [hl] ; decrement wcf0f + pop hl + ld de, wcc5b + call LoadDEPlusA ; a = [wcc5b + movement byte 1] + cp $e0 + jp z, ChangeFacingDirection + cp $ff + jr nz, .asm_4f4b + ld [hl], a ; reset movement byte 1 to initial value + ld hl, wd730 + res 0, [hl] + xor a + ld [wcd38], a + ld [wcd3a], a + ret +.asm_4f4b + cp $fe + jr nz, .asm_4f5f + ld [hl], $1 ; set movement byte 1 to $1 + ld de, wcc5b + call LoadDEPlusA ; a = [wcc5b + $fe] (?) + jr .asm_4f5f +.asm_4f59 + call getTileSpriteStandsOn + call Random +.asm_4f5f + ld b, a + ld a, [wCurSpriteMovement2] + cp $d0 + jr z, .moveDown ; movement byte 2 = $d0 forces down + cp $d1 + jr z, .moveUp ; movement byte 2 = $d1 forces up + cp $d2 + jr z, .moveLeft ; movement byte 2 = $d2 forces left + cp $d3 + jr z, .moveRight ; movement byte 2 = $d3 forces right + ld a, b + cp $40 ; a < $40: down (or left) + jr nc, .notDown + ld a, [wCurSpriteMovement2] + cp $2 + jr z, .moveLeft ; movement byte 2 = $2 only allows left or right +.moveDown + ld de, 2*20 + add hl, de ; move tile pointer two rows down + ld de, $100 + + ld bc, $400 + jr TryWalking +.notDown + cp $80 ; $40 <= a < $80: up (or right) + jr nc, .notUp + ld a, [wCurSpriteMovement2] + cp $2 + jr z, .moveRight ; movement byte 2 = $2 only allows left or right +.moveUp + ld de, -2*20 ; $ffd8 + add hl, de ; move tile pointer two rows up + ld de, $ff00 + ld bc, $804 + jr TryWalking +.notUp + cp $c0 ; $80 <= a < $c0: left (or up) + jr nc, .notLeft + ld a, [wCurSpriteMovement2] + cp $1 + jr z, .moveUp ; movement byte 2 = $1 only allows up or down +.moveLeft + dec hl + dec hl ; move tile pointer two columns left + ld de, $ff + ld bc, $208 + jr TryWalking +.notLeft ; $c0 <= a: right (or down) + ld a, [wCurSpriteMovement2] + cp $1 + jr z, .moveDown ; movement byte 2 = $1 only allows up or down +.moveRight + inc hl + inc hl ; move tile pointer two columns right + ld de, $1 + ld bc, $10c + jr TryWalking + +; changes facing direction by zeroing the movement delta and calling TryWalking +ChangeFacingDirection: ; 4fc8 (1:4fc8) + ld de, $0 + ; fall through + +; b: direction (1,2,4 or 8) +; c: new facing direction (0,4,8 or $c) +; d: Y movement delta (-1, 0 or 1) +; e: X movement delta (-1, 0 or 1) +; hl: pointer to tile the sprite would wlak onto +; set carry on failure, clears carry on success +TryWalking: ; 4fcb (1:4fcb) + push hl + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $9 + ld l, a + ld [hl], c ; c1x9 (update facing direction) + ld a, [H_CURRENTSPRITEOFFSET] + add $3 + ld l, a + ld [hl], d ; c1x3 (update Y movement delta) + inc l + inc l + ld [hl], e ; c1x5 (update X movement delta) + pop hl + push de + ld c, [hl] ; read tile to walk onto + call CanWalkOntoTile + pop de + ret c ; cannot walk there (reinitialization of delay values already done) + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $4 + ld l, a + ld a, [hl] ; c2x4: Y position + add d + ld [hli], a ; update Y position + ld a, [hl] ; c2x5: X position + add e + ld [hl], a ; update X position + ld a, [H_CURRENTSPRITEOFFSET] + ld l, a + ld [hl], $10 ; c2x0=16: walk animation counter + dec h + inc l + ld [hl], $3 ; c1x1: set movement status to walking + jp UpdateSpriteImage + +; update the walking animation parameters for a sprite that is currently walking +UpdateSpriteInWalkingAnimation: ; 4ffe (1:4ffe) + ld a, [H_CURRENTSPRITEOFFSET] + add $7 + ld l, a + ld a, [hl] ; c1x7 (counter until next walk animation frame) + inc a + ld [hl], a ; c1x7 += 1 + cp $4 + jr nz, .noNextAnimationFrame + xor a + ld [hl], a ; c1x7 = 0 + inc l + ld a, [hl] ; c1x8 (walk animation frame) + inc a + and $3 + ld [hl], a ; advance to next animation frame every 4 ticks (16 ticks total for one step) +.noNextAnimationFrame + ld a, [H_CURRENTSPRITEOFFSET] + add $3 + ld l, a + ld a, [hli] ; c1x3 (movement Y delta) + ld b, a + ld a, [hl] ; c1x4 (screen Y position) + add b + ld [hli], a ; update screen Y position + ld a, [hli] ; c1x5 (movement X delta) + ld b, a + ld a, [hl] ; c1x6 (screen X position) + add b + ld [hl], a ; update screen X position + ld a, [H_CURRENTSPRITEOFFSET] + ld l, a + inc h + ld a, [hl] ; c2x0 (walk animantion counter) + dec a + ld [hl], a ; update walk animantion counter + ret nz + ld a, $6 ; walking finished, update state + add l + ld l, a + ld a, [hl] ; c2x6 (movement byte 1) + cp $fe + jr nc, .initNextMovementCounter ; values $fe and $ff + ld a, [H_CURRENTSPRITEOFFSET] + inc a + ld l, a + dec h + ld [hl], $1 ; c1x1 = 1 (movement status ready) + ret +.initNextMovementCounter + call Random + ld a, [H_CURRENTSPRITEOFFSET] + add $8 + ld l, a + ld a, [hRandomAdd] + and $7f + ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] + dec h ; note that value 0 actually makes the delay $100 (bug?) + ld a, [H_CURRENTSPRITEOFFSET] + inc a + ld l, a + ld [hl], $2 ; c1x1 = 2 (movement status) + inc l + inc l + xor a + ld b, [hl] ; c1x3 (movement Y delta) + ld [hli], a ; reset movement Y delta + inc l + ld c, [hl] ; c1x5 (movement X delta) + ld [hl], a ; reset movement X delta + ret + +; update delay value (c2x8) for sprites in the delayed state (c1x1) +UpdateSpriteMovementDelay: ; 5057 (1:5057) + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $6 + ld l, a + ld a, [hl] ; c2x6: movement byte 1 + inc l + inc l + cp $fe + jr nc, .tickMoveCounter ; values $fe or $ff + ld [hl], $0 + jr .moving +.tickMoveCounter + dec [hl] ; c2x8: frame counter until next movement + jr nz, notYetMoving +.moving + dec h + ld a, [H_CURRENTSPRITEOFFSET] + inc a + ld l, a + ld [hl], $1 ; c1x1 = 1 (mark as ready to move) +notYetMoving: ; 5073 (1:5073) + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $8 + ld l, a + ld [hl], $0 ; c1x8 = 0 (walk animation frame) + jp UpdateSpriteImage + +InitializeSpriteFacingDirection: ; 507f (1:507f) + ld a, [wd72d] + bit 5, a + jr nz, notYetMoving + res 7, [hl] + ld a, [wd52a] + bit 3, a + jr z, .notFacingDown + ld c, $0 ; make sprite face down + jr .facingDirectionDetermined +.notFacingDown + bit 2, a + jr z, .notFacingUp + ld c, $4 ; make sprite face up + jr .facingDirectionDetermined +.notFacingUp + bit 1, a + jr z, .notFacingRight + ld c, $c ; make sprite face right + jr .facingDirectionDetermined +.notFacingRight + ld c, $8 ; make sprite face left +.facingDirectionDetermined + ld a, [H_CURRENTSPRITEOFFSET] + add $9 + ld l, a + ld [hl], c ; c1x9: set facing direction + jr notYetMoving + +InitializeSpriteStatus: ; 50ad (1:50ad) + ld [hl], $1 ; $c1x1: set movement status to ready + inc l + ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen) + inc h + ld a, [H_CURRENTSPRITEOFFSET] + add $2 + ld l, a + ld a, $8 + ld [hli], a ; $c2x2: set Y displacement to 8 + ld [hl], a ; $c2x3: set X displacement to 8 + ret + +; calculates the spprite's scrren position form its map position and the player position +InitializeSpriteScreenPosition: ; 50bd (1:50bd) + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $4 + ld l, a + ld a, [W_YCOORD] ; wd361 + ld b, a + ld a, [hl] ; c2x4 (Y position + 4) + sub b ; relative to player position + swap a ; * 16 + sub $4 ; - 4 + dec h + ld [hli], a ; c1x4 (screen Y position) + inc h + ld a, [W_XCOORD] ; wd362 + ld b, a + ld a, [hli] ; c2x6 (X position + 4) + sub b ; relative to player position + swap a ; * 16 + dec h + ld [hl], a ; c1x6 (screen X position) + ret + +; tests if sprite is off screen or otherwise unable to do anything +CheckSpriteAvailability: ; 50dc (1:50dc) + predef IsObjectHidden + ld a, [$ffe5] + and a + jp nz, .spriteInvisible + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $6 + ld l, a + ld a, [hl] ; c2x6: movement byte 1 + cp $fe + jr c, .skipXVisibilityTest ; movement byte 1 < $fe + ld a, [H_CURRENTSPRITEOFFSET] + add $4 + ld l, a + ld b, [hl] ; c2x4: Y pos (+4) + ld a, [W_YCOORD] ; wd361 + cp b + jr z, .skipYVisibilityTest + jr nc, .spriteInvisible ; above screen region + add $8 ; screen is 9 tiles high + cp b + jr c, .spriteInvisible ; below screen region +.skipYVisibilityTest + inc l + ld b, [hl] ; c2x5: X pos (+4) + ld a, [W_XCOORD] ; wd362 + cp b + jr z, .skipXVisibilityTest + jr nc, .spriteInvisible ; left of screen region + add $9 ; screen is 10 tiles wide + cp b + jr c, .spriteInvisible ; right of screen region +.skipXVisibilityTest + call getTileSpriteStandsOn + ld d, $60 + ld a, [hli] + cp d + jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom left tile) + ld a, [hld] + cp d + jr nc, .spriteInvisible ; standing on tile with ID >=$60 (bottom right tile) + ld bc, -20 ; $ffec + add hl, bc ; go back one row of tiles + ld a, [hli] + cp d + jr nc, .spriteInvisible ; standing on tile with ID >=$60 (top left tile) + ld a, [hl] + cp d + jr c, .spriteVisible ; standing on tile with ID >=$60 (top right tile) +.spriteInvisible + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $2 + ld l, a + ld [hl], $ff ; c1x2 + scf + jr .done +.spriteVisible + ld c, a + ld a, [wWalkCounter] ; wcfc5 + and a + jr nz, .done ; if player is currently walking, we're done + call UpdateSpriteImage + inc h + ld a, [H_CURRENTSPRITEOFFSET] + add $7 + ld l, a + ld a, [W_GRASSTILE] + cp c + ld a, $0 + jr nz, .notInGrass + ld a, $80 +.notInGrass + ld [hl], a ; c2x7 + and a +.done + ret + +UpdateSpriteImage: ; 5157 (1:5157) + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $8 + ld l, a + ld a, [hli] ; c1x8: walk animation frame + ld b, a + ld a, [hl] ; c1x9: facing direction + add b + ld b, a + ld a, [$ff93] ; current sprite offset + add b + ld b, a + ld a, [H_CURRENTSPRITEOFFSET] + add $2 + ld l, a + ld [hl], b ; c1x2: sprite to display + ret + +; tests if sprite can walk the specified direction +; b: direction (1,2,4 or 8) +; c: ID of tile the sprite would walk onto +; d: Y movement delta (-1, 0 or 1) +; e: X movement delta (-1, 0 or 1) +; set carry on failure, clears carry on success +CanWalkOntoTile: ; 516e (1:516e) + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $6 + ld l, a + ld a, [hl] ; c2x6 (movement byte 1) + cp $fe + jr nc, .canMove ; values $fe and $ff + and a + ret +.canMove + ld a, [W_TILESETCOLLISIONPTR] + ld l, a + ld a, [W_TILESETCOLLISIONPTR+1] + ld h, a +.tilePassableLoop + ld a, [hli] + cp $ff + jr z, .impassable + cp c + jr nz, .tilePassableLoop + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $6 + ld l, a + ld a, [hl] ; $c2x6 (movement byte 1) + inc a + jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $4 + ld l, a + ld a, [hli] ; c1x4 (screen Y pos) + add $4 ; align to blocks (Y pos is always 4 pixels off) + add d ; add Y delta + cp $80 ; if value is >$80, the destination is off screen (either $81 or $FF underflow) + jr nc, .impassable ; don't walk off screen + inc l + ld a, [hl] ; c1x6 (screen X pos) + add e ; add X delta + cp $90 ; if value is >$90, the destination is off screen (either $91 or $FF underflow) + jr nc, .impassable ; don't walk off screen + push de + push bc + call Func_4c70 + pop bc + pop de + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $c + ld l, a + ld a, [hl] ; c1xc (forbidden directions flags(?)) + and b ; check against chosen direction (1,2,4 or 8) + jr nz, .impassable ; direction forbidden, don't go there + ld h, $c2 + ld a, [H_CURRENTSPRITEOFFSET] + add $2 + ld l, a + ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go) + bit 7, d ; check if going upwards (d=$ff) + jr nz, .upwards + add d + cp $5 + jr c, .impassable ; if c2x2+d < 5, don't go ;bug: this tests probably were supposed to prevent sprites + jr .checkHorizontal ; from walking out too far, but this line makes sprites get stuck +.upwards ; whenever they walked upwards 5 steps + sub $1 ; on the other hand, the amount a sprite can walk out to the + jr c, .impassable ; if d2x2 == 0, don't go ; right of bottom is not limited (until the counter overflows) +.checkHorizontal + ld d, a + ld a, [hl] ; c2x3 (sprite X displacement, initialized at $8, keep track of where a sprite did go) + bit 7, e ; check if going left (e=$ff) + jr nz, .left + add e + cp $5 ; compare, but no conditional jump like in the vertical check above (bug?) + jr .passable +.left + sub $1 + jr c, .impassable ; if d2x3 == 0, don't go +.passable + ld [hld], a ; update c2x3 + ld [hl], d ; update c2x2 + and a ; clear carry (marking success) + ret +.impassable + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + inc a + ld l, a + ld [hl], $2 ; c1x1 = 2 (set movement status to delayed) + inc l + inc l + xor a + ld [hli], a ; c1x3 = 0 (clear Y movement delta) + inc l + ld [hl], a ; c1x5 = 0 (clear X movement delta) + inc h + ld a, [H_CURRENTSPRITEOFFSET] + add $8 + ld l, a + call Random + ld a, [hRandomAdd] + and $7f + ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] (again with delay $100 if value is 0) + scf ; set carry (marking failure to walk) + ret + +; calculates the tile pointer pointing to the tile the current sprite stancs on +; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to +; hl: output pointer +getTileSpriteStandsOn: ; 5207 (1:5207) + ld h, $c1 + ld a, [H_CURRENTSPRITEOFFSET] + add $4 + ld l, a + ld a, [hli] ; c1x4: screen Y position + add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top) + and $f0 ; in case object is currently moving + srl a ; screen Y tile * 4 + ld c, a + ld b, $0 + inc l + ld a, [hl] ; c1x6: screen Y position + srl a + srl a + srl a ; screen X tile + add $14 ; screen X tile + 20 + ld d, $0 + ld e, a + ld hl, wTileMap + add hl, bc + add hl, bc + add hl, bc + add hl, bc + add hl, bc + add hl, de ; wTileMap + 20*(screen Y tile + 1) + screen X tile + ret + +; loads [de+a] into a +LoadDEPlusA: ; 522f (1:522f) + add e + ld e, a + jr nc, .noCarry + inc d +.noCarry + ld a, [de] + ret + +Func_5236: ; 5236 (1:5236) + ld a, [wd730] + bit 7, a + ret z + ld hl, wd72e + bit 7, [hl] + set 7, [hl] + jp z, Func_52a6 + ld hl, wcc97 + ld a, [wcd37] + add l + ld l, a + jr nc, .asm_5251 + inc h +.asm_5251 + ld a, [hl] + cp $40 + jr nz, .asm_525f + call Func_52b2 + ld c, $4 + ld a, $fe + jr .asm_5289 +.asm_525f + cp $0 + jr nz, .asm_526c + call Func_52b2 + ld c, $0 + ld a, $2 + jr .asm_5289 +.asm_526c + cp $80 + jr nz, .asm_5279 + call Func_52b7 + ld c, $8 + ld a, $fe + jr .asm_5289 +.asm_5279 + cp $c0 + jr nz, .asm_5286 + call Func_52b7 + ld c, $c + ld a, $2 + jr .asm_5289 +.asm_5286 + cp $ff + ret +.asm_5289 + ld b, a + ld a, [hl] + add b + ld [hl], a + ld a, [H_CURRENTSPRITEOFFSET] + add $9 + ld l, a + ld a, c + ld [hl], a + call Func_52c3 + ld hl, wcf18 + dec [hl] + ret nz + ld a, $8 + ld [wcf18], a + ld hl, wcd37 + inc [hl] + ret + +Func_52a6: ; 52a6 (1:52a6) + xor a + ld [wcd37], a + ld a, $8 + ld [wcf18], a + jp Func_52c3 + +Func_52b2: ; 52b2 (1:52b2) + ld a, $4 + ld b, a + jr asm_52ba + +Func_52b7: ; 52b7 (1:52b7) + ld a, $6 + ld b, a +asm_52ba: ; 52ba (1:52ba) + ld hl, wSpriteStateData1 + ld a, [H_CURRENTSPRITEOFFSET] + add l + add b + ld l, a + ret + +Func_52c3: ; 52c3 (1:52c3) + ld hl, wSpriteStateData2 + ld a, [H_CURRENTSPRITEOFFSET] + add $e + ld l, a + ld a, [hl] + dec a + swap a + ld b, a + ld hl, wSpriteStateData1 + ld a, [H_CURRENTSPRITEOFFSET] + add $9 + ld l, a + ld a, [hl] + cp $0 + jr z, .asm_52ea + cp $4 + jr z, .asm_52ea + cp $8 + jr z, .asm_52ea + cp $c + jr z, .asm_52ea + ret +.asm_52ea + add b + ld b, a + ld [$ffe9], a + call Func_5301 + ld hl, wSpriteStateData1 + ld a, [H_CURRENTSPRITEOFFSET] + add $2 + ld l, a + ld a, [$ffe9] + ld b, a + ld a, [$ffea] + add b + ld [hl], a + ret + +Func_5301: ; 5301 (1:5301) + ld a, [H_CURRENTSPRITEOFFSET] + add $7 + ld l, a + ld a, [hl] + inc a + ld [hl], a + cp $4 + ret nz + xor a + ld [hl], a + inc l + ld a, [hl] + inc a + and $3 + ld [hl], a + ld [$ffea], a + ret diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm index 54d7321b..2cf6fea9 100755 --- a/engine/overworld/npc_movement.asm +++ b/engine/overworld/npc_movement.asm @@ -1,47 +1,47 @@ Func_1a3e0: ; 1a3e0 (6:63e0) - ld hl, $d730 + ld hl, wd730 res 1, [hl] call HandleDoors jr nc, .asm_1a406 ld a, $fc - ld [wJoypadForbiddenButtonsMask], a - ld hl, $d736 + ld [wJoyIgnore], a + ld hl, wd736 set 1, [hl] ld a, $1 - ld [$cd38], a + ld [wcd38], a ld a, $80 - ld [$ccd3], a + ld [wccd3], a xor a - ld [$c102], a + ld [wSpriteStateData1 + 2], a call Func_3486 ret .asm_1a406 xor a - ld [$cd3a], a - ld [$cd38], a - ld [$ccd3], a - ld hl, $d736 + ld [wcd3a], a + ld [wcd38], a + ld [wccd3], a + ld hl, wd736 res 0, [hl] res 1, [hl] - ld hl, $d730 + ld hl, wd730 res 7, [hl] ret Func_1a41d: ; 1a41d (6:641d) - ld hl, $d730 + ld hl, wd730 res 7, [hl] - ld hl, $d72e + ld hl, wd72e res 7, [hl] - ld hl, $d736 + ld hl, wd736 res 0, [hl] res 1, [hl] xor a - ld [$cf17], a - ld [$cc57], a - ld [$cf10], a - ld [$cd3a], a - ld [$cd38], a - ld [$ccd3], a + ld [wcf17], a + ld [wcc57], a + ld [wcf10], a + ld [wcd3a], a + ld [wcd38], a + ld [wccd3], a ret PointerTable_1a442: ; 1a442 (6:6442) @@ -52,74 +52,73 @@ PointerTable_1a442: ; 1a442 (6:6442) dw Func_1a4f4 Func_1a44c: ; 1a44c (6:644c) - ld a, [W_XCOORD] ; $d362 + ld a, [W_XCOORD] ; wd362 sub $a - ld [$cca1], a + ld [wcca1], a jr z, .asm_1a475 ld b, $0 ld c, a - ld hl, $cc97 + ld hl, wcc97 ld a, $80 call FillMemory ld [hl], $ff - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c - ld de, $cc97 + ld de, wcc97 call MoveSprite ld a, $1 - ld [$cf10], a + ld [wcf10], a jr .asm_1a47a .asm_1a475 ld a, $3 - ld [$cf10], a + ld [wcf10], a .asm_1a47a ld hl, W_FLAGS_D733 set 1, [hl] ld a, $fc - ld [wJoypadForbiddenButtonsMask], a + ld [wJoyIgnore], a ret Func_1a485: ; 1a485 (6:6485) - ld a, [$d730] + ld a, [wd730] bit 0, a ret nz - ld a, [$cca1] - ld [$cd38], a + ld a, [wcca1] + ld [wcd38], a ld [$ff95], a - ld a, $23 - call Predef + predef Func_f9a0 call Func_3486 ld a, $2 - ld [$cf10], a + ld [wcf10], a ret Func_1a4a1: ; 1a4a1 (6:64a1) - ld a, [$cd38] + ld a, [wcd38] and a ret nz Func_1a4a6: ; 1a4a6 (6:64a6) xor a - ld [$cd3b], a - ld a, [$cf13] + ld [wcd3b], a + ld a, [wcf13] swap a - ld [$cf17], a + ld [wcf17], a xor a - ld [$c206], a - ld hl, $ccd3 + ld [wSpriteStateData2 + $06], a + ld hl, wccd3 ld de, RLEList_1a4e9 call DecodeRLEList dec a - ld [$cd38], a - ld hl, $cc97 + ld [wcd38], a + ld hl, wcc97 ld de, RLEList_1a4dc call DecodeRLEList - ld hl, $d72e + ld hl, wd72e res 7, [hl] - ld hl, $d730 + ld hl, wd730 set 7, [hl] ld a, $4 - ld [$cf10], a + ld [wcf10], a ret RLEList_1a4dc: ; 1a4dc (6:64dc) @@ -140,16 +139,15 @@ RLEList_1a4e9: ; 1a4e9 (6:64e9) db $FF Func_1a4f4: ; 1a4f4 (6:64f4) - ld a, [$cd38] + ld a, [wcd38] and a ret nz ld a, $0 - ld [$cc4d], a - ld a, $11 - call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7)) - ld hl, $d730 + ld [wcc4d], a + predef HideObject + ld hl, wd730 res 7, [hl] - ld hl, $d72e + ld hl, wd72e res 7, [hl] jp Func_314e @@ -158,32 +156,31 @@ PointerTable_1a510: ; 1a510 (6:6510) dw Func_1a56b Func_1a514: ; 1a514 (6:6514) - ld a, Bank(Func_9876) - ld [$c0ef], a - ld [$c0f0], a + ld a, BANK(Music_MuseumGuy) + ld [wc0ef], a + ld [wc0f0], a ld a, MUSIC_MUSEUM_GUY - ld [$c0ee], a + ld [wc0ee], a call PlaySound - ld a, [$cf13] + ld a, [wcf13] swap a - ld [$cf17], a + ld [wcf17], a call Func_3486 - ld hl, $ccd3 + ld hl, wccd3 ld de, RLEList_PewterMuseumPlayer call DecodeRLEList dec a - ld [$cd38], a + ld [wcd38], a xor a - ld [$d12f], a - ld a, $4f - call Predef - ld hl, $cc97 + ld [wd12f], a + predef PewterGuys + ld hl, wcc97 ld de, RLEList_PewterMuseumGuy call DecodeRLEList - ld hl, $d72e + ld hl, wd72e res 7, [hl] ld a, $1 - ld [$cf10], a + ld [wcf10], a ret RLEList_PewterMuseumPlayer: ; 1a559 (6:6559) @@ -201,12 +198,12 @@ RLEList_PewterMuseumGuy: ; 1a562 (6:6562) db $FF Func_1a56b: ; 1a56b (6:656b) - ld a, [$cd38] + ld a, [wcd38] and a ret nz - ld hl, $d730 + ld hl, wd730 res 7, [hl] - ld hl, $d72e + ld hl, wd72e res 7, [hl] jp Func_314e @@ -215,35 +212,34 @@ PointerTable_1a57d: ; 1a57d (6:657d) dw Func_1a56b Func_1a581: ; 1a581 (6:6581) - ld a, Bank(Func_9876) - ld [$c0ef], a - ld [$c0f0], a + ld a, BANK(Music_MuseumGuy) + ld [wc0ef], a + ld [wc0f0], a ld a, MUSIC_MUSEUM_GUY - ld [$c0ee], a + ld [wc0ee], a call PlaySound - ld a, [$cf13] + ld a, [wcf13] swap a - ld [$cf17], a + ld [wcf17], a xor a - ld [$c206], a - ld hl, $ccd3 + ld [wSpriteStateData2 + $06], a + ld hl, wccd3 ld de, RLEList_PewterGymPlayer call DecodeRLEList dec a - ld [$cd38], a + ld [wcd38], a ld a, $1 - ld [$d12f], a - ld a, $4f - call Predef - ld hl, $cc97 + ld [wd12f], a + predef PewterGuys + ld hl, wcc97 ld de, RLEList_PewterGymGuy call DecodeRLEList - ld hl, $d72e + ld hl, wd72e res 7, [hl] - ld hl, $d730 + ld hl, wd730 set 7, [hl] ld a, $1 - ld [$cf10], a + ld [wcf10], a ret RLEList_PewterGymPlayer: ; 1a5cd (6:65cd) @@ -266,7 +262,7 @@ RLEList_PewterGymGuy: ; 1a5da (6:65da) ; XXX why would this function want to return on POKEMONTOWER_7? Func_1a5e7: ; 1a5e7 (6:65e7) - ld a, [W_CURMAP] ; $d35e + ld a, [W_CURMAP] ; W_CURMAP cp POKEMONTOWER_7 ret z ld hl, RivalIDs ; $6605 @@ -280,7 +276,7 @@ Func_1a5e7: ; 1a5e7 (6:65e7) ret z jr .loop .notRival - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c jp SetSpriteMovementBytesToFF diff --git a/engine/overworld/oaks_aide.asm b/engine/overworld/oaks_aide.asm index ca2c6726..68135287 100755 --- a/engine/overworld/oaks_aide.asm +++ b/engine/overworld/oaks_aide.asm @@ -2,13 +2,13 @@ OaksAideScript ; 0x59035 ld hl, OaksAideHiText call PrintText call YesNoChoice - ld a, [$cc26] + ld a, [wCurrentMenuItem] and a jr nz, .asm_59086 ; 0x59042 $42 ld hl, wPokedexOwned ld b, wPokedexOwnedEnd - wPokedexOwned call CountSetBits - ld a, [$d11e] + ld a, [wd11e] ld [$ffdd], a ld b, a ld a, [$ffdb] diff --git a/engine/overworld/oam.asm b/engine/overworld/oam.asm new file mode 100644 index 00000000..63495d22 --- /dev/null +++ b/engine/overworld/oam.asm @@ -0,0 +1,178 @@ +PrepareOAMData: +; Determine OAM data for currently visible +; sprites and write it to wOAMBuffer. + + ld a, [wcfcb] + dec a + jr z, .asm_4b1e + + cp 0 - 1 + ret nz + ld [wcfcb], a + jp HideSprites + +.asm_4b1e + xor a + ld [$ff90], a +.asm_4b21 + ld [$ff8f], a + + ld d, wSpriteStateData1 / $100 + ld a, [$ff8f] + ld e, a + ld a, [de] ; c1x0 + and a + jp z, .asm_4bad + + inc e + inc e + ld a, [de] ; c1x2 (facing/anim) + ld [wd5cd], a + cp $ff ; off-screen (don't draw) + jr nz, .visible + + call Func_4bd1 + jr .asm_4bad + +.visible + cp $a0 + jr c, .usefacing + and $f + add $10 + jr .asm_4b48 + +.usefacing + and $f +.asm_4b48 + ld l, a + + push de + inc d + ld a, e + add $5 + ld e, a + ld a, [de] ; c2x7 + and $80 + ld [$ff94], a ; temp store sprite priority + pop de + + ld h, 0 + ld bc, SpriteFacingAndAnimationTable + add hl, hl + add hl, hl + add hl, bc + + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld h, [hl] + ld l, a + + call Func_4bd1 + + ld a, [$ff90] + ld e, a + ld d, wOAMBuffer / $100 +.tile + ld a, [$ff92] ; temp for sprite Y position + add $10 ; Y=16 is top of screen (Y=0 is invisible) + add [hl] ; add Y offset from table + ld [de], a ; write new sprite OAM Y position + inc hl + ld a, [$ff91] ; temp for sprite X position + add $8 ; X=8 is left of screen (X=0 is invisible) + add [hl] ; add X offset from table + inc e + ld [de], a ; write new sprite OAM X position + inc e + ld a, [bc] ; read pattern number offset (accomodates orientation (offset 0,4 or 8) and animation (offset 0 or $80)) + inc bc + push bc + ld b, a + + ld a, [wd5cd] ; temp copy of c1x2 + swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs) + and $f + + ; Sprites $a and $b have one face (and therefore 4 tiles instead of 12). + ; As a result, sprite $b's tile offset is less than normal. + cp $b + jr nz, .offset + ld a, $a * 12 + 4 + jr .gotoffset + +.offset + ; a *= 12 + sla a + sla a + ld c, a + sla a + add c +.gotoffset + add b ; which frame + pop bc + ld [de], a ; tile id + inc hl + inc e + ld a, [hl] + bit 1, a ; sprite priority + jr z, .fg + ld a, [$ff94] ; facing priority + or [hl] +.fg + inc hl + ld [de], a + inc e + bit 0, a ; OAMFLAG_ENDOFDATA + jr z, .tile + + ld a, e + ld [$ff90], a + +.asm_4bad + ld a, [$ff8f] + add $10 + cp $100 % $100 + jp nz, .asm_4b21 + + ; Clear unused OAM. + ld a, [$ff90] + ld l, a + ld h, wOAMBuffer / $100 + ld de, $4 + ld b, $a0 + ld a, [wd736] + bit 6, a + ld a, $a0 + jr z, .clear + ld a, $90 +.clear + cp l + ret z + ld [hl], b + add hl, de + jr .clear + +Func_4bd1: ; 4bd1 (1:4bd1) + inc e + inc e + ld a, [de] ; c1x4 + ld [$ff92], a + inc e + inc e + ld a, [de] ; c1x6 + ld [$ff91], a + ld a, $4 + add e + ld e, a + ld a, [$ff92] + add $4 + and $f0 + ld [de], a ; c1xa (y) + inc e + ld a, [$ff91] + and $f0 + ld [de], a ; c1xb (x) + ret diff --git a/engine/overworld/pewter_guys.asm b/engine/overworld/pewter_guys.asm index 7c5779a2..2f3001fb 100755 --- a/engine/overworld/pewter_guys.asm +++ b/engine/overworld/pewter_guys.asm @@ -1,15 +1,15 @@ PewterGuys: ; 37ca1 (d:7ca1) - ld hl, $ccd3 - ld a, [$cd38] + ld hl, wccd3 + ld a, [wcd38] dec a - ld [$cd38], a + ld [wcd38], a ld d, 0 ld e, a add hl, de ld d, h ld e, l ld hl, PointerTable_37ce6 - ld a, [$d12f] + ld a, [wd12f] add a ld b, 0 ld c, a @@ -37,9 +37,9 @@ PewterGuys: ; 37ca1 (d:7ca1) ret z ld [de], a inc de - ld a, [$cd38] + ld a, [wcd38] inc a - ld [$cd38], a + ld [wcd38], a jr .asm_37cd2 .asm_37ce1 inc hl diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index 1af178c7..a0d8175f 100755 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -1,7 +1,7 @@ Func_70510: ; 70510 (1c:4510) call Func_706ef ld a, $ec - ld [$c104], a + ld [wSpriteStateData1 + 4], a call Delay3 push hl call GBFadeIn2 @@ -11,7 +11,7 @@ Func_70510: ; 70510 (1c:4510) jr nz, .asm_70568 ld a, (SFX_02_4c - SFX_Headers_02) / 3 call PlaySound - ld hl, $d732 + ld hl, wd732 bit 4, [hl] res 4, [hl] pop hl @@ -23,7 +23,7 @@ Func_70510: ; 70510 (1c:4510) ld a, b and a jr nz, .asm_7055b - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade xor a ld [hli], a inc a @@ -31,7 +31,7 @@ Func_70510: ; 70510 (1c:4510) ld a, $8 ld [hli], a ld [hl], $ff - ld hl, $cd48 + ld hl, wcd48 call Func_70730 .asm_70558 call Func_2307 @@ -45,13 +45,13 @@ Func_70510: ; 70510 (1c:4510) .asm_70568 pop hl ld de, BirdSprite ; $4d80 - ld hl, $8000 + ld hl, vNPCSprites ld bc, (BANK(BirdSprite) << 8) + $0c call CopyVideoData call Func_706d7 ld a, (SFX_02_50 - SFX_Headers_02) / 3 call PlaySound - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade xor a ld [hli], a ld a, $c @@ -80,7 +80,7 @@ FlyAnimationEnterScreenCoords: ; 70592 (1c:4592) db $3C, $40 Func_705aa: ; 705aa (1c:45aa) - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade ld a, $10 ld [hli], a ld a, $3c @@ -89,7 +89,7 @@ Func_705aa: ; 705aa (1c:45aa) ld [hl], a jp Func_70755 -_DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) +_LeaveMapAnim: ; 705ba (1c:45ba) call Func_706ef call Func_70787 ld a, b @@ -100,7 +100,7 @@ _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) .asm_705c8 ld a, (SFX_02_4b - SFX_Headers_02) / 3 call PlaySound - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade ld a, $f0 ld [hli], a ld a, $ec @@ -120,10 +120,10 @@ _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) .asm_705ef ld a, $4 call StopMusic - ld a, [$d732] + ld a, [wd732] bit 6, a jr z, .asm_70610 - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade ld a, $10 ld [hli], a ld a, $ff @@ -131,12 +131,12 @@ _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) xor a ld [hli], a ld [hl], $a1 - ld hl, $cd48 + ld hl, wcd48 call Func_70730 jr .asm_705c8 .asm_70610 call Func_706d7 - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade ld a, $ff ld [hli], a ld a, $8 @@ -145,7 +145,7 @@ _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) call Func_706ae ld a, (SFX_02_50 - SFX_Headers_02) / 3 call PlaySound - ld hl, wWhichTrade ; $cd3d + ld hl, wWhichTrade ; wWhichTrade xor a ld [hli], a ld a, $c @@ -155,7 +155,7 @@ _DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba) call Func_706ae ld c, $28 call DelayFrames - ld hl, $cd3e + ld hl, wTrainerEngageDistance ld a, $b ld [hli], a ld [hl], $8 @@ -200,34 +200,34 @@ FlyAnimationScreenCoords2: ; 70667 (1c:4667) Func_7067d: ; 7067d (1c:467d) ld a, $ff - ld [$cfcb], a - ld a, [$c302] - ld [$c30a], a - ld a, [$c306] - ld [$c30e], a + ld [wcfcb], a + ld a, [wOAMBuffer + $02] + ld [wOAMBuffer + $0a], a + ld a, [wOAMBuffer + $06] + ld [wOAMBuffer + $0e], a ld a, $a0 ld [wOAMBuffer], a - ld [$c304], a + ld [wOAMBuffer + $04], a ld c, $2 call DelayFrames ld a, $a0 - ld [$c308], a - ld [$c30c], a + ld [wOAMBuffer + $08], a + ld [wOAMBuffer + $0c], a call GBFadeOut2 ld a, $1 - ld [$cfcb], a + ld [wcfcb], a jp Func_70772 Func_706ae: ; 706ae (1c:46ae) - ld a, [$cd3f] + ld a, [wTrainerFacingDirection] xor $1 - ld [$cd3f], a - ld [$c102], a + ld [wTrainerFacingDirection], a + ld [wSpriteStateData1 + 2], a call Delay3 - ld a, [wWhichTrade] ; $cd3d + ld a, [wWhichTrade] ; wWhichTrade cp $ff jr z, .asm_706cd - ld hl, $c104 + ld hl, wSpriteStateData1 + 4 ld a, [de] inc de ld [hli], a @@ -236,33 +236,33 @@ Func_706ae: ; 706ae (1c:46ae) inc de ld [hl], a .asm_706cd - ld a, [$cd3e] + ld a, [wTrainerEngageDistance] dec a - ld [$cd3e], a + ld [wTrainerEngageDistance], a jr nz, Func_706ae ret Func_706d7: ; 706d7 (1c:46d7) ld de, BirdSprite ; $4d80 - ld hl, $8000 + ld hl, vNPCSprites ld bc, (BANK(BirdSprite) << 8) + $0c call CopyVideoData ld de, BirdSprite + $c0 ; $4e40 ; moving amination sprite - ld hl, $8800 + ld hl, vNPCSprites2 ld bc, (BANK(BirdSprite) << 8) + $0c jp CopyVideoData Func_706ef: ; 706ef (1c:46ef) - ld a, [$c102] - ld [$cd50], a - ld a, [$c104] - ld [$cd4f], a + ld a, [wSpriteStateData1 + 2] + ld [wcd50], a + ld a, [wSpriteStateData1 + 4] + ld [wcd4f], a ld hl, PlayerSpinningFacingOrder ; $4713 - ld de, $cd48 + ld de, wcd48 ld bc, $4 call CopyData - ld a, [$c102] - ld hl, $cd48 + ld a, [wSpriteStateData1 + 2] + ld hl, wcd48 .asm_7070d cp [hl] inc hl @@ -277,32 +277,32 @@ PlayerSpinningFacingOrder: ; 70713 (1c:4713) Func_70717: ; 70717 (1c:4717) ld a, [hl] - ld [$c102], a + ld [wSpriteStateData1 + 2], a push hl - ld hl, $cd48 - ld de, $cd47 + ld hl, wcd48 + ld de, wcd47 ld bc, $4 call CopyData - ld a, [$cd47] - ld [$cd4b], a + ld a, [wcd47] + ld [wcd4b], a pop hl ret Func_70730: ; 70730 (1c:4730) call Func_70717 - ld a, [wWhichTrade] ; $cd3d + ld a, [wWhichTrade] ; wWhichTrade ld c, a and $3 jr nz, .asm_70743 - ld a, [$cd40] + ld a, [wTrainerScreenY] cp $ff call nz, PlaySound .asm_70743 - ld a, [$cd3e] + ld a, [wTrainerEngageDistance] add c - ld [wWhichTrade], a ; $cd3d + ld [wWhichTrade], a ; wWhichTrade ld c, a - ld a, [$cd3f] + ld a, [wTrainerFacingDirection] cp c ret z call DelayFrames @@ -310,29 +310,29 @@ Func_70730: ; 70730 (1c:4730) Func_70755: ; 70755 (1c:4755) call Func_70717 - ld a, [wWhichTrade] ; $cd3d + ld a, [wWhichTrade] ; wWhichTrade ld c, a - ld a, [$c104] + ld a, [wSpriteStateData1 + 4] add c - ld [$c104], a + ld [wSpriteStateData1 + 4], a ld c, a - ld a, [$cd3e] + ld a, [wTrainerEngageDistance] cp c ret z - ld a, [$cd3f] + ld a, [wTrainerFacingDirection] ld c, a call DelayFrames jr Func_70755 Func_70772: ; 70772 (1c:4772) - ld a, [$cd4f] - ld [$c104], a - ld a, [$cd50] - ld [$c102], a + ld a, [wcd4f] + ld [wSpriteStateData1 + 4], a + ld a, [wcd50] + ld [wSpriteStateData1 + 2], a ret Func_7077f: ; 7077f (1c:477f) - ld a, [$cf1b] + ld a, [wcf1b] xor $1 inc a inc a @@ -341,7 +341,7 @@ Func_7077f: ; 7077f (1c:477f) Func_70787: ; 70787 (1c:4787) ld b, 0 ld hl, DataTable_707a9 ; $47a9 - ld a, [W_CURMAPTILESET] ; $d367 + ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET ld c, a .asm_70790 ld a, [hli] @@ -349,8 +349,7 @@ Func_70787: ; 70787 (1c:4787) jr z, .asm_707a4 cp c jr nz, .asm_7079e - FuncCoord 8, 9 ; $c45c - ld a, [Coord] + aCoord 8, 9 cp [hl] jr z, .asm_707a2 .asm_7079e @@ -362,10 +361,10 @@ Func_70787: ; 70787 (1c:4787) ld b, [hl] .asm_707a4 ld a, b - ld [$cd5b], a + ld [wcd5b], a ret -; format: db tileset id, tile id, value to be put in $cd5b +; format: db tileset id, tile id, value to be put in wcd5b DataTable_707a9: ; 707a9 (1c:47a9) db FACILITY, $20, 1 ; warp pad db FACILITY, $11, 2 ; hole @@ -376,26 +375,26 @@ DataTable_707a9: ; 707a9 (1c:47a9) Func_707b6: ; 707b6 (1c:47b6) ld c, $a call DelayFrames - ld hl, $d736 + ld hl, wd736 set 6, [hl] ld de, RedSprite ; $4180 - ld hl, $8000 + ld hl, vNPCSprites ld bc, (BANK(RedSprite) << 8) + $0c call CopyVideoData ld a, $4 ld hl, RedFishingTiles ; $4866 call Func_71771 - ld a, [$c102] + ld a, [wSpriteStateData1 + 2] ld c, a ld b, $0 ld hl, FishingRodGfxProperties ; $4856 add hl, bc - ld de, $c39c + ld de, wOAMBuffer + $9c ld bc, $4 call CopyData ld c, $64 call DelayFrames - ld a, [wWhichTrade] ; $cd3d + ld a, [wWhichTrade] ; wWhichTrade and a ld hl, NoNibbleText jr z, .asm_70836 @@ -404,35 +403,34 @@ Func_707b6: ; 707b6 (1c:47b6) jr z, .asm_70836 ld b, $a .asm_707fe - ld hl, $c104 + ld hl, wSpriteStateData1 + 4 call Func_70842 - ld hl, $c39c + ld hl, wOAMBuffer + $9c call Func_70842 call Delay3 dec b jr nz, .asm_707fe - ld a, [$c102] + ld a, [wSpriteStateData1 + 2] cp $4 jr nz, .asm_7081c ld a, $a0 - ld [$c39c], a + ld [wOAMBuffer + $9c], a .asm_7081c - ld hl, $cd4f + ld hl, wcd4f xor a ld [hli], a ld [hl], a - ld a, $4c - call Predef ; indirect jump to PrintEmotionBubble (17c47 (5:7c47)) - ld a, [$c102] + predef EmotionBubble + ld a, [wSpriteStateData1 + 2] cp $4 jr nz, .asm_70833 ld a, $44 - ld [$c39c], a + ld [wOAMBuffer + $9c], a .asm_70833 ld hl, ItsABiteText .asm_70836 call PrintText - ld hl, $d736 + ld hl, wd736 res 6, [hl] call LoadFontTilePatterns ret @@ -468,51 +466,51 @@ FishingRodGfxProperties: ; 70856 (1c:4856) RedFishingTiles: ; 70866 (1c:4866) dw RedFishingTilesFront - db $02, $1E - dw $8020 + db 2, BANK(RedFishingTilesFront) + dw vNPCSprites + $20 dw RedFishingTilesBack - db $02, $1E - dw $8060 + db 2, BANK(RedFishingTilesBack) + dw vNPCSprites + $60 dw RedFishingTilesSide - db $02, $1E - dw $80A0 + db 2, BANK(RedFishingTilesSide) + dw vNPCSprites + $a0 dw RedFishingRodTiles - db $03, $1E - dw $8FD0 + db 3, BANK(RedFishingRodTiles) + dw vNPCSprites2 + $7d0 _HandleMidJump: ; 7087e (1c:487e) - ld a, [$d714] + ld a, [wd714] ld c, a inc a cp $10 jr nc, .asm_70895 - ld [$d714], a + ld [wd714], a ld b, $0 ld hl, PlayerJumpingYScreenCoords ; $48ba add hl, bc ld a, [hl] - ld [$c104], a ; player's sprite y coordinate + ld [wSpriteStateData1 + 4], a ; player's sprite y coordinate ret .asm_70895 - ld a, [wWalkCounter] ; $cfc5 + ld a, [wWalkCounter] ; wcfc5 cp $0 ret nz call UpdateSprites call Delay3 xor a - ld [H_CURRENTPRESSEDBUTTONS], a - ld [H_NEWLYPRESSEDBUTTONS], a - ld [H_NEWLYRELEASEDBUTTONS], a - ld [$d714], a - ld hl, $d736 + ld [hJoyHeld], a + ld [hJoyPressed], a + ld [hJoyReleased], a + ld [wd714], a + ld hl, wd736 res 6, [hl] - ld hl, $d730 + ld hl, wd730 res 7, [hl] xor a - ld [wJoypadForbiddenButtonsMask], a + ld [wJoyIgnore], a ret PlayerJumpingYScreenCoords: ; 708ba (1c:48ba) diff --git a/engine/overworld/pokecenter.asm b/engine/overworld/pokecenter.asm index 45599498..3c640d8e 100755 --- a/engine/overworld/pokecenter.asm +++ b/engine/overworld/pokecenter.asm @@ -2,7 +2,7 @@ DisplayPokemonCenterDialogue_: ; 6fe6 (1:6fe6) call SaveScreenTilesToBuffer1 ; save screen ld hl, PokemonCenterWelcomeText call PrintText - ld hl, $d72e + ld hl, wd72e bit 2, [hl] set 1, [hl] set 2, [hl] @@ -19,22 +19,22 @@ DisplayPokemonCenterDialogue_: ; 6fe6 (1:6fe6) ld hl, NeedYourPokemonText call PrintText ld a, $18 - ld [$c112], a ; make the nurse turn to face the machine + ld [wSpriteStateData1 + $12], a ; make the nurse turn to face the machine call Delay3 - PREDEF HealPartyPredef + predef HealParty callba AnimateHealingMachine ; do the healing machine animation xor a ld [wMusicHeaderPointer], a - ld a, [$c0f0] - ld [$c0ef], a - ld a, [$d35b] - ld [$cfca], a - ld [$c0ee], a + ld a, [wc0f0] + ld [wc0ef], a + ld a, [wd35b] + ld [wcfca], a + ld [wc0ee], a call PlaySound ld hl, PokemonFightingFitText call PrintText ld a, $14 - ld [$c112], a ; make the nurse bow + ld [wSpriteStateData1 + $12], a ; make the nurse bow ld c, a call DelayFrames jr .done diff --git a/engine/overworld/pokemart.asm b/engine/overworld/pokemart.asm index 6e6f5ee2..3b06bd2c 100755 --- a/engine/overworld/pokemart.asm +++ b/engine/overworld/pokemart.asm @@ -1,30 +1,30 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) ld a,[wListScrollOffset] - ld [$d07e],a + ld [wd07e],a call UpdateSprites ; move sprites xor a - ld [$cf0a],a ; flag that is set if something is sold or bought + ld [wcf0a],a ; flag that is set if something is sold or bought .loop xor a ld [wListScrollOffset],a ld [wCurrentMenuItem],a - ld [$cc2f],a + ld [wPlayerMonNumber],a inc a - ld [$cf93],a + ld [wcf93],a ld a,$13 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; draw money text box ld a,$15 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; do buy/sell/quit menu - ld hl,$d128 ; pointer to this pokemart's inventory + ld hl,wd128 ; pointer to this pokemart's inventory ld a,[hli] ld l,[hl] ld h,a ; hl = address of inventory - ld a,[$d12e] + ld a,[wd12e] cp a,$02 jp z,.done - ld a,[$d12d] ; ID of the chosen menu item + ld a,[wd12d] ; ID of the chosen menu item and a ; buying? jp z,.buyMenu dec a ; selling? @@ -33,9 +33,9 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) jp z,.done .sellMenu xor a - ld [$cf93],a + ld [wcf93],a ld a,$02 - ld [$d11b],a + ld [wd11b],a callab Func_39bd5 ld a,[wNumBagItems] and a @@ -46,15 +46,15 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) .sellMenuLoop call LoadScreenTilesFromBuffer1 ; restore saved screen ld a,$13 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; draw money text box ld hl,wNumBagItems ld a,l - ld [$cf8b],a + ld [wcf8b],a ld a,h - ld [$cf8c],a + ld [wcf8c],a xor a - ld [$cf93],a + ld [wcf93],a ld [wCurrentMenuItem],a ld a,ITEMLISTMENU ld [wListMenuID],a @@ -62,10 +62,10 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) jp c,.returnToMainPokemartMenu ; if the player closed the menu .confirmItemSale ; if the player is trying to sell a specific item call IsKeyItem ; check if item is unsellable - ld a,[$d124] + ld a,[wd124] and a jr nz,.unsellableItem - ld a,[$cf91] + ld a,[wcf91] call IsItemHM jr c,.unsellableItem ld a,PRICEDITEMLISTMENU @@ -77,24 +77,23 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) ld hl,PokemartTellSellPriceText ld bc,$0e01 call PrintText - FuncCoord 14,7 - ld hl,Coord + hlCoord 14, 7 ld bc,$080f ld a,$14 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; yes/no menu - ld a,[$d12e] + ld a,[wd12e] cp a,$02 jr z,.sellMenuLoop ; if the player pressed the B button - ld a,[$d12d] ; ID of the chosen menu item + ld a,[wd12d] ; ID of the chosen menu item dec a jr z,.sellMenuLoop ; if the player chose No .sellItem - ld a,[$cf0a] ; flag that is set if something is sold or bought + ld a,[wcf0a] ; flag that is set if something is sold or bought and a jr nz,.skipSettingFlag1 inc a - ld [$cf0a],a + ld [wcf0a],a .skipSettingFlag1 call AddAmountSoldToMoney ld hl,wNumBagItems @@ -111,9 +110,9 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) jp .returnToMainPokemartMenu .buyMenu ld a,$01 - ld [$cf93],a + ld [wcf93],a ld a,$03 - ld [$d11b],a + ld [wd11b],a callab Func_39bd5 ld hl,PokemartBuyingGreetingText call PrintText @@ -121,44 +120,43 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) .buyMenuLoop call LoadScreenTilesFromBuffer1 ; restore saved screen ld a,$13 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; draw money text box - ld hl,$cf7b + ld hl,wStringBuffer2 + 11 ld a,l - ld [$cf8b],a + ld [wcf8b],a ld a,h - ld [$cf8c],a + ld [wcf8c],a xor a ld [wCurrentMenuItem],a inc a - ld [$cf93],a + ld [wcf93],a inc a ; a = 2 (PRICEDITEMLISTMENU) ld [wListMenuID],a call DisplayListMenuID jr c,.returnToMainPokemartMenu ; if the player closed the menu ld a,$63 - ld [$cf97],a + ld [wcf97],a xor a ld [$ff8e],a call DisplayChooseQuantityMenu inc a jr z,.buyMenuLoop ; if the player closed the choose quantity menu with the B button - ld a,[$cf91] ; item ID - ld [$d11e],a ; store item ID for GetItemName + ld a,[wcf91] ; item ID + ld [wd11e],a ; store item ID for GetItemName call GetItemName - call CopyStringToCF4B ; copy name to $cf4b + call CopyStringToCF4B ; copy name to wcf4b ld hl,PokemartTellBuyPriceText call PrintText - FuncCoord 14,7 - ld hl,Coord + hlCoord 14, 7 ld bc,$080f ld a,$14 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; yes/no menu - ld a,[$d12e] + ld a,[wd12e] cp a,$02 jp z,.buyMenuLoop ; if the player pressed the B button - ld a,[$d12d] ; ID of the chosen menu item + ld a,[wd12d] ; ID of the chosen menu item dec a jr z,.buyMenuLoop ; if the player chose No .buyItem @@ -168,11 +166,11 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) call AddItemToInventory jr nc,.bagFull call SubtractAmountPaidFromMoney - ld a,[$cf0a] ; flag that is set if something is sold or bought + ld a,[wcf0a] ; flag that is set if something is sold or bought and a jr nz,.skipSettingFlag2 ld a,$01 - ld [$cf0a],a + ld [wcf0a],a .skipSettingFlag2 ld a,(SFX_02_5a - SFX_Headers_02) / 3 call PlaySoundWaitForCurrent ; play sound @@ -183,7 +181,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) .returnToMainPokemartMenu call LoadScreenTilesFromBuffer1 ; restore save screen ld a,$13 - ld [$d125],a + ld [wd125],a call DisplayTextBoxID ; draw money text box ld hl,PokemartAnythingElseText call PrintText @@ -205,9 +203,9 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20) ld hl,PokemartThankYouText call PrintText ld a,$01 - ld [$cfcb],a + ld [wcfcb],a call UpdateSprites ; move sprites - ld a,[$d07e] + ld a,[wd07e] ld [wListScrollOffset],a ret diff --git a/engine/overworld/ssanne.asm b/engine/overworld/ssanne.asm index e8060810..8fd8f99a 100755 --- a/engine/overworld/ssanne.asm +++ b/engine/overworld/ssanne.asm @@ -1,10 +1,10 @@ Func_79f54: ; 79f54 (1e:5f54) ld a, $1 - ld [$cd50], a - ld a, [$cfcb] + ld [wcd50], a + ld a, [wcfcb] push af ld a, $ff - ld [$cfcb], a + ld [wcfcb], a ld a, $e4 ld [rOBP1], a ; $ff49 call LoadSmokeTileFourTimes @@ -26,24 +26,24 @@ Func_79f54: ; 79f54 (1e:5f54) dec c jr nz, .asm_79f73 pop af - ld [$cfcb], a + ld [wcfcb], a jp LoadPlayerSpriteGraphics Func_79f92: ; 79f92 (1e:5f92) - ld a, [$c109] + ld a, [wSpriteStateData1 + 9] ld hl, PointerTable_79fb0 ; $5fb0 ld c, a ld b, $0 add hl, bc ld a, [hli] - ld [$d08a], a + ld [wd08a], a ld a, [hli] ld e, a ld a, [hli] ld h, [hl] ld l, a push hl - ld hl, $c390 + ld hl, wOAMBuffer + $90 ld d, $0 add hl, de ld e, l @@ -65,7 +65,7 @@ PointerTable_79fb0: ; 79fb0 (1e:5fb0) dw Func_79337 LoadSmokeTileFourTimes: ; 79fc0 (1e:5fc0) - ld hl, $8fc0 + ld hl, vChars1 + $7c0 ld c, $4 .loop push bc diff --git a/engine/overworld/trainers.asm b/engine/overworld/trainers.asm index 8968332a..b05ddbf1 100755 --- a/engine/overworld/trainers.asm +++ b/engine/overworld/trainers.asm @@ -1,7 +1,7 @@ Func_567f9: ; 567f9 (15:67f9) ld hl, wSpriteStateData1 ld de, $4 - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call Func_56903 ld a, [hli] @@ -20,26 +20,26 @@ Func_567f9: ; 567f9 (15:67f9) Func_56819: ; 56819 (15:6819) ld hl, wSpriteStateData1 ld de, $0004 - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call Func_56903 ld a, [hli] - ld [$d130], a + ld [wd130], a inc hl ld a, [hl] - ld [$d131], a + ld [wd131], a ld de, $00fe add hl, de ld a, [hli] - ld [$d132], a + ld [wd132], a ld a, [hl] - ld [$d133], a + ld [wd133], a ret Func_5683d: ; 5683d (15:683d) ld hl, wSpriteStateData1 ld de, $4 - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call Func_56903 ld a, [$ffeb] @@ -58,26 +58,26 @@ Func_5683d: ; 5683d (15:683d) Func_5685d: ; 5685d (15:685d) ld hl, wSpriteStateData1 ld de, $0004 - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c call Func_56903 - ld a, [$d130] + ld a, [wd130] ld [hli], a inc hl - ld a, [$d131] + ld a, [wd131] ld [hl], a ld de, $00fe add hl, de - ld a, [$d132] + ld a, [wd132] ld [hli], a - ld a, [$d133] + ld a, [wd133] ld [hl], a ret TrainerWalkUpToPlayer: ; 56881 (15:6881) - ld a, [$cf13] + ld a, [wcf13] swap a - ld [wTrainerSpriteOffset], a ; $cd3d + ld [wTrainerSpriteOffset], a ; wWhichTrade call ReadTrainerScreenPosition ld a, [wTrainerFacingDirection] and a @@ -127,7 +127,7 @@ TrainerWalkUpToPlayer: ; 56881 (15:6881) ld a, $c0 ; a = direction to go to jr .writeWalkScript .facingLeft - ld a, [$cd41] + ld a, [wTrainerScreenX] ld b, a ld a, $40 ; (fixed) player screen X pos call CalcDifference @@ -139,11 +139,11 @@ TrainerWalkUpToPlayer: ; 56881 (15:6881) ld b, $0 ld a, $80 ; a = direction to go to .writeWalkScript - ld hl, $cc97 - ld de, $cc97 + ld hl, wcc97 + ld de, wcc97 call FillMemory ; write the necessary steps to reach player ld [hl], $ff ; write end of list sentinel - ld a, [$cf13] + ld a, [wcf13] ld [H_DOWNARROWBLINKCNT2], a ; $ff8c jp MoveSprite_ @@ -159,10 +159,10 @@ Func_56903: ; 56903 (15:6903) ret ; tests if this trainer is in the right position to engage the player and do so if she is. -CheckEngagePlayer: ; 5690f (15:690f) +TrainerEngage: ; 5690f (15:690f) push hl push de - ld a, [wTrainerSpriteOffset] ; $cd3d + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $2 ld d, $0 ld e, a @@ -173,21 +173,21 @@ CheckEngagePlayer: ; 5690f (15:690f) jr nz, .spriteOnScreen ; test if sprite is on screen jp .noEngage .spriteOnScreen - ld a, [wTrainerSpriteOffset] ; $cd3d + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $9 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x9: facing direction - ld [$cd3f], a + ld [wTrainerFacingDirection], a call ReadTrainerScreenPosition - ld a, [$cd40] ; sprite screen Y pos + ld a, [wTrainerScreenY] ; sprite screen Y pos ld b, a ld a, $3c cp b jr z, .linedUpY - ld a, [$cd41] ; sprite screen X pos + ld a, [wTrainerScreenX] ; sprite screen X pos ld b, a ld a, $40 cp b @@ -195,7 +195,7 @@ CheckEngagePlayer: ; 5690f (15:690f) xor a jp .noEngage .linedUpY - ld a, [$cd41] ; sprite screen X pos + ld a, [wTrainerScreenX] ; sprite screen X pos ld b, a ld a, $40 ; (fixed) player X position call CalcDifference ; calc distance @@ -205,7 +205,7 @@ CheckEngagePlayer: ; 5690f (15:690f) xor a jr .noEngage .linedUpX - ld a, [$cd40] ; sprite screen Y pos + ld a, [wTrainerScreenY] ; sprite screen Y pos ld b, a ld a, $3c ; (fixed) player Y position call CalcDifference ; calc distance @@ -216,7 +216,7 @@ CheckEngagePlayer: ; 5690f (15:690f) jp .noEngage .engage call CheckPlayerIsInFrontOfSprite - ld a, [wTrainerSpriteOffset] ; $cd3d + ld a, [wTrainerSpriteOffset] ; wWhichTrade and a jr z, .noEngage ld hl, wFlags_0xcd60 @@ -224,29 +224,29 @@ CheckEngagePlayer: ; 5690f (15:690f) call EngageMapTrainer ld a, $ff .noEngage: ; 56988 (15:6988) - ld [wTrainerSpriteOffset], a ; $cd3d + ld [wTrainerSpriteOffset], a ; wWhichTrade pop de pop hl ret -; reads trainer's Y position to $cd40 and X position to $cd41 +; reads trainer's Y position to wTrainerScreenY and X position to wTrainerScreenX ReadTrainerScreenPosition: ; 5698e (15:698e) - ld a, [wTrainerSpriteOffset] ; $cd3d + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $4 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] - ld [$cd40], a - ld a, [wTrainerSpriteOffset] ; $cd3d + ld [wTrainerScreenY], a + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $6 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] - ld [$cd41], a + ld [wTrainerScreenX], a ret ; checks if the sprite is properly lined up with the player with respect to the direction it's looking. Also checks the distance between player and sprite @@ -259,7 +259,7 @@ CheckSpriteCanSeePlayer: ; 569af (15:69af) jr nc, .checkIfLinedUp jr .notInLine ; player too far away .checkIfLinedUp - ld a, [$cd3f] ; sprite facing direction + ld a, [wTrainerFacingDirection] ; sprite facing direction cp $0 ; down jr z, .checkXCoord cp $4 ; up @@ -270,13 +270,13 @@ CheckSpriteCanSeePlayer: ; 569af (15:69af) jr z, .checkYCoord jr .notInLine .checkXCoord - ld a, [$cd41] ; sprite screen X position + ld a, [wTrainerScreenX] ; sprite screen X position ld b, a cp $40 jr z, .inLine jr .notInLine .checkYCoord - ld a, [$cd40] ; sprite screen Y position + ld a, [wTrainerScreenY] ; sprite screen Y position ld b, a cp $3c jr nz, .notInLine @@ -289,10 +289,10 @@ CheckSpriteCanSeePlayer: ; 569af (15:69af) ; tests if the player is in front of the sprite (rather than behind it) CheckPlayerIsInFrontOfSprite: ; 569e3 (15:69e3) - ld a, [W_CURMAP] ; $d35e + ld a, [W_CURMAP] ; W_CURMAP cp POWER_PLANT jp z, .engage ; XXX not sure why bypass this for power plant (maybe to get voltorb fake items to work?) - ld a, [wTrainerSpriteOffset] ; $cd3d + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $4 ld d, $0 ld e, a @@ -303,38 +303,38 @@ CheckPlayerIsInFrontOfSprite: ; 569e3 (15:69e3) jr nz, .notOnTopmostTile ; special case if sprite is on topmost tile (Y = $fc (-4)), make it come down a block ld a, $c .notOnTopmostTile - ld [$cd40], a - ld a, [wTrainerSpriteOffset] ; $cd3d + ld [wTrainerScreenY], a + ld a, [wTrainerSpriteOffset] ; wWhichTrade add $6 ld d, $0 ld e, a ld hl, wSpriteStateData1 add hl, de ld a, [hl] ; c1x6 (sprite screen X pos) - ld [$cd41], a - ld a, [$cd3f] ; facing direction + ld [wTrainerScreenX], a + ld a, [wTrainerFacingDirection] ; facing direction cp $0 jr nz, .notFacingDown - ld a, [$cd40] ; sprite screen Y pos + ld a, [wTrainerScreenY] ; sprite screen Y pos cp $3c jr c, .engage ; sprite above player jr .noEngage ; sprite below player .notFacingDown cp $4 jr nz, .notFacingUp - ld a, [$cd40] ; sprite screen Y pos + ld a, [wTrainerScreenY] ; sprite screen Y pos cp $3c jr nc, .engage ; sprite below player jr .noEngage ; sprite above player .notFacingUp cp $8 jr nz, .notFacingLeft - ld a, [$cd41] ; sprite screen X pos + ld a, [wTrainerScreenX] ; sprite screen X pos cp $40 jr nc, .engage ; sprite right of player jr .noEngage ; sprite left of player .notFacingLeft - ld a, [$cd41] ; sprite screen X pos + ld a, [wTrainerScreenX] ; sprite screen X pos cp $40 jr nc, .noEngage ; sprite right of player .engage @@ -343,5 +343,5 @@ CheckPlayerIsInFrontOfSprite: ; 569e3 (15:69e3) .noEngage xor a .done - ld [wTrainerSpriteOffset], a ; $cd3d + ld [wTrainerSpriteOffset], a ; wWhichTrade ret |