diff options
Diffstat (limited to 'scripts/SafariZoneGate.asm')
-rwxr-xr-x | scripts/SafariZoneGate.asm | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm new file mode 100755 index 00000000..f3de556b --- /dev/null +++ b/scripts/SafariZoneGate.asm @@ -0,0 +1,293 @@ +SafariZoneGate_Script: + call EnableAutoTextBoxDrawing + ld hl, SafariZoneGate_ScriptPointers + ld a, [wSafariZoneGateCurScript] + jp CallFunctionInTable + +SafariZoneGate_ScriptPointers: + dw .SafariZoneEntranceScript0 + dw .SafariZoneEntranceScript1 + dw .SafariZoneEntranceScript2 + dw .SafariZoneEntranceScript3 + dw .SafariZoneEntranceScript4 + dw .SafariZoneEntranceScript5 + dw .SafariZoneEntranceScript6 + +.SafariZoneEntranceScript0 + ld hl, .CoordsData_75221 + call ArePlayerCoordsInArray + ret nc + ld a, $3 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, $ff + ld [wJoyIgnore], a + xor a + ld [hJoyHeld], a + ld a, SPRITE_FACING_RIGHT + ld [wSpriteStateData1 + 9], a + ld a, [wCoordIndex] + cp $1 + jr z, .asm_7520f + ld a, $2 + ld [wSafariZoneGateCurScript], a + ret +.asm_7520f + ld a, D_RIGHT + ld c, $1 + call SafariZoneEntranceAutoWalk + ld a, $f0 + ld [wJoyIgnore], a + ld a, $1 + ld [wSafariZoneGateCurScript], a + ret + +.CoordsData_75221: + db $02,$03 + db $02,$04 + db $FF + +.SafariZoneEntranceScript1 + call SafariZoneEntranceScript_752b4 + ret nz +.SafariZoneEntranceScript2 + xor a + ld [hJoyHeld], a + ld [wJoyIgnore], a + call UpdateSprites + ld a, $4 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + ld a, $ff + ld [wJoyIgnore], a + ret + +.SafariZoneEntranceScript3 + call SafariZoneEntranceScript_752b4 + ret nz + xor a + ld [wJoyIgnore], a + ld a, $5 + ld [wSafariZoneGateCurScript], a + ret + +.SafariZoneEntranceScript5 + ld a, PLAYER_DIR_DOWN + ld [wPlayerMovingDirection], a + CheckAndResetEvent EVENT_SAFARI_GAME_OVER + jr z, .asm_7527f + ResetEventReuseHL EVENT_IN_SAFARI_ZONE + call UpdateSprites + ld a, $f0 + ld [wJoyIgnore], a + ld a, $6 + ld [hSpriteIndexOrTextID], a + call DisplayTextID + xor a + ld [wNumSafariBalls], a + ld a, D_DOWN + ld c, $3 + call SafariZoneEntranceAutoWalk + ld a, $4 + ld [wSafariZoneGateCurScript], a + jr .asm_75286 +.asm_7527f + ld a, $5 + ld [hSpriteIndexOrTextID], a + call DisplayTextID +.asm_75286 + ret + +.SafariZoneEntranceScript4 + call SafariZoneEntranceScript_752b4 + ret nz + xor a + ld [wJoyIgnore], a + ld a, $0 + ld [wSafariZoneGateCurScript], a + ret + +.SafariZoneEntranceScript6 + call SafariZoneEntranceScript_752b4 + ret nz + call Delay3 + ld a, [wcf0d] + ld [wSafariZoneGateCurScript], a + ret + +SafariZoneEntranceAutoWalk: + push af + ld b, 0 + ld a, c + ld [wSimulatedJoypadStatesIndex], a + ld hl, wSimulatedJoypadStatesEnd + pop af + call FillMemory + jp StartSimulatingJoypadStates + +SafariZoneEntranceScript_752b4: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret + +SafariZoneGate_TextPointers: + dw .SafariZoneEntranceText1 + dw .SafariZoneEntranceText2 + dw .SafariZoneEntranceText1 + dw .SafariZoneEntranceText4 + dw .SafariZoneEntranceText5 + dw .SafariZoneEntranceText6 + +.SafariZoneEntranceText1 + TX_FAR _SafariZoneEntranceText1 + db "@" + +.SafariZoneEntranceText4 + TX_FAR SafariZoneEntranceText_9e6e4 + TX_ASM + ld a, MONEY_BOX + ld [wTextBoxID], a + call DisplayTextBoxID + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + jp nz, .PleaseComeAgain + xor a + ld [hMoney], a + ld a, $05 + ld [hMoney + 1], a + ld a, $00 + ld [hMoney + 2], a + call HasEnoughMoney + jr nc, .success + ld hl, .NotEnoughMoneyText + call PrintText + jr .CantPayWalkDown + +.success + xor a + ld [wPriceTemp], a + ld a, $05 + ld [wPriceTemp + 1], a + ld a, $00 + ld [wPriceTemp + 2], a + ld hl, wPriceTemp + 2 + ld de, wPlayerMoney + 2 + ld c, 3 + predef SubBCDPredef + ld a, MONEY_BOX + ld [wTextBoxID], a + call DisplayTextBoxID + ld hl, .MakePaymentText + call PrintText + ld a, 30 + ld [wNumSafariBalls], a + ld a, 502 / $100 + ld [wSafariSteps], a + ld a, 502 % $100 + ld [wSafariSteps + 1], a + ld a, D_UP + ld c, 3 + call SafariZoneEntranceAutoWalk + SetEvent EVENT_IN_SAFARI_ZONE + ResetEventReuseHL EVENT_SAFARI_GAME_OVER + ld a, 3 + ld [wSafariZoneGateCurScript], a + jr .done + +.PleaseComeAgain + ld hl, .PleaseComeAgainText + call PrintText +.CantPayWalkDown + ld a, D_DOWN + ld c, 1 + call SafariZoneEntranceAutoWalk + ld a, 4 + ld [wSafariZoneGateCurScript], a +.done + jp TextScriptEnd + +.MakePaymentText + TX_FAR SafariZoneEntranceText_9e747 + TX_SFX_ITEM_1 + TX_FAR _SafariZoneEntranceText_75360 + db "@" + +.PleaseComeAgainText + TX_FAR _SafariZoneEntranceText_75365 + db "@" + +.NotEnoughMoneyText + TX_FAR _SafariZoneEntranceText_7536a + db "@" + +.SafariZoneEntranceText5 + TX_FAR SafariZoneEntranceText_9e814 + TX_ASM + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + jr nz, .asm_7539c + ld hl, .SafariZoneEntranceText_753bb + call PrintText + xor a + ld [wSpriteStateData1 + 9], a + ld a, D_DOWN + ld c, $3 + call SafariZoneEntranceAutoWalk + ResetEvents EVENT_SAFARI_GAME_OVER, EVENT_IN_SAFARI_ZONE + ld a, $0 + ld [wcf0d], a + jr .asm_753b3 +.asm_7539c + ld hl, .SafariZoneEntranceText_753c0 + call PrintText + ld a, SPRITE_FACING_UP + ld [wSpriteStateData1 + 9], a + ld a, D_UP + ld c, $1 + call SafariZoneEntranceAutoWalk + ld a, $5 + ld [wcf0d], a +.asm_753b3 + ld a, $6 + ld [wSafariZoneGateCurScript], a + jp TextScriptEnd + +.SafariZoneEntranceText_753bb + TX_FAR _SafariZoneEntranceText_753bb + db "@" + +.SafariZoneEntranceText_753c0 + TX_FAR _SafariZoneEntranceText_753c0 + db "@" + +.SafariZoneEntranceText6 + TX_FAR _SafariZoneEntranceText_753c5 + db "@" + +.SafariZoneEntranceText2 + TX_ASM + ld hl, .FirstTimeQuestionText + call PrintText + call YesNoChoice + ld a, [wCurrentMenuItem] + and a + ld hl, .RegularText + jr nz, .Explanation + ld hl, .ExplanationText +.Explanation + call PrintText + jp TextScriptEnd + +.FirstTimeQuestionText + TX_FAR _SafariZoneEntranceText_753e6 + db "@" + +.ExplanationText + TX_FAR _SafariZoneEntranceText_753eb + db "@" + +.RegularText + TX_FAR _SafariZoneEntranceText_753f0 + db "@" |