Path: blob/main/Scripts/R3/Piston.txt
1319 views
//-------------------Sonic CD Piston Script-------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer6#alias Object.Value1 : Object.YOffSet78// Fireball Aliases9#alias Object.Value0 : Object.Fade10#alias Object.Value1 : Object.XVelocity1112// HUD Alias13#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1415// States16#alias 0 : PISTON_DETECT_PLAYER17#alias 1 : PISTON_PREPARE_FIRE18#alias 2 : PISTON_EMERGE19#alias 3 : PISTON_FIRE20#alias 4 : PISTON_HIDE2122// Gravity23#alias 0 : GRAVITY_GROUND24#alias 1 : GRAVITY_AIR2526// Ink27#alias 2 : INK_ALPHA2829// Time Periods30#alias 0 : TIME_PRESENT31#alias 1 : TIME_PAST32#alias 2 : TIME_GOOD_FUTURE33#alias 3 : TIME_BAD_FUTURE343536sub ObjectMain37switch Object.State38case PISTON_DETECT_PLAYER39PlayerObjectCollision(C_TOUCH, -112, -256, 112, 256)40if CheckResult == true41if Object.Timer < 8042Object.Timer++43Object.Frame = 144else45Object.Timer = 646Object.State = PISTON_PREPARE_FIRE47end if48end if49break5051case PISTON_PREPARE_FIRE52if Object.Timer < 3353Object.Timer++54Object.Frame = Object.Timer55Object.Frame /= 356else57Object.Frame = 158Object.Timer = 059Object.State = PISTON_EMERGE60end if61break6263case PISTON_EMERGE64if Object.YOffSet < 0x20000065Object.YOffSet += 0x8000066else67Object.State = PISTON_FIRE68end if69break7071case PISTON_FIRE72if Object.Timer < 873if Object.Timer == 074switch HUD.CurrentTimePeriod75case TIME_PRESENT76case TIME_BAD_FUTURE77CreateTempObject(TypeName[Fireball], 0, Object.XPos, Object.YPos)78Object[TempObjectPos].XPos -= 0x18000079Object[TempObjectPos].YPos -= 0x14000080Object[TempObjectPos].Fade = 6481Object[TempObjectPos].XVelocity = -0x1000082Object[TempObjectPos].InkEffect = INK_ALPHA83Object[TempObjectPos].Alpha = 25584Object[TempObjectPos].Frame = 08586CreateTempObject(TypeName[Fireball], 0, Object.XPos, Object.YPos)87Object[TempObjectPos].XPos += 0x18000088Object[TempObjectPos].YPos -= 0x14000089Object[TempObjectPos].Fade = 6490Object[TempObjectPos].XVelocity = 0x1000091Object[TempObjectPos].InkEffect = INK_ALPHA92Object[TempObjectPos].Alpha = 25593Object[TempObjectPos].Frame = 19495end switch96end if97Object.Timer++98else99Object.Timer = 0100Object.State = PISTON_HIDE101end if102break103104case PISTON_HIDE105if Object.YOffSet > 0106Object.YOffSet -= 0x40000107else108Object.State = PISTON_DETECT_PLAYER109end if110break111end switch112end sub113114115116sub ObjectPlayerInteraction117TempValue0 = -0xC0000118TempValue0 -= Object.YOffSet119TempValue0 >>= 16120PlayerObjectCollision(C_BOX, -16, -12, 16, 16)121PlayerObjectCollision(C_PLATFORM, -16, TempValue0, 16, 16)122// if the player is on top when the piston emerges, launch it to the sky123if CheckResult == true124125if Object.YOffSet == 0x200000126127if Object.State == PISTON_EMERGE128Player.YVelocity = -0x70000129130Player.Timer = 0131132Player.Gravity = GRAVITY_AIR133Player.Animation = ANI_BOUNCING134135#platform: Use_Origins136Player.State = Player_State_Air_NoDropDash137#endplatform138139#platform: Use_Standalone140Player.State = Player_State_Air141#endplatform142end if143144end if145146end if147end sub148149150sub ObjectDraw151TempValue0 = Object.YPos152TempValue0 -= Object.YOffSet153DrawSpriteXY(Object.Frame, Object.XPos, TempValue0)154DrawSprite(0)155end sub156157158sub ObjectStartup159LoadSpriteSheet("R3/Objects.gif")160161SpriteFrame(-16, -4, 32, 8, 214, 34) // #0 - Piston Head162SpriteFrame(-16, -12, 32, 40, 1, 34) // #1 - Piston163164switch HUD.CurrentTimePeriod165case TIME_PRESENT166case TIME_BAD_FUTURE167SpriteFrame(-16, -12, 32, 40, 34, 34) // #2 - Piston Emerge Frame 0168SpriteFrame(-16, -12, 32, 40, 1, 34) // #3 - Piston Emerge Frame 1169SpriteFrame(-16, -12, 32, 40, 34, 34) // #4 - Piston Emerge Frame 2170SpriteFrame(-16, -12, 32, 40, 1, 34) // #5 - Piston Emerge Frame 3171SpriteFrame(-16, -12, 32, 40, 34, 34) // #6 - Piston Emerge Frame 4172SpriteFrame(-16, -12, 32, 40, 1, 34) // #7 - Piston Emerge Frame 5173SpriteFrame(-16, -12, 32, 40, 34, 34) // #8 - Piston Emerge Frame 6174SpriteFrame(-16, -12, 32, 40, 1, 34) // #9 - Piston Emerge Frame 7175SpriteFrame(-16, -12, 32, 40, 34, 34) // #10 - Piston Emerge Frame 8176SpriteFrame(-16, -12, 32, 40, 1, 34) // #11 - Piston Emerge Frame 9177break178179case TIME_PAST180case TIME_GOOD_FUTURE181SpriteFrame(-16, -12, 32, 40, 1, 34) // #2 - Piston Emerge Frame 0182SpriteFrame(-16, -12, 32, 40, 1, 34) // #3 - Piston Emerge Frame 1183SpriteFrame(-16, -12, 32, 40, 1, 34) // #4 - Piston Emerge Frame 2184SpriteFrame(-16, -12, 32, 40, 1, 34) // #5 - Piston Emerge Frame 3185SpriteFrame(-16, -12, 32, 40, 1, 34) // #6 - Piston Emerge Frame 4186SpriteFrame(-16, -12, 32, 40, 1, 34) // #7 - Piston Emerge Frame 5187SpriteFrame(-16, -12, 32, 40, 1, 34) // #8 - Piston Emerge Frame 6188SpriteFrame(-16, -12, 32, 40, 1, 34) // #9 - Piston Emerge Frame 7189SpriteFrame(-16, -12, 32, 40, 1, 34) // #10 - Piston Emerge Frame 8190SpriteFrame(-16, -12, 32, 40, 1, 34) // #11 - Piston Emerge Frame 9191break192end switch193194// Used to be below LoadSpriteSheet, moved here for consistency195ArrayPos0 = 32196while ArrayPos0 < 1056197if Object[ArrayPos0].Type == TypeName[Piston]198Object[ArrayPos0].Frame = 1199end if200ArrayPos0++201loop202end sub203204205// ========================206// Editor Subs207// ========================208209sub RSDKDraw210DrawSprite(1)211DrawSprite(0)212213if Editor.ShowGizmos == true214TempValue0 = Object.YPos215TempValue0 -= 0x200000216DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue0, 255, 0, 0, 0)217end if218end sub219220221sub RSDKLoad222LoadSpriteSheet("R3/Objects.gif")223224SpriteFrame(-16, -4, 32, 8, 214, 34) // #0 - Piston Head225SpriteFrame(-16, -12, 32, 40, 1, 34) // #1 - Piston226227SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")228end sub229230231