Path: blob/main/Scripts/Global/DeathEvent.txt
1319 views
//----------------Sonic CD Death Event Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value1 : Object.Text1Pos6#alias Object.Value2 : Object.Text2Pos78#alias Object.Value3 : Object.Timer9#alias Object.Value5 : Object.StagePosP10#alias Object.Value6 : Object.TimeOver1112// HUD alias13#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1415// States16#alias 0 : DEATHEVENT_GAMEOVER17#alias 1 : DEATHEVENT_TIMEOVER18#alias 2 : DEATHEVENT_FADEOUT19#alias 3 : DEATHEVENT_TIMEATTACK20#alias 4 : DEATHEVENT_HOLDOVERRESTART21#alias 5 : DEATHEVENT_FADEOUTRESTART2223// Player Aliases24#alias 0 : PLAYER_SONIC_A25#alias 1 : PLAYER_TAILS_A2627// Game Mode Aliases28#alias 1 : MODE_SAVEGAME2930// Callback & Engine States31#alias 8 : ENGINE_WAIT3233// Time Periods34#alias 0 : TIME_PRESENT35#alias 1 : TIME_PAST36#alias 2 : TIME_GOOD_FUTURE37#alias 3 : TIME_BAD_FUTURE3839// Presentation Stages40#alias 0 : STAGE_P_TITLE41#alias 2 : STAGE_P_TATTACK424344sub ObjectMain45switch Object.State46case DEATHEVENT_GAMEOVER47#platform: Use_Origins48// Origins handles the time over of Classic Mode through here49if game.playMode == BOOT_PLAYMODE_CLASSIC50CheckEqual(Object.TimeOver, false)51TempValue0 = CheckResult52CheckEqual(Stage.Minutes, 9)53TempValue0 &= CheckResult54CheckEqual(Stage.Seconds, 59)55TempValue0 &= CheckResult56CheckEqual(Stage.MilliSeconds, 99)57TempValue0 &= CheckResult5859TempValue0 |= game.timeOver6061if TempValue0 != false62Object.TimeOver = true63end if64end if65#endplatform66// [Fallthrough]67case DEATHEVENT_TIMEOVER6869#platform: Use_Origins70Object.TimeOver |= Object.State7172// In Boss Rush, you can't Game Over (thankfully..?)73if game.playMode == BOOT_PLAYMODE_BOSSRUSH74Object.Type = TypeName[Blank Object]75end if76#endplatform7778TempValue0 = Screen.CenterX79TempValue0 -= 4080if Object.Text1Pos < TempValue081Object.Text1Pos += 1682if Object.Text1Pos > TempValue083Object.Text1Pos = TempValue084end if85end if8687TempValue0 += 8088if Object.Text2Pos > TempValue089Object.Text2Pos -= 1690if Object.Text2Pos < TempValue091Object.Text2Pos = TempValue092end if93end if9495if Object.Timer < 28896Object.Timer += 497else9899#platform: Use_Origins100if Object.TimeOver == true101if LampPost.Check > 0102Rec_Milliseconds = 99103Rec_Seconds = 59104Rec_Minutes = 9105game.timeOver = true106else107Rec_Milliseconds = 0108Rec_Seconds = 0109Rec_Minutes = 0110end if111end if112#endplatform113114if Object.State == DEATHEVENT_GAMEOVER115Stage.ActiveList = PRESENTATION_STAGE116Stage.ListPos = STAGE_P_TITLE117LampPost.Check = 0118119Transporter_Destroyed = false120MetalSonic_Destroyed = false121122if Options.GameMode == MODE_SAVEGAME123ArrayPos1 = Options.SaveSlot124ArrayPos1 <<= 3125ArrayPos1++126if SaveRAM[ArrayPos1] < 3127SaveRAM[ArrayPos1] = 3128end if129130WriteSaveRAM()131end if132end if133134#platform: Use_Origins135if Object.State == DEATHEVENT_GAMEOVER136game.callbackParam0 = game.timeOver // Tell HE2 that the time over state137EngineCallback(NOTIFY_TIME_OVER)138end if139140if Object.State == DEATHEVENT_TIMEOVER141Player.deadResetRings = true142end if143#endplatform144145#platform: Use_Standalone146if Object.State == DEATHEVENT_TIMEOVER147Rec_Milliseconds = 0148Rec_Seconds = 0149Rec_Minutes = 0150end if151#endplatform152LoadStage()153end if154155if Object.Timer > 0156Music.Volume -= 2157SetScreenFade(0, 0, 0, Object.Timer)158else159// Looking at index 1? What's that for?160161if KeyPress[1].ButtonA == true162Object.Timer = 0163end if164165if KeyPress[1].ButtonB == true166Object.Timer = 0167end if168169if KeyPress[1].ButtonC == true170Object.Timer = 0171end if172end if173break174175case DEATHEVENT_FADEOUT176#platform: Use_Origins177CheckNotEqual(game.playMode, BOOT_PLAYMODE_BOSSRUSH)178TempValue0 = CheckResult179// Check if the player is replaying the stage from My Data & Rankings180CheckNotEqual(game.oneStageFlag, false)181CheckResult &= TempValue0182183if CheckResult != false184LampPost.Check = 0185Object.StagePosP = Stage.ListPos186187game.callbackResult = -1 // Reset any callback result188game.callbackParam0 = 0 // 0 - Normal Retry, anything else - Show current and best time189game.callbackParam1 = Object.StagePosP // Get current stage190game.callbackParam2 = 0 // Unknown191EngineCallback(NOTIFY_STAGE_RETRY) // This will change callbackResult's value192193Object.State = DEATHEVENT_HOLDOVERRESTART194else195if Object.Timer < 288196Music.Volume -= 2197Object.Timer += 4198else199Object.StagePosP = Stage.ListPos200201switch HUD.CurrentTimePeriod202case TIME_PRESENT203break204205case TIME_PAST206Object.StagePosP--207break208209case TIME_GOOD_FUTURE210Object.StagePosP -= 2211break212213case TIME_BAD_FUTURE214Object.StagePosP -= 3215break216217end switch218219if game.playMode != BOOT_PLAYMODE_MISSION220LoadStage()221else222Stage.ListPos = Object.StagePosP223end if224end if225226SetScreenFade(0, 0, 0, Object.Timer)227end if228229Player.deadResetRings = true230#endplatform231232#platform: Use_Standalone233if Object.Timer < 288234Music.Volume -= 2235Object.Timer += 4236else237LoadStage()238end if239SetScreenFade(0, 0, 0, Object.Timer)240#endplatform241break242243case DEATHEVENT_TIMEATTACK244if Object.Timer < 288245Music.Volume -= 2246Object.Timer += 4247else248TimeAttack.Result = 0249LampPost.Check = 0250Stage.ActiveList = PRESENTATION_STAGE251Stage.ListPos = STAGE_P_TATTACK252LoadStage()253end if254255SetScreenFade(0, 0, 0, Object.Timer)256257#platform: Use_Origins258game.callbackParam0 = StageStatsUsabilityParam1 // Enemies destroyed by any means259game.callbackParam1 = StageStatsUsabilityParam2 // Enemies destroyed by rolling260game.callbackParam2 = 0261EngineCallback(NOTIFY_STATS_ENEMY)262263game.callbackParam0 = StageStatsUsabilityParam3 // Get Lamp post check264EngineCallback(NOTIFY_STATS_PARAM_1)265266game.callbackParam0 = StageStatsUsabilityParam4 // Get player state?, Lamp Post related267EngineCallback(NOTIFY_STATS_CHARA_ACTION)268269StageStatsUsabilityParam1 = 0270StageStatsUsabilityParam2 = 0271StageStatsUsabilityParam3 = 0272StageStatsUsabilityParam4 = 0273StatsUsabilityParam1 = 0274StatsUsabilityParam2 = 0275StatsUsabilityParam3 = 0276StatsUsabilityParam4 = 0277#endplatform278break279280#platform: Use_Origins281case DEATHEVENT_HOLDOVERRESTART282if game.callbackResult >= 0283Object.Timer = 0284Object.State++285end if286break287288case DEATHEVENT_FADEOUTRESTART289if Object.Timer < 288290Music.Volume -= 2291Object.Timer += 4292else293if game.callbackResult == false294Engine.State = ENGINE_WAIT295else296LoadStage()297end if298end if299300SetScreenFade(0, 0, 0, Object.Timer)301break302303#endplatform304end switch305end sub306307308sub ObjectDraw309switch Object.State310case DEATHEVENT_GAMEOVER311#platform: Use_Origins312// In Mirror Mode, draw the sprites in reverse so that it'll look correct when mirrored313if game.playMode == BOOT_PLAYMODE_MIRRORING314Object.Direction = FACING_LEFT315DrawSpriteScreenFX(2, FX_FLIP, Object.Text1Pos, 96)316DrawSpriteScreenFX(0, FX_FLIP, Object.Text2Pos, 96)317else318DrawSpriteScreenXY(0, Object.Text1Pos, 96)319DrawSpriteScreenXY(2, Object.Text2Pos, 96)320end if321#endplatform322323#platform: Use_Standalone324DrawSpriteScreenXY(0, Object.Text1Pos, 96)325DrawSpriteScreenXY(2, Object.Text2Pos, 96)326#endplatform327break328329case DEATHEVENT_TIMEOVER330#platform: Use_Origins331// Mirror Mode's gonna flip everything, so let's flip ourselves first!332if game.playMode == BOOT_PLAYMODE_MIRRORING333Object.Direction = FACING_LEFT334DrawSpriteScreenFX(2, FX_FLIP, Object.Text1Pos, 96)335DrawSpriteScreenFX(1, FX_FLIP, Object.Text2Pos, 96)336else337DrawSpriteScreenXY(1, Object.Text1Pos, 96)338DrawSpriteScreenXY(2, Object.Text2Pos, 96)339end if340#endplatform341342#platform: Use_Standalone343DrawSpriteScreenXY(1, Object.Text1Pos, 96)344DrawSpriteScreenXY(2, Object.Text2Pos, 96)345#endplatform346break347348end switch349end sub350351352sub ObjectStartup353if Stage.PlayerListPos == PLAYER_SONIC_A354LoadSpriteSheet("Global/Display.gif")355end if356if Stage.PlayerListPos == PLAYER_TAILS_A357LoadSpriteSheet("Global/Display_t.gif")358end if359#platform: Use_Origins360if Stage.PlayerListPos == PLAYER_KNUCKLES361LoadSpriteSheet("Global/Display_k.gif")362end if363if Stage.PlayerListPos == PLAYER_AMY364LoadSpriteSheet("Global/Display_a.gif")365end if366#endplatform367368// 0 - "Game"369SpriteFrame(-32, 0, 64, 16, 0, 189)370371// 1 - "Time"372SpriteFrame(-28, 0, 56, 16, 65, 189)373374// 2 - "Over"375SpriteFrame(-32, 0, 64, 16, 122, 189)376end sub377378379// ========================380// Editor Subs381// ========================382383sub RSDKDraw384DrawSprite(0)385end sub386387388sub RSDKLoad389LoadSpriteSheet("Global/Display.gif")390SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon391392SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")393end sub394395396