Path: blob/main/Scripts/Global/LampPost.txt
1319 views
//-----------------Sonic CD Lamp Post Script------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer67// Player Aliases8#alias Player.Value0 : Player.Rings910//HUD alias11#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1213// States14#alias 0 : LAMPPOST_IDLE15#alias 1 : LAMPPOST_ROTATE16#alias 2 : LAMPPOST_USED1718// Collision Sides19#alias 1 : CSIDE_LWALL20#alias 2 : CSIDE_RWALL2122#alias 9 : SFX_G_LAMPPOST2324// Time Periods25#alias 0 : TIME_PRESENT262728sub ObjectPlayerInteraction2930if Object.State == LAMPPOST_IDLE3132PlayerObjectCollision(C_TOUCH, -8, -32, 8, 32)33if CheckResult == true34LampPost.Check = Object.EntityNo3536if Player.XPos < Object.XPos37LampPost.Side = -0x1800003839// Code to avoid getting stuck in a wall it seems?40ObjectTileCollision(CSIDE_RWALL, -24, 0, 0)41if CheckResult == true42LampPost.Side = 043end if4445else46LampPost.Side = 0x1800004748ObjectTileCollision(CSIDE_LWALL, 24, 0, 0) // Code to avoid getting stuck in a wall i guess?49if CheckResult == true50LampPost.Side = 051end if5253end if5455// Record a bunch of values56#platform: Use_Origins57recStage = Stage.ListPos58recScore = Player.Score59recRing = Player.Rings60#endplatform6162Rec_Milliseconds = Stage.MilliSeconds63Rec_Seconds = Stage.Seconds64Rec_Minutes = Stage.Minutes6566#platform: Use_Origins67StatsUsabilityParam1 = StageStatsUsabilityParam168StatsUsabilityParam2 = StageStatsUsabilityParam269StatsUsabilityParam3 = StageStatsUsabilityParam370StatsUsabilityParam4 = StageStatsUsabilityParam471StatsUsabilityParam5 = StageStatsUsabilityParam572#endplatform7374Object.State = LAMPPOST_ROTATE75Object.Timer = 38476PlaySfx(SFX_G_LAMPPOST, false)7778#platform: Use_Haptics79HapticEffect(20, 0, 0, 0)80#endplatform8182#platform: Use_Origins83// Let the Engine know if we've hit a checkpoint84if Options.AttractMode == false85EngineCallback(NOTIFY_TOUCH_CHECKPOINT)86end if87#endplatform8889end if9091end if92end sub939495sub ObjectDraw9697switch Object.State98case LAMPPOST_IDLE99DrawSprite(0)100break101102case LAMPPOST_ROTATE103DrawSprite(1)104105Cos(TempValue0, Object.Timer)106TempValue0 <<= 10107Sin(TempValue1, Object.Timer)108TempValue1 <<= 10109110TempValue0 += Object.XPos111TempValue1 += Object.YPos112TempValue1 -= 0x180000113DrawSpriteXY(2, TempValue0, TempValue1)114115Object.Timer += 16116if Object.Timer > 896117Object.Timer = 0118Object.State = LAMPPOST_USED119end if120break121122case LAMPPOST_USED123DrawSprite(1)124Object.Timer++125if Object.Timer == 8126Object.Timer = 0127end if128129TempValue0 = Object.YPos130TempValue0 -= 0x200000131if Object.Timer > 3132DrawSpriteXY(4, Object.XPos, TempValue0)133else134DrawSpriteXY(3, Object.XPos, TempValue0)135end if136break137end switch138end sub139140141sub ObjectStartup142143LoadSpriteSheet("Global/Items.gif")144145SpriteFrame(-8, -40, 16, 64, 1, 137) // #0 - Lamp Post Idle146SpriteFrame(-8, -24, 16, 48, 1, 153) // #1 - Lamp Post Body147SpriteFrame(-8, -8, 16, 16, 1, 137) // #2 - Lamp Post Blue Head148SpriteFrame(-8, -8, 16, 16, 1, 236) // #3 - Lamp Post Yellow Head149SpriteFrame(-8, -8, 16, 16, 18, 236) // #4 - Lamp Post Red Head150151#platform: Use_Origins152if game.playMode == BOOT_PLAYMODE_BOSSRUSH153if LampPost.Check > 31154ArrayPos0 = LampPost.Check155Player.XPos = Object[ArrayPos0].XPos156Player.XPos += LampPost.Side157Player.YPos = Object[ArrayPos0].YPos158159Object[ArrayPos0].State = LAMPPOST_USED160161Player.Score = recScore162163if Player.deadResetRings == true164Player.Rings = 0165Player.deadResetRings = false166else167Player.Rings = recRing168end if169170Ring.ExtraLife = 100171Ring.ExtraLife += Player.Rings172173TempValue0 = Player.Rings174TempValue0 %= 100175176Ring.ExtraLife -= TempValue0177if Ring.ExtraLife > 300178Ring.ExtraLife = 1000179end if180181Stage.MilliSeconds = Rec_Milliseconds182Stage.Seconds = Rec_Seconds183Stage.Minutes = Rec_Minutes184end if185else186if Warp.XPos == 0187if HUD.CurrentTimePeriod == TIME_PRESENT188if LampPost.Check > 31189ArrayPos0 = LampPost.Check190Player.XPos = Object[ArrayPos0].XPos191Player.XPos += LampPost.Side192Player.YPos = Object[ArrayPos0].YPos193194Object[ArrayPos0].State = LAMPPOST_USED195196Player.Score = recScore197if Player.deadResetRings == true198Player.Rings = 0199Player.deadResetRings = false200else201Player.Rings = recRing202end if203204Ring.ExtraLife = 100205Ring.ExtraLife += Player.Rings206207TempValue0 = Player.Rings208TempValue0 %= 100209210Ring.ExtraLife -= TempValue0211if Ring.ExtraLife > 300212Ring.ExtraLife = 1000213end if214215Stage.MilliSeconds = Rec_Milliseconds216Stage.Seconds = Rec_Seconds217Stage.Minutes = Rec_Minutes218else219game.timeOver = false220end if221end if222end if223end if224225if StageStatsUsabilityParam5 == 0226StageStatsUsabilityParam1 = StatsUsabilityParam1227StageStatsUsabilityParam2 = StatsUsabilityParam2228StageStatsUsabilityParam3 = StatsUsabilityParam3229StageStatsUsabilityParam4 = StatsUsabilityParam4230StageStatsUsabilityParam5 = StatsUsabilityParam5231end if232StageStatsUsabilityParam5 = 0233#endplatform234235#platform: Use_Standalone236if Warp.XPos == 0237if HUD.CurrentTimePeriod == TIME_PRESENT238if LampPost.Check > 31239ArrayPos0 = LampPost.Check240Player.XPos = Object[ArrayPos0].XPos241Player.XPos += LampPost.Side242Player.YPos = Object[ArrayPos0].YPos243244Object[ArrayPos0].State = LAMPPOST_USED245246Stage.MilliSeconds = Rec_Milliseconds247Stage.Seconds = Rec_Seconds248Stage.Minutes = Rec_Minutes249end if250end if251end if252253#endplatform254end sub255256257// ========================258// Editor Subs259// ========================260261sub RSDKDraw262DrawSprite(0)263end sub264265266sub RSDKLoad267LoadSpriteSheet("Global/Items.gif")268SpriteFrame(-8, -40, 16, 64, 1, 137) // #0 - Lamp Post Idle269270// unused, BUT there are values in the editor which suggest it's "lampPostID"271SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")272end sub273274275