diff options
Diffstat (limited to 'engine/specials.asm')
-rw-r--r-- | engine/specials.asm | 642 |
1 files changed, 642 insertions, 0 deletions
diff --git a/engine/specials.asm b/engine/specials.asm new file mode 100644 index 000000000..0c8158502 --- /dev/null +++ b/engine/specials.asm @@ -0,0 +1,642 @@ + +Special:: ; c01b +; Run script special de. + ld hl, SpecialsPointers + add hl, de + add hl, de + add hl, de + ld b, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, b + rst FarCall + ret +; c029 + +SpecialsPointers:: ; c029 + add_special Function97c28 + add_special Function29ce8 + add_special Function29d11 + add_special Function29d92 + add_special Function29e66 + add_special Function29e82 + add_special Function29efa + add_special Function29eee + add_special Function29c92 + add_special Function29cf1 + add_special Function29cfa + add_special Function29bfb + add_special Function29c7b + add_special Function29ec4 + add_special Function29ed9 + add_special Function29eaf + add_special Function29f47 + add_special Functionc2f6 + add_special Functionc309 + add_special Function1050b9 + add_special Functionc34a + add_special Function4d9e5 + add_special Function13a12 + add_special Function13a31 + add_special Function135db + add_special Functionfbb32 + add_special Functionfbcd2 + add_special Functionc658 + add_special Function1559a + add_special Functionc2e7 + add_special Function166d6 + add_special Function1672a + add_special Function16936 + add_special Function2c547 + add_special Function16218 + add_special Function8cc04 + add_special SpecialNameRival + add_special Function90913 + add_special Functionc2c0 + add_special Functionc2cd + add_special Functionc355 + add_special Functionc360 + add_special Functionc373 + add_special Functionc380 + add_special Functionc38d + add_special Functionc3db + add_special Function8c084 + add_special Function8c092 + add_special Function8c0b6 + add_special Function8c079 + add_special Function8c0ab + add_special Functiond91 + add_special WhiteBGMap + add_special UpdateTimePals + add_special ClearTileMap + add_special Function1ad2 + add_special Functione4a + add_special Functionc230 + add_special SpecialSeenMon + add_special WaitSFX + add_special PlayMapMusic + add_special RestartMapMusic + add_special Function12324 + add_special Function8379 + add_special Functionc25a + add_special Functionc268 + add_special Functionc276 + add_special Functionc284 + add_special Functionc3ef + add_special Function17421 + add_special Function17440 + add_special Function139a8 + add_special Functionc3fc + add_special Function26feb + add_special Function27043 + add_special SpecialGiveShuckle + add_special SpecialReturnShuckle + add_special Function73f7 + add_special SpecialCheckPokerus + add_special Function24b25 + add_special Function24b4e + add_special Function24ae8 + add_special Function4d87a + add_special Functionc434 + add_special Functionc422 + add_special Function4d9d3 + add_special Function88018 + add_special SpecialNameRater + add_special Functionc2da + add_special Function718d + add_special Function71ac + add_special Function2a4ab + add_special Function2a51f + add_special RandomPhoneMon + add_special Function14209 + add_special Functionfb841 + add_special SpecialSnorlaxAwake + add_special Function7413 + add_special Function7418 + add_special Function741d + add_special Functionc472 + add_special ProfOaksPCBoot + add_special SpecialGameboyCheck + add_special SpecialTrainerHouse + add_special Function16dc7 + add_special InitRoamMons + add_special Functionc48f + add_special Functionc49f + add_special Functionc4ac + add_special Function11ac3e + add_special Function11b444 + add_special Function11b5e8 + add_special Function11b7e5 + add_special Function11b879 + add_special Function11b920 + add_special Function11b93b + add_special Function1700b0 + add_special Function1700ba + add_special Function170114 + add_special Function170215 + add_special Function1704e1 + add_special Function17021d + add_special Function170b44 + add_special Function11ba38 + add_special Function170bd3 + add_special Function117656 + add_special Reset + add_special Function1011f1 + add_special Function101220 + add_special Function101225 + add_special Function101231 + add_special Function4925b + add_special Function8adef + add_special Function11c1ab + add_special Function170687 + add_special Function8ae68 + add_special Function17d224 + add_special Function17d2b6 + add_special Function17d2ce + add_special Function17f53d + add_special Function103612 + add_special SpecialHoOhChamber + add_special Function102142 + add_special Function4989a + add_special Function49bf9 + add_special SpecialPokeSeer + add_special SpecialBuenasPassword + add_special SpecialBuenaPrize + add_special SpecialDratini + add_special Function11485 + add_special SpecialBeastsCheck + add_special SpecialMonCheck + add_special Functionc225 + add_special Function170bd2 + add_special Function10366e + add_special Function1037eb + add_special Function10383c + add_special Function1060a2 + add_special Function14168 + add_special Function1037c2 + add_special Function10630f + add_special Function103780 + add_special Function10387b + add_special Function4ae12 + add_special Function1047eb + add_special Function4a927 + add_special Function90a54 + add_special Function90a88 + add_special SpecialNone +; c224 + +SpecialNone: ; c224 + ret +; c225 + +Functionc225: ; c225 + ld a, [ScriptVar] + ld d, a + callba Function57e2 + ret +; c230 + +Functionc230: ; c230 + ld a, [ScriptVar] + dec a + call CheckCaughtMon + ret nz + ld a, [ScriptVar] + dec a + call SetSeenAndCaughtMon + call FadeToMenu + ld a, [ScriptVar] + ld [wd265], a + callba Functionfb877 + call Function2b4d + ret +; c252 + +SpecialSeenMon: ; c252 + ld a, [ScriptVar] + dec a + call SetSeenMon + ret +; c25a + +Functionc25a: ; c25a + ld a, [ScriptVar] + ld b, a + callba Function4dbd2 + jr z, Functionc298 + jr Functionc292 + +Functionc268: ; c268 + ld a, [ScriptVar] + ld b, a + callba Function4dbd9 + jr z, Functionc298 + jr Functionc292 + +Functionc276: ; c276 + ld a, [ScriptVar] + ld b, a + callba Function4dbe0 + jr z, Functionc298 + jr Functionc292 + +Functionc284: ; c284 + ld a, [ScriptVar] + ld b, a + callba Function4dbe6 + jr z, Functionc298 + jr Functionc292 + +Functionc292: ; c292 + ld a, $1 + ld [ScriptVar], a + ret + +Functionc298: ; c298 + xor a + ld [ScriptVar], a + ret +; c29d + +SpecialNameRival: ; 0xc29d + ld b, $2 ; rival + ld de, RivalName + callba Function116b7 + ; default to "SILVER" + ld hl, RivalName + ld de, DefaultRivalName + call InitName + ret +; 0xc2b2 + +DefaultRivalName: ; 0xc2b2 + db "SILVER@" + +SpecialNameRater: ; c2b9 + callba NameRater + ret +; c2c0 + +Functionc2c0: ; c2c0 + call FadeToMenu + callba Function9191c + call Function2b4d + ret +; c2cd + +Functionc2cd: ; c2cd + call FadeToMenu + callba Function16be4 + call Function2b4d + ret +; c2da + +Functionc2da: ; c2da + call FadeToMenu + callba Function3f836 + call Function2b4d + ret +; c2e7 + +Functionc2e7: ; c2e7 + xor a + ld [ScriptVar], a + callba Function156d9 + ld a, c + ld [ScriptVar], a + ret +; c2f6 + +Functionc2f6: ; c2f6 + ld a, $0 + call GetSRAMBank + ld a, [$abe2] + and a + jr z, .asm_c302 + inc a + +.asm_c302 + ld [ScriptVar], a + call CloseSRAM + ret +; c309 + +Functionc309: ; c309 + ld a, $0 + call GetSRAMBank + ld a, [$abe2] + ld [CurItem], a + ld a, $1 + ld [wd10c], a + ld hl, NumItems + call ReceiveItem + jr nc, .asm_c33d + xor a + ld [$abe2], a + call CloseSRAM + ld a, [CurItem] + ld [wd265], a + call GetItemName + ld hl, UnknownText_0xc345 + call PrintText + ld a, $1 + ld [ScriptVar], a + ret + +.asm_c33d + call CloseSRAM + xor a + ld [ScriptVar], a + ret +; c345 + +UnknownText_0xc345: ; 0xc345 + ; received item + text_jump UnknownText_0x1bd3be + db "@" +; 0xc34a + +Functionc34a: ; c34a + callba Function1369d + ld a, b + ld [ScriptVar], a + ret +; c355 + +Functionc355: ; c355 + ld a, [ScriptVar] + ld e, a + callba Function91a53 + ret +; c360 + +Functionc360: ; c360 + call FadeToMenu + callba Functione1190 + ld a, [wd0ec] + ld [ScriptVar], a + call Function2b4d + ret +; c373 + +Functionc373: ; c373 + call Functionc3ae + ret c + ld a, BANK(Function926c7) + ld hl, Function926c7 + call Functionc39a + ret +; c380 + +Functionc380: ; c380 + call Functionc3ae + ret c + ld a, BANK(Functione00ee) + ld hl, Functione00ee + call Functionc39a + ret +; c38d + +Functionc38d: ; c38d + call Functionc3ae + ret c + ld a, BANK(Functione1e5b) + ld hl, Functione1e5b + call Functionc39a + ret +; c39a + +Functionc39a: ; c39a + call Function31cf + call FadeToMenu + ld hl, wd0e8 + ld a, [hli] + push af + ld a, [hli] + ld h, [hl] + ld l, a + pop af + rst FarCall + call Function2b4d + ret +; c3ae + +Functionc3ae: ; c3ae + ld hl, Coins + ld a, [hli] + or [hl] + jr z, .asm_c3c4 + ld a, COIN_CASE + ld [CurItem], a + ld hl, NumItems + call CheckItem + jr nc, .asm_c3c9 + and a + ret + +.asm_c3c4 + ld hl, UnknownText_0xc3d1 + jr .asm_c3cc + +.asm_c3c9 + ld hl, UnknownText_0xc3d6 + +.asm_c3cc + call PrintText + scf + ret +; c3d1 + +UnknownText_0xc3d1: ; 0xc3d1 + ; You have no coins. + text_jump UnknownText_0x1bd3d7 + db "@" +; 0xc3d6 + +UnknownText_0xc3d6: ; 0xc3d6 + ; You don't have a COIN CASE. + text_jump UnknownText_0x1bd3eb + db "@" +; 0xc3db + +Functionc3db: ; c3db + call WhiteBGMap + call Function2879 + ret +; c3e2 + +ScriptReturnCarry: ; c3e2 + jr c, .carry + xor a + ld [ScriptVar], a + ret +.carry + ld a, 1 + ld [ScriptVar], a + ret +; c3ef + +Functionc3ef: ; c3ef + callba Function1150c + ld a, [wdc3a] + ld [ScriptVar], a + ret +; c3fc + +Functionc3fc: ; c3fc + ld a, [ScriptVar] + ld [wdfce], a + ret +; c403 + + +Functionc403:: ; c403 + ld a, c + and a + jr nz, .asm_c410 + ld a, d + ld [wdfcc], a + ld a, e + ld [wdfcd], a + ret + +.asm_c410 + ld a, d + ld [wdc5a], a + ld a, e + ld [wdc5b], a + ret +; c419 + + +SpecialCheckPokerus: ; c419 +; Check if a monster in your party has Pokerus + callba CheckPokerus + jp ScriptReturnCarry +; c422 + +Functionc422: ; c422 + callba Function1152b + ld hl, wdc9d + res 0, [hl] + callba Function5d33 + ret +; c434 + +Functionc434: ; c434 + callba Function11542 + jp ScriptReturnCarry +; c43d + +SpecialSnorlaxAwake: ; 0xc43d +; Check if the Poké Flute channel is playing, and if the player is standing +; next to Snorlax. + +; outputs: +; ScriptVar is 1 if the conditions are met, otherwise 0. + +; check background music + ld a, [wMapMusic] + cp MUSIC_POKE_FLUTE_CHANNEL + jr nz, .nope + + ld a, [XCoord] + ld b, a + ld a, [YCoord] + ld c, a + + ld hl, .ProximityCoords +.loop + ld a, [hli] + cp $ff + jr z, .nope + cp b + jr nz, .nextcoord + ld a, [hli] + cp c + jr nz, .loop + + ld a, $1 + jr .done + +.nextcoord + inc hl + jr .loop + +.nope + xor a +.done + ld [ScriptVar], a + ret + +.ProximityCoords + ; x, y + db 33, 8 ; left + db 34, 10 ; below + db 35, 10 ; below + db 36, 8 ; right + db 36, 9 ; right + db $ff + + +Functionc472: ; c472 + ld a, [CurPartySpecies] + jp PlayCry +; c478 + + +SpecialGameboyCheck: ; c478 + ld a, [hCGB] + and a + jr nz, .cgb + + ld a, [hSGB] + and a + jr nz, .sgb + +.gb + xor a + jr .done +.sgb + ld a, 1 + jr .done +.cgb + ld a, 2 +.done + ld [ScriptVar], a + ret + + +Functionc48f: ; c48f + ld a, MUSIC_NONE % $100 + ld [MusicFadeIDLo], a + ld a, MUSIC_NONE / $100 + ld [MusicFadeIDHi], a + ld a, $2 + ld [MusicFade], a + ret +; c49f + +Functionc49f: ; c49f + call FadeToMenu + callba Function1dd702 + call Function2b4d + ret +; c4ac + +Functionc4ac: ; c4ac + call FadeToMenu + callba Function84688 + call Function2b4d + ret +; c4b9 + +SpecialTrainerHouse: ; 0xc4b9 + ld a, 0 + call GetSRAMBank + ld a, [$abfd] ; XXX what is this memory location? + ld [ScriptVar], a + jp CloseSRAM + |