From 76ea57688e06a9f328bdd93619e532493195964f Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Wed, 13 Dec 2017 00:28:48 -0500 Subject: Add table of contents (might remove if it's too cumbersome to maintain) --- engine/trainer_card.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engine') diff --git a/engine/trainer_card.asm b/engine/trainer_card.asm index fdf17acc9..6ed9f6ea6 100755 --- a/engine/trainer_card.asm +++ b/engine/trainer_card.asm @@ -448,7 +448,7 @@ TrainerCard_Page1_PrintGameTime: ; 25415 (9:5415) ret nz hlcoord 15, 12 ld a, [hl] - xor $7f ^ $2e ; $7F (space) <--> $2E (colon) + xor " " ^ $2e ; alternate between space and small colon ($2e) tiles ld [hl], a ret -- cgit v1.2.3 From e48a401290e794854880f06fc230a369f37e6b9b Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Thu, 14 Dec 2017 00:36:24 -0500 Subject: Reorganize macros --- engine/battle_start.asm | 36 ++++++++++++------------- engine/card_flip.asm | 1 - engine/pokegear.asm | 2 +- engine/prof_oaks_pc.asm | 44 +++++++++++++----------------- engine/radio.asm | 1 - engine/timeofdaypals.asm | 20 ++++++-------- engine/unown_puzzle.asm | 3 ++- engine/unowndex.asm | 69 +----------------------------------------------- 8 files changed, 48 insertions(+), 128 deletions(-) (limited to 'engine') diff --git a/engine/battle_start.asm b/engine/battle_start.asm index 7a16c3b82..9546980c2 100644 --- a/engine/battle_start.asm +++ b/engine/battle_start.asm @@ -363,19 +363,6 @@ StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d) ld [wcf64], a ret -spintable_entry: MACRO - db \1 - dw .wedge\2 - dwcoord \3, \4 -ENDM - -; quadrants - const_def - const UPPER_LEFT - const UPPER_RIGHT - const LOWER_LEFT - const LOWER_RIGHT - StartTrainerBattle_SpinToBlack: ; 8c44f (23:444f) xor a ld [hBGMapMode], a @@ -412,7 +399,19 @@ endr ret ; 8c490 (23:4490) +; quadrants + const_def + const UPPER_LEFT + const UPPER_RIGHT + const LOWER_LEFT + const LOWER_RIGHT + .spintable ; 8c490 +spintable_entry: MACRO + db \1 + dw .wedge\2 + dwcoord \3, \4 +ENDM spintable_entry UPPER_LEFT, 1, 1, 6 spintable_entry UPPER_LEFT, 2, 0, 3 spintable_entry UPPER_LEFT, 3, 1, 0 @@ -797,12 +796,6 @@ StartTrainerBattle_DrawSineWave: ; 8c6f7 (23:46f7) sine_wave $100 ; 8c768 -zoombox: macro -; width, height, start y, start x - db \1, \2 - dwcoord \3, \4 -endm - StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768) callba Function5602 ld de, .boxes @@ -835,6 +828,11 @@ StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768) ; 8c792 (23:4792) .boxes ; 8c792 +zoombox: macro +; width, height, start y, start x + db \1, \2 + dwcoord \3, \4 +endm zoombox 4, 2, 8, 8 zoombox 6, 4, 7, 7 zoombox 8, 6, 6, 6 diff --git a/engine/card_flip.asm b/engine/card_flip.asm index 063d5324f..ccb72c6ac 100755 --- a/engine/card_flip.asm +++ b/engine/card_flip.asm @@ -1415,7 +1415,6 @@ else endc endm - cardflip_cursor 11, 2, .Impossible cardflip_cursor 12, 2, .Impossible cardflip_cursor 13, 2, .PokeGroupPair diff --git a/engine/pokegear.asm b/engine/pokegear.asm index 561ece400..4e38cf917 100755 --- a/engine/pokegear.asm +++ b/engine/pokegear.asm @@ -2340,11 +2340,11 @@ HasVisitedSpawn: ; 91c50 Flypoints: ; 91c5e ; landmark, spawn point - const_def flypoint: MACRO const FLY_\1 db \2, SPAWN_\1 ENDM + const_def ; Johto flypoint NEW_BARK, NEW_BARK_TOWN flypoint CHERRYGROVE, CHERRYGROVE_CITY diff --git a/engine/prof_oaks_pc.asm b/engine/prof_oaks_pc.asm index 05ff2b691..69949940b 100755 --- a/engine/prof_oaks_pc.asm +++ b/engine/prof_oaks_pc.asm @@ -1,4 +1,3 @@ - ProfOaksPC: ; 0x265d3 ld hl, OakPCText1 call MenuTextBox @@ -100,31 +99,26 @@ endr ret OakRatings: ; 0x2667f -oakrating: MACRO - db \1 - dw \2, \3 -endm - ; if you caught at most this many, play this sound, load this text - oakrating 9, SFX_DEX_FANFARE_LESS_THAN_20, OakRating01 - oakrating 19, SFX_DEX_FANFARE_LESS_THAN_20, OakRating02 - oakrating 34, SFX_DEX_FANFARE_20_49, OakRating03 - oakrating 49, SFX_DEX_FANFARE_20_49, OakRating04 - oakrating 64, SFX_DEX_FANFARE_50_79, OakRating05 - oakrating 79, SFX_DEX_FANFARE_50_79, OakRating06 - oakrating 94, SFX_DEX_FANFARE_80_109, OakRating07 - oakrating 109, SFX_DEX_FANFARE_80_109, OakRating08 - oakrating 124, SFX_CAUGHT_MON, OakRating09 - oakrating 139, SFX_CAUGHT_MON, OakRating10 - oakrating 154, SFX_DEX_FANFARE_140_169, OakRating11 - oakrating 169, SFX_DEX_FANFARE_140_169, OakRating12 - oakrating 184, SFX_DEX_FANFARE_170_199, OakRating13 - oakrating 199, SFX_DEX_FANFARE_170_199, OakRating14 - oakrating 214, SFX_DEX_FANFARE_200_229, OakRating15 - oakrating 229, SFX_DEX_FANFARE_200_229, OakRating16 - oakrating 239, SFX_DEX_FANFARE_230_PLUS, OakRating17 - oakrating 248, SFX_DEX_FANFARE_230_PLUS, OakRating18 - oakrating 255, SFX_DEX_FANFARE_230_PLUS, OakRating19 + dbww 9, SFX_DEX_FANFARE_LESS_THAN_20, OakRating01 + dbww 19, SFX_DEX_FANFARE_LESS_THAN_20, OakRating02 + dbww 34, SFX_DEX_FANFARE_20_49, OakRating03 + dbww 49, SFX_DEX_FANFARE_20_49, OakRating04 + dbww 64, SFX_DEX_FANFARE_50_79, OakRating05 + dbww 79, SFX_DEX_FANFARE_50_79, OakRating06 + dbww 94, SFX_DEX_FANFARE_80_109, OakRating07 + dbww 109, SFX_DEX_FANFARE_80_109, OakRating08 + dbww 124, SFX_CAUGHT_MON, OakRating09 + dbww 139, SFX_CAUGHT_MON, OakRating10 + dbww 154, SFX_DEX_FANFARE_140_169, OakRating11 + dbww 169, SFX_DEX_FANFARE_140_169, OakRating12 + dbww 184, SFX_DEX_FANFARE_170_199, OakRating13 + dbww 199, SFX_DEX_FANFARE_170_199, OakRating14 + dbww 214, SFX_DEX_FANFARE_200_229, OakRating15 + dbww 229, SFX_DEX_FANFARE_200_229, OakRating16 + dbww 239, SFX_DEX_FANFARE_230_PLUS, OakRating17 + dbww 248, SFX_DEX_FANFARE_230_PLUS, OakRating18 + dbww 255, SFX_DEX_FANFARE_230_PLUS, OakRating19 OakPCText1: ; 0x266de text_jump _OakPCText1 diff --git a/engine/radio.asm b/engine/radio.asm index feded7616..58e953e55 100644 --- a/engine/radio.asm +++ b/engine/radio.asm @@ -1578,7 +1578,6 @@ BuenasPassword4: .greater_than_11 call Random maskbits NUM_PASSWORD_CATEGORIES - and x cp NUM_PASSWORD_CATEGORIES jr nc, .greater_than_11 ; Store it in the high nybble of e. diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm index 263a83fc1..90ff9141c 100644 --- a/engine/timeofdaypals.asm +++ b/engine/timeofdaypals.asm @@ -196,10 +196,6 @@ endr ret ; 8c0e5 -brightlevel: MACRO - db (\1 << 6) | (\2 << 4) | (\3 << 2) | \4 -ENDM - ReplaceTimeOfDayPals: ; 8c0e5 ld hl, .BrightnessLevels ld a, [wMapTimeOfDay] @@ -230,14 +226,14 @@ ReplaceTimeOfDayPals: ; 8c0e5 ; 8c10f (23:410f) .BrightnessLevels: ; 8c10f - brightlevel 3, 2, 1, 0 - brightlevel 1, 1, 1, 1 - brightlevel 2, 2, 2, 2 - brightlevel 0, 0, 0, 0 - brightlevel 3, 3, 3, 3 - brightlevel 3, 2, 1, 0 - brightlevel 3, 2, 1, 0 - brightlevel 3, 2, 1, 0 + dc 3, 2, 1, 0 + dc 1, 1, 1, 1 + dc 2, 2, 2, 2 + dc 0, 0, 0, 0 + dc 3, 3, 3, 3 + dc 3, 2, 1, 0 + dc 3, 2, 1, 0 + dc 3, 2, 1, 0 ; 8c117 GetTimePalette: ; 8c117 diff --git a/engine/unown_puzzle.asm b/engine/unown_puzzle.asm index a1fed2520..9f20ccb3e 100755 --- a/engine/unown_puzzle.asm +++ b/engine/unown_puzzle.asm @@ -1,7 +1,8 @@ -puzcoord EQUS "* 6 +" PUZZLE_BORDER EQU $ee PUZZLE_VOID EQU $ef +puzcoord EQUS "* 6 +" + UnownPuzzle: ; e1190 ld a, [hInMenu] push af diff --git a/engine/unowndex.asm b/engine/unowndex.asm index 007dd9790..6d14f8b3c 100755 --- a/engine/unowndex.asm +++ b/engine/unowndex.asm @@ -19,7 +19,6 @@ UpdateUnownDex: ; fba18 ret ; fba2e - PrintUnownWord: ; fba2e (3e:7a2e) hlcoord 4, 15 ld bc, 12 @@ -49,70 +48,4 @@ PrintUnownWord: ; fba2e (3e:7a2e) jr .loop ; fba5a (3e:7a5a) -UnownWords: ; fba5a - dw UnownWord1 - dw UnownWord1 - dw UnownWord2 - dw UnownWord3 - dw UnownWord4 - dw UnownWord5 - dw UnownWord6 - dw UnownWord7 - dw UnownWord8 - dw UnownWord9 - dw UnownWord10 - dw UnownWord11 - dw UnownWord12 - dw UnownWord13 - dw UnownWord14 - dw UnownWord15 - dw UnownWord16 - dw UnownWord17 - dw UnownWord18 - dw UnownWord19 - dw UnownWord20 - dw UnownWord21 - dw UnownWord22 - dw UnownWord23 - dw UnownWord24 - dw UnownWord25 - dw UnownWord26 -; fba90 - -unownword: macro -x = 1 - rept STRLEN(\1) - db STRSUB(\1, x, 1) - $40 -x = x + 1 - endr - db -1 -endm - - -UnownWord1: unownword "ANGRY" -UnownWord2: unownword "BEAR" -UnownWord3: unownword "CHASE" -UnownWord4: unownword "DIRECT" -UnownWord5: unownword "ENGAGE" -UnownWord6: unownword "FIND" -UnownWord7: unownword "GIVE" -UnownWord8: unownword "HELP" -UnownWord9: unownword "INCREASE" -UnownWord10: unownword "JOIN" -UnownWord11: unownword "KEEP" -UnownWord12: unownword "LAUGH" -UnownWord13: unownword "MAKE" -UnownWord14: unownword "NUZZLE" -UnownWord15: unownword "OBSERVE" -UnownWord16: unownword "PERFORM" -UnownWord17: unownword "QUICKEN" -UnownWord18: unownword "REASSURE" -UnownWord19: unownword "SEARCH" -UnownWord20: unownword "TELL" -UnownWord21: unownword "UNDO" -UnownWord22: unownword "VANISH" -UnownWord23: unownword "WANT" -UnownWord24: unownword "XXXXX" -UnownWord25: unownword "YIELD" -UnownWord26: unownword "ZOOM" -; fbb32 +INCLUDE "data/unown_words.asm" -- cgit v1.2.3 From 6ab1d028bbb94ba35c16d715341444453e895716 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Thu, 14 Dec 2017 23:00:54 -0500 Subject: Split items/ and trainers/ into their data/ and engine/ components Move some data into a pokemon/ subdirectory --- engine/item_effects.asm | 3313 ++++++++++++++++++++++++++++++++++++ engine/landmarks.asm | 2 +- engine/mon_icons.asm | 2 +- engine/overworld.asm | 2 +- engine/pokeball_wobble.asm | 88 + engine/pokedex.asm | 4 +- engine/read_trainer_attributes.asm | 64 + engine/read_trainer_party.asm | 398 +++++ engine/spawn_points.asm | 2 +- 9 files changed, 3869 insertions(+), 6 deletions(-) create mode 100644 engine/item_effects.asm create mode 100755 engine/pokeball_wobble.asm create mode 100644 engine/read_trainer_attributes.asm create mode 100755 engine/read_trainer_party.asm (limited to 'engine') diff --git a/engine/item_effects.asm b/engine/item_effects.asm new file mode 100644 index 000000000..b38b13874 --- /dev/null +++ b/engine/item_effects.asm @@ -0,0 +1,3313 @@ +_DoItemEffect:: ; e722 + ld a, [CurItem] + ld [wd265], a + call GetItemName + call CopyName1 + ld a, 1 + ld [wItemEffectSucceeded], a + ld a, [CurItem] + dec a + ld hl, ItemEffects + rst JumpTable + ret +; e73c + + +ItemEffects: ; e73c + dw MasterBall + dw UltraBall + dw Brightpowder + dw GreatBall + dw PokeBall + dw TownMap + dw Bicycle + dw MoonStone + dw Antidote + dw BurnHeal + dw IceHeal + dw Awakening + dw ParlyzHeal + dw FullRestore + dw MaxPotion + dw HyperPotion + dw SuperPotion + dw Potion + dw EscapeRope + dw Repel + dw MaxElixer + dw FireStone + dw Thunderstone + dw WaterStone + dw Item19 + dw HPUp + dw Protein + dw Iron + dw Carbos + dw LuckyPunch + dw Calcium + dw RareCandy + dw XAccuracy + dw LeafStone + dw MetalPowder + dw Nugget + dw PokeDoll + dw FullHeal + dw Revive + dw MaxRevive + dw GuardSpec + dw SuperRepel + dw MaxRepel + dw DireHit + dw Item2D + dw FreshWater + dw SodaPop + dw Lemonade + dw XAttack + dw Item32 + dw XDefend + dw XSpeed + dw XSpecial + dw CoinCase + dw Itemfinder + dw PokeFlute + dw ExpShare + dw OldRod + dw GoodRod + dw SilverLeaf + dw SuperRod + dw PPUp + dw Ether + dw MaxEther + dw Elixer + dw RedScale + dw Secretpotion + dw SSTicket + dw MysteryEgg + dw ClearBell + dw SilverWing + dw MoomooMilk + dw QuickClaw + dw Psncureberry + dw GoldLeaf + dw SoftSand + dw SharpBeak + dw Przcureberry + dw BurntBerry + dw IceBerry + dw PoisonBarb + dw KingsRock + dw BitterBerry + dw MintBerry + dw RedApricorn + dw Tinymushroom + dw BigMushroom + dw Silverpowder + dw BluApricorn + dw Item5A + dw AmuletCoin + dw YlwApricorn + dw GrnApricorn + dw CleanseTag + dw MysticWater + dw Twistedspoon + dw WhtApricorn + dw Blackbelt + dw BlkApricorn + dw Item64 + dw PnkApricorn + dw Blackglasses + dw Slowpoketail + dw PinkBow + dw Stick + dw SmokeBall + dw Nevermeltice + dw Magnet + dw Miracleberry + dw Pearl + dw BigPearl + dw Everstone + dw SpellTag + dw Ragecandybar + dw GsBall + dw BlueCard + dw MiracleSeed + dw ThickClub + dw FocusBand + dw Item78 + dw Energypowder + dw EnergyRoot + dw HealPowder + dw RevivalHerb + dw HardStone + dw LuckyEgg + dw CardKey + dw MachinePart + dw EggTicket + dw LostItem + dw Stardust + dw StarPiece + dw BasementKey + dw Pass + dw Item87 + dw Item88 + dw Item89 + dw Charcoal + dw BerryJuice + dw ScopeLens + dw Item8D + dw Item8E + dw MetalCoat + dw DragonFang + dw Item91 + dw Leftovers + dw Item93 + dw Item94 + dw Item95 + dw Mysteryberry + dw DragonScale + dw BerserkGene + dw Item99 + dw Item9A + dw Item9B + dw SacredAsh + dw HeavyBall + dw FlowerMail + dw LevelBall + dw LureBall + dw FastBall + dw ItemA2 + dw LightBall + dw FriendBall + dw MoonBall + dw LoveBall + dw NormalBox + dw GorgeousBox + dw SunStone + dw PolkadotBow + dw ItemAB + dw UpGrade + dw Berry + dw GoldBerry + dw Squirtbottle + dw ItemB0 + dw ParkBall + dw RainbowWing + dw ItemB3 +; e8a2 + + +MasterBall: +UltraBall: +GreatBall: +PokeBall: +HeavyBall: +LevelBall: +LureBall: +FastBall: +FriendBall: +MoonBall: +LoveBall: +ParkBall: ; e8a2 + ld a, [wBattleMode] + dec a + jp nz, UseBallInTrainerBattle + + ld a, [PartyCount] + cp PARTY_LENGTH + jr nz, .room_in_party + + ld a, BANK(sBoxCount) + call GetSRAMBank + ld a, [sBoxCount] + cp MONS_PER_BOX + call CloseSRAM + jp z, Ball_BoxIsFullMessage + +.room_in_party + xor a + ld [wWildMon], a + ld a, [CurItem] + cp PARK_BALL + call nz, ReturnToBattle_UseBall + + ld hl, Options + res NO_TEXT_SCROLL, [hl] + ld hl, UsedItemText + call PrintText + + ld a, [EnemyMonCatchRate] + ld b, a + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jp z, .catch_without_fail + ld a, [CurItem] + cp MASTER_BALL + jp z, .catch_without_fail + ld a, [CurItem] + ld c, a + ld hl, BallMultiplierFunctionTable + +.get_multiplier_loop + ld a, [hli] + cp $ff + jr z, .skip_or_return_from_ball_fn + cp c + jr z, .call_ball_function + inc hl + inc hl + jr .get_multiplier_loop + +.call_ball_function + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .skip_or_return_from_ball_fn + push de + jp hl + +.skip_or_return_from_ball_fn + ld a, [CurItem] + cp LEVEL_BALL + ld a, b + jp z, .skip_hp_calc + + ld a, b + ld [hMultiplicand + 2], a + + ld hl, EnemyMonHP + ld b, [hl] + inc hl + ld c, [hl] + inc hl + ld d, [hl] + inc hl + ld e, [hl] + sla c + rl b + + ld h, d + ld l, e + add hl, de + add hl, de + ld d, h + ld e, l + ld a, d + and a + jr z, .okay_1 + + srl d + rr e + srl d + rr e + srl b + rr c + srl b + rr c + + ld a, c + and a + jr nz, .okay_1 + ld c, $1 +.okay_1 + ld b, e + + push bc + ld a, b + sub c + ld [hMultiplier], a + xor a + ld [hDividend + 0], a + ld [hMultiplicand + 0], a + ld [hMultiplicand + 1], a + call Multiply + pop bc + + ld a, b + ld [hDivisor], a + ld b, $4 + call Divide + + ld a, [hQuotient + 2] + and a + jr nz, .statuscheck + ld a, 1 +.statuscheck +; This routine is buggy. It was intended that SLP and FRZ provide a higher +; catch rate than BRN/PSN/PAR, which in turn provide a higher catch rate than +; no status effect at all. But instead, it makes BRN/PSN/PAR provide no +; benefit. +; Uncomment the line below to fix this. + ld b, a + ld a, [EnemyMonStatus] + and 1 << FRZ | SLP + ld c, 10 + jr nz, .addstatus + ; ld a, [EnemyMonStatus] + and a + ld c, 5 + jr nz, .addstatus + ld c, 0 +.addstatus + ld a, b + add c + jr nc, .max_1 + ld a, $ff +.max_1 + + ld d, a + push de + + ; BUG: callba overwrites a, + ; and GetItemHeldEffect takes b anyway. + + ; This is probably the reason + ; the HELD_CATCH_CHANCE effect + ; is never used. + + ; Uncomment the line below to fix. + + ld a, [BattleMonItem] +; ld b, a + callba GetItemHeldEffect + ld a, b + cp HELD_CATCH_CHANCE + + pop de + ld a, d + + jr nz, .skip_hp_calc + add c + jr nc, .skip_hp_calc + ld a, $ff +.skip_hp_calc + + ld b, a + ld [Buffer1], a + call Random + + cp b + ld a, 0 + jr z, .catch_without_fail + jr nc, .fail_to_catch + +.catch_without_fail + ld a, [EnemyMonSpecies] + +.fail_to_catch + ld [wWildMon], a + ld c, 20 + call DelayFrames + + ld a, [CurItem] + cp POKE_BALL + 1 ; Assumes Master/Ultra/Great come before + jr c, .not_kurt_ball + ld a, POKE_BALL +.not_kurt_ball + ld [wBattleAnimParam], a + + ld de, ANIM_THROW_POKE_BALL + ld a, e + ld [FXAnimID], a + ld a, d + ld [FXAnimID + 1], a + xor a + ld [hBattleTurn], a + ld [Buffer2], a + ld [wNumHits], a + predef PlayBattleAnim + + ld a, [wWildMon] + and a + jr nz, .caught + ld a, [Buffer2] + cp $1 + ld hl, Text_NoShake + jp z, .shake_and_break_free + cp $2 + ld hl, Text_OneShake + jp z, .shake_and_break_free + cp $3 + ld hl, Text_TwoShakes + jp z, .shake_and_break_free + cp $4 + ld hl, Text_ThreeShakes + jp z, .shake_and_break_free +.caught + + ld hl, EnemyMonStatus + ld a, [hli] + push af + inc hl + ld a, [hli] + push af + ld a, [hl] + push af + push hl + ld hl, EnemyMonItem + ld a, [hl] + push af + push hl + ld hl, EnemySubStatus5 + ld a, [hl] + push af + set SUBSTATUS_TRANSFORMED, [hl] + bit SUBSTATUS_TRANSFORMED, a + jr nz, .ditto + jr .not_ditto + +.ditto + ld a, DITTO + ld [TempEnemyMonSpecies], a + jr .load_data + +.not_ditto + set SUBSTATUS_TRANSFORMED, [hl] + ld hl, wEnemyBackupDVs + ld a, [EnemyMonDVs] + ld [hli], a + ld a, [EnemyMonDVs + 1] + ld [hl], a + +.load_data + ld a, [TempEnemyMonSpecies] + ld [CurPartySpecies], a + ld a, [EnemyMonLevel] + ld [CurPartyLevel], a + callba LoadEnemyMon + + pop af + ld [EnemySubStatus5], a + + pop hl + pop af + ld [hl], a + pop hl + pop af + ld [hld], a + pop af + ld [hld], a + dec hl + pop af + ld [hl], a + + ld hl, EnemySubStatus5 + bit SUBSTATUS_TRANSFORMED, [hl] + jr nz, .Transformed + ld hl, wWildMonMoves + ld de, EnemyMonMoves + ld bc, NUM_MOVES + call CopyBytes + + ld hl, wWildMonPP + ld de, EnemyMonPP + ld bc, NUM_MOVES + call CopyBytes +.Transformed: + + ld a, [EnemyMonSpecies] + ld [wWildMon], a + ld [CurPartySpecies], a + ld [wd265], a + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jp z, .FinishTutorial + + callba TrainerRankings_WildMonsCaught + + ld hl, Text_GotchaMonWasCaught + call PrintText + + call ClearSprites + + ld a, [wd265] + dec a + call CheckCaughtMon + + ld a, c + push af + ld a, [wd265] + dec a + call SetSeenAndCaughtMon + pop af + and a + jr nz, .skip_pokedex + + call CheckReceivedDex + jr z, .skip_pokedex + + ld hl, Text_AddedToPokedex + call PrintText + + call ClearSprites + + ld a, [EnemyMonSpecies] + ld [wd265], a + predef NewPokedexEntry + +.skip_pokedex + ld a, [BattleType] + cp BATTLETYPE_CONTEST + jp z, .catch_bug_contest_mon + cp BATTLETYPE_CELEBI + jr nz, .not_celebi + ld hl, wBattleResult + set 6, [hl] +.not_celebi + + ld a, [PartyCount] + cp PARTY_LENGTH + jr z, .SendToPC + + xor a ; PARTYMON + ld [MonType], a + call ClearSprites + + predef TryAddMonToParty + + callba SetCaughtData + + ld a, [CurItem] + cp FRIEND_BALL + jr nz, .SkipPartyMonFriendBall + + ld a, [PartyCount] + dec a + ld hl, PartyMon1Happiness + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + + ld a, FRIEND_BALL_HAPPINESS + ld [hl], a +.SkipPartyMonFriendBall: + + ld hl, Text_AskNicknameNewlyCaughtMon + call PrintText + + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + + call YesNoBox + jp c, .return_from_capture + + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + ld hl, PartyMonNicknames + ld bc, PKMN_NAME_LENGTH + call AddNTimes + + ld d, h + ld e, l + push de + xor a ; PARTYMON + ld [MonType], a + ld b, 0 + callba NamingScreen + + call RotateThreePalettesRight + + call LoadStandardFont + + pop hl + ld de, StringBuffer1 + call InitName + + jp .return_from_capture + +.SendToPC: + call ClearSprites + + predef SentPkmnIntoBox + + callba SetBoxMonCaughtData + + ld a, BANK(sBoxCount) + call GetSRAMBank + + ld a, [sBoxCount] + cp MONS_PER_BOX + jr nz, .BoxNotFullYet + ld hl, wBattleResult + set 7, [hl] +.BoxNotFullYet: + ld a, [CurItem] + cp FRIEND_BALL + jr nz, .SkipBoxMonFriendBall + ; The captured mon is now first in the box + ld a, FRIEND_BALL_HAPPINESS + ld [sBoxMon1Happiness], a +.SkipBoxMonFriendBall: + call CloseSRAM + + ld hl, Text_AskNicknameNewlyCaughtMon + call PrintText + + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + + call YesNoBox + jr c, .SkipBoxMonNickname + + xor a + ld [CurPartyMon], a + ld a, BOXMON + ld [MonType], a + ld de, wMonOrItemNameBuffer + ld b, $0 + callba NamingScreen + + ld a, BANK(sBoxMonNicknames) + call GetSRAMBank + + ld hl, wMonOrItemNameBuffer + ld de, sBoxMonNicknames + ld bc, PKMN_NAME_LENGTH + call CopyBytes + + ld hl, sBoxMonNicknames + ld de, StringBuffer1 + call InitName + + call CloseSRAM + +.SkipBoxMonNickname: + ld a, BANK(sBoxMonNicknames) + call GetSRAMBank + + ld hl, sBoxMonNicknames + ld de, wMonOrItemNameBuffer + ld bc, PKMN_NAME_LENGTH + call CopyBytes + + call CloseSRAM + + ld hl, Text_SentToBillsPC + call PrintText + + call RotateThreePalettesRight + call LoadStandardFont + jr .return_from_capture + +.catch_bug_contest_mon + callba BugContest_SetCaughtContestMon + jr .return_from_capture + +.FinishTutorial: + ld hl, Text_GotchaMonWasCaught + +.shake_and_break_free + call PrintText + call ClearSprites + +.return_from_capture + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + ret z + cp BATTLETYPE_DEBUG + ret z + cp BATTLETYPE_CONTEST + jr z, .used_park_ball + + ld a, [wWildMon] + and a + jr z, .toss + + call ClearBGPalettes + call ClearTileMap + +.toss + ld hl, NumItems + inc a + ld [wItemQuantityChangeBuffer], a + jp TossItem + +.used_park_ball + ld hl, wParkBallsRemaining + dec [hl] + ret +; ec0a + + +BallMultiplierFunctionTable: +; table of routines that increase or decrease the catch rate based on +; which ball is used in a certain situation. + dbw ULTRA_BALL, UltraBallMultiplier + dbw GREAT_BALL, GreatBallMultiplier + dbw SAFARI_BALL, SafariBallMultiplier ; Safari Ball, leftover from RBY + dbw HEAVY_BALL, HeavyBallMultiplier + dbw LEVEL_BALL, LevelBallMultiplier + dbw LURE_BALL, LureBallMultiplier + dbw FAST_BALL, FastBallMultiplier + dbw MOON_BALL, MoonBallMultiplier + dbw LOVE_BALL, LoveBallMultiplier + dbw PARK_BALL, ParkBallMultiplier + db $ff + +UltraBallMultiplier: +; multiply catch rate by 2 + sla b + ret nc + ld b, $ff + ret + +SafariBallMultiplier: +GreatBallMultiplier: +ParkBallMultiplier: +; multiply catch rate by 1.5 + ld a, b + srl a + add b + ld b, a + ret nc + ld b, $ff + ret + +GetPokedexEntryBank: + push hl + push de + ld a, [EnemyMonSpecies] + rlca + rlca + and 3 + ld hl, .PokedexEntryBanks + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + pop de + pop hl + ret + +.PokedexEntryBanks: + +GLOBAL PokedexEntries1 +GLOBAL PokedexEntries2 +GLOBAL PokedexEntries3 +GLOBAL PokedexEntries4 + + db BANK(PokedexEntries1) + db BANK(PokedexEntries2) + db BANK(PokedexEntries3) + db BANK(PokedexEntries4) + +HeavyBallMultiplier: +; subtract 20 from catch rate if weight < 102.4 kg +; else add 0 to catch rate if weight < 204.8 kg +; else add 20 to catch rate if weight < 307.2 kg +; else add 30 to catch rate if weight < 409.6 kg +; else add 40 to catch rate (never happens) + ld a, [EnemyMonSpecies] + ld hl, PokedexDataPointerTable + dec a + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, BANK(PokedexDataPointerTable) + call GetFarHalfword + +.SkipText: + call GetPokedexEntryBank + call GetFarByte + inc hl + cp "@" + jr nz, .SkipText + + call GetPokedexEntryBank + push bc + inc hl + inc hl + call GetFarHalfword + + srl h + rr l + ld b, h + ld c, l + + rept 4 + srl b + rr c + endr + call .subbc + + srl b + rr c + call .subbc + + ld a, h + pop bc + jr .compare + +.subbc + ; subtract bc from hl + push bc + ld a, b + cpl + ld b, a + ld a, c + cpl + ld c, a + inc bc + add hl, bc + pop bc + ret + +.compare + ld c, a + cp 1024 >> 8 ; 102.4 kg + jr c, .lightmon + + ld hl, .WeightsTable +.lookup + ld a, c + cp [hl] + jr c, .heavymon + inc hl + inc hl + jr .lookup + +.heavymon + inc hl + ld a, b + add [hl] + ld b, a + ret nc + ld b, $ff + ret + +.lightmon + ld a, b + sub 20 + ld b, a + ret nc + ld b, $1 + ret + +.WeightsTable: +; weight factor, boost + db 2048 >> 8, 0 + db 3072 >> 8, 20 + db 4096 >> 8, 30 + db 65280 >> 8, 40 + +LureBallMultiplier: +; multiply catch rate by 3 if this is a fishing rod battle + ld a, [BattleType] + cp BATTLETYPE_FISH + ret nz + + ld a, b + add a + jr c, .max + + add b + jr nc, .done +.max + ld a, $ff +.done + ld b, a + ret + +MoonBallMultiplier: +; This function is buggy. +; Intent: multiply catch rate by 4 if mon evolves with moon stone +; Reality: no boost + +GLOBAL EvosAttacks +GLOBAL EvosAttacksPointers + + push bc + ld a, [TempEnemyMonSpecies] + dec a + ld c, a + ld b, 0 + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarHalfword + pop bc + + push bc + ld a, BANK(EvosAttacks) + call GetFarByte + cp EVOLVE_ITEM + pop bc + ret nz + + inc hl + inc hl + inc hl + +; Moon Stone's constant from Pokémon Red is used. +; No Pokémon evolve with Burn Heal, +; so Moon Balls always have a catch rate of 1×. + push bc + ld a, BANK(EvosAttacks) + call GetFarByte + cp MOON_STONE_RED ; BURN_HEAL + pop bc + ret nz + + sla b + jr c, .max + sla b + jr nc, .done +.max + ld b, $ff +.done + ret + +LoveBallMultiplier: +; This function is buggy. +; Intent: multiply catch rate by 8 if mons are of same species, different sex +; Reality: multiply catch rate by 8 if mons are of same species, same sex + + ; does species match? + ld a, [TempEnemyMonSpecies] + ld c, a + ld a, [TempBattleMonSpecies] + cp c + ret nz + + ; check player mon species + push bc + ld a, [TempBattleMonSpecies] + ld [CurPartySpecies], a + xor a ; PARTYMON + ld [MonType], a + ld a, [CurBattleMon] + ld [CurPartyMon], a + callba GetGender + jr c, .done1 ; no effect on genderless + + ld d, 0 ; male + jr nz, .playermale + inc d ; female +.playermale + + ; check wild mon species + push de + ld a, [TempEnemyMonSpecies] + ld [CurPartySpecies], a + ld a, WILDMON + ld [MonType], a + callba GetGender + jr c, .done2 ; no effect on genderless + + ld d, 0 ; male + jr nz, .wildmale + inc d ; female +.wildmale + + ld a, d + pop de + cp d + pop bc + ret nz ; for the intended effect, this should be "ret z" + + sla b + jr c, .max + sla b + jr c, .max + sla b + ret nc +.max + ld b, $ff + ret + +.done2 + pop de + +.done1 + pop bc + ret + +FastBallMultiplier: +; This function is buggy. +; Intent: multiply catch rate by 4 if enemy mon is in one of the three +; FleeMons tables. +; Reality: multiply catch rate by 4 if enemy mon is one of the first three in +; the first FleeMons table. + ld a, [TempEnemyMonSpecies] + ld c, a + ld hl, FleeMons + ld d, 3 + +.loop + ld a, BANK(FleeMons) + call GetFarByte + + inc hl + cp -1 + jr z, .next + cp c + jr nz, .next ; for the intended effect, this should be "jr nz, .loop" + sla b + jr c, .max + + sla b + ret nc + +.max + ld b, $ff + ret + +.next + dec d + jr nz, .loop + ret + +LevelBallMultiplier: +; multiply catch rate by 8 if player mon level / 4 > enemy mon level +; multiply catch rate by 4 if player mon level / 2 > enemy mon level +; multiply catch rate by 2 if player mon level > enemy mon level + ld a, [BattleMonLevel] + ld c, a + ld a, [EnemyMonLevel] + cp c + ret nc ; if player is lower level, we're done here + sla b + jr c, .max + + srl c + cp c + ret nc ; if player/2 is lower level, we're done here + sla b + jr c, .max + + srl c + cp c + ret nc ; if player/4 is lower level, we're done here + sla b + ret nc + +.max + ld b, $ff + ret + +; These two texts were carried over from gen 1. +; They are not used in gen 2, and are dummied out. + +Text_RBY_CatchMarowak: ; 0xedab + ; It dodged the thrown BALL! This #MON can't be caught! + text_jump UnknownText_0x1c5a5a + db "@" +; 0xedb0 + +Text_RBY_NoShake: ; 0xedb0 + ; You missed the #MON! + text_jump UnknownText_0x1c5a90 + db "@" +; 0xedb5 + +Text_NoShake: ; 0xedb5 + ; Oh no! The #MON broke free! + text_jump UnknownText_0x1c5aa6 + db "@" +; 0xedba + +Text_OneShake: ; 0xedba + ; Aww! It appeared to be caught! + text_jump UnknownText_0x1c5ac3 + db "@" +; 0xedbf + +Text_TwoShakes: ; 0xedbf + ; Aargh! Almost had it! + text_jump UnknownText_0x1c5ae3 + db "@" +; 0xedc4 + +Text_ThreeShakes: ; 0xedc4 + ; Shoot! It was so close too! + text_jump UnknownText_0x1c5afa + db "@" +; 0xedc9 + +Text_GotchaMonWasCaught: ; 0xedc9 + ; Gotcha! @ was caught!@ @ + text_jump UnknownText_0x1c5b17 + start_asm + call WaitSFX + push bc + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld de, MUSIC_CAPTURE + call PlayMusic + pop bc + ld hl, TextJump_Waitbutton + ret +; ede6 + +TextJump_Waitbutton: ; 0xede6 + ; @ + text_jump Text_Waitbutton_2 + db "@" +; 0xedeb + +Text_SentToBillsPC: ; 0xedeb + ; was sent to BILL's PC. + text_jump UnknownText_0x1c5b38 + db "@" +; 0xedf0 + +Text_AddedToPokedex: ; 0xedf0 + ; 's data was newly added to the #DEX.@ @ + text_jump UnknownText_0x1c5b53 + db "@" +; 0xedf5 + +Text_AskNicknameNewlyCaughtMon: ; 0xedf5 + ; Give a nickname to @ ? + text_jump UnknownText_0x1c5b7f + db "@" +; 0xedfa + +ReturnToBattle_UseBall: ; edfa (3:6dfa) + callba _ReturnToBattle_UseBall + ret + +TownMap: ; ee01 + callba PokegearMap + ret +; ee08 + + +Bicycle: ; ee08 + callba BikeFunction + ret +; ee0f + + +MoonStone: +FireStone: +Thunderstone: +WaterStone: +LeafStone: +SunStone: ; ee0f + ld b, PARTYMENUACTION_EVO_STONE + call UseItem_SelectMon + + jp c, .DecidedNotToUse + + ld a, MON_ITEM + call GetPartyParamLocation + + ld a, [hl] + cp EVERSTONE + jr z, .NoEffect + + ld a, $1 + ld [wForceEvolution], a + callba EvolvePokemon + + ld a, [wMonTriedToEvolve] + and a + jr z, .NoEffect + + jp UseDisposableItem + +.NoEffect: + call WontHaveAnyEffectMessage + +.DecidedNotToUse: + xor a + ld [wItemEffectSucceeded], a + ret +; ee3d + + +HPUp: +Protein: +Iron: +Carbos: +Calcium: ; ee3d + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + + jp c, RareCandy_StatBooster_ExitMenu + + call RareCandy_StatBooster_GetParameters + + call GetStatExpRelativePointer + + ld a, MON_STAT_EXP + call GetPartyParamLocation + + add hl, bc + ld a, [hl] + cp 100 + jr nc, NoEffectMessage + + add 10 + ld [hl], a + call UpdateStatsAfterItem + + call GetStatExpRelativePointer + + ld hl, StatStrings + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer2 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + + call Play_SFX_FULL_HEAL + + ld hl, Text_StatRose + call PrintText + + ld c, HAPPINESS_USEDITEM + callba ChangeHappiness + + jp UseDisposableItem + + +NoEffectMessage: ; ee83 + ld hl, WontHaveAnyEffectText + call PrintText + jp ClearPalettes +; ee8c + + +UpdateStatsAfterItem: ; ee8c + ld a, MON_MAXHP + call GetPartyParamLocation + ld d, h + ld e, l + ld a, MON_STAT_EXP - 1 + call GetPartyParamLocation + ld b, $1 + predef_jump CalcPkmnStats +; ee9f + +RareCandy_StatBooster_ExitMenu: ; ee9f + xor a + ld [wItemEffectSucceeded], a + jp ClearPalettes +; eea6 + + +Text_StatRose: ; 0xeea6 + ; 's @ rose. + text_jump UnknownText_0x1c5b9a + db "@" +; 0xeeab + + +StatStrings: ; eeab + dw .health + dw .attack + dw .defense + dw .speed + dw .special + +.health db "HEALTH@" +.attack db "ATTACK@" +.defense db "DEFENSE@" +.speed db "SPEED@" +.special db "SPECIAL@" +; eed9 + + +GetStatExpRelativePointer: ; eed9 + ld a, [CurItem] + ld hl, Table_eeeb +.next + cp [hl] + inc hl + jr z, .got_it + inc hl + jr .next + +.got_it + ld a, [hl] + ld c, a + ld b, 0 + ret +; eeeb + +Table_eeeb: ; eeeb + db HP_UP, MON_HP_EXP - MON_STAT_EXP + db PROTEIN, MON_ATK_EXP - MON_STAT_EXP + db IRON, MON_DEF_EXP - MON_STAT_EXP + db CARBOS, MON_SPD_EXP - MON_STAT_EXP + db CALCIUM, MON_SPC_EXP - MON_STAT_EXP +; eef5 + + +RareCandy_StatBooster_GetParameters: ; eef5 + ld a, [CurPartySpecies] + ld [CurSpecies], a + ld [wd265], a + ld a, MON_LEVEL + call GetPartyParamLocation + ld a, [hl] + ld [CurPartyLevel], a + call GetBaseData + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + call GetNick + ret +; 0xef14 + + +RareCandy: ; ef14 + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + + jp c, RareCandy_StatBooster_ExitMenu + + call RareCandy_StatBooster_GetParameters + + ld a, MON_LEVEL + call GetPartyParamLocation + + ld a, [hl] + cp MAX_LEVEL + jp nc, NoEffectMessage + + inc a + ld [hl], a + ld [CurPartyLevel], a + push de + ld d, a + callba CalcExpAtLevel + + pop de + ld a, MON_EXP + call GetPartyParamLocation + + ld a, [hMultiplicand] + ld [hli], a + ld a, [hMultiplicand + 1] + ld [hli], a + ld a, [hMultiplicand + 2] + ld [hl], a + + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld b, a + ld c, [hl] + push bc + call UpdateStatsAfterItem + + ld a, MON_MAXHP + 1 + call GetPartyParamLocation + + pop bc + ld a, [hld] + sub c + ld c, a + ld a, [hl] + sbc b + ld b, a + dec hl + ld a, [hl] + add c + ld [hld], a + ld a, [hl] + adc b + ld [hl], a + callba LevelUpHappinessMod + + ld a, PARTYMENUTEXT_LEVEL_UP + call ItemActionText + + xor a ; PARTYMON + ld [MonType], a + predef CopyPkmnToTempMon + + hlcoord 9, 0 + ld b, 10 + ld c, 9 + call TextBox + + hlcoord 11, 1 + ld bc, $0004 + predef PrintTempMonStats + + call WaitPressAorB_BlinkCursor + + xor a ; PARTYMON + ld [MonType], a + ld a, [CurPartySpecies] + ld [wd265], a + predef LearnLevelMoves + + xor a + ld [wForceEvolution], a + callba EvolvePokemon + + jp UseDisposableItem +; efad + + +HealPowder: ; efad + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + + jp c, StatusHealer_ExitMenu + + call UseStatusHealer + + cp $0 + jr nz, .asm_efc9 + ld c, HAPPINESS_BITTERPOWDER + callba ChangeHappiness + + call LooksBitterMessage + + ld a, $0 + +.asm_efc9 + jp StatusHealer_Jumptable +; efcc + + +Antidote: +BurnHeal: +IceHeal: +Awakening: +ParlyzHeal: +FullHeal: +Psncureberry: +Przcureberry: +BurntBerry: +IceBerry: +MintBerry: +Miracleberry: ; efcc + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + jp c, StatusHealer_ExitMenu + +FullyHealStatus: ; efd4 + call UseStatusHealer + jp StatusHealer_Jumptable +; efda + + +UseStatusHealer: ; efda (3:6fda) + call IsMonFainted + ld a, $1 + ret z + call GetItemHealingAction + ld a, MON_STATUS + call GetPartyParamLocation + ld a, [hl] + and c + jr nz, .good + call IsItemUsedOnConfusedMon + ld a, $1 + ret nc + ld b, PARTYMENUTEXT_HEAL_CONFUSION +.good + xor a + ld [hl], a + ld a, b + ld [PartyMenuActionText], a + call HealStatus + call Play_SFX_FULL_HEAL + call ItemActionTextWaitButton + call UseDisposableItem + ld a, $0 + ret + +IsItemUsedOnConfusedMon: ; f009 (3:7009) + call IsItemUsedOnBattleMon + jr nc, .nope + ld a, [PlayerSubStatus3] + bit SUBSTATUS_CONFUSED, a + jr z, .nope + ld a, c + cp $ff + jr nz, .nope + scf + ret + +.nope + and a + ret + +BattlemonRestoreHealth: ; f01e (3:701e) + call IsItemUsedOnBattleMon + ret nc + ld a, MON_HP + call GetPartyParamLocation + ld a, [hli] + ld [BattleMonHP], a + ld a, [hld] + ld [BattleMonHP + 1], a + ret + +HealStatus: ; f030 (3:7030) + call IsItemUsedOnBattleMon + ret nc + xor a + ld [BattleMonStatus], a + ld hl, PlayerSubStatus5 + res SUBSTATUS_TOXIC, [hl] + ld hl, PlayerSubStatus1 + res SUBSTATUS_NIGHTMARE, [hl] + call GetItemHealingAction + ld a, c + cp %11111111 + jr nz, .not_full_heal + ld hl, PlayerSubStatus3 + res SUBSTATUS_CONFUSED, [hl] +.not_full_heal + push bc + callba CalcPlayerStats + pop bc + ret + +GetItemHealingAction: ; f058 (3:7058) + push hl + ld a, [CurItem] + ld hl, .healingactions + ld bc, 3 +.next + cp [hl] + jr z, .found_it + add hl, bc + jr .next + +.found_it + inc hl + ld b, [hl] + inc hl + ld a, [hl] + ld c, a + cp %11111111 + pop hl + ret +; f071 (3:7071) + +.healingactions ; f071 +; item, party menu action text, status + db ANTIDOTE, PARTYMENUTEXT_HEAL_PSN, 1 << PSN + db BURN_HEAL, PARTYMENUTEXT_HEAL_BRN, 1 << BRN + db ICE_HEAL, PARTYMENUTEXT_HEAL_FRZ, 1 << FRZ + db AWAKENING, PARTYMENUTEXT_HEAL_SLP, SLP + db PARLYZ_HEAL, PARTYMENUTEXT_HEAL_PAR, 1 << PAR + db FULL_HEAL, PARTYMENUTEXT_HEAL_ALL, %11111111 + db FULL_RESTORE, PARTYMENUTEXT_HEAL_ALL, %11111111 + db HEAL_POWDER, PARTYMENUTEXT_HEAL_ALL, %11111111 + db PSNCUREBERRY, PARTYMENUTEXT_HEAL_PSN, 1 << PSN + db PRZCUREBERRY, PARTYMENUTEXT_HEAL_PAR, 1 << PAR + db BURNT_BERRY, PARTYMENUTEXT_HEAL_FRZ, 1 << FRZ + db ICE_BERRY, PARTYMENUTEXT_HEAL_BRN, 1 << BRN + db MINT_BERRY, PARTYMENUTEXT_HEAL_SLP, SLP + db MIRACLEBERRY, PARTYMENUTEXT_HEAL_ALL, %11111111 + db -1, 0, 0 +; f09e + +StatusHealer_Jumptable: ; f09e (3:709e) + ld hl, .dw + rst JumpTable + ret + +.dw ; f0a3 (3:70a3) + dw StatusHealer_ClearPalettes + dw StatusHealer_NoEffect + dw StatusHealer_ExitMenu + + +RevivalHerb: ; f0a9 + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + jp c, StatusHealer_ExitMenu + + call RevivePokemon + cp 0 + jr nz, .asm_f0c5 + + ld c, HAPPINESS_REVIVALHERB + callba ChangeHappiness + call LooksBitterMessage + ld a, 0 + +.asm_f0c5 + jp StatusHealer_Jumptable +; f0c8 + + +Revive: +MaxRevive: ; f0c8 + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + jp c, StatusHealer_ExitMenu + + call RevivePokemon + jp StatusHealer_Jumptable +; f0d6 + + +RevivePokemon: ; f0d6 + call IsMonFainted + ld a, 1 + ret nz + ld a, [wBattleMode] + and a + jr z, .skip_to_revive + + ld a, [CurPartyMon] + ld c, a + ld d, 0 + ld hl, wBattleParticipantsIncludingFainted + ld b, CHECK_FLAG + predef FlagPredef + ld a, c + and a + jr z, .skip_to_revive + + ld a, [CurPartyMon] + ld c, a + ld hl, wBattleParticipantsNotFainted + ld b, SET_FLAG + predef FlagPredef + +.skip_to_revive + xor a + ld [Danger], a + ld a, [CurItem] + cp REVIVE + jr z, .revive_half_hp + + call ReviveFullHP + jr .finish_revive + +.revive_half_hp + call ReviveHalfHP + +.finish_revive + call HealHP_SFX_GFX + ld a, PARTYMENUTEXT_REVIVE + ld [PartyMenuActionText], a + call ItemActionTextWaitButton + call UseDisposableItem + ld a, 0 + ret +; f128 + + +FullRestore: ; f128 + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + jp c, StatusHealer_ExitMenu + + call IsMonFainted + jp z, StatusHealer_NoEffect + + call IsMonAtFullHealth + jr c, .NotAtFullHealth + + jp FullyHealStatus + +.NotAtFullHealth: + call .FullRestore + jp StatusHealer_Jumptable +; f144 + + +.FullRestore: ; f144 + xor a + ld [Danger], a + call ReviveFullHP + ld a, MON_STATUS + call GetPartyParamLocation + xor a + ld [hli], a + ld [hl], a + call HealStatus + call BattlemonRestoreHealth + call HealHP_SFX_GFX + ld a, PARTYMENUTEXT_HEAL_HP + ld [PartyMenuActionText], a + call ItemActionTextWaitButton + call UseDisposableItem + ld a, 0 + ret +; f16a + + +BitterBerry: ; f16a + ld hl, PlayerSubStatus3 + bit SUBSTATUS_CONFUSED, [hl] + ld a, 1 + jr z, .done + + res SUBSTATUS_CONFUSED, [hl] + xor a + ld [hBattleTurn], a + call UseItemText + + ld hl, ConfusedNoMoreText + call StdBattleTextBox + + ld a, 0 + +.done + jp StatusHealer_Jumptable +; f186 + + +MaxPotion: +HyperPotion: +SuperPotion: +Potion: +FreshWater: +SodaPop: +Lemonade: +MoomooMilk: +Ragecandybar: +BerryJuice: +Berry: +GoldBerry: ; f186 + call ItemRestoreHP + jp StatusHealer_Jumptable +; f18c + + +Energypowder: ; f18c + ld c, HAPPINESS_BITTERPOWDER + jr EnergypowderEnergyRootCommon +; f190 + +EnergyRoot: ; f190 + ld c, HAPPINESS_ENERGYROOT +; f192 + +EnergypowderEnergyRootCommon: ; f192 + push bc + call ItemRestoreHP + pop bc + cp 0 + jr nz, .skip_happiness + + callba ChangeHappiness + call LooksBitterMessage + ld a, 0 + +.skip_happiness + jp StatusHealer_Jumptable +; f1a9 + + +ItemRestoreHP: ; f1a9 (3:71a9) + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + ld a, 2 + ret c + + call IsMonFainted + ld a, 1 + ret z + + call IsMonAtFullHealth + ld a, 1 + ret nc + + xor a + ld [Danger], a + call GetHealingItemAmount + call RestoreHealth + call BattlemonRestoreHealth + call HealHP_SFX_GFX + ld a, PARTYMENUTEXT_HEAL_HP + ld [PartyMenuActionText], a + call ItemActionTextWaitButton + call UseDisposableItem + ld a, 0 + ret + +HealHP_SFX_GFX: ; f1db (3:71db) + push de + ld de, SFX_POTION + call WaitPlaySFX + pop de + ld a, [CurPartyMon] + hlcoord 11, 0 + ld bc, SCREEN_WIDTH * 2 + call AddNTimes + ld a, $2 + ld [wWhichHPBar], a + predef_jump AnimateHPBar + +UseItem_SelectMon: ; f1f9 (3:71f9) + call .SelectMon + ret c + + ld a, [CurPartySpecies] + cp EGG + jr nz, .not_egg + + call CantUseOnEggMessage + scf + ret + +.not_egg + and a + ret + +.SelectMon: ; f20b (3:720b) + ld a, b + ld [PartyMenuActionText], a + push hl + push de + push bc + call ClearBGPalettes + call ChoosePkmnToUseItemOn + pop bc + pop de + pop hl + ret + +ChoosePkmnToUseItemOn: ; f21c (3:721c) + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call SetPalettes + call DelayFrame + callba PartyMenuSelect + ret + +ItemActionText: ; f24a (3:724a) + ld [PartyMenuActionText], a + ld a, [CurPartySpecies] + push af + ld a, [CurPartyMon] + push af + push hl + push de + push bc + callba WritePartyMenuTilemap + callba PrintPartyMenuActionText + call WaitBGMap + call SetPalettes + call DelayFrame + pop bc + pop de + pop hl + pop af + ld [CurPartyMon], a + pop af + ld [CurPartySpecies], a + ret + +ItemActionTextWaitButton: ; f279 (3:7279) + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, TileMapEnd - TileMap + ld a, " " + call ByteFill + ld a, [PartyMenuActionText] + call ItemActionText + ld a, $1 + ld [hBGMapMode], a + ld c, 50 + call DelayFrames + jp WaitPressAorB_BlinkCursor + +StatusHealer_NoEffect: ; f299 (3:7299) + call WontHaveAnyEffectMessage + jr StatusHealer_ClearPalettes + +StatusHealer_ExitMenu: ; f29e (3:729e) + xor a + ld [wItemEffectSucceeded], a +StatusHealer_ClearPalettes: ; f2a2 (3:72a2) + call ClearPalettes + ret + +IsItemUsedOnBattleMon: ; f2a6 (3:72a6) + ld a, [wBattleMode] + and a + ret z + ld a, [CurPartyMon] + push hl + ld hl, CurBattleMon + cp [hl] + pop hl + jr nz, .nope + scf + ret + +.nope + xor a + ret + +ReviveHalfHP: ; f2ba (3:72ba) + call LoadHPFromBuffer1 + srl d + rr e + jr ContinueRevive + +ReviveFullHP: ; f2c3 (3:72c3) + call LoadHPFromBuffer1 +ContinueRevive: ; f2c6 (3:72c6) + ld a, MON_HP + call GetPartyParamLocation + ld [hl], d + inc hl + ld [hl], e + jp LoadCurHPIntoBuffer5 + +RestoreHealth: ; f2d1 (3:72d1) + ld a, MON_HP + 1 + call GetPartyParamLocation + ld a, [hl] + add e + ld [hld], a + ld a, [hl] + adc d + ld [hl], a + jr c, .full_hp + call LoadCurHPIntoBuffer5 + ld a, MON_HP + 1 + call GetPartyParamLocation + ld d, h + ld e, l + ld a, MON_MAXHP + 1 + call GetPartyParamLocation + ld a, [de] + sub [hl] + dec de + dec hl + ld a, [de] + sbc [hl] + jr c, .finish +.full_hp + call ReviveFullHP +.finish + ret + +RemoveHP: ; f2f9 (3:72f9) + ld a, MON_HP + 1 + call GetPartyParamLocation + ld a, [hl] + sub e + ld [hld], a + ld a, [hl] + sbc d + ld [hl], a + jr nc, .okay + xor a + ld [hld], a + ld [hl], a +.okay + call LoadCurHPIntoBuffer5 + ret + +IsMonFainted: ; f30d (3:730d) + push de + call LoadMaxHPToBuffer1 + call LoadCurHPToBuffer3 + call LoadHPFromBuffer3 + ld a, d + or e + pop de + ret + +IsMonAtFullHealth: ; f31b (3:731b) + call LoadHPFromBuffer3 + ld h, d + ld l, e + call LoadHPFromBuffer1 + ld a, l + sub e + ld a, h + sbc d + ret + +LoadCurHPIntoBuffer5: ; f328 (3:7328) + ld a, MON_HP + call GetPartyParamLocation + ld a, [hli] + ld [Buffer6], a + ld a, [hl] + ld [Buffer5], a + ret +; f336 (3:7336) + +LoadHPIntoBuffer5: ; f336 + ld a, d + ld [Buffer6], a + ld a, e + ld [Buffer5], a + ret +; f33f + +LoadHPFromBuffer5: ; f33f + ld a, [Buffer6] + ld d, a + ld a, [Buffer5] + ld e, a + ret +; f348 + +LoadCurHPToBuffer3: ; f348 (3:7348) + ld a, MON_HP + call GetPartyParamLocation + ld a, [hli] + ld [Buffer4], a + ld a, [hl] + ld [Buffer3], a + ret + +LoadHPFromBuffer3: ; f356 (3:7356) + ld a, [Buffer4] + ld d, a + ld a, [Buffer3] + ld e, a + ret + +LoadMaxHPToBuffer1: ; f35f (3:735f) + push hl + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld [Buffer2], a + ld a, [hl] + ld [Buffer1], a + pop hl + ret + +LoadHPFromBuffer1: ; f36f (3:736f) + ld a, [Buffer2] + ld d, a + ld a, [Buffer1] + ld e, a + ret + +GetOneFifthMaxHP: ; f378 (3:7378) + push bc + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld [hDividend + 0], a + ld a, [hl] + ld [hDividend + 1], a + ld a, 5 + ld [hDivisor], a + ld b, 2 + call Divide + ld a, [hQuotient + 1] + ld d, a + ld a, [hQuotient + 2] + ld e, a + pop bc + ret + +GetHealingItemAmount: ; f395 (3:7395) + push hl + ld a, [CurItem] + ld hl, .Healing + ld d, a +.next + ld a, [hli] + cp -1 + jr z, .NotFound + cp d + jr z, .done + inc hl + inc hl + jr .next + +.NotFound: + scf +.done + ld e, [hl] + inc hl + ld d, [hl] + pop hl + ret +; f3af (3:73af) + +.Healing: ; f3af + dbw FRESH_WATER, 50 + dbw SODA_POP, 60 + dbw LEMONADE, 80 + dbw HYPER_POTION, 200 + dbw SUPER_POTION, 50 + dbw POTION, 20 + dbw MAX_POTION, 999 + dbw FULL_RESTORE, 999 + dbw MOOMOO_MILK, 100 + dbw BERRY, 10 + dbw GOLD_BERRY, 30 + dbw ENERGYPOWDER, 50 + dbw ENERGY_ROOT, 200 + dbw RAGECANDYBAR, 20 + dbw BERRY_JUICE, 20 + dbw -1, 0 +; f3df + +Softboiled_MilkDrinkFunction: ; f3df (3:73df) +; Softboiled/Milk Drink in the field + ld a, [wPartyMenuCursor] + dec a + ld b, a + call .SelectMilkDrinkRecipient ; select pokemon + jr c, .skip + ld a, b + ld [CurPartyMon], a + call IsMonFainted + call GetOneFifthMaxHP + call RemoveHP + push bc + call HealHP_SFX_GFX + pop bc + call GetOneFifthMaxHP + ld a, c + ld [CurPartyMon], a + call IsMonFainted + call RestoreHealth + call HealHP_SFX_GFX + ld a, PARTYMENUTEXT_HEAL_HP + call ItemActionText + call JoyWaitAorB +.skip + ld a, b + inc a + ld [wPartyMenuCursor], a + ret + +.SelectMilkDrinkRecipient: ; f419 (3:7419) +.loop + push bc + ld a, PARTYMENUACTION_HEALING_ITEM + ld [PartyMenuActionText], a + call ChoosePkmnToUseItemOn + pop bc + jr c, .set_carry + ld a, [wPartyMenuCursor] + dec a + ld c, a + ld a, b + cp c + jr z, .cant_use ; chose the same mon as user + ld a, c + ld [CurPartyMon], a + call IsMonFainted + jr z, .cant_use + call IsMonAtFullHealth + jr nc, .cant_use + xor a + ret + +.set_carry + scf + ret + +.cant_use + push bc + ld hl, .Text_CantBeUsed + call MenuTextBoxBackup + pop bc + jr .loop +; f44a (3:744a) + +.Text_CantBeUsed: ; 0xf44a + ; That can't be used on this #MON. + text_jump UnknownText_0x1c5bac + db "@" +; 0xf44f + + +EscapeRope: ; f44f + xor a + ld [wItemEffectSucceeded], a + callba EscapeRopeFunction + + ld a, [wItemEffectSucceeded] + cp 1 + call z, UseDisposableItem + ret +; f462 + + +SuperRepel: ; f462 + ld b, 200 + jr UseRepel +; f466 + +MaxRepel: ; f466 + ld b, 250 + jr UseRepel +; f466 + +Repel: ; f46a + ld b, 100 +; f46c + +UseRepel: ; f46c + ld a, [wRepelEffect] + and a + ld hl, TextJump_RepelUsedEarlierIsStillInEffect + jp nz, PrintText + + ld a, b + ld [wRepelEffect], a + jp UseItemText + + +TextJump_RepelUsedEarlierIsStillInEffect: ; 0xf47d + ; The REPEL used earlier is still in effect. + text_jump Text_RepelUsedEarlierIsStillInEffect + db "@" +; 0xf482 + + +XAccuracy: ; f482 + ld hl, PlayerSubStatus4 + bit SUBSTATUS_X_ACCURACY, [hl] + jp nz, WontHaveAnyEffect_NotUsedMessage + set SUBSTATUS_X_ACCURACY, [hl] + jp UseItemText +; f48f + + +PokeDoll: ; f48f + ld a, [wBattleMode] + dec a + jr nz, .asm_f4a6 + inc a + ld [wForcedSwitch], a + ld a, [wBattleResult] + and 3 << 6 + or $2 + ld [wBattleResult], a + jp UseItemText + +.asm_f4a6 + xor a + ld [wItemEffectSucceeded], a + ret +; f4ab + + +GuardSpec: ; f4ab + ld hl, PlayerSubStatus4 + bit SUBSTATUS_MIST, [hl] + jp nz, WontHaveAnyEffect_NotUsedMessage + set SUBSTATUS_MIST, [hl] + jp UseItemText +; f4b8 + + +DireHit: ; f4b8 + ld hl, PlayerSubStatus4 + bit SUBSTATUS_FOCUS_ENERGY, [hl] + jp nz, WontHaveAnyEffect_NotUsedMessage + set SUBSTATUS_FOCUS_ENERGY, [hl] + jp UseItemText +; f4c5 + + +XAttack: +XDefend: +XSpeed: +XSpecial: ; f4c5 + call UseItemText + + ld a, [CurItem] + ld hl, .x_item_table + +.loop + cp [hl] + jr z, .got_it + inc hl + inc hl + jr .loop + +.got_it + inc hl + ld b, [hl] + xor a + ld [hBattleTurn], a + ld [AttackMissed], a + ld [EffectFailed], a + callba CheckIfStatCanBeRaised + call WaitSFX + + callba BattleCommand_StatUpMessage + callba BattleCommand_StatUpFailText + + ld a, [CurBattleMon] + ld [CurPartyMon], a + ld c, HAPPINESS_USEDXITEM + callba ChangeHappiness + ret +; f504 + +.x_item_table ; f504 + db X_ATTACK, ATTACK + db X_DEFEND, DEFENSE + db X_SPEED, SPEED + db X_SPECIAL, SP_ATTACK +; f50c + + +PokeFlute: ; f50c + ld a, [wBattleMode] + and a + jr nz, .dummy +.dummy + + xor a + ld [wd002], a + + ld b, $ff ^ SLP + + ld hl, PartyMon1Status + call .CureSleep + + ld a, [wBattleMode] + cp WILD_BATTLE + jr z, .skip_otrainer + ld hl, OTPartyMon1Status + call .CureSleep +.skip_otrainer + + ld hl, BattleMonStatus + ld a, [hl] + and b + ld [hl], a + ld hl, EnemyMonStatus + ld a, [hl] + and b + ld [hl], a + + ld a, [wd002] + and a + ld hl, .CatchyTune + jp z, PrintText + ld hl, .PlayedTheFlute + call PrintText + + ld a, [Danger] + and $80 + jr nz, .dummy2 +.dummy2 + ld hl, .AllSleepingMonWokeUp + jp PrintText + + +.CureSleep: + ld de, PARTYMON_STRUCT_LENGTH + ld c, PARTY_LENGTH + +.loop + ld a, [hl] + push af + and SLP + jr z, .not_asleep + ld a, 1 + ld [wd002], a +.not_asleep + pop af + and b + ld [hl], a + add hl, de + dec c + jr nz, .loop + ret +; f56c + + +.CatchyTune: ; 0xf56c + ; Played the # FLUTE. Now, that's a catchy tune! + text_jump UnknownText_0x1c5bf9 + db "@" +; 0xf571 + +.AllSleepingMonWokeUp: ; 0xf571 + ; All sleeping #MON woke up. + text_jump UnknownText_0x1c5c28 + db "@" +; 0xf576 + +.PlayedTheFlute: ; 0xf576 + ; played the # FLUTE.@ @ + text_jump UnknownText_0x1c5c44 + start_asm + ld a, [wBattleMode] + and a + jr nz, .battle + + push de + ld de, SFX_POKEFLUTE + call WaitPlaySFX + call WaitSFX + pop de + +.battle + jp PokeFluteTerminatorCharacter +; f58f + + +BlueCard: ; f58f + ld hl, .bluecardtext + jp MenuTextBoxWaitButton + +.bluecardtext + text_jump UnknownText_0x1c5c5e + db "@" +; f59a + + +CoinCase: ; f59a + ld hl, .coincasetext + jp MenuTextBoxWaitButton + +.coincasetext + text_jump UnknownText_0x1c5c7b + db "@" +; f5a5 + + +OldRod: ; f5a5 + ld e, $0 + jr UseRod +; f5a9 + +GoodRod: ; f5a9 + ld e, $1 + jr UseRod +; f5ad + +SuperRod: ; f5ad + ld e, $2 + jr UseRod +; f5b1 + +UseRod: ; f5b1 + callba FishFunction + ret +; f5b8 + + +Itemfinder: ; f5b8 + callba ItemFinder + ret +; f5bf + + +MaxElixer: +PPUp: +Ether: +MaxEther: +Elixer: +Mysteryberry: ; f5bf + ld a, [CurItem] + ld [wd002], a + +.loop + ; Party Screen opens to choose on which Pkmn to use the Item + ld b, PARTYMENUACTION_HEALING_ITEM + call UseItem_SelectMon + jp c, PPRestoreItem_Cancel + +.loop2 + ld a, [wd002] + cp MAX_ELIXER + jp z, Elixer_RestorePPofAllMoves + cp ELIXER + jp z, Elixer_RestorePPofAllMoves + + ld hl, TextJump_RaiseThePPOfWhichMove + ld a, [wd002] + cp PP_UP + jr z, .ppup + ld hl, TextJump_RestoreThePPOfWhichMove + +.ppup + call PrintText + + ld a, [CurMoveNum] + push af + xor a + ld [CurMoveNum], a + ld a, $2 + ld [wMoveSelectionMenuType], a + callba MoveSelectionScreen + pop bc + + ld a, b + ld [CurMoveNum], a + jr nz, .loop + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + call GetMthMoveOfNthPartymon + + push hl + ld a, [hl] + ld [wd265], a + call GetMoveName + call CopyName1 + pop hl + + ld a, [wd002] + cp PP_UP + jp nz, Not_PP_Up + + ld a, [hl] + cp SKETCH + jr z, .CantUsePPUpOnSketch + + ld bc, $0015 + add hl, bc + ld a, [hl] + cp 3 << 6 ; have 3 PP Ups already been used? + jr c, .do_ppup + +.CantUsePPUpOnSketch: +.pp_is_maxed_out + ld hl, TextJump_PPIsMaxedOut + call PrintText + jr .loop2 + +.do_ppup + ld a, [hl] + add 1 << 6 ; increase PP Up count by 1 + ld [hl], a + ld a, $1 + ld [wd265], a + call ApplyPPUp + call Play_SFX_FULL_HEAL + + ld hl, TextJump_PPsIncreased + call PrintText + +FinishPPRestore: ; f64c + call ClearPalettes + jp UseDisposableItem +; f652 + +BattleRestorePP: ; f652 + ld a, [wBattleMode] + and a + jr z, .not_in_battle + ld a, [CurPartyMon] + ld b, a + ld a, [CurBattleMon] + cp b + jr nz, .not_in_battle + ld a, [PlayerSubStatus5] + bit SUBSTATUS_TRANSFORMED, a + jr nz, .not_in_battle + call .UpdateBattleMonPP + +.not_in_battle + call Play_SFX_FULL_HEAL + ld hl, UnknownText_0xf739 + call PrintText + jr FinishPPRestore + +.UpdateBattleMonPP: + ld a, [CurPartyMon] + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld de, BattleMonMoves + ld b, NUM_MOVES +.loop + ld a, [de] + and a + jr z, .done + cp [hl] + jr nz, .next + push hl + push de + push bc + rept NUM_MOVES + 2 ; BattleMonPP - BattleMonMoves + inc de + endr + ld bc, MON_PP - MON_MOVES + add hl, bc + ld a, [hl] + ld [de], a + pop bc + pop de + pop hl + +.next + inc hl + inc de + dec b + jr nz, .loop + +.done + ret +; f6a7 + +Not_PP_Up: ; f6a7 + call RestorePP + jr nz, BattleRestorePP + jp PPRestoreItem_NoEffect +; f6af + +Elixer_RestorePPofAllMoves: ; f6af + xor a + ld hl, wMenuCursorY + ld [hli], a + ld [hl], a + ld b, NUM_MOVES +.moveLoop + push bc + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + call GetMthMoveOfNthPartymon + ld a, [hl] + and a + jr z, .next + + call RestorePP + jr z, .next + ld hl, wMenuCursorX + inc [hl] + +.next + ld hl, wMenuCursorY + inc [hl] + pop bc + dec b + jr nz, .moveLoop + ld a, [wMenuCursorX] + and a + jp nz, BattleRestorePP + +PPRestoreItem_NoEffect: ; f6dd + call WontHaveAnyEffectMessage + +PPRestoreItem_Cancel: ; f6e0 + call ClearPalettes + xor a + ld [wItemEffectSucceeded], a + ret +; f6e8 + +RestorePP: ; f6e8 + xor a ; PARTYMON + ld [MonType], a + call GetMaxPPOfMove + ld hl, PartyMon1PP + ld bc, PARTYMON_STRUCT_LENGTH + call GetMthMoveOfNthPartymon + ld a, [wd265] + ld b, a + ld a, [hl] + and (1 << 6) - 1 + cp b + jr nc, .dont_restore + + ld a, [wd002] + cp MAX_ELIXER + jr z, .restore_all + cp MAX_ETHER + jr z, .restore_all + + ld c, 5 + cp MYSTERYBERRY + jr z, .restore_some + + ld c, 10 + +.restore_some + ld a, [hl] + and (1 << 6) - 1 + add c + cp b + jr nc, .restore_all + ld b, a + +.restore_all + ld a, [hl] + and 3 << 6 + or b + ld [hl], a + ret + +.dont_restore + xor a + ret +; f725 + +TextJump_RaiseThePPOfWhichMove: ; 0xf725 + ; Raise the PP of which move? + text_jump Text_RaiseThePPOfWhichMove + db "@" +; 0xf72a + +TextJump_RestoreThePPOfWhichMove: ; 0xf72a + ; Restore the PP of which move? + text_jump Text_RestoreThePPOfWhichMove + db "@" +; 0xf72f + +TextJump_PPIsMaxedOut: ; 0xf72f + ; 's PP is maxed out. + text_jump Text_PPIsMaxedOut + db "@" +; 0xf734 + +TextJump_PPsIncreased: ; 0xf734 + ; 's PP increased. + text_jump Text_PPsIncreased + db "@" +; 0xf739 + +UnknownText_0xf739: ; 0xf739 + ; PP was restored. + text_jump UnknownText_0x1c5cf1 + db "@" +; 0xf73e + + +Squirtbottle: ; f73e + callba _Squirtbottle + ret +; f745 + + +CardKey: ; f745 + callba _CardKey + ret +; f74c + + +BasementKey: ; f74c + callba _BasementKey + ret +; f753 + + +SacredAsh: ; f753 + callba _SacredAsh + ld a, [wItemEffectSucceeded] + cp $1 + ret nz + call UseDisposableItem + ret +; f763 + + +NormalBox: ; f763 + ld c, DECOFLAG_SILVER_TROPHY_DOLL + jr OpenBox +; f767 + +GorgeousBox: ; f767 + ld c, DECOFLAG_GOLD_TROPHY_DOLL +OpenBox: ; f769 + callba SetSpecificDecorationFlag + + ld hl, .text + call PrintText + + jp UseDisposableItem +; f778 + +.text ; 0xf778 + ; There was a trophy inside! + text_jump UnknownText_0x1c5d03 + db "@" +; 0xf77d + +Brightpowder: +Item19: +LuckyPunch: +MetalPowder: +Nugget: +Item2D: +Item32: +ExpShare: +SilverLeaf: +RedScale: +Secretpotion: +SSTicket: +MysteryEgg: +ClearBell: +SilverWing: +QuickClaw: +GoldLeaf: +SoftSand: +SharpBeak: +PoisonBarb: +KingsRock: +RedApricorn: +Tinymushroom: +BigMushroom: +Silverpowder: +BluApricorn: +Item5A: +AmuletCoin: +YlwApricorn: +GrnApricorn: +CleanseTag: +MysticWater: +Twistedspoon: +WhtApricorn: +Blackbelt: +BlkApricorn: +Item64: +PnkApricorn: +Blackglasses: +Slowpoketail: +PinkBow: +Stick: +SmokeBall: +Nevermeltice: +Magnet: +Pearl: +BigPearl: +Everstone: +SpellTag: +GsBall: +MiracleSeed: +ThickClub: +FocusBand: +Item78: +HardStone: +LuckyEgg: +MachinePart: +EggTicket: +LostItem: +Stardust: +StarPiece: +Pass: +Item87: +Item88: +Item89: +Charcoal: +ScopeLens: +Item8D: +Item8E: +MetalCoat: +DragonFang: +Item91: +Leftovers: +Item93: +Item94: +Item95: +DragonScale: +BerserkGene: +Item99: +Item9A: +Item9B: +FlowerMail: +ItemA2: +LightBall: +PolkadotBow: +ItemAB: +UpGrade: +ItemB0: +RainbowWing: +ItemB3: +TeruSama: ; f77d + jp IsntTheTimeMessage +; f780 + + +Play_SFX_FULL_HEAL: ; f780 + push de + ld de, SFX_FULL_HEAL + call WaitPlaySFX + pop de + ret +; f789 + +UseItemText: ; f789 + ld hl, UsedItemText + call PrintText + call Play_SFX_FULL_HEAL + call WaitPressAorB_BlinkCursor +UseDisposableItem: ; f795 + ld hl, NumItems + ld a, 1 + ld [wItemQuantityChangeBuffer], a + jp TossItem +; f7a0 + +UseBallInTrainerBattle: ; f7a0 + call ReturnToBattle_UseBall + ld de, ANIM_THROW_POKE_BALL + ld a, e + ld [FXAnimID], a + ld a, d + ld [FXAnimID + 1], a + xor a + ld [wBattleAnimParam], a + ld [hBattleTurn], a + ld [wNumHits], a + predef PlayBattleAnim + ld hl, BlockedTheBallText + call PrintText + ld hl, DontBeAThiefText + call PrintText + jr UseDisposableItem +; f7ca + +WontHaveAnyEffect_NotUsedMessage: ; f7ca + ld hl, WontHaveAnyEffectText + call PrintText + + ; Item wasn't used. + ld a, $2 + ld [wItemEffectSucceeded], a + ret +; f7d6 + +LooksBitterMessage: ; f7d6 + ld hl, LooksBitterText + jp PrintText +; f7dc + +Ball_BoxIsFullMessage: ; f7dc + ld hl, Ball_BoxIsFullText + call PrintText + + ; Item wasn't used. + ld a, $2 + ld [wItemEffectSucceeded], a + ret +; f7e8 + +CantUseOnEggMessage: ; f7e8 + ld hl, CantUseOnEggText + jr CantUseItemMessage + +IsntTheTimeMessage: ; f7ed + ld hl, IsntTheTimeText + jr CantUseItemMessage + +WontHaveAnyEffectMessage: ; f7f2 + ld hl, WontHaveAnyEffectText + jr CantUseItemMessage + +BelongsToSomeoneElseMessage: ; f7f7 + ld hl, BelongsToSomeoneElseText + jr CantUseItemMessage + +CyclingIsntAllowedMessage: ; f7fc + ld hl, CyclingIsntAllowedText + jr CantUseItemMessage + +CantGetOnYourBikeMessage: ; f801 + ld hl, CantGetOnYourBikeText + +CantUseItemMessage: ; f804 +; Item couldn't be used. + xor a + ld [wItemEffectSucceeded], a + jp PrintText +; f80b + +LooksBitterText: ; 0xf80b + ; It looks bitter… + text_jump UnknownText_0x1c5d3e + db "@" +; 0xf810 + +CantUseOnEggText: ; 0xf810 + ; That can't be used on an EGG. + text_jump UnknownText_0x1c5d50 + db "@" +; 0xf815 + +IsntTheTimeText: ; 0xf815 + ; OAK: ! This isn't the time to use that! + text_jump UnknownText_0x1c5d6e + db "@" +; 0xf81a + +BelongsToSomeoneElseText: ; 0xf81a + ; That belongs to someone else! + text_jump UnknownText_0x1c5d97 + db "@" +; 0xf81f + +WontHaveAnyEffectText: ; 0xf81f + ; It won't have any effect. + text_jump UnknownText_0x1c5db6 + db "@" +; 0xf824 + +BlockedTheBallText: ; 0xf824 + ; The trainer blocked the BALL! + text_jump UnknownText_0x1c5dd0 + db "@" +; 0xf829 + +DontBeAThiefText: ; 0xf829 + ; Don't be a thief! + text_jump UnknownText_0x1c5def + db "@" +; 0xf82e + +CyclingIsntAllowedText: ; 0xf82e + ; Cycling isn't allowed here. + text_jump UnknownText_0x1c5e01 + db "@" +; 0xf833 + +CantGetOnYourBikeText: ; 0xf833 + ; Can't get on your @ now. + text_jump UnknownText_0x1c5e1d + db "@" +; 0xf838 + +Ball_BoxIsFullText: ; 0xf838 + ; The #MON BOX is full. That can't be used now. + text_jump UnknownText_0x1c5e3a + db "@" +; 0xf83d + +UsedItemText: ; 0xf83d + ; used the@ . + text_jump UnknownText_0x1c5e68 + db "@" +; 0xf842 + +GotOnTheItemText: ; 0xf842 + ; got on the@ . + text_jump UnknownText_0x1c5e7b + db "@" +; 0xf847 + +GotOffTheItemText: ; 0xf847 + ; got off@ the @ . + text_jump UnknownText_0x1c5e90 + db "@" +; 0xf84c + + +ApplyPPUp: ; f84c + ld a, MON_MOVES + call GetPartyParamLocation + push hl + ld de, Buffer1 + predef FillPP + pop hl + ld bc, MON_PP - MON_MOVES + add hl, bc + ld de, Buffer1 + ld b, 0 +.loop + inc b + ld a, b + cp NUM_MOVES + 1 + ret z + ld a, [wd265] + dec a + jr nz, .use + ld a, [wMenuCursorY] + inc a + cp b + jr nz, .skip + +.use + ld a, [hl] + and 3 << 6 + ld a, [de] ; wasted cycle + call nz, ComputeMaxPP + +.skip + inc hl + inc de + jr .loop +; f881 + + + +ComputeMaxPP: ; f881 + push bc + ; Divide the base PP by 5. + ld a, [de] + ld [hDividend + 3], a + xor a + ld [hDividend], a + ld [hDividend + 1], a + ld [hDividend + 2], a + ld a, 5 + ld [hDivisor], a + ld b, 4 + call Divide + ; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM. + ld a, [hl] + ld b, a + swap a + and $f + srl a + srl a + ld c, a + ; If this value is 0, we are done + and a + jr z, .NoPPUp + +.loop + ; Normally, a move with 40 PP would have 64 PP with three PP Ups. + ; Since this would overflow into bit 6, we prevent that from happening + ; by decreasing the extra amount of PP each PP Up provides, resulting + ; in a maximum of 61. + ld a, [hQuotient + 2] + cp $8 + jr c, .okay + ld a, $7 + +.okay + add b + ld b, a + ld a, [wd265] + dec a + jr z, .NoPPUp + dec c + jr nz, .loop + +.NoPPUp: + ld [hl], b + pop bc + ret +; f8b9 + +RestoreAllPP: ; f8b9 + ld a, MON_PP + call GetPartyParamLocation + push hl + ld a, MON_MOVES + call GetPartyParamLocation + pop de + xor a ; PARTYMON + ld [wMenuCursorY], a + ld [MonType], a + ld c, NUM_MOVES +.loop + ld a, [hli] + and a + ret z + push hl + push de + push bc + call GetMaxPPOfMove + pop bc + pop de + ld a, [de] + and 3 << 6 + ld b, a + ld a, [wd265] + add b + ld [de], a + inc de + ld hl, wMenuCursorY + inc [hl] + pop hl + dec c + jr nz, .loop + ret +; f8ec + + +GetMaxPPOfMove: ; f8ec + ld a, [StringBuffer1 + 0] + push af + ld a, [StringBuffer1 + 1] + push af + + ld a, [MonType] + and a + + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + jr z, .got_partymon ; PARTYMON + + ld hl, OTPartyMon1Moves + dec a + jr z, .got_partymon ; OTPARTYMON + + ld hl, TempMonMoves + dec a + jr z, .got_nonpartymon ; BOXMON + + ld hl, TempMonMoves ; Wasted cycles + dec a + jr z, .got_nonpartymon ; TEMPMON + + ld hl, BattleMonMoves ; WILDMON + +.got_nonpartymon ; BOXMON, TEMPMON, WILDMON + call GetMthMoveOfCurrentMon + jr .gotdatmove + +.got_partymon ; PARTYMON, OTPARTYMON + call GetMthMoveOfNthPartymon + +.gotdatmove + ld a, [hl] + dec a + + push hl + ld hl, Moves + MOVE_PP + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + ld b, a + ld de, StringBuffer1 + ld [de], a + pop hl + + push bc + ld bc, MON_PP - MON_MOVES + ld a, [MonType] + cp WILDMON + jr nz, .notwild + ld bc, EnemyMonPP - EnemyMonMoves +.notwild + add hl, bc + ld a, [hl] + and 3 << 6 + pop bc + + or b + ld hl, StringBuffer1 + 1 + ld [hl], a + xor a + ld [wd265], a + ld a, b ; this gets lost anyway + call ComputeMaxPP + ld a, [hl] + and (1 << 6) - 1 + ld [wd265], a + + pop af + ld [StringBuffer1 + 1], a + pop af + ld [StringBuffer1 + 0], a + ret +; f963 + +GetMthMoveOfNthPartymon: ; f963 + ld a, [CurPartyMon] + call AddNTimes + +GetMthMoveOfCurrentMon: ; f969 + ld a, [wMenuCursorY] + ld c, a + ld b, 0 + add hl, bc + ret +; f971 + +INCLUDE "engine/pokeball_wobble.asm" diff --git a/engine/landmarks.asm b/engine/landmarks.asm index 5e904eae8..75605bbd9 100644 --- a/engine/landmarks.asm +++ b/engine/landmarks.asm @@ -47,7 +47,7 @@ GetLandmarkName:: ; 0x1ca8a5 ; 0x1ca8c3 -INCLUDE "data/landmarks.asm" +INCLUDE "data/maps/landmarks.asm" RegionCheck: ; 0x1caea1 diff --git a/engine/mon_icons.asm b/engine/mon_icons.asm index 70c439863..18dc4f94b 100755 --- a/engine/mon_icons.asm +++ b/engine/mon_icons.asm @@ -466,7 +466,7 @@ ReadMonMenuIcon: ; 8eab3 ; 8eac4 -INCLUDE "data/mon_menu_icons.asm" +INCLUDE "data/pokemon/menu_icons.asm" INCLUDE "gfx/icon_pointers.asm" diff --git a/engine/overworld.asm b/engine/overworld.asm index 73115e479..90291b616 100755 --- a/engine/overworld.asm +++ b/engine/overworld.asm @@ -721,6 +721,6 @@ INCLUDE "data/emote_headers.asm" INCLUDE "data/sprite_mons.asm" -INCLUDE "data/outdoor_sprites.asm" +INCLUDE "data/maps/outdoor_sprites.asm" INCLUDE "gfx/sprite_headers.asm" diff --git a/engine/pokeball_wobble.asm b/engine/pokeball_wobble.asm new file mode 100755 index 000000000..7fb4d3e38 --- /dev/null +++ b/engine/pokeball_wobble.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/pokedex.asm b/engine/pokedex.asm index c60396a40..a7a7a4860 100644 --- a/engine/pokedex.asm +++ b/engine/pokedex.asm @@ -1709,9 +1709,9 @@ Pokedex_ABCMode: ; 40c30 ret -INCLUDE "data/pokedex/order_alpha.asm" +INCLUDE "data/pokemon/dex_order_alpha.asm" -INCLUDE "data/pokedex/order_new.asm" +INCLUDE "data/pokemon/dex_order_new.asm" Pokedex_DisplayModeDescription: ; 40e5b diff --git a/engine/read_trainer_attributes.asm b/engine/read_trainer_attributes.asm new file mode 100644 index 000000000..dfb8d3682 --- /dev/null +++ b/engine/read_trainer_attributes.asm @@ -0,0 +1,64 @@ +GetTrainerClassName: ; 3952d + ld hl, RivalName + ld a, c + cp RIVAL1 + jr z, .rival + + ld [CurSpecies], a + ld a, TRAINER_NAME + ld [wNamedObjectTypeBuffer], a + call GetName + ld de, StringBuffer1 + ret + +.rival + ld de, StringBuffer1 + push de + ld bc, NAME_LENGTH + call CopyBytes + pop de + ret + +GetOTName: ; 39550 + ld hl, OTPlayerName + ld a, [wLinkMode] + and a + jr nz, .ok + + ld hl, RivalName + ld a, c + cp RIVAL1 + jr z, .ok + + ld [CurSpecies], a + ld a, TRAINER_NAME + ld [wNamedObjectTypeBuffer], a + call GetName + ld hl, StringBuffer1 + +.ok + ld bc, TRAINER_CLASS_NAME_LENGTH + ld de, OTClassName + push de + call CopyBytes + pop de + ret + +GetTrainerAttributes: ; 3957b + ld a, [TrainerClass] + ld c, a + call GetOTName + ld a, [TrainerClass] + dec a + ld hl, TrainerClassAttributes + TRNATTR_ITEM1 + ld bc, NUM_TRAINER_ATTRIBUTES + call AddNTimes + ld de, wEnemyTrainerItem1 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, [hl] + ld [wEnemyTrainerBaseReward], a + ret diff --git a/engine/read_trainer_party.asm b/engine/read_trainer_party.asm new file mode 100755 index 000000000..9b7727a84 --- /dev/null +++ b/engine/read_trainer_party.asm @@ -0,0 +1,398 @@ + +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 + add hl, bc + add hl, bc + 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 + add hl, bc + add hl, bc + 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 + ld [hli], a + ld [hli], a + ld [hli], a + 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, OTPlayerName + 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 + add hl, bc + add hl, bc + 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 diff --git a/engine/spawn_points.asm b/engine/spawn_points.asm index 5f9c07558..b8637da17 100644 --- a/engine/spawn_points.asm +++ b/engine/spawn_points.asm @@ -1,5 +1,5 @@ -INCLUDE "data/spawn_points.asm" +INCLUDE "data/maps/spawn_points.asm" LoadSpawnPoint: ; 1531f -- cgit v1.2.3 From 94722aa8f08ceaef8233d73a87f534b6c3f0475f Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 12:31:18 -0500 Subject: Move predef/ files into engine/ Get rid of single-file engine/ subdirectories Move tilesets/ palettes unrelated to individual tilesets into data/palettes/ (more from engine/colors.asm can be moved here too) --- engine/breeding.asm | 993 ++++++++++++++++++++++ engine/breeding/egg.asm | 993 ---------------------- engine/cgb_layouts.asm | 1127 +++++++++++++++++++++++++ engine/color.asm | 11 +- engine/crystal_colors.asm | 614 ++++++++++++++ engine/link.asm | 2 +- engine/printer.asm | 2 +- engine/printer/serial.asm | 645 -------------- engine/printer_serial.asm | 645 ++++++++++++++ engine/sgb_layouts.asm | 636 ++++++++++++++ engine/time_capsule.asm | 277 ++++++ engine/time_capsule/conversion.asm | 277 ------ engine/trade/animation.asm | 1628 ------------------------------------ engine/trade_animation.asm | 1628 ++++++++++++++++++++++++++++++++++++ 14 files changed, 5927 insertions(+), 3551 deletions(-) create mode 100755 engine/breeding.asm delete mode 100755 engine/breeding/egg.asm create mode 100644 engine/cgb_layouts.asm create mode 100755 engine/crystal_colors.asm delete mode 100755 engine/printer/serial.asm create mode 100755 engine/printer_serial.asm create mode 100644 engine/sgb_layouts.asm create mode 100755 engine/time_capsule.asm delete mode 100755 engine/time_capsule/conversion.asm delete mode 100755 engine/trade/animation.asm create mode 100755 engine/trade_animation.asm (limited to 'engine') diff --git a/engine/breeding.asm b/engine/breeding.asm new file mode 100755 index 000000000..b402f99f1 --- /dev/null +++ b/engine/breeding.asm @@ -0,0 +1,993 @@ +CheckBreedmonCompatibility: ; 16e1d + call .CheckBreedingGroupCompatibility + ld c, $0 + jp nc, .done + ld a, [wBreedMon1Species] + ld [CurPartySpecies], a + ld a, [wBreedMon1DVs] + ld [TempMonDVs], a + ld a, [wBreedMon1DVs + 1] + ld [TempMonDVs + 1], a + ld a, TEMPMON + ld [MonType], a + predef GetGender + jr c, .genderless + ld b, $1 + jr nz, .breedmon2 + inc b + +.breedmon2 + push bc + ld a, [wBreedMon2Species] + ld [CurPartySpecies], a + ld a, [wBreedMon2DVs] + ld [TempMonDVs], a + ld a, [wBreedMon2DVs + 1] + ld [TempMonDVs + 1], a + ld a, $3 + ld [MonType], a + predef GetGender + pop bc + jr c, .genderless + ld a, $1 + jr nz, .compare_gender + inc a + +.compare_gender + cp b + jr nz, .compute + +.genderless + ld c, $0 + ld a, [wBreedMon1Species] + cp DITTO + jr z, .ditto1 + ld a, [wBreedMon2Species] + cp DITTO + jr nz, .done + jr .compute + +.ditto1 + ld a, [wBreedMon2Species] + cp DITTO + jr z, .done + +.compute + call .CheckDVs + ld c, 255 + jp z, .done + ld a, [wBreedMon2Species] + ld b, a + ld a, [wBreedMon1Species] + cp b + ld c, 254 + jr z, .compare_ids + ld c, 128 +.compare_ids + ; Speed up + ld a, [wBreedMon1ID] + ld b, a + ld a, [wBreedMon2ID] + cp b + jr nz, .done + ld a, [wBreedMon1ID + 1] + ld b, a + ld a, [wBreedMon2ID + 1] + cp b + jr nz, .done + ld a, c + sub 77 + ld c, a + +.done + ld a, c + ld [wd265], a + ret +; 16ebc + + +.CheckDVs: ; 16ebc (5:6ebc) +; If Defense DVs match and the lower 3 bits of the Special DVs match, +; avoid breeding + ld a, [wBreedMon1DVs] + and %1111 + ld b, a + ld a, [wBreedMon2DVs] + and %1111 + cp b + ret nz + ld a, [wBreedMon1DVs + 1] + and %111 + ld b, a + ld a, [wBreedMon2DVs + 1] + and %111 + cp b + ret +; 16ed6 + +.CheckBreedingGroupCompatibility: ; 16ed6 +; If either mon is in the No Eggs group, +; they are not compatible. + ld a, [wBreedMon2Species] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + cp NO_EGGS * $11 + jr z, .Incompatible + + ld a, [wBreedMon1Species] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + cp NO_EGGS * $11 + jr z, .Incompatible + +; Ditto is automatically compatible with everything. +; If not Ditto, load the breeding groups into b/c and d/e. + ld a, [wBreedMon2Species] + cp DITTO + jr z, .Compatible + ld [CurSpecies], a + call GetBaseData + ld a, [BaseEggGroups] + push af + and $f + ld b, a + pop af + and $f0 + swap a + ld c, a + + ld a, [wBreedMon1Species] + cp DITTO + jr z, .Compatible + ld [CurSpecies], a + push bc + call GetBaseData + pop bc + ld a, [BaseEggGroups] + push af + and $f + ld d, a + pop af + and $f0 + swap a + ld e, a + + ld a, d + cp b + jr z, .Compatible + cp c + jr z, .Compatible + + ld a, e + cp b + jr z, .Compatible + cp c + jr z, .Compatible + +.Incompatible: + and a + ret + +.Compatible: + scf + ret +; 16f3e + +DoEggStep:: ; 16f3e + ld de, PartySpecies + ld hl, PartyMon1Happiness + ld c, 0 +.loop + ld a, [de] + inc de + cp -1 + ret z + cp EGG + jr nz, .next + dec [hl] + jr nz, .next + ld a, 1 + and a + ret + +.next + push de + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + pop de + jr .loop +; 16f5e + +OverworldHatchEgg:: ; 16f5e + call RefreshScreen + call LoadStandardMenuDataHeader + call HatchEggs + call ExitAllMenus + call RestartMapMusic + jp CloseText +; 16f70 + +HatchEggs: ; 16f70 (5:6f70) + ld de, PartySpecies + ld hl, PartyMon1Happiness + xor a + ld [CurPartyMon], a + +.loop ; 16f7a (5:6f7a) + ld a, [de] + inc de + cp -1 + jp z, .done + push de + push hl + cp EGG + jp nz, .next + ld a, [hl] + and a + jp nz, .next + ld [hl], $78 + + push de + + callba SetEggMonCaughtData + callba TrainerRankings_EggsHatched + ld a, [CurPartyMon] + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + ld [CurPartySpecies], a + dec a + call SetSeenAndCaughtMon + + ld a, [CurPartySpecies] + cp TOGEPI + jr nz, .nottogepi + ; set the event flag for hatching togepi + ld de, EVENT_TOGEPI_HATCHED + ld b, SET_FLAG + call EventFlagAction +.nottogepi + + pop de + + ld a, [CurPartySpecies] + dec de + ld [de], a + ld [wd265], a + ld [CurSpecies], a + call GetPokemonName + xor a + ld [wd26b], a + call GetBaseData + ld a, [CurPartyMon] + ld hl, PartyMon1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + push hl + ld bc, MON_MAXHP + add hl, bc + ld d, h + ld e, l + pop hl + push hl + ld bc, MON_LEVEL + add hl, bc + ld a, [hl] + ld [CurPartyLevel], a + pop hl + push hl + ld bc, MON_STATUS + add hl, bc + xor a + ld [hli], a + ld [hl], a + pop hl + push hl + ld bc, MON_STAT_EXP - 1 + add hl, bc + ld b, $0 + predef CalcPkmnStats + pop bc + ld hl, MON_MAXHP + add hl, bc + ld d, h + ld e, l + ld hl, MON_HP + add hl, bc + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + ld hl, MON_ID + add hl, bc + ld a, [PlayerID] + ld [hli], a + ld a, [PlayerID + 1] + ld [hl], a + ld a, [CurPartyMon] + ld hl, PartyMonOT + ld bc, NAME_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, PlayerName + call CopyBytes + ld hl, .Text_HatchEgg + call PrintText + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + ld bc, PKMN_NAME_LENGTH + call AddNTimes + ld d, h + ld e, l + push de + ld hl, .Text_NicknameHatchling + call PrintText + call YesNoBox + pop de + jr c, .nonickname + + ld a, $1 + ld [wd26b], a + xor a + ld [MonType], a + push de + ld b, $0 + callba NamingScreen + pop hl + ld de, StringBuffer1 + call InitName + jr .next + +.nonickname + ld hl, StringBuffer1 + ld bc, PKMN_NAME_LENGTH + call CopyBytes + +.next ; 1707d (5:707d) + ld hl, CurPartyMon + inc [hl] + pop hl + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + pop de + jp .loop + +.done ; 1708a (5:708a) + ret +; 1708b (5:708b) + +.Text_HatchEgg: ; 0x1708b + ; Huh? @ @ + text_jump UnknownText_0x1c0db0 + start_asm + ld hl, VramState + res 0, [hl] + push hl + push de + push bc + ld a, [CurPartySpecies] + push af + call EggHatch_AnimationSequence + ld hl, .ClearTextbox + call PrintText + pop af + ld [CurPartySpecies], a + pop bc + pop de + pop hl + ld hl, .CameOutOfItsEgg + ret +; 170b0 (5:70b0) + +.ClearTextbox: ; 0x170b0 + ; + text_jump UnknownText_0x1c0db8 + db "@" +; 0x170b5 + +.CameOutOfItsEgg: ; 0x170b5 + ; came out of its EGG!@ @ + text_jump UnknownText_0x1c0dba + db "@" +; 0x170ba + +.Text_NicknameHatchling: ; 0x170ba + ; Give a nickname to @ ? + text_jump UnknownText_0x1c0dd8 + db "@" +; 0x170bf + +InitEggMoves: ; 170bf + call GetHeritableMoves + ld d, h + ld e, l + ld b, NUM_MOVES +.loop + ld a, [de] + and a + jr z, .done + ld hl, wEggMonMoves + ld c, NUM_MOVES +.next + ld a, [de] + cp [hl] + jr z, .skip + inc hl + dec c + jr nz, .next + call GetEggMove + jr nc, .skip + call LoadEggMove + +.skip + inc de + dec b + jr nz, .loop + +.done + ret +; 170e4 + +GetEggMove: ; 170e4 +GLOBAL EggMoves + + push bc + ld a, [wEggMonSpecies] + dec a + ld c, a + ld b, 0 + ld hl, EggMovePointers + add hl, bc + add hl, bc + ld a, BANK(EggMovePointers) + call GetFarHalfword +.loop + ld a, BANK(EggMoves) + call GetFarByte + cp -1 + jr z, .reached_end + ld b, a + ld a, [de] + cp b + jr z, .done_carry + inc hl + jr .loop + +.reached_end + call GetBreedmonMovePointer + ld b, NUM_MOVES +.loop2 + ld a, [de] + cp [hl] + jr z, .found_eggmove + inc hl + dec b + jr z, .inherit_tmhm + jr .loop2 + +.found_eggmove + ld a, [wEggMonSpecies] + dec a + ld c, a + ld b, 0 + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, BANK(EvosAttacksPointers) + call GetFarHalfword +.loop3 + ld a, BANK(EvosAttacks) + call GetFarByte + inc hl + and a + jr nz, .loop3 +.loop4 + ld a, BANK(EvosAttacks) + call GetFarByte + and a + jr z, .inherit_tmhm + inc hl + ld a, BANK(EvosAttacks) + call GetFarByte + ld b, a + ld a, [de] + cp b + jr z, .done_carry + inc hl + jr .loop4 + +.inherit_tmhm + ld hl, TMHMMoves +.loop5 + ld a, BANK(TMHMMoves) + call GetFarByte + inc hl + and a + jr z, .done + ld b, a + ld a, [de] + cp b + jr nz, .loop5 + ld [wPutativeTMHMMove], a + predef CanLearnTMHMMove + ld a, c + and a + jr z, .done + +.done_carry + pop bc + scf + ret + +.done + pop bc + and a + ret +; 17169 + +LoadEggMove: ; 17169 + push de + push bc + ld a, [de] + ld b, a + ld hl, wEggMonMoves + ld c, NUM_MOVES +.loop + ld a, [hli] + and a + jr z, .done + dec c + jr nz, .loop + ld de, wEggMonMoves + ld hl, wEggMonMoves + 1 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + +.done + dec hl + ld [hl], b + ld hl, wEggMonMoves + ld de, wEggMonPP + predef FillPP + pop bc + pop de + ret +; 17197 + +GetHeritableMoves: ; 17197 + ld hl, wBreedMon2Moves + ld a, [wBreedMon1Species] + cp DITTO + jr z, .ditto1 + ld a, [wBreedMon2Species] + cp DITTO + jr z, .ditto2 + ld a, [wBreedMotherOrNonDitto] + and a + ret z + ld hl, wBreedMon1Moves + ret + +.ditto1 + ld a, [CurPartySpecies] + push af + ld a, [wBreedMon2Species] + ld [CurPartySpecies], a + ld a, [wBreedMon2DVs] + ld [TempMonDVs], a + ld a, [wBreedMon2DVs + 1] + ld [TempMonDVs + 1], a + ld a, TEMPMON + ld [MonType], a + predef GetGender + jr c, .inherit_mon2_moves + jr nz, .inherit_mon2_moves + jr .inherit_mon1_moves + +.ditto2 + ld a, [CurPartySpecies] + push af + ld a, [wBreedMon1Species] + ld [CurPartySpecies], a + ld a, [wBreedMon1DVs] + ld [TempMonDVs], a + ld a, [wBreedMon1DVs + 1] + ld [TempMonDVs + 1], a + ld a, TEMPMON + ld [MonType], a + predef GetGender + jr c, .inherit_mon1_moves + jr nz, .inherit_mon1_moves + +.inherit_mon2_moves + ld hl, wBreedMon2Moves + pop af + ld [CurPartySpecies], a + ret + +.inherit_mon1_moves + ld hl, wBreedMon1Moves + pop af + ld [CurPartySpecies], a + ret +; 1720b + +GetBreedmonMovePointer: ; 1720b + ld hl, wBreedMon1Moves + ld a, [wBreedMon1Species] + cp DITTO + ret z + ld a, [wBreedMon2Species] + cp DITTO + jr z, .ditto + ld a, [wBreedMotherOrNonDitto] + and a + ret z + +.ditto + ld hl, wBreedMon2Moves + ret +; 17224 + + +GetEggFrontpic: ; 17224 (5:7224) + push de + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld hl, BattleMonDVs + predef GetUnownLetter + pop de + predef_jump GetFrontpic + +GetHatchlingFrontpic: ; 1723c (5:723c) + push de + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld hl, BattleMonDVs + predef GetUnownLetter + pop de + predef_jump FrontpicPredef + +Hatch_UpdateFrontpicBGMapCenter: ; 17254 (5:7254) + push af + call WaitTop + push hl + push bc + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + pop bc + pop hl + ld a, b + ld [hBGMapAddress + 1], a + ld a, c + ld [hGraphicStartTile], a + lb bc, 7, 7 + predef PlaceGraphic + pop af + call Hatch_LoadFrontpicPal + call SetPalettes + jp WaitBGMap + +EggHatch_DoAnimFrame: ; 1727f (5:727f) + push hl + push de + push bc + callab PlaySpriteAnimations + call DelayFrame + pop bc + pop de + pop hl + ret + +EggHatch_AnimationSequence: ; 1728f (5:728f) + ld a, [wd265] + ld [wJumptableIndex], a + ld a, [CurSpecies] + push af + ld de, MUSIC_NONE + call PlayMusic + callba BlankScreen + call DisableLCD + ld hl, EggHatchGFX + ld de, VTiles0 tile $00 + ld bc, $20 + ld a, BANK(EggHatchGFX) + call FarCopyBytes + callba ClearSpriteAnims + ld de, VTiles2 tile $00 + ld a, [wJumptableIndex] + call GetHatchlingFrontpic + ld de, VTiles2 tile $31 + ld a, EGG + call GetEggFrontpic + ld de, MUSIC_EVOLUTION + call PlayMusic + call EnableLCD + hlcoord 7, 4 + ld b, VBGMap0 / $100 + ld c, $31 ; Egg tiles start here + ld a, EGG + call Hatch_UpdateFrontpicBGMapCenter + ld c, 80 + call DelayFrames + xor a + ld [wcf64], a + ld a, [hSCX] + ld b, a +.outerloop + ld hl, wcf64 + ld a, [hl] + inc [hl] + cp 8 + jr nc, .done + ld e, [hl] +.loop +; wobble e times + ld a, 2 + ld [hSCX], a + ld a, -2 + ld [wGlobalAnimXOffset], a + call EggHatch_DoAnimFrame + ld c, 2 + call DelayFrames + ld a, -2 + ld [hSCX], a + ld a, 2 + ld [wGlobalAnimXOffset], a + call EggHatch_DoAnimFrame + ld c, 2 + call DelayFrames + dec e + jr nz, .loop + ld c, 16 + call DelayFrames + call EggHatch_CrackShell + jr .outerloop + +.done + ld de, SFX_EGG_HATCH + call PlaySFX + xor a + ld [hSCX], a + ld [wGlobalAnimXOffset], a + call ClearSprites + call Hatch_InitShellFragments + hlcoord 6, 3 + ld b, VBGMap0 / $100 + ld c, $00 ; Hatchling tiles start here + ld a, [wJumptableIndex] + call Hatch_UpdateFrontpicBGMapCenter + call Hatch_ShellFragmentLoop + call WaitSFX + ld a, [wJumptableIndex] + ld [CurPartySpecies], a + hlcoord 6, 3 + ld d, $0 + ld e, ANIM_MON_HATCH + predef AnimateFrontpic + pop af + ld [CurSpecies], a + ret + +Hatch_LoadFrontpicPal: ; 17363 (5:7363) + ld [PlayerHPPal], a + ld b, SCGB_EVOLUTION + ld c, $0 + jp GetSGBLayout + +EggHatch_CrackShell: ; 1736d (5:736d) + ld a, [wcf64] + dec a + and $7 + cp $7 + ret z + srl a + ret nc + swap a + srl a + add 9 * 8 + 4 + ld d, a + ld e, 11 * 8 + ld a, SPRITE_ANIM_INDEX_EGG_CRACK + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], $0 + ld de, SFX_EGG_CRACK + jp PlaySFX +; 17393 (5:7393) + +EggHatchGFX: ; 17393 +INCBIN "gfx/evo/egg_hatch.2bpp" +; 173b3 + +Hatch_InitShellFragments: ; 173b3 (5:73b3) + callba ClearSpriteAnims + ld hl, .SpriteData +.loop + ld a, [hli] + cp -1 + jr z, .done + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + push hl + push bc + + ld a, SPRITE_ANIM_INDEX_EGG_HATCH + call _InitSpriteAnimStruct + + ld hl, SPRITEANIMSTRUCT_TILE_ID + add hl, bc + ld [hl], $0 + + pop de + ld a, e + ld hl, SPRITEANIMSTRUCT_FRAMESET_ID + add hl, bc + add [hl] + ld [hl], a + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], d + + pop hl + jr .loop +.done + ld de, SFX_EGG_HATCH + call PlaySFX + call EggHatch_DoAnimFrame + ret +; 173ef (5:73ef) + +.SpriteData: ; 173ef +; Probably OAM. + dsprite 10, 4, 9, 0, $00, $3c + dsprite 11, 4, 9, 0, $01, $04 + dsprite 10, 4, 10, 0, $00, $30 + dsprite 11, 4, 10, 0, $01, $10 + dsprite 10, 4, 11, 0, $02, $24 + dsprite 11, 4, 11, 0, $03, $1c + dsprite 10, 0, 9, 4, $00, $36 + dsprite 12, 0, 9, 4, $01, $0a + dsprite 10, 0, 10, 4, $02, $2a + dsprite 12, 0, 10, 4, $03, $16 + db -1 +; 17418 + +Hatch_ShellFragmentLoop: ; 17418 (5:7418) + ld c, 129 +.loop + call EggHatch_DoAnimFrame + dec c + jr nz, .loop + ret + +Special_DayCareMon1: ; 17421 + ld hl, DayCareMon1Text + call PrintText + ld a, [wBreedMon1Species] + call PlayCry + ld a, [wDayCareLady] + bit 0, a + jr z, DayCareMonCursor + call ButtonSound + ld hl, wBreedMon2Nick + call DayCareMonCompatibilityText + jp PrintText + +Special_DayCareMon2: ; 17440 + ld hl, DayCareMon2Text + call PrintText + ld a, [wBreedMon2Species] + call PlayCry + ld a, [wDayCareMan] + bit 0, a + jr z, DayCareMonCursor + call ButtonSound + ld hl, wBreedMon1Nick + call DayCareMonCompatibilityText + jp PrintText + +DayCareMonCursor: ; 1745f + jp WaitPressAorB_BlinkCursor +; 17462 + +DayCareMon2Text: ; 0x17462 + ; It's @ that was left with the DAY-CARE LADY. + text_jump UnknownText_0x1c0df3 + db "@" +; 0x17467 + +DayCareMon1Text: ; 0x17467 + ; It's @ that was left with the DAY-CARE MAN. + text_jump UnknownText_0x1c0e24 + db "@" +; 0x1746c + +DayCareMonCompatibilityText: ; 1746c + push bc + ld de, StringBuffer1 + ld bc, NAME_LENGTH + call CopyBytes + call CheckBreedmonCompatibility + pop bc + ld a, [wd265] + ld hl, .AllAlone + cp -1 + jr z, .done + ld hl, .Incompatible + and a + jr z, .done + ld hl, .HighCompatibility + cp 230 + jr nc, .done + cp 70 + ld hl, .ModerateCompatibility + jr nc, .done + ld hl, .SlightCompatibility + +.done + ret +; 1749c + +.AllAlone: ; 0x1749c + ; It's brimming with energy. + text_jump UnknownText_0x1c0e54 + db "@" +; 0x174a1 + +.Incompatible: ; 0x174a1 + ; It has no interest in @ . + text_jump UnknownText_0x1c0e6f + db "@" +; 0x174a6 + +.HighCompatibility: ; 0x174a6 + ; It appears to care for @ . + text_jump UnknownText_0x1c0e8d + db "@" +; 0x174ab + +.ModerateCompatibility: ; 0x174ab + ; It's friendly with @ . + text_jump UnknownText_0x1c0eac + db "@" +; 0x174b0 + +.SlightCompatibility: ; 0x174b0 + ; It shows interest in @ . + text_jump UnknownText_0x1c0ec6 + db "@" +; 0x174b5 + +DayCareMonPrintEmptyString: ; 174b5 +; unreferenced + ld hl, .string + ret +; 174b9 + +.string ; 174b9 + db "@" +; 174ba + diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm deleted file mode 100755 index b402f99f1..000000000 --- a/engine/breeding/egg.asm +++ /dev/null @@ -1,993 +0,0 @@ -CheckBreedmonCompatibility: ; 16e1d - call .CheckBreedingGroupCompatibility - ld c, $0 - jp nc, .done - ld a, [wBreedMon1Species] - ld [CurPartySpecies], a - ld a, [wBreedMon1DVs] - ld [TempMonDVs], a - ld a, [wBreedMon1DVs + 1] - ld [TempMonDVs + 1], a - ld a, TEMPMON - ld [MonType], a - predef GetGender - jr c, .genderless - ld b, $1 - jr nz, .breedmon2 - inc b - -.breedmon2 - push bc - ld a, [wBreedMon2Species] - ld [CurPartySpecies], a - ld a, [wBreedMon2DVs] - ld [TempMonDVs], a - ld a, [wBreedMon2DVs + 1] - ld [TempMonDVs + 1], a - ld a, $3 - ld [MonType], a - predef GetGender - pop bc - jr c, .genderless - ld a, $1 - jr nz, .compare_gender - inc a - -.compare_gender - cp b - jr nz, .compute - -.genderless - ld c, $0 - ld a, [wBreedMon1Species] - cp DITTO - jr z, .ditto1 - ld a, [wBreedMon2Species] - cp DITTO - jr nz, .done - jr .compute - -.ditto1 - ld a, [wBreedMon2Species] - cp DITTO - jr z, .done - -.compute - call .CheckDVs - ld c, 255 - jp z, .done - ld a, [wBreedMon2Species] - ld b, a - ld a, [wBreedMon1Species] - cp b - ld c, 254 - jr z, .compare_ids - ld c, 128 -.compare_ids - ; Speed up - ld a, [wBreedMon1ID] - ld b, a - ld a, [wBreedMon2ID] - cp b - jr nz, .done - ld a, [wBreedMon1ID + 1] - ld b, a - ld a, [wBreedMon2ID + 1] - cp b - jr nz, .done - ld a, c - sub 77 - ld c, a - -.done - ld a, c - ld [wd265], a - ret -; 16ebc - - -.CheckDVs: ; 16ebc (5:6ebc) -; If Defense DVs match and the lower 3 bits of the Special DVs match, -; avoid breeding - ld a, [wBreedMon1DVs] - and %1111 - ld b, a - ld a, [wBreedMon2DVs] - and %1111 - cp b - ret nz - ld a, [wBreedMon1DVs + 1] - and %111 - ld b, a - ld a, [wBreedMon2DVs + 1] - and %111 - cp b - ret -; 16ed6 - -.CheckBreedingGroupCompatibility: ; 16ed6 -; If either mon is in the No Eggs group, -; they are not compatible. - ld a, [wBreedMon2Species] - ld [CurSpecies], a - call GetBaseData - ld a, [BaseEggGroups] - cp NO_EGGS * $11 - jr z, .Incompatible - - ld a, [wBreedMon1Species] - ld [CurSpecies], a - call GetBaseData - ld a, [BaseEggGroups] - cp NO_EGGS * $11 - jr z, .Incompatible - -; Ditto is automatically compatible with everything. -; If not Ditto, load the breeding groups into b/c and d/e. - ld a, [wBreedMon2Species] - cp DITTO - jr z, .Compatible - ld [CurSpecies], a - call GetBaseData - ld a, [BaseEggGroups] - push af - and $f - ld b, a - pop af - and $f0 - swap a - ld c, a - - ld a, [wBreedMon1Species] - cp DITTO - jr z, .Compatible - ld [CurSpecies], a - push bc - call GetBaseData - pop bc - ld a, [BaseEggGroups] - push af - and $f - ld d, a - pop af - and $f0 - swap a - ld e, a - - ld a, d - cp b - jr z, .Compatible - cp c - jr z, .Compatible - - ld a, e - cp b - jr z, .Compatible - cp c - jr z, .Compatible - -.Incompatible: - and a - ret - -.Compatible: - scf - ret -; 16f3e - -DoEggStep:: ; 16f3e - ld de, PartySpecies - ld hl, PartyMon1Happiness - ld c, 0 -.loop - ld a, [de] - inc de - cp -1 - ret z - cp EGG - jr nz, .next - dec [hl] - jr nz, .next - ld a, 1 - and a - ret - -.next - push de - ld de, PARTYMON_STRUCT_LENGTH - add hl, de - pop de - jr .loop -; 16f5e - -OverworldHatchEgg:: ; 16f5e - call RefreshScreen - call LoadStandardMenuDataHeader - call HatchEggs - call ExitAllMenus - call RestartMapMusic - jp CloseText -; 16f70 - -HatchEggs: ; 16f70 (5:6f70) - ld de, PartySpecies - ld hl, PartyMon1Happiness - xor a - ld [CurPartyMon], a - -.loop ; 16f7a (5:6f7a) - ld a, [de] - inc de - cp -1 - jp z, .done - push de - push hl - cp EGG - jp nz, .next - ld a, [hl] - and a - jp nz, .next - ld [hl], $78 - - push de - - callba SetEggMonCaughtData - callba TrainerRankings_EggsHatched - ld a, [CurPartyMon] - ld hl, PartyMon1Species - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld a, [hl] - ld [CurPartySpecies], a - dec a - call SetSeenAndCaughtMon - - ld a, [CurPartySpecies] - cp TOGEPI - jr nz, .nottogepi - ; set the event flag for hatching togepi - ld de, EVENT_TOGEPI_HATCHED - ld b, SET_FLAG - call EventFlagAction -.nottogepi - - pop de - - ld a, [CurPartySpecies] - dec de - ld [de], a - ld [wd265], a - ld [CurSpecies], a - call GetPokemonName - xor a - ld [wd26b], a - call GetBaseData - ld a, [CurPartyMon] - ld hl, PartyMon1 - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - push hl - ld bc, MON_MAXHP - add hl, bc - ld d, h - ld e, l - pop hl - push hl - ld bc, MON_LEVEL - add hl, bc - ld a, [hl] - ld [CurPartyLevel], a - pop hl - push hl - ld bc, MON_STATUS - add hl, bc - xor a - ld [hli], a - ld [hl], a - pop hl - push hl - ld bc, MON_STAT_EXP - 1 - add hl, bc - ld b, $0 - predef CalcPkmnStats - pop bc - ld hl, MON_MAXHP - add hl, bc - ld d, h - ld e, l - ld hl, MON_HP - add hl, bc - ld a, [de] - inc de - ld [hli], a - ld a, [de] - ld [hl], a - ld hl, MON_ID - add hl, bc - ld a, [PlayerID] - ld [hli], a - ld a, [PlayerID + 1] - ld [hl], a - ld a, [CurPartyMon] - ld hl, PartyMonOT - ld bc, NAME_LENGTH - call AddNTimes - ld d, h - ld e, l - ld hl, PlayerName - call CopyBytes - ld hl, .Text_HatchEgg - call PrintText - ld a, [CurPartyMon] - ld hl, PartyMonNicknames - ld bc, PKMN_NAME_LENGTH - call AddNTimes - ld d, h - ld e, l - push de - ld hl, .Text_NicknameHatchling - call PrintText - call YesNoBox - pop de - jr c, .nonickname - - ld a, $1 - ld [wd26b], a - xor a - ld [MonType], a - push de - ld b, $0 - callba NamingScreen - pop hl - ld de, StringBuffer1 - call InitName - jr .next - -.nonickname - ld hl, StringBuffer1 - ld bc, PKMN_NAME_LENGTH - call CopyBytes - -.next ; 1707d (5:707d) - ld hl, CurPartyMon - inc [hl] - pop hl - ld de, PARTYMON_STRUCT_LENGTH - add hl, de - pop de - jp .loop - -.done ; 1708a (5:708a) - ret -; 1708b (5:708b) - -.Text_HatchEgg: ; 0x1708b - ; Huh? @ @ - text_jump UnknownText_0x1c0db0 - start_asm - ld hl, VramState - res 0, [hl] - push hl - push de - push bc - ld a, [CurPartySpecies] - push af - call EggHatch_AnimationSequence - ld hl, .ClearTextbox - call PrintText - pop af - ld [CurPartySpecies], a - pop bc - pop de - pop hl - ld hl, .CameOutOfItsEgg - ret -; 170b0 (5:70b0) - -.ClearTextbox: ; 0x170b0 - ; - text_jump UnknownText_0x1c0db8 - db "@" -; 0x170b5 - -.CameOutOfItsEgg: ; 0x170b5 - ; came out of its EGG!@ @ - text_jump UnknownText_0x1c0dba - db "@" -; 0x170ba - -.Text_NicknameHatchling: ; 0x170ba - ; Give a nickname to @ ? - text_jump UnknownText_0x1c0dd8 - db "@" -; 0x170bf - -InitEggMoves: ; 170bf - call GetHeritableMoves - ld d, h - ld e, l - ld b, NUM_MOVES -.loop - ld a, [de] - and a - jr z, .done - ld hl, wEggMonMoves - ld c, NUM_MOVES -.next - ld a, [de] - cp [hl] - jr z, .skip - inc hl - dec c - jr nz, .next - call GetEggMove - jr nc, .skip - call LoadEggMove - -.skip - inc de - dec b - jr nz, .loop - -.done - ret -; 170e4 - -GetEggMove: ; 170e4 -GLOBAL EggMoves - - push bc - ld a, [wEggMonSpecies] - dec a - ld c, a - ld b, 0 - ld hl, EggMovePointers - add hl, bc - add hl, bc - ld a, BANK(EggMovePointers) - call GetFarHalfword -.loop - ld a, BANK(EggMoves) - call GetFarByte - cp -1 - jr z, .reached_end - ld b, a - ld a, [de] - cp b - jr z, .done_carry - inc hl - jr .loop - -.reached_end - call GetBreedmonMovePointer - ld b, NUM_MOVES -.loop2 - ld a, [de] - cp [hl] - jr z, .found_eggmove - inc hl - dec b - jr z, .inherit_tmhm - jr .loop2 - -.found_eggmove - ld a, [wEggMonSpecies] - dec a - ld c, a - ld b, 0 - ld hl, EvosAttacksPointers - add hl, bc - add hl, bc - ld a, BANK(EvosAttacksPointers) - call GetFarHalfword -.loop3 - ld a, BANK(EvosAttacks) - call GetFarByte - inc hl - and a - jr nz, .loop3 -.loop4 - ld a, BANK(EvosAttacks) - call GetFarByte - and a - jr z, .inherit_tmhm - inc hl - ld a, BANK(EvosAttacks) - call GetFarByte - ld b, a - ld a, [de] - cp b - jr z, .done_carry - inc hl - jr .loop4 - -.inherit_tmhm - ld hl, TMHMMoves -.loop5 - ld a, BANK(TMHMMoves) - call GetFarByte - inc hl - and a - jr z, .done - ld b, a - ld a, [de] - cp b - jr nz, .loop5 - ld [wPutativeTMHMMove], a - predef CanLearnTMHMMove - ld a, c - and a - jr z, .done - -.done_carry - pop bc - scf - ret - -.done - pop bc - and a - ret -; 17169 - -LoadEggMove: ; 17169 - push de - push bc - ld a, [de] - ld b, a - ld hl, wEggMonMoves - ld c, NUM_MOVES -.loop - ld a, [hli] - and a - jr z, .done - dec c - jr nz, .loop - ld de, wEggMonMoves - ld hl, wEggMonMoves + 1 - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - -.done - dec hl - ld [hl], b - ld hl, wEggMonMoves - ld de, wEggMonPP - predef FillPP - pop bc - pop de - ret -; 17197 - -GetHeritableMoves: ; 17197 - ld hl, wBreedMon2Moves - ld a, [wBreedMon1Species] - cp DITTO - jr z, .ditto1 - ld a, [wBreedMon2Species] - cp DITTO - jr z, .ditto2 - ld a, [wBreedMotherOrNonDitto] - and a - ret z - ld hl, wBreedMon1Moves - ret - -.ditto1 - ld a, [CurPartySpecies] - push af - ld a, [wBreedMon2Species] - ld [CurPartySpecies], a - ld a, [wBreedMon2DVs] - ld [TempMonDVs], a - ld a, [wBreedMon2DVs + 1] - ld [TempMonDVs + 1], a - ld a, TEMPMON - ld [MonType], a - predef GetGender - jr c, .inherit_mon2_moves - jr nz, .inherit_mon2_moves - jr .inherit_mon1_moves - -.ditto2 - ld a, [CurPartySpecies] - push af - ld a, [wBreedMon1Species] - ld [CurPartySpecies], a - ld a, [wBreedMon1DVs] - ld [TempMonDVs], a - ld a, [wBreedMon1DVs + 1] - ld [TempMonDVs + 1], a - ld a, TEMPMON - ld [MonType], a - predef GetGender - jr c, .inherit_mon1_moves - jr nz, .inherit_mon1_moves - -.inherit_mon2_moves - ld hl, wBreedMon2Moves - pop af - ld [CurPartySpecies], a - ret - -.inherit_mon1_moves - ld hl, wBreedMon1Moves - pop af - ld [CurPartySpecies], a - ret -; 1720b - -GetBreedmonMovePointer: ; 1720b - ld hl, wBreedMon1Moves - ld a, [wBreedMon1Species] - cp DITTO - ret z - ld a, [wBreedMon2Species] - cp DITTO - jr z, .ditto - ld a, [wBreedMotherOrNonDitto] - and a - ret z - -.ditto - ld hl, wBreedMon2Moves - ret -; 17224 - - -GetEggFrontpic: ; 17224 (5:7224) - push de - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - ld hl, BattleMonDVs - predef GetUnownLetter - pop de - predef_jump GetFrontpic - -GetHatchlingFrontpic: ; 1723c (5:723c) - push de - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - ld hl, BattleMonDVs - predef GetUnownLetter - pop de - predef_jump FrontpicPredef - -Hatch_UpdateFrontpicBGMapCenter: ; 17254 (5:7254) - push af - call WaitTop - push hl - push bc - hlcoord 0, 0 - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - ld a, " " - call ByteFill - pop bc - pop hl - ld a, b - ld [hBGMapAddress + 1], a - ld a, c - ld [hGraphicStartTile], a - lb bc, 7, 7 - predef PlaceGraphic - pop af - call Hatch_LoadFrontpicPal - call SetPalettes - jp WaitBGMap - -EggHatch_DoAnimFrame: ; 1727f (5:727f) - push hl - push de - push bc - callab PlaySpriteAnimations - call DelayFrame - pop bc - pop de - pop hl - ret - -EggHatch_AnimationSequence: ; 1728f (5:728f) - ld a, [wd265] - ld [wJumptableIndex], a - ld a, [CurSpecies] - push af - ld de, MUSIC_NONE - call PlayMusic - callba BlankScreen - call DisableLCD - ld hl, EggHatchGFX - ld de, VTiles0 tile $00 - ld bc, $20 - ld a, BANK(EggHatchGFX) - call FarCopyBytes - callba ClearSpriteAnims - ld de, VTiles2 tile $00 - ld a, [wJumptableIndex] - call GetHatchlingFrontpic - ld de, VTiles2 tile $31 - ld a, EGG - call GetEggFrontpic - ld de, MUSIC_EVOLUTION - call PlayMusic - call EnableLCD - hlcoord 7, 4 - ld b, VBGMap0 / $100 - ld c, $31 ; Egg tiles start here - ld a, EGG - call Hatch_UpdateFrontpicBGMapCenter - ld c, 80 - call DelayFrames - xor a - ld [wcf64], a - ld a, [hSCX] - ld b, a -.outerloop - ld hl, wcf64 - ld a, [hl] - inc [hl] - cp 8 - jr nc, .done - ld e, [hl] -.loop -; wobble e times - ld a, 2 - ld [hSCX], a - ld a, -2 - ld [wGlobalAnimXOffset], a - call EggHatch_DoAnimFrame - ld c, 2 - call DelayFrames - ld a, -2 - ld [hSCX], a - ld a, 2 - ld [wGlobalAnimXOffset], a - call EggHatch_DoAnimFrame - ld c, 2 - call DelayFrames - dec e - jr nz, .loop - ld c, 16 - call DelayFrames - call EggHatch_CrackShell - jr .outerloop - -.done - ld de, SFX_EGG_HATCH - call PlaySFX - xor a - ld [hSCX], a - ld [wGlobalAnimXOffset], a - call ClearSprites - call Hatch_InitShellFragments - hlcoord 6, 3 - ld b, VBGMap0 / $100 - ld c, $00 ; Hatchling tiles start here - ld a, [wJumptableIndex] - call Hatch_UpdateFrontpicBGMapCenter - call Hatch_ShellFragmentLoop - call WaitSFX - ld a, [wJumptableIndex] - ld [CurPartySpecies], a - hlcoord 6, 3 - ld d, $0 - ld e, ANIM_MON_HATCH - predef AnimateFrontpic - pop af - ld [CurSpecies], a - ret - -Hatch_LoadFrontpicPal: ; 17363 (5:7363) - ld [PlayerHPPal], a - ld b, SCGB_EVOLUTION - ld c, $0 - jp GetSGBLayout - -EggHatch_CrackShell: ; 1736d (5:736d) - ld a, [wcf64] - dec a - and $7 - cp $7 - ret z - srl a - ret nc - swap a - srl a - add 9 * 8 + 4 - ld d, a - ld e, 11 * 8 - ld a, SPRITE_ANIM_INDEX_EGG_CRACK - call _InitSpriteAnimStruct - ld hl, SPRITEANIMSTRUCT_TILE_ID - add hl, bc - ld [hl], $0 - ld de, SFX_EGG_CRACK - jp PlaySFX -; 17393 (5:7393) - -EggHatchGFX: ; 17393 -INCBIN "gfx/evo/egg_hatch.2bpp" -; 173b3 - -Hatch_InitShellFragments: ; 173b3 (5:73b3) - callba ClearSpriteAnims - ld hl, .SpriteData -.loop - ld a, [hli] - cp -1 - jr z, .done - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - push hl - push bc - - ld a, SPRITE_ANIM_INDEX_EGG_HATCH - call _InitSpriteAnimStruct - - ld hl, SPRITEANIMSTRUCT_TILE_ID - add hl, bc - ld [hl], $0 - - pop de - ld a, e - ld hl, SPRITEANIMSTRUCT_FRAMESET_ID - add hl, bc - add [hl] - ld [hl], a - - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - ld [hl], d - - pop hl - jr .loop -.done - ld de, SFX_EGG_HATCH - call PlaySFX - call EggHatch_DoAnimFrame - ret -; 173ef (5:73ef) - -.SpriteData: ; 173ef -; Probably OAM. - dsprite 10, 4, 9, 0, $00, $3c - dsprite 11, 4, 9, 0, $01, $04 - dsprite 10, 4, 10, 0, $00, $30 - dsprite 11, 4, 10, 0, $01, $10 - dsprite 10, 4, 11, 0, $02, $24 - dsprite 11, 4, 11, 0, $03, $1c - dsprite 10, 0, 9, 4, $00, $36 - dsprite 12, 0, 9, 4, $01, $0a - dsprite 10, 0, 10, 4, $02, $2a - dsprite 12, 0, 10, 4, $03, $16 - db -1 -; 17418 - -Hatch_ShellFragmentLoop: ; 17418 (5:7418) - ld c, 129 -.loop - call EggHatch_DoAnimFrame - dec c - jr nz, .loop - ret - -Special_DayCareMon1: ; 17421 - ld hl, DayCareMon1Text - call PrintText - ld a, [wBreedMon1Species] - call PlayCry - ld a, [wDayCareLady] - bit 0, a - jr z, DayCareMonCursor - call ButtonSound - ld hl, wBreedMon2Nick - call DayCareMonCompatibilityText - jp PrintText - -Special_DayCareMon2: ; 17440 - ld hl, DayCareMon2Text - call PrintText - ld a, [wBreedMon2Species] - call PlayCry - ld a, [wDayCareMan] - bit 0, a - jr z, DayCareMonCursor - call ButtonSound - ld hl, wBreedMon1Nick - call DayCareMonCompatibilityText - jp PrintText - -DayCareMonCursor: ; 1745f - jp WaitPressAorB_BlinkCursor -; 17462 - -DayCareMon2Text: ; 0x17462 - ; It's @ that was left with the DAY-CARE LADY. - text_jump UnknownText_0x1c0df3 - db "@" -; 0x17467 - -DayCareMon1Text: ; 0x17467 - ; It's @ that was left with the DAY-CARE MAN. - text_jump UnknownText_0x1c0e24 - db "@" -; 0x1746c - -DayCareMonCompatibilityText: ; 1746c - push bc - ld de, StringBuffer1 - ld bc, NAME_LENGTH - call CopyBytes - call CheckBreedmonCompatibility - pop bc - ld a, [wd265] - ld hl, .AllAlone - cp -1 - jr z, .done - ld hl, .Incompatible - and a - jr z, .done - ld hl, .HighCompatibility - cp 230 - jr nc, .done - cp 70 - ld hl, .ModerateCompatibility - jr nc, .done - ld hl, .SlightCompatibility - -.done - ret -; 1749c - -.AllAlone: ; 0x1749c - ; It's brimming with energy. - text_jump UnknownText_0x1c0e54 - db "@" -; 0x174a1 - -.Incompatible: ; 0x174a1 - ; It has no interest in @ . - text_jump UnknownText_0x1c0e6f - db "@" -; 0x174a6 - -.HighCompatibility: ; 0x174a6 - ; It appears to care for @ . - text_jump UnknownText_0x1c0e8d - db "@" -; 0x174ab - -.ModerateCompatibility: ; 0x174ab - ; It's friendly with @ . - text_jump UnknownText_0x1c0eac - db "@" -; 0x174b0 - -.SlightCompatibility: ; 0x174b0 - ; It shows interest in @ . - text_jump UnknownText_0x1c0ec6 - db "@" -; 0x174b5 - -DayCareMonPrintEmptyString: ; 174b5 -; unreferenced - ld hl, .string - ret -; 174b9 - -.string ; 174b9 - db "@" -; 174ba - diff --git a/engine/cgb_layouts.asm b/engine/cgb_layouts.asm new file mode 100644 index 000000000..7ede2768f --- /dev/null +++ b/engine/cgb_layouts.asm @@ -0,0 +1,1127 @@ +; Replaces the functionality of sgb.asm to work with CGB hardware. + +CheckCGB: ; 8d55 + ld a, [hCGB] + and a + ret +; 8d59 + +Predef_LoadSGBLayoutCGB: ; 8d59 + ld a, b + cp SCGB_RAM + jr nz, .not_ram + ld a, [SGBPredef] +.not_ram + cp SCGB_PARTY_MENU_HP_PALS + jp z, CGB_ApplyPartyMenuHPPals + call ResetBGPals + ld l, a + ld h, 0 + add hl, hl + ld de, .dw + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .ReturnFromJumpTable + push de + jp hl +; 8d79 + +.ReturnFromJumpTable: ; 8d79 + ret +; 8d7a + +.dw ; 8d7a + dw _CGB_BattleGrayscale + dw _CGB_BattleColors + dw _CGB_PokegearPals + dw _CGB_StatsScreenHPPals + dw _CGB_Pokedex + dw _CGB_SlotMachine + dw _CGB06 + dw _CGB07 + dw _CGB_Diploma + dw _CGB_MapPals + dw _CGB_PartyMenu + dw _CGB_Evolution + dw _CGB0c + dw _CGB0d + dw _CGB_MoveList + dw _CGB0f + dw _CGB_PokedexSearchOption + dw _CGB11 + dw _CGB_Pokepic + dw _CGB13 + dw _CGB_PackPals + dw _CGB_TrainerCard + dw _CGB_PokedexUnownMode + dw _CGB_BillsPC + dw _CGB_UnownPuzzle + dw _CGB_GamefreakLogo ; called before copyright + dw _CGB_PlayerOrMonFrontpicPals + dw _CGB_TradeTube + dw _CGB_TrainerOrMonFrontpicPals + dw _CGB_MysteryGift + dw _CGB1e +; 8db8 + +_CGB_BattleGrayscale: ; 8db8 + ld hl, PalPacket_9c66 + 1 + ld de, UnknBGPals + ld c, 4 + call CopyPalettes + ld hl, PalPacket_9c66 + 1 + ld de, UnknBGPals palette PAL_BATTLE_BG_EXP + ld c, 4 + call CopyPalettes + ld hl, PalPacket_9c66 + 1 + ld de, UnknOBPals + ld c, 2 + call CopyPalettes + jr _CGB_FinishBattleScreenLayout + +_CGB_BattleColors: ; 8ddb + ld de, UnknBGPals + call GetBattlemonBackpicPalettePointer + push hl + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_PLAYER + call GetEnemyFrontpicPalettePointer + push hl + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_ENEMY + ld a, [EnemyHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, Palettes_a8be + add hl, bc + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_ENEMY_HP + ld a, [PlayerHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, Palettes_a8be + add hl, bc + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_PLAYER_HP + ld hl, Palettes_a8ca + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_EXP + ld de, UnknOBPals + pop hl + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_OB_ENEMY + pop hl + call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_OB_PLAYER + ld a, SCGB_BATTLE_COLORS + ld [SGBPredef], a + call ApplyPals +_CGB_FinishBattleScreenLayout: ; 8e23 + call InitPartyMenuBGPal7 + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, PAL_BATTLE_BG_ENEMY_HP + call ByteFill + hlcoord 0, 4, AttrMap + lb bc, 8, 10 + ld a, PAL_BATTLE_BG_PLAYER + call FillBoxCGB + hlcoord 10, 0, AttrMap + lb bc, 7, 10 + ld a, PAL_BATTLE_BG_ENEMY + call FillBoxCGB + hlcoord 0, 0, AttrMap + lb bc, 4, 10 + ld a, PAL_BATTLE_BG_ENEMY_HP + call FillBoxCGB + hlcoord 10, 7, AttrMap + lb bc, 5, 10 + ld a, PAL_BATTLE_BG_PLAYER_HP + call FillBoxCGB + hlcoord 10, 11, AttrMap + lb bc, 1, 9 + ld a, PAL_BATTLE_BG_EXP + call FillBoxCGB + hlcoord 0, 12, AttrMap + ld bc, 6 * SCREEN_WIDTH + ld a, PAL_BATTLE_BG_TEXT + call ByteFill + ld hl, Palettes_979c + ld de, UnknOBPals palette PAL_BATTLE_OB_GRAY + ld bc, 6 palettes + ld a, $5 + call FarCopyWRAM + call ApplyAttrMap + ret +; 8e85 + + +InitPartyMenuBGPal7: ; 8e85 + callba Function100dc0 +Mobile_InitPartyMenuBGPal7: ; 8e8b + ld hl, Palette_b311 + jr nc, .not_mobile + ld hl, Palette_b309 +.not_mobile + ld de, UnknBGPals palette 7 + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + ret +; 8e9f + +InitPartyMenuBGPal0: ; 8e9f + callba Function100dc0 + ld hl, Palette_b311 + jr nc, .not_mobile + ld hl, Palette_b309 +.not_mobile + ld de, UnknBGPals palette 0 + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + ret +; 8eb9 + +_CGB_PokegearPals: ; 8eb9 + ld a, [PlayerGender] + bit 0, a + jr z, .male + ld hl, FemalePokegearPals + jr .got_pals + +.male + ld hl, MalePokegearPals +.got_pals + ld de, UnknBGPals + ld bc, 6 palettes + ld a, $5 + call FarCopyWRAM + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8edb + +_CGB_StatsScreenHPPals: ; 8edb + ld de, UnknBGPals + ld a, [wCurHPPal] + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld bc, Palettes_a8be + add hl, bc + call LoadPalette_White_Col1_Col2_Black ; hp palette + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + call LoadPalette_White_Col1_Col2_Black ; mon palette + ld hl, Palettes_a8ca + call LoadPalette_White_Col1_Col2_Black ; exp palette + ld hl, StatsScreenPagePals + ld de, UnknBGPals palette 3 + ld bc, 3 palettes ; pink, green, and blue page palettes + ld a, $5 + call FarCopyWRAM + call WipeAttrMap + + hlcoord 0, 0, AttrMap + lb bc, 8, SCREEN_WIDTH + ld a, $1 ; mon palette + call FillBoxCGB + + hlcoord 10, 16, AttrMap + ld bc, 10 + ld a, $2 ; exp palette + call ByteFill + + hlcoord 13, 5, AttrMap + lb bc, 2, 2 + ld a, $3 ; pink page palette + call FillBoxCGB + + hlcoord 15, 5, AttrMap + lb bc, 2, 2 + ld a, $4 ; green page palette + call FillBoxCGB + + hlcoord 17, 5, AttrMap + lb bc, 2, 2 + ld a, $5 ; blue page palette + call FillBoxCGB + + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8f52 + +StatsScreenPagePals: ; 8f52 +; pink + RGB 31, 31, 31 + RGB 31, 19, 31 + RGB 31, 15, 31 + RGB 00, 00, 00 +; green + RGB 31, 31, 31 + RGB 21, 31, 14 + RGB 17, 31, 00 + RGB 00, 00, 00 +; blue + RGB 31, 31, 31 + RGB 17, 31, 31 + RGB 17, 31, 31 + RGB 00, 00, 00 +; 8f6a + +StatsScreenPals: ; 8f6a +; pink + RGB 31, 19, 31 +; green + RGB 21, 31, 14 +; blue + RGB 17, 31, 31 +; 8f70 + +_CGB_Pokedex: ; 8f70 + ld de, UnknBGPals + ld a, $1d + call GetPredefPal + call LoadHLPaletteIntoDE ; dex interface palette + ld a, [CurPartySpecies] + cp $ff + jr nz, .is_pokemon + ld hl, .PokedexQuestionMarkPalette + call LoadHLPaletteIntoDE ; green question mark palette + jr .got_palette + +.is_pokemon + call GetMonPalettePointer_ + call LoadPalette_White_Col1_Col2_Black ; mon palette +.got_palette + call WipeAttrMap + hlcoord 1, 1, AttrMap + lb bc, 7, 7 + ld a, $1 ; green question mark palette + call FillBoxCGB + call InitPartyMenuOBPals + ld hl, .PokedexCursorPalette + ld de, UnknOBPals palette 7 ; green cursor palette + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 8fba + +.PokedexQuestionMarkPalette: ; 8fba + RGB 11, 23, 00 + RGB 07, 17, 00 + RGB 06, 16, 03 + RGB 05, 12, 01 + +.PokedexCursorPalette: ; 8fc2 + RGB 00, 00, 00 + RGB 11, 23, 00 + RGB 07, 17, 00 + RGB 00, 00, 00 +; 8fca + +_CGB_BillsPC: ; 8fca + ld de, UnknBGPals + ld a, $1d + call GetPredefPal + call LoadHLPaletteIntoDE + ld a, [CurPartySpecies] + cp $ff + jr nz, .GetMonPalette + ld hl, .BillsPCOrangePalette + call LoadHLPaletteIntoDE + jr .Resume + +.GetMonPalette: + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + call LoadPalette_White_Col1_Col2_Black +.Resume: + call WipeAttrMap + hlcoord 1, 4, AttrMap + lb bc, 7, 7 + ld a, $1 + call FillBoxCGB + call InitPartyMenuOBPals + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9009 + +.Function9009: ; 9009 + ld hl, .BillsPCOrangePalette + call LoadHLPaletteIntoDE + jr .asm_901a + +.unused + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + call LoadPalette_White_Col1_Col2_Black +.asm_901a + call WipeAttrMap + hlcoord 1, 1, AttrMap + lb bc, 7, 7 + ld a, $1 + call FillBoxCGB + call InitPartyMenuOBPals + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9036 + +.BillsPCOrangePalette: ; 9036 + RGB 31, 15, 00 + RGB 23, 12, 00 + RGB 15, 07, 00 + RGB 00, 00, 00 +; 903e + +_CGB_PokedexUnownMode: ; 903e + ld de, UnknBGPals + ld a, $1d + call GetPredefPal + call LoadHLPaletteIntoDE + ld a, [CurPartySpecies] + call GetMonPalettePointer_ + call LoadPalette_White_Col1_Col2_Black + call WipeAttrMap + hlcoord 7, 5, AttrMap + lb bc, 7, 7 + ld a, $1 + call FillBoxCGB + call InitPartyMenuOBPals + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 906e + +_CGB_SlotMachine: ; 906e + ld hl, SlotMachinePals + ld de, UnknBGPals + ld bc, 16 palettes + ld a, $5 + call FarCopyWRAM + call WipeAttrMap + hlcoord 0, 2, AttrMap + lb bc, 10, 3 + ld a, $2 + call FillBoxCGB + hlcoord 17, 2, AttrMap + lb bc, 10, 3 + ld a, $2 + call FillBoxCGB + hlcoord 0, 4, AttrMap + lb bc, 6, 3 + ld a, $3 + call FillBoxCGB + hlcoord 17, 4, AttrMap + lb bc, 6, 3 + ld a, $3 + call FillBoxCGB + hlcoord 0, 6, AttrMap + lb bc, 2, 3 + ld a, $4 + call FillBoxCGB + hlcoord 17, 6, AttrMap + lb bc, 2, 3 + ld a, $4 + call FillBoxCGB + hlcoord 4, 2, AttrMap + lb bc, 2, 12 + ld a, $1 + call FillBoxCGB + hlcoord 3, 2, AttrMap + lb bc, 10, 1 + ld a, $1 + call FillBoxCGB + hlcoord 16, 2, AttrMap + lb bc, 10, 1 + ld a, $1 + call FillBoxCGB + hlcoord 0, 12, AttrMap + ld bc, $78 + ld a, $7 + call ByteFill + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 90f8 + +_CGB06: ; 90f8 + ld hl, PalPacket_9ca6 + 1 + call CopyFourPalettes + call WipeAttrMap + ld de, UnknOBPals + ld a, $3c + call GetPredefPal + call LoadHLPaletteIntoDE + hlcoord 0, 6, AttrMap + lb bc, 12, SCREEN_WIDTH + ld a, $1 + call FillBoxCGB + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9122 + +_CGB07: ; 9122 + ld b, 0 + ld hl, .Jumptable + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 912d + +.Jumptable: ; 912d + dw .Function9133 + dw .Function9166 + dw .Function9180 +; 9133 + +.Function9133: ; 9133 + ld hl, .Palette_914e + ld de, UnknBGPals + call LoadHLPaletteIntoDE + ld hl, .Palette_9156 + ld de, UnknOBPals + ld bc, 2 palettes + ld a, $5 + call FarCopyWRAM + call WipeAttrMap + ret +; 914e + +.Palette_914e: ; 914e + RGB 19, 31, 19 + RGB 18, 23, 31 + RGB 11, 21, 28 + RGB 04, 16, 24 + +.Palette_9156: ; 9156 + RGB 29, 29, 29 + RGB 20, 19, 20 + RGB 19, 06, 04 + RGB 03, 04, 06 + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 00, 00 + RGB 03, 04, 06 +; 9166 + +.Function9166: ; 9166 + ld de, UnknBGPals + ld a, $38 + call GetPredefPal + call LoadHLPaletteIntoDE + + ld de, UnknOBPals + ld a, $39 + call GetPredefPal + call LoadHLPaletteIntoDE + call WipeAttrMap + ret +; 9180 + +.Function9180: ; 9180 + ld hl, PalPacket_9c36 + 1 + call CopyFourPalettes + ld de, UnknOBPals + ld a, $3a + call GetPredefPal + call LoadHLPaletteIntoDE + call WipeAttrMap + ret +; 9195 + +_CGB11: ; 9195 + ld hl, Palettes_b789 + ld de, UnknBGPals + ld bc, 5 palettes + ld a, $5 + call FarCopyWRAM + call ApplyPals + call WipeAttrMap + call ApplyAttrMap + ret +; 91ad + +_CGB_Diploma: ; 91ad + ld hl, DiplomaPalettes + ld de, UnknBGPals + ld bc, 16 palettes + ld a, $5 + call FarCopyWRAM + + ld hl, PalPacket_9cb6 + 1 + call CopyFourPalettes + call WipeAttrMap + call ApplyAttrMap + ret +; 91c8 + +_CGB_MapPals: ; 91c8 + call LoadMapPals + ld a, SCGB_MAPPALS + ld [SGBPredef], a + ret +; 91d1 + +_CGB_PartyMenu: ; 91d1 + ld hl, PalPacket_9c56 + 1 + call CopyFourPalettes + call InitPartyMenuBGPal0 + call InitPartyMenuBGPal7 + call InitPartyMenuOBPals + call ApplyAttrMap + ret +; 91e4 + +_CGB_Evolution: ; 91e4 + ld de, UnknBGPals + ld a, c + and a + jr z, .pokemon + ld a, $1a + call GetPredefPal + call LoadHLPaletteIntoDE + jr .got_palette + +.pokemon + ld hl, PartyMon1DVs + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call GetPlayerOrMonPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld hl, Palettes_979c + ld de, UnknOBPals palette 2 + ld bc, 6 palettes + ld a, $5 + call FarCopyWRAM + +.got_palette + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9228 + +_CGB0c: ; 9228 + ld hl, Palettes_b6f1 + ld de, UnknBGPals + ld bc, 5 palettes + ld a, $5 + call FarCopyWRAM + ld hl, Palettes_b719 + ld de, UnknOBPals + ld bc, 2 palettes + ld a, $5 + call FarCopyWRAM + ld a, SCGB_DIPLOMA + ld [SGBPredef], a + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9251 + +_CGB0d: ; 9251 + ld hl, PalPacket_9cb6 + 1 + call CopyFourPalettes + call WipeAttrMap + call ApplyAttrMap + ret +; 925e + +_CGB_UnownPuzzle: ; 925e + ld hl, PalPacket_9bc6 + 1 + call CopyFourPalettes + ld de, UnknOBPals + ld a, $4c + call GetPredefPal + call LoadHLPaletteIntoDE + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, UnknOBPals + ld a, $1f + ld [hli], a + ld a, $0 + ld [hl], a + pop af + ld [rSVBK], a + call WipeAttrMap + call ApplyAttrMap + ret +; 9289 + +_CGB_TrainerCard: ; 9289 + ld de, UnknBGPals + xor a ; CHRIS + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, FALKNER ; KRIS + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, BUGSY + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, WHITNEY + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, MORTY + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, CHUCK + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, JASMINE + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, PRYCE + call GetTrainerPalettePointer + call LoadPalette_White_Col1_Col2_Black + ld a, $24 + call GetPredefPal + call LoadHLPaletteIntoDE + + ; fill screen with opposite-gender palette for the card border + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, [PlayerGender] + and a + ld a, $1 ; kris + jr z, .got_gender + ld a, $0 ; chris +.got_gender + call ByteFill + ; fill trainer sprite area with same-gender palette + hlcoord 14, 1, AttrMap + lb bc, 7, 5 + ld a, [PlayerGender] + and a + ld a, $0 ; chris + jr z, .got_gender2 + ld a, $1 ; kris +.got_gender2 + call FillBoxCGB + ; top-right corner still uses the border's palette + hlcoord 18, 1, AttrMap + ld [hl], $1 + hlcoord 2, 11, AttrMap + lb bc, 2, 4 + ld a, $1 ; falkner + call FillBoxCGB + hlcoord 6, 11, AttrMap + lb bc, 2, 4 + ld a, $2 ; bugsy + call FillBoxCGB + hlcoord 10, 11, AttrMap + lb bc, 2, 4 + ld a, $3 ; whitney + call FillBoxCGB + hlcoord 14, 11, AttrMap + lb bc, 2, 4 + ld a, $4 ; morty + call FillBoxCGB + hlcoord 2, 14, AttrMap + lb bc, 2, 4 + ld a, $5 ; chuck + call FillBoxCGB + hlcoord 6, 14, AttrMap + lb bc, 2, 4 + ld a, $6 ; jasmine + call FillBoxCGB + hlcoord 10, 14, AttrMap + lb bc, 2, 4 + ld a, $7 ; pryce + call FillBoxCGB + ; clair uses kris's palette + ld a, [PlayerGender] + and a + push af + jr z, .got_gender3 + hlcoord 14, 14, AttrMap + lb bc, 2, 4 + ld a, $1 + call FillBoxCGB +.got_gender3 + pop af + ld c, $0 + jr nz, .got_gender4 + inc c +.got_gender4 + ld a, c + hlcoord 18, 1, AttrMap + ld [hl], a + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9373 + +_CGB_MoveList: ; 9373 + ld de, UnknBGPals + ld a, $10 + call GetPredefPal + call LoadHLPaletteIntoDE + ld a, [PlayerHPPal] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld bc, Palettes_a8be + add hl, bc + call LoadPalette_White_Col1_Col2_Black + call WipeAttrMap + hlcoord 11, 1, AttrMap + lb bc, 2, 9 + ld a, $1 + call FillBoxCGB + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93a6 + +_CGB0f: ; 93a6 + ld hl, PalPacket_9c46 + 1 + call CopyFourPalettes + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93ba + +_CGB_PokedexSearchOption: ; 93ba + ld de, UnknBGPals + ld a, $1d + call GetPredefPal + call LoadHLPaletteIntoDE + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 93d3 + +_CGB_PackPals: ; 93d3 +; pack pals + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jr z, .tutorial_male + + ld a, [PlayerGender] + bit 0, a + jr z, .tutorial_male + + ld hl, .KrisPackPals + jr .got_gender + +.tutorial_male + ld hl, .ChrisPackPals + +.got_gender + ld de, UnknBGPals + ld bc, 8 palettes ; 6 palettes? + ld a, $5 + call FarCopyWRAM + call WipeAttrMap + hlcoord 0, 0, AttrMap + lb bc, 1, 10 + ld a, $1 + call FillBoxCGB + hlcoord 10, 0, AttrMap + lb bc, 1, 10 + ld a, $2 + call FillBoxCGB + hlcoord 7, 2, AttrMap + lb bc, 9, 1 + ld a, $3 + call FillBoxCGB + hlcoord 0, 7, AttrMap + lb bc, 3, 5 + ld a, $4 + call FillBoxCGB + hlcoord 0, 3, AttrMap + lb bc, 3, 5 + ld a, $5 + call FillBoxCGB + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 9439 + +.ChrisPackPals: ; 9439 + RGB 31, 31, 31 + RGB 15, 15, 31 + RGB 00, 00, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 15, 15, 31 + RGB 00, 00, 31 + RGB 00, 00, 00 + + RGB 31, 11, 31 + RGB 15, 15, 31 + RGB 00, 00, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 15, 15, 31 + RGB 00, 00, 31 + RGB 31, 00, 00 + + RGB 31, 31, 31 + RGB 15, 15, 31 + RGB 31, 00, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 07, 19, 07 + RGB 07, 19, 07 + RGB 00, 00, 00 +; 9469 + +.KrisPackPals: ; 9469 + RGB 31, 31, 31 + RGB 31, 14, 31 + RGB 31, 07, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 14, 31 + RGB 31, 07, 31 + RGB 00, 00, 00 + + RGB 15, 15, 31 + RGB 31, 14, 31 + RGB 31, 07, 31 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 31, 14, 31 + RGB 31, 07, 31 + RGB 31, 00, 00 + + RGB 31, 31, 31 + RGB 31, 14, 31 + RGB 31, 00, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 07, 19, 07 + RGB 07, 19, 07 + RGB 00, 00, 00 +; 9499 + +_CGB_Pokepic: ; 9499 + call _CGB_MapPals + ld de, SCREEN_WIDTH + hlcoord 0, 0, AttrMap + ld a, [wMenuBorderTopCoord] +.loop + and a + jr z, .found_top + dec a + add hl, de + jr .loop + +.found_top + ld a, [wMenuBorderLeftCoord] + ld e, a + ld d, $0 + add hl, de + ld a, [wMenuBorderTopCoord] + ld b, a + ld a, [wMenuBorderBottomCoord] + inc a + sub b + ld b, a + ld a, [wMenuBorderLeftCoord] + ld c, a + ld a, [wMenuBorderRightCoord] + sub c + inc a + ld c, a + ld a, $0 + call FillBoxCGB + call ApplyAttrMap + ret +; 94d0 + +_CGB13: ; 94d0 + ld hl, PalPacket_9ba6 + 1 + call CopyFourPalettes + call WipeAttrMap + hlcoord 0, 4, AttrMap + lb bc, 10, SCREEN_WIDTH + ld a, $2 + call FillBoxCGB + hlcoord 0, 6, AttrMap + lb bc, 6, SCREEN_WIDTH + ld a, $1 + call FillBoxCGB + call ApplyAttrMap + call ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 94fa + +_CGB_GamefreakLogo: ; 94fa + ld de, UnknBGPals + ld a, $4e + call GetPredefPal + call LoadHLPaletteIntoDE + ld hl, .Palette + ld de, UnknOBPals + call LoadHLPaletteIntoDE + ld hl, .Palette + ld de, UnknOBPals palette 1 + call LoadHLPaletteIntoDE + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ret +; 9521 + +.Palette: ; 9521 + RGB 31, 31, 31 + RGB 13, 11, 00 + RGB 23, 12, 28 + RGB 00, 00, 00 +; 9529 + +_CGB_PlayerOrMonFrontpicPals: ; 9529 + ld de, UnknBGPals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + call LoadPalette_White_Col1_Col2_Black + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ret +; 9542 + +_CGB1e: ; 9542 + ld de, UnknBGPals + ld a, [CurPartySpecies] + call GetMonPalettePointer_ + call LoadPalette_White_Col1_Col2_Black + call WipeAttrMap + call ApplyAttrMap + ret +; 9555 + +_CGB_TradeTube: ; 9555 + ld hl, PalPacket_9cc6 + 1 + call CopyFourPalettes + ld hl, Palettes_b681 + ld de, UnknOBPals + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + ld de, UnknOBPals palette 7 + ld a, $1c + call GetPredefPal + call LoadHLPaletteIntoDE + call WipeAttrMap + ret +; 9578 + +_CGB_TrainerOrMonFrontpicPals: ; 9578 + ld de, UnknBGPals + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetFrontpicPalettePointer + call LoadPalette_White_Col1_Col2_Black + call WipeAttrMap + call ApplyAttrMap + call ApplyPals + ret +; 9591 + +_CGB_MysteryGift: ; 9591 + ld hl, .Palettes + ld de, UnknBGPals + ld bc, 2 palettes + ld a, $5 + call FarCopyWRAM + call ApplyPals + call WipeAttrMap + hlcoord 3, 7, AttrMap + lb bc, 8, 14 + ld a, $1 + call FillBoxCGB + hlcoord 1, 5, AttrMap + lb bc, 1, 18 + ld a, $1 + call FillBoxCGB + hlcoord 1, 16, AttrMap + lb bc, 1, 18 + ld a, $1 + call FillBoxCGB + hlcoord 0, 0, AttrMap + lb bc, 17, 2 + ld a, $1 + call FillBoxCGB + hlcoord 18, 5, AttrMap + lb bc, 12, 1 + ld a, $1 + call FillBoxCGB + call ApplyAttrMap + ret +; 95e0 + +.Palettes: ; 95e0 + RGB 31, 31, 31 + RGB 16, 31, 14 + RGB 05, 14, 21 + RGB 05, 13, 10 + + RGB 31, 31, 31 + RGB 11, 21, 25 + RGB 05, 14, 21 + RGB 00, 03, 19 +; 95f0 diff --git a/engine/color.asm b/engine/color.asm index add8c24ac..e339b30be 100644 --- a/engine/color.asm +++ b/engine/color.asm @@ -1,5 +1,4 @@ -PALPACKET_LENGTH EQU $10 -INCLUDE "predef/sgb.asm" +INCLUDE "engine/sgb_layouts.asm" SHINY_ATK_BIT EQU 5 SHINY_DEF_VAL EQU 10 @@ -500,7 +499,7 @@ LoadMailPalettes: RGB 00, 21, 00 RGB 00, 00, 00 -INCLUDE "predef/cgb.asm" +INCLUDE "engine/cgb_layouts.asm" Function95f0: ; XXX @@ -2027,13 +2026,13 @@ Palette_b311: ; b311 not mobile RGB 00, 00, 00 TilesetBGPalette: -INCLUDE "tilesets/bg.pal" +INCLUDE "data/palettes/bg.pal" MapObjectPals:: -INCLUDE "tilesets/ob.pal" +INCLUDE "data/palettes/ob.pal" RoofPals: -INCLUDE "tilesets/roof.pal" +INCLUDE "data/palettes/roof.pal" DiplomaPalettes: RGB 27, 31, 27 diff --git a/engine/crystal_colors.asm b/engine/crystal_colors.asm new file mode 100755 index 000000000..125fee8bc --- /dev/null +++ b/engine/crystal_colors.asm @@ -0,0 +1,614 @@ +GetMysteryGift_MobileAdapterLayout: ; 4930f (mobile) + ld a, b + cp SCGB_RAM + jr nz, .not_ram + ld a, [SGBPredef] +.not_ram + push af + callba ResetBGPals + pop af + ld l, a + ld h, 0 + add hl, hl + ld de, .dw + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .done + push de + jp hl +.done + ret +; 49330 (12:5330) + +.dw ; 49330 + + dw MG_Mobile_Layout00 + dw MG_Mobile_Layout01 + dw MG_Mobile_Layout02 +; 49336 + +MG_Mobile_Layout_FillBox: ; 49336 +.row + push bc + push hl +.col + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret +; 49346 + +MG_Mobile_Layout_WipeAttrMap: ; 49346 (12:5346) + hlcoord 0, 0, AttrMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + xor a + call ByteFill + ret + +MG_Mobile_Layout_LoadPals: ; 49351 (12:5351) + ld de, UnknBGPals + ld hl, Palette_493e1 + ld bc, 5 palettes + ld a, $5 ; BANK(UnknBGPals) + call FarCopyWRAM + ld de, UnknBGPals + 7 palettes + ld hl, Palette_TextBG7 + ld bc, 1 palettes + ld a, $5 ; BANK(UnknBGPals) + call FarCopyWRAM + ret + +MG_Mobile_Layout00: ; 4936e (12:536e) + call MG_Mobile_Layout_LoadPals + call MG_Mobile_Layout_WipeAttrMap + call MG_Mobile_Layout_CreatePalBoxes + callba ApplyAttrMap + callba ApplyPals + ret + +MG_Mobile_Layout_CreatePalBoxes: ; 49384 (12:5384) + hlcoord 0, 0, AttrMap + lb bc, 4, 1 + ld a, $1 + call MG_Mobile_Layout_FillBox + lb bc, 2, 1 + ld a, $2 + call MG_Mobile_Layout_FillBox + lb bc, 6, 1 + ld a, $3 + call MG_Mobile_Layout_FillBox + hlcoord 1, 0, AttrMap + ld a, $1 + lb bc, 3, 18 + call MG_Mobile_Layout_FillBox + lb bc, 2, 18 + ld a, $2 + call MG_Mobile_Layout_FillBox + lb bc, 12, 18 + ld a, $3 + call MG_Mobile_Layout_FillBox + hlcoord 19, 0, AttrMap + lb bc, 4, 1 + ld a, $1 + call MG_Mobile_Layout_FillBox + lb bc, 2, 1 + ld a, $2 + call MG_Mobile_Layout_FillBox + lb bc, 6, 1 + ld a, $3 + call MG_Mobile_Layout_FillBox + hlcoord 0, 12, AttrMap + ld bc, 6 * SCREEN_WIDTH + ld a, $7 + call ByteFill + ret +; 493e1 (12:53e1) + +Palette_493e1: ; 493e1 + RGB 03, 07, 09 + RGB 26, 31, 00 + RGB 20, 16, 03 + RGB 31, 31, 31 + + RGB 13, 24, 29 + RGB 11, 16, 30 + RGB 07, 11, 22 + RGB 05, 06, 18 + + RGB 31, 31, 31 + RGB 20, 26, 31 + RGB 13, 24, 29 + RGB 11, 16, 30 + + RGB 31, 31, 31 + RGB 20, 26, 31 + RGB 00, 00, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 20, 16, 08 + RGB 31, 00, 00 + RGB 00, 00, 00 +; 49409 + +LoadOW_BGPal7:: ; 49409 + ld hl, Palette_TextBG7 + ld de, UnknBGPals + 8 * 7 + ld bc, 8 + ld a, $5 + call FarCopyWRAM + ret +; 49418 + +Palette_TextBG7: ; 49418 + RGB 31, 31, 31 + RGB 08, 19, 28 + RGB 05, 05, 16 + RGB 00, 00, 00 +; 49420 + +Function49420:: ; 49420 (12:5420) + ld hl, MansionPalette4 + ld de, UnknBGPals + $30 + ld bc, $8 + ld a, $5 ; BANK(UnknBGPals) + call FarCopyWRAM + ret +; 4942f (12:542f) + +MG_Mobile_Layout01: ; 4942f + call MG_Mobile_Layout_LoadPals + ld de, UnknBGPals + $38 + ld hl, Palette_49478 + ld bc, $8 + ld a, $5 ; BANK(UnknBGPals) + call FarCopyWRAM + call MG_Mobile_Layout_WipeAttrMap + hlcoord 0, 0, AttrMap + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + xor a + call ByteFill + hlcoord 0, 14, AttrMap + ld bc, 4 * SCREEN_WIDTH + ld a, $7 + call ByteFill + ld a, [wd002] + bit 6, a + jr z, .asm_49464 + call Function49480 + jr .asm_49467 + +.asm_49464 + call Function49496 + +.asm_49467 + callba ApplyAttrMap + callba ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 49478 + +Palette_49478: ; 49478 + RGB 31, 31, 31 + RGB 26, 31, 00 + RGB 20, 16, 03 + RGB 00, 00, 00 +; 49480 + +Function49480: ; 49480 + hlcoord 0, 0, AttrMap + lb bc, 4, SCREEN_WIDTH + ld a, $7 + call MG_Mobile_Layout_FillBox + hlcoord 0, 2, AttrMap + ld a, $4 + ld [hl], a + hlcoord 19, 2, AttrMap + ld [hl], a + ret +; 49496 + +Function49496: ; 49496 + hlcoord 0, 0, AttrMap + lb bc, 2, SCREEN_WIDTH + ld a, $7 + call MG_Mobile_Layout_FillBox + hlcoord 0, 1, AttrMap + ld a, $4 + ld [hl], a + hlcoord 19, 1, AttrMap + ld [hl], a + ret +; 494ac + +LoadSpecialMapPalette: ; 494ac + ld a, [wTileset] + cp TILESET_POKECOM_CENTER + jr z, .pokecom_2f + cp TILESET_BATTLE_TOWER + jr z, .battle_tower + cp TILESET_ICE_PATH + jr z, .ice_path + cp TILESET_HOUSE_1 + jr z, .house + cp TILESET_RADIO_TOWER + jr z, .radio_tower + cp TILESET_CELADON_MANSION + jr z, .mansion_mobile + jr .do_nothing + +.pokecom_2f + call LoadPokeComPalette + scf + ret + +.battle_tower + call LoadBattleTowerPalette + scf + ret + +.ice_path + ld a, [wPermission] ; permission + and 7 + cp 3 ; Hall of Fame + jr z, .do_nothing + call LoadIcePathPalette + scf + ret + +.house + call LoadHousePalette + scf + ret + +.radio_tower + call LoadRadioTowerPalette + scf + ret + +.mansion_mobile + call LoadMansionPalette + scf + ret + +.do_nothing + and a + ret +; 494f2 + +LoadPokeComPalette: ; 494f2 + ld a, $5 + ld de, UnknBGPals + ld hl, PokeComPalette + ld bc, 8 palettes + call FarCopyWRAM + ret +; 49501 + +PokeComPalette: ; 49501 +INCLUDE "tilesets/pokecom_center.pal" +; 49541 + +LoadBattleTowerPalette: ; 49541 + ld a, $5 + ld de, UnknBGPals + ld hl, BattleTowerPalette + ld bc, 8 palettes + call FarCopyWRAM + ret +; 49550 + +BattleTowerPalette: ; 49550 +INCLUDE "tilesets/battle_tower.pal" +; 49590 + +LoadIcePathPalette: ; 49590 + ld a, $5 + ld de, UnknBGPals + ld hl, IcePathPalette + ld bc, 8 palettes + call FarCopyWRAM + ret +; 4959f + +IcePathPalette: ; 4959f +INCLUDE "tilesets/ice_path.pal" +; 495df + +LoadHousePalette: ; 495df + ld a, $5 + ld de, UnknBGPals + ld hl, HousePalette + ld bc, 8 palettes + call FarCopyWRAM + ret +; 495ee + +HousePalette: ; 495ee +INCLUDE "tilesets/house_1.pal" +; 4962e + +LoadRadioTowerPalette: ; 4962e + ld a, $5 + ld de, UnknBGPals + ld hl, RadioTowerPalette + ld bc, 8 palettes + call FarCopyWRAM + ret +; 4963d + +RadioTowerPalette: ; 4963d +INCLUDE "tilesets/radio_tower.pal" +; 4967d + +MansionPalette1: ; 4967d + RGB 30, 28, 26 + RGB 19, 19, 19 + RGB 13, 13, 13 + RGB 07, 07, 07 + + RGB 30, 28, 26 + RGB 31, 19, 24 + RGB 30, 10, 06 + RGB 07, 07, 07 + + RGB 18, 24, 09 + RGB 15, 20, 01 + RGB 09, 13, 00 + RGB 07, 07, 07 + + RGB 30, 28, 26 + RGB 15, 16, 31 + RGB 09, 09, 31 + RGB 07, 07, 07 + + RGB 30, 28, 26 + RGB 31, 31, 07 + RGB 31, 16, 01 + RGB 07, 07, 07 + + RGB 26, 24, 17 + RGB 21, 17, 07 + RGB 16, 13, 03 + RGB 07, 07, 07 + +MansionPalette3: ; 496ad + RGB 30, 28, 26 + RGB 17, 19, 31 + RGB 14, 16, 31 + RGB 07, 07, 07 + + RGB 31, 31, 16 + RGB 31, 31, 16 + RGB 14, 09, 00 + RGB 00, 00, 00 +; 496bd + +MansionPalette4: ; 496bd + RGB 05, 05, 16 + RGB 08, 19, 28 + RGB 00, 00, 00 + RGB 31, 31, 31 +; 496c5 + +LoadMansionPalette: ; 496c5 + ld a, $5 + ld de, UnknBGPals + ld hl, MansionPalette1 + ld bc, 8 palettes + call FarCopyWRAM + ld a, $5 + ld de, UnknBGPals + 4 palettes + ld hl, MansionPalette2 + ld bc, 1 palettes + call FarCopyWRAM + ld a, $5 + ld de, UnknBGPals + 3 palettes + ld hl, MansionPalette3 + ld bc, 1 palettes + call FarCopyWRAM + ld a, $5 + ld de, UnknBGPals + 6 palettes + ld hl, MansionPalette4 + ld bc, 1 palettes + call FarCopyWRAM + ret +; 496fe + +MansionPalette2: ; 496fe + RGB 25, 24, 23 + RGB 20, 19, 19 + RGB 14, 16, 31 + RGB 07, 07, 07 +; 49706 + +MG_Mobile_Layout02: ; 49706 + ld hl, Palette_49732 + ld de, UnknBGPals + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + callba ApplyPals + call MG_Mobile_Layout_WipeAttrMap + callba ApplyAttrMap + ld hl, Palette_4973a + ld de, UnknOBPals + ld bc, 1 palettes + ld a, $5 + call FarCopyWRAM + ret +; 49732 + +Palette_49732: ; 49732 + RGB 31, 31, 31 + RGB 23, 16, 07 + RGB 23, 07, 07 + RGB 03, 07, 20 +; 4973a + +Palette_4973a: ; 4973a + RGB 00, 00, 00 + RGB 07, 05, 31 + RGB 14, 18, 31 + RGB 31, 31, 31 +; 49742 + +Function49742: ; 49742 + ld hl, Palette_49757 + ld de, UnknBGPals + ld bc, $40 + ld a, $5 + call FarCopyWRAM + callba ApplyPals + ret +; 49757 + +Palette_49757: ; 49757 + RGB 31, 31, 63 + RGB 00, 00, 00 + RGB 00, 00, 00 + RGB 00, 00, 00 + + RGB 31, 31, 63 + RGB 00, 00, 00 + RGB 00, 00, 00 + RGB 00, 00, 00 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 31, 00, 00 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 30, 16, 26 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 16, 16, 16 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 31, 12, 12 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 07, 08, 31 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 21, 00, 21 + RGB 29, 28, 09 + RGB 31, 31, 31 +; 49797 + +_InitMG_Mobile_LinkTradePalMap: ; 49797 + hlcoord 0, 0, AttrMap + lb bc, 16, 2 + ld a, $4 + call MG_Mobile_Layout_FillBox + ld a, $3 + ldcoord_a 0, 1, AttrMap + ldcoord_a 0, 14, AttrMap + hlcoord 2, 0, AttrMap + lb bc, 8, 18 + ld a, $5 + call MG_Mobile_Layout_FillBox + hlcoord 2, 8, AttrMap + lb bc, 8, 18 + ld a, $6 + call MG_Mobile_Layout_FillBox + hlcoord 0, 16, AttrMap + lb bc, 2, SCREEN_WIDTH + ld a, $4 + call MG_Mobile_Layout_FillBox + ld a, $3 + lb bc, 6, 1 + hlcoord 6, 1, AttrMap + call MG_Mobile_Layout_FillBox + ld a, $3 + lb bc, 6, 1 + hlcoord 17, 1, AttrMap + call MG_Mobile_Layout_FillBox + ld a, $3 + lb bc, 6, 1 + hlcoord 6, 9, AttrMap + call MG_Mobile_Layout_FillBox + ld a, $3 + lb bc, 6, 1 + hlcoord 17, 9, AttrMap + call MG_Mobile_Layout_FillBox + ld a, $2 + hlcoord 2, 16, AttrMap + ld [hli], a + ld a, $7 + ld [hli], a + ld [hli], a + ld [hli], a + ld a, $2 + ld [hl], a + hlcoord 2, 17, AttrMap + ld a, $3 + ld bc, 6 + call ByteFill + ret +; 49811 + +LoadTradeRoomBGPals: ; 49811 + ld hl, Palette_49826 + ld de, UnknBGPals + $10 + ld bc, $30 + ld a, $5 + call FarCopyWRAM + callba ApplyPals + ret +; 49826 + +Palette_49826: ; 49826 + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 31, 00, 00 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 15, 23, 30 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 16, 16, 16 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 25, 07, 04 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 03, 22, 08 + RGB 31, 31, 31 + + RGB 04, 02, 15 + RGB 07, 09, 31 + RGB 29, 28, 09 + RGB 31, 31, 31 +; 49856 + +InitMG_Mobile_LinkTradePalMap: ; 49856 + call _InitMG_Mobile_LinkTradePalMap + ret +; 4985a diff --git a/engine/link.asm b/engine/link.asm index 7bca8b891..5be841394 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -2034,7 +2034,7 @@ Function28f09: ; 28f09 ret ; 28f24 -INCLUDE "engine/trade/animation.asm" +INCLUDE "engine/trade_animation.asm" Special_CheckTimeCapsuleCompatibility: ; 29bfb ; Checks to see if your Party is compatible with the generation 1 games. Returns the following in ScriptVar: diff --git a/engine/printer.asm b/engine/printer.asm index 7dd2d4f4a..777ea9269 100755 --- a/engine/printer.asm +++ b/engine/printer.asm @@ -1,4 +1,4 @@ -INCLUDE "engine/printer/serial.asm" +INCLUDE "engine/printer_serial.asm" SendScreenToPrinter: ; 843f0 .loop diff --git a/engine/printer/serial.asm b/engine/printer/serial.asm deleted file mode 100755 index 6909a38b2..000000000 --- a/engine/printer/serial.asm +++ /dev/null @@ -1,645 +0,0 @@ -Printer_StartTransmission: ; 84000 - ld hl, wGameboyPrinterRAM - ld bc, wGameboyPrinterRAMEnd - wGameboyPrinterRAM - xor a - call Printer_ByteFill - xor a - ld [rSB], a - ld [rSC], a - ld [wPrinterOpcode], a - ld hl, wPrinterConnectionOpen - set 0, [hl] - ld a, [GBPrinter] - ld [wGBPrinterSettings], a - xor a - ld [wJumptableIndex], a - ret -; 84022 - -PrinterJumptableIteration: ; 84022 - ld a, [wJumptableIndex] - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 84031 - - -.Jumptable: ; 84031 (21:4031) - - dw Print_InitPrinterHandshake ; 00 - dw Printer_CheckConnectionStatus ; 01 - dw Printer_WaitSerial ; 02 - dw Printer_StartTransmittingTilemap ; 03 - dw Printer_TransmissionLoop ; 04 - dw Printer_WaitSerialAndLoopBack2 ; 05 - - dw Printer_EndTilemapTransmission ; 06 - dw Printer_TransmissionLoop ; 07 - dw Printer_WaitSerial ; 08 - dw Printer_SignalSendHeader ; 09 - dw Printer_TransmissionLoop ; 0a - dw Printer_WaitSerial ; 0b - dw Printer_WaitUntilFinished ; 0c - dw Printer_Quit ; 0d - - dw Printer_NextSection_ ; 0e - dw Printer_WaitSerial ; 0f - dw Printer_SignalLoopBack ; 10 - dw Printer_SectionOne ; 11 - dw Printer_WaitLoopBack ; 12 - dw Printer_WaitLoopBack_ ; 13 - - -Printer_NextSection: ; 84059 (21:4059) - ld hl, wJumptableIndex - inc [hl] - ret - -Printer_PrevSection: ; 8405e (21:405e) - ld hl, wJumptableIndex - dec [hl] - ret - -Printer_Quit: ; 84063 (21:4063) - xor a - ld [wPrinterStatusFlags], a - ld hl, wJumptableIndex - set 7, [hl] - ret - -Printer_NextSection_: ; 8406d (21:406d) - call Printer_NextSection - ret - -Printer_SectionOne: ; 84071 (21:4071) - ld a, $1 - ld [wJumptableIndex], a - ret - -Print_InitPrinterHandshake: ; 84077 (21:4077) - call Printer_ResetData - ld hl, PrinterDataPacket1 - call Printer_CopyPacket - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld a, [wPrinterQueueLength] - ld [wPrinterRowIndex], a - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_CHECKING - ld [wPrinterStatus], a - ret - -Printer_StartTransmittingTilemap: ; 84099 (21:4099) - call Printer_ResetData - ; check ??? - ld hl, wPrinterRowIndex - ld a, [hl] - and a - jr z, Printer_EndTilemapTransmission - ; send packet 3 - ld hl, PrinterDataPacket3 ; signal start of transmission - call Printer_CopyPacket - ; prepare to send 40 tiles - call Printer_Convert2RowsTo2bpp - ld a, (40 tiles) % $100 - ld [wPrinterSendByteCounter], a - ld a, (40 tiles) / $100 - ld [wPrinterSendByteCounter + 1], a - ; compute the checksum - call Printer_ComputeChecksum - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_TRANSMITTING - ld [wPrinterStatus], a - ret - -Printer_EndTilemapTransmission: ; 840c5 (21:40c5) - ; ensure that we go from here to routine 7 - ld a, $6 - ld [wJumptableIndex], a - ; send packet 4 - ld hl, PrinterDataPacket4 ; signal no transmission - call Printer_CopyPacket - ; send no tile data - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - call Printer_NextSection - call Printer_WaitHandshake - ret - -Printer_SignalSendHeader: ; 840de (21:40de) - call Printer_ResetData - ld hl, PrinterDataPacket2 ; signal request print - call Printer_CopyPacket - ; prepare to send 1 tile - call Printer_StageHeaderForSend - ld a, 4 % $100 - ld [wPrinterSendByteCounter], a - ld a, 4 / $100 - ld [wPrinterSendByteCounter + 1], a - ; compute the checksum - call Printer_ComputeChecksum - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_PRINTING - ld [wPrinterStatus], a - ret - -Printer_SignalLoopBack: ; 84103 (21:4103) - call Printer_ResetData - ; send packet 1 - ld hl, PrinterDataPacket1 ; signal no transmission - call Printer_CopyPacket - ; send no tile data - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld a, [wPrinterQueueLength] - ld [wPrinterRowIndex], a - call Printer_NextSection - call Printer_WaitHandshake - ret - -Printer_WaitSerial: ; 84120 (21:4120) - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp $6 - ret c - xor a - ld [hl], a - call Printer_NextSection - ret - -Printer_WaitSerialAndLoopBack2: ; 8412e (21:412e) - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp $6 - ret c - xor a - ld [hl], a - ld hl, wPrinterRowIndex - dec [hl] - call Printer_PrevSection - call Printer_PrevSection - ret - -Printer_CheckConnectionStatus: ; 84143 (21:4143) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterHandshake] - cp $ff - jr nz, .printer_connected - ld a, [wPrinterStatusFlags] - cp $ff - jr z, .printer_error - -.printer_connected - ld a, [wPrinterHandshake] - cp $81 - jr nz, .printer_error - ld a, [wPrinterStatusFlags] - cp $0 - jr nz, .printer_error - ld hl, wPrinterConnectionOpen - set 1, [hl] - ld a, $5 - ld [wHandshakeFrameDelay], a - call Printer_NextSection - ret - -.printer_error - ld a, $ff - ld [wPrinterHandshake], a - ld [wPrinterStatusFlags], a - ld a, $e - ld [wJumptableIndex], a - ret - -Printer_TransmissionLoop: ; 84180 (21:4180) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f0 - jr nz, .enter_wait_loop - ld a, [wPrinterStatusFlags] - and $1 - jr nz, .cycle_back - call Printer_NextSection - ret - -.cycle_back - call Printer_PrevSection - ret - -.enter_wait_loop - ld a, $12 ; Printer_WaitLoopBack - ld [wJumptableIndex], a - ret - -Printer_WaitUntilFinished: ; 841a1 (21:41a1) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f3 - ret nz - call Printer_NextSection - ret - -Printer_WaitLoopBack: ; 841b0 (21:41b0) - call Printer_NextSection -Printer_WaitLoopBack_: ; 841b3 (21:41b3) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f0 - ret nz - xor a - ld [wJumptableIndex], a - ret - -Printer_WaitHandshake: ; 841c3 (21:41c3) -.loop - ld a, [wPrinterOpcode] - and a - jr nz, .loop - xor a - ld [wPrinterSendByteOffset], a - ld [wPrinterSendByteOffset + 1], a - ld a, $1 - ld [wPrinterOpcode], a - ld a, $88 - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ret - -Printer_CopyPacket: ; 841e2 (21:41e2) - ld a, [hli] - ld [wPrinterData], a - ld a, [hli] - ld [wPrinterData + 1], a - ld a, [hli] - ld [wPrinterData + 2], a - ld a, [hli] - ld [wPrinterData + 3], a - ld a, [hli] - ld [wPrinterChecksum], a - ld a, [hl] - ld [wPrinterChecksum + 1], a - ret - -Printer_ResetData: ; 841fb (21:41fb) - xor a - ld hl, wPrinterData - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, wPrinterChecksum - ld [hli], a - ld [hl], a - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld hl, wGameboyPrinterRAM - ld bc, wGameboyPrinter2bppSourceEnd - wGameboyPrinter2bppSource - call Printer_ByteFill - ret - -Printer_ComputeChecksum: ; 84219 (21:4219) - ld hl, 0 - ld bc, 4 - ld de, wPrinterData - call .ComputeChecksum - ld a, [wPrinterSendByteCounter] - ld c, a - ld a, [wPrinterSendByteCounter + 1] - ld b, a - ld de, wGameboyPrinterRAM - call .ComputeChecksum - ld a, l - ld [wPrinterChecksum], a - ld a, h - ld [wPrinterChecksum + 1], a - ret - -.ComputeChecksum: ; 8423c (21:423c) -.loop - ld a, [de] - inc de - add l - jr nc, .no_overflow - inc h -.no_overflow - ld l, a - dec bc - ld a, c - or b - jr nz, .loop - ret - -Printer_StageHeaderForSend: ; 84249 (21:4249) - ld a, $1 - ld [wGameboyPrinter2bppSource + 0], a - ld a, [wcbfa] - ld [wGameboyPrinter2bppSource + 1], a - ld a, %11100100 - ld [wGameboyPrinter2bppSource + 2], a - ld a, [wGBPrinterSettings] - ld [wGameboyPrinter2bppSource + 3], a - ret - -Printer_Convert2RowsTo2bpp: ; 84260 (21:4260) - ; de = wPrinterTileMapBuffer + 2 * SCREEN_WIDTH * ([wPrinterQueueLength] - [wPrinterRowIndex]) - ld a, [wPrinterRowIndex] - xor $ff - ld d, a - ld a, [wPrinterQueueLength] - inc a - add d - ld hl, wPrinterTileMapBuffer - ld de, 2 * SCREEN_WIDTH -.loop1 - and a - jr z, .okay1 - add hl, de - dec a - jr .loop1 -.okay1 - ld e, l - ld d, h - ld hl, wGameboyPrinter2bppSource - ld c, 2 * SCREEN_WIDTH -.loop2 - ld a, [de] - inc de - push bc - push de - push hl - ; convert tile index to vram address - swap a - ld d, a - and $f0 - ld e, a - ld a, d - and $f - ld d, a - and $8 - ld a, d - jr nz, .vtiles_8xxx - or $90 - jr .got_vtile_addr - -.vtiles_8xxx - or $80 -.got_vtile_addr - ld d, a - ; copy 1 vtile to hl - lb bc, BANK(Printer_Convert2RowsTo2bpp), 1 - call Request2bpp - pop hl - ld de, 1 tiles - add hl, de - pop de - pop bc - dec c - jr nz, .loop2 - ret - -Printer_ByteFill: ; 842ab - push de - ld e, a -.loop - ld [hl], e - inc hl - dec bc - ld a, c - or b - jr nz, .loop - ld a, e - pop de - ret -; 842b7 - -PrinterDataPacket1: - db 1, 0, $00, 0 - dw 1 -PrinterDataPacket2: - db 2, 0, $04, 0 - dw 0 -PrinterDataPacket3: - db 4, 0, $80, 2 - dw 0 -PrinterDataPacket4: - db 4, 0, $00, 0 - dw 4 -PrinterDataPacket5: ; unused - db 8, 0, $00, 0 - dw 8 -PrinterDataPacket6: ; unused - db 15, 0, $00, 0 - dw 15 -; 842db - -_PrinterReceive:: ; 842db - ld a, [wPrinterOpcode] - add a - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 842ea - - -.Jumptable: ; 842ea (21:42ea) - dw Printer_DoNothing ; 00 - - dw Printer_Send0x33 ; 01 - dw Printer_SendPrinterData1 ; 02 - dw Printer_SendPrinterData2 ; 03 - dw Printer_SendPrinterData3 ; 04 - dw Printer_SendPrinterData4 ; 05 - dw Printer_SendNextByte ; 06 - dw Printer_SendwPrinterChecksumLo ; 07 - dw Printer_SendwPrinterChecksumHi ; 08 - dw Printer_Send0x00 ; 09 - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 0a - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 0b - - dw Printer_Send0x33 ; 0c triggered by AskSerial - dw Printer_Send0x0f ; 0d - dw Printer_Send0x00_ ; 0e - dw Printer_Send0x00_ ; 0f - dw Printer_Send0x00_ ; 10 - dw Printer_Send0x0f ; 11 - dw Printer_Send0x00_ ; 12 - dw Printer_Send0x00 ; 13 - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 14 - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_ ; 15 - - dw Printer_Send0x33 ; 16 triggered by pressing B - dw Printer_Send0x08 ; 17 - dw Printer_Send0x00_ ; 18 - dw Printer_Send0x00_ ; 19 - dw Printer_Send0x00_ ; 1a - dw Printer_Send0x08 ; 1b - dw Printer_Send0x00_ ; 1c - dw Printer_Send0x00 ; 1d - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 1e - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 1f - - -Printer_NextInstruction: ; 8432a (21:432a) - ld hl, wPrinterOpcode - inc [hl] - ret - -Printer_DoNothing: ; 8432f (21:432f) - ret - -Printer_Send0x33: ; 84330 (21:4330) - ld a, $33 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendPrinterData1: ; 84339 (21:4339) - ld a, [wPrinterData] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendPrinterData2: ; 84343 (21:4343) - ld a, [wPrinterData + 1] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendPrinterData3: ; 8434d (21:434d) - ld a, [wPrinterData + 2] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendPrinterData4: ; 84357 (21:4357) - ld a, [wPrinterData + 3] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendNextByte: ; 84361 (21:4361) - ; decrement 16-bit counter - ld hl, wPrinterSendByteCounter - ld a, [hli] - ld d, [hl] - ld e, a - or d - jr z, .done - dec de - ld [hl], d - dec hl - ld [hl], e - - ld a, [wPrinterSendByteOffset] - ld e, a - ld a, [wPrinterSendByteOffset + 1] - ld d, a - ld hl, wGameboyPrinterRAM - add hl, de - inc de - ld a, e - ld [wPrinterSendByteOffset], a - ld a, d - ld [wPrinterSendByteOffset + 1], a - ld a, [hl] - call Printer_SerialSend - ret - -.done - call Printer_NextInstruction -Printer_SendwPrinterChecksumLo: ; 8438b (21:438b) - ld a, [wPrinterChecksum] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendwPrinterChecksumHi: ; 84395 (21:4395) - ld a, [wPrinterChecksum + 1] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x00: ; 8439f (21:439f) - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_ReceiveTowPrinterHandshakeAndSend0x00: ; 843a8 (21:43a8) - ld a, [rSB] - ld [wPrinterHandshake], a - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop: ; 843b6 (21:43b6) - ld a, [rSB] - ld [wPrinterStatusFlags], a - xor a - ld [wPrinterOpcode], a - ret - -Printer_Send0x0f: ; 843c0 (21:43c0) - ld a, $f - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x00_: ; 843c9 (21:43c9) - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x08: ; 843d2 (21:43d2) - ld a, $8 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SerialSend: ; 843db (21:43db) - ld [rSB], a - ld a, $1 ; switch to internal clock - ld [rSC], a - ld a, $81 ; start transfer - ld [rSC], a - ret - -Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_: ; 843e6 (21:43e6) - ld a, [rSB] - ld [wPrinterStatusFlags], a - xor a - ld [wPrinterOpcode], a - ret diff --git a/engine/printer_serial.asm b/engine/printer_serial.asm new file mode 100755 index 000000000..6909a38b2 --- /dev/null +++ b/engine/printer_serial.asm @@ -0,0 +1,645 @@ +Printer_StartTransmission: ; 84000 + ld hl, wGameboyPrinterRAM + ld bc, wGameboyPrinterRAMEnd - wGameboyPrinterRAM + xor a + call Printer_ByteFill + xor a + ld [rSB], a + ld [rSC], a + ld [wPrinterOpcode], a + ld hl, wPrinterConnectionOpen + set 0, [hl] + ld a, [GBPrinter] + ld [wGBPrinterSettings], a + xor a + ld [wJumptableIndex], a + ret +; 84022 + +PrinterJumptableIteration: ; 84022 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 84031 + + +.Jumptable: ; 84031 (21:4031) + + dw Print_InitPrinterHandshake ; 00 + dw Printer_CheckConnectionStatus ; 01 + dw Printer_WaitSerial ; 02 + dw Printer_StartTransmittingTilemap ; 03 + dw Printer_TransmissionLoop ; 04 + dw Printer_WaitSerialAndLoopBack2 ; 05 + + dw Printer_EndTilemapTransmission ; 06 + dw Printer_TransmissionLoop ; 07 + dw Printer_WaitSerial ; 08 + dw Printer_SignalSendHeader ; 09 + dw Printer_TransmissionLoop ; 0a + dw Printer_WaitSerial ; 0b + dw Printer_WaitUntilFinished ; 0c + dw Printer_Quit ; 0d + + dw Printer_NextSection_ ; 0e + dw Printer_WaitSerial ; 0f + dw Printer_SignalLoopBack ; 10 + dw Printer_SectionOne ; 11 + dw Printer_WaitLoopBack ; 12 + dw Printer_WaitLoopBack_ ; 13 + + +Printer_NextSection: ; 84059 (21:4059) + ld hl, wJumptableIndex + inc [hl] + ret + +Printer_PrevSection: ; 8405e (21:405e) + ld hl, wJumptableIndex + dec [hl] + ret + +Printer_Quit: ; 84063 (21:4063) + xor a + ld [wPrinterStatusFlags], a + ld hl, wJumptableIndex + set 7, [hl] + ret + +Printer_NextSection_: ; 8406d (21:406d) + call Printer_NextSection + ret + +Printer_SectionOne: ; 84071 (21:4071) + ld a, $1 + ld [wJumptableIndex], a + ret + +Print_InitPrinterHandshake: ; 84077 (21:4077) + call Printer_ResetData + ld hl, PrinterDataPacket1 + call Printer_CopyPacket + xor a + ld [wPrinterSendByteCounter], a + ld [wPrinterSendByteCounter + 1], a + ld a, [wPrinterQueueLength] + ld [wPrinterRowIndex], a + call Printer_NextSection + call Printer_WaitHandshake + ld a, PRINTER_STATUS_CHECKING + ld [wPrinterStatus], a + ret + +Printer_StartTransmittingTilemap: ; 84099 (21:4099) + call Printer_ResetData + ; check ??? + ld hl, wPrinterRowIndex + ld a, [hl] + and a + jr z, Printer_EndTilemapTransmission + ; send packet 3 + ld hl, PrinterDataPacket3 ; signal start of transmission + call Printer_CopyPacket + ; prepare to send 40 tiles + call Printer_Convert2RowsTo2bpp + ld a, (40 tiles) % $100 + ld [wPrinterSendByteCounter], a + ld a, (40 tiles) / $100 + ld [wPrinterSendByteCounter + 1], a + ; compute the checksum + call Printer_ComputeChecksum + call Printer_NextSection + call Printer_WaitHandshake + ld a, PRINTER_STATUS_TRANSMITTING + ld [wPrinterStatus], a + ret + +Printer_EndTilemapTransmission: ; 840c5 (21:40c5) + ; ensure that we go from here to routine 7 + ld a, $6 + ld [wJumptableIndex], a + ; send packet 4 + ld hl, PrinterDataPacket4 ; signal no transmission + call Printer_CopyPacket + ; send no tile data + xor a + ld [wPrinterSendByteCounter], a + ld [wPrinterSendByteCounter + 1], a + call Printer_NextSection + call Printer_WaitHandshake + ret + +Printer_SignalSendHeader: ; 840de (21:40de) + call Printer_ResetData + ld hl, PrinterDataPacket2 ; signal request print + call Printer_CopyPacket + ; prepare to send 1 tile + call Printer_StageHeaderForSend + ld a, 4 % $100 + ld [wPrinterSendByteCounter], a + ld a, 4 / $100 + ld [wPrinterSendByteCounter + 1], a + ; compute the checksum + call Printer_ComputeChecksum + call Printer_NextSection + call Printer_WaitHandshake + ld a, PRINTER_STATUS_PRINTING + ld [wPrinterStatus], a + ret + +Printer_SignalLoopBack: ; 84103 (21:4103) + call Printer_ResetData + ; send packet 1 + ld hl, PrinterDataPacket1 ; signal no transmission + call Printer_CopyPacket + ; send no tile data + xor a + ld [wPrinterSendByteCounter], a + ld [wPrinterSendByteCounter + 1], a + ld a, [wPrinterQueueLength] + ld [wPrinterRowIndex], a + call Printer_NextSection + call Printer_WaitHandshake + ret + +Printer_WaitSerial: ; 84120 (21:4120) + ld hl, wPrinterSerialFrameDelay + inc [hl] + ld a, [hl] + cp $6 + ret c + xor a + ld [hl], a + call Printer_NextSection + ret + +Printer_WaitSerialAndLoopBack2: ; 8412e (21:412e) + ld hl, wPrinterSerialFrameDelay + inc [hl] + ld a, [hl] + cp $6 + ret c + xor a + ld [hl], a + ld hl, wPrinterRowIndex + dec [hl] + call Printer_PrevSection + call Printer_PrevSection + ret + +Printer_CheckConnectionStatus: ; 84143 (21:4143) + ld a, [wPrinterOpcode] + and a + ret nz + ld a, [wPrinterHandshake] + cp $ff + jr nz, .printer_connected + ld a, [wPrinterStatusFlags] + cp $ff + jr z, .printer_error + +.printer_connected + ld a, [wPrinterHandshake] + cp $81 + jr nz, .printer_error + ld a, [wPrinterStatusFlags] + cp $0 + jr nz, .printer_error + ld hl, wPrinterConnectionOpen + set 1, [hl] + ld a, $5 + ld [wHandshakeFrameDelay], a + call Printer_NextSection + ret + +.printer_error + ld a, $ff + ld [wPrinterHandshake], a + ld [wPrinterStatusFlags], a + ld a, $e + ld [wJumptableIndex], a + ret + +Printer_TransmissionLoop: ; 84180 (21:4180) + ld a, [wPrinterOpcode] + and a + ret nz + ld a, [wPrinterStatusFlags] + and $f0 + jr nz, .enter_wait_loop + ld a, [wPrinterStatusFlags] + and $1 + jr nz, .cycle_back + call Printer_NextSection + ret + +.cycle_back + call Printer_PrevSection + ret + +.enter_wait_loop + ld a, $12 ; Printer_WaitLoopBack + ld [wJumptableIndex], a + ret + +Printer_WaitUntilFinished: ; 841a1 (21:41a1) + ld a, [wPrinterOpcode] + and a + ret nz + ld a, [wPrinterStatusFlags] + and $f3 + ret nz + call Printer_NextSection + ret + +Printer_WaitLoopBack: ; 841b0 (21:41b0) + call Printer_NextSection +Printer_WaitLoopBack_: ; 841b3 (21:41b3) + ld a, [wPrinterOpcode] + and a + ret nz + ld a, [wPrinterStatusFlags] + and $f0 + ret nz + xor a + ld [wJumptableIndex], a + ret + +Printer_WaitHandshake: ; 841c3 (21:41c3) +.loop + ld a, [wPrinterOpcode] + and a + jr nz, .loop + xor a + ld [wPrinterSendByteOffset], a + ld [wPrinterSendByteOffset + 1], a + ld a, $1 + ld [wPrinterOpcode], a + ld a, $88 + ld [rSB], a + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret + +Printer_CopyPacket: ; 841e2 (21:41e2) + ld a, [hli] + ld [wPrinterData], a + ld a, [hli] + ld [wPrinterData + 1], a + ld a, [hli] + ld [wPrinterData + 2], a + ld a, [hli] + ld [wPrinterData + 3], a + ld a, [hli] + ld [wPrinterChecksum], a + ld a, [hl] + ld [wPrinterChecksum + 1], a + ret + +Printer_ResetData: ; 841fb (21:41fb) + xor a + ld hl, wPrinterData + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, wPrinterChecksum + ld [hli], a + ld [hl], a + xor a + ld [wPrinterSendByteCounter], a + ld [wPrinterSendByteCounter + 1], a + ld hl, wGameboyPrinterRAM + ld bc, wGameboyPrinter2bppSourceEnd - wGameboyPrinter2bppSource + call Printer_ByteFill + ret + +Printer_ComputeChecksum: ; 84219 (21:4219) + ld hl, 0 + ld bc, 4 + ld de, wPrinterData + call .ComputeChecksum + ld a, [wPrinterSendByteCounter] + ld c, a + ld a, [wPrinterSendByteCounter + 1] + ld b, a + ld de, wGameboyPrinterRAM + call .ComputeChecksum + ld a, l + ld [wPrinterChecksum], a + ld a, h + ld [wPrinterChecksum + 1], a + ret + +.ComputeChecksum: ; 8423c (21:423c) +.loop + ld a, [de] + inc de + add l + jr nc, .no_overflow + inc h +.no_overflow + ld l, a + dec bc + ld a, c + or b + jr nz, .loop + ret + +Printer_StageHeaderForSend: ; 84249 (21:4249) + ld a, $1 + ld [wGameboyPrinter2bppSource + 0], a + ld a, [wcbfa] + ld [wGameboyPrinter2bppSource + 1], a + ld a, %11100100 + ld [wGameboyPrinter2bppSource + 2], a + ld a, [wGBPrinterSettings] + ld [wGameboyPrinter2bppSource + 3], a + ret + +Printer_Convert2RowsTo2bpp: ; 84260 (21:4260) + ; de = wPrinterTileMapBuffer + 2 * SCREEN_WIDTH * ([wPrinterQueueLength] - [wPrinterRowIndex]) + ld a, [wPrinterRowIndex] + xor $ff + ld d, a + ld a, [wPrinterQueueLength] + inc a + add d + ld hl, wPrinterTileMapBuffer + ld de, 2 * SCREEN_WIDTH +.loop1 + and a + jr z, .okay1 + add hl, de + dec a + jr .loop1 +.okay1 + ld e, l + ld d, h + ld hl, wGameboyPrinter2bppSource + ld c, 2 * SCREEN_WIDTH +.loop2 + ld a, [de] + inc de + push bc + push de + push hl + ; convert tile index to vram address + swap a + ld d, a + and $f0 + ld e, a + ld a, d + and $f + ld d, a + and $8 + ld a, d + jr nz, .vtiles_8xxx + or $90 + jr .got_vtile_addr + +.vtiles_8xxx + or $80 +.got_vtile_addr + ld d, a + ; copy 1 vtile to hl + lb bc, BANK(Printer_Convert2RowsTo2bpp), 1 + call Request2bpp + pop hl + ld de, 1 tiles + add hl, de + pop de + pop bc + dec c + jr nz, .loop2 + ret + +Printer_ByteFill: ; 842ab + push de + ld e, a +.loop + ld [hl], e + inc hl + dec bc + ld a, c + or b + jr nz, .loop + ld a, e + pop de + ret +; 842b7 + +PrinterDataPacket1: + db 1, 0, $00, 0 + dw 1 +PrinterDataPacket2: + db 2, 0, $04, 0 + dw 0 +PrinterDataPacket3: + db 4, 0, $80, 2 + dw 0 +PrinterDataPacket4: + db 4, 0, $00, 0 + dw 4 +PrinterDataPacket5: ; unused + db 8, 0, $00, 0 + dw 8 +PrinterDataPacket6: ; unused + db 15, 0, $00, 0 + dw 15 +; 842db + +_PrinterReceive:: ; 842db + ld a, [wPrinterOpcode] + add a + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 842ea + + +.Jumptable: ; 842ea (21:42ea) + dw Printer_DoNothing ; 00 + + dw Printer_Send0x33 ; 01 + dw Printer_SendPrinterData1 ; 02 + dw Printer_SendPrinterData2 ; 03 + dw Printer_SendPrinterData3 ; 04 + dw Printer_SendPrinterData4 ; 05 + dw Printer_SendNextByte ; 06 + dw Printer_SendwPrinterChecksumLo ; 07 + dw Printer_SendwPrinterChecksumHi ; 08 + dw Printer_Send0x00 ; 09 + dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 0a + dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 0b + + dw Printer_Send0x33 ; 0c triggered by AskSerial + dw Printer_Send0x0f ; 0d + dw Printer_Send0x00_ ; 0e + dw Printer_Send0x00_ ; 0f + dw Printer_Send0x00_ ; 10 + dw Printer_Send0x0f ; 11 + dw Printer_Send0x00_ ; 12 + dw Printer_Send0x00 ; 13 + dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 14 + dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_ ; 15 + + dw Printer_Send0x33 ; 16 triggered by pressing B + dw Printer_Send0x08 ; 17 + dw Printer_Send0x00_ ; 18 + dw Printer_Send0x00_ ; 19 + dw Printer_Send0x00_ ; 1a + dw Printer_Send0x08 ; 1b + dw Printer_Send0x00_ ; 1c + dw Printer_Send0x00 ; 1d + dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 1e + dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 1f + + +Printer_NextInstruction: ; 8432a (21:432a) + ld hl, wPrinterOpcode + inc [hl] + ret + +Printer_DoNothing: ; 8432f (21:432f) + ret + +Printer_Send0x33: ; 84330 (21:4330) + ld a, $33 + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendPrinterData1: ; 84339 (21:4339) + ld a, [wPrinterData] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendPrinterData2: ; 84343 (21:4343) + ld a, [wPrinterData + 1] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendPrinterData3: ; 8434d (21:434d) + ld a, [wPrinterData + 2] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendPrinterData4: ; 84357 (21:4357) + ld a, [wPrinterData + 3] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendNextByte: ; 84361 (21:4361) + ; decrement 16-bit counter + ld hl, wPrinterSendByteCounter + ld a, [hli] + ld d, [hl] + ld e, a + or d + jr z, .done + dec de + ld [hl], d + dec hl + ld [hl], e + + ld a, [wPrinterSendByteOffset] + ld e, a + ld a, [wPrinterSendByteOffset + 1] + ld d, a + ld hl, wGameboyPrinterRAM + add hl, de + inc de + ld a, e + ld [wPrinterSendByteOffset], a + ld a, d + ld [wPrinterSendByteOffset + 1], a + ld a, [hl] + call Printer_SerialSend + ret + +.done + call Printer_NextInstruction +Printer_SendwPrinterChecksumLo: ; 8438b (21:438b) + ld a, [wPrinterChecksum] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SendwPrinterChecksumHi: ; 84395 (21:4395) + ld a, [wPrinterChecksum + 1] + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_Send0x00: ; 8439f (21:439f) + ld a, $0 + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_ReceiveTowPrinterHandshakeAndSend0x00: ; 843a8 (21:43a8) + ld a, [rSB] + ld [wPrinterHandshake], a + ld a, $0 + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop: ; 843b6 (21:43b6) + ld a, [rSB] + ld [wPrinterStatusFlags], a + xor a + ld [wPrinterOpcode], a + ret + +Printer_Send0x0f: ; 843c0 (21:43c0) + ld a, $f + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_Send0x00_: ; 843c9 (21:43c9) + ld a, $0 + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_Send0x08: ; 843d2 (21:43d2) + ld a, $8 + call Printer_SerialSend + call Printer_NextInstruction + ret + +Printer_SerialSend: ; 843db (21:43db) + ld [rSB], a + ld a, $1 ; switch to internal clock + ld [rSC], a + ld a, $81 ; start transfer + ld [rSC], a + ret + +Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_: ; 843e6 (21:43e6) + ld a, [rSB] + ld [wPrinterStatusFlags], a + xor a + ld [wPrinterOpcode], a + ret diff --git a/engine/sgb_layouts.asm b/engine/sgb_layouts.asm new file mode 100644 index 000000000..dc174e86f --- /dev/null +++ b/engine/sgb_layouts.asm @@ -0,0 +1,636 @@ +Predef_LoadSGBLayout: ; 864c +; LoadSGBLayout + call CheckCGB + jp nz, Predef_LoadSGBLayoutCGB + + ld a, b + cp SCGB_RAM + jr nz, .not_ram + ld a, [SGBPredef] +.not_ram + cp SCGB_PARTY_MENU_HP_PALS + jp z, SGB_ApplyPartyMenuHPPals + ld l, a + ld h, 0 + add hl, hl + ld de, .Jumptable + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .Finish + push de + jp hl +; 866f + +.Jumptable: ; 866f + dw .SGB_BattleGrayscale + dw .SGB_BattleColors + dw .SGB_PokegearPals + dw .SGB_StatsScreenHPPals + dw .SGB_Pokedex + dw .SGB_SlotMachine + dw .SGB06 + dw .SGB07 + dw .SGB_Diploma + dw .SGB_MapPals + dw .SGB_PartyMenu + dw .SGB_Evolution + dw .SGB0c + dw .SGB0d + dw .SGB_MoveList + dw .SGB0f + dw .SGB_PokedexSearchOption + dw .SGB11 + dw .SGB12 + dw .SGB13 + dw .SGB_PackPals + dw .SGB_TrainerCard + dw .SGB_PokedexUnownMode + dw .SGB_BillsPC + dw .SGB_UnownPuzzle + dw .SGB19 + dw .SGB_PlayerOrMonFrontpicPals + dw .SGB_TradeTube + dw .SGB_TrainerOrMonFrontpicPals + dw .SGB_MysteryGift + dw .SGB1e +; 86ad + +.SGB_BattleGrayscale: ; 86ad + ld hl, PalPacket_9c66 + ld de, BlkPacket_9aa6 + ret +; 86b4 + +.SGB_BattleColors: ; 86b4 + ld hl, BlkPacket_9aa6 + call PushSGBPals_ + + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + + ld a, [PlayerHPPal] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, Palettes_a8be + add hl, de + + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + + ld a, [EnemyHPPal] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + + ld de, Palettes_a8be + add hl, de + ld a, [hli] + ld [wSGBPals + 9], a + ld a, [hli] + ld [wSGBPals + 10], a + ld a, [hli] + ld [wSGBPals + 11], a + ld a, [hl] + ld [wSGBPals + 12], a + + ld hl, PalPacket_9cf6 + ld de, wSGBPals + $10 + ld bc, $10 + call CopyBytes + + call GetBattlemonBackpicPalettePointer + + ld a, [hli] + ld [wSGBPals + $13], a + ld a, [hli] + ld [wSGBPals + $14], a + ld a, [hli] + ld [wSGBPals + $15], a + ld a, [hl] + ld [wSGBPals + $16], a + call GetEnemyFrontpicPalettePointer + ld a, [hli] + ld [wSGBPals + $19], a + ld a, [hli] + ld [wSGBPals + $1a], a + ld a, [hli] + ld [wSGBPals + $1b], a + ld a, [hl] + ld [wSGBPals + $1c], a + + ld hl, wSGBPals + ld de, wSGBPals + $10 + ld a, SCGB_BATTLE_COLORS + ld [SGBPredef], a + ret +; 873c + +.SGB_MoveList: ; 873c + ld hl, PalPacket_9bd6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + + ld hl, wSGBPals + 1 + ld [hl], $10 + inc hl + inc hl + + ld a, [PlayerHPPal] + add $2f + ld [hl], a + ld hl, wSGBPals + ld de, BlkPacket_9ad6 + ret +; 875c + +.SGB_PokegearPals: ; 875c + ld hl, PalPacket_9c76 + ld de, BlkPacket_9a86 + ret +; 8763 + +.SGB_StatsScreenHPPals: ; 8763 + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld a, [wCurHPPal] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, Palettes_a8be + add hl, de + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + ld a, [hli] + ld [wSGBPals + 9], a + ld a, [hli] + ld [wSGBPals + 10], a + ld a, [hli] + ld [wSGBPals + 11], a + ld a, [hl] + ld [wSGBPals + 12], a + ld hl, wSGBPals + ld de, BlkPacket_9ac6 + ret +; 87ab + +.SGB_PartyMenu: ; 87ab + ld hl, PalPacket_9c56 + ld de, wSGBPals + 1 + ret +; 87b2 + +.SGB_Pokedex: ; 87b2 + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld hl, wSGBPals + 3 + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + call GetMonPalettePointer_ + ld a, [hli] + ld [wSGBPals + 9], a + ld a, [hli] + ld [wSGBPals + 10], a + ld a, [hli] + ld [wSGBPals + 11], a + ld a, [hl] + ld [wSGBPals + 12], a + ld hl, wSGBPals + ld de, BlkPacket_9ae6 + ret +; 87e9 + +.SGB_BillsPC: ; 87e9 + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld hl, wSGBPals + 3 + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + ld a, [hli] + ld [wSGBPals + 9], a + ld a, [hli] + ld [wSGBPals + 10], a + ld a, [hli] + ld [wSGBPals + 11], a + ld a, [hl] + ld [wSGBPals + 12], a + ld hl, wSGBPals + ld de, BlkPacket_9ae6 + ret +; 8823 + +.SGB_PokedexUnownMode: ; 8823 + call .SGB_Pokedex + ld de, BlkPacket_9af6 + ret +; 882a + +.SGB_PokedexSearchOption: ; 882a + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld hl, wSGBPals + 3 + ld [hl], $9f + inc hl + ld [hl], $2a + inc hl + ld [hl], $5a + inc hl + ld [hl], $19 + ld hl, wSGBPals + ld de, BlkPacket_9a86 + ret +; 884b + +.SGB_PackPals: ; 884b + ld hl, PalPacket_9c36 + ld de, BlkPacket_9a86 + ret +; 8852 + +.SGB_SlotMachine: ; 8852 + ld hl, PalPacket_9c96 + ld de, BlkPacket_9b06 + ret +; 8859 + +.SGB06: ; 8859 + ld hl, PalPacket_9ca6 + ld de, BlkPacket_9b76 + ret +; 8860 + +.SGB_Diploma: +.SGB_MysteryGift: ; 8860 + ld hl, PalPacket_9cb6 + ld de, BlkPacket_9a86 + ret +; 8867 + +.SGB07: ; 8867 + ld b, 0 + ld hl, .BlkPacketTable_SGB07 +rept 4 + add hl, bc +endr + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 8878 + +.BlkPacketTable_SGB07: ; 8878 + dw BlkPacket_9a86, PalPacket_9be6 + dw BlkPacket_9a96, PalPacket_9c06 + dw BlkPacket_9a86, PalPacket_9c16 +; 8884 + +.SGB0c: ; 8884 + ld hl, PalPacket_9b96 + ld de, BlkPacket_9b56 + ld a, SCGB_DIPLOMA + ld [SGBPredef], a + ret +; 8890 + +.SGB13: ; 8890 + ld hl, PalPacket_9ba6 + ld de, BlkPacket_9b86 + ret +; 8897 + +.SGB0f: ; 8897 + ld hl, PalPacket_9c46 + ld de, BlkPacket_9a86 + ret +; 889e + +.SGB11: ; 889e + ld hl, BlkPacket_9a86 + ld de, PlayerLightScreenCount + ld bc, $10 + call CopyBytes + ld hl, PalPacket_9bb6 + ld de, BlkPacket_9a86 + ret +; 88b1 + +.SGB_MapPals: ; 88b1 + ld hl, PalPacket_9bd6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + call .GetMapPalsIndex + ld hl, wSGBPals + 1 + ld [hld], a + ld de, BlkPacket_9a86 + ld a, SCGB_MAPPALS + ld [SGBPredef], a + ret +; 88cd + +.SGB_Evolution: ; 88cd + push bc + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + pop bc + ld a, c + and a + jr z, .partymon + ; Egg + ld hl, wSGBPals + 3 + ; RGB 7, 7, 7 + ld [hl], $e7 + inc hl + ld [hl], $1c + inc hl + ; RGB 2, 3, 3 + ld [hl], $62 + inc hl + ld [hl], $c + jr .done + +.partymon + ld hl, PartyMon1DVs + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld c, l + ld b, h + ld a, [PlayerHPPal] + call GetPlayerOrMonPalettePointer + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + +.done + ld hl, wSGBPals + ld de, BlkPacket_9a86 + ret +; 891a + +.SGB0d: +.SGB_TrainerCard: ; 891a + ld hl, PalPacket_9cb6 + ld de, BlkPacket_9a86 + ret +; 8921 + +.SGB_UnownPuzzle: ; 8921 + ld hl, PalPacket_9bc6 + ld de, BlkPacket_9a86 + ret +; 8928 + +.SGB12: ; 8928 + ld hl, PalPacket_9bd6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld hl, BlkPacket_9a86 + ld de, wSGBPals + $10 + ld bc, $10 + call CopyBytes + call .GetMapPalsIndex + ld hl, wSGBPals + 1 + ld [hl], a + ld hl, wSGBPals + 3 + ld [hl], $2e + ld hl, wSGBPals + $13 + ld a, 5 + ld [hli], a + ld a, [wMenuBorderLeftCoord] + ld [hli], a + ld a, [wMenuBorderTopCoord] + ld [hli], a + ld a, [wMenuBorderRightCoord] + ld [hli], a + ld a, [wMenuBorderBottomCoord] + ld [hl], a + ld hl, wSGBPals + ld de, wSGBPals + $10 + ret +; 8969 + +.SGB1e: ; 8969 + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld a, [CurPartySpecies] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + add hl, hl + ld de, PokemonPalettes + add hl, de + ld a, [wcf65] + and 3 + sla a + sla a + ld c, a + ld b, 0 + add hl, bc + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + ld hl, wSGBPals + ld de, BlkPacket_9a86 + ret +; 89a6 + +.SGB19: ; 89a6 + ld hl, PalPacket_9cd6 + ld de, BlkPacket_9a86 + ret +; 89ad + +.SGB_PlayerOrMonFrontpicPals: ; 89ad + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetPlayerOrMonPalettePointer + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + ld hl, wSGBPals + ld de, BlkPacket_9a86 + ret +; 89d9 + +.SGB_TradeTube: ; 89d9 + ld hl, PalPacket_9cc6 + ld de, BlkPacket_9a86 + ret +; 89e0 + +.SGB_TrainerOrMonFrontpicPals: ; 89e0 + ld hl, PalPacket_9ce6 + ld de, wSGBPals + ld bc, $10 + call CopyBytes + ld a, [CurPartySpecies] + ld bc, TempMonDVs + call GetFrontpicPalettePointer + ld a, [hli] + ld [wSGBPals + 3], a + ld a, [hli] + ld [wSGBPals + 4], a + ld a, [hli] + ld [wSGBPals + 5], a + ld a, [hl] + ld [wSGBPals + 6], a + ld hl, wSGBPals + ld de, BlkPacket_9a86 + ret +; 8a0c + +.GetMapPalsIndex: ; 8a0c + ld a, [TimeOfDayPal] + cp NITE_F + jr c, .morn_day + ld a, $19 + ret + +.morn_day + ld a, [wPermission] + cp ROUTE + jr z, .route + cp CAVE + jr z, .cave + cp DUNGEON + jr z, .cave + cp PERM_5 + jr z, .perm5 + cp GATE + jr z, .gate + ld a, [MapGroup] + ld e, a + ld d, 0 + ld hl, .SGBRoofPalInds + add hl, de + ld a, [hl] + ret + +.route + ld a, $00 + ret + +.cave + ld a, $18 + ret + +.perm5 + ld a, $06 + ret + +.gate + ld a, $03 + ret +; 8a45 + +.SGBRoofPalInds: ; 8a45 + db $00 ; Unused + db $12 ; Olivine + db $14 ; Mahogany + db $18 ; Various Dungeons + db $11 ; Ecruteak + db $15 ; Blackthorn + db $09 ; Cinnabar + db $04 ; Cerulean + db $0f ; Azalea + db $16 ; Lake Of Rage + db $0e ; Violet + db $10 ; Goldenrod + db $06 ; Vermilion + db $01 ; Palette + db $03 ; Pewter + db $06 ; Fast Ship + db $0b ; Indigo Plateau + db $08 ; Fuchsia + db $05 ; Lavender + db $17 ; Silver Cave Outside + db $08 ; Pokemon Center 2F + db $07 ; Celadon + db $13 ; Cianwood + db $02 ; Viridian + db $0c ; New Bark + db $0a ; Saffron + db $0d ; Cherrygrove +; 8a60 + +.Finish: ; 8a60 + push de + call PushSGBPals_ + pop hl + jp PushSGBPals_ +; 8a68 diff --git a/engine/time_capsule.asm b/engine/time_capsule.asm new file mode 100755 index 000000000..eb8896355 --- /dev/null +++ b/engine/time_capsule.asm @@ -0,0 +1,277 @@ +; These functions seem to be related to backwards compatibility + +ValidateOTTrademon: ; fb57e + ld a, [wd003] + ld hl, OTPartyMon1Species + call GetPartyLocation + push hl + ld a, [wd003] + inc a + ld c, a + ld b, 0 + ld hl, OTPartyCount + add hl, bc + ld a, [hl] + pop hl + cp EGG + jr z, .matching_or_egg + cp [hl] + jr nz, .abnormal + +.matching_or_egg + ld b, h + ld c, l + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + cp MAX_LEVEL + 1 + jr nc, .abnormal + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr nz, .normal + ld hl, OTPartySpecies + ld a, [wd003] + ld c, a + ld b, 0 + add hl, bc + ld a, [hl] + + ; Magnemite and Magneton's types changed + ; from Electric to Electric/Steel. + cp MAGNEMITE + jr z, .normal + cp MAGNETON + jr z, .normal + + ld [CurSpecies], a + call GetBaseData + ld hl, wLinkOTPartyMonTypes + add hl, bc + add hl, bc + ld a, [BaseType1] + cp [hl] + jr nz, .abnormal + inc hl + ld a, [BaseType2] + cp [hl] + jr nz, .abnormal + +.normal + and a + ret + +.abnormal + scf + ret +; fb5dd + +Functionfb5dd: ; fb5dd + ld a, [wd002] + ld d, a + ld a, [PartyCount] + ld b, a + ld c, $0 +.loop + ld a, c + cp d + jr z, .next + push bc + ld a, c + ld hl, PartyMon1HP + call GetPartyLocation + pop bc + ld a, [hli] + or [hl] + jr nz, .done + +.next + inc c + dec b + jr nz, .loop + ld a, [wd003] + ld hl, OTPartyMon1HP + call GetPartyLocation + ld a, [hli] + or [hl] + jr nz, .done + scf + ret + +.done + and a + ret +; fb60d + +PlaceTradePartnerNamesAndParty: ; fb60d + hlcoord 4, 0 + ld de, PlayerName + call PlaceString + ld a, $14 + ld [bc], a + hlcoord 4, 8 + ld de, OTPlayerName + call PlaceString + ld a, $14 + ld [bc], a + hlcoord 7, 1 + ld de, PartySpecies + call .PlaceSpeciesNames + hlcoord 7, 9 + ld de, OTPartySpecies +.PlaceSpeciesNames: ; fb634 + ld c, $0 +.loop + ld a, [de] + cp -1 + ret z + ld [wd265], a + push bc + push hl + push de + push hl + ld a, c + ld [hProduct], a + call GetPokemonName + pop hl + call PlaceString + pop de + inc de + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + inc c + jr .loop +; fb656 + + +INCLUDE "data/time_capsule/special_stats.asm" + + +INCLUDE "event/name_rater.asm" + + +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 + callba _PlayCryHeader + call WaitSFX + +.done + ret +; fb877 + +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 + callba _NewPokedexEntry + call WaitPressAorB_BlinkCursor + ld a, $1 + ld [wPokedexStatus], a + callba 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 + callba Pokedex_PlaceFrontpicTopLeftCorner + call WaitBGMap2 + callba 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 + +ConvertMon_2to1: ; fb8f1 +; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. + push bc + push hl + ld a, [wd265] + ld b, a + ld c, 0 + ld hl, Pokered_MonIndices +.loop + inc c + ld a, [hli] + cp b + jr nz, .loop + ld a, c + ld [wd265], a + pop hl + pop bc + ret +; fb908 + +ConvertMon_1to2: ; fb908 +; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. + push bc + push hl + ld a, [wd265] + dec a + ld hl, Pokered_MonIndices + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd265], a + pop hl + pop bc + ret +; fb91c + + +INCLUDE "data/time_capsule/mon_order.asm" diff --git a/engine/time_capsule/conversion.asm b/engine/time_capsule/conversion.asm deleted file mode 100755 index eb8896355..000000000 --- a/engine/time_capsule/conversion.asm +++ /dev/null @@ -1,277 +0,0 @@ -; These functions seem to be related to backwards compatibility - -ValidateOTTrademon: ; fb57e - ld a, [wd003] - ld hl, OTPartyMon1Species - call GetPartyLocation - push hl - ld a, [wd003] - inc a - ld c, a - ld b, 0 - ld hl, OTPartyCount - add hl, bc - ld a, [hl] - pop hl - cp EGG - jr z, .matching_or_egg - cp [hl] - jr nz, .abnormal - -.matching_or_egg - ld b, h - ld c, l - ld hl, MON_LEVEL - add hl, bc - ld a, [hl] - cp MAX_LEVEL + 1 - jr nc, .abnormal - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jr nz, .normal - ld hl, OTPartySpecies - ld a, [wd003] - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - - ; Magnemite and Magneton's types changed - ; from Electric to Electric/Steel. - cp MAGNEMITE - jr z, .normal - cp MAGNETON - jr z, .normal - - ld [CurSpecies], a - call GetBaseData - ld hl, wLinkOTPartyMonTypes - add hl, bc - add hl, bc - ld a, [BaseType1] - cp [hl] - jr nz, .abnormal - inc hl - ld a, [BaseType2] - cp [hl] - jr nz, .abnormal - -.normal - and a - ret - -.abnormal - scf - ret -; fb5dd - -Functionfb5dd: ; fb5dd - ld a, [wd002] - ld d, a - ld a, [PartyCount] - ld b, a - ld c, $0 -.loop - ld a, c - cp d - jr z, .next - push bc - ld a, c - ld hl, PartyMon1HP - call GetPartyLocation - pop bc - ld a, [hli] - or [hl] - jr nz, .done - -.next - inc c - dec b - jr nz, .loop - ld a, [wd003] - ld hl, OTPartyMon1HP - call GetPartyLocation - ld a, [hli] - or [hl] - jr nz, .done - scf - ret - -.done - and a - ret -; fb60d - -PlaceTradePartnerNamesAndParty: ; fb60d - hlcoord 4, 0 - ld de, PlayerName - call PlaceString - ld a, $14 - ld [bc], a - hlcoord 4, 8 - ld de, OTPlayerName - call PlaceString - ld a, $14 - ld [bc], a - hlcoord 7, 1 - ld de, PartySpecies - call .PlaceSpeciesNames - hlcoord 7, 9 - ld de, OTPartySpecies -.PlaceSpeciesNames: ; fb634 - ld c, $0 -.loop - ld a, [de] - cp -1 - ret z - ld [wd265], a - push bc - push hl - push de - push hl - ld a, c - ld [hProduct], a - call GetPokemonName - pop hl - call PlaceString - pop de - inc de - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - inc c - jr .loop -; fb656 - - -INCLUDE "data/time_capsule/special_stats.asm" - - -INCLUDE "event/name_rater.asm" - - -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 - callba _PlayCryHeader - call WaitSFX - -.done - ret -; fb877 - -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 - callba _NewPokedexEntry - call WaitPressAorB_BlinkCursor - ld a, $1 - ld [wPokedexStatus], a - callba 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 - callba Pokedex_PlaceFrontpicTopLeftCorner - call WaitBGMap2 - callba 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 - -ConvertMon_2to1: ; fb8f1 -; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. - push bc - push hl - ld a, [wd265] - ld b, a - ld c, 0 - ld hl, Pokered_MonIndices -.loop - inc c - ld a, [hli] - cp b - jr nz, .loop - ld a, c - ld [wd265], a - pop hl - pop bc - ret -; fb908 - -ConvertMon_1to2: ; fb908 -; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. - push bc - push hl - ld a, [wd265] - dec a - ld hl, Pokered_MonIndices - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wd265], a - pop hl - pop bc - ret -; fb91c - - -INCLUDE "data/time_capsule/mon_order.asm" diff --git a/engine/trade/animation.asm b/engine/trade/animation.asm deleted file mode 100755 index 7100bd558..000000000 --- a/engine/trade/animation.asm +++ /dev/null @@ -1,1628 +0,0 @@ -TradeAnimation: ; 28f24 - xor a - ld [wcf66], a - ld hl, wPlayerTrademonSenderName - ld de, wOTTrademonSenderName - call LinkTradeAnim_LoadTradePlayerNames - ld hl, wPlayerTrademonSpecies - ld de, wOTTrademonSpecies - call LinkTradeAnim_LoadTradeMonSpecies - ld de, .script - jr RunTradeAnimScript - -.script - tradeanim_setup_givemon_scroll - tradeanim_show_givemon_data - tradeanim_do_givemon_scroll - tradeanim_wait_80 - tradeanim_wait_96 - tradeanim_poof - tradeanim_rocking_ball - tradeanim_enter_link_tube - tradeanim_wait_anim - tradeanim_bulge_through_tube - tradeanim_wait_anim - tradeanim_textbox_scroll - tradeanim_give_trademon_sfx - tradeanim_tube_to_ot - tradeanim_sent_to_ot_text - tradeanim_scroll_out_right - - tradeanim_ot_sends_text_1 - tradeanim_ot_bids_farewell - tradeanim_wait_40 - tradeanim_scroll_out_right - tradeanim_get_trademon_sfx - tradeanim_tube_to_player - tradeanim_enter_link_tube - tradeanim_drop_ball - tradeanim_exit_link_tube - tradeanim_wait_anim - tradeanim_show_getmon_data - tradeanim_poof - tradeanim_wait_anim - tradeanim_frontpic_scroll - tradeanim_animate_frontpic - tradeanim_wait_80_if_ot_egg - tradeanim_textbox_scroll - tradeanim_take_care_of_text - tradeanim_scroll_out_right - tradeanim_end - -TradeAnimationPlayer2: ; 28f63 - xor a - ld [wcf66], a - ld hl, wOTTrademonSenderName - ld de, wPlayerTrademonSenderName - call LinkTradeAnim_LoadTradePlayerNames - ld hl, wOTTrademonSpecies - ld de, wPlayerTrademonSpecies - call LinkTradeAnim_LoadTradeMonSpecies - ld de, .script - jr RunTradeAnimScript - -.script - tradeanim_ot_sends_text_2 - tradeanim_ot_bids_farewell - tradeanim_wait_40 - tradeanim_scroll_out_right - tradeanim_get_trademon_sfx - tradeanim_tube_to_ot - tradeanim_enter_link_tube - tradeanim_drop_ball - tradeanim_exit_link_tube - tradeanim_wait_anim - tradeanim_show_getmon_data - tradeanim_poof - tradeanim_wait_anim - tradeanim_frontpic_scroll - tradeanim_animate_frontpic - tradeanim_wait_180_if_ot_egg - tradeanim_textbox_scroll - tradeanim_take_care_of_text - tradeanim_scroll_out_right - - tradeanim_setup_givemon_scroll - tradeanim_show_givemon_data - tradeanim_do_givemon_scroll - tradeanim_wait_40 - tradeanim_poof - tradeanim_rocking_ball - tradeanim_enter_link_tube - tradeanim_wait_anim - tradeanim_bulge_through_tube - tradeanim_wait_anim - tradeanim_textbox_scroll - tradeanim_give_trademon_sfx - tradeanim_tube_to_player - tradeanim_sent_to_ot_text - tradeanim_scroll_out_right - tradeanim_end - -RunTradeAnimScript: ; 28fa1 - ld hl, wTradeAnimAddress - ld [hl], e - inc hl - ld [hl], d - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a - ld hl, VramState - ld a, [hl] - push af - res 0, [hl] - ld hl, Options - ld a, [hl] - push af - set 4, [hl] - call .TradeAnimLayout - ld a, [wcf66] - and a - jr nz, .anim_loop - ld de, MUSIC_EVOLUTION - call PlayMusic2 -.anim_loop - call DoTradeAnimation - jr nc, .anim_loop - pop af - ld [Options], a - pop af - ld [VramState], a - pop af - ld [hMapAnims], a - ret - -; 28fdb - -.TradeAnimLayout: ; 28fdb - xor a - ld [wJumptableIndex], a - call ClearBGPalettes - call ClearSprites - call ClearTileMap - call DisableLCD - call LoadFontsBattleExtra - callab ClearSpriteAnims - ld a, [hCGB] - and a - jr z, .NotCGB - ld a, $1 - ld [rVBK], a - ld hl, VTiles0 - ld bc, sScratch - VTiles0 - xor a - call ByteFill - ld a, $0 - ld [rVBK], a - -.NotCGB: - hlbgcoord 0, 0 - ld bc, sScratch - VBGMap0 - ld a, " " - call ByteFill - ld hl, TradeGameBoyLZ - ld de, VTiles2 tile $31 - call Decompress - ld hl, TradeArrowGFX - ld de, VTiles1 tile $6d - ld bc, $10 - ld a, BANK(TradeArrowGFX) - call FarCopyBytes - ld hl, TradeArrowGFX + $10 - ld de, VTiles1 tile $6e - ld bc, $10 - ld a, BANK(TradeArrowGFX) - call FarCopyBytes - xor a - ld [hSCX], a - ld [hSCY], a - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - callba GetTrademonFrontpic - call EnableLCD - call LoadTradeBallAndCableGFX - ld a, [wPlayerTrademonSpecies] - ld hl, wPlayerTrademonDVs - ld de, VTiles0 - call TradeAnim_GetFrontpic - ld a, [wOTTrademonSpecies] - ld hl, wOTTrademonDVs - ld de, VTiles0 tile $31 - call TradeAnim_GetFrontpic - ld a, [wPlayerTrademonSpecies] - ld de, wPlayerTrademonSpeciesName - call TradeAnim_GetNickname - ld a, [wOTTrademonSpecies] - ld de, wOTTrademonSpeciesName - call TradeAnim_GetNickname - call TradeAnim_NormalPals - ret - -; 29082 - -DoTradeAnimation: ; 29082 - ld a, [wJumptableIndex] - bit 7, a - jr nz, .finished - call .DoTradeAnimCommand - callab PlaySpriteAnimations - ld hl, wcf65 - inc [hl] - call DelayFrame - and a - ret - -.finished - call LoadStandardFont - scf - ret - -; 290a0 - -.DoTradeAnimCommand: ; 290a0 - ld a, [wJumptableIndex] - ld e, a - ld d, 0 - ld hl, .JumpTable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 290af - -.JumpTable: ; 290af -; entries correspond to macros/trade_anim.asm enumeration - dw TradeAnim_AdvanceScriptPointer ; 00 - dw TradeAnim_ShowGivemonData ; 01 - dw TradeAnim_ShowGetmonData ; 02 - dw TradeAnim_EnterLinkTube1 ; 03 - dw TradeAnim_EnterLinkTube2 ; 04 - dw TradeAnim_ExitLinkTube ; 05 - dw TradeAnim_TubeToOT1 ; 06 - dw TradeAnim_TubeToOT2 ; 07 - dw TradeAnim_TubeToOT3 ; 08 - dw TradeAnim_TubeToOT4 ; 09 - dw TradeAnim_TubeToOT5 ; 0a - dw TradeAnim_TubeToOT6 ; 0b - dw TradeAnim_TubeToOT7 ; 0c - dw TradeAnim_TubeToOT8 ; 0d - dw TradeAnim_TubeToPlayer1 ; 0e - dw TradeAnim_TubeToPlayer2 ; 0f - dw TradeAnim_TubeToPlayer3 ; 10 - dw TradeAnim_TubeToPlayer4 ; 11 - dw TradeAnim_TubeToPlayer5 ; 12 - dw TradeAnim_TubeToPlayer6 ; 13 - dw TradeAnim_TubeToPlayer7 ; 14 - dw TradeAnim_TubeToPlayer8 ; 15 - dw TradeAnim_SentToOTText ; 16 - dw TradeAnim_OTBidsFarewell ; 17 - dw TradeAnim_TakeCareOfText ; 18 - dw TradeAnim_OTSendsText1 ; 19 - dw TradeAnim_OTSendsText2 ; 1a - dw TradeAnim_SetupGivemonScroll ; 1b - dw TradeAnim_DoGivemonScroll ; 1c - dw TradeAnim_FrontpicScrollStart ; 1d - dw TradeAnim_TextboxScrollStart ; 1e - dw TradeAnim_ScrollOutRight ; 1f - dw TradeAnim_ScrollOutRight2 ; 20 - dw TraideAnim_Wait80 ; 21 - dw TraideAnim_Wait40 ; 22 - dw TradeAnim_RockingBall ; 23 - dw TradeAnim_DropBall ; 24 - dw TradeAnim_WaitAnim ; 25 - dw TradeAnim_WaitAnim2 ; 26 - dw TradeAnim_Poof ; 27 - dw TradeAnim_BulgeThroughTube ; 28 - dw TradeAnim_GiveTrademonSFX ; 29 - dw TradeAnim_GetTrademonSFX ; 2a - dw TradeAnim_End ; 2b - dw TradeAnim_AnimateFrontpic ; 2c - dw TraideAnim_Wait96 ; 2d - dw TraideAnim_Wait80IfOTEgg ; 2e - dw TraideAnim_Wait180IfOTEgg ; 2f -; 2910f - -TradeAnim_IncrementJumptableIndex: ; 2910f - ld hl, wJumptableIndex - inc [hl] - ret - -; 29114 - -TradeAnim_AdvanceScriptPointer: ; 29114 - ld hl, wTradeAnimAddress - ld e, [hl] - inc hl - ld d, [hl] - ld a, [de] - ld [wJumptableIndex], a - inc de - ld [hl], d - dec hl - ld [hl], e - ret - -; 29123 - -TradeAnim_End: ; 29123 - ld hl, wJumptableIndex - set 7, [hl] - ret - -; 29129 - -TradeAnim_TubeToOT1: ; 29129 - ld a, $ed ; >>>>>>>> - call TradeAnim_PlaceTrademonStatsOnTubeAnim - ld a, [wLinkTradeSendmonSpecies] - ld [wd265], a - xor a - depixel 5, 11, 4, 0 - ld b, $0 - jr TradeAnim_InitTubeAnim - -TradeAnim_TubeToPlayer1: ; 2913c - ld a, $ee ; <<<<<<<< - call TradeAnim_PlaceTrademonStatsOnTubeAnim - ld a, [wLinkTradeGetmonSpecies] - ld [wd265], a - ld a, $2 - depixel 9, 18, 4, 4 - ld b, $4 -TradeAnim_InitTubeAnim: ; 2914e - push bc - push de - push bc - push de - - push af - call DisableLCD - callab ClearSpriteAnims - hlbgcoord 20, 3 - ld bc, 12 - ld a, $60 - call ByteFill - pop af - - call TradeAnim_TubeAnimJumptable - - xor a - ld [hSCX], a - ld a, $7 - ld [hWX], a - ld a, $70 - ld [hWY], a - call EnableLCD - call LoadTradeBubbleGFX - - pop de - ld a, SPRITE_ANIM_INDEX_TRADEMON_ICON - call _InitSpriteAnimStruct - - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - pop bc - ld [hl], b - - pop de - ld a, SPRITE_ANIM_INDEX_TRADEMON_BUBBLE - call _InitSpriteAnimStruct - - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - pop bc - ld [hl], b - - call WaitBGMap - ld b, SCGB_TRADE_TUBE - call GetSGBLayout - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbBGPals - ld a, %11010000 - call DmgToCgbObjPal0 - - call TradeAnim_IncrementJumptableIndex - ld a, $5c - ld [wcf64], a - ret - -; 291af - -TradeAnim_TubeToOT2: ; 291af - call TradeAnim_FlashBGPals - ld a, [hSCX] - add $2 - ld [hSCX], a - cp $50 - ret nz - ld a, $1 - call TradeAnim_TubeAnimJumptable - call TradeAnim_IncrementJumptableIndex - ret - -; 291c4 - -TradeAnim_TubeToOT3: ; 291c4 - call TradeAnim_FlashBGPals - ld a, [hSCX] - add $2 - ld [hSCX], a - cp $a0 - ret nz - ld a, $2 - call TradeAnim_TubeAnimJumptable - call TradeAnim_IncrementJumptableIndex - ret - -; 291d9 - -TradeAnim_TubeToOT4: ; 291d9 - call TradeAnim_FlashBGPals - ld a, [hSCX] - add $2 - ld [hSCX], a - and a - ret nz - call TradeAnim_IncrementJumptableIndex - ret - -; 291e8 - -TradeAnim_TubeToPlayer3: ; 291e8 - call TradeAnim_FlashBGPals - ld a, [hSCX] - sub $2 - ld [hSCX], a - cp $b0 - ret nz - ld a, $1 - call TradeAnim_TubeAnimJumptable - call TradeAnim_IncrementJumptableIndex - ret - -; 291fd - -TradeAnim_TubeToPlayer4: ; 291fd - call TradeAnim_FlashBGPals - ld a, [hSCX] - sub $2 - ld [hSCX], a - cp $60 - ret nz - xor a - call TradeAnim_TubeAnimJumptable - call TradeAnim_IncrementJumptableIndex - ret - -; 29211 - -TradeAnim_TubeToPlayer5: ; 29211 - call TradeAnim_FlashBGPals - ld a, [hSCX] - sub $2 - ld [hSCX], a - and a - ret nz - call TradeAnim_IncrementJumptableIndex - ret - -; 29220 - -TradeAnim_TubeToOT6: -TradeAnim_TubeToPlayer6: ; 29220 - ld a, $80 - ld [wcf64], a - call TradeAnim_IncrementJumptableIndex - ret - -; 29229 - -TradeAnim_TubeToOT8: -TradeAnim_TubeToPlayer8: ; 29229 - call ClearBGPalettes - call ClearTileMap - call ClearSprites - call DisableLCD - callab ClearSpriteAnims - hlbgcoord 0, 0 - ld bc, sScratch - VBGMap0 - ld a, " " - call ByteFill - xor a - ld [hSCX], a - ld a, $90 - ld [hWY], a - call EnableLCD - call LoadTradeBallAndCableGFX - call WaitBGMap - call TradeAnim_NormalPals - call TradeAnim_AdvanceScriptPointer - ret - -; 2925d - -TradeAnim_TubeToOT5: -TradeAnim_TubeToOT7: -TradeAnim_TubeToPlayer2: -TradeAnim_TubeToPlayer7: ; 2925d - call TradeAnim_FlashBGPals - ld hl, wcf64 - ld a, [hl] - and a - jr z, .done - dec [hl] - ret - -.done - call TradeAnim_IncrementJumptableIndex - ret - -; 2926d - -TradeAnim_GiveTrademonSFX: ; 2926d - call TradeAnim_AdvanceScriptPointer - ld de, SFX_GIVE_TRADEMON - call PlaySFX - ret - -; 29277 - -TradeAnim_GetTrademonSFX: ; 29277 - call TradeAnim_AdvanceScriptPointer - ld de, SFX_GET_TRADEMON - call PlaySFX - ret - -; 29281 - -TradeAnim_TubeAnimJumptable: ; 29281 - and 3 - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 2928f - -.Jumptable: ; 2928f - dw .Zero - dw .One - dw .Two - dw .Three -; 29297 - -.Zero: ; 29297 -.Three: ; 29297 - call TradeAnim_BlankTileMap - hlcoord 9, 3 - ld [hl], $5b - inc hl - ld bc, 10 - ld a, $60 - call ByteFill - hlcoord 3, 2 - call TradeAnim_CopyTradeGameBoyTilemap - ret - -; 292af - -.One: ; 292af - call TradeAnim_BlankTileMap - hlcoord 0, 3 - ld bc, SCREEN_WIDTH - ld a, $60 - call ByteFill - ret - -; 292be - -.Two: ; 292be - call TradeAnim_BlankTileMap - hlcoord 0, 3 - ld bc, $11 - ld a, $60 - call ByteFill - hlcoord 17, 3 - ld a, $5d - ld [hl], a - - ld a, $61 - ld de, SCREEN_WIDTH - ld c, $3 -.loop - add hl, de - ld [hl], a - dec c - jr nz, .loop - - add hl, de - ld a, $5f - ld [hld], a - ld a, $5b - ld [hl], a - hlcoord 10, 6 - call TradeAnim_CopyTradeGameBoyTilemap - ret - -; 292ec - -TradeAnim_CopyTradeGameBoyTilemap: ; 292ec - ld de, TradeGameBoyTilemap - lb bc, 8, 6 - call TradeAnim_CopyBoxFromDEtoHL - ret - -; 292f6 - -TradeAnim_PlaceTrademonStatsOnTubeAnim: ; 292f6 - push af - call ClearBGPalettes - call WaitTop - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - hlcoord 0, 0 - ld bc, SCREEN_WIDTH - ld a, "─" - call ByteFill - hlcoord 0, 1 - ld de, wLinkPlayer1Name - call PlaceString - ld hl, wLinkPlayer2Name - ld de, 0 -.find_name_end_loop - ld a, [hli] - cp "@" - jr z, .done - dec de - jr .find_name_end_loop - -.done - hlcoord 0, 4 - add hl, de - ld de, wLinkPlayer2Name - call PlaceString - hlcoord 7, 2 - ld bc, 6 - pop af - call ByteFill - call WaitBGMap - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - ret - -; 29348 - -TradeAnim_EnterLinkTube1: ; 29348 - call ClearTileMap - call WaitTop - ld a, $a0 - ld [hSCX], a - call DelayFrame - hlcoord 8, 2 - ld de, TradeLinkTubeTilemap - lb bc, 3, 12 - call TradeAnim_CopyBoxFromDEtoHL - call WaitBGMap - ld b, SCGB_TRADE_TUBE - call GetSGBLayout - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbBGPals - lb de, %11100100, %11100100 ; 3,2,1,0, 3,2,1,0 - call DmgToCgbObjPals - ld de, SFX_POTION - call PlaySFX - call TradeAnim_IncrementJumptableIndex - ret - -; 2937e - -TradeAnim_EnterLinkTube2: ; 2937e - ld a, [hSCX] - and a - jr z, .done - add $4 - ld [hSCX], a - ret - -.done - ld c, 80 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 29391 - -TradeAnim_ExitLinkTube: ; 29391 - ld a, [hSCX] - cp $a0 - jr z, .done - sub $4 - ld [hSCX], a - ret - -.done - call ClearTileMap - xor a - ld [hSCX], a - call TradeAnim_AdvanceScriptPointer - ret - -; 293a6 - -TradeAnim_SetupGivemonScroll: ; 293a6 - ld a, $8f - ld [hWX], a - ld a, $88 - ld [hSCX], a - ld a, $50 - ld [hWY], a - call TradeAnim_AdvanceScriptPointer - ret - -; 293b6 - -TradeAnim_DoGivemonScroll: ; 293b6 - ld a, [hWX] - cp $7 - jr z, .done - sub $4 - ld [hWX], a - ld a, [hSCX] - sub $4 - ld [hSCX], a - ret - -.done - ld a, $7 - ld [hWX], a - xor a - ld [hSCX], a - call TradeAnim_AdvanceScriptPointer - ret - -; 293d2 - -TradeAnim_FrontpicScrollStart: ; 293d2 - ld a, $7 - ld [hWX], a - ld a, $50 - ld [hWY], a - call TradeAnim_AdvanceScriptPointer - ret - -; 293de - -TradeAnim_TextboxScrollStart: ; 293de - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - call TradeAnim_AdvanceScriptPointer - ret - -; 293ea - -TradeAnim_ScrollOutRight: ; 293ea - call WaitTop - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call WaitBGMap - ld a, $7 - ld [hWX], a - xor a - ld [hWY], a - call DelayFrame - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call ClearTileMap - call TradeAnim_IncrementJumptableIndex - ret - -; 2940c - -TradeAnim_ScrollOutRight2: ; 2940c - ld a, [hWX] - cp $a1 - jr nc, .done - add $4 - ld [hWX], a - ret - -.done - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - call WaitBGMap - ld a, $7 - ld [hWX], a - ld a, $90 - ld [hWY], a - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - call TradeAnim_AdvanceScriptPointer - ret - -; 2942e - -TradeAnim_ShowGivemonData: ; 2942e - call ShowPlayerTrademonStats - ld a, [wPlayerTrademonSpecies] - ld [CurPartySpecies], a - ld a, [wPlayerTrademonDVs] - ld [TempMonDVs], a - ld a, [wPlayerTrademonDVs + 1] - ld [TempMonDVs + 1], a - ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS - call GetSGBLayout - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbBGPals - call TradeAnim_ShowGivemonFrontpic - - ld a, [wPlayerTrademonSpecies] - call GetCryIndex - jr c, .skip_cry - ld e, c - ld d, b - call PlayCryHeader -.skip_cry - - call TradeAnim_AdvanceScriptPointer - ret - -; 29461 - -TradeAnim_ShowGetmonData: ; 29461 - call 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 - call TradeAnim_ShowGetmonFrontpic - call TradeAnim_AdvanceScriptPointer - ret - -; 29487 - -TradeAnim_AnimateFrontpic: ; 29487 - callba AnimateTrademonFrontpic - call TradeAnim_AdvanceScriptPointer - ret - -; 29491 - -TradeAnim_GetFrontpic: ; 29491 - push de - push af - predef GetUnownLetter - pop af - ld [CurPartySpecies], a - ld [CurSpecies], a - call GetBaseData - pop de - predef GetFrontpic - ret - -; 294a9 - -TradeAnim_GetNickname: ; 294a9 - push de - ld [wd265], a - call GetPokemonName - ld hl, StringBuffer1 - pop de - ld bc, NAME_LENGTH - call CopyBytes - ret - -; 294bb - -TradeAnim_ShowGivemonFrontpic: ; 294bb - ld de, VTiles0 - jr TradeAnim_ShowFrontpic - -TradeAnim_ShowGetmonFrontpic: ; 294c0 - ld de, VTiles0 tile $31 -TradeAnim_ShowFrontpic: ; 294c3 - call DelayFrame - ld hl, VTiles2 - lb bc, 10, $31 - call Request2bpp - call WaitTop - call TradeAnim_BlankTileMap - hlcoord 7, 2 - xor a - ld [hGraphicStartTile], a - lb bc, 7, 7 - predef PlaceGraphic - call WaitBGMap - ret - -; 294e7 - -TraideAnim_Wait80: ; 294e7 - ld c, 80 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 294f0 - -TraideAnim_Wait40: ; 294f0 - ld c, 40 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 294f9 - -TraideAnim_Wait96: ; 294f9 - ld c, 96 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 29502 - -TraideAnim_Wait80IfOTEgg: ; 29502 - call IsOTTrademonEgg - ret nz - ld c, 80 - call DelayFrames - ret - -; 2950c - -TraideAnim_Wait180IfOTEgg: ; 2950c - call IsOTTrademonEgg - ret nz - ld c, 180 - call DelayFrames - ret - -; 29516 - -IsOTTrademonEgg: ; 29516 - call TradeAnim_AdvanceScriptPointer - ld a, [wOTTrademonSpecies] - cp EGG - ret - -; 2951f -ShowPlayerTrademonStats: ; 2951f - ld de, wPlayerTrademonSpecies - ld a, [de] - cp EGG - jr z, TrademonStats_Egg - call TrademonStats_MonTemplate - ld de, wPlayerTrademonSpecies - call TrademonStats_PrintSpeciesNumber - ld de, wPlayerTrademonSpeciesName - call TrademonStats_PrintSpeciesName - ld a, [wPlayerTrademonCaughtData] - ld de, wPlayerTrademonOTName - call TrademonStats_PrintOTName - ld de, wPlayerTrademonID - call TrademonStats_PrintTrademonID - call TrademonStats_WaitBGMap - ret - -; 29549 - -ShowOTTrademonStats: ; 29549 - ld de, wOTTrademonSpecies - ld a, [de] - cp EGG - jr z, TrademonStats_Egg - call TrademonStats_MonTemplate - ld de, wOTTrademonSpecies - call TrademonStats_PrintSpeciesNumber - ld de, wOTTrademonSpeciesName - call TrademonStats_PrintSpeciesName - ld a, [wOTTrademonCaughtData] - ld de, wOTTrademonOTName - call TrademonStats_PrintOTName - ld de, wOTTrademonID - call TrademonStats_PrintTrademonID - call TrademonStats_WaitBGMap - ret - -; 29573 - -TrademonStats_MonTemplate: ; 29573 - call WaitTop - call TradeAnim_BlankTileMap - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - hlcoord 3, 0 - ld b, $6 - ld c, $d - call TextBox - hlcoord 4, 0 - ld de, .OTMonData - call PlaceString - ret - -; 29591 - -.OTMonData: ; 29591 - db "─── №." - next "" - next "OT/" - next "№.@" -; 295a1 - -TrademonStats_Egg: ; 295a1 - call WaitTop - call TradeAnim_BlankTileMap - ld a, VBGMap1 / $100 - ld [hBGMapAddress + 1], a - hlcoord 3, 0 - ld b, 6 - ld c, 13 - call TextBox - hlcoord 4, 2 - ld de, .EggData - call PlaceString - call TrademonStats_WaitBGMap - ret - -; 295c2 - -.EggData: ; 295c2 - db "EGG" - next "OT/?????" - next "№.?????@" -; 295d8 - -TrademonStats_WaitBGMap: ; 295d8 - call WaitBGMap - call WaitTop - ld a, VBGMap0 / $100 - ld [hBGMapAddress + 1], a - ret - -; 295e3 - -TrademonStats_PrintSpeciesNumber: ; 295e3 - hlcoord 10, 0 - lb bc, PRINTNUM_LEADINGZEROS | 1, 3 - call PrintNum - ld [hl], " " - ret - -; 295ef - -TrademonStats_PrintSpeciesName: ; 295ef - hlcoord 4, 2 - call PlaceString - ret - -; 295f6 - -TrademonStats_PrintOTName: ; 295f6 - cp 3 - jr c, .caught_gender_okay - xor a -.caught_gender_okay - push af - hlcoord 7, 4 - call PlaceString - inc bc - pop af - ld hl, .Gender - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - ld [bc], a - ret - -; 2960e - -.Gender: ; 2960e - db " ", "♂", "♀" -; 29611 - -TrademonStats_PrintTrademonID: ; 29611 - hlcoord 7, 6 - lb bc, PRINTNUM_LEADINGZEROS | 2, 5 - call PrintNum - ret - -; 2961b - -TradeAnim_RockingBall: ; 2961b - depixel 10, 11, 4, 0 - ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL - call _InitSpriteAnimStruct - call TradeAnim_AdvanceScriptPointer - ld a, $20 - ld [wcf64], a - ret - -; 2962c - -TradeAnim_DropBall: ; 2962c - depixel 10, 11, 4, 0 - ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL - call _InitSpriteAnimStruct - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - ld [hl], $1 - ld hl, SPRITEANIMSTRUCT_YOFFSET - add hl, bc - ld [hl], $dc - call TradeAnim_AdvanceScriptPointer - ld a, $38 - ld [wcf64], a - ret - -; 29649 - -TradeAnim_Poof: ; 29649 - depixel 10, 11, 4, 0 - ld a, SPRITE_ANIM_INDEX_TRADE_POOF - call _InitSpriteAnimStruct - call TradeAnim_AdvanceScriptPointer - ld a, $10 - ld [wcf64], a - ld de, SFX_BALL_POOF - call PlaySFX - ret - -; 29660 - -TradeAnim_BulgeThroughTube: ; 29660 - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbObjPal0 - depixel 5, 11 - ld a, SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE - call _InitSpriteAnimStruct - call TradeAnim_AdvanceScriptPointer - ld a, $40 - ld [wcf64], a - ret - -; 29676 - -TradeAnim_AnimateTrademonInTube: ; 29676 (a:5676) - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - ld e, [hl] - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 29686 - -.Jumptable: ; 29686 (a:5686) - dw .InitTimer - dw .WaitTimer1 - dw .MoveRight - dw .MoveDown - dw .MoveUp - dw .MoveLeft - dw .WaitTimer2 -; 2969a - -.JumptableNext: ; 29694 (a:5694) - ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX - add hl, bc - inc [hl] - ret - -.InitTimer: ; 2969a (a:569a) - call .JumptableNext - ld hl, SPRITEANIMSTRUCT_0C - add hl, bc - ld [hl], $80 - ret - -.WaitTimer1: ; 296a4 (a:56a4) - ld hl, SPRITEANIMSTRUCT_0C - add hl, bc - ld a, [hl] - dec [hl] - and a - ret nz - call .JumptableNext - -.MoveRight: ; 296af (a:56af) - ld hl, SPRITEANIMSTRUCT_XCOORD - add hl, bc - ld a, [hl] - cp $94 - jr nc, .done_move_right - inc [hl] - ret - -.done_move_right - call .JumptableNext - -.MoveDown: ; 296bd (a:56bd) - ld hl, SPRITEANIMSTRUCT_YCOORD - add hl, bc - ld a, [hl] - cp $4c - jr nc, .done_move_down - inc [hl] - ret - -.done_move_down - ld hl, SPRITEANIMSTRUCT_INDEX - add hl, bc - ld [hl], $0 - ret - -.MoveUp: ; 296cf (a:56cf) - ld hl, SPRITEANIMSTRUCT_YCOORD - add hl, bc - ld a, [hl] - cp $2c - jr z, .done_move_up - dec [hl] - ret - -.done_move_up - call .JumptableNext - -.MoveLeft: ; 296dd (a:56dd) - ld hl, SPRITEANIMSTRUCT_XCOORD - add hl, bc - ld a, [hl] - cp $58 - jr z, .done_move_left - dec [hl] - ret - -.done_move_left - call .JumptableNext - ld hl, SPRITEANIMSTRUCT_0C - add hl, bc - ld [hl], $80 - ret - -.WaitTimer2: ; 296f2 (a:56f2) - ld hl, SPRITEANIMSTRUCT_0C - add hl, bc - ld a, [hl] - dec [hl] - and a - ret nz - ld hl, SPRITEANIMSTRUCT_INDEX - add hl, bc - ld [hl], $0 - ret - -; 29701 (a:5701) - -TradeAnim_SentToOTText: ; 29701 - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jr z, .time_capsule - ld hl, .Text_MonName - call PrintText - ld c, 189 - call DelayFrames - ld hl, .Text_WasSentTo - call PrintText - call TradeAnim_Wait80Frames - ld c, 128 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -.time_capsule - ld hl, .Text_WasSentTo - call PrintText - call TradeAnim_Wait80Frames - call TradeAnim_AdvanceScriptPointer - ret - -; 29732 - -.Text_WasSentTo: ; 0x29732 - ; was sent to @ . - text_jump UnknownText_0x1bc6e9 - db "@" -; 0x29737 - -.Text_MonName: ; 0x29737 - ; - text_jump UnknownText_0x1bc701 - db "@" -; 0x2973c - -TradeAnim_OTBidsFarewell: ; 2973c - ld hl, .Text_BidsFarewellToMon - call PrintText - call TradeAnim_Wait80Frames - ld hl, .Text_MonName - call PrintText - call TradeAnim_Wait80Frames - call TradeAnim_AdvanceScriptPointer - ret - -; 29752 - -.Text_BidsFarewellToMon: ; 0x29752 - ; bids farewell to - text_jump UnknownText_0x1bc703 - db "@" -; 0x29757 - -.Text_MonName: ; 0x29757 - ; . - text_jump UnknownText_0x1bc719 - db "@" -; 0x2975c - -TradeAnim_TakeCareOfText: ; 2975c - call WaitTop - hlcoord 0, 10 - ld bc, 8 * SCREEN_WIDTH - ld a, " " - call ByteFill - call WaitBGMap - ld hl, .Text_TakeGoodCareOfMon - call PrintText - call TradeAnim_Wait80Frames - call TradeAnim_AdvanceScriptPointer - ret - -; 2977a - -.Text_TakeGoodCareOfMon: ; 0x2977a - ; Take good care of @ . - text_jump UnknownText_0x1bc71f - db "@" -; 0x2977f - -TradeAnim_OTSendsText1: ; 2977f - ld hl, .Text_ForYourMon - call PrintText - call TradeAnim_Wait80Frames - ld hl, .Text_OTSends - call PrintText - call TradeAnim_Wait80Frames - ld c, 14 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 2979a - -.Text_ForYourMon: ; 0x2979a - ; For @ 's @ , - text_jump UnknownText_0x1bc739 - db "@" -; 0x2979f - -.Text_OTSends: ; 0x2979f - ; sends @ . - text_jump UnknownText_0x1bc74c - db "@" -; 0x297a4 - -TradeAnim_OTSendsText2: ; 297a4 - ld hl, .Text_WillTrade - call PrintText - call TradeAnim_Wait80Frames - ld hl, .Text_ForYourMon - call PrintText - call TradeAnim_Wait80Frames - ld c, 14 - call DelayFrames - call TradeAnim_AdvanceScriptPointer - ret - -; 297bf - -.Text_WillTrade: ; 0x297bf - ; will trade @ @ - text_jump UnknownText_0x1bc75e - db "@" -; 0x297c4 - -.Text_ForYourMon: ; 0x297c4 - ; for @ 's @ . - text_jump UnknownText_0x1bc774 - db "@" -; 0x297c9 - -TradeAnim_Wait80Frames: ; 297c9 - ld c, 80 - call DelayFrames - ret - -; 297cf - -TradeAnim_BlankTileMap: ; 297cf - hlcoord 0, 0 - ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, " " - call ByteFill - ret - -; 297db - -TradeAnim_CopyBoxFromDEtoHL: ; 297db -.row - push bc - push hl -.col - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .col - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .row - ret - -; 297ed - -TradeAnim_NormalPals: ; 297ed - ld a, [hSGB] - and a - ld a, %11100100 ; 3,2,1,0 - jr z, .not_sgb - ld a, $f0 - -.not_sgb - call DmgToCgbObjPal0 - ld a, %11100100 ; 3,2,1,0 - call DmgToCgbBGPals - ret - -; 297ff - -LinkTradeAnim_LoadTradePlayerNames: ; 297ff - push de - ld de, wLinkPlayer1Name - ld bc, NAME_LENGTH - call CopyBytes - pop hl - ld de, wLinkPlayer2Name - ld bc, NAME_LENGTH - call CopyBytes - ret - -; 29814 - -LinkTradeAnim_LoadTradeMonSpecies: ; 29814 - ld a, [hl] - ld [wLinkTradeSendmonSpecies], a - ld a, [de] - ld [wLinkTradeGetmonSpecies], a - ret - -; 2981d - -TradeAnim_FlashBGPals: ; 2981d - ld a, [wcf65] - and $7 - ret nz - ld a, [rBGP] - xor %00111100 - call DmgToCgbBGPals - ret - -; 2982b - -LoadTradeBallAndCableGFX: ; 2982b - call DelayFrame - ld de, TradeBallGFX - ld hl, VTiles0 tile $62 - lb bc, BANK(TradeBallGFX), $6 - call Request2bpp - ld de, TradePoofGFX - ld hl, VTiles0 tile $68 - lb bc, BANK(TradePoofGFX), $c - call Request2bpp - ld de, TradeCableGFX - ld hl, VTiles0 tile $74 - lb bc, BANK(TradeCableGFX), $4 - call Request2bpp - xor a - ld hl, wSpriteAnimDict - ld [hli], a - ld [hl], $62 - ret - -; 2985a - -LoadTradeBubbleGFX: ; 2985a - call DelayFrame - ld e, $3 - callab LoadMenuMonIcon - ld de, TradeBubbleGFX - ld hl, VTiles0 tile $72 - lb bc, BANK(TradeBubbleGFX), $4 - call Request2bpp - xor a - ld hl, wSpriteAnimDict - ld [hli], a - ld [hl], $62 - ret - -; 29879 - -TradeAnim_WaitAnim: ; 29879 - ld hl, wcf64 - ld a, [hl] - and a - jr z, .done - dec [hl] - ret - -.done - call TradeAnim_AdvanceScriptPointer - ret - -; 29886 - -TradeAnim_WaitAnim2: ; 29886 - ld hl, wcf64 - ld a, [hl] - and a - jr z, .done - dec [hl] - ret - -.done - call TradeAnim_AdvanceScriptPointer - ret - -; 29893 - - -DebugTrade: ; 29893 -; This function is unreferenced. -; It was meant for use in Japanese versions, so the -; constant used for copy length was changed by accident. - - ld hl, .DebugTradeData - - ld a, [hli] - ld [wPlayerTrademonSpecies], a - ld de, wPlayerTrademonSenderName - ld c, 11 + 2 ; jp: 6 + 2 -.loop1 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop1 - - ld a, [hli] - ld [wOTTrademonSpecies], a - ld de, wOTTrademonSenderName - ld c, 11 + 2 ; jp: 6 + 2 -.loop2 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop2 - ret - -; 298b5 - -.DebugTradeData: ; 298b5 - db VENUSAUR, "ゲーフり@@", $23, $01 ; GAME FREAK - db CHARIZARD, "クりーチャ@", $56, $04 ; Creatures Inc. -; 298c7 - - -TradeGameBoyTilemap: ; 298c7 -; 6x8 - db $31, $32, $32, $32, $32, $33 - db $34, $35, $36, $36, $37, $38 - db $34, $39, $3a, $3a, $3b, $38 - db $3c, $3d, $3e, $3e, $3f, $40 - db $41, $42, $43, $43, $44, $45 - db $46, $47, $43, $48, $49, $4a - db $41, $43, $4b, $4c, $4d, $4e - db $4f, $50, $50, $50, $51, $52 -; 297f7 - -TradeLinkTubeTilemap: ; 297f7 -; 12x3 - db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53 - db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54 - db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43 -; 2991b - -TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp" -TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" -TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" -TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz" -TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" -TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" diff --git a/engine/trade_animation.asm b/engine/trade_animation.asm new file mode 100755 index 000000000..7100bd558 --- /dev/null +++ b/engine/trade_animation.asm @@ -0,0 +1,1628 @@ +TradeAnimation: ; 28f24 + xor a + ld [wcf66], a + ld hl, wPlayerTrademonSenderName + ld de, wOTTrademonSenderName + call LinkTradeAnim_LoadTradePlayerNames + ld hl, wPlayerTrademonSpecies + ld de, wOTTrademonSpecies + call LinkTradeAnim_LoadTradeMonSpecies + ld de, .script + jr RunTradeAnimScript + +.script + tradeanim_setup_givemon_scroll + tradeanim_show_givemon_data + tradeanim_do_givemon_scroll + tradeanim_wait_80 + tradeanim_wait_96 + tradeanim_poof + tradeanim_rocking_ball + tradeanim_enter_link_tube + tradeanim_wait_anim + tradeanim_bulge_through_tube + tradeanim_wait_anim + tradeanim_textbox_scroll + tradeanim_give_trademon_sfx + tradeanim_tube_to_ot + tradeanim_sent_to_ot_text + tradeanim_scroll_out_right + + tradeanim_ot_sends_text_1 + tradeanim_ot_bids_farewell + tradeanim_wait_40 + tradeanim_scroll_out_right + tradeanim_get_trademon_sfx + tradeanim_tube_to_player + tradeanim_enter_link_tube + tradeanim_drop_ball + tradeanim_exit_link_tube + tradeanim_wait_anim + tradeanim_show_getmon_data + tradeanim_poof + tradeanim_wait_anim + tradeanim_frontpic_scroll + tradeanim_animate_frontpic + tradeanim_wait_80_if_ot_egg + tradeanim_textbox_scroll + tradeanim_take_care_of_text + tradeanim_scroll_out_right + tradeanim_end + +TradeAnimationPlayer2: ; 28f63 + xor a + ld [wcf66], a + ld hl, wOTTrademonSenderName + ld de, wPlayerTrademonSenderName + call LinkTradeAnim_LoadTradePlayerNames + ld hl, wOTTrademonSpecies + ld de, wPlayerTrademonSpecies + call LinkTradeAnim_LoadTradeMonSpecies + ld de, .script + jr RunTradeAnimScript + +.script + tradeanim_ot_sends_text_2 + tradeanim_ot_bids_farewell + tradeanim_wait_40 + tradeanim_scroll_out_right + tradeanim_get_trademon_sfx + tradeanim_tube_to_ot + tradeanim_enter_link_tube + tradeanim_drop_ball + tradeanim_exit_link_tube + tradeanim_wait_anim + tradeanim_show_getmon_data + tradeanim_poof + tradeanim_wait_anim + tradeanim_frontpic_scroll + tradeanim_animate_frontpic + tradeanim_wait_180_if_ot_egg + tradeanim_textbox_scroll + tradeanim_take_care_of_text + tradeanim_scroll_out_right + + tradeanim_setup_givemon_scroll + tradeanim_show_givemon_data + tradeanim_do_givemon_scroll + tradeanim_wait_40 + tradeanim_poof + tradeanim_rocking_ball + tradeanim_enter_link_tube + tradeanim_wait_anim + tradeanim_bulge_through_tube + tradeanim_wait_anim + tradeanim_textbox_scroll + tradeanim_give_trademon_sfx + tradeanim_tube_to_player + tradeanim_sent_to_ot_text + tradeanim_scroll_out_right + tradeanim_end + +RunTradeAnimScript: ; 28fa1 + ld hl, wTradeAnimAddress + ld [hl], e + inc hl + ld [hl], d + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld hl, VramState + ld a, [hl] + push af + res 0, [hl] + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call .TradeAnimLayout + ld a, [wcf66] + and a + jr nz, .anim_loop + ld de, MUSIC_EVOLUTION + call PlayMusic2 +.anim_loop + call DoTradeAnimation + jr nc, .anim_loop + pop af + ld [Options], a + pop af + ld [VramState], a + pop af + ld [hMapAnims], a + ret + +; 28fdb + +.TradeAnimLayout: ; 28fdb + xor a + ld [wJumptableIndex], a + call ClearBGPalettes + call ClearSprites + call ClearTileMap + call DisableLCD + call LoadFontsBattleExtra + callab ClearSpriteAnims + ld a, [hCGB] + and a + jr z, .NotCGB + ld a, $1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, sScratch - VTiles0 + xor a + call ByteFill + ld a, $0 + ld [rVBK], a + +.NotCGB: + hlbgcoord 0, 0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + ld hl, TradeGameBoyLZ + ld de, VTiles2 tile $31 + call Decompress + ld hl, TradeArrowGFX + ld de, VTiles1 tile $6d + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + ld hl, TradeArrowGFX + $10 + ld de, VTiles1 tile $6e + ld bc, $10 + ld a, BANK(TradeArrowGFX) + call FarCopyBytes + xor a + ld [hSCX], a + ld [hSCY], a + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + callba GetTrademonFrontpic + call EnableLCD + call LoadTradeBallAndCableGFX + ld a, [wPlayerTrademonSpecies] + ld hl, wPlayerTrademonDVs + ld de, VTiles0 + call TradeAnim_GetFrontpic + ld a, [wOTTrademonSpecies] + ld hl, wOTTrademonDVs + ld de, VTiles0 tile $31 + call TradeAnim_GetFrontpic + ld a, [wPlayerTrademonSpecies] + ld de, wPlayerTrademonSpeciesName + call TradeAnim_GetNickname + ld a, [wOTTrademonSpecies] + ld de, wOTTrademonSpeciesName + call TradeAnim_GetNickname + call TradeAnim_NormalPals + ret + +; 29082 + +DoTradeAnimation: ; 29082 + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finished + call .DoTradeAnimCommand + callab PlaySpriteAnimations + ld hl, wcf65 + inc [hl] + call DelayFrame + and a + ret + +.finished + call LoadStandardFont + scf + ret + +; 290a0 + +.DoTradeAnimCommand: ; 290a0 + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .JumpTable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 290af + +.JumpTable: ; 290af +; entries correspond to macros/trade_anim.asm enumeration + dw TradeAnim_AdvanceScriptPointer ; 00 + dw TradeAnim_ShowGivemonData ; 01 + dw TradeAnim_ShowGetmonData ; 02 + dw TradeAnim_EnterLinkTube1 ; 03 + dw TradeAnim_EnterLinkTube2 ; 04 + dw TradeAnim_ExitLinkTube ; 05 + dw TradeAnim_TubeToOT1 ; 06 + dw TradeAnim_TubeToOT2 ; 07 + dw TradeAnim_TubeToOT3 ; 08 + dw TradeAnim_TubeToOT4 ; 09 + dw TradeAnim_TubeToOT5 ; 0a + dw TradeAnim_TubeToOT6 ; 0b + dw TradeAnim_TubeToOT7 ; 0c + dw TradeAnim_TubeToOT8 ; 0d + dw TradeAnim_TubeToPlayer1 ; 0e + dw TradeAnim_TubeToPlayer2 ; 0f + dw TradeAnim_TubeToPlayer3 ; 10 + dw TradeAnim_TubeToPlayer4 ; 11 + dw TradeAnim_TubeToPlayer5 ; 12 + dw TradeAnim_TubeToPlayer6 ; 13 + dw TradeAnim_TubeToPlayer7 ; 14 + dw TradeAnim_TubeToPlayer8 ; 15 + dw TradeAnim_SentToOTText ; 16 + dw TradeAnim_OTBidsFarewell ; 17 + dw TradeAnim_TakeCareOfText ; 18 + dw TradeAnim_OTSendsText1 ; 19 + dw TradeAnim_OTSendsText2 ; 1a + dw TradeAnim_SetupGivemonScroll ; 1b + dw TradeAnim_DoGivemonScroll ; 1c + dw TradeAnim_FrontpicScrollStart ; 1d + dw TradeAnim_TextboxScrollStart ; 1e + dw TradeAnim_ScrollOutRight ; 1f + dw TradeAnim_ScrollOutRight2 ; 20 + dw TraideAnim_Wait80 ; 21 + dw TraideAnim_Wait40 ; 22 + dw TradeAnim_RockingBall ; 23 + dw TradeAnim_DropBall ; 24 + dw TradeAnim_WaitAnim ; 25 + dw TradeAnim_WaitAnim2 ; 26 + dw TradeAnim_Poof ; 27 + dw TradeAnim_BulgeThroughTube ; 28 + dw TradeAnim_GiveTrademonSFX ; 29 + dw TradeAnim_GetTrademonSFX ; 2a + dw TradeAnim_End ; 2b + dw TradeAnim_AnimateFrontpic ; 2c + dw TraideAnim_Wait96 ; 2d + dw TraideAnim_Wait80IfOTEgg ; 2e + dw TraideAnim_Wait180IfOTEgg ; 2f +; 2910f + +TradeAnim_IncrementJumptableIndex: ; 2910f + ld hl, wJumptableIndex + inc [hl] + ret + +; 29114 + +TradeAnim_AdvanceScriptPointer: ; 29114 + ld hl, wTradeAnimAddress + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld [wJumptableIndex], a + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +; 29123 + +TradeAnim_End: ; 29123 + ld hl, wJumptableIndex + set 7, [hl] + ret + +; 29129 + +TradeAnim_TubeToOT1: ; 29129 + ld a, $ed ; >>>>>>>> + call TradeAnim_PlaceTrademonStatsOnTubeAnim + ld a, [wLinkTradeSendmonSpecies] + ld [wd265], a + xor a + depixel 5, 11, 4, 0 + ld b, $0 + jr TradeAnim_InitTubeAnim + +TradeAnim_TubeToPlayer1: ; 2913c + ld a, $ee ; <<<<<<<< + call TradeAnim_PlaceTrademonStatsOnTubeAnim + ld a, [wLinkTradeGetmonSpecies] + ld [wd265], a + ld a, $2 + depixel 9, 18, 4, 4 + ld b, $4 +TradeAnim_InitTubeAnim: ; 2914e + push bc + push de + push bc + push de + + push af + call DisableLCD + callab ClearSpriteAnims + hlbgcoord 20, 3 + ld bc, 12 + ld a, $60 + call ByteFill + pop af + + call TradeAnim_TubeAnimJumptable + + xor a + ld [hSCX], a + ld a, $7 + ld [hWX], a + ld a, $70 + ld [hWY], a + call EnableLCD + call LoadTradeBubbleGFX + + pop de + ld a, SPRITE_ANIM_INDEX_TRADEMON_ICON + call _InitSpriteAnimStruct + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + pop bc + ld [hl], b + + pop de + ld a, SPRITE_ANIM_INDEX_TRADEMON_BUBBLE + call _InitSpriteAnimStruct + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + pop bc + ld [hl], b + + call WaitBGMap + ld b, SCGB_TRADE_TUBE + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + ld a, %11010000 + call DmgToCgbObjPal0 + + call TradeAnim_IncrementJumptableIndex + ld a, $5c + ld [wcf64], a + ret + +; 291af + +TradeAnim_TubeToOT2: ; 291af + call TradeAnim_FlashBGPals + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $50 + ret nz + ld a, $1 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +; 291c4 + +TradeAnim_TubeToOT3: ; 291c4 + call TradeAnim_FlashBGPals + ld a, [hSCX] + add $2 + ld [hSCX], a + cp $a0 + ret nz + ld a, $2 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +; 291d9 + +TradeAnim_TubeToOT4: ; 291d9 + call TradeAnim_FlashBGPals + ld a, [hSCX] + add $2 + ld [hSCX], a + and a + ret nz + call TradeAnim_IncrementJumptableIndex + ret + +; 291e8 + +TradeAnim_TubeToPlayer3: ; 291e8 + call TradeAnim_FlashBGPals + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $b0 + ret nz + ld a, $1 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +; 291fd + +TradeAnim_TubeToPlayer4: ; 291fd + call TradeAnim_FlashBGPals + ld a, [hSCX] + sub $2 + ld [hSCX], a + cp $60 + ret nz + xor a + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +; 29211 + +TradeAnim_TubeToPlayer5: ; 29211 + call TradeAnim_FlashBGPals + ld a, [hSCX] + sub $2 + ld [hSCX], a + and a + ret nz + call TradeAnim_IncrementJumptableIndex + ret + +; 29220 + +TradeAnim_TubeToOT6: +TradeAnim_TubeToPlayer6: ; 29220 + ld a, $80 + ld [wcf64], a + call TradeAnim_IncrementJumptableIndex + ret + +; 29229 + +TradeAnim_TubeToOT8: +TradeAnim_TubeToPlayer8: ; 29229 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + call DisableLCD + callab ClearSpriteAnims + hlbgcoord 0, 0 + ld bc, sScratch - VBGMap0 + ld a, " " + call ByteFill + xor a + ld [hSCX], a + ld a, $90 + ld [hWY], a + call EnableLCD + call LoadTradeBallAndCableGFX + call WaitBGMap + call TradeAnim_NormalPals + call TradeAnim_AdvanceScriptPointer + ret + +; 2925d + +TradeAnim_TubeToOT5: +TradeAnim_TubeToOT7: +TradeAnim_TubeToPlayer2: +TradeAnim_TubeToPlayer7: ; 2925d + call TradeAnim_FlashBGPals + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_IncrementJumptableIndex + ret + +; 2926d + +TradeAnim_GiveTrademonSFX: ; 2926d + call TradeAnim_AdvanceScriptPointer + ld de, SFX_GIVE_TRADEMON + call PlaySFX + ret + +; 29277 + +TradeAnim_GetTrademonSFX: ; 29277 + call TradeAnim_AdvanceScriptPointer + ld de, SFX_GET_TRADEMON + call PlaySFX + ret + +; 29281 + +TradeAnim_TubeAnimJumptable: ; 29281 + and 3 + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 2928f + +.Jumptable: ; 2928f + dw .Zero + dw .One + dw .Two + dw .Three +; 29297 + +.Zero: ; 29297 +.Three: ; 29297 + call TradeAnim_BlankTileMap + hlcoord 9, 3 + ld [hl], $5b + inc hl + ld bc, 10 + ld a, $60 + call ByteFill + hlcoord 3, 2 + call TradeAnim_CopyTradeGameBoyTilemap + ret + +; 292af + +.One: ; 292af + call TradeAnim_BlankTileMap + hlcoord 0, 3 + ld bc, SCREEN_WIDTH + ld a, $60 + call ByteFill + ret + +; 292be + +.Two: ; 292be + call TradeAnim_BlankTileMap + hlcoord 0, 3 + ld bc, $11 + ld a, $60 + call ByteFill + hlcoord 17, 3 + ld a, $5d + ld [hl], a + + ld a, $61 + ld de, SCREEN_WIDTH + ld c, $3 +.loop + add hl, de + ld [hl], a + dec c + jr nz, .loop + + add hl, de + ld a, $5f + ld [hld], a + ld a, $5b + ld [hl], a + hlcoord 10, 6 + call TradeAnim_CopyTradeGameBoyTilemap + ret + +; 292ec + +TradeAnim_CopyTradeGameBoyTilemap: ; 292ec + ld de, TradeGameBoyTilemap + lb bc, 8, 6 + call TradeAnim_CopyBoxFromDEtoHL + ret + +; 292f6 + +TradeAnim_PlaceTrademonStatsOnTubeAnim: ; 292f6 + push af + call ClearBGPalettes + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, "─" + call ByteFill + hlcoord 0, 1 + ld de, wLinkPlayer1Name + call PlaceString + ld hl, wLinkPlayer2Name + ld de, 0 +.find_name_end_loop + ld a, [hli] + cp "@" + jr z, .done + dec de + jr .find_name_end_loop + +.done + hlcoord 0, 4 + add hl, de + ld de, wLinkPlayer2Name + call PlaceString + hlcoord 7, 2 + ld bc, 6 + pop af + call ByteFill + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + ret + +; 29348 + +TradeAnim_EnterLinkTube1: ; 29348 + call ClearTileMap + call WaitTop + ld a, $a0 + ld [hSCX], a + call DelayFrame + hlcoord 8, 2 + ld de, TradeLinkTubeTilemap + lb bc, 3, 12 + call TradeAnim_CopyBoxFromDEtoHL + call WaitBGMap + ld b, SCGB_TRADE_TUBE + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + lb de, %11100100, %11100100 ; 3,2,1,0, 3,2,1,0 + call DmgToCgbObjPals + ld de, SFX_POTION + call PlaySFX + call TradeAnim_IncrementJumptableIndex + ret + +; 2937e + +TradeAnim_EnterLinkTube2: ; 2937e + ld a, [hSCX] + and a + jr z, .done + add $4 + ld [hSCX], a + ret + +.done + ld c, 80 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 29391 + +TradeAnim_ExitLinkTube: ; 29391 + ld a, [hSCX] + cp $a0 + jr z, .done + sub $4 + ld [hSCX], a + ret + +.done + call ClearTileMap + xor a + ld [hSCX], a + call TradeAnim_AdvanceScriptPointer + ret + +; 293a6 + +TradeAnim_SetupGivemonScroll: ; 293a6 + ld a, $8f + ld [hWX], a + ld a, $88 + ld [hSCX], a + ld a, $50 + ld [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +; 293b6 + +TradeAnim_DoGivemonScroll: ; 293b6 + ld a, [hWX] + cp $7 + jr z, .done + sub $4 + ld [hWX], a + ld a, [hSCX] + sub $4 + ld [hSCX], a + ret + +.done + ld a, $7 + ld [hWX], a + xor a + ld [hSCX], a + call TradeAnim_AdvanceScriptPointer + ret + +; 293d2 + +TradeAnim_FrontpicScrollStart: ; 293d2 + ld a, $7 + ld [hWX], a + ld a, $50 + ld [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +; 293de + +TradeAnim_TextboxScrollStart: ; 293de + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +; 293ea + +TradeAnim_ScrollOutRight: ; 293ea + call WaitTop + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + xor a + ld [hWY], a + call DelayFrame + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call ClearTileMap + call TradeAnim_IncrementJumptableIndex + ret + +; 2940c + +TradeAnim_ScrollOutRight2: ; 2940c + ld a, [hWX] + cp $a1 + jr nc, .done + add $4 + ld [hWX], a + ret + +.done + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ld [hWX], a + ld a, $90 + ld [hWY], a + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + call TradeAnim_AdvanceScriptPointer + ret + +; 2942e + +TradeAnim_ShowGivemonData: ; 2942e + call ShowPlayerTrademonStats + ld a, [wPlayerTrademonSpecies] + ld [CurPartySpecies], a + ld a, [wPlayerTrademonDVs] + ld [TempMonDVs], a + ld a, [wPlayerTrademonDVs + 1] + ld [TempMonDVs + 1], a + ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + call TradeAnim_ShowGivemonFrontpic + + ld a, [wPlayerTrademonSpecies] + call GetCryIndex + jr c, .skip_cry + ld e, c + ld d, b + call PlayCryHeader +.skip_cry + + call TradeAnim_AdvanceScriptPointer + ret + +; 29461 + +TradeAnim_ShowGetmonData: ; 29461 + call 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 + call TradeAnim_ShowGetmonFrontpic + call TradeAnim_AdvanceScriptPointer + ret + +; 29487 + +TradeAnim_AnimateFrontpic: ; 29487 + callba AnimateTrademonFrontpic + call TradeAnim_AdvanceScriptPointer + ret + +; 29491 + +TradeAnim_GetFrontpic: ; 29491 + push de + push af + predef GetUnownLetter + pop af + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + pop de + predef GetFrontpic + ret + +; 294a9 + +TradeAnim_GetNickname: ; 294a9 + push de + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + pop de + ld bc, NAME_LENGTH + call CopyBytes + ret + +; 294bb + +TradeAnim_ShowGivemonFrontpic: ; 294bb + ld de, VTiles0 + jr TradeAnim_ShowFrontpic + +TradeAnim_ShowGetmonFrontpic: ; 294c0 + ld de, VTiles0 tile $31 +TradeAnim_ShowFrontpic: ; 294c3 + call DelayFrame + ld hl, VTiles2 + lb bc, 10, $31 + call Request2bpp + call WaitTop + call TradeAnim_BlankTileMap + hlcoord 7, 2 + xor a + ld [hGraphicStartTile], a + lb bc, 7, 7 + predef PlaceGraphic + call WaitBGMap + ret + +; 294e7 + +TraideAnim_Wait80: ; 294e7 + ld c, 80 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 294f0 + +TraideAnim_Wait40: ; 294f0 + ld c, 40 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 294f9 + +TraideAnim_Wait96: ; 294f9 + ld c, 96 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 29502 + +TraideAnim_Wait80IfOTEgg: ; 29502 + call IsOTTrademonEgg + ret nz + ld c, 80 + call DelayFrames + ret + +; 2950c + +TraideAnim_Wait180IfOTEgg: ; 2950c + call IsOTTrademonEgg + ret nz + ld c, 180 + call DelayFrames + ret + +; 29516 + +IsOTTrademonEgg: ; 29516 + call TradeAnim_AdvanceScriptPointer + ld a, [wOTTrademonSpecies] + cp EGG + ret + +; 2951f +ShowPlayerTrademonStats: ; 2951f + ld de, wPlayerTrademonSpecies + ld a, [de] + cp EGG + jr z, TrademonStats_Egg + call TrademonStats_MonTemplate + ld de, wPlayerTrademonSpecies + call TrademonStats_PrintSpeciesNumber + ld de, wPlayerTrademonSpeciesName + call TrademonStats_PrintSpeciesName + ld a, [wPlayerTrademonCaughtData] + ld de, wPlayerTrademonOTName + call TrademonStats_PrintOTName + ld de, wPlayerTrademonID + call TrademonStats_PrintTrademonID + call TrademonStats_WaitBGMap + ret + +; 29549 + +ShowOTTrademonStats: ; 29549 + ld de, wOTTrademonSpecies + ld a, [de] + cp EGG + jr z, TrademonStats_Egg + call TrademonStats_MonTemplate + ld de, wOTTrademonSpecies + call TrademonStats_PrintSpeciesNumber + ld de, wOTTrademonSpeciesName + call TrademonStats_PrintSpeciesName + ld a, [wOTTrademonCaughtData] + ld de, wOTTrademonOTName + call TrademonStats_PrintOTName + ld de, wOTTrademonID + call TrademonStats_PrintTrademonID + call TrademonStats_WaitBGMap + ret + +; 29573 + +TrademonStats_MonTemplate: ; 29573 + call WaitTop + call TradeAnim_BlankTileMap + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call TextBox + hlcoord 4, 0 + ld de, .OTMonData + call PlaceString + ret + +; 29591 + +.OTMonData: ; 29591 + db "─── №." + next "" + next "OT/" + next "№.@" +; 295a1 + +TrademonStats_Egg: ; 295a1 + call WaitTop + call TradeAnim_BlankTileMap + ld a, VBGMap1 / $100 + ld [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, 6 + ld c, 13 + call TextBox + hlcoord 4, 2 + ld de, .EggData + call PlaceString + call TrademonStats_WaitBGMap + ret + +; 295c2 + +.EggData: ; 295c2 + db "EGG" + next "OT/?????" + next "№.?????@" +; 295d8 + +TrademonStats_WaitBGMap: ; 295d8 + call WaitBGMap + call WaitTop + ld a, VBGMap0 / $100 + ld [hBGMapAddress + 1], a + ret + +; 295e3 + +TrademonStats_PrintSpeciesNumber: ; 295e3 + hlcoord 10, 0 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + ld [hl], " " + ret + +; 295ef + +TrademonStats_PrintSpeciesName: ; 295ef + hlcoord 4, 2 + call PlaceString + ret + +; 295f6 + +TrademonStats_PrintOTName: ; 295f6 + cp 3 + jr c, .caught_gender_okay + xor a +.caught_gender_okay + push af + hlcoord 7, 4 + call PlaceString + inc bc + pop af + ld hl, .Gender + ld d, 0 + ld e, a + add hl, de + ld a, [hl] + ld [bc], a + ret + +; 2960e + +.Gender: ; 2960e + db " ", "♂", "♀" +; 29611 + +TrademonStats_PrintTrademonID: ; 29611 + hlcoord 7, 6 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ret + +; 2961b + +TradeAnim_RockingBall: ; 2961b + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL + call _InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, $20 + ld [wcf64], a + ret + +; 2962c + +TradeAnim_DropBall: ; 2962c + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL + call _InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], $1 + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], $dc + call TradeAnim_AdvanceScriptPointer + ld a, $38 + ld [wcf64], a + ret + +; 29649 + +TradeAnim_Poof: ; 29649 + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POOF + call _InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, $10 + ld [wcf64], a + ld de, SFX_BALL_POOF + call PlaySFX + ret + +; 29660 + +TradeAnim_BulgeThroughTube: ; 29660 + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbObjPal0 + depixel 5, 11 + ld a, SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE + call _InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, $40 + ld [wcf64], a + ret + +; 29676 + +TradeAnim_AnimateTrademonInTube: ; 29676 (a:5676) + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 29686 + +.Jumptable: ; 29686 (a:5686) + dw .InitTimer + dw .WaitTimer1 + dw .MoveRight + dw .MoveDown + dw .MoveUp + dw .MoveLeft + dw .WaitTimer2 +; 2969a + +.JumptableNext: ; 29694 (a:5694) + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + inc [hl] + ret + +.InitTimer: ; 2969a (a:569a) + call .JumptableNext + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $80 + ret + +.WaitTimer1: ; 296a4 (a:56a4) + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + call .JumptableNext + +.MoveRight: ; 296af (a:56af) + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $94 + jr nc, .done_move_right + inc [hl] + ret + +.done_move_right + call .JumptableNext + +.MoveDown: ; 296bd (a:56bd) + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $4c + jr nc, .done_move_down + inc [hl] + ret + +.done_move_down + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], $0 + ret + +.MoveUp: ; 296cf (a:56cf) + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $2c + jr z, .done_move_up + dec [hl] + ret + +.done_move_up + call .JumptableNext + +.MoveLeft: ; 296dd (a:56dd) + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $58 + jr z, .done_move_left + dec [hl] + ret + +.done_move_left + call .JumptableNext + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $80 + ret + +.WaitTimer2: ; 296f2 (a:56f2) + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], $0 + ret + +; 29701 (a:5701) + +TradeAnim_SentToOTText: ; 29701 + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .time_capsule + ld hl, .Text_MonName + call PrintText + ld c, 189 + call DelayFrames + ld hl, .Text_WasSentTo + call PrintText + call TradeAnim_Wait80Frames + ld c, 128 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +.time_capsule + ld hl, .Text_WasSentTo + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +; 29732 + +.Text_WasSentTo: ; 0x29732 + ; was sent to @ . + text_jump UnknownText_0x1bc6e9 + db "@" +; 0x29737 + +.Text_MonName: ; 0x29737 + ; + text_jump UnknownText_0x1bc701 + db "@" +; 0x2973c + +TradeAnim_OTBidsFarewell: ; 2973c + ld hl, .Text_BidsFarewellToMon + call PrintText + call TradeAnim_Wait80Frames + ld hl, .Text_MonName + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +; 29752 + +.Text_BidsFarewellToMon: ; 0x29752 + ; bids farewell to + text_jump UnknownText_0x1bc703 + db "@" +; 0x29757 + +.Text_MonName: ; 0x29757 + ; . + text_jump UnknownText_0x1bc719 + db "@" +; 0x2975c + +TradeAnim_TakeCareOfText: ; 2975c + call WaitTop + hlcoord 0, 10 + ld bc, 8 * SCREEN_WIDTH + ld a, " " + call ByteFill + call WaitBGMap + ld hl, .Text_TakeGoodCareOfMon + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +; 2977a + +.Text_TakeGoodCareOfMon: ; 0x2977a + ; Take good care of @ . + text_jump UnknownText_0x1bc71f + db "@" +; 0x2977f + +TradeAnim_OTSendsText1: ; 2977f + ld hl, .Text_ForYourMon + call PrintText + call TradeAnim_Wait80Frames + ld hl, .Text_OTSends + call PrintText + call TradeAnim_Wait80Frames + ld c, 14 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 2979a + +.Text_ForYourMon: ; 0x2979a + ; For @ 's @ , + text_jump UnknownText_0x1bc739 + db "@" +; 0x2979f + +.Text_OTSends: ; 0x2979f + ; sends @ . + text_jump UnknownText_0x1bc74c + db "@" +; 0x297a4 + +TradeAnim_OTSendsText2: ; 297a4 + ld hl, .Text_WillTrade + call PrintText + call TradeAnim_Wait80Frames + ld hl, .Text_ForYourMon + call PrintText + call TradeAnim_Wait80Frames + ld c, 14 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +; 297bf + +.Text_WillTrade: ; 0x297bf + ; will trade @ @ + text_jump UnknownText_0x1bc75e + db "@" +; 0x297c4 + +.Text_ForYourMon: ; 0x297c4 + ; for @ 's @ . + text_jump UnknownText_0x1bc774 + db "@" +; 0x297c9 + +TradeAnim_Wait80Frames: ; 297c9 + ld c, 80 + call DelayFrames + ret + +; 297cf + +TradeAnim_BlankTileMap: ; 297cf + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill + ret + +; 297db + +TradeAnim_CopyBoxFromDEtoHL: ; 297db +.row + push bc + push hl +.col + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret + +; 297ed + +TradeAnim_NormalPals: ; 297ed + ld a, [hSGB] + and a + ld a, %11100100 ; 3,2,1,0 + jr z, .not_sgb + ld a, $f0 + +.not_sgb + call DmgToCgbObjPal0 + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + ret + +; 297ff + +LinkTradeAnim_LoadTradePlayerNames: ; 297ff + push de + ld de, wLinkPlayer1Name + ld bc, NAME_LENGTH + call CopyBytes + pop hl + ld de, wLinkPlayer2Name + ld bc, NAME_LENGTH + call CopyBytes + ret + +; 29814 + +LinkTradeAnim_LoadTradeMonSpecies: ; 29814 + ld a, [hl] + ld [wLinkTradeSendmonSpecies], a + ld a, [de] + ld [wLinkTradeGetmonSpecies], a + ret + +; 2981d + +TradeAnim_FlashBGPals: ; 2981d + ld a, [wcf65] + and $7 + ret nz + ld a, [rBGP] + xor %00111100 + call DmgToCgbBGPals + ret + +; 2982b + +LoadTradeBallAndCableGFX: ; 2982b + call DelayFrame + ld de, TradeBallGFX + ld hl, VTiles0 tile $62 + lb bc, BANK(TradeBallGFX), $6 + call Request2bpp + ld de, TradePoofGFX + ld hl, VTiles0 tile $68 + lb bc, BANK(TradePoofGFX), $c + call Request2bpp + ld de, TradeCableGFX + ld hl, VTiles0 tile $74 + lb bc, BANK(TradeCableGFX), $4 + call Request2bpp + xor a + ld hl, wSpriteAnimDict + ld [hli], a + ld [hl], $62 + ret + +; 2985a + +LoadTradeBubbleGFX: ; 2985a + call DelayFrame + ld e, $3 + callab LoadMenuMonIcon + ld de, TradeBubbleGFX + ld hl, VTiles0 tile $72 + lb bc, BANK(TradeBubbleGFX), $4 + call Request2bpp + xor a + ld hl, wSpriteAnimDict + ld [hli], a + ld [hl], $62 + ret + +; 29879 + +TradeAnim_WaitAnim: ; 29879 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_AdvanceScriptPointer + ret + +; 29886 + +TradeAnim_WaitAnim2: ; 29886 + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_AdvanceScriptPointer + ret + +; 29893 + + +DebugTrade: ; 29893 +; This function is unreferenced. +; It was meant for use in Japanese versions, so the +; constant used for copy length was changed by accident. + + ld hl, .DebugTradeData + + ld a, [hli] + ld [wPlayerTrademonSpecies], a + ld de, wPlayerTrademonSenderName + ld c, 11 + 2 ; jp: 6 + 2 +.loop1 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop1 + + ld a, [hli] + ld [wOTTrademonSpecies], a + ld de, wOTTrademonSenderName + ld c, 11 + 2 ; jp: 6 + 2 +.loop2 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop2 + ret + +; 298b5 + +.DebugTradeData: ; 298b5 + db VENUSAUR, "ゲーフり@@", $23, $01 ; GAME FREAK + db CHARIZARD, "クりーチャ@", $56, $04 ; Creatures Inc. +; 298c7 + + +TradeGameBoyTilemap: ; 298c7 +; 6x8 + db $31, $32, $32, $32, $32, $33 + db $34, $35, $36, $36, $37, $38 + db $34, $39, $3a, $3a, $3b, $38 + db $3c, $3d, $3e, $3e, $3f, $40 + db $41, $42, $43, $43, $44, $45 + db $46, $47, $43, $48, $49, $4a + db $41, $43, $4b, $4c, $4d, $4e + db $4f, $50, $50, $50, $51, $52 +; 297f7 + +TradeLinkTubeTilemap: ; 297f7 +; 12x3 + db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53 + db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54 + db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43 +; 2991b + +TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp" +TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" +TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" +TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz" +TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" +TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" -- cgit v1.2.3 From ebf3bfb6b289bf684941a86cafe1286d8ce212fe Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 12:53:33 -0500 Subject: Move some misc/ files into meaningful directories --- engine/dma_transfer.asm | 625 ++++++++++++++++++++++++++++++++++++++++++++++++ engine/gbc_only.asm | 149 ++++++++++++ engine/init_gender.asm | 2 +- engine/print_party.asm | 362 ++++++++++++++++++++++++++++ engine/unused_title.asm | 556 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1693 insertions(+), 1 deletion(-) create mode 100755 engine/dma_transfer.asm create mode 100644 engine/gbc_only.asm create mode 100755 engine/print_party.asm create mode 100644 engine/unused_title.asm (limited to 'engine') diff --git a/engine/dma_transfer.asm b/engine/dma_transfer.asm new file mode 100755 index 000000000..a0dad0dde --- /dev/null +++ b/engine/dma_transfer.asm @@ -0,0 +1,625 @@ +HDMATransferAttrMapAndTileMapToWRAMBank3:: ; 104000 + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteTilemap + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransferToWRAMBank3 + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransferToWRAMBank3 + ret +; 10402d + +HDMATransferTileMapToWRAMBank3:: ; 10402d + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteTilemap + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransferToWRAMBank3 + ret +; 104047 + +HDMATransferAttrMapToWRAMBank3: ; 104047 + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransferToWRAMBank3 + ret +; 104061 + +ReloadMapPart:: ; 104061 + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteTilemap + call DelayFrame + + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransfer_Wait127Scanlines_toBGMap + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines_toBGMap + pop af + ld [rVBK], a + ei + + ret + +Mobile_ReloadMapPart: ; 104099 + ld hl, ReloadMapPart ; useless + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteTilemap + call DelayFrame + + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransfer_NoDI + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransfer_NoDI + pop af + ld [rVBK], a + ei + + ret +; 1040d4 + +; XXX + ld hl, .unreferenced_1040da + jp CallInSafeGFXMode + +.unreferenced_1040da + ld a, $1 + ld [rVBK], a + ld a, $3 + ld [rSVBK], a + ld de, w3_d800 + ld a, [hBGMapAddress + 1] + ld [rHDMA1], a + ld a, [hBGMapAddress] + ld [rHDMA2], a + ld a, d + ld [rHDMA3], a + ld a, e + ld [rHDMA4], a + ld a, $23 + ld [hDMATransfer], a + call WaitDMATransfer + ret +; 1040fb + +; XXX + ld hl, .unreferenced_104101 + jp CallInSafeGFXMode + +.unreferenced_104101 + ld a, $1 + ld [rVBK], a + ld a, $3 + ld [rSVBK], a + ld hl, w3_d800 + call HDMATransferToWRAMBank3 + ret +; 104110 + +OpenAndCloseMenu_HDMATransferTileMapAndAttrMap:: ; 104110 +; OpenText + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + ; Transfer AttrMap and Tilemap to BGMap + ; Fill vBGAttrs with $00 + ; Fill vBGTiles with " " + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteTilemap + call DelayFrame + + di + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransfer_Wait123Scanlines_toBGMap + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransfer_Wait123Scanlines_toBGMap + pop af + ld [rVBK], a + ei + ret +; 104148 + +Mobile_OpenAndCloseMenu_HDMATransferTileMapAndAttrMap: ; 104148 (41:4148) + ld hl, .Function + jp CallInSafeGFXMode + +.Function: + ; Transfer AttrMap and Tilemap to BGMap + ; Fill vBGAttrs with $00 + ; Fill vBGTiles with $ff + decoord 0, 0, AttrMap + ld hl, wScratchAttrMap + call CutAndPasteAttrMap + ld c, $ff + decoord 0, 0 + ld hl, wScratchTileMap + call CutAndPasteMap + + ld a, $1 + ld [rVBK], a + ld hl, wScratchAttrMap + call HDMATransfer_Wait127Scanlines_toBGMap + ld a, $0 + ld [rVBK], a + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines_toBGMap + ret +; 104177 + +CallInSafeGFXMode: ; 104177 + ld a, [hBGMapMode] + push af + ld a, [hMapAnims] + push af + xor a + ld [hBGMapMode], a + ld [hMapAnims], a + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, [rVBK] + push af + + call ._hl_ + + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + pop af + ld [hMapAnims], a + pop af + ld [hBGMapMode], a + ret +; 10419c + +._hl_ ; 10419c + jp hl +; 10419d + + +HDMATransferToWRAMBank3: ; 10419d (41:419d) + call _LoadHDMAParameters + ld a, $23 + ld [hDMATransfer], a + +WaitDMATransfer: ; 104a14 +.loop + call DelayFrame + ld a, [hDMATransfer] + and a + jr nz, .loop + ret + +HDMATransfer_Wait127Scanlines_toBGMap: ; 1041ad (41:41ad) +; HDMA transfer from hl to [hBGMapAddress] +; hBGMapAddress -> de +; 2 * SCREEN_HEIGHT -> c + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, 2 * SCREEN_HEIGHT + jr HDMATransfer_Wait127Scanlines + +HDMATransfer_Wait123Scanlines_toBGMap: ; 1041b7 (41:41b7) +; HDMA transfer from hl to [hBGMapAddress] +; hBGMapAddress -> de +; 2 * SCREEN_HEIGHT -> c +; $7b --> b + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, 2 * SCREEN_HEIGHT + jr HDMATransfer_Wait123Scanlines +; 1041c1 (41:41c1) + +HDMATransfer_NoDI: ; 1041c1 +; HDMA transfer from hl to [hBGMapAddress] +; [hBGMapAddress] --> de +; 2 * SCREEN_HEIGHT --> c + ld a, [hBGMapAddress + 1] + ld d, a + ld a, [hBGMapAddress] + ld e, a + ld c, 2 * SCREEN_HEIGHT + + ; [rHDMA1, rHDMA2] = hl & $fff0 + ld a, h + ld [rHDMA1], a + ld a, l + and $f0 + ld [rHDMA2], a + ; [rHDMA3, rHDMA4] = de & $1ff0 + ld a, d + and $1f + ld [rHDMA3], a + ld a, e + and $f0 + ld [rHDMA4], a + ; b = c | %10000000 + ld a, c + dec c + or $80 + ld b, a + ; d = $7f - c + 1 + ld a, $7f + sub c + ld d, a + ; while [rLY] >= d: pass +.loop1 + ld a, [rLY] + cp d + jr nc, .loop1 + ; while not [rSTAT] & 3: pass +.loop2 + ld a, [rSTAT] + and $3 + jr z, .loop2 + ; load the 5th byte of HDMA + ld a, b + ld [rHDMA5], a + ; wait until rLY advances (c + 1) times + ld a, [rLY] + inc c + ld hl, rLY +.loop3 + cp [hl] + jr z, .loop3 + ld a, [hl] + dec c + jr nz, .loop3 + ld hl, rHDMA5 + res 7, [hl] + ret +; 104205 + +HDMATransfer_Wait123Scanlines: + ld b, $7b + jr _continue_HDMATransfer + + +HDMATransfer_Wait127Scanlines: + ld b, $7f +_continue_HDMATransfer: +; a lot of waiting around for hardware registers + ; [rHDMA1, rHDMA2] = hl & $fff0 + ld a, h + ld [rHDMA1], a + ld a, l + and $f0 ; high nybble + ld [rHDMA2], a + ; [rHDMA3, rHDMA4] = de & $1ff0 + ld a, d + and $1f ; lower 5 bits + ld [rHDMA3], a + ld a, e + and $f0 ; high nybble + ld [rHDMA4], a + ; e = c | %10000000 + ld a, c + dec c + or $80 + ld e, a + ; d = b - c + 1 + ld a, b + sub c + ld d, a + ; while [rLY] >= d: pass +.ly_loop + ld a, [rLY] + cp d + jr nc, .ly_loop + + di + ; while [rSTAT] & 3: pass +.rstat_loop_1 + ld a, [rSTAT] + and $3 + jr nz, .rstat_loop_1 + ; while not [rSTAT] & 3: pass +.rstat_loop_2 + ld a, [rSTAT] + and $3 + jr z, .rstat_loop_2 + ; load the 5th byte of HDMA + ld a, e + ld [rHDMA5], a + ; wait until rLY advances (c + 1) times + ld a, [rLY] + inc c + ld hl, rLY +.final_ly_loop + cp [hl] + jr z, .final_ly_loop + ld a, [hl] + dec c + jr nz, .final_ly_loop + ld hl, rHDMA5 + res 7, [hl] + ei + + ret +; 10424e + + +_LoadHDMAParameters: ; 10424e (41:424e) + ld a, h + ld [rHDMA1], a + ld a, l + ld [rHDMA2], a + ld a, [hBGMapAddress + 1] + and $1f + ld [rHDMA3], a + ld a, [hBGMapAddress] + ld [rHDMA4], a + ret + +CutAndPasteTilemap: ; 10425f (41:425f) + ld c, " " + jr CutAndPasteMap + +CutAndPasteAttrMap: ; 104263 (41:4263) + ld c, $0 + +CutAndPasteMap: ; 104265 (41:4265) +; back up the value of c to hMapObjectIndexBuffer + ld a, [hMapObjectIndexBuffer] + push af + ld a, c + ld [hMapObjectIndexBuffer], a + +; for each row on the screen + ld c, SCREEN_HEIGHT +.loop1 +; for each tile in the row + ld b, SCREEN_WIDTH +.loop2 +; copy from de to hl + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .loop2 + +; load the original value of c into hl 12 times + ld a, [hMapObjectIndexBuffer] + ld b, BG_MAP_WIDTH - SCREEN_WIDTH +.loop3 + ld [hli], a + dec b + jr nz, .loop3 + + dec c + jr nz, .loop1 + +; restore the original value of hMapObjectIndexBuffer + pop af + ld [hMapObjectIndexBuffer], a + ret + + +_Get2bpp:: ; 104284 + ; 2bpp when [rLCDC] & $80 + ; switch to WRAM bank 6 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + push bc + push hl + + ; Copy c tiles of the 2bpp from b:de to wScratchTileMap + ld a, b ; bank + ld l, c ; number of tiles + ld h, $0 + ; multiply by 16 (16 bytes of a 2bpp = 8 x 8 tile) + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld b, h + ld c, l + ld h, d ; address + ld l, e + ld de, wScratchTileMap + call FarCopyBytes + + pop hl + pop bc + + push bc + call DelayFrame + pop bc + + ld d, h + ld e, l + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines + + ; restore the previous bank + pop af + ld [rSVBK], a + ret +; 1042b2 + +_Get1bpp:: ; 1042b2 + ; 1bpp when [rLCDC] & $80 +.loop + ld a, c + cp $10 + jp c, .bankswitch + jp z, .bankswitch + push bc + push hl + push de + ld c, $10 + call .bankswitch + pop de + ld hl, $80 + add hl, de + ld d, h + ld e, l + pop hl + lb bc, 1, 0 + add hl, bc + pop bc + ld a, c + sub $10 + ld c, a + jr .loop +; 1042d6 + +.bankswitch ; 1042d6 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + push bc + push hl + + ld a, b + ld l, c + ld h, $0 + add hl, hl ; multiply by 8 + add hl, hl ; multiply by 8 + add hl, hl ; multiply by 8 + ld c, l + ld b, h + ld h, d + ld l, e + ld de, wScratchTileMap + call FarCopyBytesDouble_DoubleBankSwitch + + pop hl + pop bc + + push bc + call DelayFrame + pop bc + + ld d, h + ld e, l + ld hl, wScratchTileMap + call HDMATransfer_Wait127Scanlines + + pop af + ld [rSVBK], a + ret +; 104303 + +HDMATransfer_OnlyTopFourRows: ; 104303 + ld hl, .Function + jp CallInSafeGFXMode +; 104309 + +.Function: + ld hl, wScratchTileMap + decoord 0, 0 + call .Copy + ld hl, wScratchTileMap + $80 + decoord 0, 0, AttrMap + call .Copy + ld a, $1 + ld [rVBK], a + ld c, $8 + ld hl, wScratchTileMap + $80 + debgcoord 0, 0, VBGMap1 + call HDMATransfer_Wait127Scanlines + ld a, $0 + ld [rVBK], a + ld c, $8 + ld hl, wScratchTileMap + debgcoord 0, 0, VBGMap1 + call HDMATransfer_Wait127Scanlines + ret + +.Copy: ; 10433a (41:433a) + ld b, 4 +.outer_loop + ld c, SCREEN_WIDTH +.inner_loop + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .inner_loop + ld a, l + add BG_MAP_WIDTH - SCREEN_WIDTH + ld l, a + ld a, h + adc $0 + ld h, a + dec b + jr nz, .outer_loop + ret +; 104350 diff --git a/engine/gbc_only.asm b/engine/gbc_only.asm new file mode 100644 index 000000000..a77a44d72 --- /dev/null +++ b/engine/gbc_only.asm @@ -0,0 +1,149 @@ +GBCOnlyScreen: ; 4ea82 + + ld a, [hCGB] + and a + ret nz + + ld de, MUSIC_NONE + call PlayMusic + + call ClearTileMap + + ld hl, GBCOnlyGFX + ld de, $d000 + ld a, [rSVBK] + push af + ld a, 0 + ld [rSVBK], a + call Decompress + pop af + ld [rSVBK], a + + ld de, $d000 + ld hl, VTiles2 + lb bc, BANK(GBCOnlyGFX), $54 + call Get2bpp + + ld de, Font + ld hl, VTiles1 + lb bc, BANK(Font), $80 + call Get1bpp + + call DrawGBCOnlyScreen + + call WaitBGMap + +; better luck next time +.loop + call DelayFrame + jr .loop +; 4eac5 + + +DrawGBCOnlyScreen: ; 4eac5 + + call DrawGBCOnlyBorder + + ; Pokemon + hlcoord 3, 2 + ld b, 14 + ld c, 4 + ld a, $8 + call DrawGBCOnlyGraphic + + ; Crystal + hlcoord 5, 6 + ld b, 10 + ld c, 2 + ld a, $40 + call DrawGBCOnlyGraphic + + ld de, GBCOnlyString + hlcoord 1, 10 + call PlaceString + + ret +; 4eaea + + +DrawGBCOnlyBorder: ; 4eaea + + hlcoord 0, 0 + ld [hl], 0 ; top-left + + inc hl + ld a, 1 ; top + call .FillRow + + ld [hl], 2 ; top-right + + hlcoord 0, 1 + ld a, 3 ; left + call .FillColumn + + hlcoord 19, 1 + ld a, 4 ; right + call .FillColumn + + hlcoord 0, 17 + ld [hl], 5 ; bottom-left + + inc hl + ld a, 6 ; bottom + call .FillRow + + ld [hl], 7 ; bottom-right + ret +; 4eb15 + +.FillRow: ; 4eb15 + ld c, SCREEN_WIDTH - 2 +.next_column + ld [hli], a + dec c + jr nz, .next_column + ret +; 4eb1c + +.FillColumn: ; 4eb1c + ld de, SCREEN_WIDTH + ld c, SCREEN_HEIGHT - 2 +.next_row + ld [hl], a + add hl, de + dec c + jr nz, .next_row + ret +; 4eb27 + + +DrawGBCOnlyGraphic: ; 4eb27 + ld de, SCREEN_WIDTH +.y + push bc + push hl +.x + ld [hli], a + inc a + dec b + jr nz, .x + pop hl + add hl, de + pop bc + dec c + jr nz, .y + ret +; 4eb38 + + +GBCOnlyString: ; 4eb38 + db "This Game Pak is" + next "designed only for" + next "use on the" + next "Game Boy Color.@" +; 4eb76 + + +GBCOnlyGFX: ; 4eb76 +INCBIN "gfx/sgb/gbc_only.2bpp.lz" +; 4f0bc diff --git a/engine/init_gender.asm b/engine/init_gender.asm index 3ae856029..dfb3fbdd4 100755 --- a/engine/init_gender.asm +++ b/engine/init_gender.asm @@ -20,7 +20,7 @@ InitCrystalData: ; 48000 ret ; 4802f -INCLUDE "misc/mobile_12.asm" +INCLUDE "mobile/mobile_12.asm" InitGender: ; 48dcb (12:4dcb) call InitGenderScreen diff --git a/engine/print_party.asm b/engine/print_party.asm new file mode 100755 index 000000000..9bf98767b --- /dev/null +++ b/engine/print_party.asm @@ -0,0 +1,362 @@ +PrintPage1: ; 1dc1b0 + hlcoord 0, 0 + decoord 0, 0, wPrinterTileMapBuffer + ld bc, 17 * SCREEN_WIDTH + call CopyBytes + hlcoord 17, 1, wPrinterTileMapBuffer + ld a, $62 + ld [hli], a + inc a + ld [hl], a + hlcoord 17, 2, wPrinterTileMapBuffer + ld a, $64 + ld [hli], a + inc a + ld [hl], a + hlcoord 1, 9, wPrinterTileMapBuffer + ld a, " " + ld [hli], a + ld [hl], a + hlcoord 1, 10, wPrinterTileMapBuffer + ld a, $61 + ld [hli], a + ld [hl], a + hlcoord 2, 11, wPrinterTileMapBuffer + lb bc, 5, 18 + call ClearBox + ld a, [wd265] + dec a + call CheckCaughtMon + push af + ld a, [wd265] + ld b, a + ld c, 1 ; get page 1 + callba GetDexEntryPagePointer + pop af + ld a, b + hlcoord 1, 11, wPrinterTileMapBuffer + call nz, FarString + hlcoord 19, 0, wPrinterTileMapBuffer + ld [hl], $35 + ld de, SCREEN_WIDTH + add hl, de + ld b, $f +.column_loop + ld [hl], $37 + add hl, de + dec b + jr nz, .column_loop + ld [hl], $3a + ret +; 1dc213 + +PrintPage2: ; 1dc213 + hlcoord 0, 0, wPrinterTileMapBuffer + ld bc, 8 * SCREEN_WIDTH + ld a, " " + call ByteFill + hlcoord 0, 0, wPrinterTileMapBuffer + ld a, $36 + ld b, 6 + call .FillColumn + hlcoord 19, 0, wPrinterTileMapBuffer + ld a, $37 + ld b, 6 + call .FillColumn + hlcoord 0, 6, wPrinterTileMapBuffer + ld [hl], $38 + inc hl + ld a, $39 + ld bc, SCREEN_HEIGHT + call ByteFill + ld [hl], $3a + hlcoord 0, 7, wPrinterTileMapBuffer + ld bc, SCREEN_WIDTH + ld a, $32 + call ByteFill + ld a, [wd265] + dec a + call CheckCaughtMon + push af + ld a, [wd265] + ld b, a + ld c, 2 ; get page 2 + callba GetDexEntryPagePointer + pop af + hlcoord 1, 1, wPrinterTileMapBuffer + ld a, b + call nz, FarString + ret +; 1dc26a + +.FillColumn: ; 1dc26a + push de + ld de, SCREEN_WIDTH +.column_loop + ld [hl], a + add hl, de + dec b + jr nz, .column_loop + pop de + ret +; 1dc275 + +GBPrinterStrings: +GBPrinterString_Null: db "@" +GBPrinterString_CheckingLink: next " CHECKING LINK...@" +GBPrinterString_Transmitting: next " TRANSMITTING...@" +GBPrinterString_Printing: next " PRINTING...@" +GBPrinterString_PrinterError1: + db " Printer Error 1" + next "" + next "Check the Game Boy" + next "Printer Manual." + db "@" +GBPrinterString_PrinterError2: + db " Printer Error 2" + next "" + next "Check the Game Boy" + next "Printer Manual." + db "@" +GBPrinterString_PrinterError3: + db " Printer Error 3" + next "" + next "Check the Game Boy" + next "Printer Manual." + db "@" +GBPrinterString_PrinterError4: + db " Printer Error 4" + next "" + next "Check the Game Boy" + next "Printer Manual." + db "@" +; 1dc381 + +PrintPartyMonPage1: ; 1dc381 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + call LoadFontsBattleExtra + + ld de, GBPrinterHPIcon + ld hl, VTiles2 tile $71 + lb bc, BANK(GBPrinterHPIcon), 1 + call Request1bpp + + ld de, GBPrinterLvIcon + ld hl, VTiles2 tile $6e + lb bc, BANK(GBPrinterLvIcon), 1 + call Request1bpp + + ld de, ShinyIconGFX + ld hl, VTiles2 tile $3f + lb bc, BANK(ShinyIconGFX), 1 + call Get2bpp + + xor a + ld [MonType], a + callba CopyPkmnToTempMon + hlcoord 0, 7 + ld b, 9 + ld c, 18 + call TextBox + hlcoord 8, 2 + ld a, [TempMonLevel] + call PrintLevel_Force3Digits + hlcoord 12, 2 + ld [hl], "◀" ; Filled left triangle + inc hl + ld de, TempMonMaxHP + lb bc, 2, 3 + call PrintNum + ld a, [CurPartySpecies] + ld [wd265], a + ld [CurSpecies], a + ld hl, PartyMonNicknames + call Function1dc50e + hlcoord 8, 4 + call PlaceString + hlcoord 9, 6 + ld [hl], "/" + call GetPokemonName + hlcoord 10, 6 + call PlaceString + hlcoord 8, 0 + ld [hl], "№" + inc hl + ld [hl], "." + inc hl + ld de, wd265 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + hlcoord 1, 9 + ld de, String1dc550 + call PlaceString + ld hl, PartyMonOT + call Function1dc50e + hlcoord 4, 9 + call PlaceString + hlcoord 1, 11 + ld de, String1dc559 + call PlaceString + hlcoord 4, 11 + ld de, TempMonID + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + hlcoord 1, 14 + ld de, String1dc554 + call PlaceString + hlcoord 7, 14 + ld a, [TempMonMoves + 0] + call Function1dc51a + call Function1dc52c + ld hl, TempMonDVs + predef GetUnownLetter + ld hl, wBoxAlignment + xor a + ld [hl], a + ld a, [CurPartySpecies] + cp UNOWN + jr z, .asm_1dc469 + inc [hl] + +.asm_1dc469 + hlcoord 0, 0 + call _PrepMonFrontpic + call WaitBGMap + ld b, SCGB_STATS_SCREEN_HP_PALS + call GetSGBLayout + call SetPalettes + ret +; 1dc47b + +PrintPartyMonPage2: ; 1dc47b + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + call LoadFontsBattleExtra + xor a + ld [MonType], a + callba CopyPkmnToTempMon + hlcoord 0, 0 + ld b, 15 + ld c, 18 + call TextBox + ld bc, SCREEN_WIDTH + decoord 0, 0 + hlcoord 0, 1 + call CopyBytes + hlcoord 7, 0 + ld a, [TempMonMoves + 1] + call Function1dc51a + hlcoord 7, 2 + ld a, [TempMonMoves + 2] + call Function1dc51a + hlcoord 7, 4 + ld a, [TempMonMoves + 3] + call Function1dc51a + hlcoord 7, 7 + ld de, String1dc55d + call PlaceString + hlcoord 16, 7 + ld de, TempMonAttack + call .PrintTempMonStats + hlcoord 16, 9 + ld de, TempMonDefense + call .PrintTempMonStats + hlcoord 16, 11 + ld de, TempMonSpclAtk + call .PrintTempMonStats + hlcoord 16, 13 + ld de, TempMonSpclDef + call .PrintTempMonStats + hlcoord 16, 15 + ld de, TempMonSpeed + call .PrintTempMonStats + call WaitBGMap + ld b, SCGB_STATS_SCREEN_HP_PALS + call GetSGBLayout + call SetPalettes + ret +; 1dc507 + +.PrintTempMonStats: ; 1dc507 + lb bc, 2, 3 + call PrintNum + ret +; 1dc50e + +Function1dc50e: ; 1dc50e + ld bc, NAME_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld e, l + ld d, h + ret +; 1dc51a + +Function1dc51a: ; 1dc51a + and a + jr z, .no_move + + ld [wd265], a + call GetMoveName + jr .got_string + +.no_move + ld de, String1dc584 + +.got_string + call PlaceString + ret +; 1dc52c + +Function1dc52c: ; 1dc52c + callba GetGender + ld a, " " + jr c, .got_gender + ld a, "♂" + jr nz, .got_gender + ld a, "♀" + +.got_gender + hlcoord 17, 2 + ld [hl], a + ld bc, TempMonDVs + callba CheckShininess + ret nc + hlcoord 18, 2 + ld [hl], "" + ret +; 1dc550 + +String1dc550: ; 1dc550 + db "OT/@" + +String1dc554: ; 1dc554 + db "MOVE@" + +String1dc559: ; 1dc559 + db "№.@" + +String1dc55d: ; 1dc55d + db "ATTACK" + next "DEFENSE" + next "SPCL.ATK" + next "SPCL.DEF" + next "SPEED" + db "@" + +String1dc584: ; 1dc584 + db "------------@" +; 1dc591 + +GBPrinterHPIcon: ; 1dc591 +INCBIN "gfx/printer/hp.1bpp" + +GBPrinterLvIcon: ; 1dc599 +INCBIN "gfx/printer/lv.1bpp" diff --git a/engine/unused_title.asm b/engine/unused_title.asm new file mode 100644 index 000000000..6cd79237b --- /dev/null +++ b/engine/unused_title.asm @@ -0,0 +1,556 @@ +UnusedTitleScreen: ; 10c000 + + call ClearBGPalettes + call ClearTileMap + call DisableLCD + xor a + ld [hBGMapMode], a + + ld hl, wJumptableIndex + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + + ld hl, UnusedTitleBG_GFX + ld de, VTiles2 + ld bc, VBGMap0 - VTiles2 + call CopyBytes + + ld hl, UnusedTitleBG_GFX + $800 + ld de, VTiles1 + ld bc, VTiles2 - VTiles1 + call CopyBytes + + ld hl, UnusedTitleFG_GFX + ld de, VTiles0 + ld bc, VTiles1 - VTiles0 + call CopyBytes + + ld hl, UnusedTitleBG_Tilemap + debgcoord 0, 0 + ld bc, 32 * 32 +.copy + ld a, 0 + ld [rVBK], a + ld a, [hli] + ld [de], a + ld a, 1 + ld [rVBK], a + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .copy + + ld hl, UnusedTitleFG_OAM + ld de, Sprites + ld bc, $a0 + call CopyBytes + + call EnableLCD + ld a, [rLCDC] + set 1, a + set 2, a + ld [rLCDC], a + + call DelayFrame + + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + ld hl, UnusedTitleBG_Palettes + ld de, UnknBGPals + ld bc, $40 + call CopyBytes + + ld hl, UnusedTitleFG_Palettes + ld de, UnknOBPals + ld bc, $40 + call CopyBytes + + ld hl, UnusedTitleBG_Palettes + ld de, BGPals + ld bc, $40 + call CopyBytes + + ld hl, UnusedTitleFG_Palettes + ld de, OBPals + ld bc, $40 + call CopyBytes + + pop af + ld [rSVBK], a + + ld a, $1 + ld [hCGBPalUpdate], a + + ld de, MUSIC_TITLE + call PlayMusic + + ret +; 10c0b1 + +UnusedTitleBG_GFX: ; 10c0b1 +INCBIN "gfx/title/old_bg.2bpp" +; 10d0b1 + +UnusedTitleBG_Tilemap: ; 10d0b1 +; 32x32 (tile, attributes) + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $01,$00, $02,$01, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $03,$00, $04,$00, $05,$01, $06,$01, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $07,$05, $08,$05, $09,$05, $0a,$05, $0b,$00, $0c,$00, $0d,$00, $0e,$00, $0f,$01, $10,$01, $11,$01, $12,$01, $13,$05, $14,$05, $15,$05, $16,$05, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $17,$04, $18,$04, $19,$04, $1a,$04, $1b,$00, $1c,$00, $1d,$02, $1e,$02, $1f,$07, $20,$07, $21,$01, $22,$01, $23,$04, $24,$04, $25,$04, $26,$04, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $27,$04, $28,$04, $29,$04, $2a,$04, $2b,$00, $2c,$00, $2d,$03, $2e,$01, $2f,$01, $30,$01, $31,$01, $32,$01, $33,$04, $34,$04, $35,$04, $36,$04, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $37,$04, $38,$04, $39,$04, $3a,$04, $3b,$00, $3c,$00, $3d,$01, $00,$00, $00,$00, $3e,$07, $3f,$01, $40,$01, $41,$04, $42,$04, $43,$04, $44,$04, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $45,$04, $46,$04, $47,$04, $48,$04, $49,$00, $3c,$00, $4a,$01, $00,$00, $00,$00, $4b,$07, $3f,$01, $4c,$01, $4d,$06, $4e,$06, $4f,$06, $50,$06, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $51,$04, $52,$06, $53,$06, $54,$06, $55,$00, $3c,$00, $56,$01, $00,$00, $00,$00, $57,$07, $58,$01, $59,$01, $5a,$06, $5b,$06, $5c,$06, $5d,$06, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $5e,$06, $5f,$06, $60,$06, $61,$06, $62,$00, $63,$00, $64,$03, $65,$01, $66,$01, $67,$07, $68,$01, $69,$01, $26,$04, $6a,$06, $26,$04, $26,$04, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $6b,$00, $6c,$05, $6d,$05, $6e,$05, $6f,$00, $70,$02, $71,$02, $72,$01, $73,$00, $74,$02, $75,$01, $76,$01, $77,$05, $78,$05, $79,$05, $6b,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $7a,$00, $7b,$00, $7c,$00, $7d,$00, $0f,$01, $7e,$01, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $a2,$00, $80,$00, $81,$00, $82,$00, $83,$00, $84,$07, $85,$01, $86,$01, $87,$01, $88,$01, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $89,$00, $8a,$00, $8b,$00, $8c,$07, $8d,$01, $8e,$01, $8f,$01, $90,$01, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $91,$01, $92,$01, $93,$01, $94,$01, $95,$01, $00,$00, $00,$00, $00,$00, $96,$05, $97,$05, $98,$05, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $99,$05, $9a,$05, $9b,$05, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $9c,$05, $9d,$05, $9e,$05, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $9f,$05, $a0,$05, $a1,$05, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $6b,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 + db $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 +; 10d8b1 + +UnusedTitleBG_Palettes: ; 10d8b1 + RGB 00, 00, 00 + RGB 25, 15, 28 + RGB 22, 11, 28 + RGB 19, 08, 26 + + RGB 00, 00, 00 + RGB 17, 07, 22 + RGB 13, 07, 16 + RGB 19, 08, 26 + + RGB 25, 15, 28 + RGB 22, 11, 28 + RGB 19, 08, 26 + RGB 17, 07, 22 + + RGB 22, 11, 28 + RGB 19, 08, 26 + RGB 17, 07, 22 + RGB 13, 07, 16 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 12, 12, 12 + + RGB 00, 00, 00 + RGB 01, 11, 23 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 22, 10, 31 + RGB 19, 08, 26 + RGB 17, 07, 22 + + + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + + RGB 31, 31, 31 + RGB 20, 04, 20 + RGB 16, 08, 16 + RGB 24, 00, 24 + + rept 54 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + RGB 31, 31, 31 + endr +; 10dab1 + +UnusedTitleFG_GFX: ; 10dab1 +INCBIN "gfx/title/old_fg.2bpp" +; 10eab1 + +UnusedTitleFG_Palettes: ; 10eab1 + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 12, 12, 12 + + RGB 00, 00, 00 + RGB 01, 11, 23 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 31, 22, 00 + RGB 31, 27, 00 + RGB 31, 31, 00 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 12, 12, 12 + + RGB 00, 00, 00 + RGB 01, 11, 23 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 16, 31, 00 + RGB 22, 31, 00 + RGB 27, 31, 00 + RGB 31, 31, 00 + + + RGB 31, 00, 18 + RGB 31, 31, 31 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 00, 00, 00 + RGB 31, 31, 31 + RGB 20, 20, 20 + RGB 12, 12, 12 + + RGB 00, 00, 00 + RGB 01, 11, 23 + RGB 16, 16, 24 + RGB 02, 13, 21 + + RGB 16, 31, 00 + RGB 22, 31, 00 + RGB 27, 31, 00 + RGB 31, 31, 00 + + RGB 24, 18, 31 + RGB 31, 31, 00 + RGB 31, 31, 01 + RGB 31, 31, 03 + + RGB 31, 31, 05 + RGB 31, 31, 08 + RGB 31, 31, 10 + RGB 31, 31, 12 + + RGB 31, 31, 14 + RGB 31, 31, 16 + RGB 31, 31, 18 + RGB 31, 31, 20 + + RGB 31, 31, 22 + RGB 31, 31, 25 + RGB 31, 31, 27 + RGB 31, 31, 29 + + RGB 24, 06, 06 + RGB 01, 01, 01 + RGB 03, 03, 03 + RGB 05, 05, 05 + + RGB 08, 08, 08 + RGB 10, 10, 10 + RGB 12, 12, 12 + RGB 14, 14, 14 + + RGB 16, 16, 16 + RGB 18, 18, 18 + RGB 20, 20, 20 + RGB 22, 22, 22 + + RGB 25, 25, 25 + RGB 27, 27, 27 + RGB 29, 29, 29 + RGB 31, 31, 31 + + RGB 18, 24, 18 + RGB 31, 29, 01 + RGB 31, 27, 03 + RGB 31, 25, 05 + + RGB 31, 22, 08 + RGB 31, 20, 10 + RGB 31, 18, 12 + RGB 31, 16, 14 + + RGB 31, 14, 16 + RGB 31, 12, 18 + RGB 31, 10, 20 + RGB 31, 08, 22 + + RGB 31, 05, 25 + RGB 31, 03, 27 + RGB 31, 01, 29 + RGB 31, 00, 31 + + RGB 18, 06, 31 + RGB 00, 31, 31 + RGB 00, 31, 29 + RGB 00, 31, 27 + + RGB 00, 31, 25 + RGB 00, 31, 22 + RGB 00, 31, 20 + RGB 00, 31, 18 + + RGB 00, 31, 16 + RGB 00, 31, 14 + RGB 00, 31, 12 + RGB 00, 31, 10 + + RGB 00, 31, 08 + RGB 00, 31, 05 + RGB 00, 31, 03 + RGB 00, 31, 01 + + RGB 12, 31, 06 + RGB 00, 00, 31 + RGB 00, 01, 31 + RGB 00, 03, 31 + + RGB 00, 05, 31 + RGB 00, 08, 31 + RGB 00, 10, 31 + RGB 00, 12, 31 + + RGB 00, 14, 31 + RGB 00, 16, 31 + RGB 00, 18, 31 + RGB 00, 20, 31 + + RGB 00, 22, 31 + RGB 00, 25, 31 + RGB 00, 27, 31 + RGB 00, 29, 31 + + RGB 00, 00, 00 + RGB 06, 00, 04 + RGB 19, 02, 09 + RGB 28, 04, 11 + + RGB 31, 07, 16 + RGB 31, 17, 23 + RGB 31, 26, 30 + RGB 07, 05, 10 + + RGB 14, 10, 18 + RGB 20, 20, 25 + RGB 25, 27, 31 + RGB 09, 05, 06 + + RGB 23, 16, 13 + RGB 30, 23, 22 + RGB 31, 28, 28 + RGB 31, 31, 31 + + RGB 06, 31, 31 + RGB 04, 00, 04 + RGB 11, 02, 04 + RGB 17, 02, 04 + + RGB 24, 05, 04 + RGB 28, 07, 04 + RGB 31, 11, 04 + RGB 02, 01, 15 + + RGB 04, 11, 22 + RGB 12, 25, 25 + RGB 20, 31, 31 + RGB 09, 04, 03 + + RGB 22, 11, 08 + RGB 27, 19, 16 + RGB 30, 28, 26 + RGB 31, 31, 31 + + RGB 06, 18, 06 + RGB 04, 04, 02 + RGB 07, 07, 02 + RGB 18, 18, 04 + + RGB 24, 24, 06 + RGB 27, 27, 11 + RGB 31, 31, 20 + RGB 02, 03, 10 + + RGB 04, 05, 13 + RGB 06, 10, 25 + RGB 08, 15, 31 + RGB 04, 00, 06 + + RGB 11, 07, 14 + RGB 21, 16, 23 + RGB 29, 26, 31 + RGB 31, 31, 31 + + RGB 06, 00, 18 + RGB 00, 04, 03 + RGB 02, 09, 05 + RGB 11, 19, 07 + + RGB 16, 24, 08 + RGB 22, 31, 09 + RGB 24, 31, 18 + RGB 03, 01, 03 + + RGB 10, 04, 10 + RGB 20, 08, 20 + RGB 31, 17, 31 + RGB 01, 03, 06 + + RGB 05, 09, 10 + RGB 15, 21, 21 + RGB 23, 25, 25 + RGB 31, 31, 31 + + RGB 00, 18, 31 + RGB 00, 05, 07 + RGB 00, 08, 13 + RGB 00, 12, 17 + + RGB 01, 20, 24 + RGB 04, 27, 31 + RGB 14, 31, 31 + RGB 04, 02, 02 + + RGB 15, 01, 03 + RGB 26, 04, 07 + RGB 31, 13, 16 + RGB 00, 05, 02 + + RGB 01, 11, 03 + RGB 06, 21, 06 + RGB 13, 31, 16 + RGB 31, 31, 31 + + RGB 00, 06, 06 + RGB 00, 01, 08 + RGB 00, 05, 14 + RGB 00, 08, 19 + + RGB 02, 14, 26 + RGB 04, 21, 31 + RGB 06, 26, 31 + RGB 13, 00, 00 + + RGB 27, 07, 00 + RGB 31, 17, 05 + RGB 31, 25, 16 + RGB 02, 04, 00 + + RGB 07, 11, 03 + RGB 17, 19, 05 + RGB 27, 31, 16 + RGB 31, 31, 31 + + RGB 02, 00, 00 + RGB 04, 01, 06 + RGB 11, 03, 14 + RGB 16, 04, 19 + + RGB 20, 07, 22 + RGB 26, 12, 27 + RGB 26, 20, 31 + RGB 04, 07, 00 + + RGB 16, 20, 07 + RGB 24, 28, 15 + RGB 29, 31, 24 + RGB 05, 02, 02 + + RGB 15, 04, 02 + RGB 24, 11, 10 + RGB 31, 22, 20 + RGB 31, 31, 31 + + RGB 00, 00, 14 + RGB 12, 00, 00 + RGB 27, 05, 00 + RGB 31, 15, 05 + + RGB 31, 26, 13 + RGB 31, 30, 21 + RGB 05, 07, 16 + RGB 04, 16, 20 + + RGB 04, 24, 26 + RGB 08, 31, 31 + RGB 23, 31, 31 + RGB 00, 00, 00 + + RGB 05, 05, 05 + RGB 17, 17, 15 + RGB 28, 28, 24 + RGB 31, 31, 31 +; 10ecb1 + +UnusedTitleFG_OAM: ; 10ecb1 + db $18, $38, $00, $01, $18, $40, $02, $01, $18, $48, $04, $01, $18, $50, $06, $01 + db $18, $58, $08, $01, $18, $60, $0a, $01, $18, $68, $0c, $01, $18, $70, $0e, $01 + + db $28, $38, $10, $00, $28, $40, $12, $00, $28, $48, $14, $00, $28, $50, $16, $00 + db $28, $58, $18, $00, $28, $60, $1a, $00, $28, $68, $1c, $00, $28, $70, $1e, $00 + + db $38, $38, $20, $00, $38, $40, $22, $00, $38, $48, $24, $00, $38, $50, $26, $00 + db $38, $58, $28, $00, $38, $60, $2a, $00, $38, $68, $2c, $00, $38, $70, $2e, $00 + + db $48, $38, $30, $02, $48, $40, $32, $02, $48, $48, $34, $02, $48, $50, $36, $02 + db $48, $58, $38, $02, $48, $60, $3a, $02, $48, $68, $3c, $02, $48, $70, $3e, $02 + + db $58, $38, $40, $01, $58, $40, $42, $01, $58, $48, $44, $01, $58, $50, $46, $01 + db $58, $58, $48, $01, $58, $60, $4a, $01, $58, $68, $4c, $01, $58, $70, $4e, $01 +; 10ed51 + + +Function10ed51: ; 10ed51 + call _TitleScreen +.loop + call JoyTextDelay + ld a, [hJoyLast] + ld b, a + and 1 + jr nz, .done + call SuicuneFrameIterator + call DelayFrame + jr .loop +.done + ret +; 10ed67 -- cgit v1.2.3 From 59fe4078124f0fa8d1613a3f715861d9c6f2d449 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 17:22:52 -0500 Subject: Copy pokered's organization some more, with further constant and data files --- engine/credits.asm | 635 +------------------------------------------ engine/fruit_trees.asm | 2 +- engine/mart.asm | 28 +- engine/new_pokedex_entry.asm | 52 ++++ engine/play_slow_cry.asm | 31 +++ engine/pokegear.asm | 53 +--- engine/time_capsule.asm | 130 --------- engine/time_capsule_2.asm | 39 +++ engine/unown_dex.asm | 51 ++++ engine/unowndex.asm | 51 ---- 10 files changed, 182 insertions(+), 890 deletions(-) create mode 100644 engine/new_pokedex_entry.asm create mode 100644 engine/play_slow_cry.asm create mode 100644 engine/time_capsule_2.asm create mode 100755 engine/unown_dex.asm delete mode 100755 engine/unowndex.asm (limited to 'engine') diff --git a/engine/credits.asm b/engine/credits.asm index f8cce7a15..62e53c01f 100644 --- a/engine/credits.asm +++ b/engine/credits.asm @@ -1,121 +1,7 @@ INCLUDE "includes.asm" -SECTION "Credits", ROMX - - const_def - const SATOSHI_TAJIRI - const JUNICHI_MASUDA - const TETSUYA_WATANABE - const SHIGEKI_MORIMOTO - const SOUSUKE_TAMADA - const TAKENORI_OOTA - const KEN_SUGIMORI - const MOTOFUMI_FUJIWARA - const ATSUKO_NISHIDA - const MUNEO_SAITO - const SATOSHI_OOTA - const RENA_YOSHIKAWA - const JUN_OKUTANI - const HIRONOBU_YOSHIDA - const ASUKA_IWASHITA - const GO_ICHINOSE - const MORIKAZU_AOKI - const KOHJI_NISHINO - const KENJI_MATSUSHIMA - const TOSHINOBU_MATSUMIYA - const SATORU_IWATA - const NOBUHIRO_SEYA - const KAZUHITO_SEKINE - const TETSUJI_OOTA - const NCL_SUPER_MARIO_CLUB - const SARUGAKUCHO - const AKITO_MORI - const TAKAHIRO_HARADA - const TOHRU_HASHIMOTO - const NOBORU_MATSUMOTO - const TAKEHIRO_IZUSHI - const TAKASHI_KAWAGUCHI - const TSUNEKAZU_ISHIHARA - const HIROSHI_YAMAUCHI - const KENJI_SAIKI - const ATSUSHI_TADA - const NAOKO_KAWAKAMI - const HIROYUKI_ZINNAI - const KUNIMI_KAWAMURA - const HISASHI_SOGABE - const KEITA_KAGAYA - const YOSHINORI_MATSUDA - const HITOMI_SATO - const TORU_OSAWA - const TAKAO_OHARA - const YUICHIRO_ITO - const TAKAO_SHIMIZU - const PLANNING - const KEITA_NAKAMURA - const HIROTAKA_UEMURA - const HIROAKI_TAMURA - const NORIAKI_SAKAGUCHI - const MIYUKI_SATO - const GAKUZI_NOMOTO - const AI_MASHIMA - const MIKIHIRO_ISHIKAWA - const HIDEYUKI_HASHIMOTO - const SATOSHI_YAMATO - const SHIGERU_MIYAMOTO - const GAIL_TILDEN - const NOB_OGASAWARA - const SETH_MCMAHILL - const HIROTO_ALEXANDER - const TERESA_LILLYGREN - const THOMAS_HERTZOG - const ERIK_JOHNSON - const HIRO_NAKAMURA - const TERUKI_MURAKAWA - const KAZUYOSHI_OSAWA - const KIMIKO_NAKAMICHI - const CREDIT_END - const CREDIT_UNKNOWN - const STAFF - const DIRECTOR - const CODIRECTOR - const PROGRAMMERS - const GRAPHICS_DIRECTOR - const MONSTER_DESIGN - const GRAPHICS_DESIGN - const CREDIT_MUSIC - const CREDIT_SOUND_EFFECTS - const GAME_DESIGN - const GAME_SCENARIO - const TOOL_PROGRAMMING - const PARAMETRIC_DESIGN - const SCRIPT_DESIGN - const MAP_DATA_DESIGN - const MAP_DESIGN - const PRODUCT_TESTING - const SPECIAL_THANKS - const PRODUCERS - const EXECUTIVE_PRODUCER - const POKEMON_ANIMATION - const POKEDEX_TEXT - const MOBILE_PRJ_LEADER - const MOBILE_SYSTEM_AD - const MOBILE_STADIUM_DIR - const COORDINATION - const COPYRIGHT - const US_VERSION_STAFF - const US_COORDINATION - const TEXT_TRANSLATION - const PAAD_TESTING - -const_value SET -7 - const CREDITS_THEEND - const CREDITS_WAIT2 - const CREDITS_MUSIC - const CREDITS_CLEAR - const CREDITS_SCENE - const CREDITS_WAIT - const CREDITS_END +SECTION "Credits", ROMX Credits:: ; 109847 bit 6, b ; Hall Of Fame @@ -791,521 +677,8 @@ Credits_TheEnd: ; 109c11 (42:5c11) ; 109c24 (42:5c24) -CreditsBorderGFX: INCBIN "gfx/credits/border.2bpp" - -CreditsMonsGFX: -CreditsPichuGFX: INCBIN "gfx/credits/pichu.2bpp" -CreditsSmoochumGFX: INCBIN "gfx/credits/smoochum.2bpp" -CreditsDittoGFX: INCBIN "gfx/credits/ditto.2bpp" -CreditsIgglybuffGFX: INCBIN "gfx/credits/igglybuff.2bpp" - - -CreditsScript: ; 10acb4 - -; Clear the banner. - db CREDITS_CLEAR - -; Pokemon Crystal Version Staff - db STAFF, 1 - - db CREDITS_WAIT, 8 - -; Play the credits music. - db CREDITS_MUSIC - - db CREDITS_WAIT2, 10 - - db CREDITS_WAIT, 1 - -; Update the banner. - db CREDITS_SCENE, 0 ; Pichu - - db DIRECTOR, 1 - db SATOSHI_TAJIRI, 2 - - db CREDITS_WAIT, 12 - - db CODIRECTOR, 1 - db JUNICHI_MASUDA, 2 - - db CREDITS_WAIT, 12 - - db PROGRAMMERS, 0 - db SOUSUKE_TAMADA, 1 - db HISASHI_SOGABE, 2 - db KEITA_KAGAYA, 3 - db YOSHINORI_MATSUDA, 4 - - db CREDITS_WAIT, 12 - - db PROGRAMMERS, 0 - db SHIGEKI_MORIMOTO, 1 - db TETSUYA_WATANABE, 2 - db TAKENORI_OOTA, 3 - - db CREDITS_WAIT, 12 - - db GRAPHICS_DIRECTOR, 1 - db KEN_SUGIMORI, 2 - - db CREDITS_WAIT, 12 - - db MONSTER_DESIGN, 0 - db KEN_SUGIMORI, 1 - db MOTOFUMI_FUJIWARA, 2 - db SHIGEKI_MORIMOTO, 3 - db HIRONOBU_YOSHIDA, 4 - db SATOSHI_OOTA, 5 - - db CREDITS_WAIT, 12 - - db MONSTER_DESIGN, 0 - db ATSUKO_NISHIDA, 1 - db MUNEO_SAITO, 2 - db RENA_YOSHIKAWA, 3 - - db CREDITS_WAIT, 12 - - db POKEMON_ANIMATION, 1 - db HIRONOBU_YOSHIDA, 2 - db JUN_OKUTANI, 3 - - db CREDITS_WAIT, 12 - -; Clear the banner. - db CREDITS_CLEAR - - db CREDITS_WAIT, 1 - -; Update the banner. - db CREDITS_SCENE, 1 ; Smoochum - - db GRAPHICS_DESIGN, 0 - db HIRONOBU_YOSHIDA, 1 - db JUN_OKUTANI, 2 - db ASUKA_IWASHITA, 3 - db TETSUYA_WATANABE, 4 - - db CREDITS_WAIT, 12 - - db CREDIT_MUSIC, 0 - db JUNICHI_MASUDA, 1 - db MORIKAZU_AOKI, 2 - db GO_ICHINOSE, 3 - - db CREDITS_WAIT, 12 - - db CREDIT_SOUND_EFFECTS, 0 - db MORIKAZU_AOKI, 1 - db JUNICHI_MASUDA, 2 - db TETSUYA_WATANABE, 3 - - db CREDITS_WAIT, 12 - - db GAME_DESIGN, 0 - db JUNICHI_MASUDA, 1 - db SHIGEKI_MORIMOTO, 2 - db KOHJI_NISHINO, 3 - - db CREDITS_WAIT, 12 - - db GAME_DESIGN, 0 - db TETSUJI_OOTA, 1 - db HITOMI_SATO, 2 - db KENJI_MATSUSHIMA, 3 - - db CREDITS_WAIT, 12 - - db GAME_SCENARIO, 0 - db JUNICHI_MASUDA, 1 - db KOHJI_NISHINO, 2 - db TOSHINOBU_MATSUMIYA, 3 - db KENJI_MATSUSHIMA, 4 - - db CREDITS_WAIT, 12 - - db POKEDEX_TEXT, 1 - db TOSHINOBU_MATSUMIYA, 2 - - db CREDITS_WAIT, 12 - - db TOOL_PROGRAMMING, 1 - db SOUSUKE_TAMADA, 2 - db TAKENORI_OOTA, 3 - - db CREDITS_WAIT, 12 - - db PARAMETRIC_DESIGN, 1 - db KOHJI_NISHINO, 2 +INCLUDE "gfx/credits.asm" - db CREDITS_WAIT, 12 +INCLUDE "data/credits_script.asm" -; Clear the banner. - db CREDITS_CLEAR - - db CREDITS_WAIT, 1 - -; Update the banner. - db CREDITS_SCENE, 2 ; Ditto - - db SCRIPT_DESIGN, 1 - db TETSUJI_OOTA, 2 - db NOBUHIRO_SEYA, 3 - - db CREDITS_WAIT, 12 - - db MAP_DATA_DESIGN, 1 - db TETSUJI_OOTA, 2 - db KAZUHITO_SEKINE, 3 - - db CREDITS_WAIT, 12 - - db MAP_DESIGN, 0 - db TETSUJI_OOTA, 1 - db KOHJI_NISHINO, 2 - db NOBUHIRO_SEYA, 3 - - db CREDITS_WAIT, 12 - - db COORDINATION, 1 - db HIROYUKI_ZINNAI, 2 - - db CREDITS_WAIT, 12 - - db PRODUCERS, 0 - db SATORU_IWATA, 1 - db SATOSHI_YAMATO, 2 - db SHIGERU_MIYAMOTO, 3 - - db CREDITS_WAIT, 12 - - db PRODUCERS, 1 - db TSUNEKAZU_ISHIHARA, 2 - - db CREDITS_WAIT, 12 - -; Clear the banner. - db CREDITS_CLEAR - - db CREDITS_WAIT, 1 - -; Update the banner. - db CREDITS_SCENE, 3 ; Igglybuff - - db US_VERSION_STAFF, 2 - - db CREDITS_WAIT, 9 - - db US_COORDINATION, 1 - db GAIL_TILDEN, 2 - db HIRO_NAKAMURA, 3 - - db CREDITS_WAIT, 12 - - db US_COORDINATION, 1 - db JUNICHI_MASUDA, 2 - db SETH_MCMAHILL, 3 - - db CREDITS_WAIT, 12 - - db US_COORDINATION, 1 - db HIROTO_ALEXANDER, 2 - db TERESA_LILLYGREN, 3 - - db CREDITS_WAIT, 12 - - db TEXT_TRANSLATION, 1 - db NOB_OGASAWARA, 2 - - db CREDITS_WAIT, 12 - - db PROGRAMMERS, 1 - db TERUKI_MURAKAWA, 2 - db KAZUYOSHI_OSAWA, 3 - - db CREDITS_WAIT, 12 - - db PAAD_TESTING, 1 - db THOMAS_HERTZOG, 2 - db ERIK_JOHNSON, 3 - - db CREDITS_WAIT, 12 - - db PRODUCT_TESTING, 0 - db PLANNING, 1 - - db CREDITS_WAIT, 12 - - db PRODUCT_TESTING, 0 - db KEITA_NAKAMURA, 1 - db HIROTAKA_UEMURA, 2 - db HIROAKI_TAMURA, 3 - db NORIAKI_SAKAGUCHI, 4 - - db CREDITS_WAIT, 12 - - db PRODUCT_TESTING, 0 - db NCL_SUPER_MARIO_CLUB, 1 - db KENJI_SAIKI, 2 - db ATSUSHI_TADA, 3 - db MIYUKI_SATO, 4 - - db CREDITS_WAIT, 12 - - db SPECIAL_THANKS, 0 - db KIMIKO_NAKAMICHI, 1 - db AKITO_MORI, 2 - - db CREDITS_WAIT, 12 - - db SPECIAL_THANKS, 0 - db GAKUZI_NOMOTO, 1 - db AI_MASHIMA, 2 - db KUNIMI_KAWAMURA, 3 - - db CREDITS_WAIT, 12 - - db SPECIAL_THANKS, 0 - db MIKIHIRO_ISHIKAWA, 1 - db HIDEYUKI_HASHIMOTO, 2 - - db CREDITS_WAIT, 12 - - db EXECUTIVE_PRODUCER, 1 - db HIROSHI_YAMAUCHI, 2 - - db CREDITS_WAIT, 12 - - db COPYRIGHT, 1 - - db CREDITS_WAIT, 9 - -; Display "The End" graphic. - db CREDITS_THEEND - - db CREDITS_WAIT, 20 - - db CREDITS_END -; 10ae13 - - -CreditsStrings: - dw .SatoshiTajiri - dw .JunichiMasuda - dw .TetsuyaWatanabe - dw .ShigekiMorimoto - dw .SousukeTamada - dw .TakenoriOota - dw .KenSugimori - dw .MotofumiFujiwara - dw .AtsukoNishida - dw .MuneoSaito - dw .SatoshiOota - dw .RenaYoshikawa - dw .JunOkutani - dw .HironobuYoshida - dw .AsukaIwashita - dw .GoIchinose - dw .MorikazuAoki - dw .KohjiNishino - dw .KenjiMatsushima - dw .ToshinobuMatsumiya - dw .SatoruIwata - dw .NobuhiroSeya - dw .KazuhitoSekine - dw .TetsujiOota - dw .NclSuperMarioClub - dw .Sarugakucho - dw .AkitoMori - dw .TakahiroHarada - dw .TohruHashimoto - dw .NoboruMatsumoto - dw .TakehiroIzushi - dw .TakashiKawaguchi - dw .TsunekazuIshihara - dw .HiroshiYamauchi - dw .KenjiSaiki - dw .AtsushiTada - dw .NaokoKawakami - dw .HiroyukiZinnai - dw .KunimiKawamura - dw .HisashiSogabe - dw .KeitaKagaya - dw .YoshinoriMatsuda - dw .HitomiSato - dw .ToruOsawa - dw .TakaoOhara - dw .YuichiroIto - dw .TakaoShimizu - dw .Planning - dw .KeitaNakamura - dw .HirotakaUemura - dw .HiroakiTamura - dw .NoriakiSakaguchi - dw .MiyukiSato - dw .GakuziNomoto - dw .AiMashima - dw .MikihiroIshikawa - dw .HideyukiHashimoto - dw .SatoshiYamato - dw .ShigeruMiyamoto - dw .GailTilden - dw .NobOgasawara - dw .SethMcMahill - dw .HirotoAlexander - dw .TeresaLillygren - dw .ThomasHertzog - dw .ErikJohnson - dw .HiroNakamura - dw .TerukiMurakawa - dw .KazuyoshiOsawa - dw .KimikoNakamichi - dw .End - dw .Unknown - dw .Staff - dw .Director - dw .CoDirector - dw .Programmers - dw .GraphicsDirector - dw .MonsterDesign - dw .GraphicsDesign - dw .Music - dw .SoundEffects - dw .GameDesign - dw .GameScenario - dw .ToolProgramming - dw .ParametricDesign - dw .ScriptDesign - dw .MapDataDesign - dw .MapDesign - dw .ProductTesting - dw .SpecialThanks - dw .Producers - dw .ExecutiveProducer - dw .PokemonAnimation - dw .PokedexText - dw .MobilePrjLeader - dw .MobileSystemAd - dw .MobileStadiumDir - dw .Coordination - dw .Copyright - dw .UsVersionStaff - dw .UsCoordination - dw .TextTranslation - dw .PaadTesting - -.SatoshiTajiri: db " SATOSHI TAJIRI@" ; "たじり さとし@" -.JunichiMasuda: db " JUNICHI MASUDA@" ; "ますだ じゅんいち@" -.TetsuyaWatanabe: db " TETSUYA WATANABE@" ; "わたなべ てつや@" -.ShigekiMorimoto: db " SHIGEKI MORIMOTO@" ; "もりもと しげき@" -.SousukeTamada: db " SOUSUKE TAMADA@" ; "たまだ そうすけ@" -.TakenoriOota: db " TAKENORI OOTA@" ; "おおた たけのり@" -.KenSugimori: db " KEN SUGIMORI@" ; "すぎもり けん@" -.MotofumiFujiwara: db " MOTOFUMI FUJIWARA@" ; "ふじわら もとふみ@" -.AtsukoNishida: db " ATSUKO NISHIDA@" ; "にしだ あつこ@" -.MuneoSaito: db " MUNEO SAITO@" ; "さいとう むねお@" -.SatoshiOota: db " SATOSHI OOTA@" ; "おおた さとし@" -.RenaYoshikawa: db " RENA YOSHIKAWA@" ; "よしかわ れな@" -.JunOkutani: db " JUN OKUTANI@" ; "おくたに じゅん@" -.HironobuYoshida: db " HIRONOBU YOSHIDA@" ; "よしだ ひろのぶ@" -.AsukaIwashita: db " ASUKA IWASHITA@" ; "いわした あすか@" -.GoIchinose: db " GO ICHINOSE@" ; "いちのせ ごう@" -.MorikazuAoki: db " MORIKAZU AOKI@" ; "あおき もりかず@" -.KohjiNishino: db " KOHJI NISHINO@" ; "にしの こうじ@" -.KenjiMatsushima: db " KENJI MATSUSHIMA@" ; "まつしま けんじ@" -.ToshinobuMatsumiya: db "TOSHINOBU MATSUMIYA@" ; "まつみや としのぶ@" -.SatoruIwata: db " SATORU IWATA@" ; "いわた さとる@" -.NobuhiroSeya: db " NOBUHIRO SEYA@" ; "せや のぶひろ@" -.KazuhitoSekine: db " KAZUHITO SEKINE@" ; "せきね かずひと@" -.TetsujiOota: db " TETSUJI OOTA@" ; "おおた てつじ@" -.NclSuperMarioClub: db "NCL SUPER MARIO CLUB@" ; "スーパーマりォクラブ@" -.Sarugakucho: db " SARUGAKUCHO@" ; "さるがくちょう@" -.AkitoMori: db " AKITO MORI@" ; "もり あきと@" -.TakahiroHarada: db " TAKAHIRO HARADA@" ; "はらだ たかひろ@" -.TohruHashimoto: db " TOHRU HASHIMOTO@" ; "はしもと とおる@" -.NoboruMatsumoto: db " NOBORU MATSUMOTO@" ; "まつもと のぼる@" -.TakehiroIzushi: db " TAKEHIRO IZUSHI@" ; "いずし たけひろ@" -.TakashiKawaguchi: db " TAKASHI KAWAGUCHI@" ; "かわぐち たかし@" -.TsunekazuIshihara: db " TSUNEKAZU ISHIHARA@" ; "いしはら つねかず@" -.HiroshiYamauchi: db " HIROSHI YAMAUCHI@" ; "やまうち ひろし@" -.KenjiSaiki: db " KENJI SAIKI@" ; "さいき けんじ@" -.AtsushiTada: db " ATSUSHI TADA@" ; "ただ あつし@" -.NaokoKawakami: db " NAOKO KAWAKAMI@" ; "かわかみ なおこ@" -.HiroyukiZinnai: db " HIROYUKI ZINNAI@" ; "じんない ひろゆき@" -.KunimiKawamura: db " KUNIMI KAWAMURA@" ; "かわむら くにみ@" -.HisashiSogabe: db " HISASHI SOGABE@" ; "そがべ ひさし@" -.KeitaKagaya: db " KEITA KAGAYA@" ; "かがや けいた@" -.YoshinoriMatsuda: db " YOSHINORI MATSUDA@" ; "まつだ よしのり@" -.HitomiSato: db " HITOMI SATO@" ; "さとう ひとみ@" -.ToruOsawa: db " TORU OSAWA@" ; "おおさわ とおる@" -.TakaoOhara: db " TAKAO OHARA@" ; "おおはら たかお@" -.YuichiroIto: db " YUICHIRO ITO@" ; "いとう ゆういちろう@" -.TakaoShimizu: db " TAKAO SHIMIZU@" ; "しみず たかお@" -.Planning: db " SPECIAL PRODUCTION" - next " PLANNING" ; "きかくかいはつぶ@" - next " & DEVELOPMENT DEPT.@" -.KeitaNakamura: db " KEITA NAKAMURA@" ; "なかむら けいた@" -.HirotakaUemura: db " HIROTAKA UEMURA@" ; "うえむら ひろたか@" -.HiroakiTamura: db " HIROAKI TAMURA@" ; "たむら ひろあき@" -.NoriakiSakaguchi: db " NORIAKI SAKAGUCHI@" ; "さかぐち のりあき@" -.MiyukiSato: db " MIYUKI SATO@" ; "さとう みゆき@" -.GakuziNomoto: db " GAKUZI NOMOTO@" ; "のもと がくじ@" -.AiMashima: db " AI MASHIMA@" ; "ましま あい@" -.MikihiroIshikawa: db " MIKIHIRO ISHIKAWA@" ; "いしかわ みきひろ@" -.HideyukiHashimoto: db " HIDEYUKI HASHIMOTO@" ; "はしもと ひでゆき@" -.SatoshiYamato: db " SATOSHI YAMATO@" ; "やまと さとし@" -.ShigeruMiyamoto: db " SHIGERU MIYAMOTO@" ; "みやもと しげる@" -.End: db " END@" ; "おしまい@" -.Unknown: db " ????????@" ; "????????@" -.GailTilden: db " GAIL TILDEN@" -.NobOgasawara: db " NOB OGASAWARA@" -.SethMcMahill: db " SETH McMAHILL@" -.HirotoAlexander: db " HIROTO ALEXANDER@" -.TeresaLillygren: db " TERESA LILLYGREN@" -.ThomasHertzog: db " THOMAS HERTZOG@" -.ErikJohnson: db " ERIK JOHNSON@" -.HiroNakamura: db " HIRO NAKAMURA@" -.TerukiMurakawa: db " TERUKI MURAKAWA@" -.KazuyoshiOsawa: db " KAZUYOSHI OSAWA@" -.KimikoNakamichi: db " KIMIKO NAKAMICHI@" -.Staff: db " #MON" ; "ポケットモンスター" - next " CRYSTAL VERSION" ; " クりスタル バージョン" - next " STAFF@" ; " スタッフ@" -.Director: db " DIRECTOR@" ; "エグゼクティブ ディレクター@" -.CoDirector: db " CO-DIRECTOR@" ; "ディレクター@" -.Programmers: db " PROGRAMMERS@" ; "プログラム@" -.GraphicsDirector: db " GRAPHICS DIRECTOR@" ; "グラフィック ディレクター@" -.MonsterDesign: db " MONSTER DESIGN@" ; "# デザイン@" -.GraphicsDesign: db " GRAPHICS DESIGN@" ; "グラフィック デザイン@" -.Music: db " MUSIC@" ; "おんがく@" -.SoundEffects: db " SOUND EFFECTS@" ; "サウンド エフ→クト@" -.GameDesign: db " GAME DESIGN@" ; "ゲームデザイン@" -.GameScenario: db " GAME SCENARIO@" ; "シナりォ@" -.ToolProgramming: db " TOOL PROGRAMMING@" ; "ツール プログラム@" -.ParametricDesign: db " PARAMETRIC DESIGN@" ; "パラメーター せってい@" -.ScriptDesign: db " SCRIPT DESIGN@" ; "スクりプト せってい@" -.MapDataDesign: db " MAP DATA DESIGN@" ; "マップデータ せってい@" -.MapDesign: db " MAP DESIGN@" ; "マップ デザイン@" -.ProductTesting: db " PRODUCT TESTING@" ; "デバッグプレイ@" -.SpecialThanks: db " SPECIAL THANKS@" ; "スぺシャルサンクス@" -.Producers: db " PRODUCERS@" ; "プロデューサー@" -.ExecutiveProducer: db " EXECUTIVE PRODUCER@" ; "エグゼクティブ プロデューサー@" -.PokemonAnimation: db " #MON ANIMATION@" ; "# アニメーション@" -.PokedexText: db " #DEX TEXT@" ; "ずかん テキスト@" -.MobilePrjLeader: db " MOBILE PRJ. LEADER@" ; "モバイルプロジ→クト りーダー@" -.MobileSystemAd: db " MOBILE SYSTEM AD.@" ; "モバイル システムアドバイザー@" -.MobileStadiumDir: db "MOBILE STADIUM DIR.@" ; "モバイルスタジアム ディレクター@" -.Coordination: db " COORDINATION@" ; "コーディネーター@" -.UsVersionStaff: db " US VERSION STAFF@" -.UsCoordination: db " US COORDINATION@" -.TextTranslation: db " TEXT TRANSLATION@" -.PaadTesting: db " PAAD TESTING@" - -.Copyright: - ; (C) 1 9 9 5 - 2 0 0 1 N i n t e n d o - db $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c - ; (C) 1 9 9 5 - 2 0 0 1 C r e a t u r e s i n c . - next $60,$61,$62,$63,$64,$65,$66,$6d,$6e,$6f,$70,$71,$72, $7a,$7b,$7c - ; (C) 1 9 9 5 - 2 0 0 1 G A M E F R E A K i n c . - next $60,$61,$62,$63,$64,$65,$66,$73,$74,$75,$76,$77,$78,$79, $7a,$7b,$7c - db "@" +INCLUDE "data/credits_strings.asm" diff --git a/engine/fruit_trees.asm b/engine/fruit_trees.asm index 5c74b3bff..4f9de8300 100644 --- a/engine/fruit_trees.asm +++ b/engine/fruit_trees.asm @@ -103,7 +103,7 @@ GetFruitTreeItem: ; 4408a ; 44097 -INCLUDE "data/fruit_tree_items.asm" +INCLUDE "data/items/fruit_trees.asm" FruitBearingTreeText: ; 440b5 diff --git a/engine/mart.asm b/engine/mart.asm index 6bcec4c55..b091c9ef1 100755 --- a/engine/mart.asm +++ b/engine/mart.asm @@ -99,23 +99,7 @@ RooftopSale: ; 15ac4 ret ; 15aee -RooftopSaleData1: ; 15aee - db 5 - dbw POKE_BALL, 150 - dbw GREAT_BALL, 500 - dbw SUPER_POTION, 500 - dbw FULL_HEAL, 500 - dbw REVIVE, 1200 - db -1 -RooftopSaleData2: ; 15aff - db 5 - dbw HYPER_POTION, 1000 - dbw FULL_RESTORE, 2000 - dbw FULL_HEAL, 500 - dbw ULTRA_BALL, 1000 - dbw PROTEIN, 7800 - db -1 -; 15b10 +INCLUDE "data/items/rooftop_sale.asm" LoadMartPointer: ; 15b10 ld a, b @@ -355,15 +339,7 @@ ReadMart: ; 15c25 ret ; 15c51 -BargainShopData: ; 15c51 - db 5 - dbw NUGGET, 4500 - dbw PEARL, 650 - dbw BIG_PEARL, 3500 - dbw STARDUST, 900 - dbw STAR_PIECE, 4600 - db -1 -; 15c62 +INCLUDE "data/items/bargain_shop.asm" BuyMenu: ; 15c62 diff --git a/engine/new_pokedex_entry.asm b/engine/new_pokedex_entry.asm new file mode 100644 index 000000000..012052530 --- /dev/null +++ b/engine/new_pokedex_entry.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 + callba _NewPokedexEntry + call WaitPressAorB_BlinkCursor + ld a, $1 + ld [wPokedexStatus], a + callba 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 + callba Pokedex_PlaceFrontpicTopLeftCorner + call WaitBGMap2 + callba 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/play_slow_cry.asm b/engine/play_slow_cry.asm new file mode 100644 index 000000000..322fd21cc --- /dev/null +++ b/engine/play_slow_cry.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 + callba _PlayCryHeader + call WaitSFX + +.done + ret +; fb877 diff --git a/engine/pokegear.asm b/engine/pokegear.asm index 4e38cf917..bf2c2b40e 100755 --- a/engine/pokegear.asm +++ b/engine/pokegear.asm @@ -2338,44 +2338,7 @@ HasVisitedSpawn: ; 91c50 ; 91c5e -Flypoints: ; 91c5e -; landmark, spawn point -flypoint: MACRO - const FLY_\1 - db \2, SPAWN_\1 -ENDM - const_def -; Johto - flypoint NEW_BARK, NEW_BARK_TOWN - flypoint CHERRYGROVE, CHERRYGROVE_CITY - flypoint VIOLET, VIOLET_CITY - flypoint AZALEA, AZALEA_TOWN - flypoint GOLDENROD, GOLDENROD_CITY - flypoint ECRUTEAK, ECRUTEAK_CITY - flypoint OLIVINE, OLIVINE_CITY - flypoint CIANWOOD, CIANWOOD_CITY - flypoint MAHOGANY, MAHOGANY_TOWN - flypoint LAKE, LAKE_OF_RAGE - flypoint BLACKTHORN, BLACKTHORN_CITY - flypoint MT_SILVER, SILVER_CAVE -; Kanto - -KANTO_FLYPOINT EQU const_value - flypoint PALLET, PALLET_TOWN - flypoint VIRIDIAN, VIRIDIAN_CITY - flypoint PEWTER, PEWTER_CITY - flypoint CERULEAN, CERULEAN_CITY - flypoint VERMILION, VERMILION_CITY - flypoint ROCK_TUNNEL, ROCK_TUNNEL - flypoint LAVENDER, LAVENDER_TOWN - flypoint CELADON, CELADON_CITY - flypoint SAFFRON, SAFFRON_CITY - flypoint FUCHSIA, FUCHSIA_CITY - flypoint CINNABAR, CINNABAR_ISLAND - flypoint INDIGO, INDIGO_PLATEAU - db -1 - -; 91c8f +INCLUDE "data/flypoints.asm" ret_91c8f: ; 91c8f ret @@ -2872,19 +2835,7 @@ TownMapPals: ; 91f13 ret .PalMap: -townmappals: MACRO -rept _NARG / 2 - dn \2, \1 - shift - shift -endr -endm - townmappals 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 3, 1, 4, 5, 4, 5 - townmappals 1, 1, 1, 2, 2, 2, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0 - townmappals 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - townmappals 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 - townmappals 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 - townmappals 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0 +INCLUDE "data/palettes/town_map.asm" ; 91f7b TownMapMon: ; 91f7b diff --git a/engine/time_capsule.asm b/engine/time_capsule.asm index eb8896355..577b2dce8 100755 --- a/engine/time_capsule.asm +++ b/engine/time_capsule.asm @@ -144,134 +144,4 @@ PlaceTradePartnerNamesAndParty: ; fb60d jr .loop ; fb656 - INCLUDE "data/time_capsule/special_stats.asm" - - -INCLUDE "event/name_rater.asm" - - -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 - callba _PlayCryHeader - call WaitSFX - -.done - ret -; fb877 - -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 - callba _NewPokedexEntry - call WaitPressAorB_BlinkCursor - ld a, $1 - ld [wPokedexStatus], a - callba 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 - callba Pokedex_PlaceFrontpicTopLeftCorner - call WaitBGMap2 - callba 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 - -ConvertMon_2to1: ; fb8f1 -; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. - push bc - push hl - ld a, [wd265] - ld b, a - ld c, 0 - ld hl, Pokered_MonIndices -.loop - inc c - ld a, [hli] - cp b - jr nz, .loop - ld a, c - ld [wd265], a - pop hl - pop bc - ret -; fb908 - -ConvertMon_1to2: ; fb908 -; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. - push bc - push hl - ld a, [wd265] - dec a - ld hl, Pokered_MonIndices - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wd265], a - pop hl - pop bc - ret -; fb91c - - -INCLUDE "data/time_capsule/mon_order.asm" diff --git a/engine/time_capsule_2.asm b/engine/time_capsule_2.asm new file mode 100644 index 000000000..5da72e7c8 --- /dev/null +++ b/engine/time_capsule_2.asm @@ -0,0 +1,39 @@ +ConvertMon_2to1: ; fb8f1 +; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. + push bc + push hl + ld a, [wd265] + ld b, a + ld c, 0 + ld hl, Pokered_MonIndices +.loop + inc c + ld a, [hli] + cp b + jr nz, .loop + ld a, c + ld [wd265], a + pop hl + pop bc + ret +; fb908 + +ConvertMon_1to2: ; fb908 +; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. + push bc + push hl + ld a, [wd265] + dec a + ld hl, Pokered_MonIndices + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd265], a + pop hl + pop bc + ret +; fb91c + + +INCLUDE "data/time_capsule/mon_order.asm" diff --git a/engine/unown_dex.asm b/engine/unown_dex.asm new file mode 100755 index 000000000..6d14f8b3c --- /dev/null +++ b/engine/unown_dex.asm @@ -0,0 +1,51 @@ +UpdateUnownDex: ; fba18 + ld a, [UnownLetter] + ld c, a + ld b, NUM_UNOWN + ld hl, UnownDex +.loop + ld a, [hli] + and a + jr z, .done + cp c + ret z + dec b + jr nz, .loop + ret + +.done + dec hl + ld [hl], c + ret +; fba2e + +PrintUnownWord: ; fba2e (3e:7a2e) + hlcoord 4, 15 + ld bc, 12 + ld a, " " + call ByteFill + ld a, [wDexCurrentUnownIndex] + ld e, a + ld d, 0 + ld hl, UnownDex + add hl, de + ld a, [hl] + ld e, a + ld d, 0 + ld hl, UnownWords + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + hlcoord 4, 15 +.loop + ld a, [de] + cp -1 + ret z + inc de + ld [hli], a + jr .loop +; fba5a (3e:7a5a) + +INCLUDE "data/unown_words.asm" diff --git a/engine/unowndex.asm b/engine/unowndex.asm deleted file mode 100755 index 6d14f8b3c..000000000 --- a/engine/unowndex.asm +++ /dev/null @@ -1,51 +0,0 @@ -UpdateUnownDex: ; fba18 - ld a, [UnownLetter] - ld c, a - ld b, NUM_UNOWN - ld hl, UnownDex -.loop - ld a, [hli] - and a - jr z, .done - cp c - ret z - dec b - jr nz, .loop - ret - -.done - dec hl - ld [hl], c - ret -; fba2e - -PrintUnownWord: ; fba2e (3e:7a2e) - hlcoord 4, 15 - ld bc, 12 - ld a, " " - call ByteFill - ld a, [wDexCurrentUnownIndex] - ld e, a - ld d, 0 - ld hl, UnownDex - add hl, de - ld a, [hl] - ld e, a - ld d, 0 - ld hl, UnownWords - add hl, de - add hl, de - ld a, [hli] - ld e, a - ld d, [hl] - hlcoord 4, 15 -.loop - ld a, [de] - cp -1 - ret z - inc de - ld [hli], a - jr .loop -; fba5a (3e:7a5a) - -INCLUDE "data/unown_words.asm" -- cgit v1.2.3 From 2cf5cc1dc7f0dcc4651cdacaefb28d1b607f444c Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 17:50:45 -0500 Subject: Move more unknown graphics into real subfolders --- engine/link.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engine') diff --git a/engine/link.asm b/engine/link.asm index 5be841394..7f71f4880 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -2577,7 +2577,7 @@ Special_CableClubCheckWhichChris: ; 29f47 ret ; 29f54 -GFX_29f54: ; 29f54 +UnusedGen1LinkCommsBorderGFX: ; 29f54 ; unreferenced -INCBIN "gfx/unknown/unused_border.2bpp" +INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp" ; 29fe4 -- cgit v1.2.3 From 1038ebca5e2638ecbce1052c1dad7474372a7fd5 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 20:10:54 -0500 Subject: Move more contiguous related code blocks from main.asm to engine/ and events/ --- engine/battle_start.asm | 864 --------------------------------------- engine/battle_transition.asm | 873 ++++++++++++++++++++++++++++++++++++++++ engine/caught_data.asm | 247 ++++++++++++ engine/check_nick_errors.asm | 74 ++++ engine/check_time.asm | 19 + engine/collision_stdscripts.asm | 29 ++ engine/consume_held_item.asm | 80 ++++ engine/crystal_colors.asm | 10 + engine/european_mail.asm | 129 ++++++ engine/experience.asm | 162 ++++++++ engine/init_map.asm | 103 +++++ engine/map_objects.asm | 2 - engine/map_objects_2.asm | 70 ++++ engine/map_palettes.asm | 86 ++++ engine/menu_2.asm | 263 ++++++++++++ engine/mon_stats.asm | 486 ++++++++++++++++++++++ engine/player_gfx.asm | 263 ++++++++++++ engine/pokedex_3.asm | 162 ++++++++ engine/pokerus.asm | 160 ++++++++ engine/pokerus_tick.asm | 26 ++ engine/square_root.asm | 30 ++ engine/start_battle.asm | 197 +++++++++ engine/timeofdaypals.asm | 4 + engine/trainer_scripts.asm | 31 ++ engine/unused_correct_party.asm | 229 +++++++++++ 25 files changed, 3733 insertions(+), 866 deletions(-) delete mode 100644 engine/battle_start.asm create mode 100644 engine/battle_transition.asm create mode 100644 engine/caught_data.asm create mode 100644 engine/check_nick_errors.asm create mode 100644 engine/check_time.asm create mode 100644 engine/collision_stdscripts.asm create mode 100644 engine/consume_held_item.asm create mode 100644 engine/european_mail.asm create mode 100644 engine/experience.asm create mode 100644 engine/init_map.asm create mode 100644 engine/map_objects_2.asm create mode 100644 engine/map_palettes.asm create mode 100644 engine/menu_2.asm create mode 100644 engine/mon_stats.asm create mode 100644 engine/player_gfx.asm create mode 100644 engine/pokedex_3.asm create mode 100644 engine/pokerus.asm create mode 100644 engine/pokerus_tick.asm create mode 100644 engine/square_root.asm create mode 100644 engine/start_battle.asm create mode 100644 engine/trainer_scripts.asm create mode 100644 engine/unused_correct_party.asm (limited to 'engine') diff --git a/engine/battle_start.asm b/engine/battle_start.asm deleted file mode 100644 index 9546980c2..000000000 --- a/engine/battle_start.asm +++ /dev/null @@ -1,864 +0,0 @@ -Predef_StartBattle: ; 8c20f - call .InitGFX - ld a, [rBGP] - ld [wBGP], a - ld a, [rOBP0] - ld [wOBP0], a - ld a, [rOBP1] - ld [wOBP1], a - call DelayFrame - ld hl, hVBlank - ld a, [hl] - push af - ld [hl], $1 - -.loop - ld a, [wJumptableIndex] - bit 7, a - jr nz, .done - call FlashyTransitionToBattle - call DelayFrame - jr .loop - -.done - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - - ld hl, UnknBGPals - ld bc, 8 palettes - xor a - call ByteFill - - pop af - ld [rSVBK], a - - ld a, %11111111 - ld [wBGP], a - call DmgToCgbBGPals - call DelayFrame - xor a - ld [hLCDCPointer], a - ld [hLYOverrideStart], a - ld [hLYOverrideEnd], a - ld [hSCY], a - - ld a, $1 - ld [rSVBK], a - pop af - ld [hVBlank], a - call DelayFrame - ret -; 8c26d - -.InitGFX: ; 8c26d - ld a, [wLinkMode] - cp LINK_MOBILE - jr z, .mobile - callba ReanchorBGMap_NoOAMUpdate - call UpdateSprites - call DelayFrame - call .NonMobile_LoadPokeballTiles - call BattleStart_LoadEDTile - jr .resume - -.mobile - call LoadTrainerBattlePokeballTiles - -.resume - ld a, SCREEN_HEIGHT_PX - ld [hWY], a - call DelayFrame - xor a - ld [hBGMapMode], a - ld hl, wJumptableIndex - xor a - ld [hli], a - ld [hli], a - ld [hl], a - call WipeLYOverrides - ret -; 8c2a0 - -.NonMobile_LoadPokeballTiles: ; 8c2a0 - call LoadTrainerBattlePokeballTiles - hlbgcoord 0, 0 - call ConvertTrainerBattlePokeballTilesTo2bpp - ret -; 8c2aa - -LoadTrainerBattlePokeballTiles: -; Load the tiles used in the Pokeball Graphic that fills the screen -; at the start of every Trainer battle. - ld de, TrainerBattlePokeballTiles - ld hl, VTiles1 tile $7e - ld b, BANK(TrainerBattlePokeballTiles) - ld c, 2 - call Request2bpp - - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - - ld de, TrainerBattlePokeballTiles - ld hl, VTiles4 tile $7e - ld b, BANK(TrainerBattlePokeballTiles) - ld c, 2 - call Request2bpp - - pop af - ld [rVBK], a - ret -; 8c2cf - -ConvertTrainerBattlePokeballTilesTo2bpp: ; 8c2cf - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - push hl - ld hl, wDecompressScratch - ld bc, $28 tiles - -.loop - ld [hl], -1 - inc hl - dec bc - ld a, c - or b - jr nz, .loop - - pop hl - ld de, wDecompressScratch - ld b, BANK(ConvertTrainerBattlePokeballTilesTo2bpp) ; BANK(@) - ld c, $28 - call Request2bpp - pop af - ld [rSVBK], a - ret -; 8c2f4 - -TrainerBattlePokeballTiles: ; 8c2f4 -INCBIN "gfx/overworld/trainer_battle_pokeball_tiles.2bpp" - - -FlashyTransitionToBattle: ; 8c314 - jumptable .dw, wJumptableIndex -; 8c323 - -.dw ; 8c323 (23:4323) - dw StartTrainerBattle_DetermineWhichAnimation ; 00 - - ; Animation 1: cave - dw StartTrainerBattle_LoadPokeBallGraphics ; 01 - dw StartTrainerBattle_SetUpBGMap ; 02 - dw StartTrainerBattle_Flash ; 03 - dw StartTrainerBattle_Flash ; 04 - dw StartTrainerBattle_Flash ; 05 - dw StartTrainerBattle_NextScene ; 06 - dw StartTrainerBattle_SetUpForWavyOutro ; 07 - dw StartTrainerBattle_SineWave ; 08 - - ; Animation 2: cave, stronger - dw StartTrainerBattle_LoadPokeBallGraphics ; 09 - dw StartTrainerBattle_SetUpBGMap ; 0a - dw StartTrainerBattle_Flash ; 0b - dw StartTrainerBattle_Flash ; 0c - dw StartTrainerBattle_Flash ; 0d - dw StartTrainerBattle_NextScene ; 0e - ; There is no setup for this one - dw StartTrainerBattle_ZoomToBlack ; 0f - - ; Animation 3: no cave - dw StartTrainerBattle_LoadPokeBallGraphics ; 10 - dw StartTrainerBattle_SetUpBGMap ; 11 - dw StartTrainerBattle_Flash ; 12 - dw StartTrainerBattle_Flash ; 13 - dw StartTrainerBattle_Flash ; 14 - dw StartTrainerBattle_NextScene ; 15 - dw StartTrainerBattle_SetUpForSpinOutro ; 16 - dw StartTrainerBattle_SpinToBlack ; 17 - - ; Animation 4: no cave, stronger - dw StartTrainerBattle_LoadPokeBallGraphics ; 18 - dw StartTrainerBattle_SetUpBGMap ; 19 - dw StartTrainerBattle_Flash ; 1a - dw StartTrainerBattle_Flash ; 1b - dw StartTrainerBattle_Flash ; 1c - dw StartTrainerBattle_NextScene ; 1d - dw StartTrainerBattle_SetUpForRandomScatterOutro ; 1e - dw StartTrainerBattle_SpeckleToBlack ; 1f - - ; All animations jump to here. - dw StartTrainerBattle_Finish ; 20 - - -StartTrainerBattle_DetermineWhichAnimation: ; 8c365 (23:4365) -; The screen flashes a different number of times depending on the level of -; your lead Pokemon relative to the opponent's. -; BUG: BattleMonLevel and EnemyMonLevel are not set at this point, so whatever -; values happen to be there will determine the animation. - ld de, 0 - ld a, [BattleMonLevel] - add 3 - ld hl, EnemyMonLevel - cp [hl] - jr nc, .okay - set 0, e -.okay - ld a, [wPermission] - cp CAVE - jr z, .okay2 - cp PERM_5 - jr z, .okay2 - cp DUNGEON - jr z, .okay2 - set 1, e -.okay2 - ld hl, .StartingPoints - add hl, de - ld a, [hl] - ld [wJumptableIndex], a - ret -; 8c38f (23:438f) - -.StartingPoints: ; 8c38f - db 1, 9 - db 16, 24 -; 8c393 - -StartTrainerBattle_Finish: ; 8c393 (23:4393) - call ClearSprites - ld a, $80 - ld [wJumptableIndex], a - ret - -StartTrainerBattle_NextScene: ; 8c39c (23:439c) - ld hl, wJumptableIndex - inc [hl] - ret - -StartTrainerBattle_SetUpBGMap: ; 8c3a1 (23:43a1) - call StartTrainerBattle_NextScene - xor a - ld [wcf64], a - ld [hBGMapMode], a - ret - -StartTrainerBattle_Flash: ; 8c3ab (23:43ab) - call .DoFlashAnimation - ret nc - call StartTrainerBattle_NextScene - ret - -.DoFlashAnimation: ; 8c3b3 (23:43b3) - ld a, [wTimeOfDayPalset] - cp %11111111 ; dark cave - jr z, .done - ld hl, wcf64 - ld a, [hl] - inc [hl] - srl a - ld e, a - ld d, 0 - ld hl, .pals - add hl, de - ld a, [hl] - cp %00000001 - jr z, .done - ld [wBGP], a - call DmgToCgbBGPals - and a - ret - -.done - xor a - ld [wcf64], a - scf - ret -; 8c3db (23:43db) - -.pals ; 8c3db - db %11111001 ; 3321 - db %11111110 ; 3332 - db %11111111 ; 3333 - db %11111110 ; 3332 - db %11111001 ; 3321 - db %11100100 ; 3210 - db %10010000 ; 2100 - db %01000000 ; 1000 - db %00000000 ; 0000 - db %01000000 ; 1000 - db %10010000 ; 2100 - db %11100100 ; 3210 - db %00000001 ; 0001 -; 8c3e8 - -StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8) - callba Function5602 - ld a, $5 ; BANK(LYOverrides) - ld [rSVBK], a - - call StartTrainerBattle_NextScene - - ld a, rSCX - $ff00 - ld [hLCDCPointer], a - xor a - ld [hLYOverrideStart], a - ld a, $90 - ld [hLYOverrideEnd], a - xor a - ld [wcf64], a - ld [wcf65], a - ret - -StartTrainerBattle_SineWave: ; 8c408 (23:4408) - ld a, [wcf64] - cp $60 - jr nc, .end - call .DoSineWave - ret - -.end - ld a, $20 - ld [wJumptableIndex], a - ret - -.DoSineWave: ; 8c419 (23:4419) - ld hl, wcf65 - ld a, [hl] - inc [hl] - ld hl, wcf64 - ld d, [hl] - add [hl] - ld [hl], a - ld a, LYOverridesEnd - LYOverrides - ld bc, LYOverrides - ld e, $0 - -.loop - push af - push de - ld a, e - call StartTrainerBattle_DrawSineWave - ld [bc], a - inc bc - pop de - ld a, e - add $2 - ld e, a - pop af - dec a - jr nz, .loop - ret - -StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d) - callba Function5602 - ld a, $5 ; BANK(LYOverrides) - ld [rSVBK], a - call StartTrainerBattle_NextScene - xor a - ld [wcf64], a - ret - -StartTrainerBattle_SpinToBlack: ; 8c44f (23:444f) - xor a - ld [hBGMapMode], a - ld a, [wcf64] - ld e, a - ld d, 0 - ld hl, .spintable -rept 5 - add hl, de -endr - ld a, [hli] - cp -1 - jr z, .end - ld [wcf65], a - call .load - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - call DelayFrame - ld hl, wcf64 - inc [hl] - ret - -.end - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - call DelayFrame - call DelayFrame - xor a - ld [hBGMapMode], a - ld a, $20 - ld [wJumptableIndex], a - ret -; 8c490 (23:4490) - -; quadrants - const_def - const UPPER_LEFT - const UPPER_RIGHT - const LOWER_LEFT - const LOWER_RIGHT - -.spintable ; 8c490 -spintable_entry: MACRO - db \1 - dw .wedge\2 - dwcoord \3, \4 -ENDM - spintable_entry UPPER_LEFT, 1, 1, 6 - spintable_entry UPPER_LEFT, 2, 0, 3 - spintable_entry UPPER_LEFT, 3, 1, 0 - spintable_entry UPPER_LEFT, 4, 5, 0 - spintable_entry UPPER_LEFT, 5, 9, 0 - spintable_entry UPPER_RIGHT, 5, 10, 0 - spintable_entry UPPER_RIGHT, 4, 14, 0 - spintable_entry UPPER_RIGHT, 3, 18, 0 - spintable_entry UPPER_RIGHT, 2, 19, 3 - spintable_entry UPPER_RIGHT, 1, 18, 6 - spintable_entry LOWER_RIGHT, 1, 18, 11 - spintable_entry LOWER_RIGHT, 2, 19, 14 - spintable_entry LOWER_RIGHT, 3, 18, 17 - spintable_entry LOWER_RIGHT, 4, 14, 17 - spintable_entry LOWER_RIGHT, 5, 10, 17 - spintable_entry LOWER_LEFT, 5, 9, 17 - spintable_entry LOWER_LEFT, 4, 5, 17 - spintable_entry LOWER_LEFT, 3, 1, 17 - spintable_entry LOWER_LEFT, 2, 0, 14 - spintable_entry LOWER_LEFT, 1, 1, 11 - db -1 -; 8c4f5 - -.load ; 8c4f5 (23:44f5) - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld h, [hl] - ld l, a -.loop - push hl - ld a, [de] - ld c, a - inc de -.loop1 - ld [hl], $ff - ld a, [wcf65] - bit 0, a - jr z, .leftside - inc hl - jr .okay1 -.leftside - dec hl -.okay1 - dec c - jr nz, .loop1 - pop hl - ld a, [wcf65] - bit 1, a - ld bc, SCREEN_WIDTH - jr z, .upper - ld bc, -SCREEN_WIDTH -.upper - add hl, bc - ld a, [de] - inc de - cp -1 - ret z - and a - jr z, .loop - ld c, a -.loop2 - ld a, [wcf65] - bit 0, a - jr z, .leftside2 - dec hl - jr .okay2 -.leftside2 - inc hl -.okay2 - dec c - jr nz, .loop2 - jr .loop -; 8c538 (23:4538) - -.wedge1 db 2, 3, 5, 4, 9, -1 -.wedge2 db 1, 1, 2, 2, 4, 2, 4, 2, 3, -1 -.wedge3 db 2, 1, 3, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 1, 1, 1, 1, -1 -.wedge4 db 4, 1, 4, 0, 3, 1, 3, 0, 2, 1, 2, 0, 1, -1 -.wedge5 db 4, 0, 3, 0, 3, 0, 2, 0, 2, 0, 1, 0, 1, 0, 1, -1 -; 8c578 - -StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578) - callba Function5602 - ld a, $5 ; BANK(LYOverrides) - ld [rSVBK], a - call StartTrainerBattle_NextScene - ld a, $10 - ld [wcf64], a - ld a, $1 - ld [hBGMapMode], a - ret - -StartTrainerBattle_SpeckleToBlack: ; 8c58f (23:458f) - ld hl, wcf64 - ld a, [hl] - and a - jr z, .done - dec [hl] - ld c, $c -.loop - push bc - call .BlackOutRandomTile - pop bc - dec c - jr nz, .loop - ret - -.done - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - call DelayFrame - call DelayFrame - xor a - ld [hBGMapMode], a - ld a, $20 - ld [wJumptableIndex], a - ret - -.BlackOutRandomTile: ; 8c5b8 (23:45b8) -.y_loop - call Random - cp SCREEN_HEIGHT - jr nc, .y_loop - ld b, a - -.x_loop - call Random - cp SCREEN_WIDTH - jr nc, .x_loop - ld c, a - - hlcoord 0, -1 - ld de, SCREEN_WIDTH - inc b - -.row_loop - add hl, de - dec b - jr nz, .row_loop - add hl, bc - -; If the tile has already been blacked out, -; sample a new tile - ld a, [hl] - cp $ff - jr z, .y_loop - ld [hl], $ff - ret - -StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) - ld a, [OtherTrainerClass] - and a - jp z, .nextscene ; don't need to be here if wild - - xor a - ld [hBGMapMode], a - hlcoord 0, 0, AttrMap - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - inc b - inc c - jr .enter_loop_midway - -.loop -; set all pals to 7 - ld a, [hl] - or %00000111 - ld [hli], a -.enter_loop_midway - dec c - jr nz, .loop - dec b - jr nz, .loop - - call .loadpokeballgfx ; ld a, [OtherTrainerClass] \ ld de, PokeBallTransition \ ret - hlcoord 2, 1 - - ld b, SCREEN_WIDTH - 4 -.loop2 - push hl - ld c, 2 -.loop3 - push hl - ld a, [de] - inc de -.loop4 -; Loading is done bit by bit - and a - jr z, .done - sla a - jr nc, .no_load - ld [hl], $fe -.no_load - inc hl - jr .loop4 - -.done - pop hl - push bc - ld bc, (SCREEN_WIDTH - 4) / 2 - add hl, bc - pop bc - dec c - jr nz, .loop3 - - pop hl - push bc - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .loop2 - - ld a, [hCGB] - and a - jr nz, .cgb - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - call DelayFrame - jr .nextscene - -.cgb - ld hl, .daypals - ld a, [TimeOfDayPal] - and (1 << 2) - 1 - cp 3 - jr nz, .daytime - ld hl, .nightpals -.daytime - ld a, [rSVBK] - push af - ld a, $5 ; WRAM5 = palettes - ld [rSVBK], a - call .copypals - push hl - ld de, UnknBGPals palette PAL_BG_TEXT - ld bc, 1 palettes - call CopyBytes - pop hl - ld de, BGPals palette PAL_BG_TEXT - ld bc, 1 palettes - call CopyBytes - pop af - ld [rSVBK], a - ld a, $1 - ld [hCGBPalUpdate], a - call DelayFrame - call BattleStart_LoadEDTile - -.nextscene ; 8c673 (23:4673) - call StartTrainerBattle_NextScene - ret - -.copypals ; 8c677 (23:4677) - ld de, UnknBGPals palette PAL_BG_TEXT - call .copy - ld de, BGPals palette PAL_BG_TEXT - call .copy - ld de, UnknOBPals palette PAL_OW_TREE - call .copy - ld de, OBPals palette PAL_OW_TREE - call .copy - ld de, UnknOBPals palette PAL_OW_ROCK - call .copy - ld de, OBPals palette PAL_OW_ROCK - -.copy ; 8c698 (23:4698) - push hl - ld bc, 1 palettes - call CopyBytes - pop hl - ret -; 8c6a1 (23:46a1) - -.daypals ; 8c6a1 - RGB 31, 18, 29 - RGB 31, 11, 15 - RGB 31, 05, 05 - RGB 07, 07, 07 -; 8c6a9 - -.nightpals ; 8c6a9 - RGB 31, 18, 29 - RGB 31, 05, 05 - RGB 31, 05, 05 - RGB 31, 05, 05 - -.loadpokeballgfx - ld a, [OtherTrainerClass] - ld de, PokeBallTransition - ret - -PokeBallTransition: - db %00000011, %11000000 - db %00001111, %11110000 - db %00111100, %00111100 - db %00110000, %00001100 - db %01100000, %00000110 - db %01100011, %11000110 - db %11000110, %01100011 - db %11111100, %00111111 - db %11111100, %00111111 - db %11000110, %01100011 - db %01100011, %11000110 - db %01100000, %00000110 - db %00110000, %00001100 - db %00111100, %00111100 - db %00001111, %11110000 - db %00000011, %11000000 - -WipeLYOverrides: ; 8c6d8 - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - - ld hl, LYOverrides - call .wipe - ld hl, LYOverridesBackup - call .wipe - - pop af - ld [rSVBK], a - ret -; 8c6ef - -.wipe ; 8c6ef - xor a - ld c, SCREEN_HEIGHT_PX -.loop - ld [hli], a - dec c - jr nz, .loop - ret -; 8c6f7 - - -StartTrainerBattle_DrawSineWave: ; 8c6f7 (23:46f7) - and (1 << 6) - 1 - cp 1 << 5 - jr nc, .okay - call .DoSineWave - ld a, h - ret - -.okay - and (1 << 5) - 1 - call .DoSineWave - ld a, h - xor -1 ; cpl - inc a - ret - -.DoSineWave: ; 8c70c (23:470c) - 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 -.loop - srl a - jr nc, .skip - add hl, de -.skip - sla e - rl d - and a - jr nz, .loop - ret -; 8c728 (23:4728) - -.sinewave ; 8c728 - sine_wave $100 -; 8c768 - -StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768) - callba Function5602 - ld de, .boxes - -.loop - ld a, [de] - cp -1 - jr z, .done - inc de - ld c, a - ld a, [de] - inc de - ld b, a - ld a, [de] - inc de - ld l, a - ld a, [de] - inc de - ld h, a - xor a - ld [hBGMapMode], a - call .Copy - call WaitBGMap - jr .loop - -.done - ld a, $20 - ld [wJumptableIndex], a - ret -; 8c792 (23:4792) - -.boxes ; 8c792 -zoombox: macro -; width, height, start y, start x - db \1, \2 - dwcoord \3, \4 -endm - zoombox 4, 2, 8, 8 - zoombox 6, 4, 7, 7 - zoombox 8, 6, 6, 6 - zoombox 10, 8, 5, 5 - zoombox 12, 10, 4, 4 - zoombox 14, 12, 3, 3 - zoombox 16, 14, 2, 2 - zoombox 18, 16, 1, 1 - zoombox 20, 18, 0, 0 - db -1 -; 8c7b7 - -.Copy: ; 8c7b7 (23:47b7) - ld a, $ff -.row - push bc - push hl -.col - ld [hli], a - dec c - jr nz, .col - pop hl - ld bc, SCREEN_WIDTH - add hl, bc - pop bc - dec b - jr nz, .row - ret -; 8c7c9 (23:47c9) diff --git a/engine/battle_transition.asm b/engine/battle_transition.asm new file mode 100644 index 000000000..f8756649b --- /dev/null +++ b/engine/battle_transition.asm @@ -0,0 +1,873 @@ +Predef_StartBattle: ; 8c20f + call .InitGFX + ld a, [rBGP] + ld [wBGP], a + ld a, [rOBP0] + ld [wOBP0], a + ld a, [rOBP1] + ld [wOBP1], a + call DelayFrame + ld hl, hVBlank + ld a, [hl] + push af + ld [hl], $1 + +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done + call FlashyTransitionToBattle + call DelayFrame + jr .loop + +.done + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + ld hl, UnknBGPals + ld bc, 8 palettes + xor a + call ByteFill + + pop af + ld [rSVBK], a + + ld a, %11111111 + ld [wBGP], a + call DmgToCgbBGPals + call DelayFrame + xor a + ld [hLCDCPointer], a + ld [hLYOverrideStart], a + ld [hLYOverrideEnd], a + ld [hSCY], a + + ld a, $1 + ld [rSVBK], a + pop af + ld [hVBlank], a + call DelayFrame + ret +; 8c26d + +.InitGFX: ; 8c26d + ld a, [wLinkMode] + cp LINK_MOBILE + jr z, .mobile + callba ReanchorBGMap_NoOAMUpdate + call UpdateSprites + call DelayFrame + call .NonMobile_LoadPokeballTiles + call BattleStart_LoadEDTile + jr .resume + +.mobile + call LoadTrainerBattlePokeballTiles + +.resume + ld a, SCREEN_HEIGHT_PX + ld [hWY], a + call DelayFrame + xor a + ld [hBGMapMode], a + ld hl, wJumptableIndex + xor a + ld [hli], a + ld [hli], a + ld [hl], a + call WipeLYOverrides + ret +; 8c2a0 + +.NonMobile_LoadPokeballTiles: ; 8c2a0 + call LoadTrainerBattlePokeballTiles + hlbgcoord 0, 0 + call ConvertTrainerBattlePokeballTilesTo2bpp + ret +; 8c2aa + +LoadTrainerBattlePokeballTiles: +; Load the tiles used in the Pokeball Graphic that fills the screen +; at the start of every Trainer battle. + ld de, TrainerBattlePokeballTiles + ld hl, VTiles1 tile $7e + ld b, BANK(TrainerBattlePokeballTiles) + ld c, 2 + call Request2bpp + + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + + ld de, TrainerBattlePokeballTiles + ld hl, VTiles4 tile $7e + ld b, BANK(TrainerBattlePokeballTiles) + ld c, 2 + call Request2bpp + + pop af + ld [rVBK], a + ret +; 8c2cf + +ConvertTrainerBattlePokeballTilesTo2bpp: ; 8c2cf + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + push hl + ld hl, wDecompressScratch + ld bc, $28 tiles + +.loop + ld [hl], -1 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + + pop hl + ld de, wDecompressScratch + ld b, BANK(ConvertTrainerBattlePokeballTilesTo2bpp) ; BANK(@) + ld c, $28 + call Request2bpp + pop af + ld [rSVBK], a + ret +; 8c2f4 + +TrainerBattlePokeballTiles: ; 8c2f4 +INCBIN "gfx/overworld/trainer_battle_pokeball_tiles.2bpp" + + +FlashyTransitionToBattle: ; 8c314 + jumptable .dw, wJumptableIndex +; 8c323 + +.dw ; 8c323 (23:4323) + dw StartTrainerBattle_DetermineWhichAnimation ; 00 + + ; Animation 1: cave + dw StartTrainerBattle_LoadPokeBallGraphics ; 01 + dw StartTrainerBattle_SetUpBGMap ; 02 + dw StartTrainerBattle_Flash ; 03 + dw StartTrainerBattle_Flash ; 04 + dw StartTrainerBattle_Flash ; 05 + dw StartTrainerBattle_NextScene ; 06 + dw StartTrainerBattle_SetUpForWavyOutro ; 07 + dw StartTrainerBattle_SineWave ; 08 + + ; Animation 2: cave, stronger + dw StartTrainerBattle_LoadPokeBallGraphics ; 09 + dw StartTrainerBattle_SetUpBGMap ; 0a + dw StartTrainerBattle_Flash ; 0b + dw StartTrainerBattle_Flash ; 0c + dw StartTrainerBattle_Flash ; 0d + dw StartTrainerBattle_NextScene ; 0e + ; There is no setup for this one + dw StartTrainerBattle_ZoomToBlack ; 0f + + ; Animation 3: no cave + dw StartTrainerBattle_LoadPokeBallGraphics ; 10 + dw StartTrainerBattle_SetUpBGMap ; 11 + dw StartTrainerBattle_Flash ; 12 + dw StartTrainerBattle_Flash ; 13 + dw StartTrainerBattle_Flash ; 14 + dw StartTrainerBattle_NextScene ; 15 + dw StartTrainerBattle_SetUpForSpinOutro ; 16 + dw StartTrainerBattle_SpinToBlack ; 17 + + ; Animation 4: no cave, stronger + dw StartTrainerBattle_LoadPokeBallGraphics ; 18 + dw StartTrainerBattle_SetUpBGMap ; 19 + dw StartTrainerBattle_Flash ; 1a + dw StartTrainerBattle_Flash ; 1b + dw StartTrainerBattle_Flash ; 1c + dw StartTrainerBattle_NextScene ; 1d + dw StartTrainerBattle_SetUpForRandomScatterOutro ; 1e + dw StartTrainerBattle_SpeckleToBlack ; 1f + + ; All animations jump to here. + dw StartTrainerBattle_Finish ; 20 + + +StartTrainerBattle_DetermineWhichAnimation: ; 8c365 (23:4365) +; The screen flashes a different number of times depending on the level of +; your lead Pokemon relative to the opponent's. +; BUG: BattleMonLevel and EnemyMonLevel are not set at this point, so whatever +; values happen to be there will determine the animation. + ld de, 0 + ld a, [BattleMonLevel] + add 3 + ld hl, EnemyMonLevel + cp [hl] + jr nc, .okay + set 0, e +.okay + ld a, [wPermission] + cp CAVE + jr z, .okay2 + cp PERM_5 + jr z, .okay2 + cp DUNGEON + jr z, .okay2 + set 1, e +.okay2 + ld hl, .StartingPoints + add hl, de + ld a, [hl] + ld [wJumptableIndex], a + ret +; 8c38f (23:438f) + +.StartingPoints: ; 8c38f + db 1, 9 + db 16, 24 +; 8c393 + +StartTrainerBattle_Finish: ; 8c393 (23:4393) + call ClearSprites + ld a, $80 + ld [wJumptableIndex], a + ret + +StartTrainerBattle_NextScene: ; 8c39c (23:439c) + ld hl, wJumptableIndex + inc [hl] + ret + +StartTrainerBattle_SetUpBGMap: ; 8c3a1 (23:43a1) + call StartTrainerBattle_NextScene + xor a + ld [wcf64], a + ld [hBGMapMode], a + ret + +StartTrainerBattle_Flash: ; 8c3ab (23:43ab) + call .DoFlashAnimation + ret nc + call StartTrainerBattle_NextScene + ret + +.DoFlashAnimation: ; 8c3b3 (23:43b3) + ld a, [wTimeOfDayPalset] + cp %11111111 ; dark cave + jr z, .done + ld hl, wcf64 + ld a, [hl] + inc [hl] + srl a + ld e, a + ld d, 0 + ld hl, .pals + add hl, de + ld a, [hl] + cp %00000001 + jr z, .done + ld [wBGP], a + call DmgToCgbBGPals + and a + ret + +.done + xor a + ld [wcf64], a + scf + ret +; 8c3db (23:43db) + +.pals ; 8c3db + db %11111001 ; 3321 + db %11111110 ; 3332 + db %11111111 ; 3333 + db %11111110 ; 3332 + db %11111001 ; 3321 + db %11100100 ; 3210 + db %10010000 ; 2100 + db %01000000 ; 1000 + db %00000000 ; 0000 + db %01000000 ; 1000 + db %10010000 ; 2100 + db %11100100 ; 3210 + db %00000001 ; 0001 +; 8c3e8 + +StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8) + callba Function5602 + ld a, $5 ; BANK(LYOverrides) + ld [rSVBK], a + + call StartTrainerBattle_NextScene + + ld a, rSCX - $ff00 + ld [hLCDCPointer], a + xor a + ld [hLYOverrideStart], a + ld a, $90 + ld [hLYOverrideEnd], a + xor a + ld [wcf64], a + ld [wcf65], a + ret + +StartTrainerBattle_SineWave: ; 8c408 (23:4408) + ld a, [wcf64] + cp $60 + jr nc, .end + call .DoSineWave + ret + +.end + ld a, $20 + ld [wJumptableIndex], a + ret + +.DoSineWave: ; 8c419 (23:4419) + ld hl, wcf65 + ld a, [hl] + inc [hl] + ld hl, wcf64 + ld d, [hl] + add [hl] + ld [hl], a + ld a, LYOverridesEnd - LYOverrides + ld bc, LYOverrides + ld e, $0 + +.loop + push af + push de + ld a, e + call StartTrainerBattle_DrawSineWave + ld [bc], a + inc bc + pop de + ld a, e + add $2 + ld e, a + pop af + dec a + jr nz, .loop + ret + +StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d) + callba Function5602 + ld a, $5 ; BANK(LYOverrides) + ld [rSVBK], a + call StartTrainerBattle_NextScene + xor a + ld [wcf64], a + ret + +StartTrainerBattle_SpinToBlack: ; 8c44f (23:444f) + xor a + ld [hBGMapMode], a + ld a, [wcf64] + ld e, a + ld d, 0 + ld hl, .spintable +rept 5 + add hl, de +endr + ld a, [hli] + cp -1 + jr z, .end + ld [wcf65], a + call .load + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ld hl, wcf64 + inc [hl] + ret + +.end + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ld [hBGMapMode], a + ld a, $20 + ld [wJumptableIndex], a + ret +; 8c490 (23:4490) + +; quadrants + const_def + const UPPER_LEFT + const UPPER_RIGHT + const LOWER_LEFT + const LOWER_RIGHT + +.spintable ; 8c490 +spintable_entry: MACRO + db \1 + dw .wedge\2 + dwcoord \3, \4 +ENDM + spintable_entry UPPER_LEFT, 1, 1, 6 + spintable_entry UPPER_LEFT, 2, 0, 3 + spintable_entry UPPER_LEFT, 3, 1, 0 + spintable_entry UPPER_LEFT, 4, 5, 0 + spintable_entry UPPER_LEFT, 5, 9, 0 + spintable_entry UPPER_RIGHT, 5, 10, 0 + spintable_entry UPPER_RIGHT, 4, 14, 0 + spintable_entry UPPER_RIGHT, 3, 18, 0 + spintable_entry UPPER_RIGHT, 2, 19, 3 + spintable_entry UPPER_RIGHT, 1, 18, 6 + spintable_entry LOWER_RIGHT, 1, 18, 11 + spintable_entry LOWER_RIGHT, 2, 19, 14 + spintable_entry LOWER_RIGHT, 3, 18, 17 + spintable_entry LOWER_RIGHT, 4, 14, 17 + spintable_entry LOWER_RIGHT, 5, 10, 17 + spintable_entry LOWER_LEFT, 5, 9, 17 + spintable_entry LOWER_LEFT, 4, 5, 17 + spintable_entry LOWER_LEFT, 3, 1, 17 + spintable_entry LOWER_LEFT, 2, 0, 14 + spintable_entry LOWER_LEFT, 1, 1, 11 + db -1 +; 8c4f5 + +.load ; 8c4f5 (23:44f5) + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a +.loop + push hl + ld a, [de] + ld c, a + inc de +.loop1 + ld [hl], $ff + ld a, [wcf65] + bit 0, a + jr z, .leftside + inc hl + jr .okay1 +.leftside + dec hl +.okay1 + dec c + jr nz, .loop1 + pop hl + ld a, [wcf65] + bit 1, a + ld bc, SCREEN_WIDTH + jr z, .upper + ld bc, -SCREEN_WIDTH +.upper + add hl, bc + ld a, [de] + inc de + cp -1 + ret z + and a + jr z, .loop + ld c, a +.loop2 + ld a, [wcf65] + bit 0, a + jr z, .leftside2 + dec hl + jr .okay2 +.leftside2 + inc hl +.okay2 + dec c + jr nz, .loop2 + jr .loop +; 8c538 (23:4538) + +.wedge1 db 2, 3, 5, 4, 9, -1 +.wedge2 db 1, 1, 2, 2, 4, 2, 4, 2, 3, -1 +.wedge3 db 2, 1, 3, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 1, 1, 1, 1, -1 +.wedge4 db 4, 1, 4, 0, 3, 1, 3, 0, 2, 1, 2, 0, 1, -1 +.wedge5 db 4, 0, 3, 0, 3, 0, 2, 0, 2, 0, 1, 0, 1, 0, 1, -1 +; 8c578 + +StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578) + callba Function5602 + ld a, $5 ; BANK(LYOverrides) + ld [rSVBK], a + call StartTrainerBattle_NextScene + ld a, $10 + ld [wcf64], a + ld a, $1 + ld [hBGMapMode], a + ret + +StartTrainerBattle_SpeckleToBlack: ; 8c58f (23:458f) + ld hl, wcf64 + ld a, [hl] + and a + jr z, .done + dec [hl] + ld c, $c +.loop + push bc + call .BlackOutRandomTile + pop bc + dec c + jr nz, .loop + ret + +.done + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ld [hBGMapMode], a + ld a, $20 + ld [wJumptableIndex], a + ret + +.BlackOutRandomTile: ; 8c5b8 (23:45b8) +.y_loop + call Random + cp SCREEN_HEIGHT + jr nc, .y_loop + ld b, a + +.x_loop + call Random + cp SCREEN_WIDTH + jr nc, .x_loop + ld c, a + + hlcoord 0, -1 + ld de, SCREEN_WIDTH + inc b + +.row_loop + add hl, de + dec b + jr nz, .row_loop + add hl, bc + +; If the tile has already been blacked out, +; sample a new tile + ld a, [hl] + cp $ff + jr z, .y_loop + ld [hl], $ff + ret + +StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc) + ld a, [OtherTrainerClass] + and a + jp z, .nextscene ; don't need to be here if wild + + xor a + ld [hBGMapMode], a + hlcoord 0, 0, AttrMap + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + inc b + inc c + jr .enter_loop_midway + +.loop +; set all pals to 7 + ld a, [hl] + or %00000111 + ld [hli], a +.enter_loop_midway + dec c + jr nz, .loop + dec b + jr nz, .loop + + call .loadpokeballgfx ; ld a, [OtherTrainerClass] \ ld de, PokeBallTransition \ ret + hlcoord 2, 1 + + ld b, SCREEN_WIDTH - 4 +.loop2 + push hl + ld c, 2 +.loop3 + push hl + ld a, [de] + inc de +.loop4 +; Loading is done bit by bit + and a + jr z, .done + sla a + jr nc, .no_load + ld [hl], $fe +.no_load + inc hl + jr .loop4 + +.done + pop hl + push bc + ld bc, (SCREEN_WIDTH - 4) / 2 + add hl, bc + pop bc + dec c + jr nz, .loop3 + + pop hl + push bc + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .loop2 + + ld a, [hCGB] + and a + jr nz, .cgb + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + jr .nextscene + +.cgb + ld hl, .daypals + ld a, [TimeOfDayPal] + and (1 << 2) - 1 + cp 3 + jr nz, .daytime + ld hl, .nightpals +.daytime + ld a, [rSVBK] + push af + ld a, $5 ; WRAM5 = palettes + ld [rSVBK], a + call .copypals + push hl + ld de, UnknBGPals palette PAL_BG_TEXT + ld bc, 1 palettes + call CopyBytes + pop hl + ld de, BGPals palette PAL_BG_TEXT + ld bc, 1 palettes + call CopyBytes + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + call DelayFrame + call BattleStart_LoadEDTile + +.nextscene ; 8c673 (23:4673) + call StartTrainerBattle_NextScene + ret + +.copypals ; 8c677 (23:4677) + ld de, UnknBGPals palette PAL_BG_TEXT + call .copy + ld de, BGPals palette PAL_BG_TEXT + call .copy + ld de, UnknOBPals palette PAL_OW_TREE + call .copy + ld de, OBPals palette PAL_OW_TREE + call .copy + ld de, UnknOBPals palette PAL_OW_ROCK + call .copy + ld de, OBPals palette PAL_OW_ROCK + +.copy ; 8c698 (23:4698) + push hl + ld bc, 1 palettes + call CopyBytes + pop hl + ret +; 8c6a1 (23:46a1) + +.daypals ; 8c6a1 + RGB 31, 18, 29 + RGB 31, 11, 15 + RGB 31, 05, 05 + RGB 07, 07, 07 +; 8c6a9 + +.nightpals ; 8c6a9 + RGB 31, 18, 29 + RGB 31, 05, 05 + RGB 31, 05, 05 + RGB 31, 05, 05 + +.loadpokeballgfx + ld a, [OtherTrainerClass] + ld de, PokeBallTransition + ret + +PokeBallTransition: + db %00000011, %11000000 + db %00001111, %11110000 + db %00111100, %00111100 + db %00110000, %00001100 + db %01100000, %00000110 + db %01100011, %11000110 + db %11000110, %01100011 + db %11111100, %00111111 + db %11111100, %00111111 + db %11000110, %01100011 + db %01100011, %11000110 + db %01100000, %00000110 + db %00110000, %00001100 + db %00111100, %00111100 + db %00001111, %11110000 + db %00000011, %11000000 + +WipeLYOverrides: ; 8c6d8 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + ld hl, LYOverrides + call .wipe + ld hl, LYOverridesBackup + call .wipe + + pop af + ld [rSVBK], a + ret +; 8c6ef + +.wipe ; 8c6ef + xor a + ld c, SCREEN_HEIGHT_PX +.loop + ld [hli], a + dec c + jr nz, .loop + ret +; 8c6f7 + + +StartTrainerBattle_DrawSineWave: ; 8c6f7 (23:46f7) + and (1 << 6) - 1 + cp 1 << 5 + jr nc, .okay + call .DoSineWave + ld a, h + ret + +.okay + and (1 << 5) - 1 + call .DoSineWave + ld a, h + xor -1 ; cpl + inc a + ret + +.DoSineWave: ; 8c70c (23:470c) + 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 +.loop + srl a + jr nc, .skip + add hl, de +.skip + sla e + rl d + and a + jr nz, .loop + ret +; 8c728 (23:4728) + +.sinewave ; 8c728 + sine_wave $100 +; 8c768 + +StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768) + callba Function5602 + ld de, .boxes + +.loop + ld a, [de] + cp -1 + jr z, .done + inc de + ld c, a + ld a, [de] + inc de + ld b, a + ld a, [de] + inc de + ld l, a + ld a, [de] + inc de + ld h, a + xor a + ld [hBGMapMode], a + call .Copy + call WaitBGMap + jr .loop + +.done + ld a, $20 + ld [wJumptableIndex], a + ret +; 8c792 (23:4792) + +.boxes ; 8c792 +zoombox: macro +; width, height, start y, start x + db \1, \2 + dwcoord \3, \4 +endm + zoombox 4, 2, 8, 8 + zoombox 6, 4, 7, 7 + zoombox 8, 6, 6, 6 + zoombox 10, 8, 5, 5 + zoombox 12, 10, 4, 4 + zoombox 14, 12, 3, 3 + zoombox 16, 14, 2, 2 + zoombox 18, 16, 1, 1 + zoombox 20, 18, 0, 0 + db -1 +; 8c7b7 + +.Copy: ; 8c7b7 (23:47b7) + ld a, $ff +.row + push bc + push hl +.col + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret +; 8c7c9 (23:47c9) + +Function8c7c9: +; XXX + ld a, $1 + ld [hBGMapMode], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ret diff --git a/engine/caught_data.asm b/engine/caught_data.asm new file mode 100644 index 000000000..c079009ae --- /dev/null +++ b/engine/caught_data.asm @@ -0,0 +1,247 @@ +CheckPartyFullAfterContest: ; 4d9e5 + ld a, [wContestMon] + and a + jp z, .DidntCatchAnything + ld [CurPartySpecies], a + ld [CurSpecies], a + call GetBaseData + ld hl, PartyCount + ld a, [hl] + cp 6 + jp nc, .TryAddToBox + inc a + ld [hl], a + ld c, a + ld b, $0 + add hl, bc + ld a, [wContestMon] + ld [hli], a + ld [CurSpecies], a + ld a, $ff + ld [hl], a + ld hl, PartyMon1Species + ld a, [PartyCount] + dec a + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, wContestMon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + ld a, [PartyCount] + dec a + ld hl, PartyMonOT + call SkipNames + ld d, h + ld e, l + ld hl, PlayerName + call CopyBytes + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + ld hl, StringBuffer1 + ld de, wMonOrItemNameBuffer + ld bc, PKMN_NAME_LENGTH + call CopyBytes + call GiveANickname_YesNo + jr c, .Party_SkipNickname + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + xor a + ld [MonType], a + ld de, wMonOrItemNameBuffer + callab InitNickname + +.Party_SkipNickname: + ld a, [PartyCount] + dec a + ld hl, PartyMonNicknames + call SkipNames + ld d, h + ld e, l + ld hl, wMonOrItemNameBuffer + call CopyBytes + ld a, [PartyCount] + dec a + ld hl, PartyMon1Level + call GetPartyLocation + ld a, [hl] + ld [CurPartyLevel], a + call SetCaughtData + ld a, [PartyCount] + dec a + ld hl, PartyMon1CaughtLocation + call GetPartyLocation + ld a, [hl] + and $80 + ld b, $13 + or b + ld [hl], a + xor a + ld [wContestMon], a + and a + ld [ScriptVar], a + ret + +.TryAddToBox: ; 4daa3 + ld a, BANK(sBoxCount) + call GetSRAMBank + ld hl, sBoxCount + ld a, [hl] + cp MONS_PER_BOX + call CloseSRAM + jr nc, .BoxFull + xor a + ld [CurPartyMon], a + ld hl, wContestMon + ld de, wBufferMon + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + ld hl, PlayerName + ld de, wBufferMonOT + ld bc, NAME_LENGTH + call CopyBytes + callab InsertPokemonIntoBox + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + call GiveANickname_YesNo + ld hl, StringBuffer1 + jr c, .Box_SkipNickname + ld a, BOXMON + ld [MonType], a + ld de, wMonOrItemNameBuffer + callab InitNickname + ld hl, wMonOrItemNameBuffer + +.Box_SkipNickname: + ld a, BANK(sBoxMonNicknames) + call GetSRAMBank + ld de, sBoxMonNicknames + ld bc, PKMN_NAME_LENGTH + call CopyBytes + call CloseSRAM + +.BoxFull: + ld a, BANK(sBoxMon1Level) + call GetSRAMBank + ld a, [sBoxMon1Level] + ld [CurPartyLevel], a + call CloseSRAM + call SetBoxMonCaughtData + ld a, BANK(sBoxMon1CaughtLocation) + call GetSRAMBank + ld hl, sBoxMon1CaughtLocation + ld a, [hl] + and $80 + ld b, $13 + or b + ld [hl], a + call CloseSRAM + xor a + ld [wContestMon], a + ld a, $1 + ld [ScriptVar], a + ret + +.DidntCatchAnything: ; 4db35 + ld a, $2 + ld [ScriptVar], a + ret + +GiveANickname_YesNo: ; 4db3b + ld hl, TextJump_GiveANickname + call PrintText + jp YesNoBox + +TextJump_GiveANickname: ; 0x4db44 + ; Give a nickname to the @ you received? + text_jump UnknownText_0x1c12fc + db "@" + +SetCaughtData: ; 4db49 + ld a, [PartyCount] + dec a + ld hl, PartyMon1CaughtLevel + call GetPartyLocation +SetBoxmonOrEggmonCaughtData: ; 4db53 + ld a, [TimeOfDay] + inc a + rrca + rrca + ld b, a + ld a, [CurPartyLevel] + or b + ld [hli], a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + cp MAP_POKECENTER_2F + jr nz, .NotPokecenter2F + ld a, b + cp GROUP_POKECENTER_2F + jr nz, .NotPokecenter2F + + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + +.NotPokecenter2F: + call GetWorldMapLocation + ld b, a + ld a, [PlayerGender] + rrca + or b + ld [hl], a + ret + +SetBoxMonCaughtData: ; 4db83 + ld a, BANK(sBoxMon1CaughtLevel) + call GetSRAMBank + ld hl, sBoxMon1CaughtLevel + call SetBoxmonOrEggmonCaughtData + call CloseSRAM + ret + +SetGiftBoxMonCaughtData: ; 4db92 + push bc + ld a, BANK(sBoxMon1CaughtLevel) + call GetSRAMBank + ld hl, sBoxMon1CaughtLevel + pop bc + call SetGiftMonCaughtData + call CloseSRAM + ret + +SetGiftPartyMonCaughtData: ; 4dba3 + ld a, [PartyCount] + dec a + ld hl, PartyMon1CaughtLevel + push bc + call GetPartyLocation + pop bc +SetGiftMonCaughtData: ; 4dbaf + xor a + ld [hli], a + ld a, $7e + rrc b + or b + ld [hl], a + ret + +SetEggMonCaughtData: ; 4dbb8 (13:5bb8) + ld a, [CurPartyMon] + ld hl, PartyMon1CaughtLevel + call GetPartyLocation + ld a, [CurPartyLevel] + push af + ld a, $1 + ld [CurPartyLevel], a + call SetBoxmonOrEggmonCaughtData + pop af + ld [CurPartyLevel], a + ret diff --git a/engine/check_nick_errors.asm b/engine/check_nick_errors.asm new file mode 100644 index 000000000..1cedca420 --- /dev/null +++ b/engine/check_nick_errors.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/check_time.asm b/engine/check_time.asm new file mode 100644 index 000000000..615b51d29 --- /dev/null +++ b/engine/check_time.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/collision_stdscripts.asm b/engine/collision_stdscripts.asm new file mode 100644 index 000000000..17b1e49b2 --- /dev/null +++ b/engine/collision_stdscripts.asm @@ -0,0 +1,29 @@ +CheckFacingTileForStd:: ; 1365b +; Checks to see if the tile you're facing has a std script associated with it. If so, executes the script and returns carry. + ld a, c + ld de, 3 + ld hl, TileCollisionStdScripts + call IsInArray + jr nc, .notintable + + ld a, jumpstd_command + ld [wJumpStdScriptBuffer], a + inc hl + ld a, [hli] + ld [wJumpStdScriptBuffer + 1], a + ld a, [hli] + ld [wJumpStdScriptBuffer + 2], a + ld a, BANK(Script_JumpStdFromRAM) + ld hl, Script_JumpStdFromRAM + call CallScript + scf + ret + +.notintable + xor a + ret + +INCLUDE "data/collision_stdscripts.asm" + +Script_JumpStdFromRAM: ; 0x1369a + jump wJumpStdScriptBuffer diff --git a/engine/consume_held_item.asm b/engine/consume_held_item.asm new file mode 100644 index 000000000..52d7894cd --- /dev/null +++ b/engine/consume_held_item.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 + callba 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/crystal_colors.asm b/engine/crystal_colors.asm index 125fee8bc..25b831f01 100755 --- a/engine/crystal_colors.asm +++ b/engine/crystal_colors.asm @@ -612,3 +612,13 @@ InitMG_Mobile_LinkTradePalMap: ; 49856 call _InitMG_Mobile_LinkTradePalMap ret ; 4985a + +Unknown_4985a: ; unreferenced + db $ab, $03, $57, $24, $ac, $0e, $13, $32 + db $be, $30, $5b, $4c, $47, $60, $ed, $f2 + db $ab, $03, $55, $26, $aa, $0a, $13, $3a + db $be, $28, $33, $24, $6e, $71, $df, $b0 + db $a8, $00, $e5, $e0, $9a, $fc, $f4, $2c + db $fe, $4c, $a3, $5e, $c6, $3a, $ab, $4d + db $a8, $00, $b5, $b0, $de, $e8, $fc, $1c + db $ba, $66, $f7, $0e, $ba, $5e, $43, $bd diff --git a/engine/european_mail.asm b/engine/european_mail.asm new file mode 100644 index 000000000..8f037cc43 --- /dev/null +++ b/engine/european_mail.asm @@ -0,0 +1,129 @@ +IsMailEuropean: ; 1de5c8 +; return 1 if French +; return 2 if German +; return 3 if Italian +; return 4 if Spanish +; return 0 if none of the above + ld c, $0 + ld hl, sPartyMon1MailAuthorNationality - sPartyMon1Mail + add hl, de + ld a, [hli] + cp "E" + ret nz + ld a, [hli] + inc c + cp "F" + ret z + inc c + cp "G" + ret z + inc c + cp "I" + ret z + inc c + cp "S" + ret z + ld c, $0 + ret + +; The regular font. +StandardEnglishFont: ; 1de5e6 +INCBIN "gfx/font/english.1bpp" + +; An extended font. +FrenchGermanFont: ; 1de9e6 +INCBIN "gfx/font/french_german.1bpp" + +; An even more extended font. +SpanishItalianFont: ; 1dede6 +INCBIN "gfx/font/spanish_italian.1bpp" + +HandleFrenchGermanMail: ; 1df1e6 +; called if mail is french or german +; fix 's 't 'v + ld b, sPartyMon1MailAuthor - sPartyMon1Mail + ld h, d + ld l, e +.loop + ld a, [hl] + cp $dc ; 's in french/german font + jr nz, .check_intermediate_chars + ld a, "'s" + jr .replace + +.check_intermediate_chars + sub "'s" + jr c, .dont_replace + cp "'v" - "'s" + 1 + jr nc, .dont_replace + add $cd + +.replace + ld [hl], a + +.dont_replace + inc hl + dec b + jr nz, .loop + ret + +LireLeCourrierAnglais: +DeutenEnglischenPost: ; 1df203 +; Cette fonction convertit certains des caractères anglais pour +; leur équivalent dans le jeu de caractères français. +; Diese Funktion wandelt bestimmte englische Zeichen, um ihre +; Entsprechung in der Deutschen-Zeichensatz. + ld b, sPartyMon1MailAuthor - sPartyMon1Mail + ld h, d + ld l, e +.loop + ld a, [hl] + cp "'s" + jr nz, .check_intermediate_chars + ld a, $dc + jr .replace + +.check_intermediate_chars + sub $cd + jr c, .dont_replace + cp "'v" - "'s" + 1 + jr nc, .dont_replace + add "'s" + +.replace + ld [hl], a + +.dont_replace + inc hl + dec b + jr nz, .loop + ret + +HandleSpanishItalianMail: ; 1df220 +LeerCorreosIngleses: +LeggiPostaInglese: +; This function converts certain characters between +; the English and Spanish/Italian character sets. +; Esta función convierte ciertos caracteres entre +; el juego de caracteres Inglés y Español. +; Questa funzione converte alcuni caratteri tra +; l'inglese e il set di caratteri italiani. + ld b, sPartyMon1MailAuthor - sPartyMon1Mail + ld h, d + ld l, e +.loop + ld a, [hl] + and $f0 + cp $d0 + jr nz, .dont_replace + ld a, [hl] + add $8 + and $f + or $d0 + ld [hl], a + +.dont_replace + inc hl + dec b + jr nz, .loop + ret diff --git a/engine/experience.asm b/engine/experience.asm new file mode 100644 index 000000000..c33aaf02a --- /dev/null +++ b/engine/experience.asm @@ -0,0 +1,162 @@ +CalcLevel: ; 50e1b + ld a, [TempMonSpecies] + ld [CurSpecies], a + call GetBaseData + ld d, 1 +.next_level + inc d + ld a, d + cp (MAX_LEVEL + 1) % $100 + jr z, .got_level + call CalcExpAtLevel + push hl + ld hl, TempMonExp + 2 + ld a, [hProduct + 3] + ld c, a + ld a, [hld] + sub c + ld a, [hProduct + 2] + ld c, a + ld a, [hld] + sbc c + ld a, [hProduct + 1] + ld c, a + ld a, [hl] + sbc c + pop hl + jr nc, .next_level + +.got_level + dec d + ret + +CalcExpAtLevel: ; 50e47 +; (a/b)*n**3 + c*n**2 + d*n - e + ld a, [BaseGrowthRate] + add a + add a + ld c, a + ld b, 0 + ld hl, GrowthRates + add hl, bc +; Cube the level + call .LevelSquared + ld a, d + ld [hMultiplier], a + call Multiply + +; Multiply by a + ld a, [hl] + and $f0 + swap a + ld [hMultiplier], a + call Multiply +; Divide by b + ld a, [hli] + and $f + ld [hDivisor], a + ld b, 4 + call Divide +; Push the cubic term to the stack + ld a, [hQuotient + 0] + push af + ld a, [hQuotient + 1] + push af + ld a, [hQuotient + 2] + push af +; Square the level and multiply by the lower 7 bits of c + call .LevelSquared + ld a, [hl] + and $7f + ld [hMultiplier], a + call Multiply +; Push the absolute value of the quadratic term to the stack + ld a, [hProduct + 1] + push af + ld a, [hProduct + 2] + push af + ld a, [hProduct + 3] + push af + ld a, [hli] + push af +; Multiply the level by d + xor a + ld [hMultiplicand + 0], a + ld [hMultiplicand + 1], a + ld a, d + ld [hMultiplicand + 2], a + ld a, [hli] + ld [hMultiplier], a + call Multiply +; Subtract e + ld b, [hl] + ld a, [hProduct + 3] + sub b + ld [hMultiplicand + 2], a + ld b, $0 + ld a, [hProduct + 2] + sbc b + ld [hMultiplicand + 1], a + ld a, [hProduct + 1] + sbc b + ld [hMultiplicand], a +; If bit 7 of c is set, c is negative; otherwise, it's positive + pop af + and $80 + jr nz, .subtract +; Add c*n**2 to (d*n - e) + pop bc + ld a, [hProduct + 3] + add b + ld [hMultiplicand + 2], a + pop bc + ld a, [hProduct + 2] + adc b + ld [hMultiplicand + 1], a + pop bc + ld a, [hProduct + 1] + adc b + ld [hMultiplicand], a + jr .done_quadratic + +.subtract +; Subtract c*n**2 from (d*n - e) + pop bc + ld a, [hProduct + 3] + sub b + ld [hMultiplicand + 2], a + pop bc + ld a, [hProduct + 2] + sbc b + ld [hMultiplicand + 1], a + pop bc + ld a, [hProduct + 1] + sbc b + ld [hMultiplicand], a + +.done_quadratic +; Add (a/b)*n**3 to (d*n - e +/- c*n**2) + pop bc + ld a, [hProduct + 3] + add b + ld [hMultiplicand + 2], a + pop bc + ld a, [hProduct + 2] + adc b + ld [hMultiplicand + 1], a + pop bc + ld a, [hProduct + 1] + adc b + ld [hMultiplicand], a + ret + +.LevelSquared: ; 50eed + xor a + ld [hMultiplicand + 0], a + ld [hMultiplicand + 1], a + ld a, d + ld [hMultiplicand + 2], a + ld [hMultiplier], a + jp Multiply + +INCLUDE "data/growth_rates.asm" diff --git a/engine/init_map.asm b/engine/init_map.asm new file mode 100644 index 000000000..5dd6c7b8a --- /dev/null +++ b/engine/init_map.asm @@ -0,0 +1,103 @@ +ReanchorBGMap_NoOAMUpdate:: ; 6454 + call DelayFrame + ld a, [hOAMUpdate] + push af + + ld a, $1 + ld [hOAMUpdate], a + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + call .ReanchorBGMap + + pop af + ld [hBGMapMode], a + pop af + ld [hOAMUpdate], a + ld hl, VramState + set 6, [hl] + ret + +.ReanchorBGMap: + xor a + ld [hLCDCPointer], a + ld [hBGMapMode], a + ld a, $90 + ld [hWY], a + call OverworldTextModeSwitch + ld a, VBGMap1 / $100 + call .LoadBGMapAddrIntoHRAM + call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap + callba LoadOW_BGPal7 + callba ApplyPals + ld a, $1 + ld [hCGBPalUpdate], a + xor a + ld [hBGMapMode], a + ld [hWY], a + callba HDMATransfer_FillBGMap0WithBlack ; no need to farcall + ld a, VBGMap0 / $100 + call .LoadBGMapAddrIntoHRAM + xor a + ld [wBGMapAnchor], a + ld a, VBGMap0 / $100 + ld [wBGMapAnchor + 1], a + xor a + ld [hSCX], a + ld [hSCY], a + call ApplyBGMapAnchorToObjects + ret + +.LoadBGMapAddrIntoHRAM: ; 64b9 + ld [hBGMapAddress + 1], a + xor a + ld [hBGMapAddress], a + ret + +LoadFonts_NoOAMUpdate:: ; 64bf + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + + call .LoadGFX + + pop af + ld [hOAMUpdate], a + ret + +.LoadGFX: + call LoadFontsExtra + ld a, $90 + ld [hWY], a + call SafeUpdateSprites + call LoadStandardFont + ret + +HDMATransfer_FillBGMap0WithBlack: ; 64db + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + + ld a, "" ; $60 + ld hl, wDecompressScratch + ld bc, wScratchAttrMap - wDecompressScratch + call ByteFill + ld a, wDecompressScratch / $100 + ld [rHDMA1], a + ld a, wDecompressScratch % $100 + ld [rHDMA2], a + ld a, (VBGMap0 % $8000) / $100 + ld [rHDMA3], a + ld a, (VBGMap0 % $8000) % $100 + ld [rHDMA4], a + ld a, $3f + ld [hDMATransfer], a + call DelayFrame + + pop af + ld [rSVBK], a + ret diff --git a/engine/map_objects.asm b/engine/map_objects.asm index 162ea22df..4b8adb75f 100644 --- a/engine/map_objects.asm +++ b/engine/map_objects.asm @@ -1,7 +1,5 @@ - INCLUDE "data/facings.asm" - INCLUDE "data/map_objects.asm" diff --git a/engine/map_objects_2.asm b/engine/map_objects_2.asm new file mode 100644 index 000000000..3c9a9773c --- /dev/null +++ b/engine/map_objects_2.asm @@ -0,0 +1,70 @@ +LoadObjectMasks: ; 2454f + ld hl, wObjectMasks + xor a + ld bc, NUM_OBJECTS + call ByteFill + nop + ld bc, MapObjects + ld de, wObjectMasks + xor a +.loop + push af + push bc + push de + call GetObjectTimeMask + jr c, .next + call CheckObjectFlag +.next + pop de + ld [de], a + inc de + pop bc + ld hl, OBJECT_LENGTH + add hl, bc + ld b, h + ld c, l + pop af + inc a + cp NUM_OBJECTS + jr nz, .loop + ret + +CheckObjectFlag: ; 2457d (9:457d) + ld hl, MAPOBJECT_SPRITE + add hl, bc + ld a, [hl] + and a + jr z, .masked + ld hl, MAPOBJECT_EVENT_FLAG + add hl, bc + ld a, [hli] + ld e, a + ld a, [hl] + ld d, a + cp -1 + jr nz, .check + ld a, e + cp -1 + jr z, .unmasked + jr .masked +.check + ld b, CHECK_FLAG + call EventFlagAction + ld a, c + and a + jr nz, .masked +.unmasked + xor a + ret + +.masked + ld a, -1 + scf + ret + +GetObjectTimeMask: ; 245a7 (9:45a7) + call CheckObjectTime + ld a, -1 + ret c + xor a + ret diff --git a/engine/map_palettes.asm b/engine/map_palettes.asm new file mode 100644 index 000000000..ffeef7bf6 --- /dev/null +++ b/engine/map_palettes.asm @@ -0,0 +1,86 @@ +SwapTextboxPalettes:: ; 4c000 + hlcoord 0, 0 + decoord 0, 0, AttrMap + ld b, SCREEN_HEIGHT +.loop + push bc + ld c, SCREEN_WIDTH +.innerloop + ld a, [hl] + push hl + srl a + jr c, .UpperNybble + ld hl, TilesetPalettes + add [hl] + ld l, a + ld a, [TilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + and $f + jr .next + +.UpperNybble: + ld hl, TilesetPalettes + add [hl] + ld l, a + ld a, [TilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + swap a + and $f + +.next + pop hl + ld [de], a + res 7, [hl] + inc hl + inc de + dec c + jr nz, .innerloop + pop bc + dec b + jr nz, .loop + ret + +ScrollBGMapPalettes:: ; 4c03f + ld hl, BGMapBuffer + ld de, BGMapPalBuffer +.loop + ld a, [hl] + push hl + srl a + jr c, .UpperNybble + +; .LowerNybble + ld hl, TilesetPalettes + add [hl] + ld l, a + ld a, [TilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + and $f + jr .next + +.UpperNybble: + ld hl, TilesetPalettes + add [hl] + ld l, a + ld a, [TilesetPalettes + 1] + adc $0 + ld h, a + ld a, [hl] + swap a + and $f + +.next + pop hl + ld [de], a + res 7, [hl] + inc hl + inc de + dec c + jr nz, .loop + ret diff --git a/engine/menu_2.asm b/engine/menu_2.asm new file mode 100644 index 000000000..13568f3c5 --- /dev/null +++ b/engine/menu_2.asm @@ -0,0 +1,263 @@ +PlaceMenuItemName: ; 0x24ab4 + push de + ld a, [MenuSelection] + ld [wNamedObjectIndexBuffer], a + call GetItemName + pop hl + call PlaceString + ret + +PlaceMenuItemQuantity: ; 0x24ac3 + push de + ld a, [MenuSelection] + ld [CurItem], a + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + pop hl + and a + jr nz, .done + ld de, $15 + add hl, de + ld [hl], "×" + inc hl + ld de, MenuSelectionQuantity + lb bc, 1, 2 + call PrintNum + +.done + ret + +PlaceMoneyTopRight: ; 24ae8 + ld hl, MenuDataHeader_0x24b15 + call CopyMenuDataHeader + jr PlaceMoneyDataHeader + +PlaceMoneyBottomLeft: ; 24af0 + ld hl, MenuDataHeader_0x24b1d + call CopyMenuDataHeader + jr PlaceMoneyDataHeader + +PlaceMoneyAtTopLeftOfTextbox: ; 24af8 + ld hl, MenuDataHeader_0x24b15 + lb de, 0, 11 + call OffsetMenuDataHeader + +PlaceMoneyDataHeader: ; 24b01 + call MenuBox + call MenuBoxCoord2Tile + ld de, SCREEN_WIDTH + 1 + add hl, de + ld de, Money + lb bc, PRINTNUM_MONEY | 3, 6 + call PrintNum + ret + +MenuDataHeader_0x24b15: ; 0x24b15 + db $40 ; flags + db 00, 11 ; start coords + db 02, 19 ; end coords + dw NULL + db 1 ; default option + +MenuDataHeader_0x24b1d: ; 0x24b1d + db $40 ; flags + db 11, 00 ; start coords + db 13, 08 ; end coords + dw NULL + db 1 ; default option + +Special_DisplayCoinCaseBalance: ; 24b25 + ; Place a text box of size 1x7 at 11, 0. + hlcoord 11, 0 + ld b, 1 + ld c, 7 + call TextBox + hlcoord 12, 0 + ld de, CoinString + call PlaceString + hlcoord 17, 1 + ld de, ShowMoney_TerminatorString + call PlaceString + ld de, Coins + lb bc, 2, 4 + hlcoord 13, 1 + call PrintNum + ret + +Special_DisplayMoneyAndCoinBalance: ; 24b4e + hlcoord 5, 0 + ld b, 3 + ld c, 13 + call TextBox + hlcoord 6, 1 + ld de, MoneyString + call PlaceString + hlcoord 12, 1 + ld de, Money + lb bc, PRINTNUM_MONEY | 3, 6 + call PrintNum + hlcoord 6, 3 + ld de, CoinString + call PlaceString + hlcoord 15, 3 + ld de, Coins + lb bc, 2, 4 + call PrintNum + ret + +MoneyString: ; 24b83 + db "MONEY@" +CoinString: ; 24b89 + db "COIN@" +ShowMoney_TerminatorString: ; 24b8e + db "@" + +Function24b8f: ; 24b8f +; unreferenced, related to safari? + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + hlcoord 0, 0 + ld b, 3 + ld c, 7 + call TextBox + hlcoord 1, 1 + ld de, wSafariTimeRemaining + lb bc, 2, 3 + call PrintNum + hlcoord 4, 1 + ld de, .slash_500 + call PlaceString + hlcoord 1, 3 + ld de, .booru_ko + call PlaceString + hlcoord 5, 3 + ld de, wSafariBallsRemaining + lb bc, 1, 2 + call PrintNum + pop af + ld [Options], a + ret + +.slash_500 ; 24bcf + db "/500@" +.booru_ko ; 24bd4 + db "ボール こ@" + +StartMenu_DrawBugContestStatusBox: ; 24bdc + hlcoord 0, 0 + ld b, 5 + ld c, 17 + call TextBox + ret + +StartMenu_PrintBugContestStatus: ; 24be7 + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call StartMenu_DrawBugContestStatusBox + hlcoord 1, 5 + ld de, .Balls_EN + call PlaceString + hlcoord 8, 5 + ld de, wParkBallsRemaining + lb bc, PRINTNUM_RIGHTALIGN | 1, 2 + call PrintNum + hlcoord 1, 1 + ld de, .CAUGHT + call PlaceString + ld a, [wContestMon] + and a + ld de, .None + jr z, .no_contest_mon + ld [wd265], a + call GetPokemonName + +.no_contest_mon + hlcoord 8, 1 + call PlaceString + ld a, [wContestMon] + and a + jr z, .skip_level + hlcoord 1, 3 + ld de, .LEVEL + call PlaceString + ld a, [wContestMonLevel] + ld h, b + ld l, c + inc hl + ld c, 3 + call Print8BitNumRightAlign + +.skip_level + pop af + ld [Options], a + ret + +.Balls_JP: ; 24c43 + db "ボール こ@" +.CAUGHT: ; 24c4b + db "CAUGHT@" +.Balls_EN: ; 24c52 + db "BALLS:@" +.None: ; 24c59 + db "None@" +.LEVEL: ; 24c5e + db "LEVEL@" + +FindApricornsInBag: ; 24c64 +; Checks the bag for Apricorns. + ld hl, Buffer1 + xor a + ld [hli], a + dec a + ld bc, 10 + call ByteFill + + ld hl, .ApricornBalls +.loop + ld a, [hl] + cp -1 + jr z, .done + push hl + ld [CurItem], a + ld hl, NumItems + call CheckItem + pop hl + jr nc, .nope + ld a, [hl] + call .addtobuffer +.nope + inc hl + inc hl + jr .loop + +.done + ld a, [Buffer1] + and a + ret nz + scf + ret + +.addtobuffer ; 24c94 + push hl + ld hl, Buffer1 + inc [hl] + ld e, [hl] + ld d, 0 + add hl, de + ld [hl], a + pop hl + ret + +.ApricornBalls: ; 24ca0 + db RED_APRICORN, LEVEL_BALL + db BLU_APRICORN, LURE_BALL + db YLW_APRICORN, MOON_BALL + db GRN_APRICORN, FRIEND_BALL + db WHT_APRICORN, FAST_BALL + db BLK_APRICORN, HEAVY_BALL + db PNK_APRICORN, LOVE_BALL + db -1 diff --git a/engine/mon_stats.asm b/engine/mon_stats.asm new file mode 100644 index 000000000..ec468be16 --- /dev/null +++ b/engine/mon_stats.asm @@ -0,0 +1,486 @@ +DrawPlayerHP: ; 50b0a + ld a, $1 + jr DrawHP + +DrawEnemyHP: ; 50b0e + ld a, $2 + +DrawHP: ; 50b10 + ld [wWhichHPBar], a + push hl + push bc + ; box mons have full HP + ld a, [MonType] + cp BOXMON + jr z, .at_least_1_hp + + ld a, [TempMonHP] + ld b, a + ld a, [TempMonHP + 1] + ld c, a + +; Any HP? + or b + jr nz, .at_least_1_hp + + xor a + ld c, a + ld e, a + ld a, 6 + ld d, a + jp .fainted + +.at_least_1_hp + ld a, [TempMonMaxHP] + ld d, a + ld a, [TempMonMaxHP + 1] + ld e, a + ld a, [MonType] + cp BOXMON + jr nz, .not_boxmon + + ld b, d + ld c, e + +.not_boxmon + predef ComputeHPBarPixels + ld a, 6 + ld d, a + ld c, a + +.fainted + ld a, c + pop bc + ld c, a + pop hl + push de + push hl + push hl + call DrawBattleHPBar + pop hl + +; Print HP + bccoord 1, 1, 0 + add hl, bc + ld de, TempMonHP + ld a, [MonType] + cp BOXMON + jr nz, .not_boxmon_2 + ld de, TempMonMaxHP +.not_boxmon_2 + lb bc, 2, 3 + call PrintNum + + ld a, "/" + ld [hli], a + +; Print max HP + ld de, TempMonMaxHP + lb bc, 2, 3 + call PrintNum + pop hl + pop de + ret + +PrintTempMonStats: ; 50b7b +; Print TempMon's stats at hl, with spacing bc. + push bc + push hl + ld de, .StatNames + call PlaceString + pop hl + pop bc + add hl, bc + ld bc, SCREEN_WIDTH + add hl, bc + ld de, TempMonAttack + lb bc, 2, 3 + call .PrintStat + ld de, TempMonDefense + call .PrintStat + ld de, TempMonSpclAtk + call .PrintStat + ld de, TempMonSpclDef + call .PrintStat + ld de, TempMonSpeed + jp PrintNum + +.PrintStat: ; 50bab + push hl + call PrintNum + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + ret + +.StatNames: ; 50bb5 + db "ATTACK" + next "DEFENSE" + next "SPCL.ATK" + next "SPCL.DEF" + next "SPEED" + next "@" + +GetGender: ; 50bdd +; Return the gender of a given monster (CurPartyMon/CurOTMon/CurWildMon). +; When calling this function, a should be set to an appropriate MonType value. + +; return values: +; a = 1: f = nc|nz; male +; a = 0: f = nc|z; female +; f = c: genderless + +; This is determined by comparing the Attack and Speed DVs +; with the species' gender ratio. + +; Figure out what type of monster struct we're looking at. + +; 0: PartyMon + ld hl, PartyMon1DVs + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [MonType] + and a + jr z, .PartyMon + +; 1: OTPartyMon + ld hl, OTPartyMon1DVs + dec a + jr z, .PartyMon + +; 2: sBoxMon + ld hl, sBoxMon1DVs + ld bc, BOXMON_STRUCT_LENGTH + dec a + jr z, .sBoxMon + +; 3: Unknown + ld hl, TempMonDVs + dec a + jr z, .DVs + +; else: WildMon + ld hl, EnemyMonDVs + jr .DVs + +; Get our place in the party/box. + +.PartyMon: +.sBoxMon + ld a, [CurPartyMon] + call AddNTimes + +.DVs: + +; sBoxMon data is read directly from SRAM. + ld a, [MonType] + cp BOXMON + ld a, 1 + call z, GetSRAMBank + +; Attack DV + ld a, [hli] + and $f0 + ld b, a +; Speed DV + ld a, [hl] + and $f0 + swap a + +; Put our DVs together. + or b + ld b, a + +; Close SRAM if we were dealing with a sBoxMon. + ld a, [MonType] + cp BOXMON + call z, CloseSRAM + +; We need the gender ratio to do anything with this. + push bc + ld a, [CurPartySpecies] + dec a + ld hl, BaseData + BASE_GENDER + ld bc, BASE_DATA_SIZE + call AddNTimes + pop bc + + ld a, BANK(BaseData) + call GetFarByte + +; The higher the ratio, the more likely the monster is to be female. + + cp GENDERLESS + jr z, .Genderless + + and a ; GENDER_F0? + jr z, .Male + + cp GENDER_F100 + jr z, .Female + +; Values below the ratio are male, and vice versa. + cp b + jr c, .Male + +.Female: + xor a + ret + +.Male: + ld a, 1 + and a + ret + +.Genderless: + scf + ret + +ListMovePP: ; 50c50 + ld a, [wNumMoves] + inc a + ld c, a + ld a, NUM_MOVES + sub c + ld b, a + push hl + ld a, [Buffer1] + ld e, a + ld d, $0 + ld a, $3e ; P + call .load_loop + ld a, b + and a + jr z, .skip + ld c, a + ld a, "-" + call .load_loop + +.skip + pop hl + inc hl + inc hl + inc hl + ld d, h + ld e, l + ld hl, TempMonMoves + ld b, 0 +.loop + ld a, [hli] + and a + jr z, .done + push bc + push hl + push de + ld hl, wMenuCursorY + ld a, [hl] + push af + ld [hl], b + push hl + callab GetMaxPPOfMove + pop hl + pop af + ld [hl], a + pop de + pop hl + push hl + ld bc, TempMonPP - (TempMonMoves + 1) + add hl, bc + ld a, [hl] + and $3f + ld [StringBuffer1 + 4], a + ld h, d + ld l, e + push hl + ld de, StringBuffer1 + 4 + lb bc, 1, 2 + call PrintNum + ld a, "/" + ld [hli], a + ld de, wd265 + lb bc, 1, 2 + call PrintNum + pop hl + ld a, [Buffer1] + ld e, a + ld d, 0 + add hl, de + ld d, h + ld e, l + pop hl + pop bc + inc b + ld a, b + cp NUM_MOVES + jr nz, .loop + +.done + ret + +.load_loop ; 50cc9 + ld [hli], a + ld [hld], a + add hl, de + dec c + jr nz, .load_loop + ret + +Function50cd0: ; 50cd0 +; XXX +.loop + ld [hl], $32 + inc hl + ld [hl], $3e + dec hl + add hl, de + dec c + jr nz, .loop + ret + +Predef22: ; unreferenced predef + push hl + push hl + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + pop hl + call PlaceString + call CopyPkmnToTempMon + pop hl + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + push hl + ld bc, -12 + add hl, bc + ld b, $0 + call DrawEnemyHP + pop hl + ld bc, 5 + add hl, bc + push de + call PrintLevel + pop de + +.egg + ret + +PlaceStatusString: ; 50d0a + push de + inc de + inc de + ld a, [de] + ld b, a + inc de + ld a, [de] + or b + pop de + jr nz, PlaceNonFaintStatus + push de + ld de, FntString + call CopyStatusString + pop de + ld a, $1 + and a + ret + +FntString: ; 50d22 + db "FNT@" + +CopyStatusString: ; 50d25 + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + ret + +PlaceNonFaintStatus: ; 50d2e + push de + ld a, [de] + ld de, PsnString + bit PSN, a + jr nz, .place + ld de, BrnString + bit BRN, a + jr nz, .place + ld de, FrzString + bit FRZ, a + jr nz, .place + ld de, ParString + bit PAR, a + jr nz, .place + ld de, SlpString + and SLP + jr z, .no_status + +.place + call CopyStatusString + ld a, $1 + and a + +.no_status + pop de + ret + +SlpString: db "SLP@" +PsnString: db "PSN@" +BrnString: db "BRN@" +FrzString: db "FRZ@" +ParString: db "PAR@" + +ListMoves: ; 50d6f +; List moves at hl, spaced every [Buffer1] tiles. + ld de, wListMoves_MoveIndicesBuffer + ld b, $0 +.moves_loop + ld a, [de] + inc de + and a + jr z, .no_more_moves + push de + push hl + push hl + ld [CurSpecies], a + ld a, MOVE_NAME + ld [wNamedObjectTypeBuffer], a + call GetName + ld de, StringBuffer1 + pop hl + push bc + call PlaceString + pop bc + ld a, b + ld [wNumMoves], a + inc b + pop hl + push bc + ld a, [Buffer1] + ld c, a + ld b, 0 + add hl, bc + pop bc + pop de + ld a, b + cp NUM_MOVES + jr z, .done + jr .moves_loop + +.no_more_moves + ld a, b +.nonmove_loop + push af + ld [hl], "-" + ld a, [Buffer1] + ld c, a + ld b, 0 + add hl, bc + pop af + inc a + cp NUM_MOVES + jr nz, .nonmove_loop + +.done + ret diff --git a/engine/player_gfx.asm b/engine/player_gfx.asm new file mode 100644 index 000000000..1af444d73 --- /dev/null +++ b/engine/player_gfx.asm @@ -0,0 +1,263 @@ +Function88248: ; 88248 +; XXX + ld c, CAL + ld a, [PlayerGender] + bit 0, a + jr z, .okay + ld c, KAREN + +.okay + ld a, c + ld [TrainerClass], a + ret + +MovePlayerPicRight: ; 88258 + hlcoord 6, 4 + ld de, 1 + jr MovePlayerPic + +MovePlayerPicLeft: ; 88260 + hlcoord 13, 4 + ld de, -1 + ; fallthrough + +MovePlayerPic: ; 88266 +; Move player pic at hl by de * 7 tiles. + ld c, $8 +.loop + push bc + push hl + push de + xor a + ld [hBGMapMode], a + lb bc, 7, 7 + predef PlaceGraphic + xor a + ld [hBGMapThird], a + call WaitBGMap + call DelayFrame + pop de + pop hl + add hl, de + pop bc + dec c + ret z + push hl + push bc + ld a, l + sub e + ld l, a + ld a, h + sbc d + ld h, a + lb bc, 7, 7 + call ClearBox + pop bc + pop hl + jr .loop + +ShowPlayerNamingChoices: ; 88297 + ld hl, ChrisNameMenuHeader + ld a, [PlayerGender] + bit 0, a + jr z, .GotGender + ld hl, KrisNameMenuHeader +.GotGender: + call LoadMenuDataHeader + call VerticalMenu + ld a, [wMenuCursorY] + dec a + call CopyNameFromMenu + call CloseWindow + ret + +ChrisNameMenuHeader: ; 882b5 + db $40 ; flags + db 00, 00 ; start coords + db 11, 10 ; end coords + dw .MaleNames + db 1 ; ???? + db 0 ; default option + +.MaleNames: ; 882be + db $91 ; flags + db 5 ; items + db "NEW NAME@" +MalePlayerNameArray: ; 882c9 + db "CHRIS@" + db "MAT@" + db "ALLAN@" + db "JON@" + db 2 ; displacement + db " NAME @" ; title + +KrisNameMenuHeader: ; 882e5 + db $40 ; flags + db 00, 00 ; start coords + db 11, 10 ; end coords + dw .FemaleNames + db 1 ; ???? + db 0 ; default option + +.FemaleNames: ; 882ee + db $91 ; flags + db 5 ; items + db "NEW NAME@" +FemalePlayerNameArray: ; 882f9 + db "KRIS@" + db "AMANDA@" + db "JUANA@" + db "JODI@" + db 2 ; displacement + db " NAME @" ; title + +GetPlayerNameArray: ; 88318 This Function is never called + ld hl, PlayerName + ld de, MalePlayerNameArray + ld a, [PlayerGender] + bit 0, a + jr z, .done + ld de, FemalePlayerNameArray + +.done + call InitName + ret + +GetPlayerIcon: ; 8832c +; Get the player icon corresponding to gender + +; Male + ld de, ChrisSpriteGFX + ld b, BANK(ChrisSpriteGFX) + + ld a, [PlayerGender] + bit 0, a + jr z, .done + +; Female + ld de, KrisSpriteGFX + ld b, BANK(KrisSpriteGFX) + +.done + ret + +GetCardPic: ; 8833e + ld hl, ChrisCardPic + ld a, [PlayerGender] + bit 0, a + jr z, .GotClass + ld hl, KrisCardPic +.GotClass: + ld de, VTiles2 tile $00 + ld bc, $23 tiles + ld a, BANK(ChrisCardPic) ; BANK(KrisCardPic) + call FarCopyBytes + ld hl, CardGFX + ld de, VTiles2 tile $23 + ld bc, 6 tiles + ld a, BANK(CardGFX) + call FarCopyBytes + ret + +ChrisCardPic: ; 88365 +INCBIN "gfx/trainer_card/chris_card.2bpp" + +KrisCardPic: ; 88595 +INCBIN "gfx/trainer_card/kris_card.2bpp" + +CardGFX: ; 887c5 +INCBIN "gfx/trainer_card/trainer_card.2bpp" + +GetPlayerBackpic: ; 88825 + ld a, [PlayerGender] + bit 0, a + jr z, GetChrisBackpic + call GetKrisBackpic + ret + +GetChrisBackpic: ; 88830 + ld hl, ChrisBackpic + ld b, BANK(ChrisBackpic) + ld de, VTiles2 tile $31 + ld c, 7 * 7 + predef DecompressPredef + ret + +HOF_LoadTrainerFrontpic: ; 88840 + call WaitBGMap + xor a + ld [hBGMapMode], a + ld e, 0 + ld a, [PlayerGender] + bit 0, a + jr z, .GotClass + ld e, 1 + +.GotClass: + ld a, e + ld [TrainerClass], a + ld de, ChrisPic + ld a, [PlayerGender] + bit 0, a + jr z, .GotPic + ld de, KrisPic + +.GotPic: + ld hl, VTiles2 + ld b, BANK(ChrisPic) ; BANK(KrisPic) + ld c, 7 * 7 + call Get2bpp + call WaitBGMap + ld a, $1 + ld [hBGMapMode], a + ret + +DrawIntroPlayerPic: ; 88874 +; Draw the player pic at (6,4). + +; Get class + ld e, CHRIS + ld a, [PlayerGender] + bit 0, a + jr z, .GotClass + ld e, KRIS +.GotClass: + ld a, e + ld [TrainerClass], a + +; Load pic + ld de, ChrisPic + ld a, [PlayerGender] + bit 0, a + jr z, .GotPic + ld de, KrisPic +.GotPic: + ld hl, VTiles2 + ld b, BANK(ChrisPic) ; BANK(KrisPic) + ld c, 7 * 7 ; dimensions + call Get2bpp + +; Draw + xor a + ld [hGraphicStartTile], a + hlcoord 6, 4 + lb bc, 7, 7 + predef PlaceGraphic + ret + +ChrisPic: ; 888a9 +INCBIN "gfx/player/chris.2bpp" + +KrisPic: ; 88bb9 +INCBIN "gfx/player/kris.2bpp" + +GetKrisBackpic: ; 88ec9 +; Kris's backpic is uncompressed. + ld de, KrisBackpic + ld hl, VTiles2 tile $31 + lb bc, BANK(KrisBackpic), 7 * 7 ; dimensions + call Get2bpp + ret + +KrisBackpic: ; 88ed6 +INCBIN "gfx/player/kris_back.2bpp" diff --git a/engine/pokedex_3.asm b/engine/pokedex_3.asm new file mode 100644 index 000000000..3414252c1 --- /dev/null +++ b/engine/pokedex_3.asm @@ -0,0 +1,162 @@ +LoadSGBPokedexGFX: ; 1ddf1c + ld hl, SGBPokedexGFX_LZ + ld de, VTiles2 tile $31 + call Decompress + ret + +LoadSGBPokedexGFX2: ; 1ddf26 (77:5f26) + ld hl, SGBPokedexGFX_LZ + ld de, VTiles2 tile $31 + lb bc, BANK(SGBPokedexGFX_LZ), $3a + call DecompressRequest2bpp + ret + +SGBPokedexGFX_LZ: ; 1ddf33 +INCBIN "gfx/pokedex/sgb.2bpp.lz" + +LoadQuestionMarkPic: ; 1de0d7 + ld hl, .QuestionMarkLZ + ld de, sScratch + call Decompress + ret + +.QuestionMarkLZ: ; 1de0e1 +INCBIN "gfx/pics/questionmark/front.2bpp.lz" + +DrawPokedexListWindow: ; 1de171 (77:6171) + ld a, $32 + hlcoord 0, 17 + ld bc, 12 + call ByteFill + hlcoord 0, 1 + lb bc, 15, 11 + call ClearBox + ld a, $34 + hlcoord 0, 0 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 16 + ld bc, 11 + call ByteFill + hlcoord 5, 0 + ld [hl], $3f + hlcoord 5, 16 + ld [hl], $40 + ld a, [wCurrentDexMode] + cp DEXMODE_OLD + jr z, .OldMode +; scroll bar + hlcoord 11, 0 + ld [hl], $50 + ld a, $51 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT - 3 + call Bank77_FillColumn + ld [hl], $52 + jr .Done + +.OldMode: +; no scroll bar + hlcoord 11, 0 + ld [hl], $66 + ld a, $67 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT - 3 + call Bank77_FillColumn + ld [hl], $68 +.Done: + ret + +DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1) + ld a, $34 + hlcoord 0, 0 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 10 + ld bc, 11 + call ByteFill + hlcoord 5, 0 + ld [hl], $3f + hlcoord 5, 10 + ld [hl], $40 + hlcoord 11, 0 + ld [hl], $66 + ld a, $67 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT / 2 + call Bank77_FillColumn + ld [hl], $68 + ld a, $34 + hlcoord 0, 11 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 17 + ld bc, 11 + call ByteFill + hlcoord 11, 11 + ld [hl], $66 + ld a, $67 + hlcoord 11, 12 + ld b, 5 + call Bank77_FillColumn + ld [hl], $68 + hlcoord 0, 12 + lb bc, 5, 11 + call ClearBox + ld de, .esults_D + hlcoord 0, 12 + call PlaceString + ret + +.esults_D ; 1de23c +; (SEARCH R) + db "ESULTS" + next "" +; (### FOUN) + next "D!@" + +DrawDexEntryScreenRightEdge: ; 1de247 + ld a, [hBGMapAddress] + ld l, a + ld a, [hBGMapAddress + 1] + ld h, a + push hl + inc hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + hlcoord 19, 0 + ld [hl], $66 + hlcoord 19, 1 + ld a, $67 + ld b, 15 + call Bank77_FillColumn + ld [hl], $68 + hlcoord 19, 17 + ld [hl], $3c + xor a + ld b, SCREEN_HEIGHT + hlcoord 19, 0, AttrMap + call Bank77_FillColumn + call WaitBGMap2 + pop hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + ret + +Bank77_FillColumn: ; 1de27f + push de + ld de, SCREEN_WIDTH +.loop + ld [hl], a + add hl, de + dec b + jr nz, .loop + pop de + ret diff --git a/engine/pokerus.asm b/engine/pokerus.asm new file mode 100644 index 000000000..3e5e094e4 --- /dev/null +++ b/engine/pokerus.asm @@ -0,0 +1,160 @@ +GivePokerusAndConvertBerries: ; 2ed44 + call ConvertBerriesToBerryJuice + ld hl, PartyMon1PokerusStatus + ld a, [PartyCount] + ld b, a + ld de, PARTYMON_STRUCT_LENGTH +; Check to see if any of your Pokemon already has Pokerus. +; If so, sample its spread through your party. +; This means that you cannot get Pokerus de novo while +; a party member has an active infection. +.loopMons + ld a, [hl] + and $f + jr nz, .TrySpreadPokerus + add hl, de + dec b + jr nz, .loopMons + +; If we haven't been to Goldenrod City at least once, +; prevent the contraction of Pokerus. + ld hl, StatusFlags2 + bit 6, [hl] + ret z + call Random + ld a, [hRandomAdd] + and a + ret nz + ld a, [hRandomSub] + cp $3 + ret nc ; 3/65536 chance (00 00, 00 01 or 00 02) + ld a, [PartyCount] + ld b, a +.randomMonSelectLoop + call Random + and $7 + cp b + jr nc, .randomMonSelectLoop + ld hl, PartyMon1PokerusStatus + call GetPartyLocation ; get pokerus byte of random mon + ld a, [hl] + and $f0 + ret nz ; if it already has pokerus, do nothing +.randomPokerusLoop ; Simultaneously sample the strain and duration + call Random + and a + jr z, .randomPokerusLoop + ld b, a + and $f0 + jr z, .load_pkrs + ld a, b + and $7 + inc a +.load_pkrs + ld b, a ; this should come before the label + swap b + and $3 + inc a + add b + ld [hl], a + ret + +.TrySpreadPokerus: + call Random + cp 1 + 33 percent + ret nc ; 1/3 chance + + ld a, [PartyCount] + cp 1 + ret z ; only one mon, nothing to do + + ld c, [hl] + ld a, b + cp 2 + jr c, .checkPreviousMonsLoop ; no more mons after this one, go backwards + + call Random + cp 1 + 50 percent + jr c, .checkPreviousMonsLoop ; 1/2 chance, go backwards +.checkFollowingMonsLoop + add hl, de + ld a, [hl] + and a + jr z, .infectMon + ld c, a + and $3 + ret z ; if mon has cured pokerus, stop searching + dec b ; go on to next mon + ld a, b + cp 1 + jr nz, .checkFollowingMonsLoop ; no more mons left + ret + +.checkPreviousMonsLoop + ld a, [PartyCount] + cp b + ret z ; no more mons + ld a, l + sub e + ld l, a + ld a, h + sbc d + ld h, a + ld a, [hl] + and a + jr z, .infectMon + ld c, a + and $3 + ret z ; if mon has cured pokerus, stop searching + inc b ; go on to next mon + jr .checkPreviousMonsLoop + +.infectMon + ld a, c + and $f0 + ld b, a + ld a, c + swap a + and $3 + inc a + add b + ld [hl], a + ret + +; any berry held by a Shuckle may be converted to berry juice +ConvertBerriesToBerryJuice: ; 2ede6 + ld hl, StatusFlags2 + bit 6, [hl] + ret z + call Random + cp $10 + ret nc ; 1/16 chance + ld hl, PartyMons + ld a, [PartyCount] +.partyMonLoop + push af + push hl + ld a, [hl] + cp SHUCKLE + jr nz, .loopMon + ld bc, MON_ITEM + add hl, bc + ld a, [hl] + cp BERRY + jr z, .convertToJuice + +.loopMon + pop hl + ld bc, PARTYMON_STRUCT_LENGTH + add hl, bc + pop af + dec a + jr nz, .partyMonLoop + ret + +.convertToJuice + ld a, BERRY_JUICE + ld [hl], a + pop hl + pop af + ret diff --git a/engine/pokerus_tick.asm b/engine/pokerus_tick.asm new file mode 100644 index 000000000..3c97fdc5e --- /dev/null +++ b/engine/pokerus_tick.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/square_root.asm b/engine/square_root.asm new file mode 100644 index 000000000..496f66c83 --- /dev/null +++ b/engine/square_root.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/start_battle.asm b/engine/start_battle.asm new file mode 100644 index 000000000..51f46b3f2 --- /dev/null +++ b/engine/start_battle.asm @@ -0,0 +1,197 @@ +ShowLinkBattleParticipants: ; 2ee18 +; If we're not in a communications room, +; we don't need to be here. + ld a, [wLinkMode] + and a + ret z + + callba _ShowLinkBattleParticipants + ld c, 150 + call DelayFrames + call ClearTileMap + call ClearSprites + ret + +FindFirstAliveMonAndStartBattle: ; 2ee2f + xor a + ld [hMapAnims], a + call DelayFrame + ld b, 6 + ld hl, PartyMon1HP + ld de, PARTYMON_STRUCT_LENGTH - 1 + +.loop + ld a, [hli] + or [hl] + jr nz, .okay + add hl, de + dec b + jr nz, .loop + +.okay + ld de, MON_LEVEL - MON_HP + add hl, de + ld a, [hl] + ld [BattleMonLevel], a + predef Predef_StartBattle + callba _LoadBattleFontsHPBar + ld a, 1 + ld [hBGMapMode], a + call ClearSprites + call ClearTileMap + xor a + ld [hBGMapMode], a + ld [hWY], a + ld [rWY], a + ld [hMapAnims], a + ret + +PlayBattleMusic: ; 2ee6c + push hl + push de + push bc + + xor a + ld [MusicFade], a + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + call MaxVolume + + ld a, [BattleType] + cp BATTLETYPE_SUICUNE + ld de, MUSIC_SUICUNE_BATTLE + jp z, .done + cp BATTLETYPE_ROAMING + jp z, .done + + ; Are we fighting a trainer? + ld a, [OtherTrainerClass] + and a + jr nz, .trainermusic + + callba RegionCheck + ld a, e + and a + jr nz, .kantowild + + ld de, MUSIC_JOHTO_WILD_BATTLE + ld a, [TimeOfDay] + cp NITE_F + jr nz, .done + ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT + jr .done + +.kantowild + ld de, MUSIC_KANTO_WILD_BATTLE + jr .done + +.trainermusic + ld de, MUSIC_CHAMPION_BATTLE + cp CHAMPION + jr z, .done + cp RED + jr z, .done + + ; really, they should have included admins and scientists here too... + ld de, MUSIC_ROCKET_BATTLE + cp GRUNTM + jr z, .done + cp GRUNTF + jr z, .done + + ld de, MUSIC_KANTO_GYM_LEADER_BATTLE + callba IsKantoGymLeader + jr c, .done + + ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE + callba IsJohtoGymLeader + jr c, .done + + ld de, MUSIC_RIVAL_BATTLE + ld a, [OtherTrainerClass] + cp RIVAL1 + jr z, .done + cp RIVAL2 + jr nz, .othertrainer + + ld a, [OtherTrainerID] + cp RIVAL2_2_CHIKORITA ; Rival in Indigo Plateau + jr c, .done + ld de, MUSIC_CHAMPION_BATTLE + jr .done + +.othertrainer + ld a, [wLinkMode] + and a + jr nz, .johtotrainer + + callba RegionCheck + ld a, e + and a + jr nz, .kantotrainer + +.johtotrainer + ld de, MUSIC_JOHTO_TRAINER_BATTLE + jr .done + +.kantotrainer + ld de, MUSIC_KANTO_TRAINER_BATTLE + +.done + call PlayMusic + + pop bc + pop de + pop hl + ret + +ClearBattleRAM: ; 2ef18 + xor a + ld [wPlayerAction], a + ld [wBattleResult], a + + ld hl, wPartyMenuCursor + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + + ld [wMenuScrollPosition], a + ld [CriticalHit], a + ld [BattleMonSpecies], a + ld [wBattleParticipantsNotFainted], a + ld [CurBattleMon], a + ld [wForcedSwitch], a + ld [TimeOfDayPal], a + ld [PlayerTurnsTaken], a + ld [EnemyTurnsTaken], a + ld [EvolvableFlags], a + + ld hl, PlayerHPPal + ld [hli], a + ld [hl], a + + ld hl, BattleMonDVs + ld [hli], a + ld [hl], a + + ld hl, EnemyMonDVs + ld [hli], a + ld [hl], a + +; Clear the entire BattleMons area + ld hl, wBattle + ld bc, wBattleEnd - wBattle + xor a + call ByteFill + + callab ResetEnemyStatLevels + + call ClearWindowData + + ld hl, hBGMapAddress + xor a + ld [hli], a + ld [hl], VBGMap0 / $100 + ret diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm index 90ff9141c..a4a07bc4d 100644 --- a/engine/timeofdaypals.asm +++ b/engine/timeofdaypals.asm @@ -1,3 +1,7 @@ +Predef35: ; 8c000 +Predef36: + ret + UpdateTimeOfDayPal:: ; 8c001 call UpdateTime ld a, [TimeOfDay] diff --git a/engine/trainer_scripts.asm b/engine/trainer_scripts.asm new file mode 100644 index 000000000..33dab3b9e --- /dev/null +++ b/engine/trainer_scripts.asm @@ -0,0 +1,31 @@ +TalkToTrainerScript:: ; 0xbe66a + faceplayer + trainerflagaction CHECK_FLAG + iftrue AlreadyBeatenTrainerScript + loadmemtrainer + encountermusic + jump StartBattleWithMapTrainerScript + +SeenByTrainerScript:: ; 0xbe675 + loadmemtrainer + encountermusic + showemote EMOTE_SHOCK, LAST_TALKED, 30 + callasm TrainerWalkToPlayer + applymovement2 MovementBuffer + writepersonxy LAST_TALKED + faceperson PLAYER, LAST_TALKED + jump StartBattleWithMapTrainerScript + +StartBattleWithMapTrainerScript: ; 0xbe68a + opentext + trainertext $0 + waitbutton + closetext + loadmemtrainer + startbattle + reloadmapafterbattle + trainerflagaction SET_FLAG + loadvar wRunningTrainerBattleScript, -1 + +AlreadyBeatenTrainerScript: + scripttalkafter diff --git a/engine/unused_correct_party.asm b/engine/unused_correct_party.asm new file mode 100644 index 000000000..dd2e1111c --- /dev/null +++ b/engine/unused_correct_party.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 + callba 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 + callba 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 -- cgit v1.2.3 From e44640b0088dad5856d7a6f60ad930779931b251 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 21:22:26 -0500 Subject: Move more main.asm code into individual files --- engine/empty_sram.asm | 19 + engine/healmachineanim.asm | 265 ------ engine/init_hof_credits.asm | 79 ++ engine/init_list.asm | 54 ++ engine/link.asm | 11 + engine/mystery_gift.asm | 1735 +++++++++++++++++++++++++++++++++++++ engine/mystery_gift_2.asm | 152 ++++ engine/mysterygift.asm | 1735 ------------------------------------- engine/mysterygift2.asm | 152 ---- engine/pack_f.asm | 20 + engine/place_graphics.asm | 56 ++ engine/pokegear_2.asm | 25 + engine/printhoursmins.asm | 64 ++ engine/save.asm | 40 +- engine/select_menu.asm | 189 ++++ engine/selectmenu.asm | 189 ---- engine/start_menu.asm | 1974 ++++++++++++++++++++++++++++++++++++++++++ engine/startmenu.asm | 1974 ------------------------------------------ engine/switch_party_mons.asm | 145 ++++ engine/tempmon.asm | 127 +++ 20 files changed, 4670 insertions(+), 4335 deletions(-) create mode 100644 engine/empty_sram.asm delete mode 100755 engine/healmachineanim.asm create mode 100644 engine/init_hof_credits.asm create mode 100644 engine/init_list.asm create mode 100755 engine/mystery_gift.asm create mode 100755 engine/mystery_gift_2.asm delete mode 100755 engine/mysterygift.asm delete mode 100755 engine/mysterygift2.asm create mode 100644 engine/pack_f.asm create mode 100644 engine/place_graphics.asm create mode 100644 engine/pokegear_2.asm create mode 100644 engine/printhoursmins.asm create mode 100755 engine/select_menu.asm delete mode 100755 engine/selectmenu.asm create mode 100755 engine/start_menu.asm delete mode 100755 engine/startmenu.asm create mode 100644 engine/switch_party_mons.asm create mode 100644 engine/tempmon.asm (limited to 'engine') diff --git a/engine/empty_sram.asm b/engine/empty_sram.asm new file mode 100644 index 000000000..aa4b28e0d --- /dev/null +++ b/engine/empty_sram.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/healmachineanim.asm b/engine/healmachineanim.asm deleted file mode 100755 index 4f543c0b3..000000000 --- a/engine/healmachineanim.asm +++ /dev/null @@ -1,265 +0,0 @@ -HealMachineAnim: ; 12324 - ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon. - ld a, [PartyCount] - and a - ret z - ; The location of the healing machine relative to the player is stored in ScriptVar. - ; 0: Up and left (Pokemon Center) - ; 1: Left (Elm's Lab) - ; 2: Up (Hall of Fame) - ld a, [ScriptVar] - ld [Buffer1], a - ld a, [rOBP1] - ld [Buffer2], a - call .DoJumptableFunctions - ld a, [Buffer2] - call DmgToCgbObjPal1 - ret -; 1233e - -.DoJumptableFunctions: ; 1233e - xor a - ld [Buffer3], a -.jumpable_loop - ld a, [Buffer1] - ld e, a - ld d, 0 - ld hl, .Pointers - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [Buffer3] - ld e, a - inc a - ld [Buffer3], a - add hl, de - ld a, [hl] - cp 5 - jr z, .finish - ld hl, .Jumptable - rst JumpTable - jr .jumpable_loop - -.finish - ret -; 12365 - -.Pointers: ; 12365 - dw .Pokecenter - dw .ElmLab - dw .HallOfFame -; 1236b - -.Pokecenter: ; 1236b - db 0, 1, 3, 5 -.ElmLab: ; 1236f - db 0, 1, 3, 5 -.HallOfFame: ; 12373 - db 0, 2, 4, 5 -; 12377 - -.Jumptable: ; 12377 - dw .LoadGFX - dw .PC_LoadBallsOntoMachine - dw .HOF_LoadBallsOntoMachine - dw .PlayHealMusic - dw .HOF_PlaySFX - dw .dummy_5 ; never encountered -; 12383 - -.LoadGFX: ; 12383 - call .LoadPalettes - ld de, .HealMachineGFX - ld hl, VTiles0 tile $7c - lb bc, BANK(.HealMachineGFX), $2 - call Request2bpp - ret -; 12393 - -.PC_LoadBallsOntoMachine: ; 12393 - ld hl, Sprites + $80 - ld de, .PC_ElmsLab_OAM - call .PlaceHealingMachineTile - call .PlaceHealingMachineTile - jr .LoadBallsOntoMachine - -.HOF_LoadBallsOntoMachine: ; 123a1 - ld hl, Sprites + $80 - ld de, .HOF_OAM - -.LoadBallsOntoMachine: ; 123a7 - ld a, [PartyCount] - ld b, a -.party_loop - call .PlaceHealingMachineTile - push de - ld de, SFX_SECOND_PART_OF_ITEMFINDER - call PlaySFX - pop de - ld c, 30 - call DelayFrames - dec b - jr nz, .party_loop - ret -; 123bf - -.PlayHealMusic: ; 123bf - ld de, MUSIC_HEAL - call PlayMusic - jp .FlashPalettes8Times -; 123c8 - -.HOF_PlaySFX: ; 123c8 - ld de, SFX_GAME_FREAK_LOGO_GS - call PlaySFX - call .FlashPalettes8Times - call WaitSFX - ld de, SFX_BOOT_PC - call PlaySFX - ret -; 123db - -.dummy_5 ; 123db - ret -; 123dc - -.PC_ElmsLab_OAM: ; 123dc - dsprite 4, 0, 4, 2, $7c, $16 - dsprite 4, 0, 4, 6, $7c, $16 - dsprite 4, 6, 4, 0, $7d, $16 - dsprite 4, 6, 5, 0, $7d, $36 ; xflip - dsprite 5, 3, 4, 0, $7d, $16 - dsprite 5, 3, 5, 0, $7d, $36 ; xflip - dsprite 6, 0, 4, 0, $7d, $16 - dsprite 6, 0, 5, 0, $7d, $36 ; xflip -; 123fc - -.HealMachineGFX: ; 123fc -INCBIN "gfx/overworld/heal_machine.2bpp" -; 1241c - -.HOF_OAM: ; 1241c - dsprite 7, 4, 10, 1, $7d, $16 - dsprite 7, 4, 10, 6, $7d, $16 - dsprite 7, 3, 9, 5, $7d, $16 - dsprite 7, 3, 11, 2, $7d, $16 - dsprite 7, 1, 9, 1, $7d, $16 - dsprite 7, 1, 11, 5, $7d, $16 -; 12434 - -.LoadPalettes: ; 12434 - call IsCGB - jr nz, .cgb - ld a, %11100000 - ld [rOBP1], a - ret - -.cgb - ld hl, .palettes - ld de, OBPals + 8 * 6 - ld bc, 8 - ld a, $5 - call FarCopyWRAM - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 12451 - -.palettes ; 12451 - RGB 31, 31, 31 - RGB 31, 19, 10 - RGB 31, 07, 01 - RGB 00, 00, 00 -; 12459 - -.FlashPalettes8Times: ; 12459 - ld c, $8 -.palette_loop - push bc - call .FlashPalettes - ld c, 10 - call DelayFrames - pop bc - dec c - jr nz, .palette_loop - ret -; 12469 - -.FlashPalettes: ; 12469 - call IsCGB - jr nz, .go - ld a, [rOBP1] - xor %00101000 - ld [rOBP1], a - ret - -.go - ld a, [rSVBK] - push af - ld a, $5 - ld [rSVBK], a - - ld hl, OBPals + 8 * 6 - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - push de - ld c, $3 -.palette_loop_2 - ld a, [hli] - ld e, a - ld a, [hld] - ld d, a - dec hl - ld a, d - ld [hld], a - ld a, e - ld [hli], a - inc hl - inc hl - inc hl - dec c - jr nz, .palette_loop_2 - pop de - dec hl - ld a, d - ld [hld], a - ld a, e - ld [hl], a - - pop af - ld [rSVBK], a - ld a, $1 - ld [hCGBPalUpdate], a - ret -; 124a3 - -.PlaceHealingMachineTile: ; 124a3 - push bc - ld a, [Buffer1] - bcpixel 2, 4 - cp $1 ; ElmsLab - jr z, .okay - bcpixel 0, 0 - -.okay - ld a, [de] - add c - inc de - ld [hli], a - ld a, [de] - add b - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hli], a - pop bc - ret -; 124c1 diff --git a/engine/init_hof_credits.asm b/engine/init_hof_credits.asm new file mode 100644 index 000000000..0f55a10ab --- /dev/null +++ b/engine/init_hof_credits.asm @@ -0,0 +1,79 @@ +InitDisplayForHallOfFame: ; 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 WaitBGMap2 + call SetPalettes + ret + +.SavingRecordDontTurnOff: ; 0x4e8bd + ; SAVING RECORD… DON'T TURN OFF! + text_jump UnknownText_0x1bd39e + db "@" + +InitDisplayForRedCredits: ; 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, UnknBGPals + ld c, 4 tiles +.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 WaitBGMap2 + call SetPalettes + ret + +ResetDisplayBetweenHallOfFameMons: ; 4e906 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, wDecompressScratch + ld bc, wScratchAttrMap - wDecompressScratch + ld a, " " + call ByteFill + hlbgcoord 0, 0 + ld de, wDecompressScratch + ld b, 0 + ld c, 4 tiles + call Request2bpp + pop af + ld [rSVBK], a + ret diff --git a/engine/init_list.asm b/engine/init_list.asm new file mode 100644 index 000000000..e2b7235ab --- /dev/null +++ b/engine/init_list.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/link.asm b/engine/link.asm index 7f71f4880..619d5bae3 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -2581,3 +2581,14 @@ UnusedGen1LinkCommsBorderGFX: ; 29f54 ; unreferenced INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp" ; 29fe4 + +Function29fe4: ; unreferenced + ld a, BANK(sPartyMail) + call GetSRAMBank + ld d, $0 + ld b, CHECK_FLAG + predef FlagPredef + call CloseSRAM + ld a, c + and a + ret diff --git a/engine/mystery_gift.asm b/engine/mystery_gift.asm new file mode 100755 index 000000000..8204ab332 --- /dev/null +++ b/engine/mystery_gift.asm @@ -0,0 +1,1735 @@ +DoMysteryGift: ; 1048ba (41:48ba) + call ClearTileMap + call ClearSprites + call WaitBGMap + call InitMysteryGiftLayout + hlcoord 3, 8 + ld de, .String_PressAToLink_BToCancel + call PlaceString + call WaitBGMap + callba PrepMysteryGiftDataToSend + call MysteryGift_ClearTrainerData + ld a, $2 + ld [wca01], a + ld a, $14 + ld [wca02], a + ld a, [rIE] + push af + + call Function104a95 + + ld d, a + xor a + ld [rIF], a + pop af + ld [rIE], a + push de + call ClearTileMap + call EnableLCD + call WaitBGMap + ld b, SCGB_DIPLOMA + call GetSGBLayout + call SetPalettes + pop de + hlcoord 2, 8 + ld a, d + ld de, .Text_LinkCanceled ; Link has been canceled + cp $10 + jp z, .LinkCanceled + cp $6c + jp nz, .CommunicationError + ld a, [wc900] + cp 3 + jr z, .skip_checks + call .CheckAlreadyGotFiveGiftsToday + ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day + jp nc, .PrintTextAndExit + call .CheckAlreadyGotAGiftFromThatPerson + ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person + jp c, .PrintTextAndExit +.skip_checks + ld a, [wMysteryGiftPlayerBackupItem] + and a + jp nz, .GiftWaiting + ld a, [wMysteryGiftPartnerBackupItem] + and a + jp nz, .FriendNotReady + ld a, [wc900] + cp 3 + jr z, .skip_append_save + call .AddMysteryGiftPartnerID + ld a, [wc900] + cp 4 + jr z, .skip_append_save + call .SaveMysteryGiftTrainerName + callba RestoreMobileEventIndex + callba TrainerRankings_MysteryGift + callba BackupMobileEventIndex +.skip_append_save + ld a, [wMysteryGiftPartnerSentDeco] + and a + jr z, .item + ld a, [wMysteryGiftPartnerWhichDeco] + ld c, a + callba MysteryGiftGetDecoration + push bc + call MysteryGift_CheckAndSetDecorationAlreadyReceived + pop bc + jr nz, .item + callab GetDecorationName_c + ld h, d + ld l, e + ld de, StringBuffer1 + ld bc, ITEM_NAME_LENGTH + call CopyBytes + ld hl, .Text_SentToHome ; sent decoration to home + jr .PrintTextAndExit + +.item + call GetMysteryGiftBank + ld a, [wMysteryGiftPartnerWhichItem] + ld c, a + callba MysteryGiftGetItemHeldEffect + ld a, c + ld [sBackupMysteryGiftItem], a + ld [wNamedObjectIndexBuffer], a + call CloseSRAM + call GetItemName + ld hl, .Text_Sent ; sent item + jr .PrintTextAndExit + +.LinkCanceled: ; 1049af (41:49af) + ld hl, .Text_LinkCanceled ; Link has been canceled + jr .PrintTextAndExit + +.CommunicationError: ; 1049b4 (41:49b4) + ld hl, .Text_CommunicationError ; Communication error + call PrintText + jp DoMysteryGift + +.GiftWaiting: ; 1049bd (41:49bd) + ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter + jr .PrintTextAndExit + +.FriendNotReady: ; 1049c2 (41:49c2) + ld hl, .Text_FriendNotReady ; friend not ready + +.PrintTextAndExit: ; 1049c5 (41:49c5) + call PrintText + ld a, $e3 + ld [rLCDC], a + ret +; 1049cd (41:49cd) + +.String_PressAToLink_BToCancel: ; 1049cd + db "Press A to" + next "link IR-Device" + next "Press B to" + next "cancel it." + db "@" +; 1049fd + +.Text_LinkCanceled: ; 1049fd + text_jump UnknownText_0x1c0436 + db "@" +; 104a02 + +.Text_CommunicationError: ; 104a02 + text_jump UnknownText_0x1c0454 + db "@" +; 104a07 + +.Text_ReceiveGiftAtCounter: ; 104a07 + text_jump UnknownText_0x1c046a + db "@" +; 104a0c + +.Text_FriendNotReady: ; 104a0c + text_jump UnknownText_0x1c048e + db "@" +; 104a11 + +.Text_MaxFiveGifts: ; 104a11 + text_jump UnknownText_0x1c04a7 + db "@" +; 104a16 + +.Text_MaxOneGiftPerPerson: ; 104a16 + text_jump UnknownText_0x1c04c6 + db "@" +; 104a1b + +.Text_Sent: ; 104a1b + text_jump UnknownText_0x1c04e9 + db "@" +; 104a20 + +.Text_SentToHome: ; 104a20 + text_jump UnknownText_0x1c04fa + db "@" +; 104a25 + +.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25) + call GetMysteryGiftBank + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp $5 + jp CloseSRAM + +.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30) + call GetMysteryGiftBank + ld a, [wMysteryGiftPartnerID] + ld b, a + ld a, [wMysteryGiftPartnerID + 1] + ld c, a + ld a, [sNumDailyMysteryGiftPartnerIDs] + ld d, a + ld hl, sDailyMysteryGiftPartnerIDs +.loop + ld a, d + and a + jr z, .No + ld a, [hli] + cp b + jr nz, .skip + ld a, [hl] + cp c + jr z, .Yes +.skip + inc hl + dec d + jr .loop +.Yes: + scf +.No: + jp CloseSRAM + +.AddMysteryGiftPartnerID: ; 104a56 (41:4a56) + call GetMysteryGiftBank + ld hl, sNumDailyMysteryGiftPartnerIDs + ld a, [hl] + inc [hl] + ld hl, sDailyMysteryGiftPartnerIDs ; inc hl + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [wMysteryGiftPartnerID] + ld [hli], a + ld a, [wMysteryGiftPartnerID + 1] + ld [hl], a + jp CloseSRAM + +.SaveMysteryGiftTrainerName: ; 104a71 (41:4a71) + call GetMysteryGiftBank + ld a, $1 + ld [sMysteryGiftTrainerHouseFlag], a + ld hl, wMysteryGiftPartnerName + ld de, sMysteryGiftPartnerName + ld bc, NAME_LENGTH + call CopyBytes + ld a, $1 + ld [de], a + inc de + ld hl, wMysteryGiftTrainerData + ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2 + call CopyBytes + jp CloseSRAM + +Function104a95: ; 104a95 (41:4a95) + di + callba ClearChannels + call Function104d5e + +.loop2 + call Function104d96 + call Function104ddd + ld a, [hMGStatusFlags] + cp $10 + jp z, Function104bd0 + cp $6c + jr nz, .loop2 + + ld a, [hPrintNum9] + cp $2 + jr z, Function104b22 + ld hl, hPrintNum1 + ld b, $1 + call Function104d56 + jr nz, .ly_loop + call Function104b49 + jp nz, Function104bd0 + jr Function104b0a + ; Delay frame +.ly_loop + ld a, [rLY] + cp $90 + jr c, .ly_loop + ld c, rRP % $100 + ld a, $c0 + ld [$ff00+c], a + ld b, 240 ; This might have been intended as a 4-second timeout buffer. + ; However, it is reset with each frame. +.loop3 + push bc + call MysteryGift_ReadJoypad + + ld b, $2 + ld c, rRP % $100 + ; Delay frame +.ly_loop2 + ld a, [$ff00+c] + and b + ld b, a + ld a, [rLY] + cp $90 + jr nc, .ly_loop2 +.ly_loop3 + ld a, [$ff00+c] + and b + ld b, a + ld a, [rLY] + cp $90 + jr c, .ly_loop3 + + ld a, b + pop bc + dec b + jr z, .loop2 ; we never jump here + or a + jr nz, .loop2 + ; Check if we've pressed the B button + ld a, [hMGJoypadReleased] + bit B_BUTTON_F, a + jr z, .loop3 + ld a, $10 + ld [hMGStatusFlags], a + jp Function104bd0 + +Function104b04: ; 104b04 (41:4b04) + call Function104b40 + jp nz, Function104bd0 +Function104b0a: ; 104b0a (41:4b0a) + call Function104d38 + jp nz, Function104bd0 + call Function104b88 + jp nz, Function104bd0 + call Function104d43 + jp nz, Function104bd0 + call Function105033 + jp Function104bd0 + +Function104b22: ; 104b22 (41:4b22) + call Function104b88 + jp nz, Function104bd0 + call Function104d43 + jp nz, Function104bd0 + call Function104b40 + jp nz, Function104bd0 + call Function104d38 + jp nz, Function104bd0 + call Function10502e + jp Function104bd0 + +Function104b40: ; 104b40 (41:4b40) + ld hl, hPrintNum1 + ld b, $1 + call Function104d56 + ret nz + +Function104b49: ; 104b49 (41:4b49) + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret nz + ld a, [hPrintNum1] + cp $96 + jp nz, Function104d32 + ld a, $90 + ld [hPrintNum1], a + call Function104d38 + ret nz + ld hl, hPrintNum1 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, wMysteryGiftTrainerData + ld a, [wca02] + ld b, a + call Function104d56 + ret nz + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104b88: ; 104b88 (41:4b88) + ld a, $96 + ld [hPrintNum1], a + ld hl, hPrintNum1 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, hPrintNum1 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret nz + ld a, [hPrintNum1] + cp $90 + jp nz, Function104d32 + call Function104d38 + ret nz + ld hl, OverworldMap + ld a, [wca02] + ld b, a + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104bd0: ; 104bd0 (41:4bd0) + nop + ld a, [hMGStatusFlags] + cp $10 + jr z, .quit + cp $6c + jr nz, .quit + ld hl, wca01 + dec [hl] + jr z, .quit + ld hl, wMysteryGiftTrainerData + ld de, wMysteryGiftPartnerData + ld bc, wMysteryGiftPartnerDataEnd - wMysteryGiftPartnerData + call CopyBytes + ld a, [wMysteryGiftTrainerData] + cp $3 + jr nc, .quit + callba StagePartyDataForMysteryGift + call MysteryGift_ClearTrainerData + ld a, $26 + ld [wca02], a + ld a, [hPrintNum9] + cp $2 + jr z, .asm_104c10 + call Function104d43 + jr nz, Function104bd0 + jp Function104b04 + +.asm_104c10 + call Function104d38 + jr nz, Function104bd0 + jp Function104b22 + +.quit + ld a, [hMGStatusFlags] + push af + call Function104da0 + xor a + ld [rIF], a + ld a, [rIE] + or $1 + ld [rIE], a + ei + call DelayFrame + pop af + ret + +Function104c2d: ; 104c2d (41:4c2d) + di + callba ClearChannels + call Function104d5e +.asm_104c37 + call Function104d96 + call Function104ddd + ld a, [hMGStatusFlags] + cp $10 + jp z, Function104d1c + cp $6c + jr nz, .asm_104c37 + ld a, [hPrintNum9] + cp $2 + jr z, .asm_104c6c + call Function104c8a + jp nz, Function104d1c + call Function104d38 + jp nz, Function104d1c + call Function104cd2 + jp nz, Function104d1c + call Function104d43 + jp nz, Function104d1c + call Function105033 + jp Function104d1c +.asm_104c6c + call Function104cd2 + jp nz, Function104d1c + call Function104d43 + jp nz, Function104d1c + call Function104c8a + jp nz, Function104d1c + call Function104d38 + jp nz, Function104d1c + call Function10502e + jp Function104d1c + +Function104c8a: ; 104c8a (41:4c8a) + ld hl, hPrintNum1 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret nz + ld a, [hPrintNum1] + cp $3c + jp nz, Function104d32 + swap a + ld [hPrintNum1], a + call Function104d38 + ret nz + ld hl, hPrintNum1 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, wMysteryGiftTrainerData + ld a, [wca02] + ld b, a + call Function104d56 + ret nz + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104cd2: ; 104cd2 (41:4cd2) + ld a, $3c + ld [hPrintNum1], a + ld hl, hPrintNum1 + ld b, $1 + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret nz + call Function104d43 + ret nz + ld hl, hPrintNum1 + ld b, $1 + call Function104d56 + ret nz + call Function105033 + ld a, [hMGStatusFlags] + cp $6c + ret nz + ld a, [hPrintNum1] + swap a + cp $3c + jp nz, Function104d32 + call Function104d38 + ret nz + ld hl, OverworldMap + ld a, [wca02] + ld b, a + call Function104d4e + ret nz + call Function10502e + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104d1c: ; 104d1c (41:4d1c) + nop + ld a, [hMGStatusFlags] + push af + call Function104da0 + xor a + ld [rIF], a + ld a, [rIE] + or $1 + ld [rIE], a + ei + call DelayFrame + pop af + ret + +Function104d32: ; 104d32 (41:4d32) + ld a, $80 + ld [hMGStatusFlags], a + and a + ret + +Function104d38: ; 104d38 (41:4d38) + call Function104d96 + call Function104e46 + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104d43: ; 104d43 (41:4d43) + call Function104d96 + call Function104dfe + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104d4e: ; 104d4e (41:4d4e) + call Function104e93 + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104d56: ; 104d56 (41:4d56) + call Function104f57 + ld a, [hMGStatusFlags] + cp $6c + ret + +Function104d5e: ; 104d5e (41:4d5e) + call Function104d74 + ld a, $4 + ld [rIE], a + xor a + ld [rIF], a + call Function104d96 + xor a + ld b, a +.asm_104d6d + inc a + jr nz, .asm_104d6d + inc b + jr nz, .asm_104d6d + ret + +Function104d74: ; 104d74 (41:4d74) + xor a + ld [rTAC], a + ld a, $fe + ld [rTMA], a + ld [rTIMA], a + ld a, $2 + ld [rTAC], a + or $4 + ld [rTAC], a + ret + +Function104d86: ; 104d86 (41:4d86) + xor a + ld [rTAC], a + ld [rTMA], a + ld [rTIMA], a + ld a, $2 + ld [rTAC], a + or $4 + ld [rTAC], a + ret + +Function104d96: ; 104d96 (41:4d96) + ld a, $c0 + call Function104e8c + ld a, $1 + ld [hPrintNum9], a + ret + +Function104da0: ; 104da0 (41:4da0) + xor a + call Function104e8c + ld a, $2 + ld [rTAC], a + ret + +Function104da9: ; 104da9 (41:4da9) + inc d + ret z + xor a + ld [rIF], a + halt + ld a, [$ff00+c] + bit 1, a + jr z, Function104da9 + or a + ret + +Function104db7: ; 104db7 (41:4db7) + inc d + ret z + xor a + ld [rIF], a + halt + ld a, [$ff00+c] + bit 1, a + jr nz, Function104db7 + or a + ret + +Function104dc5: ; 104dc5 (41:4dc5) + ld a, $c1 + ld [$ff00+c], a +.wait + dec d + ret z + xor a + ld [rIF], a + halt + jr .wait + +Function104dd1: ; 104dd1 (41:4dd1) + ld a, $c0 + ld [$ff00+c], a +.wait + dec d + ret z + xor a + ld [rIF], a + halt + jr .wait + +Function104ddd: ; 104ddd (41:4ddd) + ld d, $0 + ld e, d + ld a, $1 + ld [hPrintNum9], a +.loop + call MysteryGift_ReadJoypad + ld b, $2 + ld c, rRP % $100 + ld a, [hMGJoypadReleased] + bit B_BUTTON_F, a + jr z, .next + ld a, $10 + ld [hMGStatusFlags], a + ret + +.next + bit 0, a + jr nz, Function104e3a + ld a, [$ff00+c] + and b + jr nz, .loop + +Function104dfe: ; 104dfe (41:4dfe) + ld c, rRP % $100 + ld d, $0 + ld e, d + call Function104db7 + jp z, Function104f42 + ld d, e + call Function104da9 + jp z, Function104f42 + call Function104db7 + jp z, Function104f42 + call Function104da9 + jp z, Function104f42 + ld a, $6c + ld [hMGStatusFlags], a + ld d, $3d + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $5 + call Function104dd1 + ret + +Function104e3a: ; 104e3a (41:4e3a) + ; Wait a random amount of time + call Random + ld e, a + and $f + ld d, a +.loop + dec de + ld a, d + or e + jr nz, .loop +Function104e46: ; 104e46 (41:4e46) + ld a, $2 + ld [hPrintNum9], a + ld c, rRP % $100 + ld d, $0 + ld e, d + ld d, $3d + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $5 + call Function104dd1 + ld d, e + call Function104db7 + jp z, Function104f42 + ld d, e + call Function104da9 + jp z, Function104f42 + call Function104db7 + jp z, Function104f42 + call Function104da9 + jp z, Function104f42 + ld d, $3d + call Function104dd1 + ld a, $6c + ld [hMGStatusFlags], a + ret + +Function104e8c: ; 104e8c (41:4e8c) + ld [rRP], a + ld a, $ff + ld [hMGStatusFlags], a + ret + +Function104e93: ; 104e93 (41:4e93) + xor a + ld [hPrintNum5], a + ld [hPrintNum6], a + push hl + push bc + ld c, rRP % $100 + ld d, $3d + call Function104dd1 + ld hl, hPrintNum2 + ld a, $5a + ld [hli], a + ld [hl], b + dec hl + ld b, $2 + call Function104ed6 + pop bc + pop hl + call Function104ed6 + ld a, [hPrintNum5] + ld [hPrintNum2], a + ld a, [hPrintNum6] + ld [hPrintNum3], a + push hl + ld hl, hPrintNum2 + ld b, $2 + call Function104ed6 + ld hl, hMGStatusFlags + ld b, $1 + call Function104faf + ld a, [hPrintNum2] + ld [hPrintNum5], a + ld a, [hPrintNum3] + ld [hPrintNum6], a + pop hl + ret + +Function104ed6: ; 104ed6 (41:4ed6) + ld c, rRP % $100 + ld d, $5 + call Function104dd1 + ld d, $5 + call Function104dc5 + ld d, $15 + call Function104dd1 + ld a, b + cpl + ld b, a + ld a, $f4 + ld [rTMA], a +.asm_104eee + inc b + jr z, .asm_104f2e + ld a, $8 + ld [hPrintNum4], a + ld a, [hli] + ld e, a + ld a, [hPrintNum5] + add e + ld [hPrintNum5], a + ld a, [hPrintNum6] + adc $0 + ld [hPrintNum6], a +.asm_104f02 + xor a + ld [rIF], a + halt + ld a, $c1 + ld [rRP], a + ld d, $1 + ld a, e + rlca + ld e, a + jr nc, .asm_104f13 + inc d +.asm_104f13 + ld a, [rTIMA] + cp $f8 + jr c, .asm_104f13 + ld a, $c0 + ld [rRP], a + dec d + jr z, .asm_104f25 + xor a + ld [rIF], a + halt +.asm_104f25 + ld a, [hPrintNum4] + dec a + jr z, .asm_104eee + ld [hPrintNum4], a + jr .asm_104f02 +.asm_104f2e + ld a, $fe + ld [rTMA], a + xor a + ld [rIF], a + halt + ld d, $5 + call Function104dc5 + ld d, $11 + call Function104dd1 + ret + +Function104f42: ; 104f42 (41:4f42) + ld a, [hMGStatusFlags] + or $2 + ld [hMGStatusFlags], a + ret + +Function104f49: ; 104f49 (41:4f49) + ld a, [hMGStatusFlags] + or $1 + ld [hMGStatusFlags], a + ret + +Function104f50: ; 104f50 (41:4f50) + ld a, [hMGStatusFlags] + or $80 + ld [hMGStatusFlags], a + ret + +Function104f57: ; 104f57 (41:4f57) + xor a + ld [hPrintNum5], a + ld [hPrintNum6], a + push bc + push hl + ld hl, hPrintNum2 + ld b, $2 + call Function104faf + ld a, [hPrintNum3] + ld [hPrintNum8], a + ld b, a + pop hl + pop af + cp b + jp c, Function104f50 + ld a, [hPrintNum2] + cp $5a + jp nz, Function104f50 + call Function104faf + ld a, [hPrintNum5] + ld d, a + ld a, [hPrintNum6] + ld e, a + push hl + push de + ld hl, hPrintNum2 + ld b, $2 + call Function104faf + pop de + ld hl, hPrintNum2 + ld a, [hli] + xor d + ld b, a + ld a, [hl] + xor e + or b + call nz, Function104f49 + push de + ld d, $3d + call Function104dd1 + ld hl, hMGStatusFlags + ld b, $1 + call Function104ed6 + pop de + pop hl + ld a, d + ld [hPrintNum5], a + ld a, e + ld [hPrintNum6], a + ret + +Function104faf: ; 104faf (41:4faf) + ld c, rRP % $100 + ld d, $0 + call Function104db7 + jp z, Function104f42 + ld d, $0 + call Function104da9 + jp z, Function104f42 + ld d, $0 + call Function104db7 + jp z, Function104f42 + ld a, b + cpl + ld b, a + xor a + ld [hMGJoypadPressed + 2], a + call Function104d86 +.asm_104fd2 + inc b + jr z, .asm_10501a + ld a, $8 + ld [hPrintNum4], a +.asm_104fd9 + ld d, $0 +.asm_104fdb + inc d + jr z, .asm_104fe5 + ld a, [$ff00+c] + bit 1, a + jr z, .asm_104fdb + ld d, $0 +.asm_104fe5 + inc d + jr z, .asm_104fed + ld a, [$ff00+c] + bit 1, a + jr nz, .asm_104fe5 +.asm_104fed + ld a, [hMGJoypadPressed + 2] + ld d, a + ld a, [rTIMA] + ld [hMGJoypadPressed + 2], a + sub d + cp $12 + jr c, .asm_104ffd + set 0, e + jr .asm_104fff +.asm_104ffd + res 0, e +.asm_104fff + ld a, [hPrintNum4] + dec a + ld [hPrintNum4], a + jr z, .asm_10500b + ld a, e + rlca + ld e, a + jr .asm_104fd9 +.asm_10500b + ld a, e + ld [hli], a + ld a, [hPrintNum5] + add e + ld [hPrintNum5], a + ld a, [hPrintNum6] + adc $0 + ld [hPrintNum6], a + jr .asm_104fd2 +.asm_10501a + call Function104d74 + xor a + ld [rIF], a + ld d, $0 + call Function104da9 + jp z, Function104f42 + ld d, $10 + call Function104dd1 + ret + +Function10502e: ; 10502e (41:502e) + ld b, $0 + jp Function104e93 + +Function105033: ; 105033 (41:5033) + ld b, $0 + jp Function104f57 + +MysteryGift_ReadJoypad: ; 105038 (41:5038) +; We can only get four inputs at a time. +; We take d-pad first for no particular reason. + ld a, R_DPAD + ld [rJOYP], a +; Read twice to give the request time to take. + ld a, [rJOYP] + ld a, [rJOYP] + +; The Joypad register output is in the lo nybble (inversed). +; We make the hi nybble of our new container d-pad input. + cpl + and $f + swap a + +; We'll keep this in b for now. + ld b, a + +; Buttons make 8 total inputs (A, B, Select, Start). +; We can fit this into one byte. + ld a, R_BUTTONS + ld [rJOYP], a +; Wait for input to stabilize. +rept 6 + ld a, [rJOYP] +endr +; Buttons take the lo nybble. + cpl + and $f + or b + ld c, a +; To get the delta we xor the last frame's input with the new one. + ld a, [hMGJoypadPressed] + xor c +; Released this frame: + and c + ld [hMGJoypadReleased], a +; Pressed this frame: + ld a, c + ld [hMGJoypadPressed], a + ld a, $30 +; Reset the joypad register since we're done with it. + ld [rJOYP], a + ret + +MysteryGift_CheckAndSetDecorationAlreadyReceived: ; 105069 (41:5069) + call GetMysteryGiftBank + ld d, $0 + ld b, CHECK_FLAG + ld hl, sMysteryGiftDecorationsReceived + predef_id FlagPredef + push hl + push bc + call Predef + call CloseSRAM + ld a, c + and a + pop bc + pop hl + ret nz + call GetMysteryGiftBank + ld b, SET_FLAG + predef FlagPredef + call CloseSRAM + xor a + ret + +MysteryGift_CopyReceivedDecosToPC: ; 105091 (41:5091) + call GetMysteryGiftBank + ld c, $0 +.loop + push bc + ld d, $0 + ld b, CHECK_FLAG + ld hl, sMysteryGiftDecorationsReceived + predef FlagPredef + ld a, c + and a + pop bc + jr z, .skip + push bc + callab SetSpecificDecorationFlag + pop bc +.skip + inc c + ld a, c + cp Trophys - DecorationIDs + jr c, .loop + jp CloseSRAM + +Special_UnlockMysteryGift: ; 1050b9 + call GetMysteryGiftBank + ld hl, sMysteryGiftUnlocked + ld a, [hl] + inc a + jr nz, .ok + ld [hld], a + ld [hl], a +.ok + jp CloseSRAM +; 1050c8 + +Function1050c8: ; 1050c8 + call GetMysteryGiftBank + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp $ff + jr z, .okay + xor a + ld [sNumDailyMysteryGiftPartnerIDs], a +.okay + jp CloseSRAM +; 1050d9 + + +BackupMysteryGift: ; 1050d9 + call GetMysteryGiftBank + ld hl, sMysteryGiftItem + ld de, sBackupMysteryGiftItem + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp CloseSRAM +; 1050ea + + +RestoreMysteryGift: ; 1050ea (41:50ea) + call GetMysteryGiftBank + ld hl, sBackupMysteryGiftItem + ld de, sMysteryGiftItem + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp CloseSRAM + +MysteryGift_ClearTrainerData: ; 1050fb (41:50fb) + ld hl, wMysteryGiftTrainerData + xor a + ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData +.loop + ld [hli], a + dec b + jr nz, .loop + ret + + +GetMysteryGiftBank: ; 105106 + ld a, BANK(sBackupMysteryGiftItem) + jp GetSRAMBank +; 10510b + + +StagePartyDataForMysteryGift: ; 10510b (41:510b) +; You will be sending this data to your mystery gift partner. +; Structure is the same as a trainer with species and moves +; defined. + ld a, BANK(sPokemonData) + call GetSRAMBank + ld de, wMysteryGiftStaging + ld bc, sPokemonData + PartyMons - wPokemonData + ld hl, sPokemonData + PartySpecies - wPokemonData +.loop + ld a, [hli] + cp -1 + jr z, .party_end + cp EGG + jr z, .next + push hl + ; copy level + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + ld [de], a + inc de + ; copy species + ld hl, MON_SPECIES + add hl, bc + ld a, [hl] + ld [de], a + inc de + ; copy moves + ld hl, MON_MOVES + add hl, bc + push bc + ld bc, NUM_MOVES + call CopyBytes + pop bc + pop hl +.next + push hl + ld hl, PARTYMON_STRUCT_LENGTH + add hl, bc + ld b, h + ld c, l + pop hl + jr .loop +.party_end + ld a, -1 + ld [de], a + ld a, $26 + ld [wca00], a + jp CloseSRAM + +InitMysteryGiftLayout: ; 105153 (41:5153) + call ClearBGPalettes + call DisableLCD + ld hl, MysteryGiftGFX + ld de, VTiles2 tile $00 + ld a, BANK(MysteryGiftGFX) + ld bc, MysteryGiftGFXEnd - MysteryGiftGFX + call FarCopyBytes + hlcoord 0, 0 + ld a, $42 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call ByteFill + hlcoord 3, 7 + lb bc, 9, 15 + call ClearBox + hlcoord 0, 0 + ld a, $0 + ld [hli], a + inc a + ld [hl], a + hlcoord 0, 1 + inc a + ld [hli], a + inc a + ld [hl], a + hlcoord 7, 1 + ld a, $12 + call .Load5GFX + hlcoord 2, 2 + ld a, $17 + call .Load16GFX + hlcoord 2, 3 + ld a, $27 + call .Load16GFX + hlcoord 9, 4 + ld a, $37 + ld [hli], a + inc a + ld [hl], a + hlcoord 1, 2 + ld [hl], $4 + hlcoord 1, 3 + ld a, $5 + call .Load14Column + ld a, $9 + hlcoord 18, 5 + call .Load11Column + hlcoord 2, 5 + ld a, $b + call .Load16Row + hlcoord 2, 16 + ld a, $7 + call .Load16Row + hlcoord 2, 5 + ld a, $d + call .Load5GFX + hlcoord 7, 5 + ld [hl], $c + hlcoord 18, 5 + ld [hl], $a + hlcoord 18, 16 + ld [hl], $8 + hlcoord 1, 16 + ld [hl], $6 + hlcoord 2, 6 + ld a, $3a + call .Load16Row + hlcoord 2, 15 + ld a, $40 + call .Load16Row + hlcoord 2, 6 + ld a, $3c + call .Load9Column + hlcoord 17, 6 + ld a, $3e + call .Load9Column + hlcoord 2, 6 + ld [hl], $39 + hlcoord 17, 6 + ld [hl], $3b + hlcoord 2, 15 + ld [hl], $3f + hlcoord 17, 15 + ld [hl], $41 + call EnableLCD + call WaitBGMap + ld b, SCGB_MYSTERY_GIFT + call GetSGBLayout + call SetPalettes + ret + +.Load5GFX: ; 10522e (41:522e) + ld b, 5 + jr .gfx_loop +; 105232 (41:5232) + +.Load6GFX: ; unreferenced + ld b, 6 + jr .gfx_loop + +.Load16GFX: ; 105236 (41:5236) + ld b, 16 + +.gfx_loop ; 105238 (41:5238) + ld [hli], a + inc a + dec b + jr nz, .gfx_loop + ret + +.Load9Column: ; 10523e (41:523e) + ld b, 9 + jr .col_loop + +.Load11Column: ; 105242 (41:5242) + ld b, 11 + jr .col_loop + +.Load14Column: ; 105246 (41:5246) + ld b, 14 + +.col_loop ; 105248 (41:5248) + ld [hl], a + ld de, SCREEN_WIDTH + add hl, de + dec b + jr nz, .col_loop + ret + +.Load16Row: ; 105251 (41:5251) + ld b, 16 +.row_loop + ld [hli], a + dec b + jr nz, .row_loop + ret + +MysteryGiftGFX: ; 105258 +INCBIN "gfx/mystery_gift/mystery_gift.2bpp" +MysteryGiftGFXEnd: + +Function105688: ; 105688 (41:5688) + call ClearTileMap + call ClearSprites + call WaitBGMap + call Function1057d7 + hlcoord 3, 8 + ld de, String_10572e + call PlaceString + call WaitBGMap + call Function10578c + call MysteryGift_ClearTrainerData + ld a, $24 + ld [wca02], a + ld a, [rIE] + push af + call Function104c2d + ld d, a + xor a + ld [rIF], a + pop af + ld [rIE], a + ld a, d + cp $10 + jp z, Function105712 + cp $6c + jp nz, Function10571a + call Function1056eb + ld c, 60 + call DelayFrames + call Function105777 + ld hl, Text_ReceivedCard + call PrintText + ld de, wMysteryGiftTrainerData + callba Function8ac70 + ld a, c + ld [wd265], a + ld hl, Text_CardNotRegistered + jr c, asm_105726 + ld hl, Text_ListedCardAsNumber + jr asm_105726 + +Function1056eb: ; 1056eb (41:56eb) + ld c, $10 +.asm_1056ed + ld hl, Sprites + ld b, $8 +.asm_1056f2 + dec [hl] +rept 4 + inc hl +endr + dec b + jr nz, .asm_1056f2 + ld hl, Sprites + $20 + ld b, $8 +.asm_1056ff + inc [hl] +rept 4 + inc hl +endr + dec b + jr nz, .asm_1056ff + dec c + ret z + push bc + ld c, 4 + call DelayFrames + pop bc + jr .asm_1056ed + +Function105712: ; 105712 (41:5712) + call Function105777 + ld hl, Text_MGLinkCanceled + jr asm_105726 + +Function10571a: ; 10571a (41:571a) + call Function105777 + ld hl, Text_MGCommError + call PrintText + jp Function105688 + +asm_105726: ; 105726 (41:5726) + call PrintText + ld a, $e3 + ld [rLCDC], a + ret +; 10572e (41:572e) + +String_10572e: ; 10572e + db "エーボタン¯おすと" + next "つうしんおこなわれるよ!" + next "ビーボタン¯おすと" + next "つうしん¯ちゅうし します" + db "@" + +; 10575e + +Text_ReceivedCard: ; 10575e + text_jump UnknownText_0x1c051a + db "@" + +Text_ListedCardAsNumber: ; 105763 + text_jump UnknownText_0x1c0531 + db "@" + +Text_CardNotRegistered: ; 105768 + text_jump UnknownText_0x1c0555 + db "@" + +Text_MGLinkCanceled: ; 10576d + text_jump UnknownText_0x1c0573 + db "@" + +Text_MGCommError: ; 105772 + text_jump UnknownText_0x1c0591 + db "@" +; 105777 + +Function105777: ; 105777 (41:5777) + call ClearSprites + call ClearTileMap + call EnableLCD + call WaitBGMap + ld b, SCGB_DIPLOMA + call GetSGBLayout + call SetPalettes + ret + +Function10578c: ; 10578c (41:578c) + ld de, OverworldMap + ld a, BANK(sPlayerData) + call GetSRAMBank + ld hl, sPlayerData + PlayerName - wPlayerData + ld bc, NAME_LENGTH + call CopyBytes + ld hl, sPlayerData + PlayerID - wPlayerData + ld bc, 2 + call CopyBytes + ld hl, sPlayerData + wSecretID - wPlayerData + ld bc, 2 + call CopyBytes + call CloseSRAM + ld a, BANK(sCrystalData) + call GetSRAMBank + ld a, [sCrystalData + 0] + ld [de], a + inc de + ld a, $4 + call GetSRAMBank + ld hl, $a603 + ld bc, $8 + call CopyBytes + ld hl, $a007 + ld bc, $c + call CopyBytes + call CloseSRAM + ret + +Function1057d7: ; 1057d7 (41:57d7) + call ClearBGPalettes + call DisableLCD + ld hl, MysteryGiftJP_GFX + ld de, VTiles2 tile $00 + ld a, BANK(MysteryGiftJP_GFX) + lb bc, 4, 0 + call FarCopyBytes + ld hl, MysteryGiftJP_GFX + $400 + ld de, VTiles0 tile $00 + ld a, BANK(MysteryGiftJP_GFX) + ld bc, $80 + call FarCopyBytes + hlcoord 0, 0 + ld a, $3f + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call ByteFill + hlcoord 3, 7 + lb bc, 9, 15 + call ClearBox + hlcoord 0, 0 + ld a, $0 + ld [hli], a + inc a + ld [hl], a + hlcoord 0, 1 + inc a + ld [hli], a + inc a + ld [hl], a + hlcoord 4, 2 + ld a, $13 + call .Load11Row + hlcoord 4, 3 + ld a, $1e + call .Load12Row + hlcoord 4, 4 + ld a, $2a + call .Load12Row + hlcoord 1, 2 + ld [hl], $4 + hlcoord 1, 3 + ld a, $5 + call .Load14Column + ld a, $9 + hlcoord 18, 5 + call .Load11Column + hlcoord 2, 5 + ld a, $b + call .Load16Row + hlcoord 2, 16 + ld a, $7 + call .Load16Row + hlcoord 2, 5 + ld a, $d + call .Load6Row + hlcoord 8, 5 + ld [hl], $c + hlcoord 18, 5 + ld [hl], $a + hlcoord 18, 16 + ld [hl], $8 + hlcoord 1, 16 + ld [hl], $6 + hlcoord 2, 6 + ld a, $37 + call .Load16Row + hlcoord 2, 15 + ld a, $3d + call .Load16Row + hlcoord 2, 6 + ld a, $39 + call .Load9Column + hlcoord 17, 6 + ld a, $3b + call .Load9Column + hlcoord 2, 6 + ld [hl], $36 + hlcoord 17, 6 + ld [hl], $38 + hlcoord 2, 15 + ld [hl], $3c + hlcoord 17, 15 + ld [hl], $3e + ld de, Sprites + ld hl, .OAM_data + ld bc, $40 + call CopyBytes + call EnableLCD + call WaitBGMap + ld b, $2 + callba GetMysteryGift_MobileAdapterLayout + jp SetPalettes + +.Load6Row: ; 1058c6 (41:58c6) + ld b, 6 + jr .row_loop + +.Load11Row: ; 1058ca (41:58ca) + ld b, 11 + jr .row_loop + +.Load12Row: ; 1058ce (41:58ce) + ld b, 12 + +.row_loop ; 1058d0 (41:58d0) + ld [hli], a + inc a + dec b + jr nz, .row_loop + ret + +.Load9Column: ; 1058d6 (41:58d6) + ld b, 9 + jr .column_loop + +.Load11Column: ; 1058da (41:58da) + ld b, 11 + jr .column_loop + +.Load14Column: ; 1058de (41:58de) + ld b, 14 + +.column_loop ; 1058e0 (41:58e0) + ld [hl], a + ld de, SCREEN_WIDTH + add hl, de + dec b + jr nz, .column_loop + ret + +.Load16Row: ; 1058e9 (41:58e9) + ld b, 16 +.row_loop_no_inc + ld [hli], a + dec b + jr nz, .row_loop_no_inc + ret +; 1058f0 (41:58f0) + +.OAM_data: ; 1058f0 + dsprite 2, 1, 6, 4, $00, $00 + dsprite 2, 1, 7, 4, $01, $00 + dsprite 2, 1, 8, 4, $02, $00 + dsprite 2, 1, 9, 4, $03, $00 + dsprite 3, 1, 6, 4, $04, $00 + dsprite 3, 1, 7, 4, $05, $00 + dsprite 3, 1, 8, 4, $06, $00 + dsprite 3, 1, 9, 4, $07, $00 + dsprite 0, 1, 11, 4, $00, $00 + dsprite 0, 1, 12, 4, $01, $00 + dsprite 0, 1, 13, 4, $02, $00 + dsprite 0, 1, 14, 4, $03, $00 + dsprite 1, 1, 11, 4, $04, $00 + dsprite 1, 1, 12, 4, $05, $00 + dsprite 1, 1, 13, 4, $06, $00 + dsprite 1, 1, 14, 4, $07, $00 + +; japanese mystery gift gfx +MysteryGiftJP_GFX: ; 105930 +INCBIN "gfx/mystery_gift/mystery_gift_jp.2bpp" diff --git a/engine/mystery_gift_2.asm b/engine/mystery_gift_2.asm new file mode 100755 index 000000000..dc0baf39c --- /dev/null +++ b/engine/mystery_gift_2.asm @@ -0,0 +1,152 @@ +PrepMysteryGiftDataToSend: ; 2c642 (b:4642) + ld de, wMysteryGiftStaging + ld a, $1 + ld [de], a + inc de ; wc801 + ld a, BANK(sGameData) + call GetSRAMBank + ld hl, sPlayerData + PlayerID - wPlayerData + ld a, [hli] + ld [de], a + ld b, a + inc de ; wc802 + ld a, [hl] + ld [de], a + ld c, a + inc de ; wc803 + push bc + ld hl, sPlayerData + PlayerName - wPlayerData + ld bc, NAME_LENGTH + call CopyBytes + push de ; wc80e + ld hl, sPokemonData + PokedexCaught - wPokemonData + ld b, EndPokedexCaught - PokedexCaught + call CountSetBits + pop de + pop bc + ld a, [wd265] + ld [de], a + inc de ; wc80f + call CloseSRAM + call Random + and $1 + ld [de], a + inc de ; wc810 + call .RandomSample + ld [de], a + inc de ; wc811 + ld a, c + ld c, b + ld b, a + call .RandomSample + ld [de], a + inc de ; wc812 + ld a, BANK(sBackupMysteryGiftItem) + call GetSRAMBank + ld a, [sBackupMysteryGiftItem] + ld [de], a + inc de + ld a, [sBackupMysteryGiftItem + 1] + ld [de], a + ld a, $14 + ld [wca00], a + call CloseSRAM + ld hl, wMysteryGiftStaging + ld de, wMysteryGiftPlayerData + ld bc, wMysteryGiftPlayerDataEnd - wMysteryGiftPlayerData + jp CopyBytes + +.RandomSample: ; 2c6ac (b:46ac) + push de + call Random + cp $19 ; 10 percent + jr c, .tenpercent + call Random + and $7 + ld d, a + rl d + ld e, $80 +.loop + rlc e + dec a + jr nz, .loop + ld a, e + and c + jr z, .skip + ld a, $1 +.skip + add d + jr .done + +.tenpercent + call Random + cp $32 ; 20 percent + jr c, .twopercent + call Random + and $3 + ld d, a + rl d + ld e, $80 +.loop2 + rlc e + dec a + jr nz, .loop2 + ld a, e + and b + jr z, .skip2 + ld a, $1 +.skip2 + add d + add $10 + jr .done + +.twopercent + call Random + cp $32 ; 50 ; 20 percent + jr c, .pointfourpercent + ld a, b + swap a + and $7 + add $18 + jr .done + +.pointfourpercent + ld a, b + and $80 + ld a, $20 + jr z, .done + ld a, $21 + +.done + pop de + ret + +MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708) + ld a, c + cp MysteryGiftItemsEnd - MysteryGiftItems + jr nc, MysteryGiftFallbackItem + ld hl, MysteryGiftItems + ld b, 0 + add hl, bc + ld c, [hl] + ret + +MysteryGiftGetDecoration: ; 2c715 (b:4715) + ld a, c + cp MysteryGiftDecosEnd - MysteryGiftDecos + jr nc, MysteryGiftFallbackItem + ld hl, MysteryGiftDecos + ld b, 0 + add hl, bc + ld c, [hl] + ret + +MysteryGiftFallbackItem: ; 2c722 (b:4722) + ld c, DECO_POLKADOT_BED ; GREAT_BALL + ret +; 2c725 (b:4725) + + +INCLUDE "data/mystery_gift/items.asm" + +INCLUDE "data/mystery_gift/decos.asm" diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm deleted file mode 100755 index 8204ab332..000000000 --- a/engine/mysterygift.asm +++ /dev/null @@ -1,1735 +0,0 @@ -DoMysteryGift: ; 1048ba (41:48ba) - call ClearTileMap - call ClearSprites - call WaitBGMap - call InitMysteryGiftLayout - hlcoord 3, 8 - ld de, .String_PressAToLink_BToCancel - call PlaceString - call WaitBGMap - callba PrepMysteryGiftDataToSend - call MysteryGift_ClearTrainerData - ld a, $2 - ld [wca01], a - ld a, $14 - ld [wca02], a - ld a, [rIE] - push af - - call Function104a95 - - ld d, a - xor a - ld [rIF], a - pop af - ld [rIE], a - push de - call ClearTileMap - call EnableLCD - call WaitBGMap - ld b, SCGB_DIPLOMA - call GetSGBLayout - call SetPalettes - pop de - hlcoord 2, 8 - ld a, d - ld de, .Text_LinkCanceled ; Link has been canceled - cp $10 - jp z, .LinkCanceled - cp $6c - jp nz, .CommunicationError - ld a, [wc900] - cp 3 - jr z, .skip_checks - call .CheckAlreadyGotFiveGiftsToday - ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day - jp nc, .PrintTextAndExit - call .CheckAlreadyGotAGiftFromThatPerson - ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person - jp c, .PrintTextAndExit -.skip_checks - ld a, [wMysteryGiftPlayerBackupItem] - and a - jp nz, .GiftWaiting - ld a, [wMysteryGiftPartnerBackupItem] - and a - jp nz, .FriendNotReady - ld a, [wc900] - cp 3 - jr z, .skip_append_save - call .AddMysteryGiftPartnerID - ld a, [wc900] - cp 4 - jr z, .skip_append_save - call .SaveMysteryGiftTrainerName - callba RestoreMobileEventIndex - callba TrainerRankings_MysteryGift - callba BackupMobileEventIndex -.skip_append_save - ld a, [wMysteryGiftPartnerSentDeco] - and a - jr z, .item - ld a, [wMysteryGiftPartnerWhichDeco] - ld c, a - callba MysteryGiftGetDecoration - push bc - call MysteryGift_CheckAndSetDecorationAlreadyReceived - pop bc - jr nz, .item - callab GetDecorationName_c - ld h, d - ld l, e - ld de, StringBuffer1 - ld bc, ITEM_NAME_LENGTH - call CopyBytes - ld hl, .Text_SentToHome ; sent decoration to home - jr .PrintTextAndExit - -.item - call GetMysteryGiftBank - ld a, [wMysteryGiftPartnerWhichItem] - ld c, a - callba MysteryGiftGetItemHeldEffect - ld a, c - ld [sBackupMysteryGiftItem], a - ld [wNamedObjectIndexBuffer], a - call CloseSRAM - call GetItemName - ld hl, .Text_Sent ; sent item - jr .PrintTextAndExit - -.LinkCanceled: ; 1049af (41:49af) - ld hl, .Text_LinkCanceled ; Link has been canceled - jr .PrintTextAndExit - -.CommunicationError: ; 1049b4 (41:49b4) - ld hl, .Text_CommunicationError ; Communication error - call PrintText - jp DoMysteryGift - -.GiftWaiting: ; 1049bd (41:49bd) - ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter - jr .PrintTextAndExit - -.FriendNotReady: ; 1049c2 (41:49c2) - ld hl, .Text_FriendNotReady ; friend not ready - -.PrintTextAndExit: ; 1049c5 (41:49c5) - call PrintText - ld a, $e3 - ld [rLCDC], a - ret -; 1049cd (41:49cd) - -.String_PressAToLink_BToCancel: ; 1049cd - db "Press A to" - next "link IR-Device" - next "Press B to" - next "cancel it." - db "@" -; 1049fd - -.Text_LinkCanceled: ; 1049fd - text_jump UnknownText_0x1c0436 - db "@" -; 104a02 - -.Text_CommunicationError: ; 104a02 - text_jump UnknownText_0x1c0454 - db "@" -; 104a07 - -.Text_ReceiveGiftAtCounter: ; 104a07 - text_jump UnknownText_0x1c046a - db "@" -; 104a0c - -.Text_FriendNotReady: ; 104a0c - text_jump UnknownText_0x1c048e - db "@" -; 104a11 - -.Text_MaxFiveGifts: ; 104a11 - text_jump UnknownText_0x1c04a7 - db "@" -; 104a16 - -.Text_MaxOneGiftPerPerson: ; 104a16 - text_jump UnknownText_0x1c04c6 - db "@" -; 104a1b - -.Text_Sent: ; 104a1b - text_jump UnknownText_0x1c04e9 - db "@" -; 104a20 - -.Text_SentToHome: ; 104a20 - text_jump UnknownText_0x1c04fa - db "@" -; 104a25 - -.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25) - call GetMysteryGiftBank - ld a, [sNumDailyMysteryGiftPartnerIDs] - cp $5 - jp CloseSRAM - -.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30) - call GetMysteryGiftBank - ld a, [wMysteryGiftPartnerID] - ld b, a - ld a, [wMysteryGiftPartnerID + 1] - ld c, a - ld a, [sNumDailyMysteryGiftPartnerIDs] - ld d, a - ld hl, sDailyMysteryGiftPartnerIDs -.loop - ld a, d - and a - jr z, .No - ld a, [hli] - cp b - jr nz, .skip - ld a, [hl] - cp c - jr z, .Yes -.skip - inc hl - dec d - jr .loop -.Yes: - scf -.No: - jp CloseSRAM - -.AddMysteryGiftPartnerID: ; 104a56 (41:4a56) - call GetMysteryGiftBank - ld hl, sNumDailyMysteryGiftPartnerIDs - ld a, [hl] - inc [hl] - ld hl, sDailyMysteryGiftPartnerIDs ; inc hl - ld e, a - ld d, $0 - add hl, de - add hl, de - ld a, [wMysteryGiftPartnerID] - ld [hli], a - ld a, [wMysteryGiftPartnerID + 1] - ld [hl], a - jp CloseSRAM - -.SaveMysteryGiftTrainerName: ; 104a71 (41:4a71) - call GetMysteryGiftBank - ld a, $1 - ld [sMysteryGiftTrainerHouseFlag], a - ld hl, wMysteryGiftPartnerName - ld de, sMysteryGiftPartnerName - ld bc, NAME_LENGTH - call CopyBytes - ld a, $1 - ld [de], a - inc de - ld hl, wMysteryGiftTrainerData - ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2 - call CopyBytes - jp CloseSRAM - -Function104a95: ; 104a95 (41:4a95) - di - callba ClearChannels - call Function104d5e - -.loop2 - call Function104d96 - call Function104ddd - ld a, [hMGStatusFlags] - cp $10 - jp z, Function104bd0 - cp $6c - jr nz, .loop2 - - ld a, [hPrintNum9] - cp $2 - jr z, Function104b22 - ld hl, hPrintNum1 - ld b, $1 - call Function104d56 - jr nz, .ly_loop - call Function104b49 - jp nz, Function104bd0 - jr Function104b0a - ; Delay frame -.ly_loop - ld a, [rLY] - cp $90 - jr c, .ly_loop - ld c, rRP % $100 - ld a, $c0 - ld [$ff00+c], a - ld b, 240 ; This might have been intended as a 4-second timeout buffer. - ; However, it is reset with each frame. -.loop3 - push bc - call MysteryGift_ReadJoypad - - ld b, $2 - ld c, rRP % $100 - ; Delay frame -.ly_loop2 - ld a, [$ff00+c] - and b - ld b, a - ld a, [rLY] - cp $90 - jr nc, .ly_loop2 -.ly_loop3 - ld a, [$ff00+c] - and b - ld b, a - ld a, [rLY] - cp $90 - jr c, .ly_loop3 - - ld a, b - pop bc - dec b - jr z, .loop2 ; we never jump here - or a - jr nz, .loop2 - ; Check if we've pressed the B button - ld a, [hMGJoypadReleased] - bit B_BUTTON_F, a - jr z, .loop3 - ld a, $10 - ld [hMGStatusFlags], a - jp Function104bd0 - -Function104b04: ; 104b04 (41:4b04) - call Function104b40 - jp nz, Function104bd0 -Function104b0a: ; 104b0a (41:4b0a) - call Function104d38 - jp nz, Function104bd0 - call Function104b88 - jp nz, Function104bd0 - call Function104d43 - jp nz, Function104bd0 - call Function105033 - jp Function104bd0 - -Function104b22: ; 104b22 (41:4b22) - call Function104b88 - jp nz, Function104bd0 - call Function104d43 - jp nz, Function104bd0 - call Function104b40 - jp nz, Function104bd0 - call Function104d38 - jp nz, Function104bd0 - call Function10502e - jp Function104bd0 - -Function104b40: ; 104b40 (41:4b40) - ld hl, hPrintNum1 - ld b, $1 - call Function104d56 - ret nz - -Function104b49: ; 104b49 (41:4b49) - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret nz - ld a, [hPrintNum1] - cp $96 - jp nz, Function104d32 - ld a, $90 - ld [hPrintNum1], a - call Function104d38 - ret nz - ld hl, hPrintNum1 - ld b, $1 - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret nz - call Function104d43 - ret nz - ld hl, wMysteryGiftTrainerData - ld a, [wca02] - ld b, a - call Function104d56 - ret nz - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104b88: ; 104b88 (41:4b88) - ld a, $96 - ld [hPrintNum1], a - ld hl, hPrintNum1 - ld b, $1 - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret nz - call Function104d43 - ret nz - ld hl, hPrintNum1 - ld b, $1 - call Function104d56 - ret nz - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret nz - ld a, [hPrintNum1] - cp $90 - jp nz, Function104d32 - call Function104d38 - ret nz - ld hl, OverworldMap - ld a, [wca02] - ld b, a - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104bd0: ; 104bd0 (41:4bd0) - nop - ld a, [hMGStatusFlags] - cp $10 - jr z, .quit - cp $6c - jr nz, .quit - ld hl, wca01 - dec [hl] - jr z, .quit - ld hl, wMysteryGiftTrainerData - ld de, wMysteryGiftPartnerData - ld bc, wMysteryGiftPartnerDataEnd - wMysteryGiftPartnerData - call CopyBytes - ld a, [wMysteryGiftTrainerData] - cp $3 - jr nc, .quit - callba StagePartyDataForMysteryGift - call MysteryGift_ClearTrainerData - ld a, $26 - ld [wca02], a - ld a, [hPrintNum9] - cp $2 - jr z, .asm_104c10 - call Function104d43 - jr nz, Function104bd0 - jp Function104b04 - -.asm_104c10 - call Function104d38 - jr nz, Function104bd0 - jp Function104b22 - -.quit - ld a, [hMGStatusFlags] - push af - call Function104da0 - xor a - ld [rIF], a - ld a, [rIE] - or $1 - ld [rIE], a - ei - call DelayFrame - pop af - ret - -Function104c2d: ; 104c2d (41:4c2d) - di - callba ClearChannels - call Function104d5e -.asm_104c37 - call Function104d96 - call Function104ddd - ld a, [hMGStatusFlags] - cp $10 - jp z, Function104d1c - cp $6c - jr nz, .asm_104c37 - ld a, [hPrintNum9] - cp $2 - jr z, .asm_104c6c - call Function104c8a - jp nz, Function104d1c - call Function104d38 - jp nz, Function104d1c - call Function104cd2 - jp nz, Function104d1c - call Function104d43 - jp nz, Function104d1c - call Function105033 - jp Function104d1c -.asm_104c6c - call Function104cd2 - jp nz, Function104d1c - call Function104d43 - jp nz, Function104d1c - call Function104c8a - jp nz, Function104d1c - call Function104d38 - jp nz, Function104d1c - call Function10502e - jp Function104d1c - -Function104c8a: ; 104c8a (41:4c8a) - ld hl, hPrintNum1 - ld b, $1 - call Function104d56 - ret nz - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret nz - ld a, [hPrintNum1] - cp $3c - jp nz, Function104d32 - swap a - ld [hPrintNum1], a - call Function104d38 - ret nz - ld hl, hPrintNum1 - ld b, $1 - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret nz - call Function104d43 - ret nz - ld hl, wMysteryGiftTrainerData - ld a, [wca02] - ld b, a - call Function104d56 - ret nz - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104cd2: ; 104cd2 (41:4cd2) - ld a, $3c - ld [hPrintNum1], a - ld hl, hPrintNum1 - ld b, $1 - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret nz - call Function104d43 - ret nz - ld hl, hPrintNum1 - ld b, $1 - call Function104d56 - ret nz - call Function105033 - ld a, [hMGStatusFlags] - cp $6c - ret nz - ld a, [hPrintNum1] - swap a - cp $3c - jp nz, Function104d32 - call Function104d38 - ret nz - ld hl, OverworldMap - ld a, [wca02] - ld b, a - call Function104d4e - ret nz - call Function10502e - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104d1c: ; 104d1c (41:4d1c) - nop - ld a, [hMGStatusFlags] - push af - call Function104da0 - xor a - ld [rIF], a - ld a, [rIE] - or $1 - ld [rIE], a - ei - call DelayFrame - pop af - ret - -Function104d32: ; 104d32 (41:4d32) - ld a, $80 - ld [hMGStatusFlags], a - and a - ret - -Function104d38: ; 104d38 (41:4d38) - call Function104d96 - call Function104e46 - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104d43: ; 104d43 (41:4d43) - call Function104d96 - call Function104dfe - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104d4e: ; 104d4e (41:4d4e) - call Function104e93 - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104d56: ; 104d56 (41:4d56) - call Function104f57 - ld a, [hMGStatusFlags] - cp $6c - ret - -Function104d5e: ; 104d5e (41:4d5e) - call Function104d74 - ld a, $4 - ld [rIE], a - xor a - ld [rIF], a - call Function104d96 - xor a - ld b, a -.asm_104d6d - inc a - jr nz, .asm_104d6d - inc b - jr nz, .asm_104d6d - ret - -Function104d74: ; 104d74 (41:4d74) - xor a - ld [rTAC], a - ld a, $fe - ld [rTMA], a - ld [rTIMA], a - ld a, $2 - ld [rTAC], a - or $4 - ld [rTAC], a - ret - -Function104d86: ; 104d86 (41:4d86) - xor a - ld [rTAC], a - ld [rTMA], a - ld [rTIMA], a - ld a, $2 - ld [rTAC], a - or $4 - ld [rTAC], a - ret - -Function104d96: ; 104d96 (41:4d96) - ld a, $c0 - call Function104e8c - ld a, $1 - ld [hPrintNum9], a - ret - -Function104da0: ; 104da0 (41:4da0) - xor a - call Function104e8c - ld a, $2 - ld [rTAC], a - ret - -Function104da9: ; 104da9 (41:4da9) - inc d - ret z - xor a - ld [rIF], a - halt - ld a, [$ff00+c] - bit 1, a - jr z, Function104da9 - or a - ret - -Function104db7: ; 104db7 (41:4db7) - inc d - ret z - xor a - ld [rIF], a - halt - ld a, [$ff00+c] - bit 1, a - jr nz, Function104db7 - or a - ret - -Function104dc5: ; 104dc5 (41:4dc5) - ld a, $c1 - ld [$ff00+c], a -.wait - dec d - ret z - xor a - ld [rIF], a - halt - jr .wait - -Function104dd1: ; 104dd1 (41:4dd1) - ld a, $c0 - ld [$ff00+c], a -.wait - dec d - ret z - xor a - ld [rIF], a - halt - jr .wait - -Function104ddd: ; 104ddd (41:4ddd) - ld d, $0 - ld e, d - ld a, $1 - ld [hPrintNum9], a -.loop - call MysteryGift_ReadJoypad - ld b, $2 - ld c, rRP % $100 - ld a, [hMGJoypadReleased] - bit B_BUTTON_F, a - jr z, .next - ld a, $10 - ld [hMGStatusFlags], a - ret - -.next - bit 0, a - jr nz, Function104e3a - ld a, [$ff00+c] - and b - jr nz, .loop - -Function104dfe: ; 104dfe (41:4dfe) - ld c, rRP % $100 - ld d, $0 - ld e, d - call Function104db7 - jp z, Function104f42 - ld d, e - call Function104da9 - jp z, Function104f42 - call Function104db7 - jp z, Function104f42 - call Function104da9 - jp z, Function104f42 - ld a, $6c - ld [hMGStatusFlags], a - ld d, $3d - call Function104dd1 - ld d, $5 - call Function104dc5 - ld d, $15 - call Function104dd1 - ld d, $5 - call Function104dc5 - ld d, $5 - call Function104dd1 - ret - -Function104e3a: ; 104e3a (41:4e3a) - ; Wait a random amount of time - call Random - ld e, a - and $f - ld d, a -.loop - dec de - ld a, d - or e - jr nz, .loop -Function104e46: ; 104e46 (41:4e46) - ld a, $2 - ld [hPrintNum9], a - ld c, rRP % $100 - ld d, $0 - ld e, d - ld d, $3d - call Function104dd1 - ld d, $5 - call Function104dc5 - ld d, $15 - call Function104dd1 - ld d, $5 - call Function104dc5 - ld d, $5 - call Function104dd1 - ld d, e - call Function104db7 - jp z, Function104f42 - ld d, e - call Function104da9 - jp z, Function104f42 - call Function104db7 - jp z, Function104f42 - call Function104da9 - jp z, Function104f42 - ld d, $3d - call Function104dd1 - ld a, $6c - ld [hMGStatusFlags], a - ret - -Function104e8c: ; 104e8c (41:4e8c) - ld [rRP], a - ld a, $ff - ld [hMGStatusFlags], a - ret - -Function104e93: ; 104e93 (41:4e93) - xor a - ld [hPrintNum5], a - ld [hPrintNum6], a - push hl - push bc - ld c, rRP % $100 - ld d, $3d - call Function104dd1 - ld hl, hPrintNum2 - ld a, $5a - ld [hli], a - ld [hl], b - dec hl - ld b, $2 - call Function104ed6 - pop bc - pop hl - call Function104ed6 - ld a, [hPrintNum5] - ld [hPrintNum2], a - ld a, [hPrintNum6] - ld [hPrintNum3], a - push hl - ld hl, hPrintNum2 - ld b, $2 - call Function104ed6 - ld hl, hMGStatusFlags - ld b, $1 - call Function104faf - ld a, [hPrintNum2] - ld [hPrintNum5], a - ld a, [hPrintNum3] - ld [hPrintNum6], a - pop hl - ret - -Function104ed6: ; 104ed6 (41:4ed6) - ld c, rRP % $100 - ld d, $5 - call Function104dd1 - ld d, $5 - call Function104dc5 - ld d, $15 - call Function104dd1 - ld a, b - cpl - ld b, a - ld a, $f4 - ld [rTMA], a -.asm_104eee - inc b - jr z, .asm_104f2e - ld a, $8 - ld [hPrintNum4], a - ld a, [hli] - ld e, a - ld a, [hPrintNum5] - add e - ld [hPrintNum5], a - ld a, [hPrintNum6] - adc $0 - ld [hPrintNum6], a -.asm_104f02 - xor a - ld [rIF], a - halt - ld a, $c1 - ld [rRP], a - ld d, $1 - ld a, e - rlca - ld e, a - jr nc, .asm_104f13 - inc d -.asm_104f13 - ld a, [rTIMA] - cp $f8 - jr c, .asm_104f13 - ld a, $c0 - ld [rRP], a - dec d - jr z, .asm_104f25 - xor a - ld [rIF], a - halt -.asm_104f25 - ld a, [hPrintNum4] - dec a - jr z, .asm_104eee - ld [hPrintNum4], a - jr .asm_104f02 -.asm_104f2e - ld a, $fe - ld [rTMA], a - xor a - ld [rIF], a - halt - ld d, $5 - call Function104dc5 - ld d, $11 - call Function104dd1 - ret - -Function104f42: ; 104f42 (41:4f42) - ld a, [hMGStatusFlags] - or $2 - ld [hMGStatusFlags], a - ret - -Function104f49: ; 104f49 (41:4f49) - ld a, [hMGStatusFlags] - or $1 - ld [hMGStatusFlags], a - ret - -Function104f50: ; 104f50 (41:4f50) - ld a, [hMGStatusFlags] - or $80 - ld [hMGStatusFlags], a - ret - -Function104f57: ; 104f57 (41:4f57) - xor a - ld [hPrintNum5], a - ld [hPrintNum6], a - push bc - push hl - ld hl, hPrintNum2 - ld b, $2 - call Function104faf - ld a, [hPrintNum3] - ld [hPrintNum8], a - ld b, a - pop hl - pop af - cp b - jp c, Function104f50 - ld a, [hPrintNum2] - cp $5a - jp nz, Function104f50 - call Function104faf - ld a, [hPrintNum5] - ld d, a - ld a, [hPrintNum6] - ld e, a - push hl - push de - ld hl, hPrintNum2 - ld b, $2 - call Function104faf - pop de - ld hl, hPrintNum2 - ld a, [hli] - xor d - ld b, a - ld a, [hl] - xor e - or b - call nz, Function104f49 - push de - ld d, $3d - call Function104dd1 - ld hl, hMGStatusFlags - ld b, $1 - call Function104ed6 - pop de - pop hl - ld a, d - ld [hPrintNum5], a - ld a, e - ld [hPrintNum6], a - ret - -Function104faf: ; 104faf (41:4faf) - ld c, rRP % $100 - ld d, $0 - call Function104db7 - jp z, Function104f42 - ld d, $0 - call Function104da9 - jp z, Function104f42 - ld d, $0 - call Function104db7 - jp z, Function104f42 - ld a, b - cpl - ld b, a - xor a - ld [hMGJoypadPressed + 2], a - call Function104d86 -.asm_104fd2 - inc b - jr z, .asm_10501a - ld a, $8 - ld [hPrintNum4], a -.asm_104fd9 - ld d, $0 -.asm_104fdb - inc d - jr z, .asm_104fe5 - ld a, [$ff00+c] - bit 1, a - jr z, .asm_104fdb - ld d, $0 -.asm_104fe5 - inc d - jr z, .asm_104fed - ld a, [$ff00+c] - bit 1, a - jr nz, .asm_104fe5 -.asm_104fed - ld a, [hMGJoypadPressed + 2] - ld d, a - ld a, [rTIMA] - ld [hMGJoypadPressed + 2], a - sub d - cp $12 - jr c, .asm_104ffd - set 0, e - jr .asm_104fff -.asm_104ffd - res 0, e -.asm_104fff - ld a, [hPrintNum4] - dec a - ld [hPrintNum4], a - jr z, .asm_10500b - ld a, e - rlca - ld e, a - jr .asm_104fd9 -.asm_10500b - ld a, e - ld [hli], a - ld a, [hPrintNum5] - add e - ld [hPrintNum5], a - ld a, [hPrintNum6] - adc $0 - ld [hPrintNum6], a - jr .asm_104fd2 -.asm_10501a - call Function104d74 - xor a - ld [rIF], a - ld d, $0 - call Function104da9 - jp z, Function104f42 - ld d, $10 - call Function104dd1 - ret - -Function10502e: ; 10502e (41:502e) - ld b, $0 - jp Function104e93 - -Function105033: ; 105033 (41:5033) - ld b, $0 - jp Function104f57 - -MysteryGift_ReadJoypad: ; 105038 (41:5038) -; We can only get four inputs at a time. -; We take d-pad first for no particular reason. - ld a, R_DPAD - ld [rJOYP], a -; Read twice to give the request time to take. - ld a, [rJOYP] - ld a, [rJOYP] - -; The Joypad register output is in the lo nybble (inversed). -; We make the hi nybble of our new container d-pad input. - cpl - and $f - swap a - -; We'll keep this in b for now. - ld b, a - -; Buttons make 8 total inputs (A, B, Select, Start). -; We can fit this into one byte. - ld a, R_BUTTONS - ld [rJOYP], a -; Wait for input to stabilize. -rept 6 - ld a, [rJOYP] -endr -; Buttons take the lo nybble. - cpl - and $f - or b - ld c, a -; To get the delta we xor the last frame's input with the new one. - ld a, [hMGJoypadPressed] - xor c -; Released this frame: - and c - ld [hMGJoypadReleased], a -; Pressed this frame: - ld a, c - ld [hMGJoypadPressed], a - ld a, $30 -; Reset the joypad register since we're done with it. - ld [rJOYP], a - ret - -MysteryGift_CheckAndSetDecorationAlreadyReceived: ; 105069 (41:5069) - call GetMysteryGiftBank - ld d, $0 - ld b, CHECK_FLAG - ld hl, sMysteryGiftDecorationsReceived - predef_id FlagPredef - push hl - push bc - call Predef - call CloseSRAM - ld a, c - and a - pop bc - pop hl - ret nz - call GetMysteryGiftBank - ld b, SET_FLAG - predef FlagPredef - call CloseSRAM - xor a - ret - -MysteryGift_CopyReceivedDecosToPC: ; 105091 (41:5091) - call GetMysteryGiftBank - ld c, $0 -.loop - push bc - ld d, $0 - ld b, CHECK_FLAG - ld hl, sMysteryGiftDecorationsReceived - predef FlagPredef - ld a, c - and a - pop bc - jr z, .skip - push bc - callab SetSpecificDecorationFlag - pop bc -.skip - inc c - ld a, c - cp Trophys - DecorationIDs - jr c, .loop - jp CloseSRAM - -Special_UnlockMysteryGift: ; 1050b9 - call GetMysteryGiftBank - ld hl, sMysteryGiftUnlocked - ld a, [hl] - inc a - jr nz, .ok - ld [hld], a - ld [hl], a -.ok - jp CloseSRAM -; 1050c8 - -Function1050c8: ; 1050c8 - call GetMysteryGiftBank - ld a, [sNumDailyMysteryGiftPartnerIDs] - cp $ff - jr z, .okay - xor a - ld [sNumDailyMysteryGiftPartnerIDs], a -.okay - jp CloseSRAM -; 1050d9 - - -BackupMysteryGift: ; 1050d9 - call GetMysteryGiftBank - ld hl, sMysteryGiftItem - ld de, sBackupMysteryGiftItem - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - jp CloseSRAM -; 1050ea - - -RestoreMysteryGift: ; 1050ea (41:50ea) - call GetMysteryGiftBank - ld hl, sBackupMysteryGiftItem - ld de, sMysteryGiftItem - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - jp CloseSRAM - -MysteryGift_ClearTrainerData: ; 1050fb (41:50fb) - ld hl, wMysteryGiftTrainerData - xor a - ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData -.loop - ld [hli], a - dec b - jr nz, .loop - ret - - -GetMysteryGiftBank: ; 105106 - ld a, BANK(sBackupMysteryGiftItem) - jp GetSRAMBank -; 10510b - - -StagePartyDataForMysteryGift: ; 10510b (41:510b) -; You will be sending this data to your mystery gift partner. -; Structure is the same as a trainer with species and moves -; defined. - ld a, BANK(sPokemonData) - call GetSRAMBank - ld de, wMysteryGiftStaging - ld bc, sPokemonData + PartyMons - wPokemonData - ld hl, sPokemonData + PartySpecies - wPokemonData -.loop - ld a, [hli] - cp -1 - jr z, .party_end - cp EGG - jr z, .next - push hl - ; copy level - ld hl, MON_LEVEL - add hl, bc - ld a, [hl] - ld [de], a - inc de - ; copy species - ld hl, MON_SPECIES - add hl, bc - ld a, [hl] - ld [de], a - inc de - ; copy moves - ld hl, MON_MOVES - add hl, bc - push bc - ld bc, NUM_MOVES - call CopyBytes - pop bc - pop hl -.next - push hl - ld hl, PARTYMON_STRUCT_LENGTH - add hl, bc - ld b, h - ld c, l - pop hl - jr .loop -.party_end - ld a, -1 - ld [de], a - ld a, $26 - ld [wca00], a - jp CloseSRAM - -InitMysteryGiftLayout: ; 105153 (41:5153) - call ClearBGPalettes - call DisableLCD - ld hl, MysteryGiftGFX - ld de, VTiles2 tile $00 - ld a, BANK(MysteryGiftGFX) - ld bc, MysteryGiftGFXEnd - MysteryGiftGFX - call FarCopyBytes - hlcoord 0, 0 - ld a, $42 - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - call ByteFill - hlcoord 3, 7 - lb bc, 9, 15 - call ClearBox - hlcoord 0, 0 - ld a, $0 - ld [hli], a - inc a - ld [hl], a - hlcoord 0, 1 - inc a - ld [hli], a - inc a - ld [hl], a - hlcoord 7, 1 - ld a, $12 - call .Load5GFX - hlcoord 2, 2 - ld a, $17 - call .Load16GFX - hlcoord 2, 3 - ld a, $27 - call .Load16GFX - hlcoord 9, 4 - ld a, $37 - ld [hli], a - inc a - ld [hl], a - hlcoord 1, 2 - ld [hl], $4 - hlcoord 1, 3 - ld a, $5 - call .Load14Column - ld a, $9 - hlcoord 18, 5 - call .Load11Column - hlcoord 2, 5 - ld a, $b - call .Load16Row - hlcoord 2, 16 - ld a, $7 - call .Load16Row - hlcoord 2, 5 - ld a, $d - call .Load5GFX - hlcoord 7, 5 - ld [hl], $c - hlcoord 18, 5 - ld [hl], $a - hlcoord 18, 16 - ld [hl], $8 - hlcoord 1, 16 - ld [hl], $6 - hlcoord 2, 6 - ld a, $3a - call .Load16Row - hlcoord 2, 15 - ld a, $40 - call .Load16Row - hlcoord 2, 6 - ld a, $3c - call .Load9Column - hlcoord 17, 6 - ld a, $3e - call .Load9Column - hlcoord 2, 6 - ld [hl], $39 - hlcoord 17, 6 - ld [hl], $3b - hlcoord 2, 15 - ld [hl], $3f - hlcoord 17, 15 - ld [hl], $41 - call EnableLCD - call WaitBGMap - ld b, SCGB_MYSTERY_GIFT - call GetSGBLayout - call SetPalettes - ret - -.Load5GFX: ; 10522e (41:522e) - ld b, 5 - jr .gfx_loop -; 105232 (41:5232) - -.Load6GFX: ; unreferenced - ld b, 6 - jr .gfx_loop - -.Load16GFX: ; 105236 (41:5236) - ld b, 16 - -.gfx_loop ; 105238 (41:5238) - ld [hli], a - inc a - dec b - jr nz, .gfx_loop - ret - -.Load9Column: ; 10523e (41:523e) - ld b, 9 - jr .col_loop - -.Load11Column: ; 105242 (41:5242) - ld b, 11 - jr .col_loop - -.Load14Column: ; 105246 (41:5246) - ld b, 14 - -.col_loop ; 105248 (41:5248) - ld [hl], a - ld de, SCREEN_WIDTH - add hl, de - dec b - jr nz, .col_loop - ret - -.Load16Row: ; 105251 (41:5251) - ld b, 16 -.row_loop - ld [hli], a - dec b - jr nz, .row_loop - ret - -MysteryGiftGFX: ; 105258 -INCBIN "gfx/mystery_gift/mystery_gift.2bpp" -MysteryGiftGFXEnd: - -Function105688: ; 105688 (41:5688) - call ClearTileMap - call ClearSprites - call WaitBGMap - call Function1057d7 - hlcoord 3, 8 - ld de, String_10572e - call PlaceString - call WaitBGMap - call Function10578c - call MysteryGift_ClearTrainerData - ld a, $24 - ld [wca02], a - ld a, [rIE] - push af - call Function104c2d - ld d, a - xor a - ld [rIF], a - pop af - ld [rIE], a - ld a, d - cp $10 - jp z, Function105712 - cp $6c - jp nz, Function10571a - call Function1056eb - ld c, 60 - call DelayFrames - call Function105777 - ld hl, Text_ReceivedCard - call PrintText - ld de, wMysteryGiftTrainerData - callba Function8ac70 - ld a, c - ld [wd265], a - ld hl, Text_CardNotRegistered - jr c, asm_105726 - ld hl, Text_ListedCardAsNumber - jr asm_105726 - -Function1056eb: ; 1056eb (41:56eb) - ld c, $10 -.asm_1056ed - ld hl, Sprites - ld b, $8 -.asm_1056f2 - dec [hl] -rept 4 - inc hl -endr - dec b - jr nz, .asm_1056f2 - ld hl, Sprites + $20 - ld b, $8 -.asm_1056ff - inc [hl] -rept 4 - inc hl -endr - dec b - jr nz, .asm_1056ff - dec c - ret z - push bc - ld c, 4 - call DelayFrames - pop bc - jr .asm_1056ed - -Function105712: ; 105712 (41:5712) - call Function105777 - ld hl, Text_MGLinkCanceled - jr asm_105726 - -Function10571a: ; 10571a (41:571a) - call Function105777 - ld hl, Text_MGCommError - call PrintText - jp Function105688 - -asm_105726: ; 105726 (41:5726) - call PrintText - ld a, $e3 - ld [rLCDC], a - ret -; 10572e (41:572e) - -String_10572e: ; 10572e - db "エーボタン¯おすと" - next "つうしんおこなわれるよ!" - next "ビーボタン¯おすと" - next "つうしん¯ちゅうし します" - db "@" - -; 10575e - -Text_ReceivedCard: ; 10575e - text_jump UnknownText_0x1c051a - db "@" - -Text_ListedCardAsNumber: ; 105763 - text_jump UnknownText_0x1c0531 - db "@" - -Text_CardNotRegistered: ; 105768 - text_jump UnknownText_0x1c0555 - db "@" - -Text_MGLinkCanceled: ; 10576d - text_jump UnknownText_0x1c0573 - db "@" - -Text_MGCommError: ; 105772 - text_jump UnknownText_0x1c0591 - db "@" -; 105777 - -Function105777: ; 105777 (41:5777) - call ClearSprites - call ClearTileMap - call EnableLCD - call WaitBGMap - ld b, SCGB_DIPLOMA - call GetSGBLayout - call SetPalettes - ret - -Function10578c: ; 10578c (41:578c) - ld de, OverworldMap - ld a, BANK(sPlayerData) - call GetSRAMBank - ld hl, sPlayerData + PlayerName - wPlayerData - ld bc, NAME_LENGTH - call CopyBytes - ld hl, sPlayerData + PlayerID - wPlayerData - ld bc, 2 - call CopyBytes - ld hl, sPlayerData + wSecretID - wPlayerData - ld bc, 2 - call CopyBytes - call CloseSRAM - ld a, BANK(sCrystalData) - call GetSRAMBank - ld a, [sCrystalData + 0] - ld [de], a - inc de - ld a, $4 - call GetSRAMBank - ld hl, $a603 - ld bc, $8 - call CopyBytes - ld hl, $a007 - ld bc, $c - call CopyBytes - call CloseSRAM - ret - -Function1057d7: ; 1057d7 (41:57d7) - call ClearBGPalettes - call DisableLCD - ld hl, MysteryGiftJP_GFX - ld de, VTiles2 tile $00 - ld a, BANK(MysteryGiftJP_GFX) - lb bc, 4, 0 - call FarCopyBytes - ld hl, MysteryGiftJP_GFX + $400 - ld de, VTiles0 tile $00 - ld a, BANK(MysteryGiftJP_GFX) - ld bc, $80 - call FarCopyBytes - hlcoord 0, 0 - ld a, $3f - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - call ByteFill - hlcoord 3, 7 - lb bc, 9, 15 - call ClearBox - hlcoord 0, 0 - ld a, $0 - ld [hli], a - inc a - ld [hl], a - hlcoord 0, 1 - inc a - ld [hli], a - inc a - ld [hl], a - hlcoord 4, 2 - ld a, $13 - call .Load11Row - hlcoord 4, 3 - ld a, $1e - call .Load12Row - hlcoord 4, 4 - ld a, $2a - call .Load12Row - hlcoord 1, 2 - ld [hl], $4 - hlcoord 1, 3 - ld a, $5 - call .Load14Column - ld a, $9 - hlcoord 18, 5 - call .Load11Column - hlcoord 2, 5 - ld a, $b - call .Load16Row - hlcoord 2, 16 - ld a, $7 - call .Load16Row - hlcoord 2, 5 - ld a, $d - call .Load6Row - hlcoord 8, 5 - ld [hl], $c - hlcoord 18, 5 - ld [hl], $a - hlcoord 18, 16 - ld [hl], $8 - hlcoord 1, 16 - ld [hl], $6 - hlcoord 2, 6 - ld a, $37 - call .Load16Row - hlcoord 2, 15 - ld a, $3d - call .Load16Row - hlcoord 2, 6 - ld a, $39 - call .Load9Column - hlcoord 17, 6 - ld a, $3b - call .Load9Column - hlcoord 2, 6 - ld [hl], $36 - hlcoord 17, 6 - ld [hl], $38 - hlcoord 2, 15 - ld [hl], $3c - hlcoord 17, 15 - ld [hl], $3e - ld de, Sprites - ld hl, .OAM_data - ld bc, $40 - call CopyBytes - call EnableLCD - call WaitBGMap - ld b, $2 - callba GetMysteryGift_MobileAdapterLayout - jp SetPalettes - -.Load6Row: ; 1058c6 (41:58c6) - ld b, 6 - jr .row_loop - -.Load11Row: ; 1058ca (41:58ca) - ld b, 11 - jr .row_loop - -.Load12Row: ; 1058ce (41:58ce) - ld b, 12 - -.row_loop ; 1058d0 (41:58d0) - ld [hli], a - inc a - dec b - jr nz, .row_loop - ret - -.Load9Column: ; 1058d6 (41:58d6) - ld b, 9 - jr .column_loop - -.Load11Column: ; 1058da (41:58da) - ld b, 11 - jr .column_loop - -.Load14Column: ; 1058de (41:58de) - ld b, 14 - -.column_loop ; 1058e0 (41:58e0) - ld [hl], a - ld de, SCREEN_WIDTH - add hl, de - dec b - jr nz, .column_loop - ret - -.Load16Row: ; 1058e9 (41:58e9) - ld b, 16 -.row_loop_no_inc - ld [hli], a - dec b - jr nz, .row_loop_no_inc - ret -; 1058f0 (41:58f0) - -.OAM_data: ; 1058f0 - dsprite 2, 1, 6, 4, $00, $00 - dsprite 2, 1, 7, 4, $01, $00 - dsprite 2, 1, 8, 4, $02, $00 - dsprite 2, 1, 9, 4, $03, $00 - dsprite 3, 1, 6, 4, $04, $00 - dsprite 3, 1, 7, 4, $05, $00 - dsprite 3, 1, 8, 4, $06, $00 - dsprite 3, 1, 9, 4, $07, $00 - dsprite 0, 1, 11, 4, $00, $00 - dsprite 0, 1, 12, 4, $01, $00 - dsprite 0, 1, 13, 4, $02, $00 - dsprite 0, 1, 14, 4, $03, $00 - dsprite 1, 1, 11, 4, $04, $00 - dsprite 1, 1, 12, 4, $05, $00 - dsprite 1, 1, 13, 4, $06, $00 - dsprite 1, 1, 14, 4, $07, $00 - -; japanese mystery gift gfx -MysteryGiftJP_GFX: ; 105930 -INCBIN "gfx/mystery_gift/mystery_gift_jp.2bpp" diff --git a/engine/mysterygift2.asm b/engine/mysterygift2.asm deleted file mode 100755 index dc0baf39c..000000000 --- a/engine/mysterygift2.asm +++ /dev/null @@ -1,152 +0,0 @@ -PrepMysteryGiftDataToSend: ; 2c642 (b:4642) - ld de, wMysteryGiftStaging - ld a, $1 - ld [de], a - inc de ; wc801 - ld a, BANK(sGameData) - call GetSRAMBank - ld hl, sPlayerData + PlayerID - wPlayerData - ld a, [hli] - ld [de], a - ld b, a - inc de ; wc802 - ld a, [hl] - ld [de], a - ld c, a - inc de ; wc803 - push bc - ld hl, sPlayerData + PlayerName - wPlayerData - ld bc, NAME_LENGTH - call CopyBytes - push de ; wc80e - ld hl, sPokemonData + PokedexCaught - wPokemonData - ld b, EndPokedexCaught - PokedexCaught - call CountSetBits - pop de - pop bc - ld a, [wd265] - ld [de], a - inc de ; wc80f - call CloseSRAM - call Random - and $1 - ld [de], a - inc de ; wc810 - call .RandomSample - ld [de], a - inc de ; wc811 - ld a, c - ld c, b - ld b, a - call .RandomSample - ld [de], a - inc de ; wc812 - ld a, BANK(sBackupMysteryGiftItem) - call GetSRAMBank - ld a, [sBackupMysteryGiftItem] - ld [de], a - inc de - ld a, [sBackupMysteryGiftItem + 1] - ld [de], a - ld a, $14 - ld [wca00], a - call CloseSRAM - ld hl, wMysteryGiftStaging - ld de, wMysteryGiftPlayerData - ld bc, wMysteryGiftPlayerDataEnd - wMysteryGiftPlayerData - jp CopyBytes - -.RandomSample: ; 2c6ac (b:46ac) - push de - call Random - cp $19 ; 10 percent - jr c, .tenpercent - call Random - and $7 - ld d, a - rl d - ld e, $80 -.loop - rlc e - dec a - jr nz, .loop - ld a, e - and c - jr z, .skip - ld a, $1 -.skip - add d - jr .done - -.tenpercent - call Random - cp $32 ; 20 percent - jr c, .twopercent - call Random - and $3 - ld d, a - rl d - ld e, $80 -.loop2 - rlc e - dec a - jr nz, .loop2 - ld a, e - and b - jr z, .skip2 - ld a, $1 -.skip2 - add d - add $10 - jr .done - -.twopercent - call Random - cp $32 ; 50 ; 20 percent - jr c, .pointfourpercent - ld a, b - swap a - and $7 - add $18 - jr .done - -.pointfourpercent - ld a, b - and $80 - ld a, $20 - jr z, .done - ld a, $21 - -.done - pop de - ret - -MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708) - ld a, c - cp MysteryGiftItemsEnd - MysteryGiftItems - jr nc, MysteryGiftFallbackItem - ld hl, MysteryGiftItems - ld b, 0 - add hl, bc - ld c, [hl] - ret - -MysteryGiftGetDecoration: ; 2c715 (b:4715) - ld a, c - cp MysteryGiftDecosEnd - MysteryGiftDecos - jr nc, MysteryGiftFallbackItem - ld hl, MysteryGiftDecos - ld b, 0 - add hl, bc - ld c, [hl] - ret - -MysteryGiftFallbackItem: ; 2c722 (b:4722) - ld c, DECO_POLKADOT_BED ; GREAT_BALL - ret -; 2c725 (b:4725) - - -INCLUDE "data/mystery_gift/items.asm" - -INCLUDE "data/mystery_gift/decos.asm" diff --git a/engine/pack_f.asm b/engine/pack_f.asm new file mode 100644 index 000000000..f71e43db8 --- /dev/null +++ b/engine/pack_f.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/place_graphics.asm b/engine/place_graphics.asm new file mode 100644 index 000000000..d72364776 --- /dev/null +++ b/engine/place_graphics.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/pokegear_2.asm b/engine/pokegear_2.asm new file mode 100644 index 000000000..a5cceecfd --- /dev/null +++ b/engine/pokegear_2.asm @@ -0,0 +1,25 @@ +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/printhoursmins.asm b/engine/printhoursmins.asm new file mode 100644 index 000000000..711ff89b6 --- /dev/null +++ b/engine/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/save.asm b/engine/save.asm index 74b0626c8..65339e0bb 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -500,12 +500,12 @@ HallOfFame_InitSaveIfNeeded: ; 14da0 ; 14da9 ValidateSave: ; 14da9 - ld a, BANK(s1_a008) + ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) call GetSRAMBank - ld a, 99 - ld [s1_a008], a - ld a, " " - ld [s1_ad0f], a + ld a, SAVE_CHECK_VALUE_1 + ld [sCheckValue1], a + ld a, SAVE_CHECK_VALUE_2 + ld [sCheckValue2], a jp CloseSRAM ; 14dbb @@ -568,12 +568,12 @@ SaveChecksum: ; 14e13 ; 14e2d ValidateBackupSave: ; 14e2d - ld a, BANK(s0_b208) + ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2) call GetSRAMBank - ld a, 99 - ld [s0_b208], a - ld a, " " - ld [s0_bf0f], a + ld a, SAVE_CHECK_VALUE_1 + ld [sBackupCheckValue1], a + ld a, SAVE_CHECK_VALUE_2 + ld [sBackupCheckValue2], a call CloseSRAM ret ; 14e40 @@ -731,13 +731,13 @@ INCLUDE "data/default_options.asm" CheckPrimarySaveFile: ; 14f84 - ld a, BANK(s1_a008) + ld a, BANK(sCheckValue1) ; BANK(sCheckValue2) call GetSRAMBank - ld a, [s1_a008] - cp 99 + ld a, [sCheckValue1] + cp SAVE_CHECK_VALUE_1 jr nz, .nope - ld a, [s1_ad0f] - cp " " + ld a, [sCheckValue2] + cp SAVE_CHECK_VALUE_2 jr nz, .nope ld hl, sOptions ld de, Options @@ -753,13 +753,13 @@ CheckPrimarySaveFile: ; 14f84 ; 14faf CheckBackupSaveFile: ; 14faf - ld a, BANK(s0_b208) + ld a, BANK(sBackupCheckValue1) ; BANK(sBackupCheckValue2) call GetSRAMBank - ld a, [s0_b208] - cp 99 + ld a, [sBackupCheckValue1] + cp SAVE_CHECK_VALUE_1 jr nz, .nope - ld a, [s0_bf0f] - cp " " + ld a, [sBackupCheckValue2] + cp SAVE_CHECK_VALUE_2 jr nz, .nope ld hl, sBackupOptions ld de, Options diff --git a/engine/select_menu.asm b/engine/select_menu.asm new file mode 100755 index 000000000..5d3b5ff0a --- /dev/null +++ b/engine/select_menu.asm @@ -0,0 +1,189 @@ +SelectMenu:: ; 13327 + + call CheckRegisteredItem + jr c, .NotRegistered + jp UseRegisteredItem + +.NotRegistered: + call OpenText + ld b, BANK(ItemMayBeRegisteredText) + ld hl, ItemMayBeRegisteredText + call MapTextbox + call WaitButton + jp CloseText +; 13340 + + +ItemMayBeRegisteredText: ; 13340 + text_jump UnknownText_0x1c1cf3 + db "@" +; 13345 + + +CheckRegisteredItem: ; 13345 + + ld a, [WhichRegisteredItem] + and a + jr z, .NoRegisteredItem + and REGISTERED_POCKET + rlca + rlca + ld hl, .Pockets + rst JumpTable + ret + +.Pockets: + dw .CheckItem + dw .CheckBall + dw .CheckKeyItem + dw .CheckTMHM + +.CheckItem: + ld hl, NumItems + call .CheckRegisteredNo + jr c, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 + add hl, de + add hl, de + call .IsSameItem + jr c, .NoRegisteredItem + and a + ret + +.CheckKeyItem: + ld a, [RegisteredItem] + ld hl, KeyItems + ld de, 1 + call IsInArray + jr nc, .NoRegisteredItem + ld a, [RegisteredItem] + ld [CurItem], a + and a + ret + +.CheckBall: + ld hl, NumBalls + call .CheckRegisteredNo + jr nc, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 + add hl, de + add hl, de + call .IsSameItem + jr c, .NoRegisteredItem + ret + +.CheckTMHM: + jr .NoRegisteredItem + +.NoRegisteredItem: + xor a + ld [WhichRegisteredItem], a + ld [RegisteredItem], a + scf + ret +; 133a6 + + +.CheckRegisteredNo: ; 133a6 + ld a, [WhichRegisteredItem] + and REGISTERED_NUMBER + dec a + cp [hl] + jr nc, .NotEnoughItems + ld [CurItemQuantity], a + and a + ret + +.NotEnoughItems: + scf + ret +; 133b6 + + +.IsSameItem: ; 133b6 + ld a, [RegisteredItem] + cp [hl] + jr nz, .NotSameItem + ld [CurItem], a + and a + ret + +.NotSameItem: + scf + ret +; 133c3 + + +UseRegisteredItem: ; 133c3 + + callba CheckItemMenu + ld a, [wItemAttributeParamBuffer] + ld hl, .SwitchTo + rst JumpTable + ret + +.SwitchTo: + dw .CantUse + dw .NoFunction + dw .NoFunction + dw .NoFunction + dw .Current + dw .Party + dw .Overworld +; 133df + +.NoFunction: ; 133df + call OpenText + call CantUseItem + call CloseText + and a + ret +; 133ea + +.Current: ; 133ea + call OpenText + call DoItemEffect + call CloseText + and a + ret +; 133f5 + +.Party: ; 133f5 + call RefreshScreen + call FadeToMenu + call DoItemEffect + call CloseSubmenu + call CloseText + and a + ret +; 13406 + +.Overworld: ; 13406 + call RefreshScreen + ld a, 1 + ld [wUsingItemWithSelect], a + call DoItemEffect + xor a + ld [wUsingItemWithSelect], a + ld a, [wItemEffectSucceeded] + cp 1 + jr nz, ._cantuse + scf + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 13422 + +.CantUse: ; 13422 + call RefreshScreen + +._cantuse + call CantUseItem + call CloseText + and a + ret +; 1342d diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm deleted file mode 100755 index 5d3b5ff0a..000000000 --- a/engine/selectmenu.asm +++ /dev/null @@ -1,189 +0,0 @@ -SelectMenu:: ; 13327 - - call CheckRegisteredItem - jr c, .NotRegistered - jp UseRegisteredItem - -.NotRegistered: - call OpenText - ld b, BANK(ItemMayBeRegisteredText) - ld hl, ItemMayBeRegisteredText - call MapTextbox - call WaitButton - jp CloseText -; 13340 - - -ItemMayBeRegisteredText: ; 13340 - text_jump UnknownText_0x1c1cf3 - db "@" -; 13345 - - -CheckRegisteredItem: ; 13345 - - ld a, [WhichRegisteredItem] - and a - jr z, .NoRegisteredItem - and REGISTERED_POCKET - rlca - rlca - ld hl, .Pockets - rst JumpTable - ret - -.Pockets: - dw .CheckItem - dw .CheckBall - dw .CheckKeyItem - dw .CheckTMHM - -.CheckItem: - ld hl, NumItems - call .CheckRegisteredNo - jr c, .NoRegisteredItem - inc hl - ld e, a - ld d, 0 - add hl, de - add hl, de - call .IsSameItem - jr c, .NoRegisteredItem - and a - ret - -.CheckKeyItem: - ld a, [RegisteredItem] - ld hl, KeyItems - ld de, 1 - call IsInArray - jr nc, .NoRegisteredItem - ld a, [RegisteredItem] - ld [CurItem], a - and a - ret - -.CheckBall: - ld hl, NumBalls - call .CheckRegisteredNo - jr nc, .NoRegisteredItem - inc hl - ld e, a - ld d, 0 - add hl, de - add hl, de - call .IsSameItem - jr c, .NoRegisteredItem - ret - -.CheckTMHM: - jr .NoRegisteredItem - -.NoRegisteredItem: - xor a - ld [WhichRegisteredItem], a - ld [RegisteredItem], a - scf - ret -; 133a6 - - -.CheckRegisteredNo: ; 133a6 - ld a, [WhichRegisteredItem] - and REGISTERED_NUMBER - dec a - cp [hl] - jr nc, .NotEnoughItems - ld [CurItemQuantity], a - and a - ret - -.NotEnoughItems: - scf - ret -; 133b6 - - -.IsSameItem: ; 133b6 - ld a, [RegisteredItem] - cp [hl] - jr nz, .NotSameItem - ld [CurItem], a - and a - ret - -.NotSameItem: - scf - ret -; 133c3 - - -UseRegisteredItem: ; 133c3 - - callba CheckItemMenu - ld a, [wItemAttributeParamBuffer] - ld hl, .SwitchTo - rst JumpTable - ret - -.SwitchTo: - dw .CantUse - dw .NoFunction - dw .NoFunction - dw .NoFunction - dw .Current - dw .Party - dw .Overworld -; 133df - -.NoFunction: ; 133df - call OpenText - call CantUseItem - call CloseText - and a - ret -; 133ea - -.Current: ; 133ea - call OpenText - call DoItemEffect - call CloseText - and a - ret -; 133f5 - -.Party: ; 133f5 - call RefreshScreen - call FadeToMenu - call DoItemEffect - call CloseSubmenu - call CloseText - and a - ret -; 13406 - -.Overworld: ; 13406 - call RefreshScreen - ld a, 1 - ld [wUsingItemWithSelect], a - call DoItemEffect - xor a - ld [wUsingItemWithSelect], a - ld a, [wItemEffectSucceeded] - cp 1 - jr nz, ._cantuse - scf - ld a, HMENURETURN_SCRIPT - ld [hMenuReturn], a - ret -; 13422 - -.CantUse: ; 13422 - call RefreshScreen - -._cantuse - call CantUseItem - call CloseText - and a - ret -; 1342d diff --git a/engine/start_menu.asm b/engine/start_menu.asm new file mode 100755 index 000000000..871da86be --- /dev/null +++ b/engine/start_menu.asm @@ -0,0 +1,1974 @@ +StartMenu:: ; 125cd + + call ClearWindowData + + ld de, SFX_MENU + call PlaySFX + + callba ReanchorBGMap_NoOAMUpdate + + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld hl, .MenuDataHeader + jr z, .GotMenuData + ld hl, .ContestMenuDataHeader +.GotMenuData: + + call LoadMenuDataHeader + call .SetUpMenuItems + ld a, [wBattleMenuCursorBuffer] + ld [wMenuCursorBuffer], a + call .DrawMenuAccount_ + call DrawVariableLengthMenuBox + call .DrawBugContestStatusBox + call SafeUpdateSprites + call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap + callba LoadFonts_NoOAMUpdate + call .DrawBugContestStatus + call UpdateTimePals + jr .Select + +.Reopen: + call UpdateSprites + call UpdateTimePals + call .SetUpMenuItems + ld a, [wBattleMenuCursorBuffer] + ld [wMenuCursorBuffer], a + +.Select: + call .GetInput + jr c, .Exit + call .DrawMenuAccount + ld a, [wMenuCursorBuffer] + ld [wBattleMenuCursorBuffer], a + call PlayClickSFX + call PlaceHollowCursor + call .OpenMenu + +; Menu items have different return functions. +; For example, saving exits the menu. + ld hl, .MenuReturns + ld e, a + ld d, 0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.MenuReturns: + dw .Reopen + dw .Exit + dw .ExitMenuCallFuncCloseText + dw .ExitMenuRunScriptCloseText + dw .ExitMenuRunScript + dw .ReturnEnd + dw .ReturnRedraw + +.Exit: + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call LoadFontsExtra + pop af + ld [hOAMUpdate], a +.ReturnEnd: + call ExitMenu +.ReturnEnd2: + call CloseText + call UpdateTimePals + ret + +.GetInput: +; Return carry on exit, and no-carry on selection. + xor a + ld [hBGMapMode], a + call .DrawMenuAccount + call SetUpMenu + ld a, $ff + ld [MenuSelection], a +.loop + call .PrintMenuAccount + call GetScrollingMenuJoypad + ld a, [wMenuJoypad] + cp B_BUTTON + jr z, .b + cp A_BUTTON + jr z, .a + jr .loop +.a + call PlayClickSFX + and a + ret +.b + scf + ret +; 12691 + +.ExitMenuRunScript: ; 12691 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 12699 + +.ExitMenuRunScriptCloseText: ; 12699 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + jr .ReturnEnd2 +; 126a2 + +.ExitMenuCallFuncCloseText: ; 126a2 + call ExitMenu + ld hl, wQueuedScriptAddr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wQueuedScriptBank] + rst FarCall + jr .ReturnEnd2 +; 126b1 + +.ReturnRedraw: ; 126b1 + call .Clear + jp .Reopen +; 126b7 + +.Clear: ; 126b7 + call ClearBGPalettes + call Call_ExitMenu + call ReloadTilesetAndPalettes + call .DrawMenuAccount_ + call DrawVariableLengthMenuBox + call .DrawBugContestStatus + call UpdateSprites + call ret_d90 + call FinishExitMenu + ret +; 126d3 + + +.MenuDataHeader: + db $40 ; tile backup + db 0, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.ContestMenuDataHeader: + db $40 ; tile backup + db 2, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.MenuData: + db %10101000 ; x padding, wrap around, start can close + dn 0, 0 ; rows, columns + dw MenuItemsList + dw .MenuString + dw .Items + +.Items: + dw StartMenu_Pokedex, .PokedexString, .PokedexDesc + dw StartMenu_Pokemon, .PartyString, .PartyDesc + dw StartMenu_Pack, .PackString, .PackDesc + dw StartMenu_Status, .StatusString, .StatusDesc + dw StartMenu_Save, .SaveString, .SaveDesc + dw StartMenu_Option, .OptionString, .OptionDesc + dw StartMenu_Exit, .ExitString, .ExitDesc + dw StartMenu_Pokegear, .PokegearString, .PokegearDesc + dw StartMenu_Quit, .QuitString, .QuitDesc + +.PokedexString: db "#DEX@" +.PartyString: db "#MON@" +.PackString: db "PACK@" +.StatusString: db "@" +.SaveString: db "SAVE@" +.OptionString: db "OPTION@" +.ExitString: db "EXIT@" +.PokegearString: db $24, "GEAR@" +.QuitString: db "QUIT@" + +.PokedexDesc: db "#MON" + next "database@" + +.PartyDesc: db "Party ", $4a + next "status@" + +.PackDesc: db "Contains" + next "items@" + +.PokegearDesc: db "Trainer's" + next "key device@" + +.StatusDesc: db "Your own" + next "status@" + +.SaveDesc: db "Save your" + next "progress@" + +.OptionDesc: db "Change" + next "settings@" + +.ExitDesc: db "Close this" + next "menu@" + +.QuitDesc: db "Quit and" + next "be judged.@" + + +.OpenMenu: ; 127e5 + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + ld a, [hli] + ld h, [hl] + ld l, a + jp hl +; 127ef + +.MenuString: ; 127ef + push de + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 12800 + +.MenuDesc: ; 12800 + push de + ld a, [MenuSelection] + cp $ff + jr z, .none + call .GetMenuAccountTextPointer +rept 4 + inc hl +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +.none + pop de + ret +; 12819 + + +.GetMenuAccountTextPointer: ; 12819 + ld e, a + ld d, 0 + ld hl, wMenuData2PointerTableAddr + ld a, [hli] + ld h, [hl] + ld l, a +rept 6 + add hl, de +endr + ret +; 12829 + + +.SetUpMenuItems: ; 12829 + xor a + ld [wWhichIndexSet], a + call .FillMenuList + + ld hl, StatusFlags + bit 0, [hl] + jr z, .no_pokedex + ld a, 0 ; pokedex + call .AppendMenuList +.no_pokedex + + ld a, [PartyCount] + and a + jr z, .no_pokemon + ld a, 1 ; pokemon + call .AppendMenuList +.no_pokemon + + ld a, [wLinkMode] + and a + jr nz, .no_pack + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .no_pack + ld a, 2 ; pack + call .AppendMenuList +.no_pack + + ld hl, wPokegearFlags + bit 7, [hl] + jr z, .no_pokegear + ld a, 7 ; pokegear + call .AppendMenuList +.no_pokegear + + ld a, 3 ; status + call .AppendMenuList + + ld a, [wLinkMode] + and a + jr nz, .no_save + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld a, 8 ; quit + jr nz, .write + ld a, 4 ; save +.write + call .AppendMenuList +.no_save + + ld a, 5 ; option + call .AppendMenuList + ld a, 6 ; exit + call .AppendMenuList + ld a, c + ld [MenuItemsList], a + ret +; 1288d + + +.FillMenuList: ; 1288d + xor a + ld hl, MenuItemsList + ld [hli], a + ld a, -1 + ld bc, MenuItemsListEnd - (MenuItemsList + 1) + call ByteFill + ld de, MenuItemsList + 1 + ld c, 0 + ret +; 128a0 + +.AppendMenuList: ; 128a0 + ld [de], a + inc de + inc c + ret +; 128a4 + +.DrawMenuAccount_: ; 128a4 + jp .DrawMenuAccount +; 128a7 + +.PrintMenuAccount: ; 128a7 + call .IsMenuAccountOn + ret z + call .DrawMenuAccount + decoord 0, 14 + jp .MenuDesc +; 128b4 + +.DrawMenuAccount: ; 128b4 + call .IsMenuAccountOn + ret z + hlcoord 0, 13 + lb bc, 5, 10 + call ClearBox + hlcoord 0, 13 + ld b, 3 + ld c, 8 + jp TextBoxPalette +; 128cb + +.IsMenuAccountOn: ; 128cb + ld a, [Options2] + and 1 + ret +; 128d1 + +.DrawBugContestStatusBox: ; 128d1 + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ret z + callba StartMenu_DrawBugContestStatusBox + ret +; 128de + +.DrawBugContestStatus: ; 128de + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .contest + ret +.contest + callba StartMenu_PrintBugContestStatus + ret +; 128ed + + +StartMenu_Exit: ; 128ed +; Exit the menu. + + ld a, 1 + ret +; 128f0 + + +StartMenu_Quit: ; 128f0 +; Retire from the bug catching contest. + + ld hl, .EndTheContestText + call StartMenuYesNo + jr c, .DontEndContest + ld a, BANK(BugCatchingContestReturnToGateScript) + ld hl, BugCatchingContestReturnToGateScript + call FarQueueScript + ld a, 4 + ret + +.DontEndContest: + ld a, 0 + ret + +.EndTheContestText: + text_jump UnknownText_0x1c1a6c + db "@" +; 1290b + + +StartMenu_Save: ; 1290b +; Save the game. + + call BufferScreen + callba SaveMenu + jr nc, .asm_12919 + ld a, 0 + ret +.asm_12919 + ld a, 1 + ret +; 1291c + + +StartMenu_Option: ; 1291c +; Game options. + + call FadeToMenu + callba OptionsMenu + ld a, 6 + ret +; 12928 + + +StartMenu_Status: ; 12928 +; Player status. + + call FadeToMenu + callba TrainerCard + call CloseSubmenu + ld a, 0 + ret +; 12937 + + +StartMenu_Pokedex: ; 12937 + + ld a, [PartyCount] + and a + jr z, .asm_12949 + + call FadeToMenu + callba Pokedex + call CloseSubmenu + +.asm_12949 + ld a, 0 + ret +; 1294c + + +StartMenu_Pokegear: ; 1294c + + call FadeToMenu + callba PokeGear + call CloseSubmenu + ld a, 0 + ret +; 1295b + + +StartMenu_Pack: ; 1295b + + call FadeToMenu + callba Pack + ld a, [wcf66] + and a + jr nz, .used_item + call CloseSubmenu + ld a, 0 + ret + +.used_item + call ExitAllMenus + ld a, 4 + ret +; 12976 + + +StartMenu_Pokemon: ; 12976 + + ld a, [PartyCount] + and a + jr z, .return + + call FadeToMenu + +.choosemenu + xor a + ld [PartyMenuActionText], a ; Choose a POKéMON. + call ClearBGPalettes + +.menu + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX + +.menunoreload + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call SetPalettes ; load regular palettes? + call DelayFrame + callba PartyMenuSelect + jr c, .return ; if cancelled or pressed B + + call PokemonActionSubmenu + cp 3 + jr z, .menu + cp 0 + jr z, .choosemenu + cp 1 + jr z, .menunoreload + cp 2 + jr z, .quit + +.return + call CloseSubmenu + ld a, 0 + ret + +.quit + ld a, b + push af + call ExitAllMenus + pop af + ret +; 129d5 + +HasNoItems: ; 129d5 + ld a, [NumItems] + and a + ret nz + ld a, [NumKeyItems] + and a + ret nz + ld a, [NumBalls] + and a + ret nz + ld hl, TMsHMs + ld b, NUM_TMS + NUM_HMS +.loop + ld a, [hli] + and a + jr nz, .done + dec b + jr nz, .loop + scf + ret +.done + and a + ret + +TossItemFromPC: ; 129f4 + push de + call PartyMonItemName + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .key_item + ld hl, .TossHowMany + call MenuTextBox + callba SelectQuantityToToss + push af + call CloseWindow + call ExitMenu + pop af + jr c, .quit + ld hl, .ConfirmToss + call MenuTextBox + call YesNoBox + push af + call ExitMenu + pop af + jr c, .quit + pop hl + ld a, [CurItemQuantity] + call TossItem + call PartyMonItemName + ld hl, .TossedThisMany + call MenuTextBox + call ExitMenu + and a + ret + +.key_item + call .CantToss +.quit + pop hl + scf + ret + +.TossHowMany: + ; Toss out how many @ (S)? + text_jump UnknownText_0x1c1a90 + db "@" + +.ConfirmToss: + ; Throw away @ @ (S)? + text_jump UnknownText_0x1c1aad + db "@" + +.TossedThisMany: + ; Discarded @ (S). + text_jump UnknownText_0x1c1aca + db "@" + +.CantToss: + ld hl, .TooImportantToToss + call MenuTextBoxBackup + ret + +.TooImportantToToss: + ; That's too impor- tant to toss out! + text_jump UnknownText_0x1c1adf + db "@" +; 0x12a60 + +CantUseItem: ; 12a60 + ld hl, CantUseItemText + call MenuTextBoxWaitButton + ret +; 12a67 + +CantUseItemText: ; 12a67 + text_jump UnknownText_0x1c1b03 + db "@" +; 12a6c + + +PartyMonItemName: ; 12a6c + ld a, [CurItem] + ld [wd265], a + call GetItemName + call CopyName1 + ret +; 12a79 + + +CancelPokemonAction: ; 12a79 + callba InitPartyMenuWithCancel + callba UnfreezeMonIcons + ld a, 1 + ret +; 12a88 + + +PokemonActionSubmenu: ; 12a88 + hlcoord 1, 15 + lb bc, 2, 18 + call ClearBox + callba MonSubmenu + call GetCurNick + ld a, [MenuSelection] + ld hl, .Actions + ld de, 3 + call IsInArray + jr nc, .nothing + + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.nothing + ld a, 0 + ret + +.Actions: + dbw MONMENU_CUT, MonMenu_Cut ; Cut + dbw MONMENU_FLY, MonMenu_Fly ; Fly + dbw MONMENU_SURF, MonMenu_Surf ; Surf + dbw MONMENU_STRENGTH, MonMenu_Strength ; Strength + dbw MONMENU_FLASH, MonMenu_Flash ; Flash + dbw MONMENU_WHIRLPOOL, MonMenu_Whirlpool ; Whirlpool + dbw MONMENU_DIG, MonMenu_Dig ; Dig + dbw MONMENU_TELEPORT, MonMenu_Teleport ; Teleport + dbw MONMENU_SOFTBOILED, MonMenu_Softboiled_MilkDrink ; Softboiled + dbw MONMENU_MILKDRINK, MonMenu_Softboiled_MilkDrink ; MilkDrink + dbw MONMENU_HEADBUTT, MonMenu_Headbutt ; Headbutt + dbw MONMENU_WATERFALL, MonMenu_Waterfall ; Waterfall + dbw MONMENU_ROCKSMASH, MonMenu_RockSmash ; RockSmash + dbw MONMENU_SWEETSCENT, MonMenu_SweetScent ; SweetScent + dbw MONMENU_STATS, OpenPartyStats + dbw MONMENU_SWITCH, SwitchPartyMons + dbw MONMENU_ITEM, GiveTakePartyMonItem + dbw MONMENU_CANCEL, CancelPokemonAction + dbw MONMENU_MOVE, ManagePokemonMoves ; move + dbw MONMENU_MAIL, MonMailAction ; mail +; 12aec + + +SwitchPartyMons: ; 12aec + +; Don't try if there's nothing to switch! + ld a, [PartyCount] + cp 2 + jr c, .DontSwitch + + ld a, [CurPartyMon] + inc a + ld [wSwitchMon], a + + callba HoldSwitchmonIcon + callba InitPartyMenuNoCancel + + ld a, PARTYMENUACTION_MOVE + ld [PartyMenuActionText], a + callba WritePartyMenuTilemap + callba PrintPartyMenuText + + hlcoord 0, 1 + ld bc, 20 * 2 + ld a, [wSwitchMon] + dec a + call AddNTimes + ld [hl], "▷" + call WaitBGMap + call SetPalettes + call DelayFrame + + callba PartyMenuSelect + bit 1, b + jr c, .DontSwitch + + callba _SwitchPartyMons + + xor a + ld [PartyMenuActionText], a + + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX + + ld a, 1 + ret + +.DontSwitch: + xor a + ld [PartyMenuActionText], a + call CancelPokemonAction + ret +; 12b60 + + +GiveTakePartyMonItem: ; 12b60 + +; Eggs can't hold items! + ld a, [CurPartySpecies] + cp EGG + jr z, .cancel + + ld hl, GiveTakeItemMenuData + call LoadMenuDataHeader + call VerticalMenu + call ExitMenu + jr c, .cancel + + call GetCurNick + ld hl, StringBuffer1 + ld de, wMonOrItemNameBuffer + ld bc, PKMN_NAME_LENGTH + call CopyBytes + ld a, [wMenuCursorY] + cp 1 + jr nz, .take + + call LoadStandardMenuDataHeader + call ClearPalettes + call .GiveItem + call ClearPalettes + call LoadFontsBattleExtra + call ExitMenu + ld a, 0 + ret + +.take + call TakePartyItem + ld a, 3 + ret + +.cancel + ld a, 3 + ret +; 12ba9 + + +.GiveItem: + + callba DepositSellInitPackBuffers + +.loop + callba DepositSellPack + + ld a, [wcf66] + and a + jr z, .quit + + ld a, [wcf65] + cp 2 + jr z, .next + + call CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .next + + call TryGiveItemToPartymon + jr .quit + +.next + ld hl, CantBeHeldText + call MenuTextBoxBackup + jr .loop + +.quit + ret +; 12bd9 + + +TryGiveItemToPartymon: ; 12bd9 + + call SpeechTextBox + call PartyMonItemName + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .give_item_to_mon + + push hl + ld d, a + callba ItemIsMail + pop hl + jr c, .please_remove_mail + ld a, [hl] + jr .already_holding_item + +.give_item_to_mon + call GiveItemToPokemon + ld hl, MadeHoldText + call MenuTextBoxBackup + call GivePartyItem + ret + +.please_remove_mail + ld hl, PleaseRemoveMailText + call MenuTextBoxBackup + ret + +.already_holding_item + ld [wd265], a + call GetItemName + ld hl, SwitchAlreadyHoldingText + call StartMenuYesNo + jr c, .abort + + call GiveItemToPokemon + ld a, [wd265] + push af + ld a, [CurItem] + ld [wd265], a + pop af + ld [CurItem], a + call ReceiveItemFromPokemon + jr nc, .bag_full + + ld hl, TookAndMadeHoldText + call MenuTextBoxBackup + ld a, [wd265] + ld [CurItem], a + call GivePartyItem + ret + +.bag_full + ld a, [wd265] + ld [CurItem], a + call ReceiveItemFromPokemon + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.abort + ret +; 12c4c + + +GivePartyItem: ; 12c4c + + call GetPartyItemLocation + ld a, [CurItem] + ld [hl], a + ld d, a + callba ItemIsMail + jr nc, .done + call ComposeMailMessage + +.done + ret +; 12c60 + + +TakePartyItem: ; 12c60 + + call SpeechTextBox + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12c8c + + ld [CurItem], a + call ReceiveItemFromPokemon + jr nc, .asm_12c94 + + callba ItemIsMail + call GetPartyItemLocation + ld a, [hl] + ld [wd265], a + ld [hl], NO_ITEM + call GetItemName + ld hl, TookFromText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c8c + ld hl, IsntHoldingAnythingText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c94 + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.asm_12c9a + ret +; 12c9b + + +GiveTakeItemMenuData: ; 12c9b + db %01010000 + db 12, 12 ; start coords + db 17, 19 ; end coords + dw .Items + db 1 ; default option + +.Items: + db %10000000 ; x padding + db 2 ; # items + db "GIVE@" + db "TAKE@" +; 12caf + + +TookAndMadeHoldText: ; 12caf + text_jump UnknownText_0x1c1b2c + db "@" +; 12cb4 + +MadeHoldText: ; 12cb4 + text_jump UnknownText_0x1c1b57 + db "@" +; 12cb9 + +PleaseRemoveMailText: ; 12cb9 + text_jump UnknownText_0x1c1b6f + db "@" +; 12cbe + +IsntHoldingAnythingText: ; 12cbe + text_jump UnknownText_0x1c1b8e + db "@" +; 12cc3 + +ItemStorageIsFullText: ; 12cc3 + text_jump UnknownText_0x1c1baa + db "@" +; 12cc8 + +TookFromText: ; 12cc8 + text_jump UnknownText_0x1c1bc4 + db "@" +; 12ccd + +SwitchAlreadyHoldingText: ; 12ccd + text_jump UnknownText_0x1c1bdc + db "@" +; 12cd2 + +CantBeHeldText: ; 12cd2 + text_jump UnknownText_0x1c1c09 + db "@" +; 12cd7 + + +GetPartyItemLocation: ; 12cd7 + push af + ld a, MON_ITEM + call GetPartyParamLocation + pop af + ret +; 12cdf + + +ReceiveItemFromPokemon: ; 12cdf + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp ReceiveItem +; 12cea + + +GiveItemToPokemon: ; 12cea (4:6cea) + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp TossItem + +StartMenuYesNo: ; 12cf5 + call MenuTextBox + call YesNoBox + jp ExitMenu +; 12cfe + + +ComposeMailMessage: ; 12cfe (4:6cfe) + ld de, wTempMailMessage + callba _ComposeMailMessage + ld hl, PlayerName + ld de, wTempMailAuthor + ld bc, NAME_LENGTH - 1 + call CopyBytes + ld hl, PlayerID + ld bc, 2 + call CopyBytes + ld a, [CurPartySpecies] + ld [de], a + inc de + ld a, [CurItem] + ld [de], a + ld a, [CurPartyMon] + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, wTempMail + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) + call GetSRAMBank + call CopyBytes + call CloseSRAM + ret + +MonMailAction: ; 12d45 +; If in the time capsule or trade center, +; selecting the mail only allows you to +; read the mail. + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .read + cp LINK_TRADECENTER + jr z, .read + +; Show the READ/TAKE/QUIT menu. + ld hl, .MenuDataHeader + call LoadMenuDataHeader + call VerticalMenu + call ExitMenu + +; Interpret the menu. + jp c, .done + ld a, [wMenuCursorY] + cp $1 + jr z, .read + cp $2 + jr z, .take + jp .done + +.read + callba ReadPartyMonMail + ld a, $0 + ret + +.take + ld hl, .sendmailtopctext + call StartMenuYesNo + jr c, .RemoveMailToBag + ld a, [CurPartyMon] + ld b, a + callba SendMailToPC + jr c, .MailboxFull + ld hl, .sentmailtopctext + call MenuTextBoxBackup + jr .done + +.MailboxFull: + ld hl, .mailboxfulltext + call MenuTextBoxBackup + jr .done + +.RemoveMailToBag: + ld hl, .mailwilllosemessagetext + call StartMenuYesNo + jr c, .done + call GetPartyItemLocation + ld a, [hl] + ld [CurItem], a + call ReceiveItemFromPokemon + jr nc, .BagIsFull + call GetPartyItemLocation + ld [hl], $0 + call GetCurNick + ld hl, .tookmailfrommontext + call MenuTextBoxBackup + jr .done + +.BagIsFull: + ld hl, .bagfulltext + call MenuTextBoxBackup + jr .done + +.done + ld a, $3 + ret +; 12dc9 + + +.MenuDataHeader: + db $40 ; flags + db 10, 12 ; start coords + db 17, 19 ; end coords + dw .MenuData2 + db 1 ; default option +; 0x12dd1 + +.MenuData2: + db $80 ; flags + db 3 ; items + db "READ@" + db "TAKE@" + db "QUIT@" +; 0x12de2 + + +.mailwilllosemessagetext +; The MAIL will lose its message. OK? + text_jump UnknownText_0x1c1c22 + db "@" +; 0x12de7 + +.tookmailfrommontext +; MAIL detached from . + text_jump UnknownText_0x1c1c47 + db "@" +; 0x12dec + +.bagfulltext +; There's no space for removing MAIL. + text_jump UnknownText_0x1c1c62 + db "@" +; 0x12df1 + +.sendmailtopctext +; Send the removed MAIL to your PC? + text_jump UnknownText_0x1c1c86 + db "@" +; 0x12df6 + +.mailboxfulltext +; Your PC's MAILBOX is full. + text_jump UnknownText_0x1c1ca9 + db "@" +; 0x12dfb + +.sentmailtopctext +; The MAIL was sent to your PC. + text_jump UnknownText_0x1c1cc4 + db "@" +; 0x12e00 + + +OpenPartyStats: ; 12e00 + call LoadStandardMenuDataHeader + call ClearSprites +; PartyMon + xor a + ld [MonType], a + call LowVolume + predef StatsScreenInit + call MaxVolume + call Call_ExitMenu + ld a, 0 + ret +; 12e1b + + +MonMenu_Cut: ; 12e1b + callba CutFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12e30 + + +MonMenu_Fly: ; 12e30 + callba FlyFunction + ld a, [wFieldMoveSucceeded] + cp $2 + jr z, .Fail + cp $0 + jr z, .Error + callba TrainerRankings_Fly + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret + +.Error: + ld a, $0 + ret + +.Unused: + ld a, $1 + ret +; 12e55 + +MonMenu_Flash: ; 12e55 + callba OWFlash + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12e6a + +MonMenu_Strength: ; 12e6a + callba StrengthFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12e7f + +MonMenu_Whirlpool: ; 12e7f + callba WhirlpoolFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12e94 + +MonMenu_Waterfall: ; 12e94 + callba WaterfallFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12ea9 + +MonMenu_Teleport: ; 12ea9 + callba TeleportFunction + ld a, [wFieldMoveSucceeded] + and a + jr z, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12ebd + +MonMenu_Surf: ; 12ebd + callba SurfFunction + ld a, [wFieldMoveSucceeded] + and a + jr z, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12ed1 + +MonMenu_Dig: ; 12ed1 + callba DigFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12ee6 + +MonMenu_Softboiled_MilkDrink: ; 12ee6 + call .CheckMonHasEnoughHP + jr nc, .NotEnoughHP + callba Softboiled_MilkDrinkFunction + jr .finish + +.NotEnoughHP: + ld hl, .Text_NotEnoughHP + call PrintText + +.finish + xor a + ld [PartyMenuActionText], a + ld a, $3 + ret +; 12f00 + +.Text_NotEnoughHP: + ; Not enough HP! + text_jump UnknownText_0x1c1ce3 + db "@" +; 0x12f05 + +.CheckMonHasEnoughHP: +; Need to have at least (MaxHP / 5) HP left. + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld [hDividend + 0], a + ld a, [hl] + ld [hDividend + 1], a + ld a, 5 + ld [hDivisor], a + ld b, 2 + call Divide + ld a, MON_HP + 1 + call GetPartyParamLocation + ld a, [hQuotient + 2] + sub [hl] + dec hl + ld a, [hQuotient + 1] + sbc [hl] + ret +; 12f26 + +MonMenu_Headbutt: ; 12f26 + callba HeadbuttFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12f3b + +MonMenu_RockSmash: ; 12f3b + callba RockSmashFunction + ld a, [wFieldMoveSucceeded] + cp $1 + jr nz, .Fail + ld b, $4 + ld a, $2 + ret + +.Fail: + ld a, $3 + ret +; 12f50 + +MonMenu_SweetScent: ; 12f50 + callba SweetScentFromMenu + ld b, $4 + ld a, $2 + ret +; 12f5b + +ChooseMoveToDelete: ; 12f5b + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadFontsBattleExtra + call .ChooseMoveToDelete + pop bc + ld a, b + ld [Options], a + push af + call ClearBGPalettes + pop af + ret +; 12f73 + +.ChooseMoveToDelete + call SetUpMoveScreenBG + ld de, DeleteMoveScreenAttrs + call SetMenuAttributes + call SetUpMoveList + ld hl, w2DMenuFlags1 + set 6, [hl] + jr .enter_loop + +.loop + call ScrollingMenuJoypad + bit B_BUTTON_F, a + jp nz, .b_button + bit A_BUTTON_F, a + jp nz, .a_button + +.enter_loop + call PrepareToPlaceMoveData + call PlaceMoveData + jp .loop +; 12f9c + +.a_button + and a + jr .finish + +.b_button + scf + +.finish + push af + xor a + ld [wSwitchMon], a + ld hl, w2DMenuFlags1 + res 6, [hl] + call ClearSprites + call ClearTileMap + pop af + ret +; 12fb2 + +DeleteMoveScreenAttrs: ; 12fb2 + db 3, 1 + db 3, 1 + db $40, $00 + dn 2, 0 + db D_UP | D_DOWN | A_BUTTON | B_BUTTON +; 12fba + +ManagePokemonMoves: ; 12fba + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call MoveScreenLoop + pop af + ld [Options], a + call ClearBGPalettes + +.egg + ld a, $0 + ret +; 12fd5 + +MoveScreenLoop: ; 12fd5 + ld a, [CurPartyMon] + inc a + ld [wPartyMenuCursor], a + call SetUpMoveScreenBG + call Function132d3 + ld de, MoveScreenAttributes + call SetMenuAttributes +.loop + call SetUpMoveList + ld hl, w2DMenuFlags1 + set 6, [hl] + jr .skip_joy + +.joy_loop + call ScrollingMenuJoypad + bit 1, a + jp nz, .b_button + bit 0, a + jp nz, .a_button + bit 4, a + jp nz, .d_right + bit 5, a + jp nz, .d_left + +.skip_joy + call PrepareToPlaceMoveData + ld a, [wMoveSwapBuffer] + and a + jr nz, .moving_move + call PlaceMoveData + jp .joy_loop + +.moving_move + ld a, " " + hlcoord 1, 11 + ld bc, 5 + call ByteFill + hlcoord 1, 12 + lb bc, 5, SCREEN_WIDTH - 2 + call ClearBox + hlcoord 1, 12 + ld de, String_1316b + call PlaceString + jp .joy_loop +.b_button + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jp z, .exit + + ld a, [wMoveSwapBuffer] + ld [wMenuCursorY], a + xor a + ld [wMoveSwapBuffer], a + hlcoord 1, 2 + lb bc, 8, SCREEN_WIDTH - 2 + call ClearBox + jp .loop +; 1305b + +.d_right + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_right + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.d_left + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_left + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.cycle_right + ld a, [CurPartyMon] + inc a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp -1 + jr z, .cycle_left + cp EGG + ret nz + jr .cycle_right + +.cycle_left + ld a, [CurPartyMon] + and a + ret z +.cycle_left_loop + ld a, [CurPartyMon] + dec a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp EGG + ret nz + ld a, [CurPartyMon] + and a + jr z, .cycle_right + jr .cycle_left_loop +; 130c6 + +.a_button + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jr nz, .place_move + ld a, [wMenuCursorY] + ld [wMoveSwapBuffer], a + call PlaceHollowCursor + jp .moving_move + +.place_move + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, $15 + add hl, bc + call .copy_move + ld a, [wBattleMode] + jr z, .swap_moves + ld hl, BattleMonMoves + ld bc, $20 + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, 6 + add hl, bc + call .copy_move + +.swap_moves + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + hlcoord 1, 2 + lb bc, 8, 18 + call ClearBox + hlcoord 10, 10 + lb bc, 1, 9 + call ClearBox + jp .loop +; 1313a + +.copy_move + push hl + ld a, [wMenuCursorY] + dec a + ld c, a + ld b, $0 + add hl, bc + ld d, h + ld e, l + pop hl + ld a, [wMoveSwapBuffer] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [de] + ld b, [hl] + ld [hl], a + ld a, b + ld [de], a + ret +; 13154 + +.exit + xor a + ld [wMoveSwapBuffer], a + ld hl, w2DMenuFlags1 + res 6, [hl] + call ClearSprites + jp ClearTileMap +; 13163 + +MoveScreenAttributes: ; 13163 + db 3, 1 + db 3, 1 + db $40, $00 + dn 2, 0 + db D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON +; 1316b + +String_1316b: ; 1316b + db "Where?@" +; 13172 + +SetUpMoveScreenBG: ; 13172 + call ClearBGPalettes + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + callba LoadStatsScreenPageTilesGFX + callba ClearSpriteAnims2 + ld a, [CurPartyMon] + ld e, a + ld d, $0 + ld hl, PartySpecies + add hl, de + ld a, [hl] + ld [wd265], a + ld e, $2 + callba LoadMenuMonIcon + hlcoord 0, 1 + ld b, 9 + ld c, 18 + call TextBox + hlcoord 0, 11 + ld b, 5 + ld c, 18 + call TextBox + hlcoord 2, 0 + lb bc, 2, 3 + call ClearBox + xor a + ld [MonType], a + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + hlcoord 5, 1 + call PlaceString + push bc + callba CopyPkmnToTempMon + pop hl + call PrintLevel + ld hl, PlayerHPPal + call SetHPPal + ld b, SCGB_MOVE_LIST + call GetSGBLayout + hlcoord 16, 0 + lb bc, 1, 3 + jp ClearBox +; 131ef + +SetUpMoveList: ; 131ef + xor a + ld [hBGMapMode], a + ld [wMoveSwapBuffer], a + ld [MonType], a + predef CopyPkmnToTempMon + ld hl, TempMonMoves + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + ld a, SCREEN_WIDTH * 2 + ld [Buffer1], a + hlcoord 2, 3 + predef ListMoves + hlcoord 10, 4 + predef ListMovePP + call WaitBGMap + call SetPalettes + ld a, [wNumMoves] + inc a + ld [w2DMenuNumRows], a + hlcoord 0, 11 + ld b, 5 + ld c, 18 + jp TextBox +; 13235 + +PrepareToPlaceMoveData: ; 13235 + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld a, [wMenuCursorY] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [CurMove], a + hlcoord 1, 12 + lb bc, 5, 18 + jp ClearBox +; 13256 + +PlaceMoveData: ; 13256 + xor a + ld [hBGMapMode], a + hlcoord 0, 10 + ld de, String_132ba + call PlaceString + hlcoord 0, 11 + ld de, String_132c2 + call PlaceString + hlcoord 12, 12 + ld de, String_132ca + call PlaceString + ld a, [CurMove] + ld b, a + hlcoord 2, 12 + predef PrintMoveType + ld a, [CurMove] + dec a + ld hl, Moves + MOVE_POWER + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + hlcoord 16, 12 + cp 2 + jr c, .no_power + ld [wd265], a + ld de, wd265 + lb bc, 1, 3 + call PrintNum + jr .description + +.no_power + ld de, String_132cf + call PlaceString + +.description + hlcoord 1, 14 + predef PrintMoveDesc + ld a, $1 + ld [hBGMapMode], a + ret +; 132ba + +String_132ba: ; 132ba + db "┌─────┐@" +; 132c2 +String_132c2: ; 132c2 + db "│TYPE/└@" +; 132ca +String_132ca: ; 132ca + db "ATK/@" +; 132cf +String_132cf: ; 132cf + db "---@" +; 132d3 + +Function132d3: ; 132d3 + call Function132da + call Function132fe + ret +; 132da + +Function132da: ; 132da + ld a, [CurPartyMon] + and a + ret z + ld c, a + ld e, a + ld d, 0 + ld hl, PartyCount + add hl, de +.loop + ld a, [hl] + and a + jr z, .prev + cp EGG + jr z, .prev + cp NUM_POKEMON + 1 + jr c, .legal + +.prev + dec hl + dec c + jr nz, .loop + ret + +.legal + hlcoord 16, 0 + ld [hl], "◀" + ret +; 132fe + +Function132fe: ; 132fe + ld a, [CurPartyMon] + inc a + ld c, a + ld a, [PartyCount] + cp c + ret z + ld e, c + ld d, 0 + ld hl, PartySpecies + add hl, de +.loop + ld a, [hl] + cp -1 + ret z + and a + jr z, .next + cp EGG + jr z, .next + cp NUM_POKEMON + 1 + jr c, .legal + +.next + inc hl + jr .loop + +.legal + hlcoord 18, 0 + ld [hl], "▶" + ret +; 13327 diff --git a/engine/startmenu.asm b/engine/startmenu.asm deleted file mode 100755 index 871da86be..000000000 --- a/engine/startmenu.asm +++ /dev/null @@ -1,1974 +0,0 @@ -StartMenu:: ; 125cd - - call ClearWindowData - - ld de, SFX_MENU - call PlaySFX - - callba ReanchorBGMap_NoOAMUpdate - - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ld hl, .MenuDataHeader - jr z, .GotMenuData - ld hl, .ContestMenuDataHeader -.GotMenuData: - - call LoadMenuDataHeader - call .SetUpMenuItems - ld a, [wBattleMenuCursorBuffer] - ld [wMenuCursorBuffer], a - call .DrawMenuAccount_ - call DrawVariableLengthMenuBox - call .DrawBugContestStatusBox - call SafeUpdateSprites - call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap - callba LoadFonts_NoOAMUpdate - call .DrawBugContestStatus - call UpdateTimePals - jr .Select - -.Reopen: - call UpdateSprites - call UpdateTimePals - call .SetUpMenuItems - ld a, [wBattleMenuCursorBuffer] - ld [wMenuCursorBuffer], a - -.Select: - call .GetInput - jr c, .Exit - call .DrawMenuAccount - ld a, [wMenuCursorBuffer] - ld [wBattleMenuCursorBuffer], a - call PlayClickSFX - call PlaceHollowCursor - call .OpenMenu - -; Menu items have different return functions. -; For example, saving exits the menu. - ld hl, .MenuReturns - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.MenuReturns: - dw .Reopen - dw .Exit - dw .ExitMenuCallFuncCloseText - dw .ExitMenuRunScriptCloseText - dw .ExitMenuRunScript - dw .ReturnEnd - dw .ReturnRedraw - -.Exit: - ld a, [hOAMUpdate] - push af - ld a, 1 - ld [hOAMUpdate], a - call LoadFontsExtra - pop af - ld [hOAMUpdate], a -.ReturnEnd: - call ExitMenu -.ReturnEnd2: - call CloseText - call UpdateTimePals - ret - -.GetInput: -; Return carry on exit, and no-carry on selection. - xor a - ld [hBGMapMode], a - call .DrawMenuAccount - call SetUpMenu - ld a, $ff - ld [MenuSelection], a -.loop - call .PrintMenuAccount - call GetScrollingMenuJoypad - ld a, [wMenuJoypad] - cp B_BUTTON - jr z, .b - cp A_BUTTON - jr z, .a - jr .loop -.a - call PlayClickSFX - and a - ret -.b - scf - ret -; 12691 - -.ExitMenuRunScript: ; 12691 - call ExitMenu - ld a, HMENURETURN_SCRIPT - ld [hMenuReturn], a - ret -; 12699 - -.ExitMenuRunScriptCloseText: ; 12699 - call ExitMenu - ld a, HMENURETURN_SCRIPT - ld [hMenuReturn], a - jr .ReturnEnd2 -; 126a2 - -.ExitMenuCallFuncCloseText: ; 126a2 - call ExitMenu - ld hl, wQueuedScriptAddr - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [wQueuedScriptBank] - rst FarCall - jr .ReturnEnd2 -; 126b1 - -.ReturnRedraw: ; 126b1 - call .Clear - jp .Reopen -; 126b7 - -.Clear: ; 126b7 - call ClearBGPalettes - call Call_ExitMenu - call ReloadTilesetAndPalettes - call .DrawMenuAccount_ - call DrawVariableLengthMenuBox - call .DrawBugContestStatus - call UpdateSprites - call ret_d90 - call FinishExitMenu - ret -; 126d3 - - -.MenuDataHeader: - db $40 ; tile backup - db 0, 10 ; start coords - db 17, 19 ; end coords - dw .MenuData - db 1 ; default selection - -.ContestMenuDataHeader: - db $40 ; tile backup - db 2, 10 ; start coords - db 17, 19 ; end coords - dw .MenuData - db 1 ; default selection - -.MenuData: - db %10101000 ; x padding, wrap around, start can close - dn 0, 0 ; rows, columns - dw MenuItemsList - dw .MenuString - dw .Items - -.Items: - dw StartMenu_Pokedex, .PokedexString, .PokedexDesc - dw StartMenu_Pokemon, .PartyString, .PartyDesc - dw StartMenu_Pack, .PackString, .PackDesc - dw StartMenu_Status, .StatusString, .StatusDesc - dw StartMenu_Save, .SaveString, .SaveDesc - dw StartMenu_Option, .OptionString, .OptionDesc - dw StartMenu_Exit, .ExitString, .ExitDesc - dw StartMenu_Pokegear, .PokegearString, .PokegearDesc - dw StartMenu_Quit, .QuitString, .QuitDesc - -.PokedexString: db "#DEX@" -.PartyString: db "#MON@" -.PackString: db "PACK@" -.StatusString: db "@" -.SaveString: db "SAVE@" -.OptionString: db "OPTION@" -.ExitString: db "EXIT@" -.PokegearString: db $24, "GEAR@" -.QuitString: db "QUIT@" - -.PokedexDesc: db "#MON" - next "database@" - -.PartyDesc: db "Party ", $4a - next "status@" - -.PackDesc: db "Contains" - next "items@" - -.PokegearDesc: db "Trainer's" - next "key device@" - -.StatusDesc: db "Your own" - next "status@" - -.SaveDesc: db "Save your" - next "progress@" - -.OptionDesc: db "Change" - next "settings@" - -.ExitDesc: db "Close this" - next "menu@" - -.QuitDesc: db "Quit and" - next "be judged.@" - - -.OpenMenu: ; 127e5 - ld a, [MenuSelection] - call .GetMenuAccountTextPointer - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 127ef - -.MenuString: ; 127ef - push de - ld a, [MenuSelection] - call .GetMenuAccountTextPointer - inc hl - inc hl - ld a, [hli] - ld d, [hl] - ld e, a - pop hl - call PlaceString - ret -; 12800 - -.MenuDesc: ; 12800 - push de - ld a, [MenuSelection] - cp $ff - jr z, .none - call .GetMenuAccountTextPointer -rept 4 - inc hl -endr - ld a, [hli] - ld d, [hl] - ld e, a - pop hl - call PlaceString - ret -.none - pop de - ret -; 12819 - - -.GetMenuAccountTextPointer: ; 12819 - ld e, a - ld d, 0 - ld hl, wMenuData2PointerTableAddr - ld a, [hli] - ld h, [hl] - ld l, a -rept 6 - add hl, de -endr - ret -; 12829 - - -.SetUpMenuItems: ; 12829 - xor a - ld [wWhichIndexSet], a - call .FillMenuList - - ld hl, StatusFlags - bit 0, [hl] - jr z, .no_pokedex - ld a, 0 ; pokedex - call .AppendMenuList -.no_pokedex - - ld a, [PartyCount] - and a - jr z, .no_pokemon - ld a, 1 ; pokemon - call .AppendMenuList -.no_pokemon - - ld a, [wLinkMode] - and a - jr nz, .no_pack - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - jr nz, .no_pack - ld a, 2 ; pack - call .AppendMenuList -.no_pack - - ld hl, wPokegearFlags - bit 7, [hl] - jr z, .no_pokegear - ld a, 7 ; pokegear - call .AppendMenuList -.no_pokegear - - ld a, 3 ; status - call .AppendMenuList - - ld a, [wLinkMode] - and a - jr nz, .no_save - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ld a, 8 ; quit - jr nz, .write - ld a, 4 ; save -.write - call .AppendMenuList -.no_save - - ld a, 5 ; option - call .AppendMenuList - ld a, 6 ; exit - call .AppendMenuList - ld a, c - ld [MenuItemsList], a - ret -; 1288d - - -.FillMenuList: ; 1288d - xor a - ld hl, MenuItemsList - ld [hli], a - ld a, -1 - ld bc, MenuItemsListEnd - (MenuItemsList + 1) - call ByteFill - ld de, MenuItemsList + 1 - ld c, 0 - ret -; 128a0 - -.AppendMenuList: ; 128a0 - ld [de], a - inc de - inc c - ret -; 128a4 - -.DrawMenuAccount_: ; 128a4 - jp .DrawMenuAccount -; 128a7 - -.PrintMenuAccount: ; 128a7 - call .IsMenuAccountOn - ret z - call .DrawMenuAccount - decoord 0, 14 - jp .MenuDesc -; 128b4 - -.DrawMenuAccount: ; 128b4 - call .IsMenuAccountOn - ret z - hlcoord 0, 13 - lb bc, 5, 10 - call ClearBox - hlcoord 0, 13 - ld b, 3 - ld c, 8 - jp TextBoxPalette -; 128cb - -.IsMenuAccountOn: ; 128cb - ld a, [Options2] - and 1 - ret -; 128d1 - -.DrawBugContestStatusBox: ; 128d1 - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ret z - callba StartMenu_DrawBugContestStatusBox - ret -; 128de - -.DrawBugContestStatus: ; 128de - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - jr nz, .contest - ret -.contest - callba StartMenu_PrintBugContestStatus - ret -; 128ed - - -StartMenu_Exit: ; 128ed -; Exit the menu. - - ld a, 1 - ret -; 128f0 - - -StartMenu_Quit: ; 128f0 -; Retire from the bug catching contest. - - ld hl, .EndTheContestText - call StartMenuYesNo - jr c, .DontEndContest - ld a, BANK(BugCatchingContestReturnToGateScript) - ld hl, BugCatchingContestReturnToGateScript - call FarQueueScript - ld a, 4 - ret - -.DontEndContest: - ld a, 0 - ret - -.EndTheContestText: - text_jump UnknownText_0x1c1a6c - db "@" -; 1290b - - -StartMenu_Save: ; 1290b -; Save the game. - - call BufferScreen - callba SaveMenu - jr nc, .asm_12919 - ld a, 0 - ret -.asm_12919 - ld a, 1 - ret -; 1291c - - -StartMenu_Option: ; 1291c -; Game options. - - call FadeToMenu - callba OptionsMenu - ld a, 6 - ret -; 12928 - - -StartMenu_Status: ; 12928 -; Player status. - - call FadeToMenu - callba TrainerCard - call CloseSubmenu - ld a, 0 - ret -; 12937 - - -StartMenu_Pokedex: ; 12937 - - ld a, [PartyCount] - and a - jr z, .asm_12949 - - call FadeToMenu - callba Pokedex - call CloseSubmenu - -.asm_12949 - ld a, 0 - ret -; 1294c - - -StartMenu_Pokegear: ; 1294c - - call FadeToMenu - callba PokeGear - call CloseSubmenu - ld a, 0 - ret -; 1295b - - -StartMenu_Pack: ; 1295b - - call FadeToMenu - callba Pack - ld a, [wcf66] - and a - jr nz, .used_item - call CloseSubmenu - ld a, 0 - ret - -.used_item - call ExitAllMenus - ld a, 4 - ret -; 12976 - - -StartMenu_Pokemon: ; 12976 - - ld a, [PartyCount] - and a - jr z, .return - - call FadeToMenu - -.choosemenu - xor a - ld [PartyMenuActionText], a ; Choose a POKéMON. - call ClearBGPalettes - -.menu - callba LoadPartyMenuGFX - callba InitPartyMenuWithCancel - callba InitPartyMenuGFX - -.menunoreload - callba WritePartyMenuTilemap - callba PrintPartyMenuText - call WaitBGMap - call SetPalettes ; load regular palettes? - call DelayFrame - callba PartyMenuSelect - jr c, .return ; if cancelled or pressed B - - call PokemonActionSubmenu - cp 3 - jr z, .menu - cp 0 - jr z, .choosemenu - cp 1 - jr z, .menunoreload - cp 2 - jr z, .quit - -.return - call CloseSubmenu - ld a, 0 - ret - -.quit - ld a, b - push af - call ExitAllMenus - pop af - ret -; 129d5 - -HasNoItems: ; 129d5 - ld a, [NumItems] - and a - ret nz - ld a, [NumKeyItems] - and a - ret nz - ld a, [NumBalls] - and a - ret nz - ld hl, TMsHMs - ld b, NUM_TMS + NUM_HMS -.loop - ld a, [hli] - and a - jr nz, .done - dec b - jr nz, .loop - scf - ret -.done - and a - ret - -TossItemFromPC: ; 129f4 - push de - call PartyMonItemName - callba _CheckTossableItem - ld a, [wItemAttributeParamBuffer] - and a - jr nz, .key_item - ld hl, .TossHowMany - call MenuTextBox - callba SelectQuantityToToss - push af - call CloseWindow - call ExitMenu - pop af - jr c, .quit - ld hl, .ConfirmToss - call MenuTextBox - call YesNoBox - push af - call ExitMenu - pop af - jr c, .quit - pop hl - ld a, [CurItemQuantity] - call TossItem - call PartyMonItemName - ld hl, .TossedThisMany - call MenuTextBox - call ExitMenu - and a - ret - -.key_item - call .CantToss -.quit - pop hl - scf - ret - -.TossHowMany: - ; Toss out how many @ (S)? - text_jump UnknownText_0x1c1a90 - db "@" - -.ConfirmToss: - ; Throw away @ @ (S)? - text_jump UnknownText_0x1c1aad - db "@" - -.TossedThisMany: - ; Discarded @ (S). - text_jump UnknownText_0x1c1aca - db "@" - -.CantToss: - ld hl, .TooImportantToToss - call MenuTextBoxBackup - ret - -.TooImportantToToss: - ; That's too impor- tant to toss out! - text_jump UnknownText_0x1c1adf - db "@" -; 0x12a60 - -CantUseItem: ; 12a60 - ld hl, CantUseItemText - call MenuTextBoxWaitButton - ret -; 12a67 - -CantUseItemText: ; 12a67 - text_jump UnknownText_0x1c1b03 - db "@" -; 12a6c - - -PartyMonItemName: ; 12a6c - ld a, [CurItem] - ld [wd265], a - call GetItemName - call CopyName1 - ret -; 12a79 - - -CancelPokemonAction: ; 12a79 - callba InitPartyMenuWithCancel - callba UnfreezeMonIcons - ld a, 1 - ret -; 12a88 - - -PokemonActionSubmenu: ; 12a88 - hlcoord 1, 15 - lb bc, 2, 18 - call ClearBox - callba MonSubmenu - call GetCurNick - ld a, [MenuSelection] - ld hl, .Actions - ld de, 3 - call IsInArray - jr nc, .nothing - - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -.nothing - ld a, 0 - ret - -.Actions: - dbw MONMENU_CUT, MonMenu_Cut ; Cut - dbw MONMENU_FLY, MonMenu_Fly ; Fly - dbw MONMENU_SURF, MonMenu_Surf ; Surf - dbw MONMENU_STRENGTH, MonMenu_Strength ; Strength - dbw MONMENU_FLASH, MonMenu_Flash ; Flash - dbw MONMENU_WHIRLPOOL, MonMenu_Whirlpool ; Whirlpool - dbw MONMENU_DIG, MonMenu_Dig ; Dig - dbw MONMENU_TELEPORT, MonMenu_Teleport ; Teleport - dbw MONMENU_SOFTBOILED, MonMenu_Softboiled_MilkDrink ; Softboiled - dbw MONMENU_MILKDRINK, MonMenu_Softboiled_MilkDrink ; MilkDrink - dbw MONMENU_HEADBUTT, MonMenu_Headbutt ; Headbutt - dbw MONMENU_WATERFALL, MonMenu_Waterfall ; Waterfall - dbw MONMENU_ROCKSMASH, MonMenu_RockSmash ; RockSmash - dbw MONMENU_SWEETSCENT, MonMenu_SweetScent ; SweetScent - dbw MONMENU_STATS, OpenPartyStats - dbw MONMENU_SWITCH, SwitchPartyMons - dbw MONMENU_ITEM, GiveTakePartyMonItem - dbw MONMENU_CANCEL, CancelPokemonAction - dbw MONMENU_MOVE, ManagePokemonMoves ; move - dbw MONMENU_MAIL, MonMailAction ; mail -; 12aec - - -SwitchPartyMons: ; 12aec - -; Don't try if there's nothing to switch! - ld a, [PartyCount] - cp 2 - jr c, .DontSwitch - - ld a, [CurPartyMon] - inc a - ld [wSwitchMon], a - - callba HoldSwitchmonIcon - callba InitPartyMenuNoCancel - - ld a, PARTYMENUACTION_MOVE - ld [PartyMenuActionText], a - callba WritePartyMenuTilemap - callba PrintPartyMenuText - - hlcoord 0, 1 - ld bc, 20 * 2 - ld a, [wSwitchMon] - dec a - call AddNTimes - ld [hl], "▷" - call WaitBGMap - call SetPalettes - call DelayFrame - - callba PartyMenuSelect - bit 1, b - jr c, .DontSwitch - - callba _SwitchPartyMons - - xor a - ld [PartyMenuActionText], a - - callba LoadPartyMenuGFX - callba InitPartyMenuWithCancel - callba InitPartyMenuGFX - - ld a, 1 - ret - -.DontSwitch: - xor a - ld [PartyMenuActionText], a - call CancelPokemonAction - ret -; 12b60 - - -GiveTakePartyMonItem: ; 12b60 - -; Eggs can't hold items! - ld a, [CurPartySpecies] - cp EGG - jr z, .cancel - - ld hl, GiveTakeItemMenuData - call LoadMenuDataHeader - call VerticalMenu - call ExitMenu - jr c, .cancel - - call GetCurNick - ld hl, StringBuffer1 - ld de, wMonOrItemNameBuffer - ld bc, PKMN_NAME_LENGTH - call CopyBytes - ld a, [wMenuCursorY] - cp 1 - jr nz, .take - - call LoadStandardMenuDataHeader - call ClearPalettes - call .GiveItem - call ClearPalettes - call LoadFontsBattleExtra - call ExitMenu - ld a, 0 - ret - -.take - call TakePartyItem - ld a, 3 - ret - -.cancel - ld a, 3 - ret -; 12ba9 - - -.GiveItem: - - callba DepositSellInitPackBuffers - -.loop - callba DepositSellPack - - ld a, [wcf66] - and a - jr z, .quit - - ld a, [wcf65] - cp 2 - jr z, .next - - call CheckTossableItem - ld a, [wItemAttributeParamBuffer] - and a - jr nz, .next - - call TryGiveItemToPartymon - jr .quit - -.next - ld hl, CantBeHeldText - call MenuTextBoxBackup - jr .loop - -.quit - ret -; 12bd9 - - -TryGiveItemToPartymon: ; 12bd9 - - call SpeechTextBox - call PartyMonItemName - call GetPartyItemLocation - ld a, [hl] - and a - jr z, .give_item_to_mon - - push hl - ld d, a - callba ItemIsMail - pop hl - jr c, .please_remove_mail - ld a, [hl] - jr .already_holding_item - -.give_item_to_mon - call GiveItemToPokemon - ld hl, MadeHoldText - call MenuTextBoxBackup - call GivePartyItem - ret - -.please_remove_mail - ld hl, PleaseRemoveMailText - call MenuTextBoxBackup - ret - -.already_holding_item - ld [wd265], a - call GetItemName - ld hl, SwitchAlreadyHoldingText - call StartMenuYesNo - jr c, .abort - - call GiveItemToPokemon - ld a, [wd265] - push af - ld a, [CurItem] - ld [wd265], a - pop af - ld [CurItem], a - call ReceiveItemFromPokemon - jr nc, .bag_full - - ld hl, TookAndMadeHoldText - call MenuTextBoxBackup - ld a, [wd265] - ld [CurItem], a - call GivePartyItem - ret - -.bag_full - ld a, [wd265] - ld [CurItem], a - call ReceiveItemFromPokemon - ld hl, ItemStorageIsFullText - call MenuTextBoxBackup - -.abort - ret -; 12c4c - - -GivePartyItem: ; 12c4c - - call GetPartyItemLocation - ld a, [CurItem] - ld [hl], a - ld d, a - callba ItemIsMail - jr nc, .done - call ComposeMailMessage - -.done - ret -; 12c60 - - -TakePartyItem: ; 12c60 - - call SpeechTextBox - call GetPartyItemLocation - ld a, [hl] - and a - jr z, .asm_12c8c - - ld [CurItem], a - call ReceiveItemFromPokemon - jr nc, .asm_12c94 - - callba ItemIsMail - call GetPartyItemLocation - ld a, [hl] - ld [wd265], a - ld [hl], NO_ITEM - call GetItemName - ld hl, TookFromText - call MenuTextBoxBackup - jr .asm_12c9a - -.asm_12c8c - ld hl, IsntHoldingAnythingText - call MenuTextBoxBackup - jr .asm_12c9a - -.asm_12c94 - ld hl, ItemStorageIsFullText - call MenuTextBoxBackup - -.asm_12c9a - ret -; 12c9b - - -GiveTakeItemMenuData: ; 12c9b - db %01010000 - db 12, 12 ; start coords - db 17, 19 ; end coords - dw .Items - db 1 ; default option - -.Items: - db %10000000 ; x padding - db 2 ; # items - db "GIVE@" - db "TAKE@" -; 12caf - - -TookAndMadeHoldText: ; 12caf - text_jump UnknownText_0x1c1b2c - db "@" -; 12cb4 - -MadeHoldText: ; 12cb4 - text_jump UnknownText_0x1c1b57 - db "@" -; 12cb9 - -PleaseRemoveMailText: ; 12cb9 - text_jump UnknownText_0x1c1b6f - db "@" -; 12cbe - -IsntHoldingAnythingText: ; 12cbe - text_jump UnknownText_0x1c1b8e - db "@" -; 12cc3 - -ItemStorageIsFullText: ; 12cc3 - text_jump UnknownText_0x1c1baa - db "@" -; 12cc8 - -TookFromText: ; 12cc8 - text_jump UnknownText_0x1c1bc4 - db "@" -; 12ccd - -SwitchAlreadyHoldingText: ; 12ccd - text_jump UnknownText_0x1c1bdc - db "@" -; 12cd2 - -CantBeHeldText: ; 12cd2 - text_jump UnknownText_0x1c1c09 - db "@" -; 12cd7 - - -GetPartyItemLocation: ; 12cd7 - push af - ld a, MON_ITEM - call GetPartyParamLocation - pop af - ret -; 12cdf - - -ReceiveItemFromPokemon: ; 12cdf - ld a, $1 - ld [wItemQuantityChangeBuffer], a - ld hl, NumItems - jp ReceiveItem -; 12cea - - -GiveItemToPokemon: ; 12cea (4:6cea) - ld a, $1 - ld [wItemQuantityChangeBuffer], a - ld hl, NumItems - jp TossItem - -StartMenuYesNo: ; 12cf5 - call MenuTextBox - call YesNoBox - jp ExitMenu -; 12cfe - - -ComposeMailMessage: ; 12cfe (4:6cfe) - ld de, wTempMailMessage - callba _ComposeMailMessage - ld hl, PlayerName - ld de, wTempMailAuthor - ld bc, NAME_LENGTH - 1 - call CopyBytes - ld hl, PlayerID - ld bc, 2 - call CopyBytes - ld a, [CurPartySpecies] - ld [de], a - inc de - ld a, [CurItem] - ld [de], a - ld a, [CurPartyMon] - ld hl, sPartyMail - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - ld hl, wTempMail - ld bc, MAIL_STRUCT_LENGTH - ld a, BANK(sPartyMail) - call GetSRAMBank - call CopyBytes - call CloseSRAM - ret - -MonMailAction: ; 12d45 -; If in the time capsule or trade center, -; selecting the mail only allows you to -; read the mail. - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jr z, .read - cp LINK_TRADECENTER - jr z, .read - -; Show the READ/TAKE/QUIT menu. - ld hl, .MenuDataHeader - call LoadMenuDataHeader - call VerticalMenu - call ExitMenu - -; Interpret the menu. - jp c, .done - ld a, [wMenuCursorY] - cp $1 - jr z, .read - cp $2 - jr z, .take - jp .done - -.read - callba ReadPartyMonMail - ld a, $0 - ret - -.take - ld hl, .sendmailtopctext - call StartMenuYesNo - jr c, .RemoveMailToBag - ld a, [CurPartyMon] - ld b, a - callba SendMailToPC - jr c, .MailboxFull - ld hl, .sentmailtopctext - call MenuTextBoxBackup - jr .done - -.MailboxFull: - ld hl, .mailboxfulltext - call MenuTextBoxBackup - jr .done - -.RemoveMailToBag: - ld hl, .mailwilllosemessagetext - call StartMenuYesNo - jr c, .done - call GetPartyItemLocation - ld a, [hl] - ld [CurItem], a - call ReceiveItemFromPokemon - jr nc, .BagIsFull - call GetPartyItemLocation - ld [hl], $0 - call GetCurNick - ld hl, .tookmailfrommontext - call MenuTextBoxBackup - jr .done - -.BagIsFull: - ld hl, .bagfulltext - call MenuTextBoxBackup - jr .done - -.done - ld a, $3 - ret -; 12dc9 - - -.MenuDataHeader: - db $40 ; flags - db 10, 12 ; start coords - db 17, 19 ; end coords - dw .MenuData2 - db 1 ; default option -; 0x12dd1 - -.MenuData2: - db $80 ; flags - db 3 ; items - db "READ@" - db "TAKE@" - db "QUIT@" -; 0x12de2 - - -.mailwilllosemessagetext -; The MAIL will lose its message. OK? - text_jump UnknownText_0x1c1c22 - db "@" -; 0x12de7 - -.tookmailfrommontext -; MAIL detached from . - text_jump UnknownText_0x1c1c47 - db "@" -; 0x12dec - -.bagfulltext -; There's no space for removing MAIL. - text_jump UnknownText_0x1c1c62 - db "@" -; 0x12df1 - -.sendmailtopctext -; Send the removed MAIL to your PC? - text_jump UnknownText_0x1c1c86 - db "@" -; 0x12df6 - -.mailboxfulltext -; Your PC's MAILBOX is full. - text_jump UnknownText_0x1c1ca9 - db "@" -; 0x12dfb - -.sentmailtopctext -; The MAIL was sent to your PC. - text_jump UnknownText_0x1c1cc4 - db "@" -; 0x12e00 - - -OpenPartyStats: ; 12e00 - call LoadStandardMenuDataHeader - call ClearSprites -; PartyMon - xor a - ld [MonType], a - call LowVolume - predef StatsScreenInit - call MaxVolume - call Call_ExitMenu - ld a, 0 - ret -; 12e1b - - -MonMenu_Cut: ; 12e1b - callba CutFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12e30 - - -MonMenu_Fly: ; 12e30 - callba FlyFunction - ld a, [wFieldMoveSucceeded] - cp $2 - jr z, .Fail - cp $0 - jr z, .Error - callba TrainerRankings_Fly - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret - -.Error: - ld a, $0 - ret - -.Unused: - ld a, $1 - ret -; 12e55 - -MonMenu_Flash: ; 12e55 - callba OWFlash - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12e6a - -MonMenu_Strength: ; 12e6a - callba StrengthFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12e7f - -MonMenu_Whirlpool: ; 12e7f - callba WhirlpoolFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12e94 - -MonMenu_Waterfall: ; 12e94 - callba WaterfallFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12ea9 - -MonMenu_Teleport: ; 12ea9 - callba TeleportFunction - ld a, [wFieldMoveSucceeded] - and a - jr z, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12ebd - -MonMenu_Surf: ; 12ebd - callba SurfFunction - ld a, [wFieldMoveSucceeded] - and a - jr z, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12ed1 - -MonMenu_Dig: ; 12ed1 - callba DigFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12ee6 - -MonMenu_Softboiled_MilkDrink: ; 12ee6 - call .CheckMonHasEnoughHP - jr nc, .NotEnoughHP - callba Softboiled_MilkDrinkFunction - jr .finish - -.NotEnoughHP: - ld hl, .Text_NotEnoughHP - call PrintText - -.finish - xor a - ld [PartyMenuActionText], a - ld a, $3 - ret -; 12f00 - -.Text_NotEnoughHP: - ; Not enough HP! - text_jump UnknownText_0x1c1ce3 - db "@" -; 0x12f05 - -.CheckMonHasEnoughHP: -; Need to have at least (MaxHP / 5) HP left. - ld a, MON_MAXHP - call GetPartyParamLocation - ld a, [hli] - ld [hDividend + 0], a - ld a, [hl] - ld [hDividend + 1], a - ld a, 5 - ld [hDivisor], a - ld b, 2 - call Divide - ld a, MON_HP + 1 - call GetPartyParamLocation - ld a, [hQuotient + 2] - sub [hl] - dec hl - ld a, [hQuotient + 1] - sbc [hl] - ret -; 12f26 - -MonMenu_Headbutt: ; 12f26 - callba HeadbuttFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12f3b - -MonMenu_RockSmash: ; 12f3b - callba RockSmashFunction - ld a, [wFieldMoveSucceeded] - cp $1 - jr nz, .Fail - ld b, $4 - ld a, $2 - ret - -.Fail: - ld a, $3 - ret -; 12f50 - -MonMenu_SweetScent: ; 12f50 - callba SweetScentFromMenu - ld b, $4 - ld a, $2 - ret -; 12f5b - -ChooseMoveToDelete: ; 12f5b - ld hl, Options - ld a, [hl] - push af - set NO_TEXT_SCROLL, [hl] - call LoadFontsBattleExtra - call .ChooseMoveToDelete - pop bc - ld a, b - ld [Options], a - push af - call ClearBGPalettes - pop af - ret -; 12f73 - -.ChooseMoveToDelete - call SetUpMoveScreenBG - ld de, DeleteMoveScreenAttrs - call SetMenuAttributes - call SetUpMoveList - ld hl, w2DMenuFlags1 - set 6, [hl] - jr .enter_loop - -.loop - call ScrollingMenuJoypad - bit B_BUTTON_F, a - jp nz, .b_button - bit A_BUTTON_F, a - jp nz, .a_button - -.enter_loop - call PrepareToPlaceMoveData - call PlaceMoveData - jp .loop -; 12f9c - -.a_button - and a - jr .finish - -.b_button - scf - -.finish - push af - xor a - ld [wSwitchMon], a - ld hl, w2DMenuFlags1 - res 6, [hl] - call ClearSprites - call ClearTileMap - pop af - ret -; 12fb2 - -DeleteMoveScreenAttrs: ; 12fb2 - db 3, 1 - db 3, 1 - db $40, $00 - dn 2, 0 - db D_UP | D_DOWN | A_BUTTON | B_BUTTON -; 12fba - -ManagePokemonMoves: ; 12fba - ld a, [CurPartySpecies] - cp EGG - jr z, .egg - ld hl, Options - ld a, [hl] - push af - set NO_TEXT_SCROLL, [hl] - call MoveScreenLoop - pop af - ld [Options], a - call ClearBGPalettes - -.egg - ld a, $0 - ret -; 12fd5 - -MoveScreenLoop: ; 12fd5 - ld a, [CurPartyMon] - inc a - ld [wPartyMenuCursor], a - call SetUpMoveScreenBG - call Function132d3 - ld de, MoveScreenAttributes - call SetMenuAttributes -.loop - call SetUpMoveList - ld hl, w2DMenuFlags1 - set 6, [hl] - jr .skip_joy - -.joy_loop - call ScrollingMenuJoypad - bit 1, a - jp nz, .b_button - bit 0, a - jp nz, .a_button - bit 4, a - jp nz, .d_right - bit 5, a - jp nz, .d_left - -.skip_joy - call PrepareToPlaceMoveData - ld a, [wMoveSwapBuffer] - and a - jr nz, .moving_move - call PlaceMoveData - jp .joy_loop - -.moving_move - ld a, " " - hlcoord 1, 11 - ld bc, 5 - call ByteFill - hlcoord 1, 12 - lb bc, 5, SCREEN_WIDTH - 2 - call ClearBox - hlcoord 1, 12 - ld de, String_1316b - call PlaceString - jp .joy_loop -.b_button - call PlayClickSFX - call WaitSFX - ld a, [wMoveSwapBuffer] - and a - jp z, .exit - - ld a, [wMoveSwapBuffer] - ld [wMenuCursorY], a - xor a - ld [wMoveSwapBuffer], a - hlcoord 1, 2 - lb bc, 8, SCREEN_WIDTH - 2 - call ClearBox - jp .loop -; 1305b - -.d_right - ld a, [wMoveSwapBuffer] - and a - jp nz, .joy_loop - - ld a, [CurPartyMon] - ld b, a - push bc - call .cycle_right - pop bc - ld a, [CurPartyMon] - cp b - jp z, .joy_loop - jp MoveScreenLoop - -.d_left - ld a, [wMoveSwapBuffer] - and a - jp nz, .joy_loop - ld a, [CurPartyMon] - ld b, a - push bc - call .cycle_left - pop bc - ld a, [CurPartyMon] - cp b - jp z, .joy_loop - jp MoveScreenLoop - -.cycle_right - ld a, [CurPartyMon] - inc a - ld [CurPartyMon], a - ld c, a - ld b, 0 - ld hl, PartySpecies - add hl, bc - ld a, [hl] - cp -1 - jr z, .cycle_left - cp EGG - ret nz - jr .cycle_right - -.cycle_left - ld a, [CurPartyMon] - and a - ret z -.cycle_left_loop - ld a, [CurPartyMon] - dec a - ld [CurPartyMon], a - ld c, a - ld b, 0 - ld hl, PartySpecies - add hl, bc - ld a, [hl] - cp EGG - ret nz - ld a, [CurPartyMon] - and a - jr z, .cycle_right - jr .cycle_left_loop -; 130c6 - -.a_button - call PlayClickSFX - call WaitSFX - ld a, [wMoveSwapBuffer] - and a - jr nz, .place_move - ld a, [wMenuCursorY] - ld [wMoveSwapBuffer], a - call PlaceHollowCursor - jp .moving_move - -.place_move - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - ld a, [CurPartyMon] - call AddNTimes - push hl - call .copy_move - pop hl - ld bc, $15 - add hl, bc - call .copy_move - ld a, [wBattleMode] - jr z, .swap_moves - ld hl, BattleMonMoves - ld bc, $20 - ld a, [CurPartyMon] - call AddNTimes - push hl - call .copy_move - pop hl - ld bc, 6 - add hl, bc - call .copy_move - -.swap_moves - ld de, SFX_SWITCH_POKEMON - call PlaySFX - call WaitSFX - ld de, SFX_SWITCH_POKEMON - call PlaySFX - call WaitSFX - hlcoord 1, 2 - lb bc, 8, 18 - call ClearBox - hlcoord 10, 10 - lb bc, 1, 9 - call ClearBox - jp .loop -; 1313a - -.copy_move - push hl - ld a, [wMenuCursorY] - dec a - ld c, a - ld b, $0 - add hl, bc - ld d, h - ld e, l - pop hl - ld a, [wMoveSwapBuffer] - dec a - ld c, a - ld b, $0 - add hl, bc - ld a, [de] - ld b, [hl] - ld [hl], a - ld a, b - ld [de], a - ret -; 13154 - -.exit - xor a - ld [wMoveSwapBuffer], a - ld hl, w2DMenuFlags1 - res 6, [hl] - call ClearSprites - jp ClearTileMap -; 13163 - -MoveScreenAttributes: ; 13163 - db 3, 1 - db 3, 1 - db $40, $00 - dn 2, 0 - db D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON -; 1316b - -String_1316b: ; 1316b - db "Where?@" -; 13172 - -SetUpMoveScreenBG: ; 13172 - call ClearBGPalettes - call ClearTileMap - call ClearSprites - xor a - ld [hBGMapMode], a - callba LoadStatsScreenPageTilesGFX - callba ClearSpriteAnims2 - ld a, [CurPartyMon] - ld e, a - ld d, $0 - ld hl, PartySpecies - add hl, de - ld a, [hl] - ld [wd265], a - ld e, $2 - callba LoadMenuMonIcon - hlcoord 0, 1 - ld b, 9 - ld c, 18 - call TextBox - hlcoord 0, 11 - ld b, 5 - ld c, 18 - call TextBox - hlcoord 2, 0 - lb bc, 2, 3 - call ClearBox - xor a - ld [MonType], a - ld hl, PartyMonNicknames - ld a, [CurPartyMon] - call GetNick - hlcoord 5, 1 - call PlaceString - push bc - callba CopyPkmnToTempMon - pop hl - call PrintLevel - ld hl, PlayerHPPal - call SetHPPal - ld b, SCGB_MOVE_LIST - call GetSGBLayout - hlcoord 16, 0 - lb bc, 1, 3 - jp ClearBox -; 131ef - -SetUpMoveList: ; 131ef - xor a - ld [hBGMapMode], a - ld [wMoveSwapBuffer], a - ld [MonType], a - predef CopyPkmnToTempMon - ld hl, TempMonMoves - ld de, wListMoves_MoveIndicesBuffer - ld bc, NUM_MOVES - call CopyBytes - ld a, SCREEN_WIDTH * 2 - ld [Buffer1], a - hlcoord 2, 3 - predef ListMoves - hlcoord 10, 4 - predef ListMovePP - call WaitBGMap - call SetPalettes - ld a, [wNumMoves] - inc a - ld [w2DMenuNumRows], a - hlcoord 0, 11 - ld b, 5 - ld c, 18 - jp TextBox -; 13235 - -PrepareToPlaceMoveData: ; 13235 - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - ld a, [CurPartyMon] - call AddNTimes - ld a, [wMenuCursorY] - dec a - ld c, a - ld b, $0 - add hl, bc - ld a, [hl] - ld [CurMove], a - hlcoord 1, 12 - lb bc, 5, 18 - jp ClearBox -; 13256 - -PlaceMoveData: ; 13256 - xor a - ld [hBGMapMode], a - hlcoord 0, 10 - ld de, String_132ba - call PlaceString - hlcoord 0, 11 - ld de, String_132c2 - call PlaceString - hlcoord 12, 12 - ld de, String_132ca - call PlaceString - ld a, [CurMove] - ld b, a - hlcoord 2, 12 - predef PrintMoveType - ld a, [CurMove] - dec a - ld hl, Moves + MOVE_POWER - ld bc, MOVE_LENGTH - call AddNTimes - ld a, BANK(Moves) - call GetFarByte - hlcoord 16, 12 - cp 2 - jr c, .no_power - ld [wd265], a - ld de, wd265 - lb bc, 1, 3 - call PrintNum - jr .description - -.no_power - ld de, String_132cf - call PlaceString - -.description - hlcoord 1, 14 - predef PrintMoveDesc - ld a, $1 - ld [hBGMapMode], a - ret -; 132ba - -String_132ba: ; 132ba - db "┌─────┐@" -; 132c2 -String_132c2: ; 132c2 - db "│TYPE/└@" -; 132ca -String_132ca: ; 132ca - db "ATK/@" -; 132cf -String_132cf: ; 132cf - db "---@" -; 132d3 - -Function132d3: ; 132d3 - call Function132da - call Function132fe - ret -; 132da - -Function132da: ; 132da - ld a, [CurPartyMon] - and a - ret z - ld c, a - ld e, a - ld d, 0 - ld hl, PartyCount - add hl, de -.loop - ld a, [hl] - and a - jr z, .prev - cp EGG - jr z, .prev - cp NUM_POKEMON + 1 - jr c, .legal - -.prev - dec hl - dec c - jr nz, .loop - ret - -.legal - hlcoord 16, 0 - ld [hl], "◀" - ret -; 132fe - -Function132fe: ; 132fe - ld a, [CurPartyMon] - inc a - ld c, a - ld a, [PartyCount] - cp c - ret z - ld e, c - ld d, 0 - ld hl, PartySpecies - add hl, de -.loop - ld a, [hl] - cp -1 - ret z - and a - jr z, .next - cp EGG - jr z, .next - cp NUM_POKEMON + 1 - jr c, .legal - -.next - inc hl - jr .loop - -.legal - hlcoord 18, 0 - ld [hl], "▶" - ret -; 13327 diff --git a/engine/switch_party_mons.asm b/engine/switch_party_mons.asm new file mode 100644 index 000000000..cde9c82b2 --- /dev/null +++ b/engine/switch_party_mons.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/tempmon.asm b/engine/tempmon.asm new file mode 100644 index 000000000..332cb0c6c --- /dev/null +++ b/engine/tempmon.asm @@ -0,0 +1,127 @@ +CopyPkmnToTempMon: ; 5084a +; gets the BaseData of a Pkmn +; and copys the PkmnStructure to TempMon + + ld a, [CurPartyMon] + ld e, a + call GetPkmnSpecies + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + + ld a, [MonType] + ld hl, PartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + and a + jr z, .copywholestruct + ld hl, OTPartyMon1Species + ld bc, PARTYMON_STRUCT_LENGTH + cp OTPARTYMON + jr z, .copywholestruct + ld bc, BOXMON_STRUCT_LENGTH + callab CopyBoxmonToTempMon + jr .done + +.copywholestruct + ld a, [CurPartyMon] + call AddNTimes + ld de, TempMon + ld bc, PARTYMON_STRUCT_LENGTH + call CopyBytes + +.done + ret + +CalcwBufferMonStats: ; 5088b + ld bc, wBufferMon + jr _TempMonStatsCalculation + +CalcTempmonStats: ; 50890 + ld bc, TempMon +_TempMonStatsCalculation: ; 50893 + ld hl, MON_LEVEL + add hl, bc + ld a, [hl] + 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 + push bc + ld b, $1 + predef CalcPkmnStats + pop bc + ld hl, MON_HP + add hl, bc + ld d, h + ld e, l + ld a, [CurPartySpecies] + cp EGG + jr nz, .not_egg + xor a + ld [de], a + inc de + ld [de], a + jr .zero_status + +.not_egg + push bc + ld hl, MON_MAXHP + add hl, bc + ld bc, 2 + call CopyBytes + pop bc + +.zero_status + ld hl, MON_STATUS + add hl, bc + xor a + ld [hli], a + ld [hl], a + ret + +GetPkmnSpecies: ; 508d5 +; [MonType] has the type of the Pkmn +; e = Nr. of Pkmn (i.e. [CurPartyMon]) + + ld a, [MonType] + and a ; PARTYMON + jr z, .partymon + cp OTPARTYMON + jr z, .otpartymon + cp BOXMON + jr z, .boxmon + cp TEMPMON + jr z, .breedmon + ; WILDMON + +.partymon + ld hl, PartySpecies + jr .done + +.otpartymon + ld hl, OTPartySpecies + jr .done + +.boxmon + ld a, BANK(sBoxSpecies) + call GetSRAMBank + ld hl, sBoxSpecies + call .done + call CloseSRAM + ret + +.breedmon + ld a, [wBreedMon1Species] + jr .done2 + +.done + ld d, 0 + add hl, de + ld a, [hl] + +.done2 + ld [CurPartySpecies], a + ret -- cgit v1.2.3 From fa98c29fa44a7509b9e2377bdf84c05981dc4931 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 22:36:33 -0500 Subject: Add more palettes to data/palettes/ --- engine/card_flip.asm | 58 +-- engine/cgb_layouts.asm | 108 ++---- engine/color.asm | 921 ++-------------------------------------------- engine/credits.asm | 69 +--- engine/crystal_colors.asm | 161 ++------ engine/crystal_intro.asm | 513 ++------------------------ engine/debug.asm | 89 +---- engine/sgb_layouts.asm | 6 +- engine/title.asm | 82 +---- engine/unused_title.asm | 387 +------------------ 10 files changed, 149 insertions(+), 2245 deletions(-) (limited to 'engine') diff --git a/engine/card_flip.asm b/engine/card_flip.asm index ccb72c6ac..cfcd949e6 100755 --- a/engine/card_flip.asm +++ b/engine/card_flip.asm @@ -1664,50 +1664,7 @@ CardFlip_InitAttrPals: ; e0c37 (38:4c37) ; e0c93 (38:4c93) .palettes ; e0c93 - RGB 31, 31, 31 - RGB 17, 07, 31 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 29, 25, 00 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 13, 30 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 08, 17, 30 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 08, 31, 08 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 17, 07, 31 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 17, 07, 31 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 17, 07, 31 - RGB 06, 19, 08 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 00, 00 - RGB 31, 00, 00 +INCLUDE "data/palettes/card_flip.pal" ; e0cdb CardFlipLZ03: ; e0cdb @@ -1726,16 +1683,5 @@ CardFlipLZ02: ; e0ea8 INCBIN "gfx/card_flip/card_flip_2.2bpp.lz" CardFlipTilemap: ; e110c - db $ef, $15, $27, $2a, $2a, $06, $27, $2a, $2a, $06, $27 - db $ef, $07, $27, $3e, $3f, $42, $43, $46, $47, $4a, $4b - db $ef, $17, $26, $40, $41, $44, $45, $48, $49, $4c, $4d - db $ef, $25, $04, $00, $01, $00, $01, $00, $01, $00, $01 - db $ef, $05, $14, $10, $11, $10, $11, $10, $11, $10, $11 - db $ef, $16, $24, $20, $21, $20, $21, $20, $21, $20, $21 - db $ef, $25, $04, $00, $02, $00, $02, $00, $02, $00, $02 - db $ef, $05, $14, $10, $12, $10, $12, $10, $12, $10, $12 - db $ef, $16, $24, $20, $22, $20, $22, $20, $22, $20, $22 - db $ef, $25, $04, $00, $03, $00, $03, $00, $03, $00, $03 - db $ef, $05, $14, $10, $13, $10, $13, $10, $13, $10, $13 - db $ef, $16, $24, $20, $23, $20, $23, $20, $23, $20, $23 +INCBIN "gfx/card_flip/card_flip.tilemap" ; e1190 diff --git a/engine/cgb_layouts.asm b/engine/cgb_layouts.asm index 7ede2768f..18fda6170 100644 --- a/engine/cgb_layouts.asm +++ b/engine/cgb_layouts.asm @@ -94,7 +94,7 @@ _CGB_BattleColors: ; 8ddb ld h, $0 add hl, hl add hl, hl - ld bc, Palettes_a8be + ld bc, HPBarPals add hl, bc call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_ENEMY_HP ld a, [PlayerHPPal] @@ -102,10 +102,10 @@ _CGB_BattleColors: ; 8ddb ld h, $0 add hl, hl add hl, hl - ld bc, Palettes_a8be + ld bc, HPBarPals add hl, bc call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_PLAYER_HP - ld hl, Palettes_a8ca + ld hl, ExpBarPalette call LoadPalette_White_Col1_Col2_Black ; PAL_BATTLE_BG_EXP ld de, UnknOBPals pop hl @@ -148,7 +148,7 @@ _CGB_FinishBattleScreenLayout: ; 8e23 ld hl, Palettes_979c ld de, UnknOBPals palette PAL_BATTLE_OB_GRAY ld bc, 6 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM call ApplyAttrMap ret @@ -164,7 +164,7 @@ Mobile_InitPartyMenuBGPal7: ; 8e8b .not_mobile ld de, UnknBGPals palette 7 ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM ret ; 8e9f @@ -177,7 +177,7 @@ InitPartyMenuBGPal0: ; 8e9f .not_mobile ld de, UnknBGPals palette 0 ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM ret ; 8eb9 @@ -194,7 +194,7 @@ _CGB_PokegearPals: ; 8eb9 .got_pals ld de, UnknBGPals ld bc, 6 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call ApplyPals ld a, $1 @@ -209,19 +209,19 @@ _CGB_StatsScreenHPPals: ; 8edb ld h, $0 add hl, hl add hl, hl - ld bc, Palettes_a8be + ld bc, HPBarPals add hl, bc call LoadPalette_White_Col1_Col2_Black ; hp palette ld a, [CurPartySpecies] ld bc, TempMonDVs call GetPlayerOrMonPalettePointer call LoadPalette_White_Col1_Col2_Black ; mon palette - ld hl, Palettes_a8ca + ld hl, ExpBarPalette call LoadPalette_White_Col1_Col2_Black ; exp palette ld hl, StatsScreenPagePals ld de, UnknBGPals palette 3 ld bc, 3 palettes ; pink, green, and blue page palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call WipeAttrMap @@ -309,7 +309,7 @@ _CGB_Pokedex: ; 8f70 ld hl, .PokedexCursorPalette ld de, UnknOBPals palette 7 ; green cursor palette ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM call ApplyAttrMap call ApplyPals @@ -416,7 +416,7 @@ _CGB_SlotMachine: ; 906e ld hl, SlotMachinePals ld de, UnknBGPals ld bc, 16 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call WipeAttrMap hlcoord 0, 2, AttrMap @@ -509,7 +509,7 @@ _CGB07: ; 9122 ld hl, .Palette_9156 ld de, UnknOBPals ld bc, 2 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM call WipeAttrMap ret @@ -562,7 +562,7 @@ _CGB11: ; 9195 ld hl, Palettes_b789 ld de, UnknBGPals ld bc, 5 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call ApplyPals call WipeAttrMap @@ -574,7 +574,7 @@ _CGB_Diploma: ; 91ad ld hl, DiplomaPalettes ld de, UnknBGPals ld bc, 16 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM ld hl, PalPacket_9cb6 + 1 @@ -624,7 +624,7 @@ _CGB_Evolution: ; 91e4 ld hl, Palettes_979c ld de, UnknOBPals palette 2 ld bc, 6 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM .got_palette @@ -640,12 +640,12 @@ _CGB0c: ; 9228 ld hl, Palettes_b6f1 ld de, UnknBGPals ld bc, 5 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM ld hl, Palettes_b719 ld de, UnknOBPals ld bc, 2 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM ld a, SCGB_DIPLOMA ld [SGBPredef], a @@ -672,7 +672,7 @@ _CGB_UnownPuzzle: ; 925e call LoadHLPaletteIntoDE ld a, [rSVBK] push af - ld a, $5 + ld a, BANK(UnknOBPals) ld [rSVBK], a ld hl, UnknOBPals ld a, $1f @@ -802,7 +802,7 @@ _CGB_MoveList: ; 9373 ld h, 0 add hl, hl add hl, hl - ld bc, Palettes_a8be + ld bc, HPBarPals add hl, bc call LoadPalette_White_Col1_Col2_Black call WipeAttrMap @@ -860,7 +860,7 @@ _CGB_PackPals: ; 93d3 .got_gender ld de, UnknBGPals ld bc, 8 palettes ; 6 palettes? - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call WipeAttrMap hlcoord 0, 0, AttrMap @@ -891,67 +891,11 @@ _CGB_PackPals: ; 93d3 ; 9439 .ChrisPackPals: ; 9439 - RGB 31, 31, 31 - RGB 15, 15, 31 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 15, 31 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 31, 11, 31 - RGB 15, 15, 31 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 15, 31 - RGB 00, 00, 31 - RGB 31, 00, 00 - - RGB 31, 31, 31 - RGB 15, 15, 31 - RGB 31, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 07, 19, 07 - RGB 07, 19, 07 - RGB 00, 00, 00 +INCLUDE "data/palettes/pack.pal" ; 9469 .KrisPackPals: ; 9469 - RGB 31, 31, 31 - RGB 31, 14, 31 - RGB 31, 07, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 14, 31 - RGB 31, 07, 31 - RGB 00, 00, 00 - - RGB 15, 15, 31 - RGB 31, 14, 31 - RGB 31, 07, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 14, 31 - RGB 31, 07, 31 - RGB 31, 00, 00 - - RGB 31, 31, 31 - RGB 31, 14, 31 - RGB 31, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 07, 19, 07 - RGB 07, 19, 07 - RGB 00, 00, 00 +INCLUDE "data/palettes/pack_f.pal" ; 9499 _CGB_Pokepic: ; 9499 @@ -1057,10 +1001,10 @@ _CGB1e: ; 9542 _CGB_TradeTube: ; 9555 ld hl, PalPacket_9cc6 + 1 call CopyFourPalettes - ld hl, Palettes_b681 + ld hl, PartyMenuOBPals ld de, UnknOBPals ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM ld de, UnknOBPals palette 7 ld a, $1c @@ -1086,7 +1030,7 @@ _CGB_MysteryGift: ; 9591 ld hl, .Palettes ld de, UnknBGPals ld bc, 2 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM call ApplyPals call WipeAttrMap diff --git a/engine/color.asm b/engine/color.asm index e339b30be..12f22d4c1 100644 --- a/engine/color.asm +++ b/engine/color.asm @@ -354,7 +354,7 @@ ApplyHPBarPals: ld h, $0 add hl, hl add hl, hl - ld bc, Palettes_a8be + ld bc, HPBarPals add hl, bc ld bc, 4 ld a, $5 @@ -449,55 +449,7 @@ LoadMailPalettes: ret .MailPals: - RGB 20, 31, 11 - RGB 31, 19, 00 - RGB 31, 10, 09 - RGB 00, 00, 00 - - RGB 15, 20, 31 - RGB 30, 26, 00 - RGB 31, 12, 00 - RGB 00, 00, 00 - - RGB 24, 17, 31 - RGB 30, 26, 00 - RGB 08, 11, 31 - RGB 00, 00, 00 - - RGB 31, 25, 17 - RGB 31, 18, 04 - RGB 28, 12, 05 - RGB 00, 00, 00 - - RGB 19, 26, 31 - RGB 31, 05, 08 - RGB 31, 09, 31 - RGB 00, 00, 00 - - RGB 31, 19, 28 - RGB 31, 21, 00 - RGB 12, 22, 00 - RGB 00, 00, 00 - - RGB 19, 17, 23 - RGB 30, 26, 00 - RGB 31, 12, 00 - RGB 00, 00, 00 - - RGB 07, 26, 31 - RGB 26, 26, 27 - RGB 31, 11, 11 - RGB 00, 00, 00 - - RGB 21, 31, 21 - RGB 30, 26, 00 - RGB 31, 12, 00 - RGB 00, 00, 00 - - RGB 07, 26, 31 - RGB 31, 31, 00 - RGB 00, 21, 00 - RGB 00, 00, 00 +INCLUDE "data/palettes/mail.pal" INCLUDE "engine/cgb_layouts.asm" @@ -543,7 +495,7 @@ GetPredefPal: add hl, hl add hl, hl add hl, hl - ld bc, Palettes_9df6 + ld bc, PredefPals add hl, bc ret @@ -730,7 +682,7 @@ CGB_ApplyPartyMenuHPPals: ; 96f3 CGB layout $fc ret InitPartyMenuOBPals: - ld hl, Palettes_b681 + ld hl, PartyMenuOBPals ld de, UnknOBPals ld bc, 2 palettes ld a, $5 @@ -804,42 +756,14 @@ Function9779: mobile dec c jr nz, .loop ld hl, Palettes_979c - ld de, UnknOBPals + 8 * 2 + ld de, UnknOBPals palette 2 ld bc, 2 palettes ld a, $5 call FarCopyWRAM ret Palettes_979c: - RGB 31, 31, 31 - RGB 25, 25, 25 - RGB 13, 13, 13 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 07 - RGB 31, 16, 01 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 19, 24 - RGB 30, 10, 06 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 12, 25, 01 - RGB 05, 14, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 08, 12, 31 - RGB 01, 04, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 18, 07 - RGB 20, 15, 03 - RGB 00, 00, 00 +INCLUDE "data/palettes/979c.pal" Function97cc: ; XXX @@ -1141,7 +1065,7 @@ SGBBorder_PushBGPals: call DisableLCD ld a, %11100100 ld [rBGP], a - ld hl, Palettes_9df6 + ld hl, PredefPals ld de, VTiles1 ld bc, $1000 call CopyData @@ -1350,532 +1274,35 @@ PalPacket_9dc6: db $79, $26, $08, $00, $0b, $39, $cd, $48, $0c, $d0, $34, $a5, $ PalPacket_9dd6: db $79, $1b, $08, $00, $0b, $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0 PalPacket_9de6: db $79, $10, $08, $00, $0b, $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea -Palettes_9df6: - RGB 31, 31, 31 - RGB 22, 25, 19 - RGB 16, 21, 30 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 27, 28, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 28, 19 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 24, 24 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 23, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 21, 27 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 24, 16 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 25, 30, 26 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 25, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 20, 19 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 26, 19 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 27, 28, 27 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 30, 23 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 29, 24, 29 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 23, 29 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 25, 23, 20 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 29, 26, 18 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 21, 18 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 25, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 22, 21, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 22, 25, 21 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 21, 22 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 20, 20 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 26, 26 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 14, 09 - RGB 15, 20, 20 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 12, 28, 22 - RGB 15, 20, 20 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 07, 07, 07 - RGB 02, 03, 03 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 22, 17 - RGB 16, 14, 19 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 18, 20, 27 - RGB 11, 15, 23 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 20, 10 - RGB 26, 10, 06 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 25, 29 - RGB 14, 19, 25 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 27, 22, 24 - RGB 21, 15, 23 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 28, 20, 15 - RGB 21, 14, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 20, 26, 16 - RGB 09, 20, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 22, 24 - RGB 28, 15, 21 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 28, 14 - RGB 26, 20, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 21, 22 - RGB 15, 15, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 23, 19, 13 - RGB 14, 12, 17 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 18, 21 - RGB 10, 12, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 22, 15, 16 - RGB 17, 02, 05 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 20, 20 - RGB 05, 16, 16 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 23, 15, 19 - RGB 14, 04, 12 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 20, 17, 18 - RGB 18, 13, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 23, 21, 16 - RGB 12, 12, 10 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 25, 29 - RGB 30, 22, 24 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 23, 16 - RGB 29, 14, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 18, 18, 18 - RGB 10, 10, 10 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 26, 15 - RGB 00, 23, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 26, 15 - RGB 31, 23, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 26, 15 - RGB 31, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 29, 26, 19 - RGB 27, 20, 14 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 20, 10 - RGB 21, 00, 04 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 20, 10 - RGB 21, 00, 04 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 26, 16 - RGB 16, 12, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 28, 26 - RGB 12, 22, 26 - RGB 03, 16, 14 - - RGB 31, 31, 31 - RGB 15, 28, 26 - RGB 23, 24, 24 - RGB 00, 00, 00 - - RGB 31, 31, 24 - RGB 07, 27, 19 - RGB 26, 20, 10 - RGB 19, 12, 08 - - RGB 31, 31, 31 - RGB 31, 28, 14 - RGB 31, 13, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 18, 21 - RGB 10, 12, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 23, 21, 16 - RGB 12, 12, 10 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 14, 00 - RGB 07, 11, 15 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 21, 22 - RGB 26, 10, 06 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 27, 04 - RGB 24, 20, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 13, 25 - RGB 24, 20, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 19, 29 - RGB 24, 20, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 22, 24 - RGB 18, 18, 18 - RGB 16, 10, 07 - - RGB 31, 31, 31 - RGB 21, 25, 29 - RGB 18, 18, 18 - RGB 16, 10, 07 - - RGB 31, 31, 31 - RGB 20, 26, 16 - RGB 18, 18, 18 - RGB 16, 10, 07 - - RGB 31, 31, 31 - RGB 31, 28, 14 - RGB 18, 18, 18 - RGB 16, 10, 07 - - RGB 31, 31, 31 - RGB 18, 18, 18 - RGB 26, 10, 06 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 22, 24 - RGB 28, 15, 21 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 26, 20, 00 - RGB 16, 19, 29 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 02, 30 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 13, 04 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 28, 04, 02 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 18, 23, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 24, 20, 11 - RGB 18, 13, 11 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 25, 30, 00 - RGB 25, 30, 00 - - RGB 00, 00, 00 - RGB 08, 11, 11 - RGB 21, 21, 21 - RGB 31, 31, 31 +PredefPals: +INCLUDE "data/palettes/predef.pal" SGBBorderMap: - db $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $14, $14, $15, $14, $16, $14, $17, $14, $17, $54, $16, $54, $15, $54, $14, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14 - db $01, $14, $02, $14, $03, $14, $03, $54, $02, $54, $01, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $24, $14, $25, $14, $26, $14, $07, $14, $07, $54, $26, $54, $25, $54, $24, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $54, $01, $14, $02, $14, $03, $14, $03, $54, $02, $54, $01, $54 - db $11, $14, $12, $14, $13, $14, $13, $54, $12, $54, $11, $54, $10, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $24, $14, $34, $14, $35, $14, $35, $54, $34, $54, $33, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $10, $14, $11, $14, $12, $14, $13, $14, $13, $54, $12, $54, $11, $54 - db $21, $14, $22, $14, $23, $14, $23, $54, $22, $54, $21, $54, $20, $54, $07, $14, $08, $14, $09, $14, $0a, $14, $0b, $14, $0c, $14, $0d, $14, $07, $14, $07, $14, $18, $14, $09, $14, $1a, $14, $1b, $14, $0d, $14, $0c, $14, $1c, $14, $29, $14, $07, $14, $20, $14, $21, $14, $22, $14, $23, $14, $23, $54, $22, $54, $21, $54 - db $31, $14, $32, $14, $07, $14, $07, $14, $32, $54, $36, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $38, $10, $27, $10, $32, $14, $07, $54, $07, $54, $32, $54, $31, $54 - db $05, $14, $06, $14, $07, $14, $07, $54, $06, $54, $1f, $10, $37, $10, $06, $14, $07, $14, $07, $54, $06, $54, $05, $54 - db $15, $14, $16, $14, $17, $14, $17, $54, $16, $54, $1f, $10, $37, $10, $16, $14, $17, $14, $17, $54, $16, $54, $15, $54 - db $25, $14, $26, $14, $07, $14, $07, $54, $26, $54, $1f, $10, $37, $10, $26, $14, $07, $14, $07, $54, $26, $54, $25, $54 - db $33, $14, $34, $14, $35, $14, $35, $54, $34, $54, $1f, $10, $37, $10, $34, $14, $35, $14, $35, $54, $34, $54, $33, $54 - db $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14 - db $02, $54, $01, $54, $07, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $07, $14, $01, $14, $02, $14 - db $12, $54, $11, $54, $10, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $10, $14, $11, $14, $12, $14 - db $22, $54, $21, $54, $20, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $20, $14, $21, $14, $22, $14 - db $32, $54, $31, $54, $30, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $30, $14, $31, $14, $32, $14 - db $06, $54, $05, $54, $04, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $04, $14, $05, $14, $06, $14 - db $16, $54, $15, $54, $14, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $14, $14, $15, $14, $16, $14 - db $26, $54, $25, $54, $24, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $24, $14, $25, $14, $26, $14 - db $34, $54, $33, $54, $07, $54, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $07, $14, $33, $14, $34, $14 - db $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $1f, $10, $37, $10, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14 - db $01, $14, $02, $14, $03, $14, $03, $54, $02, $54, $1f, $10, $37, $10, $02, $14, $03, $14, $03, $54, $02, $54, $01, $54 - db $11, $14, $12, $14, $13, $14, $13, $54, $12, $54, $1f, $10, $37, $10, $12, $14, $13, $14, $13, $54, $12, $54, $11, $54 - db $21, $14, $22, $14, $23, $14, $23, $54, $22, $54, $1f, $10, $37, $10, $22, $14, $23, $14, $23, $54, $22, $54, $21, $54 - db $31, $14, $32, $14, $07, $14, $07, $14, $32, $54, $1f, $10, $37, $10, $32, $14, $07, $54, $07, $54, $32, $54, $31, $54 - db $05, $14, $06, $14, $07, $14, $07, $54, $06, $54, $2e, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2f, $10, $2d, $10, $06, $14, $07, $14, $07, $54, $06, $54, $05, $54 - db $15, $14, $16, $14, $17, $14, $17, $54, $16, $54, $15, $54, $14, $54, $07, $14, $07, $14, $39, $14, $0e, $14, $09, $14, $0f, $14, $28, $14, $07, $14, $19, $14, $0c, $14, $1c, $14, $29, $14, $2a, $14, $2b, $14, $2c, $14, $39, $14, $07, $14, $07, $14, $14, $14, $15, $14, $16, $14, $17, $14, $17, $54, $16, $54, $15, $54 - db $25, $14, $26, $14, $07, $14, $07, $54, $26, $54, $25, $54, $24, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $01, $14, $02, $14, $03, $14, $03, $54, $02, $54, $01, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $24, $14, $25, $14, $26, $14, $07, $14, $07, $54, $26, $54, $25, $54 - db $33, $14, $34, $14, $35, $14, $35, $54, $34, $54, $24, $54, $07, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $10, $14, $11, $14, $12, $14, $13, $14, $13, $54, $12, $54, $11, $54, $10, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $24, $14, $34, $14, $35, $14, $35, $54, $34, $54, $33, $54 - db $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $20, $14, $21, $14, $22, $14, $23, $14, $23, $54, $22, $54, $21, $54, $20, $54, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14, $07, $14 +INCLUDE "data/sgb_border_map.asm" SGBBorderPalettes: - RGB 24, 06, 06 - RGB 24, 24, 26 - RGB 14, 15, 20 - RGB 04, 07, 10 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 18, 24, 18 - RGB 31, 26, 15 - RGB 26, 19, 10 - RGB 12, 07, 05 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 18, 06, 31 - RGB 31, 31, 29 - RGB 31, 12, 00 - RGB 00, 00, 00 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 12, 31, 06 - RGB 22, 26, 30 - RGB 16, 17, 21 - RGB 00, 03, 00 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 - RGB 31, 31, 25 +INCLUDE "data/palettes/sgb_border.pal" SGBBorder: INCBIN "gfx/sgb/sgb_border.2bpp" -Palettes_a8be: +HPBarPals: +; green RGB 30, 26, 15 RGB 00, 23, 00 - +; yellow RGB 30, 26, 15 RGB 31, 21, 00 - +; red RGB 30, 26, 15 RGB 31, 00, 00 -Palettes_a8ca: +ExpBarPalette: +; blue RGB 30, 26, 15 RGB 04, 17, 31 INCLUDE "gfx/pics/palette_pointers.asm" - INCLUDE "gfx/trainer_palettes.asm" LoadMapPals: @@ -2026,324 +1453,34 @@ Palette_b311: ; b311 not mobile RGB 00, 00, 00 TilesetBGPalette: -INCLUDE "data/palettes/bg.pal" +INCLUDE "data/palettes/tileset_bg.pal" MapObjectPals:: -INCLUDE "data/palettes/ob.pal" +INCLUDE "data/palettes/map_objects.pal" RoofPals: -INCLUDE "data/palettes/roof.pal" +INCLUDE "data/palettes/roofs.pal" DiplomaPalettes: - RGB 27, 31, 27 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 07, 06 - RGB 20, 02, 03 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 10, 31, 09 - RGB 04, 14, 01 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 08, 12, 31 - RGB 01, 04, 31 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 31, 07 - RGB 31, 16, 01 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 22, 16, 08 - RGB 13, 07, 01 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 15, 31, 31 - RGB 05, 17, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 11, 11, 19 - RGB 07, 07, 12 - RGB 00, 00, 00 - -Palettes_b681: - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 10, 14, 20 - RGB 00, 00, 00 +INCLUDE "data/palettes/diploma.pal" - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 27, 31, 27 - RGB 31, 19, 10 - RGB 31, 07, 04 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 07, 07, 07 - - RGB 31, 31, 31 - RGB 31, 31, 07 - RGB 31, 16, 01 - RGB 07, 07, 07 - - RGB 31, 31, 31 - RGB 31, 19, 24 - RGB 30, 10, 06 - RGB 07, 07, 07 - - RGB 31, 31, 31 - RGB 12, 25, 01 - RGB 05, 14, 00 - RGB 07, 07, 07 - - RGB 31, 31, 31 - RGB 08, 12, 31 - RGB 01, 04, 31 - RGB 07, 07, 07 - - RGB 31, 31, 31 - RGB 24, 18, 07 - RGB 20, 15, 03 - RGB 07, 07, 07 +PartyMenuOBPals: +INCLUDE "data/palettes/party_menu.pal" Palettes_b6f1: - RGB 31, 31, 31 - RGB 18, 23, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 22, 00, 31 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 00, 00 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 25, 22, 00 - RGB 15, 20, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 23, 26, 31 - RGB 18, 23, 31 - RGB 00, 00, 00 +INCLUDE "data/palettes/b6f1.pal" Palettes_b719: - RGB 31, 31, 31 - RGB 07, 06, 03 - RGB 07, 06, 03 - RGB 07, 06, 03 - - RGB 31, 31, 31 - RGB 31, 31, 00 - RGB 26, 22, 00 - RGB 00, 00, 00 +INCLUDE "data/palettes/b719.pal" MalePokegearPals: - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 31, 15, 00 - RGB 15, 07, 00 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 31, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 31, 00, 00 +INCLUDE "data/palettes/pokegear.pal" FemalePokegearPals: - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 10, 18, 31 - RGB 13, 06, 31 - RGB 00, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 31, 00, 00 - - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 31, 00, 00 +INCLUDE "data/palettes/pokegear_f.pal" Palettes_b789: - RGB 31, 31, 31 - RGB 30, 22, 24 - RGB 18, 18, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 10, 11, 31 - RGB 18, 18, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 12, 31, 11 - RGB 18, 18, 18 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 29, 26, 05 - RGB 18, 18, 18 - RGB 00, 00, 00 +INCLUDE "data/palettes/b789.pal" SlotMachinePals: - RGB 31, 31, 31 - RGB 24, 25, 28 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 10, 06 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 31, 00 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 15, 31 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 15, 21, 31 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 11 - RGB 31, 31, 06 - RGB 24, 24, 09 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 16, 19, 29 - RGB 25, 22, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 30, 10, 06 - RGB 31, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 12, 25, 01 - RGB 05, 14, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 12, 25, 01 - RGB 30, 10, 06 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 06 - RGB 20, 15, 03 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 06 - RGB 15, 21, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 06 - RGB 20, 15, 03 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 24, 21 - RGB 31, 13, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - +INCLUDE "data/palettes/slot_machine.pal" diff --git a/engine/credits.asm b/engine/credits.asm index 62e53c01f..0fe7685a6 100644 --- a/engine/credits.asm +++ b/engine/credits.asm @@ -521,7 +521,6 @@ GetCreditsPalette: ; 109b2c .UpdatePals: ; Update the first three colors in both palette buffers. - push af push hl add UnknBGPals % $100 @@ -543,72 +542,8 @@ GetCreditsPalette: ; 109b2c call CopyBytes ret - CreditsPalettes: - -; Pichu - RGB 31, 00, 31 - RGB 31, 25, 00 - RGB 11, 14, 31 - RGB 07, 07, 07 - - RGB 31, 05, 05 - RGB 11, 14, 31 - RGB 11, 14, 31 - RGB 31, 31, 31 - - RGB 31, 05, 05 - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 31, 31, 31 - -; Smoochum - RGB 31, 31, 31 - RGB 31, 27, 00 - RGB 26, 06, 31 - RGB 07, 07, 07 - - RGB 03, 13, 31 - RGB 20, 00, 24 - RGB 26, 06, 31 - RGB 31, 31, 31 - - RGB 03, 13, 31 - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 31, 31, 31 - -; Ditto - RGB 31, 31, 31 - RGB 23, 12, 28 - RGB 31, 22, 00 - RGB 07, 07, 07 - - RGB 03, 20, 00 - RGB 31, 22, 00 - RGB 31, 22, 00 - RGB 31, 31, 31 - - RGB 03, 20, 00 - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 31, 31, 31 - -; Igglybuff - RGB 31, 31, 31 - RGB 31, 10, 31 - RGB 31, 00, 09 - RGB 07, 07, 07 - - RGB 31, 14, 00 - RGB 31, 00, 09 - RGB 31, 00, 09 - RGB 31, 31, 31 - - RGB 31, 14, 00 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 +INCLUDE "data/palettes/credits.pal" ; 109bca Credits_LoadBorderGFX: ; 109bca (42:5bca) @@ -678,7 +613,5 @@ Credits_TheEnd: ; 109c11 (42:5c11) INCLUDE "gfx/credits.asm" - INCLUDE "data/credits_script.asm" - INCLUDE "data/credits_strings.asm" diff --git a/engine/crystal_colors.asm b/engine/crystal_colors.asm index 25b831f01..fd3f83ade 100755 --- a/engine/crystal_colors.asm +++ b/engine/crystal_colors.asm @@ -57,12 +57,12 @@ MG_Mobile_Layout_LoadPals: ; 49351 (12:5351) ld de, UnknBGPals ld hl, Palette_493e1 ld bc, 5 palettes - ld a, $5 ; BANK(UnknBGPals) + ld a, BANK(UnknBGPals) call FarCopyWRAM - ld de, UnknBGPals + 7 palettes + ld de, UnknBGPals palette PAL_BG_TEXT ld hl, Palette_TextBG7 ld bc, 1 palettes - ld a, $5 ; BANK(UnknBGPals) + ld a, BANK(UnknBGPals) call FarCopyWRAM ret @@ -113,37 +113,14 @@ MG_Mobile_Layout_CreatePalBoxes: ; 49384 (12:5384) ; 493e1 (12:53e1) Palette_493e1: ; 493e1 - RGB 03, 07, 09 - RGB 26, 31, 00 - RGB 20, 16, 03 - RGB 31, 31, 31 - - RGB 13, 24, 29 - RGB 11, 16, 30 - RGB 07, 11, 22 - RGB 05, 06, 18 - - RGB 31, 31, 31 - RGB 20, 26, 31 - RGB 13, 24, 29 - RGB 11, 16, 30 - - RGB 31, 31, 31 - RGB 20, 26, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 20, 16, 08 - RGB 31, 00, 00 - RGB 00, 00, 00 +INCLUDE "data/palettes/mg_mobile.pal" ; 49409 LoadOW_BGPal7:: ; 49409 ld hl, Palette_TextBG7 - ld de, UnknBGPals + 8 * 7 - ld bc, 8 - ld a, $5 + ld de, UnknBGPals palette PAL_BG_TEXT + ld bc, 1 palettes + ld a, BANK(UnknBGPals) call FarCopyWRAM ret ; 49418 @@ -157,19 +134,19 @@ Palette_TextBG7: ; 49418 Function49420:: ; 49420 (12:5420) ld hl, MansionPalette4 - ld de, UnknBGPals + $30 - ld bc, $8 - ld a, $5 ; BANK(UnknBGPals) + ld de, UnknBGPals palette PAL_BG_ROOF + ld bc, 1 palettes + ld a, BANK(UnknBGPals) call FarCopyWRAM ret ; 4942f (12:542f) MG_Mobile_Layout01: ; 4942f call MG_Mobile_Layout_LoadPals - ld de, UnknBGPals + $38 + ld de, UnknBGPals palette PAL_BG_TEXT ld hl, Palette_49478 - ld bc, $8 - ld a, $5 ; BANK(UnknBGPals) + ld bc, 1 palettes + ld a, BANK(UnknBGPals) call FarCopyWRAM call MG_Mobile_Layout_WipeAttrMap hlcoord 0, 0, AttrMap @@ -258,8 +235,8 @@ LoadSpecialMapPalette: ; 494ac .ice_path ld a, [wPermission] ; permission - and 7 - cp 3 ; Hall of Fame + and $7 + cp INDOOR ; Hall of Fame jr z, .do_nothing call LoadIcePathPalette scf @@ -286,7 +263,7 @@ LoadSpecialMapPalette: ; 494ac ; 494f2 LoadPokeComPalette: ; 494f2 - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, PokeComPalette ld bc, 8 palettes @@ -299,7 +276,7 @@ INCLUDE "tilesets/pokecom_center.pal" ; 49541 LoadBattleTowerPalette: ; 49541 - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, BattleTowerPalette ld bc, 8 palettes @@ -312,7 +289,7 @@ INCLUDE "tilesets/battle_tower.pal" ; 49590 LoadIcePathPalette: ; 49590 - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, IcePathPalette ld bc, 8 palettes @@ -325,7 +302,7 @@ INCLUDE "tilesets/ice_path.pal" ; 495df LoadHousePalette: ; 495df - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, HousePalette ld bc, 8 palettes @@ -338,7 +315,7 @@ INCLUDE "tilesets/house_1.pal" ; 4962e LoadRadioTowerPalette: ; 4962e - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, RadioTowerPalette ld bc, 8 palettes @@ -401,23 +378,23 @@ MansionPalette4: ; 496bd ; 496c5 LoadMansionPalette: ; 496c5 - ld a, $5 + ld a, BANK(UnknBGPals) ld de, UnknBGPals ld hl, MansionPalette1 ld bc, 8 palettes call FarCopyWRAM - ld a, $5 - ld de, UnknBGPals + 4 palettes + ld a, BANK(UnknBGPals) + ld de, UnknBGPals palette PAL_BG_YELLOW ld hl, MansionPalette2 ld bc, 1 palettes call FarCopyWRAM - ld a, $5 - ld de, UnknBGPals + 3 palettes + ld a, BANK(UnknBGPals) + ld de, UnknBGPals palette PAL_BG_WATER ld hl, MansionPalette3 ld bc, 1 palettes call FarCopyWRAM - ld a, $5 - ld de, UnknBGPals + 6 palettes + ld a, BANK(UnknBGPals) + ld de, UnknBGPals palette PAL_BG_ROOF ld hl, MansionPalette4 ld bc, 1 palettes call FarCopyWRAM @@ -435,7 +412,7 @@ MG_Mobile_Layout02: ; 49706 ld hl, Palette_49732 ld de, UnknBGPals ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknBGPals) call FarCopyWRAM callba ApplyPals call MG_Mobile_Layout_WipeAttrMap @@ -443,7 +420,7 @@ MG_Mobile_Layout02: ; 49706 ld hl, Palette_4973a ld de, UnknOBPals ld bc, 1 palettes - ld a, $5 + ld a, BANK(UnknOBPals) call FarCopyWRAM ret ; 49732 @@ -473,45 +450,7 @@ Function49742: ; 49742 ; 49757 Palette_49757: ; 49757 - RGB 31, 31, 63 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 63 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 31, 00, 00 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 30, 16, 26 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 16, 16, 16 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 31, 12, 12 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 07, 08, 31 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 21, 00, 21 - RGB 29, 28, 09 - RGB 31, 31, 31 +INCLUDE "data/palettes/49757.pal" ; 49797 _InitMG_Mobile_LinkTradePalMap: ; 49797 @@ -567,45 +506,17 @@ _InitMG_Mobile_LinkTradePalMap: ; 49797 ; 49811 LoadTradeRoomBGPals: ; 49811 - ld hl, Palette_49826 - ld de, UnknBGPals + $10 - ld bc, $30 - ld a, $5 + ld hl, TradeRoomPalette + ld de, UnknBGPals palette PAL_BG_GREEN + ld bc, 6 palettes + ld a, BANK(UnknBGPals) call FarCopyWRAM callba ApplyPals ret ; 49826 -Palette_49826: ; 49826 - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 31, 00, 00 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 15, 23, 30 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 16, 16, 16 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 25, 07, 04 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 03, 22, 08 - RGB 31, 31, 31 - - RGB 04, 02, 15 - RGB 07, 09, 31 - RGB 29, 28, 09 - RGB 31, 31, 31 +TradeRoomPalette: ; 49826 +INCLUDE "data/palettes/trade_room.pal" ; 49856 InitMG_Mobile_LinkTradePalMap: ; 49856 diff --git a/engine/crystal_intro.asm b/engine/crystal_intro.asm index d0a0b7281..b417044eb 100755 --- a/engine/crystal_intro.asm +++ b/engine/crystal_intro.asm @@ -341,29 +341,7 @@ GameFreakLogoScene5: ; e47ab (39:47ab) ; e47ac (39:47ac) GameFreakLogoPalettes: ; e47ac -; Ditto's color as it turns into the Game Freak logo. -; Fade from pink to orange. -; One color per step. - RGB 23, 12, 28 - RGB 23, 12, 27 - RGB 23, 13, 26 - RGB 23, 13, 24 - - RGB 24, 14, 22 - RGB 24, 14, 20 - RGB 24, 15, 18 - RGB 24, 15, 16 - - RGB 25, 16, 14 - RGB 25, 16, 12 - RGB 25, 17, 10 - RGB 25, 17, 08 - - RGB 26, 18, 06 - RGB 26, 18, 04 - RGB 26, 19, 02 - RGB 26, 19, 00 - +INCLUDE "data/palettes/crystal_intro/gamefreak_logo.pal" ; e47cc GameFreakLogo: ; e47cc @@ -506,11 +484,11 @@ IntroScene1: ; e495b (39:495b) ld [rSVBK], a ld hl, Palette_365ad ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_365ad ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -579,11 +557,11 @@ IntroScene3: ; e49fd (39:49fd) ld [rSVBK], a ld hl, Palette_e5edd ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e5edd ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -645,11 +623,11 @@ IntroScene5: ; e4a7a (39:4a7a) ld [rSVBK], a ld hl, Palette_365ad ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_365ad ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -752,12 +730,12 @@ IntroScene7: ; e4b3f (39:4b3f) ld hl, Palette_e5edd ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e5edd ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af @@ -910,11 +888,11 @@ IntroScene11: ; e4c86 (39:4c86) ld [rSVBK], a ld hl, Palette_365ad ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_365ad ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1037,11 +1015,11 @@ IntroScene13: ; e4d6d (39:4d6d) ld [rSVBK], a ld hl, Palette_e5edd ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e5edd ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1146,11 +1124,11 @@ IntroScene15: ; e4e40 (39:4e40) ld [rSVBK], a ld hl, Palette_e77dd ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e77dd ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1220,11 +1198,11 @@ IntroScene17: ; e4ef5 (39:4ef5) ld [rSVBK], a ld hl, Palette_e6d6d ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e6d6d ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1294,11 +1272,11 @@ IntroScene19: ; e4f7e (39:4f7e) ld [rSVBK], a ld hl, Palette_e77dd ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e77dd ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1464,11 +1442,11 @@ IntroScene26: ; e50bb (39:50bb) ld [rSVBK], a ld hl, Palette_e679d ld de, UnknBGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld hl, Palette_e679d ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes pop af ld [rSVBK], a @@ -1572,47 +1550,7 @@ Intro_Scene24_ApplyPaletteFade: ; e5172 (39:5172) ; e519c (39:519c) .FadePals: ; e519c -; Fade to white. - RGB 24, 12, 09 - RGB 31, 31, 31 - RGB 12, 00, 31 - RGB 00, 00, 00 - - RGB 31, 19, 05 - RGB 31, 31, 31 - RGB 15, 05, 31 - RGB 07, 07, 07 - - RGB 31, 21, 09 - RGB 31, 31, 31 - RGB 18, 09, 31 - RGB 11, 11, 11 - - RGB 31, 23, 13 - RGB 31, 31, 31 - RGB 21, 13, 31 - RGB 15, 15, 15 - - RGB 31, 25, 17 - RGB 31, 31, 31 - RGB 25, 17, 31 - RGB 19, 19, 19 - - RGB 31, 27, 21 - RGB 31, 31, 31 - RGB 27, 21, 31 - RGB 23, 23, 23 - - RGB 31, 29, 25 - RGB 31, 31, 31 - RGB 29, 26, 31 - RGB 27, 27, 27 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - +INCLUDE "data/palettes/crystal_intro/fade.pal" ; e51dc CrystalIntro_InitUnownAnim: ; e51dc (39:51dc) @@ -1685,7 +1623,7 @@ CrystalIntro_UnownFade: ; e5223 (39:5223) push hl push bc ld hl, BGPals - ld bc, 4 * 16 + ld bc, 8 palettes xor a call ByteFill pop bc @@ -2150,85 +2088,8 @@ INCBIN "gfx/intro/003.tilemap.lz" ; e5edd Palette_e5edd: ; e5edd - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 0, 4, 5 - RGB 1, 8, 5 - RGB 4, 12, 9 - RGB 24, 12, 9 - - RGB 0, 4, 5 - RGB 9, 6, 8 - RGB 8, 16, 5 - RGB 5, 10, 4 - - RGB 31, 31, 31 - RGB 9, 6, 8 - RGB 18, 9, 9 - RGB 13, 8, 9 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 2, 5, 22 - RGB 1, 5, 12 - - RGB 31, 31, 31 - RGB 31, 10, 25 - RGB 31, 21, 0 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 21, 31 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 +INCLUDE "data/palettes/crystal_intro/intro_1.pal" +; e5f5d IntroUnownsGFX: ; e5f5d INCBIN "gfx/intro/unowns.2bpp.lz" @@ -2263,85 +2124,8 @@ INCBIN "gfx/intro/007.tilemap.lz" ; e65ad Palette_365ad: ; e65ad - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 10, 0, 10 - RGB 19, 0, 19 - RGB 31, 0, 31 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 +INCLUDE "data/palettes/crystal_intro/intro_2.pal" +; e662d IntroCrystalUnownsGFX: ; e662d INCBIN "gfx/intro/crystal_unowns.2bpp.lz" @@ -2356,85 +2140,8 @@ INCBIN "gfx/intro/015.tilemap.lz" ; e679d Palette_e679d: ; e679d - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 +INCLUDE "data/palettes/crystal_intro/intro_3.pal" +; e681d IntroSuicuneCloseGFX: ; e681d INCBIN "gfx/intro/suicune_close.2bpp.lz" @@ -2449,85 +2156,8 @@ INCBIN "gfx/intro/011.tilemap.lz" ; e6d6d Palette_e6d6d: ; e6d6d - RGB 24, 12, 9 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 24, 12, 9 - RGB 31, 31, 31 - RGB 8, 9, 31 - RGB 0, 0, 0 - - RGB 24, 12, 9 - RGB 12, 20, 31 - RGB 19, 8, 31 - RGB 0, 0, 0 - - RGB 12, 20, 31 - RGB 8, 9, 31 - RGB 19, 8, 31 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 12, 20, 31 - RGB 8, 9, 31 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 +INCLUDE "data/palettes/crystal_intro/intro_4.pal" +; e6ded IntroSuicuneJumpGFX: ; e6ded INCBIN "gfx/intro/suicune_jump.2bpp.lz" @@ -2554,85 +2184,7 @@ INCBIN "gfx/intro/013.tilemap.lz" ; e77dd Palette_e77dd: ; e77dd - RGB 24, 12, 9 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 24, 12, 9 - RGB 31, 31, 31 - RGB 8, 9, 31 - RGB 0, 0, 0 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - RGB 24, 12, 9 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 12, 0, 31 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 21, 9, 0 - RGB 21, 9, 0 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 - - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 11, 11, 11 - RGB 0, 0, 0 +INCLUDE "data/palettes/crystal_intro/intro_5.pal" IntroUnownBackGFX: ; e785d INCBIN "gfx/intro/unown_back.2bpp.lz" @@ -2646,4 +2198,3 @@ IntroGrass3GFX: ; e7a1d INCBIN "gfx/intro/grass3.2bpp" IntroGrass4GFX: ; e7a5d INCBIN "gfx/intro/grass4.2bpp" - diff --git a/engine/debug.asm b/engine/debug.asm index 9c2bb35c2..bcd53c021 100755 --- a/engine/debug.asm +++ b/engine/debug.asm @@ -159,7 +159,7 @@ Function819a7: ; 819a7 ld [rSVBK], a ld hl, Palette_819f4 ld de, BGPals - ld bc, $80 + ld bc, 16 palettes call CopyBytes ld a, $80 ld [rBGPI], a @@ -193,93 +193,10 @@ Function819a7: ; 819a7 ; 819f4 Palette_819f4: ; 819f4 - ; white - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - ; red - RGB 31, 00, 00 - RGB 31, 00, 00 - RGB 31, 00, 00 - RGB 00, 00, 00 - - ; green - RGB 00, 31, 00 - RGB 00, 31, 00 - RGB 00, 31, 00 - RGB 00, 00, 00 - - ; blue - RGB 00, 00, 31 - RGB 00, 00, 31 - RGB 00, 00, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 +INCLUDE "data/palettes/debug/bg.pal" Palette_81a34: ; 81a34 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 31, 31, 31 - RGB 00, 00, 00 - - ; red - RGB 31, 31, 31 - RGB 31, 00, 00 - RGB 31, 00, 00 - RGB 00, 00, 00 - - ; green - RGB 31, 31, 31 - RGB 00, 31, 00 - RGB 00, 31, 00 - RGB 00, 00, 00 - - ; blue - RGB 31, 31, 31 - RGB 00, 00, 31 - RGB 00, 00, 31 - RGB 00, 00, 00 +INCLUDE "data/palettes/debug/ob.pal" ; 81a74 Function81a74: ; 81a74 diff --git a/engine/sgb_layouts.asm b/engine/sgb_layouts.asm index dc174e86f..e59fb19d8 100644 --- a/engine/sgb_layouts.asm +++ b/engine/sgb_layouts.asm @@ -77,7 +77,7 @@ Predef_LoadSGBLayout: ; 864c ld h, 0 add hl, hl add hl, hl - ld de, Palettes_a8be + ld de, HPBarPals add hl, de ld a, [hli] @@ -95,7 +95,7 @@ Predef_LoadSGBLayout: ; 864c add hl, hl add hl, hl - ld de, Palettes_a8be + ld de, HPBarPals add hl, de ld a, [hli] ld [wSGBPals + 9], a @@ -173,7 +173,7 @@ Predef_LoadSGBLayout: ; 864c ld h, 0 add hl, hl add hl, hl - ld de, Palettes_a8be + ld de, HPBarPals add hl, de ld a, [hli] ld [wSGBPals + 3], a diff --git a/engine/title.asm b/engine/title.asm index 2073fdf58..ba7f34764 100644 --- a/engine/title.asm +++ b/engine/title.asm @@ -399,84 +399,4 @@ INCBIN "gfx/title/crystal.2bpp.lz" ; 10fede TitleScreenPalettes: -; BG - RGB 00, 00, 00 - RGB 19, 00, 00 - RGB 15, 08, 31 - RGB 15, 08, 31 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 15, 16, 31 - RGB 31, 01, 13 - - RGB 00, 00, 00 - RGB 07, 07, 07 - RGB 31, 31, 31 - RGB 02, 03, 30 - - RGB 00, 00, 00 - RGB 13, 13, 13 - RGB 31, 31, 18 - RGB 02, 03, 30 - - RGB 00, 00, 00 - RGB 19, 19, 19 - RGB 29, 28, 12 - RGB 02, 03, 30 - - RGB 00, 00, 00 - RGB 25, 25, 25 - RGB 28, 25, 06 - RGB 02, 03, 30 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 26, 21, 00 - RGB 02, 03, 30 - - RGB 00, 00, 00 - RGB 11, 11, 19 - RGB 31, 31, 31 - RGB 00, 00, 00 - -; OBJ - RGB 00, 00, 00 - RGB 10, 00, 15 - RGB 17, 05, 22 - RGB 19, 09, 31 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 - - RGB 31, 31, 31 - RGB 00, 00, 00 - RGB 00, 00, 00 - RGB 00, 00, 00 +INCLUDE "data/palettes/title.pal" diff --git a/engine/unused_title.asm b/engine/unused_title.asm index 6cd79237b..2075d86d9 100644 --- a/engine/unused_title.asm +++ b/engine/unused_title.asm @@ -3,21 +3,24 @@ UnusedTitleScreen: ; 10c000 call ClearBGPalettes call ClearTileMap call DisableLCD + +; Turn BG Map update off xor a ld [hBGMapMode], a +; Reset timing variables ld hl, wJumptableIndex - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a + ld [hli], a ; wJumptableIndex + ld [hli], a ; wIntroSceneFrameCounter + ld [hli], a ; wTitleScreenTimer + ld [hl], a ; wTitleScreenTimer + 1 ld hl, UnusedTitleBG_GFX ld de, VTiles2 ld bc, VBGMap0 - VTiles2 call CopyBytes - ld hl, UnusedTitleBG_GFX + $800 + ld hl, UnusedTitleBG_GFX + $80 tiles ld de, VTiles1 ld bc, VTiles2 - VTiles1 call CopyBytes @@ -65,22 +68,22 @@ UnusedTitleScreen: ; 10c000 ld hl, UnusedTitleBG_Palettes ld de, UnknBGPals - ld bc, $40 + ld bc, 8 palettes call CopyBytes ld hl, UnusedTitleFG_Palettes ld de, UnknOBPals - ld bc, $40 + ld bc, 8 palettes call CopyBytes ld hl, UnusedTitleBG_Palettes ld de, BGPals - ld bc, $40 + ld bc, 8 palettes call CopyBytes ld hl, UnusedTitleFG_Palettes ld de, OBPals - ld bc, $40 + ld bc, 8 palettes call CopyBytes pop af @@ -136,46 +139,7 @@ UnusedTitleBG_Tilemap: ; 10d0b1 ; 10d8b1 UnusedTitleBG_Palettes: ; 10d8b1 - RGB 00, 00, 00 - RGB 25, 15, 28 - RGB 22, 11, 28 - RGB 19, 08, 26 - - RGB 00, 00, 00 - RGB 17, 07, 22 - RGB 13, 07, 16 - RGB 19, 08, 26 - - RGB 25, 15, 28 - RGB 22, 11, 28 - RGB 19, 08, 26 - RGB 17, 07, 22 - - RGB 22, 11, 28 - RGB 19, 08, 26 - RGB 17, 07, 22 - RGB 13, 07, 16 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 12, 12, 12 - - RGB 00, 00, 00 - RGB 01, 11, 23 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 22, 10, 31 - RGB 19, 08, 26 - RGB 17, 07, 22 - +INCLUDE "data/palettes/unused_title/bg.pal" RGB 31, 31, 31 RGB 31, 31, 31 @@ -187,12 +151,12 @@ UnusedTitleBG_Palettes: ; 10d8b1 RGB 16, 08, 16 RGB 24, 00, 24 - rept 54 +rept 54 RGB 31, 31, 31 RGB 31, 31, 31 RGB 31, 31, 31 RGB 31, 31, 31 - endr +endr ; 10dab1 UnusedTitleFG_GFX: ; 10dab1 @@ -200,326 +164,7 @@ INCBIN "gfx/title/old_fg.2bpp" ; 10eab1 UnusedTitleFG_Palettes: ; 10eab1 - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 12, 12, 12 - - RGB 00, 00, 00 - RGB 01, 11, 23 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 31, 22, 00 - RGB 31, 27, 00 - RGB 31, 31, 00 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 12, 12, 12 - - RGB 00, 00, 00 - RGB 01, 11, 23 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 16, 31, 00 - RGB 22, 31, 00 - RGB 27, 31, 00 - RGB 31, 31, 00 - - - RGB 31, 00, 18 - RGB 31, 31, 31 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 00, 00, 00 - RGB 31, 31, 31 - RGB 20, 20, 20 - RGB 12, 12, 12 - - RGB 00, 00, 00 - RGB 01, 11, 23 - RGB 16, 16, 24 - RGB 02, 13, 21 - - RGB 16, 31, 00 - RGB 22, 31, 00 - RGB 27, 31, 00 - RGB 31, 31, 00 - - RGB 24, 18, 31 - RGB 31, 31, 00 - RGB 31, 31, 01 - RGB 31, 31, 03 - - RGB 31, 31, 05 - RGB 31, 31, 08 - RGB 31, 31, 10 - RGB 31, 31, 12 - - RGB 31, 31, 14 - RGB 31, 31, 16 - RGB 31, 31, 18 - RGB 31, 31, 20 - - RGB 31, 31, 22 - RGB 31, 31, 25 - RGB 31, 31, 27 - RGB 31, 31, 29 - - RGB 24, 06, 06 - RGB 01, 01, 01 - RGB 03, 03, 03 - RGB 05, 05, 05 - - RGB 08, 08, 08 - RGB 10, 10, 10 - RGB 12, 12, 12 - RGB 14, 14, 14 - - RGB 16, 16, 16 - RGB 18, 18, 18 - RGB 20, 20, 20 - RGB 22, 22, 22 - - RGB 25, 25, 25 - RGB 27, 27, 27 - RGB 29, 29, 29 - RGB 31, 31, 31 - - RGB 18, 24, 18 - RGB 31, 29, 01 - RGB 31, 27, 03 - RGB 31, 25, 05 - - RGB 31, 22, 08 - RGB 31, 20, 10 - RGB 31, 18, 12 - RGB 31, 16, 14 - - RGB 31, 14, 16 - RGB 31, 12, 18 - RGB 31, 10, 20 - RGB 31, 08, 22 - - RGB 31, 05, 25 - RGB 31, 03, 27 - RGB 31, 01, 29 - RGB 31, 00, 31 - - RGB 18, 06, 31 - RGB 00, 31, 31 - RGB 00, 31, 29 - RGB 00, 31, 27 - - RGB 00, 31, 25 - RGB 00, 31, 22 - RGB 00, 31, 20 - RGB 00, 31, 18 - - RGB 00, 31, 16 - RGB 00, 31, 14 - RGB 00, 31, 12 - RGB 00, 31, 10 - - RGB 00, 31, 08 - RGB 00, 31, 05 - RGB 00, 31, 03 - RGB 00, 31, 01 - - RGB 12, 31, 06 - RGB 00, 00, 31 - RGB 00, 01, 31 - RGB 00, 03, 31 - - RGB 00, 05, 31 - RGB 00, 08, 31 - RGB 00, 10, 31 - RGB 00, 12, 31 - - RGB 00, 14, 31 - RGB 00, 16, 31 - RGB 00, 18, 31 - RGB 00, 20, 31 - - RGB 00, 22, 31 - RGB 00, 25, 31 - RGB 00, 27, 31 - RGB 00, 29, 31 - - RGB 00, 00, 00 - RGB 06, 00, 04 - RGB 19, 02, 09 - RGB 28, 04, 11 - - RGB 31, 07, 16 - RGB 31, 17, 23 - RGB 31, 26, 30 - RGB 07, 05, 10 - - RGB 14, 10, 18 - RGB 20, 20, 25 - RGB 25, 27, 31 - RGB 09, 05, 06 - - RGB 23, 16, 13 - RGB 30, 23, 22 - RGB 31, 28, 28 - RGB 31, 31, 31 - - RGB 06, 31, 31 - RGB 04, 00, 04 - RGB 11, 02, 04 - RGB 17, 02, 04 - - RGB 24, 05, 04 - RGB 28, 07, 04 - RGB 31, 11, 04 - RGB 02, 01, 15 - - RGB 04, 11, 22 - RGB 12, 25, 25 - RGB 20, 31, 31 - RGB 09, 04, 03 - - RGB 22, 11, 08 - RGB 27, 19, 16 - RGB 30, 28, 26 - RGB 31, 31, 31 - - RGB 06, 18, 06 - RGB 04, 04, 02 - RGB 07, 07, 02 - RGB 18, 18, 04 - - RGB 24, 24, 06 - RGB 27, 27, 11 - RGB 31, 31, 20 - RGB 02, 03, 10 - - RGB 04, 05, 13 - RGB 06, 10, 25 - RGB 08, 15, 31 - RGB 04, 00, 06 - - RGB 11, 07, 14 - RGB 21, 16, 23 - RGB 29, 26, 31 - RGB 31, 31, 31 - - RGB 06, 00, 18 - RGB 00, 04, 03 - RGB 02, 09, 05 - RGB 11, 19, 07 - - RGB 16, 24, 08 - RGB 22, 31, 09 - RGB 24, 31, 18 - RGB 03, 01, 03 - - RGB 10, 04, 10 - RGB 20, 08, 20 - RGB 31, 17, 31 - RGB 01, 03, 06 - - RGB 05, 09, 10 - RGB 15, 21, 21 - RGB 23, 25, 25 - RGB 31, 31, 31 - - RGB 00, 18, 31 - RGB 00, 05, 07 - RGB 00, 08, 13 - RGB 00, 12, 17 - - RGB 01, 20, 24 - RGB 04, 27, 31 - RGB 14, 31, 31 - RGB 04, 02, 02 - - RGB 15, 01, 03 - RGB 26, 04, 07 - RGB 31, 13, 16 - RGB 00, 05, 02 - - RGB 01, 11, 03 - RGB 06, 21, 06 - RGB 13, 31, 16 - RGB 31, 31, 31 - - RGB 00, 06, 06 - RGB 00, 01, 08 - RGB 00, 05, 14 - RGB 00, 08, 19 - - RGB 02, 14, 26 - RGB 04, 21, 31 - RGB 06, 26, 31 - RGB 13, 00, 00 - - RGB 27, 07, 00 - RGB 31, 17, 05 - RGB 31, 25, 16 - RGB 02, 04, 00 - - RGB 07, 11, 03 - RGB 17, 19, 05 - RGB 27, 31, 16 - RGB 31, 31, 31 - - RGB 02, 00, 00 - RGB 04, 01, 06 - RGB 11, 03, 14 - RGB 16, 04, 19 - - RGB 20, 07, 22 - RGB 26, 12, 27 - RGB 26, 20, 31 - RGB 04, 07, 00 - - RGB 16, 20, 07 - RGB 24, 28, 15 - RGB 29, 31, 24 - RGB 05, 02, 02 - - RGB 15, 04, 02 - RGB 24, 11, 10 - RGB 31, 22, 20 - RGB 31, 31, 31 - - RGB 00, 00, 14 - RGB 12, 00, 00 - RGB 27, 05, 00 - RGB 31, 15, 05 - - RGB 31, 26, 13 - RGB 31, 30, 21 - RGB 05, 07, 16 - RGB 04, 16, 20 - - RGB 04, 24, 26 - RGB 08, 31, 31 - RGB 23, 31, 31 - RGB 00, 00, 00 - - RGB 05, 05, 05 - RGB 17, 17, 15 - RGB 28, 28, 24 - RGB 31, 31, 31 +INCLUDE "data/palettes/unused_title/ob.pal" ; 10ecb1 UnusedTitleFG_OAM: ; 10ecb1 -- cgit v1.2.3 From 5aac8afae7a3514b76f684237f3de59e6a27977e Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 23:29:42 -0500 Subject: =?UTF-8?q?PLAYER=5FSLIP=20=E2=86=92=20PLAYER=5FSKATE=20(probably?= =?UTF-8?q?=20used=20for=20the=20beta=20skateboard;=20DoPlayerMovement.Bik?= =?UTF-8?q?eCheck=20returns=20true=20for=20it)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- engine/map_setup.asm | 2 +- engine/player_movement.asm | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'engine') diff --git a/engine/map_setup.asm b/engine/map_setup.asm index 5de4f30da..72fe9c07f 100644 --- a/engine/map_setup.asm +++ b/engine/map_setup.asm @@ -356,7 +356,7 @@ CheckReplaceKrisSprite: ; 154f7 ld a, [PlayerState] cp PLAYER_NORMAL jr z, .nope - cp PLAYER_SLIP + cp PLAYER_SKATE jr z, .nope cp PLAYER_SURF jr z, .surfing diff --git a/engine/player_movement.asm b/engine/player_movement.asm index 7ccb36551..5bc3e1f0b 100755 --- a/engine/player_movement.asm +++ b/engine/player_movement.asm @@ -42,7 +42,7 @@ DoPlayerMovement:: ; 80000 jr z, .Surf cp PLAYER_BIKE jr z, .Normal - cp PLAYER_SLIP + cp PLAYER_SKATE jr z, .Ice .Normal: @@ -750,11 +750,10 @@ DoPlayerMovement:: ; 80000 ; 803ca .BikeCheck: ; 803ca - ld a, [PlayerState] cp PLAYER_BIKE ret z - cp PLAYER_SLIP + cp PLAYER_SKATE ret ; 803d3 @@ -824,7 +823,7 @@ CheckStandingOnIce:: ; 80404 call CheckIceTile jr nc, .yep ld a, [PlayerState] - cp PLAYER_SLIP + cp PLAYER_SKATE jr nz, .not_ice .yep -- cgit v1.2.3 From cbde91d7edb4be3c8773d71ef814fb599ee7e7f3 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Fri, 15 Dec 2017 23:59:24 -0500 Subject: Only engine/decorations.asm uses PadCoords_de --- engine/decorations.asm | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'engine') diff --git a/engine/decorations.asm b/engine/decorations.asm index b69f4f3c3..160022b93 100755 --- a/engine/decorations.asm +++ b/engine/decorations.asm @@ -1374,3 +1374,13 @@ _GetDecorationSprite: ; 27085 ld a, c ret ; 27092 + +PadCoords_de: ; 27092 + ld a, d + add 4 + ld d, a + ld a, e + add 4 + ld e, a + call GetBlockLocation + ret -- cgit v1.2.3 From fbf931f5d3b505bb336c3bc17d4d332ab374d033 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sat, 16 Dec 2017 00:50:03 -0500 Subject: Ad some more constants for meaningful audio WRAM bits --- engine/item_effects.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engine') diff --git a/engine/item_effects.asm b/engine/item_effects.asm index b38b13874..cc2132034 100644 --- a/engine/item_effects.asm +++ b/engine/item_effects.asm @@ -2398,7 +2398,7 @@ PokeFlute: ; f50c call PrintText ld a, [Danger] - and $80 + and 1 << DANGER_ON_F jr nz, .dummy2 .dummy2 ld hl, .AllSleepingMonWokeUp -- cgit v1.2.3 From bd6dc94da038500cf0f8cf179287ce71dd8e9bf6 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sat, 16 Dec 2017 00:52:16 -0500 Subject: Move tileset-specific palette code into tilesets/ --- engine/crystal_colors.asm | 201 +--------------------------------------------- 1 file changed, 1 insertion(+), 200 deletions(-) (limited to 'engine') diff --git a/engine/crystal_colors.asm b/engine/crystal_colors.asm index fd3f83ade..f8c1a6781 100755 --- a/engine/crystal_colors.asm +++ b/engine/crystal_colors.asm @@ -207,206 +207,7 @@ Function49496: ; 49496 ret ; 494ac -LoadSpecialMapPalette: ; 494ac - ld a, [wTileset] - cp TILESET_POKECOM_CENTER - jr z, .pokecom_2f - cp TILESET_BATTLE_TOWER - jr z, .battle_tower - cp TILESET_ICE_PATH - jr z, .ice_path - cp TILESET_HOUSE_1 - jr z, .house - cp TILESET_RADIO_TOWER - jr z, .radio_tower - cp TILESET_CELADON_MANSION - jr z, .mansion_mobile - jr .do_nothing - -.pokecom_2f - call LoadPokeComPalette - scf - ret - -.battle_tower - call LoadBattleTowerPalette - scf - ret - -.ice_path - ld a, [wPermission] ; permission - and $7 - cp INDOOR ; Hall of Fame - jr z, .do_nothing - call LoadIcePathPalette - scf - ret - -.house - call LoadHousePalette - scf - ret - -.radio_tower - call LoadRadioTowerPalette - scf - ret - -.mansion_mobile - call LoadMansionPalette - scf - ret - -.do_nothing - and a - ret -; 494f2 - -LoadPokeComPalette: ; 494f2 - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, PokeComPalette - ld bc, 8 palettes - call FarCopyWRAM - ret -; 49501 - -PokeComPalette: ; 49501 -INCLUDE "tilesets/pokecom_center.pal" -; 49541 - -LoadBattleTowerPalette: ; 49541 - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, BattleTowerPalette - ld bc, 8 palettes - call FarCopyWRAM - ret -; 49550 - -BattleTowerPalette: ; 49550 -INCLUDE "tilesets/battle_tower.pal" -; 49590 - -LoadIcePathPalette: ; 49590 - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, IcePathPalette - ld bc, 8 palettes - call FarCopyWRAM - ret -; 4959f - -IcePathPalette: ; 4959f -INCLUDE "tilesets/ice_path.pal" -; 495df - -LoadHousePalette: ; 495df - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, HousePalette - ld bc, 8 palettes - call FarCopyWRAM - ret -; 495ee - -HousePalette: ; 495ee -INCLUDE "tilesets/house_1.pal" -; 4962e - -LoadRadioTowerPalette: ; 4962e - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, RadioTowerPalette - ld bc, 8 palettes - call FarCopyWRAM - ret -; 4963d - -RadioTowerPalette: ; 4963d -INCLUDE "tilesets/radio_tower.pal" -; 4967d - -MansionPalette1: ; 4967d - RGB 30, 28, 26 - RGB 19, 19, 19 - RGB 13, 13, 13 - RGB 07, 07, 07 - - RGB 30, 28, 26 - RGB 31, 19, 24 - RGB 30, 10, 06 - RGB 07, 07, 07 - - RGB 18, 24, 09 - RGB 15, 20, 01 - RGB 09, 13, 00 - RGB 07, 07, 07 - - RGB 30, 28, 26 - RGB 15, 16, 31 - RGB 09, 09, 31 - RGB 07, 07, 07 - - RGB 30, 28, 26 - RGB 31, 31, 07 - RGB 31, 16, 01 - RGB 07, 07, 07 - - RGB 26, 24, 17 - RGB 21, 17, 07 - RGB 16, 13, 03 - RGB 07, 07, 07 - -MansionPalette3: ; 496ad - RGB 30, 28, 26 - RGB 17, 19, 31 - RGB 14, 16, 31 - RGB 07, 07, 07 - - RGB 31, 31, 16 - RGB 31, 31, 16 - RGB 14, 09, 00 - RGB 00, 00, 00 -; 496bd - -MansionPalette4: ; 496bd - RGB 05, 05, 16 - RGB 08, 19, 28 - RGB 00, 00, 00 - RGB 31, 31, 31 -; 496c5 - -LoadMansionPalette: ; 496c5 - ld a, BANK(UnknBGPals) - ld de, UnknBGPals - ld hl, MansionPalette1 - ld bc, 8 palettes - call FarCopyWRAM - ld a, BANK(UnknBGPals) - ld de, UnknBGPals palette PAL_BG_YELLOW - ld hl, MansionPalette2 - ld bc, 1 palettes - call FarCopyWRAM - ld a, BANK(UnknBGPals) - ld de, UnknBGPals palette PAL_BG_WATER - ld hl, MansionPalette3 - ld bc, 1 palettes - call FarCopyWRAM - ld a, BANK(UnknBGPals) - ld de, UnknBGPals palette PAL_BG_ROOF - ld hl, MansionPalette4 - ld bc, 1 palettes - call FarCopyWRAM - ret -; 496fe - -MansionPalette2: ; 496fe - RGB 25, 24, 23 - RGB 20, 19, 19 - RGB 14, 16, 31 - RGB 07, 07, 07 -; 49706 +INCLUDE "tilesets/special_palettes.asm" MG_Mobile_Layout02: ; 49706 ld hl, Palette_49732 -- cgit v1.2.3 From 05d49f7d752b03cbccb2fdcca2781a8a5de85425 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sat, 16 Dec 2017 12:49:43 -0500 Subject: Move more code out of main.asm --- engine/flag_predef.asm | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ engine/item_effects.asm | 1 + 2 files changed, 71 insertions(+) create mode 100644 engine/flag_predef.asm (limited to 'engine') diff --git a/engine/flag_predef.asm b/engine/flag_predef.asm new file mode 100644 index 000000000..bd4f37882 --- /dev/null +++ b/engine/flag_predef.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/item_effects.asm b/engine/item_effects.asm index cc2132034..d1b5e7161 100644 --- a/engine/item_effects.asm +++ b/engine/item_effects.asm @@ -14,6 +14,7 @@ _DoItemEffect:: ; e722 ItemEffects: ; e73c +; entries correspond to item ids (see constants/item_constants.asm) dw MasterBall dw UltraBall dw Brightpowder -- cgit v1.2.3 From 25a3960646548c40af70f9f59bed544f4ce8d472 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sat, 16 Dec 2017 19:00:50 -0500 Subject: Move some more main.asm routines into individual files --- engine/check_battle_scene.asm | 47 +++++++++++++++++++++++++++++++++++++++++ engine/collision_stdscripts.asm | 29 ------------------------- engine/get_breedmon_growth.asm | 27 +++++++++++++++++++++++ engine/knows_move.asm | 25 ++++++++++++++++++++++ engine/pack.asm | 8 +++---- engine/player_gfx_2.asm | 5 +++++ engine/trademon_frontpic.asm | 38 +++++++++++++++++++++++++++++++++ 7 files changed, 146 insertions(+), 33 deletions(-) create mode 100644 engine/check_battle_scene.asm delete mode 100644 engine/collision_stdscripts.asm create mode 100644 engine/get_breedmon_growth.asm create mode 100644 engine/knows_move.asm create mode 100644 engine/player_gfx_2.asm create mode 100644 engine/trademon_frontpic.asm (limited to 'engine') diff --git a/engine/check_battle_scene.asm b/engine/check_battle_scene.asm new file mode 100644 index 000000000..b63f00907 --- /dev/null +++ b/engine/check_battle_scene.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/collision_stdscripts.asm b/engine/collision_stdscripts.asm deleted file mode 100644 index 17b1e49b2..000000000 --- a/engine/collision_stdscripts.asm +++ /dev/null @@ -1,29 +0,0 @@ -CheckFacingTileForStd:: ; 1365b -; Checks to see if the tile you're facing has a std script associated with it. If so, executes the script and returns carry. - ld a, c - ld de, 3 - ld hl, TileCollisionStdScripts - call IsInArray - jr nc, .notintable - - ld a, jumpstd_command - ld [wJumpStdScriptBuffer], a - inc hl - ld a, [hli] - ld [wJumpStdScriptBuffer + 1], a - ld a, [hli] - ld [wJumpStdScriptBuffer + 2], a - ld a, BANK(Script_JumpStdFromRAM) - ld hl, Script_JumpStdFromRAM - call CallScript - scf - ret - -.notintable - xor a - ret - -INCLUDE "data/collision_stdscripts.asm" - -Script_JumpStdFromRAM: ; 0x1369a - jump wJumpStdScriptBuffer diff --git a/engine/get_breedmon_growth.asm b/engine/get_breedmon_growth.asm new file mode 100644 index 000000000..20c546315 --- /dev/null +++ b/engine/get_breedmon_growth.asm @@ -0,0 +1,27 @@ +GetBreedMon1LevelGrowth: ; e698 + ld hl, wBreedMon1Stats + ld de, TempMon + ld bc, BOXMON_STRUCT_LENGTH + call CopyBytes + callab 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 + callab CalcLevel + ld a, [wBreedMon2Level] + ld b, a + ld a, d + ld e, a + sub b + ld d, a + ret diff --git a/engine/knows_move.asm b/engine/knows_move.asm new file mode 100644 index 000000000..4ec3da347 --- /dev/null +++ b/engine/knows_move.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/pack.asm b/engine/pack.asm index e10b70e12..858548771 100644 --- a/engine/pack.asm +++ b/engine/pack.asm @@ -1315,10 +1315,10 @@ DrawPackGFX: ; 1089d ; 108cc PackGFXPointers: ; 108cc - dw PackGFX + $f0 * 1 - dw PackGFX + $f0 * 3 - dw PackGFX + $f0 * 0 - dw PackGFX + $f0 * 2 + dw PackGFX + (15 tiles) * 1 + dw PackGFX + (15 tiles) * 3 + dw PackGFX + (15 tiles) * 0 + dw PackGFX + (15 tiles) * 2 ; 108d4 Pack_InterpretJoypad: ; 108d4 (4:48d4) diff --git a/engine/player_gfx_2.asm b/engine/player_gfx_2.asm new file mode 100644 index 000000000..d6e7791a3 --- /dev/null +++ b/engine/player_gfx_2.asm @@ -0,0 +1,5 @@ +ChrisBackpic: ; 2ba1a +INCBIN "gfx/player/chris_back.2bpp.lz" + +DudeBackpic: ; 2bbaa +INCBIN "gfx/battle/dude.2bpp.lz" diff --git a/engine/trademon_frontpic.asm b/engine/trademon_frontpic.asm new file mode 100644 index 000000000..1641443ea --- /dev/null +++ b/engine/trademon_frontpic.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 FrontpicPredef + ret + +AnimateTrademonFrontpic: ; 4d81e + ld a, [wOTTrademonSpecies] + call IsAPokemon + ret c + callba 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 + callba TradeAnim_ShowGetmonFrontpic + ld a, [wOTTrademonSpecies] + ld [CurPartySpecies], a + hlcoord 7, 2 + ld d, $0 + ld e, ANIM_MON_TRADE + predef AnimateFrontpic + ret -- cgit v1.2.3 From 2fa1e97aebdb23445355a74ca7f49787508f4f0d Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Tue, 19 Dec 2017 19:04:56 -0500 Subject: Document two more bugs --- engine/item_effects.asm | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engine') diff --git a/engine/item_effects.asm b/engine/item_effects.asm index d1b5e7161..e881f6338 100644 --- a/engine/item_effects.asm +++ b/engine/item_effects.asm @@ -452,6 +452,10 @@ ParkBall: ; e8a2 ld a, [hl] push af set SUBSTATUS_TRANSFORMED, [hl] + +; This code is buggy. Any wild Pokémon that has Transformed will be +; caught as a Ditto, even if it was something else like Mew. +; To fix, do not set [TempEnemyMonSpecies] to DITTO. bit SUBSTATUS_TRANSFORMED, a jr nz, .ditto jr .not_ditto -- cgit v1.2.3 From 02609940dbf50e1a4d7052646bedd67a2796136b Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Thu, 21 Dec 2017 11:43:41 -0500 Subject: Document one more bug --- engine/npc_movement.asm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engine') diff --git a/engine/npc_movement.asm b/engine/npc_movement.asm index 9a18cdcb1..e102cc554 100755 --- a/engine/npc_movement.asm +++ b/engine/npc_movement.asm @@ -7,7 +7,8 @@ Function6ec1: ; 6ec1 ld hl, OBJECT_FLAGS1 add hl, bc - bit 4, [hl] ; lost + bit 4, [hl] ; lost, uncomment next line to fix +; jr nz, .resume push hl push bc call Function6f2c -- cgit v1.2.3 From ff4d25eee37c0947736258a5f9dea89072b3d7e3 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Thu, 21 Dec 2017 12:11:35 -0500 Subject: Include bugfix in comments --- engine/overworld.asm | 6 ++++-- engine/player_movement.asm | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'engine') diff --git a/engine/overworld.asm b/engine/overworld.asm index 90291b616..a085d1d5a 100755 --- a/engine/overworld.asm +++ b/engine/overworld.asm @@ -389,8 +389,8 @@ AddSpriteGFX: ; 142e5 LoadSpriteGFX: ; 14306 -; Bug: b is not preserved, so -; it's useless as a next count. +; Bug: b is not preserved, so it's useless as a next count. +; Uncomment the lines below to fix. ld hl, UsedSprites ld b, SPRITE_GFX_LIST_CAPACITY @@ -409,7 +409,9 @@ LoadSpriteGFX: ; 14306 ret .LoadSprite: + ; push bc call GetSprite + ; pop bc ld a, l ret ; 1431e diff --git a/engine/player_movement.asm b/engine/player_movement.asm index 5bc3e1f0b..34ca81fe9 100755 --- a/engine/player_movement.asm +++ b/engine/player_movement.asm @@ -409,6 +409,8 @@ DoPlayerMovement:: ; 80000 ; making bumps silent. ld a, [WalkingDirection] + ; cp STANDING + ; jr z, .not_warp ld e, a ld d, 0 ld hl, .EdgeWarps @@ -420,6 +422,7 @@ DoPlayerMovement:: ; 80000 ld a, 1 ld [wd041], a ld a, [WalkingDirection] + ; This is in the wrong place. cp STANDING jr z, .not_warp -- cgit v1.2.3 From 1d2df3bba124676075c3841b850d92c1c532b5df Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sat, 23 Dec 2017 11:34:55 -0500 Subject: Some more WRAM cleanup --- engine/timeset.asm | 2 +- engine/unown_puzzle.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engine') diff --git a/engine/timeset.asm b/engine/timeset.asm index 2a578f998..09c5b3a75 100755 --- a/engine/timeset.asm +++ b/engine/timeset.asm @@ -40,7 +40,7 @@ InitClock: ; 90672 (24:4672) call RotateFourPalettesRight ld hl, Text_WokeUpOak call PrintText - ld hl, wc608 + ld hl, wTimeSetBuffer ld bc, 50 xor a call ByteFill diff --git a/engine/unown_puzzle.asm b/engine/unown_puzzle.asm index 9f20ccb3e..3afe8a17d 100755 --- a/engine/unown_puzzle.asm +++ b/engine/unown_puzzle.asm @@ -14,7 +14,7 @@ UnownPuzzle: ; e1190 xor a ld [hBGMapMode], a call DisableLCD - ld hl, wMisc + ld hl, wMisc ; includes wPuzzlePieces ld bc, wMiscEnd - wMisc xor a call ByteFill -- cgit v1.2.3