Path: blob/main/Scripts/Global/TimeWarp.txt
1319 views
//-----------------Sonic CD Time Warp Script------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value7 : Object.CurrentPeriod6#alias Object.Value1 : Object.Timer78// Player Aliases9#alias Player.Value0 : Player.Rings10#alias Player.Value4 : Player.InvincibleTimer11#alias Player.Value6 : Player.MinRollSpeed1213// HUD Alias14#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1516// States17#alias 0 : TIMEWARP_SETUP18#alias 1 : TIMEWARP_FADE_IN19#alias 2 : TIMEWARP_BACKGROUND20#alias 3 : TIMEWARP_BLANK21#alias 4 : TIMEWARP_LEAVING22#alias 5 : TIMEWARP_TRAVEL2324// Player25#alias 0 : PLAYER_SONIC_A2627// Control Mode28#alias -1 : CONTROLMODE_NONE2930// Global SFX31#alias 14 : SFX_G_TIMEWARP32#alias 24 : SFX_G_FLYING33#alias 25 : SFX_G_TIRED3435// Warp Destination36#alias 1 : WARPDEST_PAST3738// Next Period39#alias 0 : TIME_PRESENT40#alias 1 : TIME_PAST41#alias 2 : TIME_GOOD_FUTURE42#alias 3 : TIME_BAD_FUTURE434445sub ObjectDraw46switch Object.State47case TIMEWARP_SETUP48if Object.Timer < 32049if Object.Timer == 050Warp.XPos = Player.XPos51Warp.YPos = Player.YPos5253Warp.XVelocity = Player.XVelocity54Warp.YVelocity = Player.YVelocity55Warp.Speed = Player.Speed56Warp.MinRollSpeed = Player.MinRollSpeed5758Warp.CollisionMode = Player.CollisionMode59Warp.Gravity = Player.Gravity6061if Player.State == Player_State_Static62Warp.State = Player_State_Air63else64if Player.State == Player_State_SpinningTop65Warp.State = Player_State_Air66else67if Player.State == Player_State_WaterCurrent68Warp.State = Player_State_Air69else70Warp.State = Player.State71endif72endif73endif7475Warp.Animation = Player.Animation76Warp.Angle = Player.Angle77Warp.PlayerFrame = Player.Frame7879Player.InvincibleTimer = 100080Player.ControlMode = CONTROLMODE_NONE81Player.Visible = false82end if83Music.Volume -= 884SetScreenFade(208, 255, 224, Object.Timer)85Object.Timer += 1086else87// 88 Miles per Hour unlock criteria88if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins89if Stage.DebugMode == false90SetAchievement(0, 100)91end if92end if9394#platform: Use_Haptics95HapticEffect(91, 0, 0, 0)96#endplatform9798StopSFX(SFX_G_FLYING)99StopSFX(SFX_G_TIRED)100Stage.State = STAGE_RUNNING101Stage.TimeEnabled = false102103// Saves everything104CallFunction(StageSetup_SaveStageState)105Rec_Milliseconds = Stage.MilliSeconds106Rec_Seconds = Stage.Seconds107Rec_Minutes = Stage.Minutes108109Warp.Rings = Player.Rings110TempValue2 = HUD.CurrentTimePeriod111112// Sets every object as a blank object in the current period113//(likely to avoid the player's death during the cutscene)114TempValue0 = 0115while TempValue0 < 1184116ResetObjectEntity(TempValue0, TypeName[Blank Object], 0, 0, 0)117TempValue0++118loop119// Blanks the level layers120Screen.XOffset = 0121Screen.YOffset = 0122Stage[0].ActiveLayer = 9123Stage[1].ActiveLayer = 9124Stage[2].ActiveLayer = 9125Stage[3].ActiveLayer = 9126ArrayPos0 = 0127128// Sets the fade in129Object[ArrayPos0].Type = TypeName[Time Warp]130Object[ArrayPos0].State = TIMEWARP_FADE_IN131Object[ArrayPos0].Timer = 320132Object[ArrayPos0].CurrentPeriod = TempValue2133ArrayPos0++134135// Creates the background136TempValue0 = -32137while TempValue0 < 256138TempValue1 = 0139while TempValue1 < Screen.XSize140Object[ArrayPos0].Type = TypeName[Time Warp]141Object[ArrayPos0].State = TIMEWARP_BACKGROUND142Rand(Object[ArrayPos0].Frame, 27)143Object[ArrayPos0].Frame >>= 2144Object[ArrayPos0].Frame <<= 2145Object[ArrayPos0].iXPos = TempValue1146Object[ArrayPos0].iYPos = TempValue0147Object[ArrayPos0].iXPos += 16148Object[ArrayPos0].iYPos += 16149Rand(Object[ArrayPos0].Direction, 15)150Object[ArrayPos0].Direction >>= 2151ArrayPos0++152TempValue1 += 32153loop154TempValue0 += 32155loop156// And of course, the star of the show appears157Object[ArrayPos0].Type = TypeName[Warp Sonic]158Object[ArrayPos0].iXPos = Screen.CenterX159Object[ArrayPos0].iYPos = 480160161SetScreenFade(208, 255, 224, 255)162163PlaySfx(SFX_G_TIMEWARP, false)164end if165break166167case TIMEWARP_FADE_IN168if Object.Timer > 0169SetScreenFade(208, 255, 224, Object.Timer)170Object.Timer -= 10171else172173#platform: Use_Origins174game.callbackParam0 = Object.PropertyValue // Signal the new period over to the engine175EngineCallback(NOTIFY_FUTURE_PAST)176#endplatform177178Object.State = TIMEWARP_BLANK179end if180break181182case TIMEWARP_BACKGROUND183TempValue0 = Object.Frame184TempValue0 >>= 1185DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)186Object.Frame++187if Object.Frame == 28188Object.Frame = 0189end if190191Object.YPos += 0x40000192if Object.YPos >= 0x1000000193Object.YPos -= 0x1200000194end if195break196197case TIMEWARP_BLANK198break199200case TIMEWARP_LEAVING201Object.Timer++202if Object.Timer == 40203Object.Timer = 0204Object.State = TIMEWARP_TRAVEL205end if206break207208case TIMEWARP_TRAVEL209if Object.Timer < 1800210SetScreenFade(208, 255, 224, Object.Timer)211Object.Timer += 10212else213SetScreenFade(208, 255, 224, 255)214switch Object.CurrentPeriod215// from this point onward any "Object.CurrentPeriod" was added by Origins for HE2 tracking216case TIME_PRESENT217if Warp.Destination == WARPDEST_PAST218Stage.ListPos++219Object.CurrentPeriod = TIME_PAST220else221if Transporter_Destroyed == true222Stage.ListPos += 2223Object.CurrentPeriod = TIME_GOOD_FUTURE224else225Stage.ListPos += 3226Object.CurrentPeriod = TIME_BAD_FUTURE227end if228end if229break230231case TIME_PAST232Stage.ListPos--233Object.CurrentPeriod = TIME_PRESENT234break235236case TIME_GOOD_FUTURE237Stage.ListPos -= 2238Object.CurrentPeriod = TIME_PRESENT239break240241case TIME_BAD_FUTURE242243#platform: Use_Standalone244Stage.ListPos -= 3245#endplatform246247#platform: Use_Origins248if game.playMode != BOOT_PLAYMODE_MISSION249Stage.ListPos -= 3250else251Stage.ListPos -= 2252endif253#endplatform254255Object.CurrentPeriod = TIME_PRESENT256break257258end switch259Fade_Colour = 208260Fade_Colour <<= 16261TempValue0 = 255262TempValue0 <<= 8263Fade_Colour += TempValue0264Fade_Colour += 224265266#platform: Use_Origins267game.callbackParam0 = 1 // Lamp Post Related?268EngineCallback(NOTIFY_STATS_PARAM_1)269game.callbackParam0 = Object.CurrentPeriod // Get current period270EngineCallback(NOTIFY_GOTO_FUTURE_PAST)271#endplatform272273LoadStage()274#platform: Use_Origins275// PlayerObject will use this as part of a check to keep mini state after the stage load276Warp.Timer = 204277Warp.Timer += 1278#endplatform279end if280break281end switch282end sub283284285sub ObjectStartup286LoadSpriteSheet("Global/Items3.gif")287288SpriteFrame(-16, -16, 32, 32, 83, 0) // #0 - Time Travel BG Chunk 0289SpriteFrame(-16, -16, 32, 32, 83, 32) // #1 - Time Travel BG Chunk 1290SpriteFrame(-16, -16, 32, 32, 83, 64) // #2 - Time Travel BG Chunk 2291SpriteFrame(-16, -16, 32, 32, 83, 96) // #3 - Time Travel BG Chunk 3292SpriteFrame(-16, -16, 32, 32, 83, 128) // #4 - Time Travel BG Chunk 4293SpriteFrame(-16, -16, 32, 32, 83, 160) // #5 - Time Travel BG Chunk 5294SpriteFrame(-16, -16, 32, 32, 83, 192) // #6 - Time Travel BG Chunk 6295SpriteFrame(-16, -16, 32, 32, 83, 224) // #7 - Time Travel BG Chunk 7296SpriteFrame(-16, -16, 32, 32, 115, 0) // #8 - Time Travel BG Chunk 8297SpriteFrame(-16, -16, 32, 32, 115, 32) // #9 - Time Travel BG Chunk 9298SpriteFrame(-16, -16, 32, 32, 115, 64) // #10 - Time Travel BG Chunk 10299SpriteFrame(-16, -16, 32, 32, 115, 96) // #11 - Time Travel BG Chunk 11300SpriteFrame(-16, -16, 32, 32, 115, 128) // #12 - Time Travel BG Chunk 12301SpriteFrame(-16, -16, 32, 32, 115, 160) // #13 - Time Travel BG Chunk 13302end sub303304305// ========================306// Editor Subs307// ========================308309sub RSDKDraw310DrawSprite(0)311end sub312313314sub RSDKLoad315LoadSpriteSheet("Global/Items3.gif")316SpriteFrame(-16, -16, 32, 32, 83, 0) // #0 - Time Travel BG Chunk 0317318SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")319end sub320321322