diff options
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 2163 |
1 files changed, 343 insertions, 1820 deletions
@@ -45,9 +45,9 @@ LoadPushOAM:: ; 4031 ; 403f PushOAM: ; 403f - ld a, Sprites >> 8 + ld a, Sprites / $100 ld [rDMA], a - ld a, $28 + ld a, 40 .loop dec a jr nz, .loop @@ -149,12 +149,12 @@ Function64db: ; 64db ld [rSVBK], a ld a, $60 - ld hl, w6_d000 + ld hl, wBackupTilemap lb bc, 4, 0 call ByteFill - ld a, w6_d000 / $100 + ld a, wBackupTilemap / $100 ld [rHDMA1], a - ld a, w6_d000 % $100 + ld a, wBackupTilemap % $100 ld [rHDMA2], a ld a, (VBGMap0 % $8000) / $100 ld [rHDMA3], a @@ -169,264 +169,7 @@ Function64db: ; 64db ret ; 6508 -LearnMove: ; 6508 - call LoadTileMapToTempTileMap - ld a, [CurPartyMon] - ld hl, PartyMonNicknames - call GetNick - ld hl, StringBuffer1 - ld de, wd050_MonNick - ld bc, PKMN_NAME_LENGTH - call CopyBytes - -.loop - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - ld a, [CurPartyMon] - call AddNTimes - ld d, h - ld e, l - ld b, NUM_MOVES -; Get the first empty move slot. This routine also serves to -; determine whether the Pokemon learning the moves already has -; all four slots occupied, in which case one would need to be -; deleted. -.next - ld a, [hl] - and a - jr z, .learn - inc hl - dec b - jr nz, .next -; If we're here, we enter the routine for forgetting a move -; to make room for the new move we're trying to learn. - push de - call ForgetMove - pop de - jp c, .cancel - - push hl - push de - ld [wd265], a - - ld b, a - ld a, [wBattleMode] - and a - jr z, .not_disabled - ld a, [DisabledMove] - cp b - jr nz, .not_disabled - xor a - ld [DisabledMove], a - ld [PlayerDisableCount], a -.not_disabled - - call GetMoveName - ld hl, UnknownText_0x6684 ; 1, 2 and… - call PrintText - pop de - pop hl - -.learn - ld a, [wd262] - ld [hl], a - ld bc, MON_PP - MON_MOVES - add hl, bc - - push hl - push de - dec a - ld hl, Moves + MOVE_PP - ld bc, MOVE_LENGTH - call AddNTimes - ld a, BANK(Moves) - call GetFarByte - pop de - pop hl - - ld [hl], a - - ld a, [wBattleMode] - and a - jp z, .learned - - ld a, [CurPartyMon] - ld b, a - ld a, [CurBattleMon] - cp b - jp nz, .learned - - ld a, [PlayerSubStatus5] - bit SUBSTATUS_TRANSFORMED, a - jp nz, .learned - - ld h, d - ld l, e - ld de, BattleMonMoves - ld bc, NUM_MOVES - call CopyBytes - ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES) - add hl, bc - ld de, BattleMonPP - ld bc, NUM_MOVES - call CopyBytes - jp .learned - -.cancel - ld hl, UnknownText_0x6675 ; Stop learning <MOVE>? - call PrintText - call YesNoBox - jp c, .loop - - ld hl, UnknownText_0x667a ; <MON> did not learn <MOVE>. - call PrintText - ld b, 0 - ret - -.learned - ld hl, UnknownText_0x666b ; <MON> learned <MOVE>! - call PrintText - ld b, 1 - ret -; 65d3 - -ForgetMove: ; 65d3 - push hl - ld hl, UnknownText_0x667f - call PrintText - call YesNoBox - pop hl - ret c - ld bc, -NUM_MOVES - add hl, bc - push hl - ld de, wListMoves_MoveIndicesBuffer - ld bc, NUM_MOVES - call CopyBytes - pop hl -.loop - push hl - ld hl, UnknownText_0x6670 - call PrintText - hlcoord 5, 2 - ld b, NUM_MOVES * 2 - ld c, MOVE_NAME_LENGTH - call TextBox - hlcoord 5 + 2, 2 + 2 - ld a, SCREEN_WIDTH * 2 - ld [Buffer1], a - predef ListMoves - ; wMenuData3 - ld a, $4 - ld [wcfa1], a - ld a, $6 - ld [wcfa2], a - ld a, [wd0eb] - inc a - ld [wcfa3], a - ld a, $1 - ld [wcfa4], a - ld [MenuSelection2], a - ld [wcfaa], a - ld a, $3 - ld [wcfa8], a - ld a, $20 - ld [wcfa5], a - xor a - ld [wcfa6], a - ld a, $20 - ld [wcfa7], a - call Function1bc9 - push af - call Call_LoadTempTileMapToTileMap - pop af - pop hl - bit 1, a - jr nz, .cancel - push hl - ld a, [MenuSelection2] - dec a - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - push af - push bc - call IsHMMove - pop bc - pop de - ld a, d - jr c, .hmmove - pop hl - add hl, bc - and a - ret - -.hmmove - ld hl, UnknownText_0x669a - call PrintText - pop hl - jr .loop - -.cancel - scf - ret -; 666b - -UnknownText_0x666b: ; 666b -; <MON> learned <MOVE>! - text_jump UnknownText_0x1c5660 - db "@" -; 6670 - -UnknownText_0x6670: ; 6670 -; Which move should be forgotten? - text_jump UnknownText_0x1c5678 - db "@" -; 6675 - -UnknownText_0x6675: ; 6675 -; Stop learning <MOVE>? - text_jump UnknownText_0x1c5699 - db "@" -; 667a - -UnknownText_0x667a: ; 667a -; <MON> did not learn <MOVE>. - text_jump UnknownText_0x1c56af - db "@" -; 667f - -UnknownText_0x667f: ; 667f -; <MON> is trying to learn <MOVE>. But <MON> can't learn more than -; four moves. Delete an older move to make room for <MOVE>? - text_jump UnknownText_0x1c56c9 - db "@" -; 6684 - -UnknownText_0x6684: ; 6684 - text_jump UnknownText_0x1c5740 ; 1, 2 and… - start_asm - push de - ld de, SFX_SWITCH_POKEMON - call PlaySFX - pop de - ld hl, UnknownText_0x6695 - ret -; 6695 - -UnknownText_0x6695: ; 6695 -; Poof! <MON> forgot <MOVE>. And… - text_jump UnknownText_0x1c574e - db "@" -; 669a - -UnknownText_0x669a: ; 669a -; HM moves can't be forgotten now. - text_jump UnknownText_0x1c5772 - db "@" -; 669f - +INCLUDE "engine/learn.asm" CheckNickErrors:: ; 669f ; error-check monster nick before use @@ -494,215 +237,19 @@ CheckNickErrors:: ; 669f .textcommands ; 66cf ; table defining which characters are actually text commands ; format: - ; ≥ < - db $00, $05 - db $14, $19 - db $1d, $26 - db $35, $3a - db $3f, $40 - db $49, $5d - db $5e, $7f - db $ff ; end + ; ≥ < + db "<START>", $04 + 1 + db "<PLAY_G>", $18 + 1 + db $1d, "%" + 1 + db $35, "<GREEN>" + 1 + db "<ENEMY>", "<ENEMY>" + 1 + db $49, "<TM>" + 1 + db "<ROCKET>", "┘" + 1 + db -1 ; end ; 66de -_Multiply:: ; 66de - -; hMultiplier is one byte. - ld a, 8 - ld b, a - - xor a - ld [hMultiplicand - 1], a - ld [hMathBuffer + 1], a - ld [hMathBuffer + 2], a - ld [hMathBuffer + 3], a - ld [hMathBuffer + 4], a - - -.loop - ld a, [hMultiplier] - srl a - ld [hMultiplier], a - jr nc, .next - - ld a, [hMathBuffer + 4] - ld c, a - ld a, [hMultiplicand + 2] - add c - ld [hMathBuffer + 4], a - - ld a, [hMathBuffer + 3] - ld c, a - ld a, [hMultiplicand + 1] - adc c - ld [hMathBuffer + 3], a - - ld a, [hMathBuffer + 2] - ld c, a - ld a, [hMultiplicand + 0] - adc c - ld [hMathBuffer + 2], a - - ld a, [hMathBuffer + 1] - ld c, a - ld a, [hMultiplicand - 1] - adc c - ld [hMathBuffer + 1], a - -.next - dec b - jr z, .done - - -; hMultiplicand <<= 1 - - ld a, [hMultiplicand + 2] - add a - ld [hMultiplicand + 2], a - - ld a, [hMultiplicand + 1] - rla - ld [hMultiplicand + 1], a - - ld a, [hMultiplicand + 0] - rla - ld [hMultiplicand + 0], a - - ld a, [hMultiplicand - 1] - rla - ld [hMultiplicand - 1], a - - jr .loop - - -.done - ld a, [hMathBuffer + 4] - ld [hProduct + 3], a - - ld a, [hMathBuffer + 3] - ld [hProduct + 2], a - - ld a, [hMathBuffer + 2] - ld [hProduct + 1], a - - ld a, [hMathBuffer + 1] - ld [hProduct + 0], a - - ret -; 673e - - -_Divide:: ; 673e - xor a - ld [hMathBuffer + 0], a - ld [hMathBuffer + 1], a - ld [hMathBuffer + 2], a - ld [hMathBuffer + 3], a - ld [hMathBuffer + 4], a - - ld a, 9 - ld e, a - -.loop - ld a, [hMathBuffer + 0] - ld c, a - ld a, [hDividend + 1] - sub c - ld d, a - - ld a, [hDivisor] - ld c, a - ld a, [hDividend + 0] - sbc c - jr c, .asm_6767 - - ld [hDividend + 0], a - - ld a, d - ld [hDividend + 1], a - - ld a, [hMathBuffer + 4] - inc a - ld [hMathBuffer + 4], a - - jr .loop - -.asm_6767 - ld a, b - cp 1 - jr z, .done - - ld a, [hMathBuffer + 4] - add a - ld [hMathBuffer + 4], a - - ld a, [hMathBuffer + 3] - rla - ld [hMathBuffer + 3], a - - ld a, [hMathBuffer + 2] - rla - ld [hMathBuffer + 2], a - - ld a, [hMathBuffer + 1] - rla - ld [hMathBuffer + 1], a - - dec e - jr nz, .asm_6798 - - ld e, 8 - ld a, [hMathBuffer + 0] - ld [hDivisor], a - xor a - ld [hMathBuffer + 0], a - - ld a, [hDividend + 1] - ld [hDividend + 0], a - - ld a, [hDividend + 2] - ld [hDividend + 1], a - - ld a, [hDividend + 3] - ld [hDividend + 2], a - -.asm_6798 - ld a, e - cp 1 - jr nz, .asm_679e - dec b - -.asm_679e - ld a, [hDivisor] - srl a - ld [hDivisor], a - - ld a, [hMathBuffer + 0] - rr a - ld [hMathBuffer + 0], a - - jr .loop - -.done - ld a, [hDividend + 1] - ld [hDivisor], a - - ld a, [hMathBuffer + 4] - ld [hDividend + 3], a - - ld a, [hMathBuffer + 3] - ld [hDividend + 2], a - - ld a, [hMathBuffer + 2] - ld [hDividend + 1], a - - ld a, [hMathBuffer + 1] - ld [hDividend + 0], a - - ret -; 67c1 - +INCLUDE "engine/math.asm" ItemAttributes: ; 67c1 INCLUDE "items/item_attributes.asm" @@ -3410,7 +2957,7 @@ Script_Cut: ; 0xc802 writetext UnknownText_0xc7c4 reloadmappart callasm CutDownTreeOrGrass - loadmovesprites + closetext end ; 0xc810 @@ -3565,7 +3112,7 @@ Script_UseFlash: ; 0xc8e6 special UpdateTimePals writetext UnknownText_0xc8f3 callasm BlindingFlash - loadmovesprites + closetext end ; 0xc8f3 @@ -3662,8 +3209,8 @@ SurfFromMenuScript: ; c983 UsedSurfScript: ; c986 writetext UsedSurfText ; "used SURF!" + waitbutton closetext - loadmovesprites callasm Functionc9a2 ; empty function @@ -3806,7 +3353,7 @@ AskSurfScript: ; ca2c writetext AskSurfText yesorno iftrue UsedSurfScript - loadmovesprites + closetext end ; ca36 @@ -3962,8 +3509,8 @@ Script_WaterfallFromMenu: ; 0xcb1c Script_UsedWaterfall: ; 0xcb20 callasm GetPartyNick writetext UnknownText_0xcb51 + waitbutton closetext - loadmovesprites playsound SFX_BUBBLEBEAM .loop applymovement PLAYER, WaterfallStep @@ -4031,7 +3578,7 @@ Script_AskWaterfall: ; 0xcb86 writetext UnknownText_0xcb90 yesorno iftrue Script_UsedWaterfall - loadmovesprites + closetext end ; 0xcb90 @@ -4069,16 +3616,16 @@ dig_incave .CheckCanDig: ; cbb8 call GetMapPermission - cp $4 + cp CAVE jr z, .incave - cp $7 + cp DUNGEON jr z, .incave .fail ld a, $2 ret .incave - ld hl, wdca9 + ld hl, wDigWarp ld a, [hli] and a jr z, .fail @@ -4093,8 +3640,8 @@ dig_incave ; cbd8 .DoDig: ; cbd8 - ld hl, wdca9 - ld de, wd146 + ld hl, wDigWarp + ld de, wNextWarp ld bc, 3 call CopyBytes call GetPartyNick @@ -4159,8 +3706,8 @@ UsedDigScript: ; 0xcc35 writetext UnknownText_0xcc1c UsedDigOrEscapeRopeScript: ; 0xcc3c + waitbutton closetext - loadmovesprites playsound SFX_WARP_TO applymovement PLAYER, .DigOut farscall Script_AbortBugContest @@ -4208,9 +3755,9 @@ TeleportFunction: ; cc61 jr .nope .CheckIfSpawnPoint - ld a, [wdcb2] + ld a, [wLastSpawnMapGroup] ld d, a - ld a, [wdcb3] + ld a, [wLastSpawnMapNumber] ld e, a callba IsSpawnPoint jr nc, .nope @@ -4257,7 +3804,7 @@ Script_UsedTeleport: ; 0xccbb writetext UnknownText_0xccb1 pause 60 reloadmappart - loadmovesprites + closetext playsound SFX_WARP_TO applymovement PLAYER, .TeleportFrom farscall Script_AbortBugContest @@ -4347,7 +3894,7 @@ Script_UsedStrength: ; 0xcd2d cry 0 pause 3 writetext UnknownText_0xcd46 - loadmovesprites + closetext end ; 0xcd41 @@ -4381,7 +3928,7 @@ AskStrengthScript: writetext UnknownText_0xcd69 yesorno iftrue Script_UsedStrength - loadmovesprites + closetext end ; 0xcd69 @@ -4525,7 +4072,7 @@ Script_UsedWhirlpool: ; 0xce0f writetext UnknownText_0xcdd9 reloadmappart callasm DisappearWhirlpool - loadmovesprites + closetext end ; 0xce1d @@ -4584,7 +4131,7 @@ Script_AskWhirlpoolOW: ; 0xce6e writetext UnknownText_0xce78 yesorno iftrue Script_UsedWhirlpool - loadmovesprites + closetext end ; 0xce78 @@ -4642,16 +4189,16 @@ HeadbuttScript: ; 0xceab callasm TreeMonEncounter iffalse .no_battle - loadmovesprites - battlecheck + closetext + setup_random_encounter startbattle returnafterbattle end .no_battle writetext UnknownText_0xcea2 + waitbutton closetext - loadmovesprites end ; 0xcec9 @@ -4676,7 +4223,7 @@ AskHeadbuttScript: ; 0xcedc writetext UnknownText_0xcee6 yesorno iftrue HeadbuttScript - loadmovesprites + closetext end ; 0xcee6 @@ -4742,7 +4289,7 @@ RockSmashFromMenuScript: ; 0xcf2e RockSmashScript: ; cf32 callasm GetPartyNick writetext UnknownText_0xcf58 - loadmovesprites + closetext special WaitSFX playsound SFX_STRENGTH earthquake 84 @@ -4752,7 +4299,7 @@ RockSmashScript: ; cf32 callasm RockMonEncounter copybytetovar TempWildMonSpecies iffalse .done - battlecheck + setup_random_encounter startbattle returnafterbattle .done @@ -4776,7 +4323,7 @@ AskRockSmashScript: ; 0xcf5d writetext UnknownText_0xcf77 yesorno iftrue RockSmashScript - loadmovesprites + closetext end .no jumptext UnknownText_0xcf72 @@ -4920,7 +4467,7 @@ Script_NotEvenANibble2: ; 0xd027 Script_NotEvenANibble_FallThrough: ; 0xd02d loademote EMOTE_SHADOW callasm PutTheRodAway - loadmovesprites + closetext end ; 0xd035 @@ -4940,8 +4487,8 @@ Script_GotABite: ; 0xd035 applymovement PLAYER, .Movement_RestoreRod writetext UnknownText_0xd0a4 callasm PutTheRodAway - loadmovesprites - battlecheck + closetext + setup_random_encounter startbattle returnafterbattle end @@ -5125,15 +4672,15 @@ Script_GetOnBike: ; 0xd13e special UpdateTimePals writecode VAR_MOVEMENT, PLAYER_BIKE writetext UnknownText_0xd17c + waitbutton closetext - loadmovesprites special ReplaceKrisSprite end ; 0xd14e Script_GetOnBike_Register: ; 0xd14e writecode VAR_MOVEMENT, PLAYER_BIKE - loadmovesprites + closetext special ReplaceKrisSprite end ; 0xd156 @@ -5147,10 +4694,10 @@ Script_GetOffBike: ; 0xd158 special UpdateTimePals writecode VAR_MOVEMENT, PLAYER_NORMAL writetext UnknownText_0xd181 - closetext + waitbutton FinishGettingOffBike: - loadmovesprites + closetext special ReplaceKrisSprite special PlayMapMusic end @@ -5163,8 +4710,8 @@ Script_GetOffBike_Register: ; 0xd16b UnknownScript_0xd171: ; 0xd171 writetext UnknownText_0xd177 + waitbutton closetext - loadmovesprites end ; 0xd177 @@ -5218,7 +4765,7 @@ AskCutScript: ; 0xd1a9 callasm .CheckMap iftrue Script_Cut .script_d1b8 - loadmovesprites + closetext end ; 0xd1ba @@ -7012,11 +6559,11 @@ AddTempmonToParty: ; da96 call AddNTimes predef GetUnownLetter callab UpdateUnownDex - ld a, [wdef4] + ld a, [wFirstUnownSeen] and a jr nz, .done ld a, [UnownLetter] - ld [wdef4], a + ld [wFirstUnownSeen], a .done and a @@ -9044,7 +8591,7 @@ Special_GiveParkBalls: ; 135db BugCatchingContestBattleScript:: ; 0x135eb writecode VAR_BATTLETYPE, BATTLETYPE_CONTEST - battlecheck + setup_random_encounter startbattle returnafterbattle copybytetovar wParkBallsRemaining @@ -9056,7 +8603,7 @@ BugCatchingContestOverScript:: ; 0x135f8 playsound SFX_ELEVATOR_END loadfont writetext UnknownText_0x1360f - closetext + waitbutton jump BugCatchingContestReturnToGateScript ; 0x13603 @@ -9064,10 +8611,10 @@ BugCatchingContestOutOfBallsScript: ; 0x13603 playsound SFX_ELEVATOR_END loadfont writetext UnknownText_0x13614 - closetext + waitbutton BugCatchingContestReturnToGateScript: ; 0x1360b - loadmovesprites + closetext jumpstd bugcontestresultswarp ; 0x1360f @@ -9086,8 +8633,8 @@ UnknownText_0x13614: ; 0x13614 RepelWoreOffScript:: ; 0x13619 loadfont writetext .text + waitbutton closetext - loadmovesprites end ; 0x13620 @@ -9113,10 +8660,10 @@ SignpostItemScript:: ; 0x13625 .bag_full: ; 0x1363e keeptextopen writetext .no_room_text - closetext + waitbutton .finish: ; 13643 - loadmovesprites + closetext end ; 0x13645 @@ -9917,7 +9464,7 @@ UpdateItemDescription: ; 0x244c3 ; 0x244e3 Pokepic:: ; 244e3 - ld hl, MenuDataHeader_0x24547 + ld hl, PokepicMenuDataHeader call CopyMenuDataHeader call MenuBox call UpdateSprites @@ -9946,8 +9493,8 @@ Pokepic:: ; 244e3 ret ; 24528 -PokepicYesOrNo:: ; 24528 - ld hl, MenuDataHeader_0x24547 +ClosePokepic:: ; 24528 + ld hl, PokepicMenuDataHeader call CopyMenuDataHeader call ClearMenuBoxInterior call WaitBGMap @@ -9961,7 +9508,7 @@ PokepicYesOrNo:: ; 24528 ret ; 24547 -MenuDataHeader_0x24547: ; 0x24547 +PokepicMenuDataHeader: ; 0x24547 db $40 ; flags db 04, 06 ; start coords db 13, 14 ; end coords @@ -14291,12 +13838,12 @@ SECTION "Tileset Data 4", ROMX, BANK[TILESETS_4] INCLUDE "tilesets/data_4.asm" -SECTION "bankD", ROMX, BANK[$D] +SECTION "Effect Commands", ROMX, BANK[$D] INCLUDE "battle/effect_commands.asm" -SECTION "bankE", ROMX, BANK[$E] +SECTION "Enemy Trainers", ROMX, BANK[$E] INCLUDE "battle/ai/items.asm" @@ -14326,8 +13873,8 @@ GetTrainerClassName: ; 3952d ret ; 39550 -Function39550: ; 39550 - ld hl, wd26b +GetOTName: ; 39550 + ld hl, OTPlayerName ld a, [wLinkMode] and a jr nz, .ok @@ -14352,13 +13899,13 @@ Function39550: ; 39550 ret ; 3957b -Function3957b: ; 3957b +GetTrainerAttributes: ; 3957b ld a, [TrainerClass] ld c, a - call Function39550 + call GetOTName ld a, [TrainerClass] dec a - ld hl, TrainerClassAttributes + ld hl, TrainerClassAttributes + TRNATTR_ITEM1 ld bc, NUM_TRAINER_ATTRIBUTES call AddNTimes ld de, wEnemyTrainerItem1 @@ -14374,414 +13921,14 @@ Function3957b: ; 3957b INCLUDE "trainers/attributes.asm" - -ReadTrainerParty: ; 39771 - ld a, [InBattleTowerBattle] - bit 0, a - ret nz - - ld a, [wLinkMode] - and a - ret nz - - ld hl, OTPartyCount - xor a - ld [hli], a - dec a - ld [hl], a - - ld hl, OTPartyMons - ld bc, OTPartyMonsEnd - OTPartyMons - xor a - call ByteFill - - ld a, [OtherTrainerClass] - cp CAL - jr nz, .not_cal2 - ld a, [OtherTrainerID] - cp CAL2 - jr z, .cal2 - ld a, [OtherTrainerClass] -.not_cal2 - - dec a - ld c, a - ld b, 0 - ld hl, TrainerGroups -rept 2 - add hl, bc -endr - ld a, [hli] - ld h, [hl] - ld l, a - - ld a, [OtherTrainerID] - ld b, a -.skip_trainer - dec b - jr z, .got_trainer -.loop - ld a, [hli] - cp $ff - jr nz, .loop - jr .skip_trainer -.got_trainer - -.skip_name - ld a, [hli] - cp "@" - jr nz, .skip_name - - ld a, [hli] - ld c, a - ld b, 0 - ld d, h - ld e, l - ld hl, TrainerTypes -rept 2 - add hl, bc -endr - ld a, [hli] - ld h, [hl] - ld l, a - ld bc, .done - push bc - jp [hl] - -.done - jp ComputeTrainerReward - -.cal2 - ld a, BANK(sMysteryGiftTrainer) - call GetSRAMBank - ld de, sMysteryGiftTrainer - call TrainerType2 - call CloseSRAM - jr .done -; 397e3 - -TrainerTypes: ; 397e3 - dw TrainerType1 ; level, species - dw TrainerType2 ; level, species, moves - dw TrainerType3 ; level, species, item - dw TrainerType4 ; level, species, item, moves -; 397eb - -TrainerType1: ; 397eb -; normal (level, species) - ld h, d - ld l, e -.loop - ld a, [hli] - cp $ff - ret z - - ld [CurPartyLevel], a - ld a, [hli] - ld [CurPartySpecies], a - ld a, OTPARTYMON - ld [MonType], a - push hl - predef TryAddMonToParty - pop hl - jr .loop -; 39806 - -TrainerType2: ; 39806 -; moves - ld h, d - ld l, e -.loop - ld a, [hli] - cp $ff - ret z - - ld [CurPartyLevel], a - ld a, [hli] - ld [CurPartySpecies], a - ld a, OTPARTYMON - ld [MonType], a - - push hl - predef TryAddMonToParty - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - pop hl - - ld b, NUM_MOVES -.copy_moves - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .copy_moves - - push hl - - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1Species - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - ld hl, MON_PP - add hl, de - push hl - ld hl, MON_MOVES - add hl, de - pop de - - ld b, NUM_MOVES -.copy_pp - ld a, [hli] - and a - jr z, .copied_pp - - push hl - push bc - dec a - ld hl, Moves + MOVE_PP - ld bc, MOVE_LENGTH - call AddNTimes - ld a, BANK(Moves) - call GetFarByte - pop bc - pop hl - - ld [de], a - inc de - dec b - jr nz, .copy_pp -.copied_pp - - pop hl - jr .loop -; 39871 - -TrainerType3: ; 39871 -; item - ld h, d - ld l, e -.loop - ld a, [hli] - cp $ff - ret z - - ld [CurPartyLevel], a - ld a, [hli] - ld [CurPartySpecies], a - ld a, OTPARTYMON - ld [MonType], a - push hl - predef TryAddMonToParty - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1Item - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - pop hl - ld a, [hli] - ld [de], a - jr .loop -; 3989d (e:589d) - -TrainerType4: ; 3989d -; item + moves - ld h, d - ld l, e -.loop - ld a, [hli] - cp $ff - ret z - - ld [CurPartyLevel], a - ld a, [hli] - ld [CurPartySpecies], a - - ld a, OTPARTYMON - ld [MonType], a - - push hl - predef TryAddMonToParty - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1Item - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - pop hl - - ld a, [hli] - ld [de], a - - push hl - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - pop hl - - ld b, NUM_MOVES -.copy_moves - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .copy_moves - - push hl - - ld a, [OTPartyCount] - dec a - ld hl, OTPartyMon1 - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - ld hl, MON_PP - add hl, de - - push hl - ld hl, MON_MOVES - add hl, de - pop de - - ld b, NUM_MOVES -.copy_pp - ld a, [hli] - and a - jr z, .copied_pp - - push hl - push bc - dec a - ld hl, Moves + MOVE_PP - ld bc, MOVE_LENGTH - call AddNTimes - ld a, BANK(Moves) - call GetFarByte - pop bc - pop hl - - ld [de], a - inc de - dec b - jr nz, .copy_pp -.copied_pp - - pop hl - jr .loop -; 3991b - -ComputeTrainerReward: ; 3991b (e:591b) - ld hl, hProduct - xor a -rept 3 - ld [hli], a -endr - ld a, [wEnemyTrainerBaseReward] - ld [hli], a - ld a, [CurPartyLevel] - ld [hl], a - call Multiply - ld hl, wBattleReward - xor a - ld [hli], a - ld a, [hProduct + 2] - ld [hli], a - ld a, [hProduct + 3] - ld [hl], a - ret - - -Battle_GetTrainerName:: ; 39939 - ld a, [InBattleTowerBattle] - bit 0, a - ld hl, wd26b - jp nz, CopyTrainerName - - ld a, [OtherTrainerID] - ld b, a - ld a, [OtherTrainerClass] - ld c, a - -GetTrainerName:: ; 3994c - ld a, c - cp CAL - jr nz, .not_cal2 - - ld a, BANK(sMysteryGiftTrainerHouseFlag) - call GetSRAMBank - ld a, [sMysteryGiftTrainerHouseFlag] - and a - call CloseSRAM - jr z, .not_cal2 - - ld a, BANK(sMysteryGiftPartnerName) - call GetSRAMBank - ld hl, sMysteryGiftPartnerName - call CopyTrainerName - jp CloseSRAM - -.not_cal2 - dec c - push bc - ld b, 0 - ld hl, TrainerGroups -rept 2 - add hl, bc -endr - ld a, [hli] - ld h, [hl] - ld l, a - pop bc - -.loop - dec b - jr z, CopyTrainerName - -.skip - ld a, [hli] - cp $ff - jr nz, .skip - jr .loop - -CopyTrainerName: ; 39984 - ld de, StringBuffer1 - push de - ld bc, NAME_LENGTH - call CopyBytes - pop de - ret -; 39990 - -Function39990: ; 39990 -; This function is useless. - ld de, StringBuffer1 - push de - ld bc, NAME_LENGTH - pop de - ret -; 39999 +INCLUDE "trainers/read_party.asm" INCLUDE "trainers/trainer_pointers.asm" INCLUDE "trainers/trainers.asm" -SECTION "bankF", ROMX, BANK[$F] +SECTION "Battle Core", ROMX, BANK[$F] INCLUDE "battle/core.asm" @@ -14793,72 +13940,6 @@ SECTION "bank10", ROMX, BANK[$10] INCLUDE "engine/pokedex.asm" - -Function41a7f: ; 41a7f - xor a - ld [hBGMapMode], a - callba Function1de247 - call Function41af7 - call DisableLCD - call LoadStandardFont - call LoadFontsExtra - call Function414b7 - call Function4147b - ld a, [wd265] - ld [CurPartySpecies], a - call Function407fd - call Function40ba0 - hlcoord 0, 17 - ld [hl], $3b - inc hl - ld bc, $13 - ld a, " " - call ByteFill - callba Function4424d - call EnableLCD - call WaitBGMap - call GetBaseData - ld de, VTiles2 - predef GetFrontpic - ld a, $4 - call Function41423 - ld a, [CurPartySpecies] - call PlayCry - ret -; 41ad7 - - -Function41ad7: ; 41ad7 (10:5ad7) - ld a, $3 - ld [hBGMapMode], a - ld c, 4 - call DelayFrames - ret - -Function41ae1: ; 41ae1 (10:5ae1) - ld a, $4 - ld [hBGMapMode], a - ld c, 4 - call DelayFrames - ret - -Function41aeb: ; 41aeb (10:5aeb) - ld a, [hCGB] - and a - jr z, .asm_41af3 - call Function41ae1 -.asm_41af3 - call Function41ad7 - ret - - -Function41af7: ; 41af7 - xor a - ld [hBGMapMode], a - ret -; 41afb - - INCLUDE "battle/moves/moves.asm" INCLUDE "engine/evolve.asm" @@ -14867,233 +13948,10 @@ SECTION "bank11", ROMX, BANK[$11] INCLUDE "engine/fruit_trees.asm" +INCLUDE "battle/ai/move.asm" -AIChooseMove: ; 440ce -; Score each move in EnemyMonMoves starting from Buffer1. Lower is better. -; Pick the move with the lowest score. - -; Wildmons attack at random. - ld a, [wBattleMode] - dec a - ret z - - ld a, [wLinkMode] - and a - ret nz - -; No use picking a move if there's no choice. - callba CheckSubstatus_RechargeChargedRampageBideRollout - ret nz - - -; The default score is 20. Unusable moves are given a score of 80. - ld a, 20 - ld hl, Buffer1 -rept 3 - ld [hli], a -endr - ld [hl], a - -; Don't pick disabled moves. - ld a, [EnemyDisabledMove] - and a - jr z, .CheckPP - - ld hl, EnemyMonMoves - ld c, 0 -.CheckDisabledMove - cp [hl] - jr z, .ScoreDisabledMove - inc c - inc hl - jr .CheckDisabledMove -.ScoreDisabledMove - ld hl, Buffer1 - ld b, 0 - add hl, bc - ld [hl], 80 - -; Don't pick moves with 0 PP. -.CheckPP - ld hl, Buffer1 - 1 - ld de, EnemyMonPP - ld b, 0 -.CheckMovePP - inc b - ld a, b - cp EnemyMonMovesEnd - EnemyMonMoves + 1 - jr z, .ApplyLayers - inc hl - ld a, [de] - inc de - and $3f - jr nz, .CheckMovePP - ld [hl], 80 - jr .CheckMovePP - - -; Apply AI scoring layers depending on the trainer class. -.ApplyLayers - ld hl, TrainerClassAttributes + 3 - - ; If we have a battle in BattleTower just load the Attributes of the first TrainerClass (Falkner) - ; so we have always the same AI, regardless of the loaded class of trainer - ld a, [InBattleTowerBattle] - bit 0, a - jr nz, .battle_tower_skip - - ld a, [TrainerClass] - dec a - ld bc, 7 ; Trainer2AI - Trainer1AI - call AddNTimes - -.battle_tower_skip - lb bc, CHECK_FLAG, 0 - push bc - push hl - -.CheckLayer - pop hl - pop bc - - ld a, c - cp 16 ; up to 16 scoring layers - jr z, .DecrementScores - - push bc - ld d, BANK(TrainerClassAttributes) - predef FlagPredef - ld d, c - pop bc - - inc c - push bc - push hl - - ld a, d - and a - jr z, .CheckLayer - - ld hl, AIScoringPointers - dec c - ld b, 0 -rept 2 - add hl, bc -endr - ld a, [hli] - ld h, [hl] - ld l, a - ld a, BANK(AIScoring) - call FarCall_hl - - jr .CheckLayer - -; Decrement the scores of all moves one by one until one reaches 0. -.DecrementScores - ld hl, Buffer1 - ld de, EnemyMonMoves - ld c, EnemyMonMovesEnd - EnemyMonMoves - -.DecrementNextScore - ; If the enemy has no moves, this will infinite. - ld a, [de] - inc de - and a - jr z, .DecrementScores - - ; We are done whenever a score reaches 0 - dec [hl] - jr z, .PickLowestScoreMoves - - ; If we just decremented the fourth move's score, go back to the first move - inc hl - dec c - jr z, .DecrementScores - - jr .DecrementNextScore - -; In order to avoid bias towards the moves located first in memory, increment the scores -; that were decremented one more time than the rest (in case there was a tie). -; This means that the minimum score will be 1. -.PickLowestScoreMoves - ld a, c - -.move_loop - inc [hl] - dec hl - inc a - cp NUM_MOVES + 1 - jr nz, .move_loop - - ld hl, Buffer1 - ld de, EnemyMonMoves - ld c, NUM_MOVES - -; Give a score of 0 to a blank move -.loop2 - ld a, [de] - and a - jr nz, .skip_load - ld [hl], a - -; Disregard the move if its score is not 1 -.skip_load - ld a, [hl] - dec a - jr z, .keep - xor a - ld [hli], a - jr .after_toss - -.keep - ld a, [de] - ld [hli], a -.after_toss - inc de - dec c - jr nz, .loop2 - -; Randomly choose one of the moves with a score of 1 -.ChooseMove - ld hl, Buffer1 - call Random - and 3 - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - and a - jr z, .ChooseMove - - ld [CurEnemyMove], a - ld a, c - ld [CurEnemyMoveNum], a - ret -; 441af - - -AIScoringPointers: ; 441af - dw AI_Basic - dw AI_Setup - dw AI_Types - dw AI_Offensive - dw AI_Smart - dw AI_Opportunist - dw AI_Aggressive - dw AI_Cautious - dw AI_Status - dw AI_Risky - dw AI_None - dw AI_None - dw AI_None - dw AI_None - dw AI_None - dw AI_None -; 441cf - - -Function441cf: ; 441cf - ld hl, Unknown_441fc +AnimateDexSearchSlowpoke: ; 441cf + ld hl, .FrameIDs ld b, 25 .loop ld a, [hli] @@ -15101,53 +13959,54 @@ Function441cf: ; 441cf ; Wrap around cp $fe jr nz, .ok - ld hl, Unknown_441fc + ld hl, .FrameIDs ld a, [hli] .ok - ld [wc7db], a + ld [wDexSearchSlowpokeFrame], a ld a, [hli] ld c, a push bc push hl - call Function44207 + call DoDexSearchSlowpokeFrame pop hl pop bc call DelayFrames dec b jr nz, .loop xor a - ld [wc7db], a - call Function44207 + ld [wDexSearchSlowpokeFrame], a + call DoDexSearchSlowpokeFrame ld c, 32 call DelayFrames ret ; 441fc -Unknown_441fc: ; 441fc +.FrameIDs: ; 441fc + ; frame ID, duration db 0, 7 db 1, 7 db 2, 7 db 3, 7 db 4, 7 - db $fe + db -2 ; 44207 -Function44207: ; 44207 - ld a, [wc7db] - ld hl, Unknown_44228 +DoDexSearchSlowpokeFrame: ; 44207 + ld a, [wDexSearchSlowpokeFrame] + ld hl, .SpriteData ld de, Sprites -.asm_44210 +.loop ld a, [hli] - cp $ff + cp -1 ret z ld [de], a inc de ld a, [hli] ld [de], a inc de - ld a, [wc7db] + ld a, [wDexSearchSlowpokeFrame] ld b, a add a add b @@ -15158,50 +14017,53 @@ Function44207: ; 44207 ld a, [hli] ld [de], a inc de - jr .asm_44210 + jr .loop ; 44228 -Unknown_44228: ; 44228 - db $58, $48, $00, $00 - db $58, $50, $01, $00 - db $58, $58, $02, $00 - db $60, $48, $10, $00 - db $60, $50, $11, $00 - db $60, $58, $12, $00 - db $68, $48, $20, $00 - db $68, $50, $21, $00 - db $68, $58, $22, $00 - db $ff +.SpriteData: ; 44228 + dsprite 11, 0, 9, 0, $00, $00 + dsprite 11, 0, 10, 0, $01, $00 + dsprite 11, 0, 11, 0, $02, $00 + dsprite 12, 0, 9, 0, $10, $00 + dsprite 12, 0, 10, 0, $11, $00 + dsprite 12, 0, 11, 0, $12, $00 + dsprite 13, 0, 9, 0, $20, $00 + dsprite 13, 0, 10, 0, $21, $00 + dsprite 13, 0, 11, 0, $22, $00 + db -1 ; 4424d -Function4424d: ; 4424d +DisplayDexEntry: ; 4424d call GetPokemonName hlcoord 9, 3 - call PlaceString + call PlaceString ; mon species ld a, [wd265] ld b, a - call Function44333 + call GetDexEntryPointer ld a, b push af hlcoord 9, 5 - call FarString + call FarString ; dex species ld h, b ld l, c push de +; Print dex number hlcoord 2, 8 - ld a, $5c + ld a, $5c ; No ld [hli], a - ld a, $5d + ld a, $5d ; . ld [hli], a ld de, wd265 lb bc, PRINTNUM_LEADINGZEROS | 1, 3 call PrintNum +; Check to see if we caught it. Get out of here if we haven't. ld a, [wd265] dec a call CheckCaughtMon pop hl pop bc ret z +; Get the height of the Pokemon. ld a, [CurPartySpecies] ld [CurSpecies], a inc hl @@ -15217,7 +14079,7 @@ rept 2 endr ld a, d or e - jr z, .asm_442b0 + jr z, .skip_height push hl push de ld hl, [sp+$0] @@ -15227,11 +14089,11 @@ endr lb bc, 2, 36 call PrintNum hlcoord 14, 7 - ld [hl], "<ROCKET>" + ld [hl], $5e ; ft symbol pop af pop hl -.asm_442b0 +.skip_height pop af push af inc hl @@ -15242,32 +14104,34 @@ endr ld e, h ld a, e or d - jr z, .skip + jr z, .skip_weight push de ld hl, [sp+$0] ld d, h ld e, l hlcoord 11, 9 - lb bc, 2, 69 + lb bc, 2, PRINTNUM_RIGHTALIGN | 5 call PrintNum pop de -.skip +.skip_weight +; Page 1 lb bc, 5, SCREEN_WIDTH - 2 hlcoord 2, 11 call ClearBox hlcoord 1, 10 - ld bc, $13 - ld a, $61 + ld bc, SCREEN_WIDTH - 1 + ld a, $61 ; horizontal divider call ByteFill + ; page number hlcoord 1, 9 - ld [hl], "<CONT>" + ld [hl], $55 inc hl - ld [hl], "<CONT>" + ld [hl], $55 hlcoord 1, 10 - ld [hl], "<......>" + ld [hl], $56 ; P. inc hl - ld [hl], "<DONE>" + ld [hl], $57 ; 1 pop de inc de pop af @@ -15278,23 +14142,26 @@ endr ld a, [wPokedexStatus] or a ret z + +; Page 2 push bc push de lb bc, 5, SCREEN_WIDTH - 2 hlcoord 2, 11 call ClearBox hlcoord 1, 10 - ld bc, $13 + ld bc, SCREEN_WIDTH - 1 ld a, $61 call ByteFill + ; page number hlcoord 1, 9 - ld [hl], "<CONT>" + ld [hl], $55 inc hl - ld [hl], "<CONT>" + ld [hl], $55 hlcoord 1, 10 - ld [hl], "<......>" + ld [hl], $56 ; P. inc hl - ld [hl], "<PROMPT>" + ld [hl], $58 ; 2 pop de inc de pop af @@ -15307,7 +14174,8 @@ String_44331: ; 44331 db "#@" ; 44333 -Function44333: ; 44333 +GetDexEntryPointer: ; 44333 +; return dex entry pointer b:de push hl ld hl, PokedexDataPointerTable ld a, b @@ -15324,7 +14192,7 @@ endr rlca rlca and $3 - ld hl, PokedexEntryBanks + ld hl, .PokedexEntryBanks ld d, 0 ld e, a add hl, de @@ -15334,7 +14202,7 @@ endr ret ; 44351 -PokedexEntryBanks: ; 44351 +.PokedexEntryBanks: ; 44351 GLOBAL PokedexEntries1 GLOBAL PokedexEntries2 @@ -15347,22 +14215,26 @@ GLOBAL PokedexEntries4 db BANK(PokedexEntries4) ; 44355 -Function44355: ; 44355 - call Function44333 +GetDexEntryPagePointer: ; 44355 + call GetDexEntryPointer ; b:de push hl ld h, d ld l, e +; skip species name .loop1 ld a, b call GetFarByte inc hl cp "@" jr nz, .loop1 +; skip height and weight rept 4 inc hl endr +; if c != 1: skip entry dec c jr z, .done +; skip entry .loop2 ld a, b call GetFarByte @@ -17000,7 +15872,7 @@ Function4aad3: ; 4aad3 jr nz, .loop call Function4aa7a - callba Function8cf69 + callba PlaySpriteAnimations ret ; 4aafb @@ -19233,6 +18105,92 @@ endr INCLUDE "engine/evolution_animation.asm" +Function4e881: ; 4e881 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + ld hl, .SavingRecordDontTurnOff + call PrintText + call Function3200 + call SetPalettes + ret +; 4e8bd + +.SavingRecordDontTurnOff: ; 0x4e8bd + ; SAVING RECORD… DON'T TURN OFF! + text_jump UnknownText_0x1bd39e + db "@" +; 0x4e8c2 + + +Function4e8c2: ; 4e8c2 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + call LoadStandardFont + call LoadFontsBattleExtra + hlbgcoord 0, 0 + ld bc, VBGMap1 - VBGMap0 + ld a, " " + call ByteFill + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + ld hl, wd000 ; UnknBGPals + ld c, 4 * $10 +.load_white_palettes + ld a, (palred 31 + palgreen 31 + palblue 31) % $100 + ld [hli], a + ld a, (palred 31 + palgreen 31 + palblue 31) / $100 + ld [hli], a + dec c + jr nz, .load_white_palettes + xor a + ld [hSCY], a + ld [hSCX], a + call EnableLCD + call Function3200 + call SetPalettes + ret +; 4e906 + +Function4e906: ; 4e906 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, wBackupTilemap + ld bc, wBackupAttrMap - wBackupTilemap + ld a, " " + call ByteFill + hlbgcoord 0, 0 + ld de, wBackupTilemap + ld b, $0 + ld c, $40 + call Request2bpp + pop af + ld [rSVBK], a + ret +; 4e929 + + Function4e929: ; mobile function ld h, b ld l, c @@ -20657,15 +19615,15 @@ _GetFrontpic: ; 510a5 ld a, $6 ld [rSVBK], a ld a, b - ld de, w6_d000 + $800 + ld de, wBackupTilemap + $800 call FarDecompress pop bc - ld hl, w6_d000 - ld de, w6_d000 + $800 + ld hl, wBackupTilemap + ld de, wBackupTilemap + $800 call Function512ab pop hl push hl - ld de, w6_d000 + ld de, wBackupTilemap ld c, 7 * 7 ld a, [hROMBank] ld b, a @@ -20708,7 +19666,7 @@ Function51103: ; 51103 ld a, $1 ld [rVBK], a push hl - ld de, w6_d000 + ld de, wBackupTilemap ld c, 7 * 7 ld a, [hROMBank] ld b, a @@ -20739,7 +19697,7 @@ Function51103: ; 51103 call Function5114f pop bc pop hl - ld de, w6_d000 + ld de, wBackupTilemap ld a, [hROMBank] ld b, a call Get2bpp @@ -20749,7 +19707,7 @@ Function51103: ; 51103 ; 5114f Function5114f: ; 5114f - ld hl, w6_d000 + ld hl, wBackupTilemap swap c ld a, c and $f @@ -20808,14 +19766,14 @@ GetBackpic: ; 5116c inc hl ld a, d call GetFarHalfword - ld de, w6_d000 + ld de, wBackupTilemap pop af call FarDecompress - ld hl, w6_d000 + ld hl, wBackupTilemap ld c, 6 * 6 call Function5127c pop hl - ld de, w6_d000 + ld de, wBackupTilemap ld a, [hROMBank] ld b, a call Get2bpp @@ -20914,10 +19872,10 @@ GetTrainerPic: ; 5120d ld a, BANK(TrainerPicPointers) call GetFarHalfword pop af - ld de, w6_d000 + ld de, wBackupTilemap call FarDecompress pop hl - ld de, w6_d000 + ld de, wBackupTilemap ld c, 7 * 7 ld a, [hROMBank] ld b, a @@ -20943,10 +19901,10 @@ DecompressPredef: ; 5125d push de push bc ld a, b - ld de, w6_d000 + ld de, wBackupTilemap call FarDecompress pop bc - ld de, w6_d000 + ld de, wBackupTilemap pop hl ld a, [hROMBank] ld b, a @@ -22686,16 +21644,16 @@ INCLUDE "engine/phone_scripts.asm" TalkToTrainerScript:: ; 0xbe66a faceplayer - trainerstatus CHECK_FLAG + trainerflagaction CHECK_FLAG iftrue AlreadyBeatenTrainerScript - loadtrainerdata - playrammusic + memtrainerdata + encountermusic jump StartBattleWithMapTrainerScript ; 0xbe675 SeenByTrainerScript:: ; 0xbe675 - loadtrainerdata - playrammusic + memtrainerdata + encountermusic showemote EMOTE_SHOCK, LAST_TALKED, 30 callasm TrainerWalkToPlayer applymovement2 MovementBuffer @@ -22707,12 +21665,12 @@ SeenByTrainerScript:: ; 0xbe675 StartBattleWithMapTrainerScript: ; 0xbe68a loadfont trainertext $0 + waitbutton closetext - loadmovesprites - loadtrainerdata + memtrainerdata startbattle returnafterbattle - trainerstatus SET_FLAG + trainerflagaction SET_FLAG loadvar wRunningTrainerBattleScript, -1 AlreadyBeatenTrainerScript: @@ -23094,7 +22052,7 @@ Unknown_e00ed: ; Graphics for an unused Game Corner ; game were meant to be here. -Functione00ed: ; e00ed (38:40ed) +ret_e00ed: ; e00ed (38:40ed) ret ; e00ee (38:40ee) @@ -23138,7 +22096,7 @@ UpdateUnownDex: ; fba18 ; fba2e -Functionfba2e: ; fba2e (3e:7a2e) +PrintUnownWord: ; fba2e (3e:7a2e) hlcoord 4, 15 ld bc, 12 ld a, " " @@ -23159,13 +22117,13 @@ endr ld e, a ld d, [hl] hlcoord 4, 15 -.asm_fba52 +.loop ld a, [de] - cp $ff + cp -1 ret z inc de ld [hli], a - jr .asm_fba52 + jr .loop ; fba5a (3e:7a5a) UnownWords: ; fba5a @@ -23262,18 +22220,18 @@ Function104000:: ; 104000 Function104006: ; 104006 decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10425f ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10419d ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function10419d ret ; 10402d @@ -23285,11 +22243,11 @@ Function10402d:: ; 10402d Function104033: ; 104033 decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10425f ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10419d ret ; 104047 @@ -23301,11 +22259,11 @@ Function104047: ; 104047 Function10404d: ; 10404d decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function10419d ret ; 104061 @@ -23317,10 +22275,10 @@ ReloadMapPart:: ; 104061 Function104067: ; 104067 decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10425f call DelayFrame di @@ -23328,11 +22286,11 @@ Function104067: ; 104067 push af ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function1041ad ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function1041ad pop af ld [rVBK], a @@ -23347,10 +22305,10 @@ Function104099: ; 104099 Function1040a2: ; 1040a2 decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10425f call DelayFrame di @@ -23358,11 +22316,11 @@ Function1040a2: ; 1040a2 push af ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function1041c1 ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function1041c1 pop af ld [rVBK], a @@ -23417,10 +22375,10 @@ Function104110:: ; 104110 Function104116: ; 104116 decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function10425f call DelayFrame di @@ -23428,11 +22386,11 @@ Function104116: ; 104116 push af ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function1041b7 ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function1041b7 pop af ld [rVBK], a @@ -23447,19 +22405,19 @@ Function104148: ; 104148 (41:4148) Function10414e: ; 10414e decoord 0, 0, AttrMap - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function104263 ld c, $ff decoord 0, 0 - ld hl, w6_d000 + ld hl, wBackupTilemap call Function104265 ld a, $1 ld [rVBK], a - ld hl, w6_d400 + ld hl, wBackupAttrMap call Function1041ad ld a, $0 ld [rVBK], a - ld hl, w6_d000 + ld hl, wBackupTilemap call Function1041ad ret ; 104177 @@ -23478,7 +22436,7 @@ Function104177: ; 104177 ld [rSVBK], a ld a, [rVBK] push af - call Function10419c + call ._hl_ pop af ld [rVBK], a pop af @@ -23490,7 +22448,7 @@ Function104177: ; 104177 ret ; 10419c -Function10419c: ; 10419c +._hl_: ; 10419c jp [hl] ; 10419d @@ -23700,7 +22658,7 @@ _Get2bpp:: ; 104284 push bc push hl - ; Copy c tiles of the 2bpp from b:de to w6_d000 + ; Copy c tiles of the 2bpp from b:de to wBackupTilemap ld a, b ; bank ld l, c ; number of tiles ld h, $0 @@ -23711,7 +22669,7 @@ endr ld c, l ld h, d ; address ld l, e - ld de, w6_d000 + ld de, wBackupTilemap call FarCopyBytes pop hl @@ -23723,7 +22681,7 @@ endr ld d, h ld e, l - ld hl, w6_d000 + ld hl, wBackupTilemap call Function104209 ; restore the previous bank @@ -23778,7 +22736,7 @@ endr ld b, h ld h, d ld l, e - ld de, w6_d000 + ld de, wBackupTilemap call FarCopyBytesDouble_DoubleBankSwitch pop hl @@ -23790,7 +22748,7 @@ endr ld d, h ld e, l - ld hl, w6_d000 + ld hl, wBackupTilemap call Function104209 pop af @@ -23804,22 +22762,22 @@ Function104303: ; 104303 ; 104309 Function104309: - ld hl, w6_d000 + ld hl, wBackupTilemap decoord 0, 0 call Function10433a - ld hl, w6_d000 + $80 + ld hl, wBackupTilemap + $80 decoord 0, 0, AttrMap call Function10433a ld a, $1 ld [rVBK], a ld c, $8 - ld hl, w6_d000 + $80 + ld hl, wBackupTilemap + $80 debgcoord 0, 0, VBGMap1 call Function104209 ld a, $0 ld [rVBK], a ld c, $8 - ld hl, w6_d000 + ld hl, wBackupTilemap debgcoord 0, 0, VBGMap1 call Function104209 ret @@ -23827,7 +22785,7 @@ Function104309: Function10433a: ; 10433a (41:433a) ld b, 4 .outer_loop - ld c, 20 + ld c, SCREEN_WIDTH .inner_loop ld a, [de] ld [hli], a @@ -23835,7 +22793,7 @@ Function10433a: ; 10433a (41:433a) dec c jr nz, .inner_loop ld a, l - add $20 - 20 + add $20 - SCREEN_WIDTH ld l, a ld a, h adc $0 @@ -23858,446 +22816,7 @@ FishingRodGFX2: INCBIN "gfx/misc/fishing2.2bpp" BoulderDustGFX: INCBIN "gfx/misc/boulderdust.2bpp" FishingRodGFX4: INCBIN "gfx/misc/fishing4.2bpp" - -RunCallback_05_03: ; 1045b0 - call Clearwc7e8 - call ResetMapBufferEventFlags - call ResetFlashIfOutOfCave - call GetCurrentMapTrigger - call ResetBikeFlags - ld a, $5 - call RunMapCallback - -RunCallback_03: ; 1045c4 - callba ClearCmdQueue - ld a, $3 - call RunMapCallback - call GetMapHeaderTimeOfDayNybble - ld [wc2d0], a - ret - - -EnterMapConnection: ; 1045d6 -; Return carry if a connection has been entered. - ld a, [wPlayerStepDirection] - and a - jp z, EnterSouthConnection - cp 1 - jp z, EnterNorthConnection - cp 2 - jp z, EnterWestConnection - cp 3 - jp z, EnterEastConnection - ret -; 1045ed - - -EnterWestConnection: ; 1045ed - ld a, [WestConnectedMapGroup] - ld [MapGroup], a - ld a, [WestConnectedMapNumber] - ld [MapNumber], a - ld a, [WestConnectionStripXOffset] - ld [XCoord], a - ld a, [WestConnectionStripYOffset] - ld hl, YCoord - add [hl] - ld [hl], a - ld c, a - ld hl, WestConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - srl c - jr z, .skip_to_load - ld a, [WestConnectedMapWidth] - add 6 - ld e, a - ld d, 0 - -.loop - add hl, de - dec c - jr nz, .loop - -.skip_to_load - ld a, l - ld [wd194], a - ld a, h - ld [wd194 + 1], a - jp EnteredConnection -; 104629 - - -EnterEastConnection: ; 104629 - ld a, [EastConnectedMapGroup] - ld [MapGroup], a - ld a, [EastConnectedMapNumber] - ld [MapNumber], a - ld a, [EastConnectionStripXOffset] - ld [XCoord], a - ld a, [EastConnectionStripYOffset] - ld hl, YCoord - add [hl] - ld [hl], a - ld c, a - ld hl, EastConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - srl c - jr z, .skip_to_load - ld a, [EastConnectedMapWidth] - add 6 - ld e, a - ld d, 0 - -.loop - add hl, de - dec c - jr nz, .loop - -.skip_to_load - ld a, l - ld [wd194], a - ld a, h - ld [wd194 + 1], a - jp EnteredConnection -; 104665 - - -EnterNorthConnection: ; 104665 - ld a, [NorthConnectedMapGroup] - ld [MapGroup], a - ld a, [NorthConnectedMapNumber] - ld [MapNumber], a - ld a, [NorthConnectionStripYOffset] - ld [YCoord], a - ld a, [NorthConnectionStripXOffset] - ld hl, XCoord - add [hl] - ld [hl], a - ld c, a - ld hl, NorthConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - ld b, 0 - srl c - add hl, bc - ld a, l - ld [wd194], a - ld a, h - ld [wd194 + 1], a - jp EnteredConnection -; 104696 - - -EnterSouthConnection: ; 104696 - ld a, [SouthConnectedMapGroup] - ld [MapGroup], a - ld a, [SouthConnectedMapNumber] - ld [MapNumber], a - ld a, [SouthConnectionStripYOffset] - ld [YCoord], a - ld a, [SouthConnectionStripXOffset] - ld hl, XCoord - add [hl] - ld [hl], a - ld c, a - ld hl, SouthConnectionWindow - ld a, [hli] - ld h, [hl] - ld l, a - ld b, 0 - srl c - add hl, bc - ld a, l - ld [wd194], a - ld a, h - ld [wd194 + 1], a - ; fallthrough -; 1046c4 - -EnteredConnection: ; 1046c4 - scf - ret -; 1046c6 - -LoadWarpData: ; 1046c6 - call Function1046df - call Function104718 - ld a, [wd146] - ld [WarpNumber], a - ld a, [wd147] - ld [MapGroup], a - ld a, [wd148] - ld [MapNumber], a - ret - -Function1046df: ; 1046df (41:46df) - call GetMapPermission - call CheckOutdoorMap - ret nz - ld a, [wd147] - ld b, a - ld a, [wd148] - ld c, a - call GetAnyMapPermission - call CheckIndoorMap - ret nz - ld a, [wd14a] - cp $f - jr nz, .asm_104705 - ld a, [wd14b] - cp $a - ret z - cp $c - ret z -.asm_104705 - ld a, [wd149] - ld [wdca9], a - ld a, [wd14a] - ld [wdcaa], a - ld a, [wd14b] - ld [wdcab], a - ret - -Function104718: ; 104718 (41:4718) - call GetMapPermission - call CheckOutdoorMap - ret nz - ld a, [wd147] - ld b, a - ld a, [wd148] - ld c, a - call GetAnyMapPermission - call CheckIndoorMap - ret nz - ld a, [wd147] - ld b, a - ld a, [wd148] - ld c, a - call GetAnyMapTileset - ld a, c - cp $7 - jr z, .asm_104743 - cp $15 - jr z, .asm_104743 - ret -.asm_104743 - ld a, [wd14a] - ld [wdcb2], a - ld a, [wd14b] - ld [wdcb3], a - ret - -LoadMapTimeOfDay: ; 104750 - ld hl, VramState - res 6, [hl] - ld a, $1 - ld [wSpriteUpdatesEnabled], a - callba Function8c0e5 - callba Function8c001 - call OverworldTextModeSwitch - call Function104770 - call Function1047a3 - ret - -Function104770: ; 104770 (41:4770) - ld a, VBGMap0 / $100 - ld [wBGMapAnchor + 1], a - xor a - ld [wBGMapAnchor], a - ld [hSCY], a - ld [hSCX], a - callba Function5958 - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - xor a - lb bc, 4, 0 - hlbgcoord 0, 0 - call ByteFill - pop af - ld [rVBK], a - ld a, $60 - lb bc, 4, 0 - hlbgcoord 0, 0 - call ByteFill - ret - -Function1047a3: ; 1047a3 (41:47a3) - decoord 0, 0 - call .copy - ld a, [hCGB] - and a - ret z - - decoord 0, 0, AttrMap - ld a, $1 - ld [rVBK], a -.copy: - hlbgcoord 0, 0 - ld c, SCREEN_WIDTH - ld b, SCREEN_HEIGHT -.row - push bc -.column - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .column - ld bc, $20 - SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .row - ld a, $0 - ld [rVBK], a - ret - -LoadGraphics: ; 1047cf - call LoadTilesetHeader - call LoadTileset - xor a - ld [hMapAnims], a - xor a - ld [hTileAnimFrame], a - callba RefreshSprites - call LoadFontsExtra - callba Function106594 - ret - -LoadMapPalettes: ; 1047eb - ld b, SCGB_09 - jp GetSGBLayout -; 1047f0 - -RefreshMapSprites: ; 1047f0 - call ClearSprites - callba ReturnFromMapSetupScript - call GetMovementPermissions - callba Function579d - callba CheckReplaceKrisSprite - ld hl, wPlayerSpriteSetupFlags - bit 6, [hl] - jr nz, .skip - ld hl, VramState - set 0, [hl] - call Function2e31 -.skip - ld a, [wPlayerSpriteSetupFlags] - and $1c - ld [wPlayerSpriteSetupFlags], a - ret - -CheckMovingOffEdgeOfMap:: ; 104820 (41:4820) - ld a, [wPlayerStepDirection] - cp STANDING - ret z - and a ; DOWN - jr z, .down - cp UP - jr z, .up - cp LEFT - jr z, .left - cp RIGHT - jr z, .right - and a - ret - -.down - ld a, [PlayerNextMapY] - sub 4 - ld b, a - ld a, [MapHeight] - add a - cp b - jr z, .ok - and a - ret - -.up - ld a, [PlayerNextMapY] - sub 4 - cp -1 - jr z, .ok - and a - ret - -.left - ld a, [PlayerNextMapX] - sub $4 - cp -1 - jr z, .ok - and a - ret - -.right - ld a, [PlayerNextMapX] - sub 4 - ld b, a - ld a, [MapWidth] - add a - cp b - jr z, .ok - and a - ret - -.ok - scf - ret - - -GetCoordOfUpperLeftCorner:: ; 10486d - ld hl, OverworldMap - ld a, [XCoord] - bit 0, a - jr nz, .increment_then_halve1 - srl a - add $1 - jr .resume - -.increment_then_halve1 - add $1 - srl a - -.resume - ld c, a - ld b, $0 - add hl, bc - ld a, [MapWidth] - add $6 - ld c, a - ld b, $0 - ld a, [YCoord] - bit 0, a - jr nz, .increment_then_halve2 - srl a - add $1 - jr .resume2 - -.increment_then_halve2 - add $1 - srl a - -.resume2 - call AddNTimes - ld a, l - ld [wd194], a - ld a, h - ld [wd194 + 1], a - ld a, [YCoord] - and $1 - ld [wd196], a - ld a, [XCoord] - and $1 - ld [wd197], a - ret -; 1048ba +INCLUDE "engine/warp_connection.asm" INCLUDE "engine/mysterygift.asm" @@ -24422,7 +22941,7 @@ UnownFont: ; 1dc000 INCBIN "gfx/misc/unown_font.2bpp" ; 1dc1b0 -Function1dc1b0: ; 1dc1b0 +PrintPage1: ; 1dc1b0 hlcoord 0, 0 ld de, wca90 ld bc, 17 * SCREEN_WIDTH @@ -24454,8 +22973,8 @@ Function1dc1b0: ; 1dc1b0 push af ld a, [wd265] ld b, a - ld c, $1 - callba Function44355 + ld c, 1 ; get page 1 + callba GetDexEntryPagePointer pop af ld a, b ld hl, wcb6d @@ -24465,16 +22984,16 @@ Function1dc1b0: ; 1dc1b0 ld de, SCREEN_WIDTH add hl, de ld b, $f -.asm_1dc20a +.column_loop ld [hl], $37 add hl, de dec b - jr nz, .asm_1dc20a + jr nz, .column_loop ld [hl], $3a ret ; 1dc213 -Function1dc213: ; 1dc213 +PrintPage2: ; 1dc213 ld hl, wca90 ld bc, $a0 ld a, " " @@ -24482,11 +23001,11 @@ Function1dc213: ; 1dc213 ld hl, wca90 ld a, $36 ld b, $6 - call Function1dc26a + call .FillColumn ld hl, wcaa3 ld a, $37 ld b, $6 - call Function1dc26a + call .FillColumn ld hl, wcb08 ld [hl], $38 inc hl @@ -24504,8 +23023,8 @@ Function1dc213: ; 1dc213 push af ld a, [wd265] ld b, a - ld c, $2 - callba Function44355 + ld c, 2 ; get page 2 + callba GetDexEntryPagePointer pop af ld hl, wcaa5 ld a, b @@ -24513,14 +23032,14 @@ Function1dc213: ; 1dc213 ret ; 1dc26a -Function1dc26a: ; 1dc26a +.FillColumn: ; 1dc26a push de ld de, SCREEN_WIDTH -.asm_1dc26e +.column_loop ld [hl], a add hl, de dec b - jr nz, .asm_1dc26e + jr nz, .column_loop pop de ret ; 1dc275 @@ -24866,7 +23385,7 @@ String_PM: db "PM@" ; 1dd6ff INCLUDE "engine/diploma.asm" -Function1ddf1c: ; 1ddf1c +LoadSGBPokedexGFX: ; 1ddf1c ld hl, LZ_1ddf33 ld de, VTiles2 tile $31 call Decompress @@ -24882,21 +23401,21 @@ Function1ddf26: ; 1ddf26 (77:5f26) ; 1ddf33 (77:5f33) LZ_1ddf33: ; 1ddf33 -INCBIN "gfx/unknown/1ddf33.2bpp.lz" +INCBIN "gfx/pokedex/sgb.2bpp.lz" ; 1de0d7 -Function1de0d7: ; 1de0d7 - ld hl, LZ_1de0e1 +LoadQuestionMarkPic: ; 1de0d7 + ld hl, .QuestionMarkLZ ld de, sScratch call Decompress ret ; 1de0e1 -LZ_1de0e1: ; 1de0e1 -INCBIN "gfx/unknown/1de0e1.2bpp.lz" +.QuestionMarkLZ: ; 1de0e1 +INCBIN "gfx/pics/questionmark/front.2bpp.lz" ; 1de171 -Function1de171: ; 1de171 (77:6171) +DrawPokedexListWindow: ; 1de171 (77:6171) ld a, $32 hlcoord 0, 17 ld bc, 12 @@ -24906,46 +23425,49 @@ Function1de171: ; 1de171 (77:6171) call ClearBox ld a, $34 hlcoord 0, 0 - ld bc, $b + ld bc, 11 call ByteFill ld a, $39 hlcoord 0, 16 - ld bc, $b + ld bc, 11 call ByteFill hlcoord 5, 0 ld [hl], $3f hlcoord 5, 16 ld [hl], $40 - ld a, [wc7d4] - cp $1 - jr z, .asm_1de1bf + ld a, [wCurrentDexMode] + cp DEXMODE_OLD + jr z, .OldMode +; scroll bar hlcoord 11, 0 ld [hl], $50 ld a, $51 hlcoord 11, 1 ld b, SCREEN_HEIGHT - 3 - call Function1de27f + call Bank77_FillColumn ld [hl], $52 - jr .asm_1de1d0 -.asm_1de1bf + jr .Done + +.OldMode +; no scroll bar hlcoord 11, 0 ld [hl], $66 ld a, $67 hlcoord 11, 1 ld b, SCREEN_HEIGHT - 3 - call Function1de27f + call Bank77_FillColumn ld [hl], $68 -.asm_1de1d0 +.Done ret -Function1de1d1: ; 1de1d1 (77:61d1) +DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1) ld a, $34 hlcoord 0, 0 - ld bc, $b + ld bc, 11 call ByteFill ld a, $39 hlcoord 0, 10 - ld bc, $b + ld bc, 11 call ByteFill hlcoord 5, 0 ld [hl], $3f @@ -24956,35 +23478,36 @@ Function1de1d1: ; 1de1d1 (77:61d1) ld a, $67 hlcoord 11, 1 ld b, SCREEN_HEIGHT / 2 - call Function1de27f + call Bank77_FillColumn ld [hl], $68 ld a, $34 hlcoord 0, 11 - ld bc, $b + ld bc, 11 call ByteFill ld a, $39 hlcoord 0, 17 - ld bc, $b + ld bc, 11 call ByteFill hlcoord 11, 11 ld [hl], $66 ld a, $67 hlcoord 11, 12 ld b, 5 - call Function1de27f + call Bank77_FillColumn ld [hl], $68 hlcoord 0, 12 lb bc, 5, 11 call ClearBox - ld de, String_1de23c + ld de, .esults_D hlcoord 0, 12 call PlaceString ret ; 1de23c (77:623c) -String_1de23c: ; 1de23c -; At a glance, this is less coherent in the Japanese charset. +.esults_D: ; 1de23c +; (SEARCH R) db "ESULTS<NEXT>" +; (### FOUN) next "D!@" ; 1de247 @@ -25003,15 +23526,15 @@ Function1de247: ; 1de247 ld [hl], $66 hlcoord 19, 1 ld a, $67 - ld b, SCREEN_HEIGHT - 3 - call Function1de27f + ld b, 15 + call Bank77_FillColumn ld [hl], $68 hlcoord 19, 17 ld [hl], $3c xor a ld b, SCREEN_HEIGHT hlcoord 19, 0, AttrMap - call Function1de27f + call Bank77_FillColumn call Function3200 pop hl ld a, l @@ -25021,7 +23544,7 @@ Function1de247: ; 1de247 ret ; 1de27f -Function1de27f: ; 1de27f +Bank77_FillColumn: ; 1de27f push de ld de, SCREEN_WIDTH .loop |