pokered/scripts/SilphCo11F.asm

395 lines
8.9 KiB
NASM

SilphCo11F_Script:
call SilphCo11FGateCallbackScript
call EnableAutoTextBoxDrawing
ld hl, SilphCo11TrainerHeaders
ld de, SilphCo11F_ScriptPointers
ld a, [wSilphCo11FCurScript]
call ExecuteCurMapScriptInTable
ld [wSilphCo11FCurScript], a
ret
SilphCo11FGateCallbackScript:
ld hl, wCurrentMapScriptFlags
bit BIT_CUR_MAP_LOADED_1, [hl]
res BIT_CUR_MAP_LOADED_1, [hl]
ret z
ld hl, SilphCo11GateCoords
call SilphCo11F_SetCardKeyDoorYScript
call SilphCo11FSetUnlockedDoorEventScript
CheckEvent EVENT_SILPH_CO_11_UNLOCKED_DOOR
ret nz
ld a, $20
ld [wNewTileBlockID], a
lb bc, 6, 3
predef_jump ReplaceTileBlock
SilphCo11GateCoords:
dbmapcoord 3, 6
db -1 ; end
SilphCo11F_SetCardKeyDoorYScript:
push hl
ld hl, wCardKeyDoorY
ld a, [hli]
ld b, a
ld a, [hl]
ld c, a
xor a
ldh [hUnlockedSilphCoDoors], a
pop hl
.loop_check_doors
ld a, [hli]
cp $ff
jr z, .exit_loop
push hl
ld hl, hUnlockedSilphCoDoors
inc [hl]
pop hl
cp b
jr z, .check_y_coord
inc hl
jr .loop_check_doors
.check_y_coord
ld a, [hli]
cp c
jr nz, .loop_check_doors
ld hl, wCardKeyDoorY
xor a
ld [hli], a
ld [hl], a
ret
.exit_loop
xor a
ldh [hUnlockedSilphCoDoors], a
ret
SilphCo11FSetUnlockedDoorEventScript:
ldh a, [hUnlockedSilphCoDoors]
and a
ret z
SetEvent EVENT_SILPH_CO_11_UNLOCKED_DOOR
ret
SilphCo11FTeamRocketLeavesScript:
ld hl, .HideMissableObjectIDs
.hide_loop
ld a, [hli]
cp $ff
jr z, .done_hiding
push hl
ld [wMissableObjectIndex], a
predef HideObject
pop hl
jr .hide_loop
.done_hiding
ld hl, .ShowMissableObjectIDs
.show_loop
ld a, [hli]
cp -1
ret z
push hl
ld [wMissableObjectIndex], a
predef ShowObject
pop hl
jr .show_loop
.ShowMissableObjectIDs:
db HS_SAFFRON_CITY_8
db HS_SAFFRON_CITY_9
db HS_SAFFRON_CITY_A
db HS_SAFFRON_CITY_B
db HS_SAFFRON_CITY_C
db HS_SAFFRON_CITY_D
db -1 ; end
.HideMissableObjectIDs:
db HS_SAFFRON_CITY_1
db HS_SAFFRON_CITY_2
db HS_SAFFRON_CITY_3
db HS_SAFFRON_CITY_4
db HS_SAFFRON_CITY_5
db HS_SAFFRON_CITY_6
db HS_SAFFRON_CITY_7
db HS_SAFFRON_CITY_E
db HS_SAFFRON_CITY_F
db HS_SILPH_CO_2F_2
db HS_SILPH_CO_2F_3
db HS_SILPH_CO_2F_4
db HS_SILPH_CO_2F_5
db HS_SILPH_CO_3F_1
db HS_SILPH_CO_3F_2
db HS_SILPH_CO_4F_1
db HS_SILPH_CO_4F_2
db HS_SILPH_CO_4F_3
db HS_SILPH_CO_5F_1
db HS_SILPH_CO_5F_2
db HS_SILPH_CO_5F_3
db HS_SILPH_CO_5F_4
db HS_SILPH_CO_6F_1
db HS_SILPH_CO_6F_2
db HS_SILPH_CO_6F_3
db HS_SILPH_CO_7F_1
db HS_SILPH_CO_7F_2
db HS_SILPH_CO_7F_3
db HS_SILPH_CO_7F_4
db HS_SILPH_CO_8F_1
db HS_SILPH_CO_8F_2
db HS_SILPH_CO_8F_3
db HS_SILPH_CO_9F_1
db HS_SILPH_CO_9F_2
db HS_SILPH_CO_9F_3
db HS_SILPH_CO_10F_1
db HS_SILPH_CO_10F_2
db HS_SILPH_CO_11F_1
db HS_SILPH_CO_11F_2
db HS_SILPH_CO_11F_3
db -1 ; end
SilphCo11FResetCurScript:
xor a
ld [wJoyIgnore], a
; fallthrough
SilphCo11FSetCurScript:
ld [wSilphCo11FCurScript], a
ld [wCurMapScript], a
ret
SilphCo11F_ScriptPointers:
def_script_pointers
dw_const SilphCo11FDefaultScript, SCRIPT_SILPHCO11F_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_SILPHCO11F_START_BATTLE
dw_const EndTrainerBattle, SCRIPT_SILPHCO11F_END_BATTLE
dw_const SilphCo11FGiovanniBattleFacingScript, SCRIPT_SILPHCO11F_GIOVANNI_FACING
dw_const SilphCo11FGiovanniStartBattleScript, SCRIPT_SILPHCO11F_GIOVANNI_START_BATTLE
dw_const SilphCo11FGiovanniAfterBattleScript, SCRIPT_SILPHCO11F_GIOVANNI_AFTER_BATTLE
SilphCo11FDefaultScript:
CheckEvent EVENT_BEAT_SILPH_CO_GIOVANNI
ret nz
ld hl, .PlayerCoordsArray
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
ld a, [wCoordIndex]
ld [wSavedCoordIndex], a
xor a
ldh [hJoyHeld], a
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
ld a, TEXT_SILPHCO11F_GIOVANNI
ldh [hTextID], a
call DisplayTextID
ld a, SILPHCO11F_GIOVANNI
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, .GiovanniMovement
call MoveSprite
ld a, SCRIPT_SILPHCO11F_GIOVANNI_FACING
jp SilphCo11FSetCurScript
.PlayerCoordsArray:
dbmapcoord 6, 13
dbmapcoord 7, 12
db -1 ; end
.GiovanniMovement:
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_DOWN
db -1 ; end
SilphCo11FSetPlayerAndSpriteFacingDirectionScript:
ld [wPlayerMovingDirection], a
ld a, SILPHCO11F_GIOVANNI
ldh [hSpriteIndex], a
ld a, b
ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
SilphCo11FGiovanniAfterBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, SilphCo11FResetCurScript
ld a, [wSavedCoordIndex]
cp 1 ; index of second, upper-right entry in SilphCo11FDefaultScript.PlayerCoordsArray
jr z, .face_player_up
ld a, PLAYER_DIR_LEFT
ld b, SPRITE_FACING_RIGHT
jr .continue
.face_player_up
ld a, PLAYER_DIR_UP
ld b, SPRITE_FACING_DOWN
.continue
call SilphCo11FSetPlayerAndSpriteFacingDirectionScript
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
ld a, TEXT_SILPHCO11F_GIOVANNI_YOU_RUINED_OUR_PLANS
ldh [hTextID], a
call DisplayTextID
call GBFadeOutToBlack
call SilphCo11FTeamRocketLeavesScript
call UpdateSprites
call Delay3
call GBFadeInFromBlack
SetEvent EVENT_BEAT_SILPH_CO_GIOVANNI
xor a
ld [wJoyIgnore], a
jp SilphCo11FSetCurScript
SilphCo11FGiovanniBattleFacingScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
ld a, SILPHCO11F_GIOVANNI
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, [wSavedCoordIndex]
cp 1 ; index of second, upper-right entry in SilphCo11FDefaultScript.PlayerCoordsArray
jr z, .face_player_up
ld a, PLAYER_DIR_LEFT
ld b, SPRITE_FACING_RIGHT
jr .continue
.face_player_up
ld a, PLAYER_DIR_UP
ld b, SPRITE_FACING_DOWN
.continue
call SilphCo11FSetPlayerAndSpriteFacingDirectionScript
call Delay3
ld a, SCRIPT_SILPHCO11F_GIOVANNI_START_BATTLE
jp SilphCo11FSetCurScript
SilphCo11FGiovanniStartBattleScript:
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, SilphCo10FGiovanniILostAgainText
ld de, SilphCo10FGiovanniILostAgainText
call SaveEndBattleTextPointers
ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
xor a
ld [wJoyIgnore], a
ld a, SCRIPT_SILPHCO11F_GIOVANNI_AFTER_BATTLE
jp SilphCo11FSetCurScript
SilphCo11F_TextPointers:
def_text_pointers
dw_const SilphCo11FSilphPresidentText, TEXT_SILPHCO11F_SILPH_PRESIDENT
dw_const SilphCo11FBeautyText, TEXT_SILPHCO11F_BEAUTY
dw_const SilphCo11FGiovanniText, TEXT_SILPHCO11F_GIOVANNI
dw_const SilphCo11FRocket1Text, TEXT_SILPHCO11F_ROCKET1
dw_const SilphCo11FRocket2Text, TEXT_SILPHCO11F_ROCKET2
dw_const SilphCo11FGiovanniYouRuinedOurPlansText, TEXT_SILPHCO11F_GIOVANNI_YOU_RUINED_OUR_PLANS
SilphCo11TrainerHeaders:
def_trainers 4
SilphCo11TrainerHeader0:
trainer EVENT_BEAT_SILPH_CO_11F_TRAINER_0, 4, SilphCo11FRocket1BattleText, SilphCo11FRocket1EndBattleText, SilphCo11FRocket1AfterBattleText
SilphCo11TrainerHeader1:
trainer EVENT_BEAT_SILPH_CO_11F_TRAINER_1, 3, SilphCo11FRocket2BattleText, SilphCo11FRocket2EndBattleText, SilphCo11FRocket2AfterBattleText
db -1 ; end
SilphCo11FSilphPresidentText:
text_asm
CheckEvent EVENT_GOT_MASTER_BALL
jp nz, .got_item
ld hl, .Text
call PrintText
lb bc, MASTER_BALL, 1
call GiveItem
jr nc, .bag_full
ld hl, .ReceivedMasterBallText
call PrintText
SetEvent EVENT_GOT_MASTER_BALL
jr .done
.bag_full
ld hl, .NoRoomText
call PrintText
jr .done
.got_item
ld hl, .MasterBallDescriptionText
call PrintText
.done
jp TextScriptEnd
.Text:
text_far _SilphCo11FSilphPresidentText
text_end
.ReceivedMasterBallText:
text_far _SilphCo11FSilphPresidentReceivedMasterBallText
sound_get_key_item
text_end
.MasterBallDescriptionText:
text_far _SilphCo11FSilphPresidentMasterBallDescriptionText
text_end
.NoRoomText:
text_far _SilphCo11FSilphPresidentNoRoomText
text_end
SilphCo11FBeautyText:
text_far _SilphCo11FBeautyText
text_end
SilphCo11FGiovanniText:
text_far _SilphCo11FGiovanniText
text_end
SilphCo10FGiovanniILostAgainText:
text_far _SilphCo10FGiovanniILostAgainText
text_end
SilphCo11FGiovanniYouRuinedOurPlansText:
text_far _SilphCo11FGiovanniYouRuinedOurPlansText
text_end
SilphCo11FRocket1Text:
text_asm
ld hl, SilphCo11TrainerHeader0
call TalkToTrainer
jp TextScriptEnd
SilphCo11FRocket1BattleText:
text_far _SilphCo11FRocket1BattleText
text_end
SilphCo11FRocket1EndBattleText:
text_far _SilphCo11FRocket1EndBattleText
text_end
SilphCo11FRocket1AfterBattleText:
text_far _SilphCo11FRocket1AfterBattleText
text_end
SilphCo11FRocket2Text:
text_asm
ld hl, SilphCo11TrainerHeader1
call TalkToTrainer
jp TextScriptEnd
SilphCo11FRocket2BattleText:
text_far _SilphCo11FRocket2BattleText
text_end
SilphCo11FRocket2EndBattleText:
text_far _SilphCo11FRocket2EndBattleText
text_end
SilphCo11FRocket2AfterBattleText:
text_far _SilphCo11FRocket2AfterBattleText
text_end
SilphCo10FPorygonText: ; unreferenced
text_asm
ld hl, .Text
call PrintText
ld a, PORYGON
call DisplayPokedex
jp TextScriptEnd
.Text:
text_far _SilphCo10FPorygonText
text_end