From 7d4486e6a34a5163575400f21e806471be496e3d Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sun, 24 Dec 2017 19:35:35 -0500 Subject: Remove all code from main.asm (some labeled INCBINs, like out-of-context graphics, are still present) engine/routines/ stores isolated out-of-context routines as individual files. It might be preferable later to append them to their related engine/ files in unique little SECTIONs, relying on the linkerscript to place them appropriately; or some other organization method. In the meantime, they're now easily findable apart from main.asm's other content. --- battle/core.asm | 18 +- constants/misc_constants.asm | 2 + engine/card_flip.asm | 4 +- engine/check_battle_scene.asm | 47 -- engine/check_nick_errors.asm | 74 --- engine/check_time.asm | 19 - engine/consume_held_item.asm | 80 ---- engine/diploma.asm | 1 - engine/empty_sram.asm | 19 - engine/flag_predef.asm | 70 --- engine/get_breedmon_growth.asm | 27 -- engine/init_list.asm | 54 --- engine/item_effects.asm | 2 - engine/knows_move.asm | 25 - engine/link_2.asm | 91 ++++ engine/money.asm | 4 +- engine/new_pokedex_entry.asm | 52 -- engine/pack_f.asm | 20 - engine/place_graphics.asm | 56 --- engine/play_slow_cry.asm | 31 -- engine/player_gfx_2.asm | 5 - engine/pokeball_wobble.asm | 88 ---- engine/pokegear_2.asm | 25 - engine/pokerus_tick.asm | 26 - engine/printhoursmins.asm | 64 --- engine/routines/applypokerustick.asm | 26 + engine/routines/battlestart_copytilemapatonce.asm | 3 + engine/routines/checkbattlescene.asm | 47 ++ engine/routines/checknickerrors.asm | 74 +++ engine/routines/checkpokerus.asm | 25 + engine/routines/checksave.asm | 20 + engine/routines/checktime.asm | 19 + engine/routines/consumehelditem.asm | 80 ++++ engine/routines/correcterrorsinplayerparty.asm | 229 +++++++++ engine/routines/drawkrispackgfx.asm | 20 + engine/routines/emptyallsrambanks.asm | 19 + engine/routines/flagpredef.asm | 70 +++ engine/routines/getbreedmonlevelgrowth.asm | 27 ++ engine/routines/getpokeballwobble.asm | 88 ++++ engine/routines/getsquareroot.asm | 30 ++ engine/routines/initlist.asm | 54 +++ engine/routines/knowsmove.asm | 25 + .../kurt_selectquantity_interpretjoypad.asm | 4 + engine/routines/leveluphappinessmod.asm | 20 + engine/routines/loadmappart.asm | 36 ++ engine/routines/loadpushoam.asm | 21 + engine/routines/newpokedexentry.asm | 52 ++ engine/routines/phonering_copytilemapatonce.asm | 80 ++++ engine/routines/placegraphic.asm | 56 +++ engine/routines/placewaitingtext.asm | 24 + engine/routines/playslowcry.asm | 31 ++ engine/routines/printhoursmins.asm | 64 +++ engine/routines/returntobattle_useball.asm | 19 + engine/routines/savemenu_copytilemapatonce.asm | 77 +++ engine/routines/sine.asm | 50 ++ engine/routines/switchpartymons.asm | 145 ++++++ .../townmap_convertlinebreakcharacters.asm | 21 + engine/routines/trademonfrontpic.asm | 38 ++ engine/routines/updatebattlehuds.asm | 9 + engine/routines/updateitemdescription.asm | 13 + engine/sine.asm | 50 -- engine/slot_machine.asm | 4 +- engine/spawn_points.asm | 1 - engine/square_root.asm | 30 -- engine/switch_party_mons.asm | 145 ------ engine/trademon_frontpic.asm | 38 -- engine/unown_dex.asm | 1 + engine/unused_correct_party.asm | 229 --------- main.asm | 532 ++------------------- 69 files changed, 1773 insertions(+), 1777 deletions(-) delete mode 100644 engine/check_battle_scene.asm delete mode 100644 engine/check_nick_errors.asm delete mode 100644 engine/check_time.asm delete mode 100644 engine/consume_held_item.asm delete mode 100644 engine/empty_sram.asm delete mode 100644 engine/flag_predef.asm delete mode 100644 engine/get_breedmon_growth.asm delete mode 100644 engine/init_list.asm delete mode 100644 engine/knows_move.asm create mode 100644 engine/link_2.asm delete mode 100644 engine/new_pokedex_entry.asm delete mode 100644 engine/pack_f.asm delete mode 100644 engine/place_graphics.asm delete mode 100644 engine/play_slow_cry.asm delete mode 100644 engine/player_gfx_2.asm delete mode 100755 engine/pokeball_wobble.asm delete mode 100644 engine/pokegear_2.asm delete mode 100644 engine/pokerus_tick.asm delete mode 100644 engine/printhoursmins.asm create mode 100644 engine/routines/applypokerustick.asm create mode 100644 engine/routines/battlestart_copytilemapatonce.asm create mode 100644 engine/routines/checkbattlescene.asm create mode 100644 engine/routines/checknickerrors.asm create mode 100644 engine/routines/checkpokerus.asm create mode 100644 engine/routines/checksave.asm create mode 100644 engine/routines/checktime.asm create mode 100644 engine/routines/consumehelditem.asm create mode 100644 engine/routines/correcterrorsinplayerparty.asm create mode 100644 engine/routines/drawkrispackgfx.asm create mode 100644 engine/routines/emptyallsrambanks.asm create mode 100644 engine/routines/flagpredef.asm create mode 100644 engine/routines/getbreedmonlevelgrowth.asm create mode 100755 engine/routines/getpokeballwobble.asm create mode 100644 engine/routines/getsquareroot.asm create mode 100644 engine/routines/initlist.asm create mode 100644 engine/routines/knowsmove.asm create mode 100644 engine/routines/kurt_selectquantity_interpretjoypad.asm create mode 100644 engine/routines/leveluphappinessmod.asm create mode 100644 engine/routines/loadmappart.asm create mode 100644 engine/routines/loadpushoam.asm create mode 100644 engine/routines/newpokedexentry.asm create mode 100644 engine/routines/phonering_copytilemapatonce.asm create mode 100644 engine/routines/placegraphic.asm create mode 100644 engine/routines/placewaitingtext.asm create mode 100644 engine/routines/playslowcry.asm create mode 100644 engine/routines/printhoursmins.asm create mode 100644 engine/routines/returntobattle_useball.asm create mode 100644 engine/routines/savemenu_copytilemapatonce.asm create mode 100755 engine/routines/sine.asm create mode 100644 engine/routines/switchpartymons.asm create mode 100644 engine/routines/townmap_convertlinebreakcharacters.asm create mode 100644 engine/routines/trademonfrontpic.asm create mode 100644 engine/routines/updatebattlehuds.asm create mode 100644 engine/routines/updateitemdescription.asm delete mode 100755 engine/sine.asm delete mode 100644 engine/square_root.asm delete mode 100644 engine/switch_party_mons.asm delete mode 100644 engine/trademon_frontpic.asm delete mode 100644 engine/unused_correct_party.asm diff --git a/battle/core.asm b/battle/core.asm index 57088ebdd..7a1d9bf73 100644 --- a/battle/core.asm +++ b/battle/core.asm @@ -2573,11 +2573,11 @@ WinTrainerBattle: ; 3cfa4 .CheckMaxedOutMomMoney: ; 3d0b1 ld hl, wMomsMoney + 2 ld a, [hld] - cp 999999 % $100 + cp MAX_MONEY % $100 ld a, [hld] - sbc 999999 / $100 % $100 + sbc MAX_MONEY / $100 % $100 ld a, [hl] - sbc 999999 / $10000 % $100 + sbc MAX_MONEY / $10000 % $100 ret ; 3d0be @@ -2602,17 +2602,17 @@ AddBattleMoneyToAccount: ; 3d0be jr nz, .loop pop hl ld a, [hld] - cp 999999 % $100 + cp MAX_MONEY % $100 ld a, [hld] - sbc 999999 / $100 % $100 + sbc MAX_MONEY / $100 % $100 ld a, [hl] - sbc 999999 / $10000 % $100 + sbc MAX_MONEY / $10000 % $100 ret c - ld [hl], 999999 / $10000 % $100 + ld [hl], MAX_MONEY / $10000 % $100 inc hl - ld [hl], 999999 / $100 % $100 + ld [hl], MAX_MONEY / $100 % $100 inc hl - ld [hl], 999999 % $100 + ld [hl], MAX_MONEY % $100 ret ; 3d0ea diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index 25032cc10..70b97a21d 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -93,6 +93,8 @@ NUM_HOF_TEAMS = 30 ; significant money values START_MONEY EQU 3000 MOM_MONEY EQU 2300 +MAX_MONEY EQU 999999 +MAX_COINS EQU 9999 ; ChangeHappiness arguments (see data/happiness_changes.asm) diff --git a/engine/card_flip.asm b/engine/card_flip.asm index cfcd949e6..c0c4639ad 100755 --- a/engine/card_flip.asm +++ b/engine/card_flip.asm @@ -1185,14 +1185,14 @@ CardFlip_CheckWinCondition: ; e0637 .IsCoinCaseFull: ; e0833 ld a, [Coins] - cp 9999 / $100 + cp MAX_COINS / $100 jr c, .less jr z, .check_low jr .more .check_low ld a, [Coins + 1] - cp 9999 % $100 + cp MAX_COINS % $100 jr c, .less .more diff --git a/engine/check_battle_scene.asm b/engine/check_battle_scene.asm deleted file mode 100644 index b63f00907..000000000 --- a/engine/check_battle_scene.asm +++ /dev/null @@ -1,47 +0,0 @@ -CheckBattleScene: ; 4ea44 -; Return carry if battle scene is turned off. - - ld a, 0 - ld hl, wLinkMode - call GetFarWRAMByte - cp LINK_MOBILE - jr z, .mobile - - ld a, [Options] - bit BATTLE_SCENE, a - jr nz, .off - - and a - ret - -.mobile - ld a, [wcd2f] - and a - jr nz, .from_wram - - ld a, $4 - call GetSRAMBank - ld a, [$a60c] - ld c, a - call CloseSRAM - - ld a, c - bit 0, c - jr z, .off - - and a - ret - -.from_wram - ld a, $5 - ld hl, w5_dc00 - call GetFarWRAMByte - bit 0, a - jr z, .off - - and a - ret - -.off - scf - ret diff --git a/engine/check_nick_errors.asm b/engine/check_nick_errors.asm deleted file mode 100644 index 1cedca420..000000000 --- a/engine/check_nick_errors.asm +++ /dev/null @@ -1,74 +0,0 @@ -CheckNickErrors:: ; 669f -; error-check monster nick before use -; must be a peace offering to gamesharkers - -; input: de = nick location - - push bc - push de - ld b, PKMN_NAME_LENGTH - -.checkchar -; end of nick? - ld a, [de] - cp "@" ; terminator - jr z, .end - -; check if this char is a text command - ld hl, .textcommands - dec hl -.loop -; next entry - inc hl -; reached end of commands table? - ld a, [hl] - cp -1 - jr z, .done - -; is the current char between this value (inclusive)... - ld a, [de] - cp [hl] - inc hl - jr c, .loop -; ...and this one? - cp [hl] - jr nc, .loop - -; replace it with a "?" - ld a, "?" - ld [de], a - jr .loop - -.done -; next char - inc de -; reached end of nick without finding a terminator? - dec b - jr nz, .checkchar - -; change nick to "?@" - pop de - push de - ld a, "?" - ld [de], a - inc de - ld a, "@" - ld [de], a -.end -; if the nick has any errors at this point it's out of our hands - pop de - pop bc - ret - -.textcommands ; 66cf -; table defining which characters are actually text commands -; format: - ; ≥ < - db "", TX_BOX + 1 - db "", $18 + 1 - db $1d, "%" + 1 - db $35, "" + 1 - db "", "" + 1 - db "", "" + 1 - db "", "┘" + 1 - db -1 ; end diff --git a/engine/check_time.asm b/engine/check_time.asm deleted file mode 100644 index 615b51d29..000000000 --- a/engine/check_time.asm +++ /dev/null @@ -1,19 +0,0 @@ -CheckTime:: ; c000 - ld a, [TimeOfDay] - ld hl, TimeOfDayTable - ld de, 2 - call IsInArray - inc hl - ld c, [hl] - ret c - - xor a - ld c, a - ret - -TimeOfDayTable: ; c012 - db MORN_F, MORN - db DAY_F, DAY - db NITE_F, NITE - db NITE_F, NITE - db -1 diff --git a/engine/consume_held_item.asm b/engine/consume_held_item.asm deleted file mode 100644 index a6f7766fb..000000000 --- a/engine/consume_held_item.asm +++ /dev/null @@ -1,80 +0,0 @@ -ConsumeHeldItem: ; 27192 - push hl - push de - push bc - ld a, [hBattleTurn] - and a - ld hl, OTPartyMon1Item - ld de, EnemyMonItem - ld a, [CurOTMon] - jr z, .theirturn - ld hl, PartyMon1Item - ld de, BattleMonItem - ld a, [CurBattleMon] - -.theirturn - push hl - push af - ld a, [de] - ld b, a - farcall GetItemHeldEffect - ld hl, .ConsumableEffects -.loop - ld a, [hli] - cp b - jr z, .ok - inc a - jr nz, .loop - pop af - pop hl - pop bc - pop de - pop hl - ret - -.ok - xor a - ld [de], a - pop af - pop hl - call GetPartyLocation - ld a, [hBattleTurn] - and a - jr nz, .ourturn - ld a, [wBattleMode] - dec a - jr z, .done - -.ourturn - ld [hl], $0 - -.done - pop bc - pop de - pop hl - ret - -.ConsumableEffects: ; 271de -; Consumable items? - db HELD_BERRY - db HELD_2 - db HELD_5 - db HELD_HEAL_POISON - db HELD_HEAL_FREEZE - db HELD_HEAL_BURN - db HELD_HEAL_SLEEP - db HELD_HEAL_PARALYZE - db HELD_HEAL_STATUS - db HELD_30 - db HELD_ATTACK_UP - db HELD_DEFENSE_UP - db HELD_SPEED_UP - db HELD_SP_ATTACK_UP - db HELD_SP_DEFENSE_UP - db HELD_ACCURACY_UP - db HELD_EVASION_UP - db HELD_38 - db HELD_71 - db HELD_ESCAPE - db HELD_CRITICAL_UP - db -1 diff --git a/engine/diploma.asm b/engine/diploma.asm index 582d0cd1c..f1c67ea37 100644 --- a/engine/diploma.asm +++ b/engine/diploma.asm @@ -1,4 +1,3 @@ - _Diploma: ; 1dd702 call PlaceDiplomaOnScreen call WaitPressAorB_BlinkCursor diff --git a/engine/empty_sram.asm b/engine/empty_sram.asm deleted file mode 100644 index aa4b28e0d..000000000 --- a/engine/empty_sram.asm +++ /dev/null @@ -1,19 +0,0 @@ -EmptyAllSRAMBanks: ; 4cf1f - ld a, $0 - call .EmptyBank - ld a, $1 - call .EmptyBank - ld a, $2 - call .EmptyBank - ld a, $3 - call .EmptyBank - ret - -.EmptyBank: ; 4cf34 - call GetSRAMBank - ld hl, SRAM_Begin - ld bc, SRAM_End - SRAM_Begin - xor a - call ByteFill - call CloseSRAM - ret diff --git a/engine/flag_predef.asm b/engine/flag_predef.asm deleted file mode 100644 index bd4f37882..000000000 --- a/engine/flag_predef.asm +++ /dev/null @@ -1,70 +0,0 @@ -FlagPredef: ; 4d7c1 -; Perform action b on flag c in flag array hl. -; If checking a flag, check flag array d:hl unless d is 0. - -; For longer flag arrays, see FlagAction. - - push hl - push bc - -; Divide by 8 to get the byte we want. - push bc - srl c - srl c - srl c - ld b, 0 - add hl, bc - pop bc - -; Which bit we want from the byte - ld a, c - and 7 - ld c, a - -; Shift left until we can mask the bit - ld a, 1 - jr z, .shifted -.shift - add a - dec c - jr nz, .shift -.shifted - ld c, a - -; What are we doing to this flag? - dec b - jr z, .set ; 1 - dec b - jr z, .check ; 2 - -.reset - ld a, c - cpl - and [hl] - ld [hl], a - jr .done - -.set - ld a, [hl] - or c - ld [hl], a - jr .done - -.check - ld a, d - cp 0 - jr nz, .farcheck - - ld a, [hl] - and c - jr .done - -.farcheck - call GetFarByte - and c - -.done - pop bc - pop hl - ld c, a - ret diff --git a/engine/get_breedmon_growth.asm b/engine/get_breedmon_growth.asm deleted file mode 100644 index b029043d6..000000000 --- a/engine/get_breedmon_growth.asm +++ /dev/null @@ -1,27 +0,0 @@ -GetBreedMon1LevelGrowth: ; e698 - ld hl, wBreedMon1Stats - ld de, TempMon - ld bc, BOXMON_STRUCT_LENGTH - call CopyBytes - callfar CalcLevel - ld a, [wBreedMon1Level] - ld b, a - ld a, d - ld e, a - sub b - ld d, a - ret - -GetBreedMon2LevelGrowth: ; e6b3 - ld hl, wBreedMon2Stats - ld de, TempMon - ld bc, BOXMON_STRUCT_LENGTH - call CopyBytes - callfar CalcLevel - ld a, [wBreedMon2Level] - ld b, a - ld a, d - ld e, a - sub b - ld d, a - ret diff --git a/engine/init_list.asm b/engine/init_list.asm deleted file mode 100644 index e2b7235ab..000000000 --- a/engine/init_list.asm +++ /dev/null @@ -1,54 +0,0 @@ -InitList: ; 50db9 - ld a, [wInitListType] - - cp INIT_ENEMYOT_LIST - jr nz, .check_party_ot_name - ld hl, OTPartyCount - ld de, OTPartyMonOT - ld a, ENEMY_OT_NAME - jr .done - -.check_party_ot_name - cp INIT_PLAYEROT_LIST - jr nz, .check_mon_name - ld hl, PartyCount - ld de, PartyMonOT - ld a, PARTY_OT_NAME - jr .done - -.check_mon_name - cp INIT_MON_LIST - jr nz, .check_item_name - ld hl, CurMart - ld de, PokemonNames - ld a, PKMN_NAME - jr .done - -.check_item_name - cp INIT_BAG_ITEM_LIST - jr nz, .check_ob_item_name - ld hl, NumItems - ld de, ItemNames - ld a, ITEM_NAME - jr .done - -.check_ob_item_name - ld hl, CurMart - ld de, ItemNames - ld a, ITEM_NAME -.done - ld [wNamedObjectTypeBuffer], a - ld a, l - ld [wListPointer], a - ld a, h - ld [wListPointer + 1], a - ld a, e - ld [wUnusedD102], a - ld a, d - ld [wUnusedD102 + 1], a - ld bc, ItemAttributes - ld a, c - ld [wItemAttributesPtr], a - ld a, b - ld [wItemAttributesPtr + 1], a - ret diff --git a/engine/item_effects.asm b/engine/item_effects.asm index 2d7aa4c69..7fd2b7196 100644 --- a/engine/item_effects.asm +++ b/engine/item_effects.asm @@ -3314,5 +3314,3 @@ GetMthMoveOfCurrentMon: ; f969 add hl, bc ret ; f971 - -INCLUDE "engine/pokeball_wobble.asm" diff --git a/engine/knows_move.asm b/engine/knows_move.asm deleted file mode 100644 index 4ec3da347..000000000 --- a/engine/knows_move.asm +++ /dev/null @@ -1,25 +0,0 @@ -KnowsMove: ; f9ea - ld a, MON_MOVES - call GetPartyParamLocation - ld a, [wPutativeTMHMMove] - ld b, a - ld c, NUM_MOVES -.loop - ld a, [hli] - cp b - jr z, .knows_move - dec c - jr nz, .loop - and a - ret - -.knows_move - ld hl, .Text_knows - call PrintText - scf - ret - -.Text_knows: ; 0xfa06 - ; knows @ . - text_jump UnknownText_0x1c5ea8 - db "@" diff --git a/engine/link_2.asm b/engine/link_2.asm new file mode 100644 index 000000000..72e5262b3 --- /dev/null +++ b/engine/link_2.asm @@ -0,0 +1,91 @@ +LinkMonStatsScreen: ; 4d319 + ld a, [wMenuCursorY] + dec a + ld [CurPartyMon], a + call LowVolume + predef StatsScreenInit + ld a, [CurPartyMon] + inc a + ld [wMenuCursorY], a + call ClearScreen + call ClearBGPalettes + call MaxVolume + farcall LoadTradeScreenBorder + farcall Link_WaitBGMap + farcall InitTradeSpeciesList + farcall SetTradeRoomBGPals + call WaitBGMap2 + ret + +Link_WaitBGMap: ; 4d354 + call WaitBGMap + call WaitBGMap2 + ret + +LinkTextbox2: ; 4d35b + ld h, d + ld l, e + push bc + push hl + call .PlaceBorder + pop hl + pop bc + ld de, AttrMap - TileMap + add hl, de + inc b + inc b + inc c + inc c + ld a, $7 +.row + push bc + push hl +.col + ld [hli], a + dec c + jr nz, .col + pop hl + ld de, SCREEN_WIDTH + add hl, de + pop bc + dec b + jr nz, .row + ret + +.PlaceBorder: ; 4d37e + push hl + ld a, $76 + ld [hli], a + inc a + call .PlaceRow + inc a + ld [hl], a + pop hl + ld de, SCREEN_WIDTH + add hl, de +.loop + push hl + ld a, "┌" + ld [hli], a + ld a, " " + call .PlaceRow + ld [hl], "─" + pop hl + ld de, SCREEN_WIDTH + add hl, de + dec b + jr nz, .loop + ld a, "┐" + ld [hli], a + ld a, "│" + call .PlaceRow + ld [hl], "└" + ret + +.PlaceRow: ; 4d3ab + ld d, c +.row_loop + ld [hli], a + dec d + jr nz, .row_loop + ret diff --git a/engine/money.asm b/engine/money.asm index 874821814..60de97568 100755 --- a/engine/money.asm +++ b/engine/money.asm @@ -24,7 +24,7 @@ GiveMoney:: ; 15fd7 ; 15ff7 MaxMoney: ; 15ff7 - dt 999999 + dt MAX_MONEY ; 15ffa @@ -192,7 +192,7 @@ GiveCoins:: ; 1606f ; 1608d .maxcoins ; 1608d - bigdw 9999 + bigdw MAX_COINS ; 1608f diff --git a/engine/new_pokedex_entry.asm b/engine/new_pokedex_entry.asm deleted file mode 100644 index acf9fca7b..000000000 --- a/engine/new_pokedex_entry.asm +++ /dev/null @@ -1,52 +0,0 @@ -NewPokedexEntry: ; fb877 - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a - call LowVolume - call ClearBGPalettes - call ClearTileMap - call UpdateSprites - call ClearSprites - ld a, [wPokedexStatus] - push af - ld a, [hSCX] - add $5 - ld [hSCX], a - xor a - ld [wPokedexStatus], a - farcall _NewPokedexEntry - call WaitPressAorB_BlinkCursor - ld a, $1 - ld [wPokedexStatus], a - farcall DisplayDexEntry - call WaitPressAorB_BlinkCursor - pop af - ld [wPokedexStatus], a - call MaxVolume - call RotateThreePalettesRight - ld a, [hSCX] - add -5 ; 251 ; NUM_POKEMON - ld [hSCX], a - call .ReturnFromDexRegistration - pop af - ld [hMapAnims], a - ret -; fb8c8 - -.ReturnFromDexRegistration: ; fb8c8 - call ClearTileMap - call LoadFontsExtra - call LoadStandardFont - farcall Pokedex_PlaceFrontpicTopLeftCorner - call WaitBGMap2 - farcall GetEnemyMonDVs - ld a, [hli] - ld [TempMonDVs], a - ld a, [hl] - ld [TempMonDVs + 1], a - ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS - call GetSGBLayout - call SetPalettes - ret -; fb8f1 diff --git a/engine/pack_f.asm b/engine/pack_f.asm deleted file mode 100644 index f71e43db8..000000000 --- a/engine/pack_f.asm +++ /dev/null @@ -1,20 +0,0 @@ -DrawKrisPackGFX: ; 48e81 - ld hl, PackFGFXPointers - add hl, de - add hl, de - ld a, [hli] - ld e, a - ld d, [hl] - ld hl, VTiles2 tile $50 - lb bc, BANK(PackFGFX), 15 - call Request2bpp - ret - -PackFGFXPointers: ; 48e93 - dw PackFGFX + (15 tiles) * 1 - dw PackFGFX + (15 tiles) * 3 - dw PackFGFX + (15 tiles) * 0 - dw PackFGFX + (15 tiles) * 2 - -PackFGFX: ; 48e9b -INCBIN "gfx/pack/pack_f.2bpp" diff --git a/engine/place_graphics.asm b/engine/place_graphics.asm deleted file mode 100644 index d72364776..000000000 --- a/engine/place_graphics.asm +++ /dev/null @@ -1,56 +0,0 @@ -PlaceGraphic: ; 2ef6e -; Fill wBoxAlignment-aligned box width b height c -; with iterating tile starting from hGraphicStartTile at hl. -; Predef $13 - - ld de, SCREEN_WIDTH - - ld a, [wBoxAlignment] - and a - jr nz, .right - - ld a, [hGraphicStartTile] -.x1 - push bc - push hl - -.y1 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .y1 - - pop hl - inc hl - pop bc - dec b - jr nz, .x1 - ret - -.right -; Right-aligned. - push bc - ld b, 0 - dec c - add hl, bc - pop bc - - ld a, [hGraphicStartTile] -.x2 - push bc - push hl - -.y2 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .y2 - - pop hl - dec hl - pop bc - dec b - jr nz, .x2 - ret diff --git a/engine/play_slow_cry.asm b/engine/play_slow_cry.asm deleted file mode 100644 index 3cc347a55..000000000 --- a/engine/play_slow_cry.asm +++ /dev/null @@ -1,31 +0,0 @@ -PlaySlowCry: ; fb841 - ld a, [ScriptVar] - call LoadCryHeader - jr c, .done - - ld hl, CryPitch - ld a, [hli] - ld h, [hl] - ld l, a - ld bc, -$140 - add hl, bc - ld a, l - ld [CryPitch], a - ld a, h - ld [CryPitch + 1], a - ld hl, CryLength - ld a, [hli] - ld h, [hl] - ld l, a - ld bc, $60 - add hl, bc - ld a, l - ld [CryLength], a - ld a, h - ld [CryLength + 1], a - farcall _PlayCryHeader - call WaitSFX - -.done - ret -; fb877 diff --git a/engine/player_gfx_2.asm b/engine/player_gfx_2.asm deleted file mode 100644 index d6e7791a3..000000000 --- a/engine/player_gfx_2.asm +++ /dev/null @@ -1,5 +0,0 @@ -ChrisBackpic: ; 2ba1a -INCBIN "gfx/player/chris_back.2bpp.lz" - -DudeBackpic: ; 2bbaa -INCBIN "gfx/battle/dude.2bpp.lz" diff --git a/engine/pokeball_wobble.asm b/engine/pokeball_wobble.asm deleted file mode 100755 index 7fb4d3e38..000000000 --- a/engine/pokeball_wobble.asm +++ /dev/null @@ -1,88 +0,0 @@ -GetPokeBallWobble: ; f971 (3:7971) -; Returns whether a Poke Ball will wobble in the catch animation. -; Whether a Pokemon is caught is determined beforehand. - - push de - - ld a, [rSVBK] - ld d, a - push de - - ld a, 1 ; BANK(Buffer2) - ld [rSVBK], a - - ld a, [Buffer2] - inc a - ld [Buffer2], a - -; Wobble up to 3 times. - cp 3 + 1 - jr z, .finished - - ld a, [wWildMon] - and a - ld c, 0 ; next - jr nz, .done - - ld hl, .WobbleProbabilities - ld a, [Buffer1] - ld b, a -.loop - ld a, [hli] - cp b - jr nc, .checkwobble - inc hl - jr .loop - -.checkwobble - ld b, [hl] - call Random - cp b - ld c, 0 ; next - jr c, .done - ld c, 2 ; escaped - jr .done - -.finished - ld a, [wWildMon] - and a - ld c, 1 ; caught - jr nz, .done - ld c, 2 ; escaped - -.done - pop de - ld e, a - ld a, d - ld [rSVBK], a - ld a, e - pop de - ret - -.WobbleProbabilities: ; f9ba -; catch rate, chance of wobbling / 255 -; nLeft/255 = (nRight/255) ** 4 - db 1, 63 - db 2, 75 - db 3, 84 - db 4, 90 - db 5, 95 - db 7, 103 - db 10, 113 - db 15, 126 - db 20, 134 - db 30, 149 - db 40, 160 - db 50, 169 - db 60, 177 - db 80, 191 - db 100, 201 - db 120, 211 - db 140, 220 - db 160, 227 - db 180, 234 - db 200, 240 - db 220, 246 - db 240, 251 - db 254, 253 - db 255, 255 diff --git a/engine/pokegear_2.asm b/engine/pokegear_2.asm deleted file mode 100644 index a5cceecfd..000000000 --- a/engine/pokegear_2.asm +++ /dev/null @@ -1,25 +0,0 @@ -TownMap_ConvertLineBreakCharacters: ; 1de2c5 - ld hl, StringBuffer1 -.loop - ld a, [hl] - cp "@" - jr z, .end - cp "%" - jr z, .line_break - cp "¯" - jr z, .line_break - inc hl - jr .loop - -.line_break - ld [hl], "" - -.end - ld de, StringBuffer1 - hlcoord 9, 0 - call PlaceString - ret - - -PokegearGFX: ; 1de2e4 -INCBIN "gfx/pokegear/pokegear.2bpp.lz" diff --git a/engine/pokerus_tick.asm b/engine/pokerus_tick.asm deleted file mode 100644 index 3c97fdc5e..000000000 --- a/engine/pokerus_tick.asm +++ /dev/null @@ -1,26 +0,0 @@ -ApplyPokerusTick: ; 13988 -; decreases all pokemon's pokerus counter by b. if the lower nybble reaches zero, the pokerus is cured. - ld hl, PartyMon1PokerusStatus ; PartyMon1 + MON_PKRS - ld a, [PartyCount] - and a - ret z ; make sure it's not wasting time on an empty party - ld c, a -.loop - ld a, [hl] - and $f ; lower nybble is the number of days remaining - jr z, .next ; if already 0, skip - sub b ; subtract the number of days - jr nc, .ok ; max(result, 0) - xor a -.ok - ld d, a ; back up this value because we need to preserve the strain (upper nybble) - ld a, [hl] - and $f0 - add d - ld [hl], a ; this prevents a cured pokemon from recontracting pokerus -.next - ld de, PARTYMON_STRUCT_LENGTH - add hl, de - dec c - jr nz, .loop - ret diff --git a/engine/printhoursmins.asm b/engine/printhoursmins.asm deleted file mode 100644 index 711ff89b6..000000000 --- a/engine/printhoursmins.asm +++ /dev/null @@ -1,64 +0,0 @@ -Function1dd6a9: ; 1dd6a9 -; XXX - ld a, b - ld b, c - ld c, a - push bc - push de - ld hl, sp+$2 - ld d, h - ld e, l - pop hl - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - pop bc - ret - -PrintHoursMins ; 1dd6bb (77:56bb) -; Hours in b, minutes in c - ld a, b - cp 12 - push af - jr c, .AM - jr z, .PM - sub 12 - jr .PM -.AM: - or a - jr nz, .PM - ld a, 12 -.PM: - ld b, a -; Crazy stuff happening with the stack - push bc - ld hl, sp+$1 - push de - push hl - pop de - pop hl - ld [hl], " " - lb bc, 1, 2 - call PrintNum - ld [hl], ":" - inc hl - ld d, h - ld e, l - ld hl, sp+$0 - push de - push hl - pop de - pop hl - lb bc, PRINTNUM_LEADINGZEROS | 1, 2 - call PrintNum - pop bc - ld de, String_AM - pop af - jr c, .place_am_pm - ld de, String_PM -.place_am_pm - inc hl - call PlaceString - ret - -String_AM: db "AM@" ; 1dd6fc -String_PM: db "PM@" ; 1dd6ff diff --git a/engine/routines/applypokerustick.asm b/engine/routines/applypokerustick.asm new file mode 100644 index 000000000..3c97fdc5e --- /dev/null +++ b/engine/routines/applypokerustick.asm @@ -0,0 +1,26 @@ +ApplyPokerusTick: ; 13988 +; decreases all pokemon's pokerus counter by b. if the lower nybble reaches zero, the pokerus is cured. + ld hl, PartyMon1PokerusStatus ; PartyMon1 + MON_PKRS + ld a, [PartyCount] + and a + ret z ; make sure it's not wasting time on an empty party + ld c, a +.loop + ld a, [hl] + and $f ; lower nybble is the number of days remaining + jr z, .next ; if already 0, skip + sub b ; subtract the number of days + jr nc, .ok ; max(result, 0) + xor a +.ok + ld d, a ; back up this value because we need to preserve the strain (upper nybble) + ld a, [hl] + and $f0 + add d + ld [hl], a ; this prevents a cured pokemon from recontracting pokerus +.next + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + dec c + jr nz, .loop + ret diff --git a/engine/routines/battlestart_copytilemapatonce.asm b/engine/routines/battlestart_copytilemapatonce.asm new file mode 100644 index 000000000..2952e833b --- /dev/null +++ b/engine/routines/battlestart_copytilemapatonce.asm @@ -0,0 +1,3 @@ +BattleStart_CopyTilemapAtOnce: ; 8cf4f + call CGBOnly_CopyTilemapAtOnce + ret diff --git a/engine/routines/checkbattlescene.asm b/engine/routines/checkbattlescene.asm new file mode 100644 index 000000000..b63f00907 --- /dev/null +++ b/engine/routines/checkbattlescene.asm @@ -0,0 +1,47 @@ +CheckBattleScene: ; 4ea44 +; Return carry if battle scene is turned off. + + ld a, 0 + ld hl, wLinkMode + call GetFarWRAMByte + cp LINK_MOBILE + jr z, .mobile + + ld a, [Options] + bit BATTLE_SCENE, a + jr nz, .off + + and a + ret + +.mobile + ld a, [wcd2f] + and a + jr nz, .from_wram + + ld a, $4 + call GetSRAMBank + ld a, [$a60c] + ld c, a + call CloseSRAM + + ld a, c + bit 0, c + jr z, .off + + and a + ret + +.from_wram + ld a, $5 + ld hl, w5_dc00 + call GetFarWRAMByte + bit 0, a + jr z, .off + + and a + ret + +.off + scf + ret diff --git a/engine/routines/checknickerrors.asm b/engine/routines/checknickerrors.asm new file mode 100644 index 000000000..1cedca420 --- /dev/null +++ b/engine/routines/checknickerrors.asm @@ -0,0 +1,74 @@ +CheckNickErrors:: ; 669f +; error-check monster nick before use +; must be a peace offering to gamesharkers + +; input: de = nick location + + push bc + push de + ld b, PKMN_NAME_LENGTH + +.checkchar +; end of nick? + ld a, [de] + cp "@" ; terminator + jr z, .end + +; check if this char is a text command + ld hl, .textcommands + dec hl +.loop +; next entry + inc hl +; reached end of commands table? + ld a, [hl] + cp -1 + jr z, .done + +; is the current char between this value (inclusive)... + ld a, [de] + cp [hl] + inc hl + jr c, .loop +; ...and this one? + cp [hl] + jr nc, .loop + +; replace it with a "?" + ld a, "?" + ld [de], a + jr .loop + +.done +; next char + inc de +; reached end of nick without finding a terminator? + dec b + jr nz, .checkchar + +; change nick to "?@" + pop de + push de + ld a, "?" + ld [de], a + inc de + ld a, "@" + ld [de], a +.end +; if the nick has any errors at this point it's out of our hands + pop de + pop bc + ret + +.textcommands ; 66cf +; table defining which characters are actually text commands +; format: + ; ≥ < + db "", TX_BOX + 1 + db "", $18 + 1 + db $1d, "%" + 1 + db $35, "" + 1 + db "", "" + 1 + db "", "" + 1 + db "", "┘" + 1 + db -1 ; end diff --git a/engine/routines/checkpokerus.asm b/engine/routines/checkpokerus.asm new file mode 100644 index 000000000..285024754 --- /dev/null +++ b/engine/routines/checkpokerus.asm @@ -0,0 +1,25 @@ +CheckPokerus: ; 4d860 +; Return carry if a monster in your party has Pokerus + +; Get number of monsters to iterate over + ld a, [PartyCount] + and a + jr z, .NoPokerus + ld b, a +; Check each monster in the party for Pokerus + ld hl, PartyMon1PokerusStatus + ld de, PARTYMON_STRUCT_LENGTH +.Check: + ld a, [hl] + and $0f ; only the bottom nybble is used + jr nz, .HasPokerus +; Next PartyMon + add hl, de + dec b + jr nz, .Check +.NoPokerus: + and a + ret +.HasPokerus: + scf + ret diff --git a/engine/routines/checksave.asm b/engine/routines/checksave.asm new file mode 100644 index 000000000..2280f0e53 --- /dev/null +++ b/engine/routines/checksave.asm @@ -0,0 +1,20 @@ +CheckSave:: ; 4cffe + ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) + call GetSRAMBank + ld a, [sCheckValue1] + ld b, a + ld a, [sCheckValue2] + ld c, a + call CloseSRAM + ld a, b + cp SAVE_CHECK_VALUE_1 + jr nz, .ok + ld a, c + cp SAVE_CHECK_VALUE_2 + jr nz, .ok + ld c, $1 + ret + +.ok + ld c, $0 + ret diff --git a/engine/routines/checktime.asm b/engine/routines/checktime.asm new file mode 100644 index 000000000..ada151dbf --- /dev/null +++ b/engine/routines/checktime.asm @@ -0,0 +1,19 @@ +CheckTime:: ; c000 + ld a, [TimeOfDay] + ld hl, .TimeOfDayTable + ld de, 2 + call IsInArray + inc hl + ld c, [hl] + ret c + + xor a + ld c, a + ret + +.TimeOfDayTable: ; c012 + db MORN_F, MORN + db DAY_F, DAY + db NITE_F, NITE + db NITE_F, NITE + db -1 diff --git a/engine/routines/consumehelditem.asm b/engine/routines/consumehelditem.asm new file mode 100644 index 000000000..a6f7766fb --- /dev/null +++ b/engine/routines/consumehelditem.asm @@ -0,0 +1,80 @@ +ConsumeHeldItem: ; 27192 + push hl + push de + push bc + ld a, [hBattleTurn] + and a + ld hl, OTPartyMon1Item + ld de, EnemyMonItem + ld a, [CurOTMon] + jr z, .theirturn + ld hl, PartyMon1Item + ld de, BattleMonItem + ld a, [CurBattleMon] + +.theirturn + push hl + push af + ld a, [de] + ld b, a + farcall GetItemHeldEffect + ld hl, .ConsumableEffects +.loop + ld a, [hli] + cp b + jr z, .ok + inc a + jr nz, .loop + pop af + pop hl + pop bc + pop de + pop hl + ret + +.ok + xor a + ld [de], a + pop af + pop hl + call GetPartyLocation + ld a, [hBattleTurn] + and a + jr nz, .ourturn + ld a, [wBattleMode] + dec a + jr z, .done + +.ourturn + ld [hl], $0 + +.done + pop bc + pop de + pop hl + ret + +.ConsumableEffects: ; 271de +; Consumable items? + db HELD_BERRY + db HELD_2 + db HELD_5 + db HELD_HEAL_POISON + db HELD_HEAL_FREEZE + db HELD_HEAL_BURN + db HELD_HEAL_SLEEP + db HELD_HEAL_PARALYZE + db HELD_HEAL_STATUS + db HELD_30 + db HELD_ATTACK_UP + db HELD_DEFENSE_UP + db HELD_SPEED_UP + db HELD_SP_ATTACK_UP + db HELD_SP_DEFENSE_UP + db HELD_ACCURACY_UP + db HELD_EVASION_UP + db HELD_38 + db HELD_71 + db HELD_ESCAPE + db HELD_CRITICAL_UP + db -1 diff --git a/engine/routines/correcterrorsinplayerparty.asm b/engine/routines/correcterrorsinplayerparty.asm new file mode 100644 index 000000000..2fa98a545 --- /dev/null +++ b/engine/routines/correcterrorsinplayerparty.asm @@ -0,0 +1,229 @@ +CorrectErrorsInPlayerParty: ; unreferenced + ld hl, PartyCount + ld a, [hl] + and a + ret z + + cp PARTY_LENGTH + 1 + jr c, .party_length_okay + ld a, PARTY_LENGTH + ld [hl], a +.party_length_okay + inc hl + + ld b, a + ld c, 0 +.loop1 + ld a, [hl] + and a + jr z, .invalid_species + cp NUM_POKEMON + 1 + jr z, .invalid_species + cp EGG + 1 + jr c, .next_species + +.invalid_species + ld [hl], SMEARGLE + push hl + push bc + ld a, c + ld hl, PartyMon1Species + call GetPartyLocation + ld [hl], SMEARGLE + pop bc + pop hl + +.next_species + inc hl + inc c + dec b + jr nz, .loop1 + ld [hl], $ff + + ld hl, PartyMon1 + ld a, [PartyCount] + ld d, a + ld e, 0 +.loop2 + push de + push hl + ld b, h + ld c, l + ld a, [hl] + and a + jr z, .invalid_species_2 + cp NUM_POKEMON + 1 + jr c, .check_level + +.invalid_species_2 + ld [hl], SMEARGLE + push de + ld d, 0 + ld hl, PartySpecies + add hl, de + pop de + ld a, SMEARGLE + ld [hl], a + +.check_level + ld [CurSpecies], a + call GetBaseData + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + cp MIN_LEVEL + ld a, MIN_LEVEL + jr c, .invalid_level + ld a, [hl] + cp MAX_LEVEL + jr c, .load_level + ld a, MAX_LEVEL +.invalid_level + ld [hl], a +.load_level + ld [CurPartyLevel], a + + ld hl, MON_MAXHP + add hl, bc + ld d, h + ld e, l + ld hl, MON_STAT_EXP - 1 + add hl, bc + ld b, $1 + predef CalcPkmnStats + pop hl + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop de + inc e + dec d + jr nz, .loop2 + + ld de, PartyMonNicknames + ld a, [PartyCount] + ld b, a + ld c, 0 +.loop3 + push bc + call .GetLengthOfStringWith6CharCap + push de + farcall CheckStringForErrors + pop hl + pop bc + jr nc, .valid_nickname + + push bc + push hl + ld hl, PartySpecies + push bc + ld b, 0 + add hl, bc + pop bc + ld a, [hl] + cp EGG + ld hl, .TAMAGO + jr z, .got_nickname + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 +.got_nickname + pop de + ld bc, PKMN_NAME_LENGTH + call CopyBytes + pop bc + +.valid_nickname + inc c + dec b + jr nz, .loop3 + + ld de, PartyMonOT + ld a, [PartyCount] + ld b, a + ld c, 0 +.loop4 + push bc + call .GetLengthOfStringWith6CharCap + push de + farcall CheckStringForErrors + pop hl + jr nc, .valid_ot_name + ld d, h + ld e, l + ld hl, PlayerName + ld bc, NAME_LENGTH + call CopyBytes +.valid_ot_name + pop bc + inc c + dec b + jr nz, .loop4 + + ld hl, PartyMon1Moves + ld a, [PartyCount] + ld b, a +.loop5 + push hl + ld c, NUM_MOVES + ld a, [hl] + and a + jr z, .invalid_move + cp NUM_ATTACKS + 1 + jr c, .moves_loop +.invalid_move + ld [hl], POUND + +.moves_loop + ld a, [hl] + and a + jr z, .fill_invalid_moves + cp NUM_ATTACKS + 1 + jr c, .next_move + +.fill_invalid_moves + xor a + ld [hli], a + dec c + jr nz, .fill_invalid_moves + jr .next_pokemon + +.next_move + inc hl + dec c + jr nz, .moves_loop + +.next_pokemon + pop hl + push bc + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop bc + dec b + jr nz, .loop5 + ret +; 13b6b + +.TAMAGO: ; 13b6b + db "タマゴ@@@" +; 13b71 + +.GetLengthOfStringWith6CharCap: ; 13b71 + push de + ld c, 1 + ld b, NAME_LENGTH_JAPANESE +.search_loop + ld a, [de] + cp "@" + jr z, .done + inc de + inc c + dec b + jr nz, .search_loop + dec c + dec de + ld a, "@" + ld [de], a +.done + pop de + ret +; 13b87 diff --git a/engine/routines/drawkrispackgfx.asm b/engine/routines/drawkrispackgfx.asm new file mode 100644 index 000000000..f71e43db8 --- /dev/null +++ b/engine/routines/drawkrispackgfx.asm @@ -0,0 +1,20 @@ +DrawKrisPackGFX: ; 48e81 + ld hl, PackFGFXPointers + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld hl, VTiles2 tile $50 + lb bc, BANK(PackFGFX), 15 + call Request2bpp + ret + +PackFGFXPointers: ; 48e93 + dw PackFGFX + (15 tiles) * 1 + dw PackFGFX + (15 tiles) * 3 + dw PackFGFX + (15 tiles) * 0 + dw PackFGFX + (15 tiles) * 2 + +PackFGFX: ; 48e9b +INCBIN "gfx/pack/pack_f.2bpp" diff --git a/engine/routines/emptyallsrambanks.asm b/engine/routines/emptyallsrambanks.asm new file mode 100644 index 000000000..aa4b28e0d --- /dev/null +++ b/engine/routines/emptyallsrambanks.asm @@ -0,0 +1,19 @@ +EmptyAllSRAMBanks: ; 4cf1f + ld a, $0 + call .EmptyBank + ld a, $1 + call .EmptyBank + ld a, $2 + call .EmptyBank + ld a, $3 + call .EmptyBank + ret + +.EmptyBank: ; 4cf34 + call GetSRAMBank + ld hl, SRAM_Begin + ld bc, SRAM_End - SRAM_Begin + xor a + call ByteFill + call CloseSRAM + ret diff --git a/engine/routines/flagpredef.asm b/engine/routines/flagpredef.asm new file mode 100644 index 000000000..bd4f37882 --- /dev/null +++ b/engine/routines/flagpredef.asm @@ -0,0 +1,70 @@ +FlagPredef: ; 4d7c1 +; Perform action b on flag c in flag array hl. +; If checking a flag, check flag array d:hl unless d is 0. + +; For longer flag arrays, see FlagAction. + + push hl + push bc + +; Divide by 8 to get the byte we want. + push bc + srl c + srl c + srl c + ld b, 0 + add hl, bc + pop bc + +; Which bit we want from the byte + ld a, c + and 7 + ld c, a + +; Shift left until we can mask the bit + ld a, 1 + jr z, .shifted +.shift + add a + dec c + jr nz, .shift +.shifted + ld c, a + +; What are we doing to this flag? + dec b + jr z, .set ; 1 + dec b + jr z, .check ; 2 + +.reset + ld a, c + cpl + and [hl] + ld [hl], a + jr .done + +.set + ld a, [hl] + or c + ld [hl], a + jr .done + +.check + ld a, d + cp 0 + jr nz, .farcheck + + ld a, [hl] + and c + jr .done + +.farcheck + call GetFarByte + and c + +.done + pop bc + pop hl + ld c, a + ret diff --git a/engine/routines/getbreedmonlevelgrowth.asm b/engine/routines/getbreedmonlevelgrowth.asm new file mode 100644 index 000000000..b029043d6 --- /dev/null +++ b/engine/routines/getbreedmonlevelgrowth.asm @@ -0,0 +1,27 @@ +GetBreedMon1LevelGrowth: ; e698 + ld hl, wBreedMon1Stats + ld de, TempMon + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + callfar CalcLevel + ld a, [wBreedMon1Level] + ld b, a + ld a, d + ld e, a + sub b + ld d, a + ret + +GetBreedMon2LevelGrowth: ; e6b3 + ld hl, wBreedMon2Stats + ld de, TempMon + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + callfar CalcLevel + ld a, [wBreedMon2Level] + ld b, a + ld a, d + ld e, a + sub b + ld d, a + ret diff --git a/engine/routines/getpokeballwobble.asm b/engine/routines/getpokeballwobble.asm new file mode 100755 index 000000000..7fb4d3e38 --- /dev/null +++ b/engine/routines/getpokeballwobble.asm @@ -0,0 +1,88 @@ +GetPokeBallWobble: ; f971 (3:7971) +; Returns whether a Poke Ball will wobble in the catch animation. +; Whether a Pokemon is caught is determined beforehand. + + push de + + ld a, [rSVBK] + ld d, a + push de + + ld a, 1 ; BANK(Buffer2) + ld [rSVBK], a + + ld a, [Buffer2] + inc a + ld [Buffer2], a + +; Wobble up to 3 times. + cp 3 + 1 + jr z, .finished + + ld a, [wWildMon] + and a + ld c, 0 ; next + jr nz, .done + + ld hl, .WobbleProbabilities + ld a, [Buffer1] + ld b, a +.loop + ld a, [hli] + cp b + jr nc, .checkwobble + inc hl + jr .loop + +.checkwobble + ld b, [hl] + call Random + cp b + ld c, 0 ; next + jr c, .done + ld c, 2 ; escaped + jr .done + +.finished + ld a, [wWildMon] + and a + ld c, 1 ; caught + jr nz, .done + ld c, 2 ; escaped + +.done + pop de + ld e, a + ld a, d + ld [rSVBK], a + ld a, e + pop de + ret + +.WobbleProbabilities: ; f9ba +; catch rate, chance of wobbling / 255 +; nLeft/255 = (nRight/255) ** 4 + db 1, 63 + db 2, 75 + db 3, 84 + db 4, 90 + db 5, 95 + db 7, 103 + db 10, 113 + db 15, 126 + db 20, 134 + db 30, 149 + db 40, 160 + db 50, 169 + db 60, 177 + db 80, 191 + db 100, 201 + db 120, 211 + db 140, 220 + db 160, 227 + db 180, 234 + db 200, 240 + db 220, 246 + db 240, 251 + db 254, 253 + db 255, 255 diff --git a/engine/routines/getsquareroot.asm b/engine/routines/getsquareroot.asm new file mode 100644 index 000000000..009d9f4fe --- /dev/null +++ b/engine/routines/getsquareroot.asm @@ -0,0 +1,30 @@ +GetSquareRoot: ; 13b87 +; Return the square root of de in b. + +; Rather than calculating the result, we take the index of the +; first value in a table of squares that isn't lower than de. + + ld hl, .Squares + ld b, 0 +.loop +; Make sure we don't go past the end of the table. + inc b + ld a, b + cp $ff + ret z + +; Iterate over the table until b**2 >= de. + ld a, [hli] + sub e + ld a, [hli] + sbc d + + jr c, .loop + ret + +.Squares: ; 13b98 +root set 1 + rept $ff + dw root*root +root set root+1 + endr diff --git a/engine/routines/initlist.asm b/engine/routines/initlist.asm new file mode 100644 index 000000000..e2b7235ab --- /dev/null +++ b/engine/routines/initlist.asm @@ -0,0 +1,54 @@ +InitList: ; 50db9 + ld a, [wInitListType] + + cp INIT_ENEMYOT_LIST + jr nz, .check_party_ot_name + ld hl, OTPartyCount + ld de, OTPartyMonOT + ld a, ENEMY_OT_NAME + jr .done + +.check_party_ot_name + cp INIT_PLAYEROT_LIST + jr nz, .check_mon_name + ld hl, PartyCount + ld de, PartyMonOT + ld a, PARTY_OT_NAME + jr .done + +.check_mon_name + cp INIT_MON_LIST + jr nz, .check_item_name + ld hl, CurMart + ld de, PokemonNames + ld a, PKMN_NAME + jr .done + +.check_item_name + cp INIT_BAG_ITEM_LIST + jr nz, .check_ob_item_name + ld hl, NumItems + ld de, ItemNames + ld a, ITEM_NAME + jr .done + +.check_ob_item_name + ld hl, CurMart + ld de, ItemNames + ld a, ITEM_NAME +.done + ld [wNamedObjectTypeBuffer], a + ld a, l + ld [wListPointer], a + ld a, h + ld [wListPointer + 1], a + ld a, e + ld [wUnusedD102], a + ld a, d + ld [wUnusedD102 + 1], a + ld bc, ItemAttributes + ld a, c + ld [wItemAttributesPtr], a + ld a, b + ld [wItemAttributesPtr + 1], a + ret diff --git a/engine/routines/knowsmove.asm b/engine/routines/knowsmove.asm new file mode 100644 index 000000000..4ec3da347 --- /dev/null +++ b/engine/routines/knowsmove.asm @@ -0,0 +1,25 @@ +KnowsMove: ; f9ea + ld a, MON_MOVES + call GetPartyParamLocation + ld a, [wPutativeTMHMMove] + ld b, a + ld c, NUM_MOVES +.loop + ld a, [hli] + cp b + jr z, .knows_move + dec c + jr nz, .loop + and a + ret + +.knows_move + ld hl, .Text_knows + call PrintText + scf + ret + +.Text_knows: ; 0xfa06 + ; knows @ . + text_jump UnknownText_0x1c5ea8 + db "@" diff --git a/engine/routines/kurt_selectquantity_interpretjoypad.asm b/engine/routines/kurt_selectquantity_interpretjoypad.asm new file mode 100644 index 000000000..12a43e325 --- /dev/null +++ b/engine/routines/kurt_selectquantity_interpretjoypad.asm @@ -0,0 +1,4 @@ +Kurt_SelectQuantity_InterpretJoypad: ; 27a28 + call BuySellToss_InterpretJoypad + ld b, a + ret diff --git a/engine/routines/leveluphappinessmod.asm b/engine/routines/leveluphappinessmod.asm new file mode 100644 index 000000000..c253e8872 --- /dev/null +++ b/engine/routines/leveluphappinessmod.asm @@ -0,0 +1,20 @@ +LevelUpHappinessMod: ; 2709e + ld a, [CurPartyMon] + ld hl, PartyMon1CaughtLocation + call GetPartyLocation + ld a, [hl] + and $7f + ld d, a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + cp d + ld c, HAPPINESS_GAINLEVEL + jr nz, .ok + ld c, HAPPINESS_GAINLEVELATHOME + +.ok + callfar ChangeHappiness + ret diff --git a/engine/routines/loadmappart.asm b/engine/routines/loadmappart.asm new file mode 100644 index 000000000..2184ebf7e --- /dev/null +++ b/engine/routines/loadmappart.asm @@ -0,0 +1,36 @@ +_LoadMapPart:: ; 4d15b + ld hl, wMisc + ld a, [wMetatileStandingY] + and a + jr z, .top_row + ld bc, WMISC_WIDTH * 2 + add hl, bc + +.top_row + ld a, [wMetatileStandingX] + and a + jr z, .left_column + inc hl + inc hl + +.left_column + decoord 0, 0 + ld b, SCREEN_HEIGHT +.loop + ld c, SCREEN_WIDTH +.loop2 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop2 + ld a, l + add 4 + ld l, a + jr nc, .carry + inc h + +.carry + dec b + jr nz, .loop + ret diff --git a/engine/routines/loadpushoam.asm b/engine/routines/loadpushoam.asm new file mode 100644 index 000000000..6fcccbcae --- /dev/null +++ b/engine/routines/loadpushoam.asm @@ -0,0 +1,21 @@ +LoadPushOAM:: ; 4031 + ld c, hPushOAM - $ff00 + ld b, .PushOAMEnd - .PushOAM + ld hl, .PushOAM +.loop + ld a, [hli] + ld [$ff00+c], a + inc c + dec b + jr nz, .loop + ret + +.PushOAM: ; 403f + ld a, Sprites / $100 + ld [rDMA], a + ld a, (SpritesEnd - Sprites) / 4 ; 40 +.pushoam_loop + dec a + jr nz, .pushoam_loop + ret +.PushOAMEnd diff --git a/engine/routines/newpokedexentry.asm b/engine/routines/newpokedexentry.asm new file mode 100644 index 000000000..acf9fca7b --- /dev/null +++ b/engine/routines/newpokedexentry.asm @@ -0,0 +1,52 @@ +NewPokedexEntry: ; fb877 + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + call LowVolume + call ClearBGPalettes + call ClearTileMap + call UpdateSprites + call ClearSprites + ld a, [wPokedexStatus] + push af + ld a, [hSCX] + add $5 + ld [hSCX], a + xor a + ld [wPokedexStatus], a + farcall _NewPokedexEntry + call WaitPressAorB_BlinkCursor + ld a, $1 + ld [wPokedexStatus], a + farcall DisplayDexEntry + call WaitPressAorB_BlinkCursor + pop af + ld [wPokedexStatus], a + call MaxVolume + call RotateThreePalettesRight + ld a, [hSCX] + add -5 ; 251 ; NUM_POKEMON + ld [hSCX], a + call .ReturnFromDexRegistration + pop af + ld [hMapAnims], a + ret +; fb8c8 + +.ReturnFromDexRegistration: ; fb8c8 + call ClearTileMap + call LoadFontsExtra + call LoadStandardFont + farcall Pokedex_PlaceFrontpicTopLeftCorner + call WaitBGMap2 + farcall GetEnemyMonDVs + ld a, [hli] + ld [TempMonDVs], a + ld a, [hl] + ld [TempMonDVs + 1], a + ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + call SetPalettes + ret +; fb8f1 diff --git a/engine/routines/phonering_copytilemapatonce.asm b/engine/routines/phonering_copytilemapatonce.asm new file mode 100644 index 000000000..2ffa688a9 --- /dev/null +++ b/engine/routines/phonering_copytilemapatonce.asm @@ -0,0 +1,80 @@ +PhoneRing_CopyTilemapAtOnce: ; 4d188 + ld a, [hCGB] + and a + jp z, WaitBGMap + ld a, [wSpriteUpdatesEnabled] + cp $0 + jp z, WaitBGMap + +; What follows is a modified version of CopyTilemapAtOnce. + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a +.wait + ld a, [rLY] + cp $8f + jr c, .wait + + di + ld a, BANK(VBGMap2) + ld [rVBK], a + hlcoord 0, 0, AttrMap + call .CopyTilemapAtOnce + ld a, BANK(VBGMap0) + ld [rVBK], a + hlcoord 0, 0 + call .CopyTilemapAtOnce +.wait2 + ld a, [rLY] + cp $8f + jr c, .wait2 + ei + + pop af + ld [hMapAnims], a + pop af + ld [hBGMapMode], a + ret + +.CopyTilemapAtOnce: ; 4d1cb + ld [hSPBuffer], sp + ld sp, hl + ld a, [hBGMapAddress + 1] + ld h, a + ld l, 0 + ld a, SCREEN_HEIGHT + ld [hTilesPerCycle], a + ld b, 1 << 1 ; not in v/hblank + ld c, rSTAT % $100 + +.loop +rept SCREEN_WIDTH / 2 + pop de +.loop\@ + ld a, [$ff00+c] + and b + jr nz, .loop\@ + ld [hl], e + inc l + ld [hl], d + inc l +endr + + ld de, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, de + ld a, [hTilesPerCycle] + dec a + ld [hTilesPerCycle], a + jr nz, .loop + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret diff --git a/engine/routines/placegraphic.asm b/engine/routines/placegraphic.asm new file mode 100644 index 000000000..d72364776 --- /dev/null +++ b/engine/routines/placegraphic.asm @@ -0,0 +1,56 @@ +PlaceGraphic: ; 2ef6e +; Fill wBoxAlignment-aligned box width b height c +; with iterating tile starting from hGraphicStartTile at hl. +; Predef $13 + + ld de, SCREEN_WIDTH + + ld a, [wBoxAlignment] + and a + jr nz, .right + + ld a, [hGraphicStartTile] +.x1 + push bc + push hl + +.y1 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y1 + + pop hl + inc hl + pop bc + dec b + jr nz, .x1 + ret + +.right +; Right-aligned. + push bc + ld b, 0 + dec c + add hl, bc + pop bc + + ld a, [hGraphicStartTile] +.x2 + push bc + push hl + +.y2 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y2 + + pop hl + dec hl + pop bc + dec b + jr nz, .x2 + ret diff --git a/engine/routines/placewaitingtext.asm b/engine/routines/placewaitingtext.asm new file mode 100644 index 000000000..37fc2a056 --- /dev/null +++ b/engine/routines/placewaitingtext.asm @@ -0,0 +1,24 @@ +PlaceWaitingText:: ; 4000 + hlcoord 3, 10 + ld b, 1 + ld c, 11 + + ld a, [wBattleMode] + and a + jr z, .notinbattle + + call TextBox + jr .proceed + +.notinbattle + predef Predef_LinkTextbox + +.proceed + hlcoord 4, 11 + ld de, .Waiting + call PlaceString + ld c, 50 + jp DelayFrames + +.Waiting: ; 4025 + db "Waiting...!@" diff --git a/engine/routines/playslowcry.asm b/engine/routines/playslowcry.asm new file mode 100644 index 000000000..3cc347a55 --- /dev/null +++ b/engine/routines/playslowcry.asm @@ -0,0 +1,31 @@ +PlaySlowCry: ; fb841 + ld a, [ScriptVar] + call LoadCryHeader + jr c, .done + + ld hl, CryPitch + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, -$140 + add hl, bc + ld a, l + ld [CryPitch], a + ld a, h + ld [CryPitch + 1], a + ld hl, CryLength + ld a, [hli] + ld h, [hl] + ld l, a + ld bc, $60 + add hl, bc + ld a, l + ld [CryLength], a + ld a, h + ld [CryLength + 1], a + farcall _PlayCryHeader + call WaitSFX + +.done + ret +; fb877 diff --git a/engine/routines/printhoursmins.asm b/engine/routines/printhoursmins.asm new file mode 100644 index 000000000..50117188c --- /dev/null +++ b/engine/routines/printhoursmins.asm @@ -0,0 +1,64 @@ +Function1dd6a9: ; 1dd6a9 +; XXX + ld a, b + ld b, c + ld c, a + push bc + push de + ld hl, sp+$2 + ld d, h + ld e, l + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + pop bc + ret + +PrintHoursMins: ; 1dd6bb (77:56bb) +; Hours in b, minutes in c + ld a, b + cp 12 + push af + jr c, .AM + jr z, .PM + sub 12 + jr .PM +.AM: + or a + jr nz, .PM + ld a, 12 +.PM: + ld b, a +; Crazy stuff happening with the stack + push bc + ld hl, sp+$1 + push de + push hl + pop de + pop hl + ld [hl], " " + lb bc, 1, 2 + call PrintNum + ld [hl], ":" + inc hl + ld d, h + ld e, l + ld hl, sp+$0 + push de + push hl + pop de + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + pop bc + ld de, String_AM + pop af + jr c, .place_am_pm + ld de, String_PM +.place_am_pm + inc hl + call PlaceString + ret + +String_AM: db "AM@" ; 1dd6fc +String_PM: db "PM@" ; 1dd6ff diff --git a/engine/routines/returntobattle_useball.asm b/engine/routines/returntobattle_useball.asm new file mode 100644 index 000000000..e6e33f900 --- /dev/null +++ b/engine/routines/returntobattle_useball.asm @@ -0,0 +1,19 @@ +_ReturnToBattle_UseBall: ; 2715c + call ClearBGPalettes + call ClearTileMap + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jr z, .gettutorialbackpic + farcall GetBattleMonBackpic + jr .continue + +.gettutorialbackpic + farcall GetTrainerBackpic +.continue + farcall GetEnemyMonFrontpic + farcall _LoadBattleFontsHPBar + call GetMemSGBLayout + call CloseWindow + call LoadStandardMenuDataHeader + call WaitBGMap + jp SetPalettes diff --git a/engine/routines/savemenu_copytilemapatonce.asm b/engine/routines/savemenu_copytilemapatonce.asm new file mode 100644 index 000000000..de7cbaa8f --- /dev/null +++ b/engine/routines/savemenu_copytilemapatonce.asm @@ -0,0 +1,77 @@ +SaveMenu_CopyTilemapAtOnce: ; 4cf45 (13:4f45) + ld a, [hCGB] + and a + jp z, WaitBGMap + +; The following is a modified version of CopyTilemapAtOnce. + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a +.WaitLY: + ld a, [rLY] + cp $60 + jr c, .WaitLY + + di + ld a, BANK(VBGMap2) + ld [rVBK], a + hlcoord 0, 0, AttrMap + call .CopyTilemapAtOnce + ld a, BANK(VBGMap0) + ld [rVBK], a + hlcoord 0, 0 + call .CopyTilemapAtOnce +.WaitLY2: + ld a, [rLY] + cp $60 + jr c, .WaitLY2 + ei + + pop af + ld [hMapAnims], a + pop af + ld [hBGMapMode], a + ret + +.CopyTilemapAtOnce: ; 4cf80 (13:4f80) + ld [hSPBuffer], sp ; $ffd9 + ld sp, hl + ld a, [hBGMapAddress + 1] + ld h, a + ld l, 0 + ld a, SCREEN_HEIGHT + ld [hTilesPerCycle], a + ld b, 1 << 1 + ld c, rSTAT % $100 + +.loop +rept SCREEN_WIDTH / 2 + pop de +.loop\@ + ld a, [$ff00+c] + and b + jr nz, .loop\@ + ld [hl], e + inc l + ld [hl], d + inc l +endr + + ld de, BG_MAP_WIDTH - SCREEN_WIDTH + add hl, de + ld a, [hTilesPerCycle] + dec a + ld [hTilesPerCycle], a + jr nz, .loop + + ld a, [hSPBuffer] + ld l, a + ld a, [hSPBuffer + 1] + ld h, a + ld sp, hl + ret diff --git a/engine/routines/sine.asm b/engine/routines/sine.asm new file mode 100755 index 000000000..89a905d2e --- /dev/null +++ b/engine/routines/sine.asm @@ -0,0 +1,50 @@ +_Sine:: ; 84d9 +; A simple sine function. +; Return d * sin(e) in hl. + +; e is a signed 6-bit value. + ld a, e + and %111111 + cp %100000 + jr nc, .negative + + call .ApplySineWave + ld a, h + ret + +.negative + and %011111 + call .ApplySineWave + ld a, h + xor -1 + inc a + ret + +.ApplySineWave: ; 84ef + ld e, a + ld a, d + ld d, 0 + ld hl, .sinewave + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 + +; Factor amplitude +.multiply + srl a + jr nc, .even + add hl, de +.even + sla e + rl d + and a + jr nz, .multiply + ret + +.sinewave ; 850b +; A $20-word table representing a sine wave. +; 90 degrees is index $10 at a base amplitude of $100. + sine_wave $100 diff --git a/engine/routines/switchpartymons.asm b/engine/routines/switchpartymons.asm new file mode 100644 index 000000000..cde9c82b2 --- /dev/null +++ b/engine/routines/switchpartymons.asm @@ -0,0 +1,145 @@ +_SwitchPartyMons: + ld a, [wd0e3] + dec a + ld [Buffer3], a + ld b, a + ld a, [wMenuCursorY] + dec a + ld [Buffer2], a + cp b + jr z, .skip + call .SwapMonAndMail + ld a, [Buffer3] + call .ClearSprite + ld a, [Buffer2] + call .ClearSprite +.skip + ret + +.ClearSprite: ; 50f34 (14:4f34) + push af + hlcoord 0, 1 + ld bc, 2 * SCREEN_WIDTH + call AddNTimes + ld bc, 2 * SCREEN_WIDTH + ld a, " " + call ByteFill + pop af + ld hl, Sprites + ld bc, $10 + call AddNTimes + ld de, $4 + ld c, $4 +.gfx_loop + ld [hl], $a0 + add hl, de + dec c + jr nz, .gfx_loop + ld de, SFX_SWITCH_POKEMON + call WaitPlaySFX + ret + +.SwapMonAndMail: ; 50f62 (14:4f62) + push hl + push de + push bc + ld bc, PartySpecies + ld a, [Buffer2] + ld l, a + ld h, $0 + add hl, bc + ld d, h + ld e, l + ld a, [Buffer3] + ld l, a + ld h, $0 + add hl, bc + ld a, [hl] + push af + ld a, [de] + ld [hl], a + pop af + ld [de], a + ld a, [Buffer2] + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + push hl + ld de, wd002 + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ld a, [Buffer3] + ld hl, PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop de + push hl + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + pop de + ld hl, wd002 + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ld a, [Buffer2] + ld hl, PartyMonOT + call SkipNames + push hl + call .CopyNameTowd002 + ld a, [Buffer3] + ld hl, PartyMonOT + call SkipNames + pop de + push hl + call .CopyName + pop de + ld hl, wd002 + call .CopyName + ld hl, PartyMonNicknames + ld a, [Buffer2] + call SkipNames + push hl + call .CopyNameTowd002 + ld hl, PartyMonNicknames + ld a, [Buffer3] + call SkipNames + pop de + push hl + call .CopyName + pop de + ld hl, wd002 + call .CopyName + ld hl, sPartyMail + ld a, [Buffer2] + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + push hl + ld de, wd002 + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) + call GetSRAMBank + call CopyBytes + ld hl, sPartyMail + ld a, [Buffer3] + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + pop de + push hl + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + pop de + ld hl, wd002 + ld bc, MAIL_STRUCT_LENGTH + call CopyBytes + call CloseSRAM + pop bc + pop de + pop hl + ret + +.CopyNameTowd002: ; 51036 (14:5036) + ld de, wd002 + +.CopyName: ; 51039 (14:5039) + ld bc, NAME_LENGTH + call CopyBytes + ret diff --git a/engine/routines/townmap_convertlinebreakcharacters.asm b/engine/routines/townmap_convertlinebreakcharacters.asm new file mode 100644 index 000000000..f08b436c9 --- /dev/null +++ b/engine/routines/townmap_convertlinebreakcharacters.asm @@ -0,0 +1,21 @@ +TownMap_ConvertLineBreakCharacters: ; 1de2c5 + ld hl, StringBuffer1 +.loop + ld a, [hl] + cp "@" + jr z, .end + cp "%" + jr z, .line_break + cp "¯" + jr z, .line_break + inc hl + jr .loop + +.line_break + ld [hl], "" + +.end + ld de, StringBuffer1 + hlcoord 9, 0 + call PlaceString + ret diff --git a/engine/routines/trademonfrontpic.asm b/engine/routines/trademonfrontpic.asm new file mode 100644 index 000000000..3a38688d7 --- /dev/null +++ b/engine/routines/trademonfrontpic.asm @@ -0,0 +1,38 @@ +GetTrademonFrontpic: ; 4d7fd + ld a, [wOTTrademonSpecies] + ld hl, wOTTrademonDVs + ld de, VTiles2 + push de + push af + predef GetUnownLetter + pop af + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + pop de + predef GetAnimatedFrontpicPredef + ret + +AnimateTrademonFrontpic: ; 4d81e + ld a, [wOTTrademonSpecies] + call IsAPokemon + ret c + farcall ShowOTTrademonStats + ld a, [wOTTrademonSpecies] + ld [CurPartySpecies], a + ld a, [wOTTrademonDVs] + ld [TempMonDVs], a + ld a, [wOTTrademonDVs + 1] + ld [TempMonDVs + 1], a + ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + farcall TradeAnim_ShowGetmonFrontpic + ld a, [wOTTrademonSpecies] + ld [CurPartySpecies], a + hlcoord 7, 2 + ld d, $0 + ld e, ANIM_MON_TRADE + predef AnimateFrontpic + ret diff --git a/engine/routines/updatebattlehuds.asm b/engine/routines/updatebattlehuds.asm new file mode 100644 index 000000000..ec7f662e8 --- /dev/null +++ b/engine/routines/updatebattlehuds.asm @@ -0,0 +1,9 @@ +_UpdateBattleHUDs: + farcall DrawPlayerHUD + ld hl, PlayerHPPal + call SetHPPal + farcall DrawEnemyHUD + ld hl, EnemyHPPal + call SetHPPal + farcall FinishBattleAnim + ret diff --git a/engine/routines/updateitemdescription.asm b/engine/routines/updateitemdescription.asm new file mode 100644 index 000000000..b684dd4d8 --- /dev/null +++ b/engine/routines/updateitemdescription.asm @@ -0,0 +1,13 @@ +UpdateItemDescription: ; 0x244c3 + ld a, [MenuSelection] + ld [CurSpecies], a + hlcoord 0, 12 + ld b, 4 + ld c, SCREEN_WIDTH - 2 + call TextBox + ld a, [MenuSelection] + cp -1 + ret z + decoord 1, 14 + farcall PrintItemDescription + ret diff --git a/engine/sine.asm b/engine/sine.asm deleted file mode 100755 index 89a905d2e..000000000 --- a/engine/sine.asm +++ /dev/null @@ -1,50 +0,0 @@ -_Sine:: ; 84d9 -; A simple sine function. -; Return d * sin(e) in hl. - -; e is a signed 6-bit value. - ld a, e - and %111111 - cp %100000 - jr nc, .negative - - call .ApplySineWave - ld a, h - ret - -.negative - and %011111 - call .ApplySineWave - ld a, h - xor -1 - inc a - ret - -.ApplySineWave: ; 84ef - ld e, a - ld a, d - ld d, 0 - ld hl, .sinewave - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld hl, 0 - -; Factor amplitude -.multiply - srl a - jr nc, .even - add hl, de -.even - sla e - rl d - and a - jr nz, .multiply - ret - -.sinewave ; 850b -; A $20-word table representing a sine wave. -; 90 degrees is index $10 at a base amplitude of $100. - sine_wave $100 diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm index 383573c03..037340413 100755 --- a/engine/slot_machine.asm +++ b/engine/slot_machine.asm @@ -471,10 +471,10 @@ Slots_LoadReelState: ; 929f6 (24:69f6) Slot_CheckCoinCaseFull: ; 92a04 (24:6a04) ld a, d - cp 9999 / $100 + cp MAX_COINS / $100 jr c, .not_full ld a, e - cp 9999 % $100 + cp MAX_COINS % $100 jr c, .not_full scf ret diff --git a/engine/spawn_points.asm b/engine/spawn_points.asm index b8637da17..daebb6159 100644 --- a/engine/spawn_points.asm +++ b/engine/spawn_points.asm @@ -1,4 +1,3 @@ - INCLUDE "data/maps/spawn_points.asm" diff --git a/engine/square_root.asm b/engine/square_root.asm deleted file mode 100644 index 496f66c83..000000000 --- a/engine/square_root.asm +++ /dev/null @@ -1,30 +0,0 @@ -GetSquareRoot: ; 13b87 -; Return the square root of de in b. - -; Rather than calculating the result, we take the index of the -; first value in a table of squares that isn't lower than de. - - ld hl, Squares - ld b, 0 -.loop -; Make sure we don't go past the end of the table. - inc b - ld a, b - cp $ff - ret z - -; Iterate over the table until b**2 >= de. - ld a, [hli] - sub e - ld a, [hli] - sbc d - - jr c, .loop - ret - -Squares: ; 13b98 -root set 1 - rept $ff - dw root*root -root set root+1 - endr diff --git a/engine/switch_party_mons.asm b/engine/switch_party_mons.asm deleted file mode 100644 index cde9c82b2..000000000 --- a/engine/switch_party_mons.asm +++ /dev/null @@ -1,145 +0,0 @@ -_SwitchPartyMons: - ld a, [wd0e3] - dec a - ld [Buffer3], a - ld b, a - ld a, [wMenuCursorY] - dec a - ld [Buffer2], a - cp b - jr z, .skip - call .SwapMonAndMail - ld a, [Buffer3] - call .ClearSprite - ld a, [Buffer2] - call .ClearSprite -.skip - ret - -.ClearSprite: ; 50f34 (14:4f34) - push af - hlcoord 0, 1 - ld bc, 2 * SCREEN_WIDTH - call AddNTimes - ld bc, 2 * SCREEN_WIDTH - ld a, " " - call ByteFill - pop af - ld hl, Sprites - ld bc, $10 - call AddNTimes - ld de, $4 - ld c, $4 -.gfx_loop - ld [hl], $a0 - add hl, de - dec c - jr nz, .gfx_loop - ld de, SFX_SWITCH_POKEMON - call WaitPlaySFX - ret - -.SwapMonAndMail: ; 50f62 (14:4f62) - push hl - push de - push bc - ld bc, PartySpecies - ld a, [Buffer2] - ld l, a - ld h, $0 - add hl, bc - ld d, h - ld e, l - ld a, [Buffer3] - ld l, a - ld h, $0 - add hl, bc - ld a, [hl] - push af - ld a, [de] - ld [hl], a - pop af - ld [de], a - ld a, [Buffer2] - ld hl, PartyMon1Species - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - push hl - ld de, wd002 - ld bc, PARTYMON_STRUCT_LENGTH - call CopyBytes - ld a, [Buffer3] - ld hl, PartyMon1 - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - pop de - push hl - ld bc, PARTYMON_STRUCT_LENGTH - call CopyBytes - pop de - ld hl, wd002 - ld bc, PARTYMON_STRUCT_LENGTH - call CopyBytes - ld a, [Buffer2] - ld hl, PartyMonOT - call SkipNames - push hl - call .CopyNameTowd002 - ld a, [Buffer3] - ld hl, PartyMonOT - call SkipNames - pop de - push hl - call .CopyName - pop de - ld hl, wd002 - call .CopyName - ld hl, PartyMonNicknames - ld a, [Buffer2] - call SkipNames - push hl - call .CopyNameTowd002 - ld hl, PartyMonNicknames - ld a, [Buffer3] - call SkipNames - pop de - push hl - call .CopyName - pop de - ld hl, wd002 - call .CopyName - ld hl, sPartyMail - ld a, [Buffer2] - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - push hl - ld de, wd002 - ld bc, MAIL_STRUCT_LENGTH - ld a, BANK(sPartyMail) - call GetSRAMBank - call CopyBytes - ld hl, sPartyMail - ld a, [Buffer3] - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - pop de - push hl - ld bc, MAIL_STRUCT_LENGTH - call CopyBytes - pop de - ld hl, wd002 - ld bc, MAIL_STRUCT_LENGTH - call CopyBytes - call CloseSRAM - pop bc - pop de - pop hl - ret - -.CopyNameTowd002: ; 51036 (14:5036) - ld de, wd002 - -.CopyName: ; 51039 (14:5039) - ld bc, NAME_LENGTH - call CopyBytes - ret diff --git a/engine/trademon_frontpic.asm b/engine/trademon_frontpic.asm deleted file mode 100644 index 3a38688d7..000000000 --- a/engine/trademon_frontpic.asm +++ /dev/null @@ -1,38 +0,0 @@ -GetTrademonFrontpic: ; 4d7fd - ld a, [wOTTrademonSpecies] - ld hl, wOTTrademonDVs - ld de, VTiles2 - push de - push af - predef GetUnownLetter - pop af - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - pop de - predef GetAnimatedFrontpicPredef - ret - -AnimateTrademonFrontpic: ; 4d81e - ld a, [wOTTrademonSpecies] - call IsAPokemon - ret c - farcall ShowOTTrademonStats - ld a, [wOTTrademonSpecies] - ld [CurPartySpecies], a - ld a, [wOTTrademonDVs] - ld [TempMonDVs], a - ld a, [wOTTrademonDVs + 1] - ld [TempMonDVs + 1], a - ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS - call GetSGBLayout - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbBGPals - farcall TradeAnim_ShowGetmonFrontpic - ld a, [wOTTrademonSpecies] - ld [CurPartySpecies], a - hlcoord 7, 2 - ld d, $0 - ld e, ANIM_MON_TRADE - predef AnimateFrontpic - ret diff --git a/engine/unown_dex.asm b/engine/unown_dex.asm index 6d14f8b3c..dc6db9dc6 100755 --- a/engine/unown_dex.asm +++ b/engine/unown_dex.asm @@ -48,4 +48,5 @@ PrintUnownWord: ; fba2e (3e:7a2e) jr .loop ; fba5a (3e:7a5a) + INCLUDE "data/unown_words.asm" diff --git a/engine/unused_correct_party.asm b/engine/unused_correct_party.asm deleted file mode 100644 index 2fa98a545..000000000 --- a/engine/unused_correct_party.asm +++ /dev/null @@ -1,229 +0,0 @@ -CorrectErrorsInPlayerParty: ; unreferenced - ld hl, PartyCount - ld a, [hl] - and a - ret z - - cp PARTY_LENGTH + 1 - jr c, .party_length_okay - ld a, PARTY_LENGTH - ld [hl], a -.party_length_okay - inc hl - - ld b, a - ld c, 0 -.loop1 - ld a, [hl] - and a - jr z, .invalid_species - cp NUM_POKEMON + 1 - jr z, .invalid_species - cp EGG + 1 - jr c, .next_species - -.invalid_species - ld [hl], SMEARGLE - push hl - push bc - ld a, c - ld hl, PartyMon1Species - call GetPartyLocation - ld [hl], SMEARGLE - pop bc - pop hl - -.next_species - inc hl - inc c - dec b - jr nz, .loop1 - ld [hl], $ff - - ld hl, PartyMon1 - ld a, [PartyCount] - ld d, a - ld e, 0 -.loop2 - push de - push hl - ld b, h - ld c, l - ld a, [hl] - and a - jr z, .invalid_species_2 - cp NUM_POKEMON + 1 - jr c, .check_level - -.invalid_species_2 - ld [hl], SMEARGLE - push de - ld d, 0 - ld hl, PartySpecies - add hl, de - pop de - ld a, SMEARGLE - ld [hl], a - -.check_level - ld [CurSpecies], a - call GetBaseData - ld hl, MON_LEVEL - add hl, bc - ld a, [hl] - cp MIN_LEVEL - ld a, MIN_LEVEL - jr c, .invalid_level - ld a, [hl] - cp MAX_LEVEL - jr c, .load_level - ld a, MAX_LEVEL -.invalid_level - ld [hl], a -.load_level - ld [CurPartyLevel], a - - ld hl, MON_MAXHP - add hl, bc - ld d, h - ld e, l - ld hl, MON_STAT_EXP - 1 - add hl, bc - ld b, $1 - predef CalcPkmnStats - pop hl - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop de - inc e - dec d - jr nz, .loop2 - - ld de, PartyMonNicknames - ld a, [PartyCount] - ld b, a - ld c, 0 -.loop3 - push bc - call .GetLengthOfStringWith6CharCap - push de - farcall CheckStringForErrors - pop hl - pop bc - jr nc, .valid_nickname - - push bc - push hl - ld hl, PartySpecies - push bc - ld b, 0 - add hl, bc - pop bc - ld a, [hl] - cp EGG - ld hl, .TAMAGO - jr z, .got_nickname - ld [wd265], a - call GetPokemonName - ld hl, StringBuffer1 -.got_nickname - pop de - ld bc, PKMN_NAME_LENGTH - call CopyBytes - pop bc - -.valid_nickname - inc c - dec b - jr nz, .loop3 - - ld de, PartyMonOT - ld a, [PartyCount] - ld b, a - ld c, 0 -.loop4 - push bc - call .GetLengthOfStringWith6CharCap - push de - farcall CheckStringForErrors - pop hl - jr nc, .valid_ot_name - ld d, h - ld e, l - ld hl, PlayerName - ld bc, NAME_LENGTH - call CopyBytes -.valid_ot_name - pop bc - inc c - dec b - jr nz, .loop4 - - ld hl, PartyMon1Moves - ld a, [PartyCount] - ld b, a -.loop5 - push hl - ld c, NUM_MOVES - ld a, [hl] - and a - jr z, .invalid_move - cp NUM_ATTACKS + 1 - jr c, .moves_loop -.invalid_move - ld [hl], POUND - -.moves_loop - ld a, [hl] - and a - jr z, .fill_invalid_moves - cp NUM_ATTACKS + 1 - jr c, .next_move - -.fill_invalid_moves - xor a - ld [hli], a - dec c - jr nz, .fill_invalid_moves - jr .next_pokemon - -.next_move - inc hl - dec c - jr nz, .moves_loop - -.next_pokemon - pop hl - push bc - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop bc - dec b - jr nz, .loop5 - ret -; 13b6b - -.TAMAGO: ; 13b6b - db "タマゴ@@@" -; 13b71 - -.GetLengthOfStringWith6CharCap: ; 13b71 - push de - ld c, 1 - ld b, NAME_LENGTH_JAPANESE -.search_loop - ld a, [de] - cp "@" - jr z, .done - inc de - inc c - dec b - jr nz, .search_loop - dec c - dec de - ld a, "@" - ld [de], a -.done - pop de - ret -; 13b87 diff --git a/main.asm b/main.asm index 01f5699b7..e9794516e 100644 --- a/main.asm +++ b/main.asm @@ -3,58 +3,13 @@ INCLUDE "includes.asm" SECTION "bank1", ROMX -PlaceWaitingText:: ; 4000 - hlcoord 3, 10 - ld b, 1 - ld c, 11 - - ld a, [wBattleMode] - and a - jr z, .notinbattle - - call TextBox - jr .proceed - -.notinbattle - predef Predef_LinkTextbox - -.proceed - hlcoord 4, 11 - ld de, .Waiting - call PlaceString - ld c, 50 - jp DelayFrames - -.Waiting: ; 4025 - db "Waiting...!@" - -LoadPushOAM:: ; 4031 - ld c, hPushOAM - $ff00 - ld b, PushOAMEnd - PushOAM - ld hl, PushOAM -.loop - ld a, [hli] - ld [$ff00+c], a - inc c - dec b - jr nz, .loop - ret - -PushOAM: ; 403f - ld a, Sprites / $100 - ld [rDMA], a - ld a, (SpritesEnd - Sprites) / 4 ; 40 -.loop - dec a - jr nz, .loop - ret -PushOAMEnd - +INCLUDE "engine/routines/placewaitingtext.asm" +INCLUDE "engine/routines/loadpushoam.asm" INCLUDE "engine/map_objects.asm" INCLUDE "engine/intro_menu.asm" INCLUDE "engine/init_map.asm" INCLUDE "engine/learn.asm" -INCLUDE "engine/check_nick_errors.asm" +INCLUDE "engine/routines/checknickerrors.asm" INCLUDE "engine/math.asm" INCLUDE "data/items/item_attributes.asm" INCLUDE "engine/npc_movement.asm" @@ -65,14 +20,14 @@ INCLUDE "event/special.asm" SECTION "bank2", ROMX INCLUDE "engine/player_object.asm" -INCLUDE "engine/sine.asm" +INCLUDE "engine/routines/sine.asm" INCLUDE "engine/predef.asm" INCLUDE "engine/color.asm" SECTION "bank3", ROMX -INCLUDE "engine/check_time.asm" +INCLUDE "engine/routines/checktime.asm" INCLUDE "engine/specials.asm" INCLUDE "engine/printnum.asm" INCLUDE "engine/health.asm" @@ -82,10 +37,11 @@ INCLUDE "engine/player_step.asm" INCLUDE "engine/anim_hp_bar.asm" INCLUDE "engine/move_mon.asm" INCLUDE "engine/billspctop.asm" -INCLUDE "engine/get_breedmon_growth.asm" +INCLUDE "engine/routines/getbreedmonlevelgrowth.asm" INCLUDE "event/bug_contest/caught_mon.asm" INCLUDE "engine/item_effects.asm" -INCLUDE "engine/knows_move.asm" +INCLUDE "engine/routines/getpokeballwobble.asm" +INCLUDE "engine/routines/knowsmove.asm" SECTION "bank4", ROMX @@ -106,10 +62,10 @@ INCLUDE "event/bug_contest/contest.asm" INCLUDE "event/misc_scripts_2.asm" INCLUDE "event/std_collision.asm" INCLUDE "event/bug_contest/judging.asm" -INCLUDE "engine/pokerus_tick.asm" +INCLUDE "engine/routines/applypokerustick.asm" INCLUDE "event/bug_contest/contest_2.asm" -INCLUDE "engine/unused_correct_party.asm" -INCLUDE "engine/square_root.asm" +INCLUDE "engine/routines/correcterrorsinplayerparty.asm" +INCLUDE "engine/routines/getsquareroot.asm" SECTION "bank5", ROMX @@ -141,21 +97,7 @@ SECTION "bank9", ROMX INCLUDE "data/text_buffers.asm" INCLUDE "engine/menu.asm" - -UpdateItemDescription: ; 0x244c3 - ld a, [MenuSelection] - ld [CurSpecies], a - hlcoord 0, 12 - ld b, 4 - ld c, SCREEN_WIDTH - 2 - call TextBox - ld a, [MenuSelection] - cp -1 - ret z - decoord 1, 14 - farcall PrintItemDescription - ret - +INCLUDE "engine/routines/updateitemdescription.asm" INCLUDE "engine/pokepic.asm" INCLUDE "engine/map_objects_2.asm" INCLUDE "engine/scrolling_menu.asm" @@ -167,58 +109,13 @@ INCLUDE "engine/buy_sell_toss.asm" INCLUDE "engine/trainer_card.asm" INCLUDE "engine/prof_oaks_pc.asm" INCLUDE "engine/decorations.asm" - -LevelUpHappinessMod: ; 2709e - ld a, [CurPartyMon] - ld hl, PartyMon1CaughtLocation - call GetPartyLocation - ld a, [hl] - and $7f - ld d, a - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - call GetWorldMapLocation - cp d - ld c, HAPPINESS_GAINLEVEL - jr nz, .ok - ld c, HAPPINESS_GAINLEVELATHOME - -.ok - callfar ChangeHappiness - ret - +INCLUDE "engine/routines/leveluphappinessmod.asm" INCLUDE "data/trainers/trainer_dvs.asm" - -_ReturnToBattle_UseBall: ; 2715c - call ClearBGPalettes - call ClearTileMap - ld a, [BattleType] - cp BATTLETYPE_TUTORIAL - jr z, .gettutorialbackpic - farcall GetBattleMonBackpic - jr .continue - -.gettutorialbackpic - farcall GetTrainerBackpic -.continue - farcall GetEnemyMonFrontpic - farcall _LoadBattleFontsHPBar - call GetMemSGBLayout - call CloseWindow - call LoadStandardMenuDataHeader - call WaitBGMap - jp SetPalettes - -INCLUDE "engine/consume_held_item.asm" +INCLUDE "engine/routines/returntobattle_useball.asm" +INCLUDE "engine/routines/consumehelditem.asm" INCLUDE "battle/moves/move_effects_pointers.asm" INCLUDE "battle/moves/move_effects.asm" - -Kurt_SelectQuantity_InterpretJoypad: ; 27a28 - call BuySellToss_InterpretJoypad - ld b, a - ret +INCLUDE "engine/routines/kurt_selectquantity_interpretjoypad.asm" SECTION "bankA", ROMX @@ -226,7 +123,12 @@ SECTION "bankA", ROMX INCLUDE "engine/link.asm" INCLUDE "engine/wildmons.asm" INCLUDE "battle/link_result.asm" -INCLUDE "engine/player_gfx_2.asm" + +ChrisBackpic: ; 2ba1a +INCBIN "gfx/player/chris_back.2bpp.lz" + +DudeBackpic: ; 2bbaa +INCBIN "gfx/battle/dude.2bpp.lz" SECTION "bankB", ROMX @@ -240,7 +142,7 @@ INCLUDE "engine/tmhm2.asm" INCLUDE "battle/moves/move_descriptions.asm" INCLUDE "engine/pokerus.asm" INCLUDE "engine/start_battle.asm" -INCLUDE "engine/place_graphics.asm" +INCLUDE "engine/routines/placegraphic.asm" SECTION "Effect Commands", ROMX @@ -284,7 +186,7 @@ INCLUDE "engine/mail.asm" SECTION "Crystal Unique", ROMX INCLUDE "engine/init_gender.asm" -INCLUDE "engine/pack_f.asm" +INCLUDE "engine/routines/drawkrispackgfx.asm" INCLUDE "event/move_tutor.asm" INCLUDE "engine/crystal_colors.asm" INCLUDE "event/celebi.asm" @@ -300,233 +202,20 @@ SECTION "bank13", ROMX INCLUDE "engine/map_palettes.asm" INCLUDE "tilesets/palette_maps.asm" -Unknown_4ce05: ; unreferenced +; unreferenced +; 0x4ce05 rept 26 db $06 endr ; 0x4ce1f INCLUDE "data/collision_permissions.asm" -INCLUDE "engine/empty_sram.asm" - -SaveMenu_CopyTilemapAtOnce: ; 4cf45 (13:4f45) - ld a, [hCGB] - and a - jp z, WaitBGMap - -; The following is a modified version of CopyTilemapAtOnce. - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a -.WaitLY: - ld a, [rLY] - cp $60 - jr c, .WaitLY - - di - ld a, BANK(VBGMap2) - ld [rVBK], a - hlcoord 0, 0, AttrMap - call .CopyTilemapAtOnce - ld a, BANK(VBGMap0) - ld [rVBK], a - hlcoord 0, 0 - call .CopyTilemapAtOnce -.WaitLY2: - ld a, [rLY] - cp $60 - jr c, .WaitLY2 - ei - - pop af - ld [hMapAnims], a - pop af - ld [hBGMapMode], a - ret - -.CopyTilemapAtOnce: ; 4cf80 (13:4f80) - ld [hSPBuffer], sp ; $ffd9 - ld sp, hl - ld a, [hBGMapAddress + 1] - ld h, a - ld l, 0 - ld a, SCREEN_HEIGHT - ld [hTilesPerCycle], a - ld b, 1 << 1 - ld c, rSTAT % $100 - -.loop -rept SCREEN_WIDTH / 2 - pop de -.loop\@ - ld a, [$ff00+c] - and b - jr nz, .loop\@ - ld [hl], e - inc l - ld [hl], d - inc l -endr - - ld de, BG_MAP_WIDTH - SCREEN_WIDTH - add hl, de - ld a, [hTilesPerCycle] - dec a - ld [hTilesPerCycle], a - jr nz, .loop - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret - -CheckSave:: ; 4cffe - ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) - call GetSRAMBank - ld a, [sCheckValue1] - ld b, a - ld a, [sCheckValue2] - ld c, a - call CloseSRAM - ld a, b - cp SAVE_CHECK_VALUE_1 - jr nz, .ok - ld a, c - cp SAVE_CHECK_VALUE_2 - jr nz, .ok - ld c, $1 - ret - -.ok - ld c, $0 - ret - +INCLUDE "engine/routines/emptyallsrambanks.asm" +INCLUDE "engine/routines/savemenu_copytilemapatonce.asm" +INCLUDE "engine/routines/checksave.asm" INCLUDE "data/maps/map_scenes.asm" - -_LoadMapPart:: ; 4d15b - ld hl, wMisc - ld a, [wMetatileStandingY] - and a - jr z, .top_row - ld bc, WMISC_WIDTH * 2 - add hl, bc - -.top_row - ld a, [wMetatileStandingX] - and a - jr z, .left_column - inc hl - inc hl - -.left_column - decoord 0, 0 - ld b, SCREEN_HEIGHT -.loop - ld c, SCREEN_WIDTH -.loop2 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop2 - ld a, l - add 4 - ld l, a - jr nc, .carry - inc h - -.carry - dec b - jr nz, .loop - ret - -PhoneRing_CopyTilemapAtOnce: ; 4d188 - ld a, [hCGB] - and a - jp z, WaitBGMap - ld a, [wSpriteUpdatesEnabled] - cp $0 - jp z, WaitBGMap - -; What follows is a modified version of CopyTilemapAtOnce. - ld a, [hBGMapMode] - push af - xor a - ld [hBGMapMode], a - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a -.wait - ld a, [rLY] - cp $8f - jr c, .wait - - di - ld a, BANK(VBGMap2) - ld [rVBK], a - hlcoord 0, 0, AttrMap - call .CopyTilemapAtOnce - ld a, BANK(VBGMap0) - ld [rVBK], a - hlcoord 0, 0 - call .CopyTilemapAtOnce -.wait2 - ld a, [rLY] - cp $8f - jr c, .wait2 - ei - - pop af - ld [hMapAnims], a - pop af - ld [hBGMapMode], a - ret - -.CopyTilemapAtOnce: ; 4d1cb - ld [hSPBuffer], sp - ld sp, hl - ld a, [hBGMapAddress + 1] - ld h, a - ld l, 0 - ld a, SCREEN_HEIGHT - ld [hTilesPerCycle], a - ld b, 1 << 1 ; not in v/hblank - ld c, rSTAT % $100 - -.loop -rept SCREEN_WIDTH / 2 - pop de -.loop\@ - ld a, [$ff00+c] - and b - jr nz, .loop\@ - ld [hl], e - inc l - ld [hl], d - inc l -endr - - ld de, BG_MAP_WIDTH - SCREEN_WIDTH - add hl, de - ld a, [hTilesPerCycle] - dec a - ld [hTilesPerCycle], a - jr nz, .loop - - ld a, [hSPBuffer] - ld l, a - ld a, [hSPBuffer + 1] - ld h, a - ld sp, hl - ret +INCLUDE "engine/routines/loadmappart.asm" +INCLUDE "engine/routines/phonering_copytilemapatonce.asm" Shrink1Pic: ; 4d249 INCBIN "gfx/shrink/shrink1.2bpp.lz" @@ -534,129 +223,12 @@ INCBIN "gfx/shrink/shrink1.2bpp.lz" Shrink2Pic: ; 4d2d9 INCBIN "gfx/shrink/shrink2.2bpp.lz" -LinkMonStatsScreen: ; 4d319 - ld a, [wMenuCursorY] - dec a - ld [CurPartyMon], a - call LowVolume - predef StatsScreenInit - ld a, [CurPartyMon] - inc a - ld [wMenuCursorY], a - call ClearScreen - call ClearBGPalettes - call MaxVolume - farcall LoadTradeScreenBorder - farcall Link_WaitBGMap - farcall InitTradeSpeciesList - farcall SetTradeRoomBGPals - call WaitBGMap2 - ret - -Link_WaitBGMap: ; 4d354 - call WaitBGMap - call WaitBGMap2 - ret - -LinkTextbox2: ; 4d35b - ld h, d - ld l, e - push bc - push hl - call .PlaceBorder - pop hl - pop bc - ld de, AttrMap - TileMap - add hl, de - inc b - inc b - inc c - inc c - ld a, $7 -.row - push bc - push hl -.col - ld [hli], a - dec c - jr nz, .col - pop hl - ld de, SCREEN_WIDTH - add hl, de - pop bc - dec b - jr nz, .row - ret - -.PlaceBorder: ; 4d37e - push hl - ld a, $76 - ld [hli], a - inc a - call .PlaceRow - inc a - ld [hl], a - pop hl - ld de, SCREEN_WIDTH - add hl, de -.loop - push hl - ld a, "┌" - ld [hli], a - ld a, " " - call .PlaceRow - ld [hl], "─" - pop hl - ld de, SCREEN_WIDTH - add hl, de - dec b - jr nz, .loop - ld a, "┐" - ld [hli], a - ld a, "│" - call .PlaceRow - ld [hl], "└" - ret - -.PlaceRow: ; 4d3ab - ld d, c -.row_loop - ld [hli], a - dec d - jr nz, .row_loop - ret - +INCLUDE "engine/link_2.asm" INCLUDE "engine/delete_save_change_clock.asm" INCLUDE "tilesets/tileset_headers.asm" -INCLUDE "engine/flag_predef.asm" -INCLUDE "engine/trademon_frontpic.asm" - -CheckPokerus: ; 4d860 -; Return carry if a monster in your party has Pokerus - -; Get number of monsters to iterate over - ld a, [PartyCount] - and a - jr z, .NoPokerus - ld b, a -; Check each monster in the party for Pokerus - ld hl, PartyMon1PokerusStatus - ld de, PARTYMON_STRUCT_LENGTH -.Check: - ld a, [hl] - and $0f ; only the bottom nybble is used - jr nz, .HasPokerus -; Next PartyMon - add hl, de - dec b - jr nz, .Check -.NoPokerus: - and a - ret -.HasPokerus: - scf - ret - +INCLUDE "engine/routines/flagpredef.asm" +INCLUDE "engine/routines/trademonfrontpic.asm" +INCLUDE "engine/routines/checkpokerus.asm" INCLUDE "event/lucky_number.asm" INCLUDE "engine/caught_data.asm" INCLUDE "engine/search2.asm" @@ -667,7 +239,7 @@ INCLUDE "engine/init_hof_credits.asm" INCLUDE "mobile/get_trainer_class.asm" INCLUDE "battle/sliding_intro.asm" INCLUDE "mobile/print_opp_message.asm" -INCLUDE "engine/check_battle_scene.asm" +INCLUDE "engine/routines/checkbattlescene.asm" INCLUDE "engine/gbc_only.asm" INCLUDE "event/poke_seer.asm" @@ -685,9 +257,9 @@ INCLUDE "engine/tempmon.asm" INCLUDE "text/types.asm" INCLUDE "text/unused_gen_1_trainers.asm" INCLUDE "engine/mon_stats.asm" -INCLUDE "engine/init_list.asm" +INCLUDE "engine/routines/initlist.asm" INCLUDE "engine/experience.asm" -INCLUDE "engine/switch_party_mons.asm" +INCLUDE "engine/routines/switchpartymons.asm" INCLUDE "gfx/load_pics.asm" INCLUDE "engine/move_mon_wo_mail.asm" INCLUDE "data/pokemon/base_stats.asm" @@ -751,11 +323,7 @@ INCLUDE "engine/timeofdaypals.asm" INCLUDE "engine/battle_transition.asm" INCLUDE "event/field_moves.asm" INCLUDE "event/magnet_train.asm" - -BattleStart_CopyTilemapAtOnce: ; 8cf4f - call CGBOnly_CopyTilemapAtOnce - ret - +INCLUDE "engine/routines/battlestart_copytilemapatonce.asm" INCLUDE "engine/sprites.asm" INCLUDE "engine/mon_icons.asm" @@ -897,8 +465,8 @@ SECTION "bank3E", ROMX INCLUDE "gfx/font.asm" INCLUDE "engine/time_capsule.asm" INCLUDE "event/name_rater.asm" -INCLUDE "engine/play_slow_cry.asm" -INCLUDE "engine/new_pokedex_entry.asm" +INCLUDE "engine/routines/playslowcry.asm" +INCLUDE "engine/routines/newpokedexentry.asm" INCLUDE "engine/time_capsule_2.asm" INCLUDE "engine/unown_dex.asm" INCLUDE "event/magikarp.asm" @@ -973,15 +541,7 @@ INCLUDE "text/phone/extra2.asm" SECTION "bank5E", ROMX -_UpdateBattleHUDs: - farcall DrawPlayerHUD - ld hl, PlayerHPPal - call SetHPPal - farcall DrawEnemyHUD - ld hl, EnemyHPPal - call SetHPPal - farcall FinishBattleAnim - ret +INCLUDE "engine/routines/updatebattlehuds.asm" SECTION "mobile_5e", ROMX @@ -1036,11 +596,15 @@ INCLUDE "engine/print_party.asm" SECTION "bank77_2", ROMX -INCLUDE "engine/printhoursmins.asm" +INCLUDE "engine/routines/printhoursmins.asm" INCLUDE "engine/diploma.asm" INCLUDE "engine/pokedex_3.asm" INCLUDE "event/catch_tutorial_input.asm" -INCLUDE "engine/pokegear_2.asm" +INCLUDE "engine/routines/townmap_convertlinebreakcharacters.asm" + +PokegearGFX: ; 1de2e4 +INCBIN "gfx/pokegear/pokegear.2bpp.lz" + INCLUDE "engine/european_mail.asm" -- cgit v1.2.3