Path: blob/main/Scripts/R3/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.OnObject6#alias Object.Value1 : Object.LedgeStop78// Player Aliases9#alias Player.Value6 : Player.MinRollSpeed1011// Gravity12#alias 0 : GRAVITY_GROUND13#alias 1 : GRAVITY_AIR1415// Collision Modes16#alias 0 : CMODE_FLOOR17#alias 1 : CMODE_LWALL18#alias 2 : CMODE_ROOF19#alias 3 : CMODE_RWALL2021// Property Values22#alias 0 : TUBESWITCH_H_L23#alias 1 : TUBESWITCH_H_R24#alias 2 : TUBESWITCH_V_T25#alias 3 : TUBESWITCH_V_B26#alias 4 : TUBESWITCH_ROLL_ALIGN27#alias 5 : TUBESWITCH_V_GROUNDED28#alias 6 : TUBESWITCH_V_FORCE_DW29#alias 7 : TUBESWITCH_V_FORCE_L_DW30#alias 8 : TUBESWITCH_FORCE_ROLL31#alias 9 : TUBESWITCH_V_GROUNDED_DW32#alias 10 : TUBESWITCH_GROUNDED_CANCEL33#alias 11 : TUBESWITCH_EDGE_BOUNCE34#alias 12 : TUBESWITCH_ROLL_MASK3536// Player Aliases37#alias Player.Value2 : Player.RollAnimationSpeed38#alias Player.Value6 : Player.MinRollSpeed394041sub ObjectPlayerInteraction42PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)43#platform: Use_Origins44if CheckResult == true45if Stage.PlayerListPos == PLAYER_KNUCKLES46if Player.State == Player_State_LedgePullUp47CheckResult = false48Object.LedgeStop = true49end if50end if51end if52#endplatform53if CheckResult == true54switch Object.PropertyValue55case TUBESWITCH_H_L56#platform: Use_Origins57if Object.LedgeStop == true58Player.Speed = 159Object.LedgeStop = false60end if61#endplatform62if Player.Speed > 063Player.Direction = FACING_RIGHT64Player.State = Player_State_TubeRoll65Player.Animation = ANI_JUMPING66Player.MinRollSpeed = 0xA00006768if Player.Speed < 0xA000069Player.Speed = 0xA000070end if7172if Player.Gravity == GRAVITY_AIR73Player.Gravity = GRAVITY_GROUND74Player.YPos = Object.YPos75end if76else77if Player.Gravity == GRAVITY_GROUND78if Player.Speed > -0x2000079Player.Speed = -0x2000080end if81end if8283Player.State = Player_State_Roll84Player.Animation = ANI_JUMPING85end if86break8788case TUBESWITCH_H_R89if Player.Speed < 090Player.State = Player_State_TubeRoll91Player.Animation = ANI_JUMPING92Player.MinRollSpeed = 0xA00009394if Player.Speed > -0xA000095Player.Speed = -0xA000096end if97else98if Player.Gravity == GRAVITY_GROUND99if Player.Speed < 0x20000100Player.Speed = 0x20000101end if102end if103104Player.State = Player_State_Roll105Player.Animation = ANI_JUMPING106end if107break108109case TUBESWITCH_V_T110if Object.OnObject == false111112if Player.Gravity == GRAVITY_AIR113Player.Gravity = GRAVITY_GROUND114Player.State = Player_State_TubeRoll115Player.Animation = ANI_JUMPING116Player.CollisionMode = CMODE_RWALL117Player.Angle = 64118Player.Speed = 0x100000119Player.MinRollSpeed = 0x100000120else121if Player.Speed > 0122Player.Gravity = GRAVITY_GROUND123Player.State = Player_State_TubeRoll124Player.Animation = ANI_JUMPING125Player.CollisionMode = CMODE_RWALL126Player.Angle = 64127Player.Speed = 0x100000128Player.MinRollSpeed = 0x100000129else130Player.Gravity = GRAVITY_AIR131Player.YVelocity = Player.Speed132Player.Speed = 0133Player.XVelocity = 0134end if135136end if137138end if139break140141case TUBESWITCH_V_B142if Object.OnObject == false143if Player.Gravity == GRAVITY_AIR144Player.Gravity = GRAVITY_GROUND145Player.State = Player_State_TubeRoll146Player.Animation = ANI_JUMPING147Player.CollisionMode = CMODE_RWALL148Player.Angle = 64149Player.Speed = -0xA0000150Player.MinRollSpeed = 0xA0000151end if152if Player.CollisionMode == CMODE_RWALL153if Player.Speed < 0154Player.Gravity = GRAVITY_GROUND155Player.State = Player_State_TubeRoll156Player.Animation = ANI_JUMPING157Player.CollisionMode = CMODE_RWALL158Player.Angle = 64159Player.Speed = -0xA0000160Player.MinRollSpeed = 0xA0000161else162Player.Gravity = GRAVITY_AIR163Player.YVelocity = Player.Speed164Player.Speed = 0165Player.XVelocity = 0166end if167end if168end if169break170171case TUBESWITCH_ROLL_ALIGN172if Player.Gravity == GRAVITY_GROUND173Player.State = Player_State_Roll174else175#platform: Use_Origins176if Player.State != Player_State_Climb177Player.XPos = Object.XPos178end if179#endplatform180181#platform: Use_Standalone182Player.XPos = Object.XPos183#endplatform184185end if186if Player.Animation != ANI_JUMPING187Player.Animation = ANI_JUMPING188Player.RollAnimationSpeed = 240189end if190break191192case TUBESWITCH_V_GROUNDED193if Object.OnObject == false194if Player.YVelocity > 0195Player.State = Player_State_TubeRoll196197Player.Animation = ANI_JUMPING198199Player.Gravity = GRAVITY_GROUND200Player.CollisionMode = CMODE_RWALL201202Player.Angle = 64203Player.Speed = 0x100000204Player.MinRollSpeed = 0x100000205206end if207else208209#platform: Use_Origins210CheckEqual(Player.State, Player_State_Air_NoDropDash)211TempValue0 = CheckResult212CheckEqual(Player.State, Player_State_Air)213TempValue0 |= CheckResult214if TempValue0 != false215Player.Animation = ANI_JUMPING216end if217#endplatform218219#platform: Use_Standalone220if Player.State == Player_State_Air221Player.Animation = ANI_JUMPING222end if223#endplatform224225end if226break227228case TUBESWITCH_V_FORCE_DW229if Object.OnObject == false230231if Player.Gravity == GRAVITY_AIR232Player.Gravity = GRAVITY_GROUND233Player.State = Player_State_TubeRoll234Player.Animation = ANI_JUMPING235Player.CollisionMode = CMODE_RWALL236Player.Angle = 64237Player.Speed = 0x100000238Player.MinRollSpeed = 0x100000239else240Player.Gravity = GRAVITY_AIR241Player.YVelocity = Player.Speed242FlipSign(Player.YVelocity)243Player.Speed = 0244Player.XVelocity = 0245end if246247end if248break249250case TUBESWITCH_V_FORCE_L_DW251if Object.OnObject == false252if Player.YVelocity > 0253Player.Gravity = GRAVITY_GROUND254Player.State = Player_State_TubeRoll255Player.Animation = ANI_JUMPING256Player.CollisionMode = CMODE_LWALL257Player.Angle = 192258Player.Speed = -0x100000259Player.MinRollSpeed = 0x100000260end if261else262Player.Animation = ANI_JUMPING263end if264break265266case TUBESWITCH_FORCE_ROLL267if Player.State != Player_State_Fly268if Player.Gravity == GRAVITY_GROUND269Player.State = Player_State_Roll270end if271Player.Animation = ANI_JUMPING272end if273break274275case TUBESWITCH_V_GROUNDED_DW276if Object.OnObject == false277if Player.YVelocity > 0278Player.Gravity = GRAVITY_GROUND279Player.State = Player_State_TubeRoll280Player.Animation = ANI_JUMPING281Player.CollisionMode = CMODE_RWALL282Player.Angle = 64283Player.Speed = 0x80000284Player.MinRollSpeed = 0x80000285end if286else287Player.Animation = ANI_JUMPING288end if289break290291case TUBESWITCH_GROUNDED_CANCEL292if Object.OnObject == false293if Player.Gravity == GRAVITY_GROUND294Player.Gravity = GRAVITY_AIR295Player.YVelocity = Player.Speed296Player.Speed = 0297Player.XVelocity = 0298end if299end if300break301302case TUBESWITCH_EDGE_BOUNCE303if Player.YVelocity > 0304if Player.XPos > Object.XPos305TempValue0 = Player.XPos306TempValue0 -= Object.XPos307if TempValue0 < 0x60000308Player.Gravity = GRAVITY_AIR309Player.YVelocity = -0x30000310end if311else312TempValue0 = Object.XPos313TempValue0 -= Player.XPos314if TempValue0 < 0x60000315Player.Gravity = GRAVITY_AIR316Player.YVelocity = -0x30000317end if318end if319end if320break321322case TUBESWITCH_ROLL_MASK323if Player.State != Player_State_Fly324if Player.XVelocity > 0x40000325if Player.Gravity == GRAVITY_GROUND326Player.State = Player_State_Roll327end if328Player.Animation = ANI_JUMPING329end if330end if331break332333end switch334Object.OnObject = true335else336Object.OnObject = false337end if338end sub339340341// ========================342// Editor Subs343// ========================344345sub RSDKDraw346TempValue0 = Object.XPos347TempValue0 -= 0x80000348TempValue1 = Object.YPos349TempValue1 -= 0x80000350351DrawSpriteXY(0, TempValue0, TempValue1)352353TempValue0 += 0x100000354DrawSpriteXY(0, TempValue0, TempValue1)355356TempValue1 += 0x100000357DrawSpriteXY(0, TempValue0, TempValue1)358359TempValue0 -= 0x100000360DrawSpriteXY(0, TempValue0, TempValue1)361end sub362363364sub RSDKLoad365LoadSpriteSheet("Global/Display.gif")366SpriteFrame(-8, -8, 16, 16, 173, 67) // #0 - "T" Icon367368SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")369end sub370371372