Path: blob/master/Sonic 2/Scripts/Global/DeathEvent.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Death Event Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.leftTextPos12private alias object.value2 : object.rightTextPos13private alias object.value3 : object.timer14private alias object.value4 : object.timeOver1516// States17private alias 0 : DEATHEVENT_GAMEOVER18private alias 1 : DEATHEVENT_TIMEOVER19private alias 2 : DEATHEVENT_DEATH20private alias 3 : DEATHEVENT_DEATH_TA21private alias 4 : DEATHEVENT_WAITFORCALLBACK22private alias 5 : DEATHEVENT_RETRY23private alias 6 : DEATHEVENT_SETSCREENFADE2425// Player aliases26private alias object.value0 : player.rings2728// Game Modes29private alias 1 : MODE_SAVEGAME303132// ========================33// Events34// ========================3536event ObjectUpdate37switch object.state38case DEATHEVENT_GAMEOVER39#platform: USE_ORIGINS40if game.playMode == BOOT_PLAYMODE_CLASSIC41CheckEqual(object.timeOver, false)42temp0 = checkResult43CheckEqual(stage.minutes, 9)44temp0 &= checkResult45CheckEqual(stage.seconds, 59)46temp0 &= checkResult47CheckEqual(stage.milliSeconds, 99)48temp0 &= checkResult49temp0 |= game.timeOver5051if temp0 != false52if player.continues == 053object.timeOver = true54else55recMilliSeconds = 056recSeconds = 057recMinutes = 058game.timeOver = false59end if60end if61end if62// Fall-through63#endplatform64case DEATHEVENT_TIMEOVER65#platform: USE_ORIGINS66object.timeOver |= object.state6768if game.playMode == BOOT_PLAYMODE_BOSSRUSH69// In Boss Rush we don't need to be the ones to tell the Player they've Game Over'd, there's already all the fancy stuff over on the Hedgehog Engine 2 wrapper side of things70object.type = TypeName[Blank Object]71end if72#endplatform7374temp0 = screen.xcenter75#platform: USE_STANDALONE76temp0 -= 7277#endplatform78#platform: USE_ORIGINS79temp0 -= 4080#endplatform81if object.leftTextPos < temp082object.leftTextPos += 1683if object.leftTextPos > temp084object.leftTextPos = temp085end if86end if8788temp0 += 8089if object.rightTextPos > temp090object.rightTextPos -= 1691if object.rightTextPos < temp092object.rightTextPos = temp093end if94end if9596if object.timer < 28897object.timer += 498else99#platform: USE_ORIGINS100if object.timeOver == true101if starPostID > 0102recMilliSeconds = 99103recSeconds = 59104recMinutes = 9105game.timeOver = true106else107recMilliSeconds = 0108recSeconds = 0109recMinutes = 0110end if111end if112#endplatform113114if object.state == 0115recStageList = stage.activeList116recStage = stage.listPos117stage.activeList = PRESENTATION_STAGE118if options.vsMode == false119if player.continues == 0120stage.listPos = 0121#platform: USE_STANDALONE122engine.state = 8123#endplatform124CallNativeFunction2(ShowPromoPopup, 0, "GameOverPromo")125else126stage.listPos = 4127end if128else129stage.listPos = 3130if vs.playerID == 0131if object.entityPos == 0132player.score = 0133player.lives = 3134vs.time1P = 60000135vs.rings1P = 0136vs.totalRings1P = 0137vs.items1P = 0138else139player.score2 = 0140player.lives2 = 3141vs.time2P = 60000142vs.rings2P = 0143vs.totalRings2P = 0144vs.items2P = 0145end if146else147if object.entityPos == 1148player.score2 = 0149player.lives2 = 3150vs.time1P = 60000151vs.rings1P = 0152vs.totalRings1P = 0153vs.items1P = 0154else155player.score = 0156player.lives = 3157vs.time2P = 60000158vs.rings2P = 0159vs.totalRings2P = 0160vs.items2P = 0161end if162end if163end if164165starPostID = 0166if options.gameMode == MODE_SAVEGAME167arrayPos1 = options.saveSlot168arrayPos1 <<= 3169arrayPos1++170if saveRAM[arrayPos1] < 3171saveRAM[arrayPos1] = 3172end if173arrayPos1++174saveRAM[arrayPos1] = 0175arrayPos1++176saveRAM[arrayPos1] = 50000177player.score = 0178WriteSaveRAM()179end if180else181if options.vsMode == true182if vs.playerID == 0183vs.rings1P = player[0].rings184vs.rings2P = player[1].rings185else186vs.rings1P = player[1].rings187vs.rings2P = player[0].rings188end if189190starPostID = 0191stage.activeList = PRESENTATION_STAGE192stage.listPos = 3193end if194195if options.gameMode == MODE_SAVEGAME196arrayPos1 = options.saveSlot197arrayPos1 <<= 3198arrayPos1++199saveRAM[arrayPos1] = player.lives200WriteSaveRAM()201end if202end if203204#platform: USE_STANDALONE205if object.state == DEATHEVENT_TIMEOVER206recMilliSeconds = 0207recSeconds = 0208recMinutes = 0209end if210#endplatform211212#platform: USE_ORIGINS213if object.state == DEATHEVENT_GAMEOVER214CallNativeFunction2(NotifyCallback, NOTIFY_TIME_OVER, game.timeOver)215end if216217if object.state == DEATHEVENT_TIMEOVER218player.deadResetRings = true219end if220#endplatform221222LoadStage()223end if224225if object.timer > 0226music.volume -= 2227SetScreenFade(0, 0, 0, object.timer)228else229if keyPress[0].buttonA == true230object.timer = 0231end if232233if keyPress[0].buttonB == true234object.timer = 0235end if236237if keyPress[0].buttonC == true238object.timer = 0239end if240241#platform: MOBILE242CheckTouchRect(0, 0, screen.xsize, screen.ysize)243if checkResult > -1244object.timer = 0245end if246#endplatform247end if248break249250case DEATHEVENT_DEATH251#platform: USE_ORIGINS252CheckNotEqual(game.playMode, BOOT_PLAYMODE_BOSSRUSH)253temp0 = checkResult254CheckNotEqual(game.oneStageFlag, false)255checkResult &= temp0256257if checkResult != false258game.callbackResult = -1259CallNativeFunction4(NotifyCallback, NOTIFY_STAGE_RETRY, 0, stage.listPos, 0)260object.state = DEATHEVENT_WAITFORCALLBACK261if options.gameMode == MODE_SAVEGAME262arrayPos1 = options.saveSlot263arrayPos1 <<= 3264arrayPos1++265saveRAM[arrayPos1] = player.lives266WriteSaveRAM()267end if268else269#endplatform270if object.timer < 288271music.volume -= 2272object.timer += 4273else274if options.gameMode == MODE_SAVEGAME275arrayPos1 = options.saveSlot276arrayPos1 <<= 3277arrayPos1++278saveRAM[arrayPos1] = player.lives279WriteSaveRAM()280end if281282#platform: USE_STANDALONE283LoadStage()284#endplatform285286#platform: USE_ORIGINS287if game.playMode != BOOT_PLAYMODE_MISSION288LoadStage()289else290player.score = 0291end if292#endplatform293end if294295SetScreenFade(0, 0, 0, object.timer)296#platform: USE_ORIGINS297end if298299player.deadResetRings = true300#endplatform301break302303case DEATHEVENT_DEATH_TA304if object.timer < 288305music.volume -= 2306object.timer += 4307else308timeAttack.result = 0309vs.bossAttack = false310player.score = 0311starPostID = 0312recMilliSeconds = 0313recSeconds = 0314recMinutes = 0315stage.milliSeconds = 0316stage.seconds = 0317stage.minutes = 0318engine.state = 8319320#platform: USE_ORIGINS321CallNativeFunction4(NotifyCallback, NOTIFY_STATS_ENEMY, StageStatsUsabilityParam1, StageStatsUsabilityParam2, StageStatsUsabilityParam3)322323StageStatsUsabilityParam1 = 0324StageStatsUsabilityParam2 = 0325StageStatsUsabilityParam3 = 0326StageStatsUsabilityParam4 = 0327StageStatsUsabilityParam5 = 0328329StatsUsabilityParam1 = 0330StatsUsabilityParam2 = 0331StatsUsabilityParam3 = 0332StatsUsabilityParam4 = 0333StatsUsabilityParam5 = 0334#endplatform335end if336SetScreenFade(0, 0, 0, object.timer)337break338339#platform: USE_ORIGINS340case DEATHEVENT_WAITFORCALLBACK341if game.callbackResult >= 0342object.timer = 0343object.state = DEATHEVENT_RETRY344end if345break346347case DEATHEVENT_RETRY348if object.timer < 288349music.volume -= 2350object.timer += 4351else352if game.callbackResult == 0353engine.state = 8354else355LoadStage()356end if357end if358359SetScreenFade(0, 0, 0, object.timer)360break361362case DEATHEVENT_SETSCREENFADE363SetScreenFade(0, 0, 0, 255)364break365#endplatform366end switch367end event368369370event ObjectDraw371switch object.state372case DEATHEVENT_GAMEOVER373#platform: USE_ORIGINS374if game.playMode == BOOT_PLAYMODE_MIRRORING375object.direction = FLIP_X376DrawSpriteScreenFX(2, FX_FLIP, object.leftTextPos, 96)377DrawSpriteScreenFX(0, FX_FLIP, object.rightTextPos, 96)378else379DrawSpriteScreenXY(0, object.leftTextPos, 96)380DrawSpriteScreenXY(2, object.rightTextPos, 96)381end if382#endplatform383#platform: USE_STANDALONE384DrawSpriteScreenXY(0, object.leftTextPos, 96)385DrawSpriteScreenXY(2, object.rightTextPos, 96)386#endplatform387break388389case DEATHEVENT_TIMEOVER390#platform: USE_ORIGINS391if game.playMode == BOOT_PLAYMODE_MIRRORING392object.direction = FLIP_X393DrawSpriteScreenFX(2, FX_FLIP, object.leftTextPos, 96)394DrawSpriteScreenFX(1, FX_FLIP, object.rightTextPos, 96)395else396DrawSpriteScreenXY(1, object.leftTextPos, 96)397DrawSpriteScreenXY(2, object.rightTextPos, 96)398end if399#endplatform400#platform: USE_STANDALONE401DrawSpriteScreenXY(1, object.leftTextPos, 96)402DrawSpriteScreenXY(2, object.rightTextPos, 96)403#endplatform404break405end switch406end event407408409event ObjectStartup410LoadSpriteSheet("Global/Display.gif")411#platform: USE_STANDALONE412SpriteFrame(0, 0, 64, 16, 1, 239) // 0 - "GAME"413SpriteFrame(0, 0, 56, 16, 66, 239) // 1 - "TIME"414SpriteFrame(0, 0, 64, 16, 123, 239) // 2 - "OVER"415#endplatform416#platform: USE_ORIGINS417// I really don't know why they did this.418SpriteFrame(-32, 0, 64, 16, 1, 239) // 0 - "GAME"419SpriteFrame(-28, 0, 56, 16, 66, 239) // 1 - "TIME"420SpriteFrame(-32, 0, 64, 16, 123, 239) // 2 - "OVER"421#endplatform422end event423424425// ========================426// Editor Events427// ========================428429event RSDKDraw430DrawSprite(0)431end event432433434event RSDKLoad435LoadSpriteSheet("Global/Display.gif")436SpriteFrame(-16, -16, 32, 32, 1, 143)437438SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")439end event440441442