Path: blob/main/Scripts/R7/TubeSwitch.txt
1319 views
//----------------Sonic CD Tube Switch Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.InTube6#alias Object.Value2 : Object.LedgeStop7// Player Aliases8#alias Player.Value6 : Player.MinRollSpeed910// Collision Modes11#alias 0 : CMODE_FLOOR12#alias 1 : CMODE_LWALL13#alias 2 : CMODE_ROOF14#alias 3 : CMODE_RWALL1516// Gravity17#alias 0 : GRAVITY_GROUND18#alias 1 : GRAVITY_AIR1920// Property Values21#alias 0 : TUBESW_ENTER_H_L22#alias 1 : TUBESW_ENTER_V23#alias 2 : TUBESW_ENTER_V_TUBE24#alias 3 : TUBESW_H_LABYRINTH25#alias 4 : TUBESW_ENTER_H_R26#alias 5 : TUBESW_V_LABYRINTH27#alias 6 : TUBESW_LABYRINTH_SPRING28#alias 7 : TUBESW_LABYRINTH_EXIT_UPWARDS293031sub ObjectPlayerInteraction32PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)33#platform: Use_Origins34if CheckResult == true35if Stage.PlayerListPos == PLAYER_KNUCKLES36if Player.State == Player_State_LedgePullUp37CheckResult = false38Object.LedgeStop = true39end if40end if41end if42#endplatform43if CheckResult == true44switch Object.PropertyValue45case TUBESW_ENTER_H_L46#platform: Use_Origins47if Object.LedgeStop == true48Player.Speed = 149Object.LedgeStop = false50end if51#endplatform52if Object.InTube == false53if Player.State != Player_State_TubeAirRoll54Player.State = Player_State_TubeAirRoll55Player.Gravity = GRAVITY_GROUND56Player.Animation = ANI_JUMPING57Player.MinRollSpeed = 0xD000058else59Player.State = Player_State_Roll60Player.Animation = ANI_JUMPING61end if62end if63break6465case TUBESW_ENTER_V6667#platform: Use_Origins68Player.State = Player_State_Air_NoDropDash69#endplatform7071#platform: Use_Standalone72Player.State = Player_State_Air73#endplatform7475Player.Animation = ANI_JUMPING76if Player.Gravity == GRAVITY_AIR77if Player.YVelocity < 078Player.YVelocity = -0xD000079else80Player.YVelocity = 0xD000081end if82else83switch Player.CollisionMode84case CMODE_LWALL85if Player.Speed < 086Player.YVelocity = 0xD000087else88Player.YVelocity = -0xD000089end if90break91case CMODE_RWALL92if Player.Speed < 093Player.YVelocity = -0xD000094else95Player.YVelocity = 0xD000096end if97break98end switch99end if100Player.Gravity = GRAVITY_AIR101Player.XPos = Object.XPos102Player.XVelocity = 0103Player.Speed = 0104break105106case TUBESW_ENTER_V_TUBE107if Object.InTube == false108if Player.State != Player_State_TubeAirRoll109Player.XPos = Object.XPos110Player.State = Player_State_TubeAirRoll111Player.Animation = ANI_JUMPING112Player.MinRollSpeed = 0xD0000113Player.CollisionMode = CMODE_RWALL114Player.Angle = 64115Player.Gravity = GRAVITY_GROUND116Player.XVelocity = 0117if Player.YVelocity < 0118Player.Speed = -0xD0000119else120Player.Speed = 0xD0000121end if122Player.YVelocity = 0123Player.Right = false124Player.Left = false125else126127#platform: Use_Origins128Player.State = Player_State_Air_NoDropDash129#endplatform130131#platform: Use_Standalone132Player.State = Player_State_Air133#endplatform134Player.Animation = ANI_JUMPING135switch Player.CollisionMode136case 1137if Player.Speed < 0138Player.YVelocity = 0xD0000139else140Player.YVelocity = -0xD0000141end if142break143case 3144if Player.Speed < 0145Player.YVelocity = -0xD0000146else147Player.YVelocity = 0xD0000148end if149break150end switch151Player.Gravity = GRAVITY_AIR152Player.XPos = Object.XPos153Player.XVelocity = 0154Player.Speed = 0155end if156end if157break158159case TUBESW_H_LABYRINTH160if Object.InTube == false161if Player.CollisionMode == CMODE_ROOF162Player.CollisionMode = CMODE_FLOOR163Player.Angle = 0164FlipSign(Player.Speed)165FlipSign(Player.XVelocity)166end if167end if168break169170case TUBESW_ENTER_H_R171if Object.InTube == false172Player.State = Player_State_Roll173Player.Animation = ANI_JUMPING174if Player.XPos < Object.XPos175if Player.Speed < 0xA0000176Player.Speed = 0xA0000177end if178Player.Direction = FACING_RIGHT179else180if Player.Speed > -0xA0000181Player.Speed = -0xA0000182end if183Player.Direction = FACING_LEFT184end if185end if186break187188case TUBESW_V_LABYRINTH189if Player.YVelocity < 0190if Player.State != Player_State_TubeAirRoll191if Player.Left == true192Player.State = Player_State_TubeAirRoll193Player.Gravity = GRAVITY_GROUND194Player.CollisionMode = CMODE_RWALL195Player.Angle = 64196Player.Animation = ANI_JUMPING197Player.MinRollSpeed = 0xD0000198Player.Speed = -0xD0000199Player.XVelocity = 0200Player.YVelocity = 0201Player.XPos -= 0x80000202end if203204if Player.Right == true205Player.State = Player_State_TubeAirRoll206Player.Gravity = GRAVITY_GROUND207Player.CollisionMode = CMODE_LWALL208Player.Angle = 192209Player.Animation = ANI_JUMPING210Player.MinRollSpeed = 0xD0000211Player.Speed = 0xD0000212Player.XVelocity = 0213Player.YVelocity = 0214Player.XPos += 0x80000215end if216end if217end if218break219220case TUBESW_LABYRINTH_SPRING221if Object.InTube == false222223#platform: Use_Origins224// In Origins, both versions of the Air state are checked against just in case225CheckEqual(Player.State, Player_State_Air_NoDropDash)226TempValue0 = CheckResult227CheckEqual(Player.State, Player_State_Air)228TempValue0 |= CheckResult229if TempValue0 != false230Player.XPos = Object.XPos231Player.XVelocity = 0232Player.Speed = 0233end if234#endplatform235236#platform: Use_Standalone237// In Standalone, we don't have any pesky Dropdash to worry about238if Player.State == Player_State_Air239Player.XPos = Object.XPos240Player.XVelocity = 0241Player.Speed = 0242end if243#endplatform244245end if246break247248case TUBESW_LABYRINTH_EXIT_UPWARDS249if Object.InTube == false250if Player.CollisionMode == CMODE_ROOF251Player.CollisionMode = CMODE_FLOOR252Player.Angle += 128253FlipSign(Player.Speed)254FlipSign(Player.XVelocity)255end if256end if257break258259end switch260261Object.InTube = true262else263Object.InTube = false264end if265end sub266267268// ========================269// Editor Subs270// ========================271272sub RSDKDraw273// This object doesn't have a debug view, so this is custom274// It draws a square out of tubeswitch icons275276TempValue0 = Object.XPos277TempValue0 -= 0x80000278TempValue1 = Object.YPos279TempValue1 -= 0x80000280DrawSpriteXY(0, TempValue0, TempValue1)281TempValue0 += 0x100000282DrawSpriteXY(0, TempValue0, TempValue1)283TempValue1 += 0x100000284DrawSpriteXY(0, TempValue0, TempValue1)285TempValue0 -= 0x100000286DrawSpriteXY(0, TempValue0, TempValue1)287288if Editor.ShowGizmos == true289// Draw the tube switch's hitbox, purposefully ignoring Editor.DrawingOverlay290291TempValue0 = Object.iXPos292TempValue0 -= 16293TempValue1 = Object.iYPos294TempValue1 -= 16295DrawRectOutline(TempValue0, TempValue1, 32, 32, 255, 255, 255, 255)296end if297end sub298299300sub RSDKLoad301LoadSpriteSheet("Global/Display.gif")302SpriteFrame(-8, -8, 16, 16, 173, 67) // "T" (ubeswitch) icon303304// TODO: how would you even name these305end sub306307308