diff options
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 1424 |
1 files changed, 191 insertions, 1233 deletions
@@ -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" @@ -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, w6_d000 + ld bc, w6_d400 - w6_d000 + ld a, " " + call ByteFill + hlbgcoord 0, 0 + ld de, w6_d000 + ld b, $0 + ld c, $40 + call Request2bpp + pop af + ld [rSVBK], a + ret +; 4e929 + + Function4e929: ; mobile function ld h, b ld l, c @@ -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) @@ -24422,7 +23380,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 +23412,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 +23423,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 +23440,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 +23462,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 +23471,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 |