pokered/scripts/GameCorner.asm

537 lines
11 KiB
NASM

GameCorner_Script:
call GameCornerSelectLuckySlotMachine
call GameCornerSetRocketHideoutDoorTile
call EnableAutoTextBoxDrawing
ld hl, GameCorner_ScriptPointers
ld a, [wGameCornerCurScript]
jp CallFunctionInTable
GameCornerSelectLuckySlotMachine:
ld hl, wCurrentMapScriptFlags
bit BIT_CUR_MAP_LOADED_2, [hl]
res BIT_CUR_MAP_LOADED_2, [hl]
ret z
call Random
ldh a, [hRandomAdd]
cp $7
jr nc, .not_max
ld a, $8
.not_max
srl a
srl a
srl a
ld [wLuckySlotHiddenObjectIndex], a
ret
GameCornerSetRocketHideoutDoorTile:
ld hl, wCurrentMapScriptFlags
bit BIT_CUR_MAP_LOADED_1, [hl]
res BIT_CUR_MAP_LOADED_1, [hl]
ret z
CheckEvent EVENT_FOUND_ROCKET_HIDEOUT
ret nz
ld a, $2a
ld [wNewTileBlockID], a
lb bc, 2, 8
predef_jump ReplaceTileBlock
GameCornerReenterMapAfterPlayerLoss:
xor a ; SCRIPT_GAMECORNER_DEFAULT
ld [wJoyIgnore], a
ld [wGameCornerCurScript], a
ld [wCurMapScript], a
ret
GameCorner_ScriptPointers:
def_script_pointers
dw_const GameCornerDefaultScript, SCRIPT_GAMECORNER_DEFAULT
dw_const GameCornerRocketBattleScript, SCRIPT_GAMECORNER_ROCKET_BATTLE
dw_const GameCornerRocketExitScript, SCRIPT_GAMECORNER_ROCKET_EXIT
GameCornerDefaultScript:
ret
GameCornerRocketBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, GameCornerReenterMapAfterPlayerLoss
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
ld a, TEXT_GAMECORNER_ROCKET_AFTER_BATTLE
ldh [hTextID], a
call DisplayTextID
ld a, GAMECORNER_ROCKET
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, GameCornerMovement_Rocket_WalkAroundPlayer
ld a, [wYCoord]
cp 6
jr nz, .not_direct_movement
ld de, GameCornerMovement_Rocket_WalkDirect
jr .got_rocket_movement
.not_direct_movement
ld a, [wXCoord]
cp 8
jr nz, .got_rocket_movement
ld de, GameCornerMovement_Rocket_WalkDirect
.got_rocket_movement
ld a, GAMECORNER_ROCKET
ldh [hSpriteIndex], a
call MoveSprite
ld a, SCRIPT_GAMECORNER_ROCKET_EXIT
ld [wGameCornerCurScript], a
ret
GameCornerMovement_Rocket_WalkAroundPlayer:
db NPC_MOVEMENT_DOWN
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db -1 ; end
GameCornerMovement_Rocket_WalkDirect:
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db NPC_MOVEMENT_RIGHT
db -1 ; end
GameCornerRocketExitScript:
ld a, [wStatusFlags5]
bit BIT_SCRIPTED_NPC_MOVEMENT, a
ret nz
xor a
ld [wJoyIgnore], a
ld a, HS_GAME_CORNER_ROCKET
ld [wMissableObjectIndex], a
predef HideObject
ld hl, wCurrentMapScriptFlags
set BIT_CUR_MAP_LOADED_1, [hl]
set BIT_CUR_MAP_LOADED_2, [hl]
ld a, SCRIPT_GAMECORNER_DEFAULT
ld [wGameCornerCurScript], a
ret
GameCorner_TextPointers:
def_text_pointers
dw_const GameCornerBeauty1Text, TEXT_GAMECORNER_BEAUTY1
dw_const GameCornerClerk1Text, TEXT_GAMECORNER_CLERK1
dw_const GameCornerMiddleAgedMan1Text, TEXT_GAMECORNER_MIDDLE_AGED_MAN1
dw_const GameCornerBeauty2Text, TEXT_GAMECORNER_BEAUTY2
dw_const GameCornerFishingGuruText, TEXT_GAMECORNER_FISHING_GURU
dw_const GameCornerMiddleAgedWomanText, TEXT_GAMECORNER_MIDDLE_AGED_WOMAN
dw_const GameCornerGymGuideText, TEXT_GAMECORNER_GYM_GUIDE
dw_const GameCornerGamblerText, TEXT_GAMECORNER_GAMBLER
dw_const GameCornerClerk2Text, TEXT_GAMECORNER_CLERK2
dw_const GameCornerGentlemanText, TEXT_GAMECORNER_GENTLEMAN
dw_const GameCornerRocketText, TEXT_GAMECORNER_ROCKET
dw_const GameCornerPosterText, TEXT_GAMECORNER_POSTER
dw_const GameCornerRocketAfterBattleText, TEXT_GAMECORNER_ROCKET_AFTER_BATTLE
GameCornerBeauty1Text:
text_far _GameCornerBeauty1Text
text_end
GameCornerClerk1Text:
text_asm
; Show player's coins
call GameCornerDrawCoinBox
ld hl, .DoYouNeedSomeGameCoins
call PrintText
call YesNoChoice
ld a, [wCurrentMenuItem]
and a
jr nz, .declined
; Can only get more coins if you
; - have the Coin Case
ld b, COIN_CASE
call IsItemInBag
jr z, .no_coin_case
; - have room in the Coin Case for at least 9 coins
call Has9990Coins
jr nc, .coin_case_full
; - have at least 1000 yen
xor a
ldh [hMoney], a
ldh [hMoney + 2], a
ld a, $10
ldh [hMoney + 1], a
call HasEnoughMoney
jr nc, .buy_coins
ld hl, .CantAffordTheCoins
jr .print_ret
.buy_coins
; Spend 1000 yen
xor a
ldh [hMoney], a
ldh [hMoney + 2], a
ld a, $10
ldh [hMoney + 1], a
ld hl, hMoney + 2
ld de, wPlayerMoney + 2
ld c, $3
predef SubBCDPredef
; Receive 50 coins
xor a
ldh [hUnusedCoinsByte], a
ldh [hCoins], a
ld a, $50
ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
predef AddBCDPredef
; Update display
call GameCornerDrawCoinBox
ld hl, .ThanksHereAre50Coins
jr .print_ret
.declined
ld hl, .PleaseComePlaySometime
jr .print_ret
.coin_case_full
ld hl, .CoinCaseIsFull
jr .print_ret
.no_coin_case
ld hl, .DontHaveCoinCase
.print_ret
call PrintText
jp TextScriptEnd
.DoYouNeedSomeGameCoins:
text_far _GameCornerClerk1DoYouNeedSomeGameCoinsText
text_end
.ThanksHereAre50Coins:
text_far _GameCornerClerk1ThanksHereAre50CoinsText
text_end
.PleaseComePlaySometime:
text_far _GameCornerClerk1PleaseComePlaySometimeText
text_end
.CantAffordTheCoins:
text_far _GameCornerClerk1CantAffordTheCoinsText
text_end
.CoinCaseIsFull:
text_far _GameCornerClerk1CoinCaseIsFullText
text_end
.DontHaveCoinCase:
text_far _GameCornerClerk1DontHaveCoinCaseText
text_end
GameCornerMiddleAgedMan1Text:
text_far _GameCornerMiddleAgedMan1Text
text_end
GameCornerBeauty2Text:
text_far _GameCornerBeauty2Text
text_end
GameCornerFishingGuruText:
text_asm
CheckEvent EVENT_GOT_10_COINS
jr nz, .alreadyGotNpcCoins
ld hl, .WantToPlayText
call PrintText
ld b, COIN_CASE
call IsItemInBag
jr z, .dontHaveCoinCase
call Has9990Coins
jr nc, .coinCaseFull
xor a
ldh [hUnusedCoinsByte], a
ldh [hCoins], a
ld a, $10
ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
predef AddBCDPredef
SetEvent EVENT_GOT_10_COINS
ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, .Received10CoinsText
jr .print_ret
.alreadyGotNpcCoins
ld hl, .WinsComeAndGoText
jr .print_ret
.coinCaseFull
ld hl, .DontNeedMyCoinsText
jr .print_ret
.dontHaveCoinCase
ld hl, GameCornerOopsForgotCoinCaseText
.print_ret
call PrintText
jp TextScriptEnd
.WantToPlayText:
text_far _GameCornerFishingGuruWantToPlayText
text_end
.Received10CoinsText:
text_far _GameCornerFishingGuruReceived10CoinsText
sound_get_item_1
text_end
.DontNeedMyCoinsText:
text_far _GameCornerFishingGuruDontNeedMyCoinsText
text_end
.WinsComeAndGoText:
text_far _GameCornerFishingGuruWinsComeAndGoText
text_end
GameCornerMiddleAgedWomanText:
text_far _GameCornerMiddleAgedWomanText
text_end
GameCornerGymGuideText:
text_asm
CheckEvent EVENT_BEAT_ERIKA
ld hl, GameCornerGymGuideChampInMakingText
jr z, .not_defeated
ld hl, GameCornerGymGuideTheyOfferRarePokemonText
.not_defeated
call PrintText
jp TextScriptEnd
GameCornerGymGuideChampInMakingText:
text_far _GameCornerGymGuideChampInMakingText
text_end
GameCornerGymGuideTheyOfferRarePokemonText:
text_far _GameCornerGymGuideTheyOfferRarePokemonText
text_end
GameCornerGamblerText:
text_far _GameCornerGamblerText
text_end
GameCornerClerk2Text:
text_asm
CheckEvent EVENT_GOT_20_COINS_2
jr nz, .alreadyGotNpcCoins
ld hl, .WantSomeCoinsText
call PrintText
ld b, COIN_CASE
call IsItemInBag
jr z, .dontHaveCoinCase
call Has9990Coins
jr nc, .coinCaseFull
xor a
ldh [hUnusedCoinsByte], a
ldh [hCoins], a
ld a, $20
ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
predef AddBCDPredef
SetEvent EVENT_GOT_20_COINS_2
ld hl, .Received20CoinsText
jr .print_ret
.alreadyGotNpcCoins
ld hl, .INeedMoreCoinsText
jr .print_ret
.coinCaseFull
ld hl, .YouHaveLotsOfCoinsText
jr .print_ret
.dontHaveCoinCase
ld hl, GameCornerOopsForgotCoinCaseText
.print_ret
call PrintText
jp TextScriptEnd
.WantSomeCoinsText:
text_far _GameCornerClerk2WantSomeCoinsText
text_end
.Received20CoinsText:
text_far _GameCornerClerk2Received20CoinsText
sound_get_item_1
text_end
.YouHaveLotsOfCoinsText:
text_far _GameCornerClerk2YouHaveLotsOfCoinsText
text_end
.INeedMoreCoinsText:
text_far _GameCornerClerk2INeedMoreCoinsText
text_end
GameCornerGentlemanText:
text_asm
CheckEvent EVENT_GOT_20_COINS
jr nz, .alreadyGotNpcCoins
ld hl, .ThrowingMeOffText
call PrintText
ld b, COIN_CASE
call IsItemInBag
jr z, .dontHaveCoinCase
call Has9990Coins
jr z, .coinCaseFull
xor a
ldh [hUnusedCoinsByte], a
ldh [hCoins], a
ld a, $20
ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
predef AddBCDPredef
SetEvent EVENT_GOT_20_COINS
ld hl, .Received20CoinsText
jr .print_ret
.alreadyGotNpcCoins
ld hl, .CloselyWatchTheReelsText
jr .print_ret
.coinCaseFull
ld hl, .YouGotYourOwnCoinsText
jr .print_ret
.dontHaveCoinCase
ld hl, GameCornerOopsForgotCoinCaseText
.print_ret
call PrintText
jp TextScriptEnd
.ThrowingMeOffText:
text_far _GameCornerGentlemanThrowingMeOffText
text_end
.Received20CoinsText:
text_far _GameCornerGentlemanReceived20CoinsText
sound_get_item_1
text_end
.YouGotYourOwnCoinsText:
text_far _GameCornerGentlemanYouGotYourOwnCoinsText
text_end
.CloselyWatchTheReelsText:
text_far _GameCornerGentlemanCloselyWatchTheReelsText
text_end
GameCornerRocketText:
text_asm
ld hl, .ImGuardingThisPosterText
call PrintText
ld hl, wStatusFlags3
set BIT_TALKED_TO_TRAINER, [hl]
set BIT_PRINT_END_BATTLE_TEXT, [hl]
ld hl, .BattleEndText
ld de, .BattleEndText
call SaveEndBattleTextPointers
ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
xor a
ldh [hJoyHeld], a
ldh [hJoyPressed], a
ldh [hJoyReleased], a
ld a, SCRIPT_GAMECORNER_ROCKET_BATTLE
ld [wGameCornerCurScript], a
jp TextScriptEnd
.ImGuardingThisPosterText:
text_far _GameCornerRocketImGuardingThisPosterText
text_end
.BattleEndText:
text_far _GameCornerRocketBattleEndText
text_end
GameCornerRocketAfterBattleText:
text_far _GameCornerRocketAfterBattleText
text_end
GameCornerPosterText:
text_asm
ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, .SwitchBehindPosterText
call PrintText
call WaitForSoundToFinish
ld a, SFX_GO_INSIDE
call PlaySound
call WaitForSoundToFinish
SetEvent EVENT_FOUND_ROCKET_HIDEOUT
ld a, $43
ld [wNewTileBlockID], a
lb bc, 2, 8
predef ReplaceTileBlock
jp TextScriptEnd
.SwitchBehindPosterText:
text_far _GameCornerPosterSwitchBehindPosterText
text_asm
ld a, SFX_SWITCH
call PlaySound
call WaitForSoundToFinish
jp TextScriptEnd
GameCornerOopsForgotCoinCaseText:
text_far _GameCornerOopsForgotCoinCaseText
text_end
GameCornerDrawCoinBox:
ld hl, wStatusFlags5
set BIT_NO_TEXT_DELAY, [hl]
hlcoord 11, 0
ld b, 5
ld c, 7
call TextBoxBorder
call UpdateSprites
hlcoord 12, 1
ld b, 4
ld c, 7
call ClearScreenArea
hlcoord 12, 2
ld de, GameCornerMoneyText
call PlaceString
hlcoord 12, 3
ld de, GameCornerBlankText1
call PlaceString
hlcoord 12, 3
ld de, wPlayerMoney
ld c, 3 | MONEY_SIGN | LEADING_ZEROES
call PrintBCDNumber
hlcoord 12, 4
ld de, GameCornerCoinText
call PlaceString
hlcoord 12, 5
ld de, GameCornerBlankText2
call PlaceString
hlcoord 15, 5
ld de, wPlayerCoins
ld c, $82
call PrintBCDNumber
ld hl, wStatusFlags5
res BIT_NO_TEXT_DELAY, [hl]
ret
GameCornerMoneyText:
db "MONEY@"
GameCornerCoinText:
db "COIN@"
GameCornerBlankText1:
db " @"
GameCornerBlankText2:
db " @"
Has9990Coins:
ld a, $99
ldh [hCoins], a
ld a, $90
ldh [hCoins + 1], a
jp HasEnoughCoins