Path: blob/main/Scripts/R6/HSpinPlatform.txt
1319 views
//----------Sonic CD Horizontal Spin Platform Script----------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.PlayerOffSetAngle6#alias Object.Value1 : Object.OffSetXPos7#alias Object.Value2 : Object.XVelocity8#alias Object.Value3 : Object.Angle9#alias Object.Value4 : Object.KickPlayer10#alias Object.Value5 : Object.PlatAnimFrame11#alias Object.Value6 : Object.LightAnimFrame1213// Player Aliases14#alias Player.Value6 : Player.MinRollSpeed1516// Global SFX17#alias 0 : SFX_G_JUMP1819// Gravity20#alias 0 : GRAVITY_GROUND2122// Property Values23// This property values only cover the starting position24#alias 0 : START_MOVING_LEFT25#alias 1 : START_MOVING_RIGHT262728sub ObjectMain29Object.Angle = Oscillation30Object.Angle <<= 131if Object.PropertyValue == START_MOVING_RIGHT32Object.Angle += 25633end if3435Sin(Object.XVelocity, Object.Angle)36Object.XVelocity <<= 1337Object.XVelocity += Object.XPos38Object.XVelocity &= 0xFFFF0000 // Truncate the value39Object.XVelocity -= Object.OffSetXPos40end sub414243sub ObjectPlayerInteraction44TempValue1 = Object.XPos45Object.XPos = Object.OffSetXPos46PlayerObjectCollision(C_PLATFORM, -24, -12, 24, 8)47if CheckResult == true48Player.XPos += Object.XVelocity4950if Player.State != Player_State_SpinningTop51Player.Speed = 052Object.KickPlayer = true53Player.MinRollSpeed = 0xC0054if Player.XPos > Object.XPos55Player.Timer = Player.XPos56Player.Timer -= Object.XPos57Object.PlayerOffSetAngle = 12858else59Player.Timer = Object.XPos60Player.Timer -= Player.XPos61Object.PlayerOffSetAngle = 38462end if63end if6465if Player.XPos > Object.XPos66if Player.Left == true67Player.Timer -= 204868end if69if Player.Right == true70Player.Timer += 204871end if72else73if Player.Left == true74Player.Timer += 204875end if76if Player.Right == true77Player.Timer -= 204878end if79end if8081Player.State = Player_State_SpinningTop82Player.Animation = ANI_SPINNING_TOP8384Sin(Player.XPos, Object.PlayerOffSetAngle)85Player.XPos *= Player.Timer86Player.XPos >>= 987Player.XPos += Object.XPos8889TempValue0 = Object.PlayerOffSetAngle90TempValue0 -= 12891TempValue0 /= 869293Player.Frame = TempValue09495Object.PlayerOffSetAngle += 896if Object.PlayerOffSetAngle > 63997Object.PlayerOffSetAngle -= 51298end if99100if Player.JumpPress == true101CallFunction(Player_Action_Jump)102103Player.Speed = Player.XPos104Player.Speed -= Object.XPos105Player.Speed >>= 3106107#platform: Use_Origins108Player.State = Player_State_Air_NoDropDash109#endplatform110111#platform: Use_Standalone112Player.State = Player_State_Air113#endplatform114115Player.Timer = 0116PlaySfx(SFX_G_JUMP, false)117end if118else119if Object.KickPlayer == true120if Player.State == Player_State_SpinningTop121if Player.Gravity == GRAVITY_GROUND122Player.State = Player_State_Ground123Object.KickPlayer = false124Player.Timer = 0125else126#platform: Use_Origins127Object.KickPlayer = false128Player.Timer = 0129Player.State = Player_State_Air_NoDropDash130Player.Animation = ANI_WALKING131CallFunction(Player_HandleAirMovement)132#endplatform133end if134end if135end if136end if137Object.XPos = TempValue1138end sub139140141sub ObjectDraw142Sin(Object.OffSetXPos, Object.Angle)143Object.OffSetXPos <<= 13144Object.OffSetXPos += Object.XPos145Object.OffSetXPos &= 0xFFFF0000 // Truncate the value146147TempValue0 = Object.PlatAnimFrame148TempValue0 /= 10149150Object.PlatAnimFrame++151Object.PlatAnimFrame %= 20152153DrawSpriteXY(TempValue0, Object.OffSetXPos, Object.YPos)154155TempValue0 = Object.LightAnimFrame156TempValue0 /= 10157TempValue0 += 2158159Object.LightAnimFrame++160Object.LightAnimFrame %= 60161162DrawSpriteXY(TempValue0, Object.OffSetXPos, Object.YPos)163end sub164165166sub ObjectStartup167LoadSpriteSheet("R6/Objects.gif")168169SpriteFrame(-24, -16, 48, 32, 1, 84) // #0 - Horizontal Spin Platform frame 0170SpriteFrame(-24, -16, 48, 32, 50, 84) // #1 - Horizontal Spin Platform frame 1171172SpriteFrame(-8, 16, 16, 16, 1, 117) // #2 - Spin Platform Light frame 0173SpriteFrame(-8, 16, 16, 16, 18, 117) // #3 - Spin Platform Light frame 1174SpriteFrame(-8, 16, 16, 16, 35, 117) // #4 - Spin Platform Light frame 2175SpriteFrame(-8, 16, 16, 16, 35, 117) // #5 - Spin Platform Light frame 3176SpriteFrame(-8, 16, 16, 16, 35, 117) // #6 - Spin Platform Light frame 4177SpriteFrame(-8, 16, 16, 16, 52, 117) // #7 - Spin Platform Light frame 5178179ArrayPos0 = 32180while ArrayPos0 < 1056181if Object[ArrayPos0].Type == TypeName[H Spin Platform]182Object[ArrayPos0].DrawOrder = 4183end if184ArrayPos0++185loop186end sub187188189// ========================190// Editor Subs191// ========================192193sub RSDKEdit194if Editor.ReturnVariable == true195switch Editor.VariableID196case EDIT_VAR_PROPVAL // Property Value197CheckResult = Object.PropertyValue198CheckResult &= 1199break200case 0 // startDir201CheckResult = Object.PropertyValue202CheckResult &= 1203break204end switch205else206switch Editor.VariableID207case EDIT_VAR_PROPVAL // Property Value208Object.PropertyValue = Editor.VariableValue209Object.PropertyValue &= 1210break211case 0 // startDir212Object.PropertyValue = Editor.VariableValue213Object.PropertyValue &= 1214break215end switch216end if217end sub218219220sub RSDKDraw221DrawSprite(0)222DrawSprite(1)223switch Object.PropertyValue224case START_MOVING_LEFT225TempValue1 = 255226TempValue2 = 255227TempValue3 = 128228TempValue4 = 0229break230case START_MOVING_RIGHT231TempValue1 = 128232TempValue2 = 0233TempValue3 = 255234TempValue4 = 255235break236end switch237TempValue0 = Object.XPos238TempValue0 -= 0x490000239TempValue5 = Object.YPos240TempValue5 -= 0x100000241if object.PropertyValue == START_MOVING_LEFT242DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, TempValue3, TempValue4, 0)243if Editor.ShowGizmos == true244Editor.DrawingOverlay = true245DrawRectOutline(TempValue0, TempValue5, 0x90, 0x30, 255, 255, 255, 255)246TempValue0 = Object.XPos247TempValue0 += 0x490000248DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, TempValue1, TempValue2, 0)249Editor.DrawingOverlay = false250end if251else252TempValue0 = Object.XPos253TempValue0 += 0x490000254DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, TempValue1, TempValue2, 0)255if Editor.ShowGizmos == true256Editor.DrawingOverlay = true257TempValue0 = Object.XPos258TempValue0 -= 0x490000259DrawRectOutline(TempValue0, TempValue5, 0x90, 0x30, 255, 255, 255, 255)260DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, TempValue3, TempValue4, 0)261Editor.DrawingOverlay = false262end if263end if264end sub265266sub RSDKLoad267LoadSpriteSheet("R6/Objects.gif")268SpriteFrame(-24, -16, 48, 32, 1, 84) // #0 - Horizontal Spin Platform frame 0269SpriteFrame(-8, 16, 16, 16, 18, 117) // #1 - Spin Platform Light frame 1270271AddEditorVariable("startDir")272SetActiveVariable("startDir")273AddEnumVariable("Left", START_MOVING_LEFT)274AddEnumVariable("Right", START_MOVING_RIGHT)275end sub276277278