Path: blob/main/Scripts/R7/SpringCage.txt
1319 views
//----------------Sonic CD Spring Cage Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Note - Object[+1} should be an R7Spring object56// Aliases7#alias Object.Value0 : Object.FullAngle8#alias Object.Value1 : Object.Angle9// Value2 is unused...10#alias Object.Value3 : Object.LaunchTimer1112// R7 Spring Aliases13#alias Object.Value0 : Object.Timer1415// States16#alias 0 : SPRINGCAGE_OPEN17#alias 1 : SPRINGCAGE_OCCUPIED1819// Gravity20#alias 1 : GRAVITY_AIR2122// Stage SFX23#alias 0 : SFX_S_LARGEBOOSTER // in origins, this SFX is Launcher24#alias 3 : SFX_S_LAUNCHER2526// Property Values27#alias 0 : ROTATING_SPRING28// Could mention the rest, but they are all based on the normal springs so...293031sub ObjectMain32if Object.State == SPRINGCAGE_OPEN33if Object.PropertyValue == ROTATING_SPRING34// Spin around35Object.FullAngle++36Object.FullAngle %= 483738Object.Angle = Object.FullAngle39Object.Angle /= 640end if4142// Update the content spring to show the correct sprite43switch Object.Angle44case 045// Right46Object[+1].PropertyValue = 147break48case 149case 750// Up right51Object[+1].PropertyValue = 452break53case 254case 655// Up56Object[+1].PropertyValue = 057break58case 359case 560// Up left61Object[+1].PropertyValue = 562break63case 464// Left65Object[+1].PropertyValue = 266break67end switch68else69if Object.LaunchTimer < 9070if Player.State != Player_State_Death71Object.LaunchTimer++7273if Object.LaunchTimer == 607475// Origins fixed the SFX the Cage uses76// This sound ID is only valid on Origins data files though, which is why we gotta separate it77#platform: Use_Origins78PlayStageSfx(SFX_S_LAUNCHER, false)79Player.State = Player_State_Air_NoDropDash80#endplatform8182#platform: Use_Standalone83PlayStageSfx(SFX_S_LARGEBOOSTER, false)84Player.State = Player_State_Air85#endplatform8687Player.Gravity = GRAVITY_AIR88Player.Timer = 08990// Activate the spring91Object[+1].Timer = 19293switch Object.Angle94case 095Player.Speed = 0x10000096Player.XVelocity = 0x10000097Player.YVelocity = 0x00000098break99100case 1101case 7102Player.Speed = 0x0C0000103Player.XVelocity = 0x0C0000104Player.YVelocity = -0x0B0000105break106107case 2108case 6109Player.Speed = 0x000000110Player.XVelocity = 0x000000111Player.YVelocity = -0x100000112break113114case 3115case 5116Player.Speed = -0x0C0000117Player.XVelocity = -0x0C0000118Player.YVelocity = -0x0B0000119break120121case 4122Player.Speed = -0x100000123Player.XVelocity = -0x100000124Player.YVelocity = 0x000000125break126127end switch128end if129else130Object.State = SPRINGCAGE_OPEN131Object.LaunchTimer = 0132end if133else134Object.State = SPRINGCAGE_OPEN135Object.LaunchTimer = 0136end if137end if138139end sub140141142sub ObjectPlayerInteraction143if Object.State == SPRINGCAGE_OPEN144145// See if the player's hopped in yet146PlayerObjectCollision(C_TOUCH, -28, -32, 28, 24)147if CheckResult == true148Object.State = SPRINGCAGE_OCCUPIED149150// Move the player into the cage and set them up to be launched151Player.XPos = Object.XPos152Player.YPos = Object.YPos153Player.State = Player_State_Static154Player.Animation = ANI_JUMPING155Player.Speed = 0156Player.XVelocity = 0157Player.YVelocity = 0158159// Make minor positioning corrections based on the cage's current angle160switch Object.Angle161case 0162Player.XPos += 0x200000 // 32 pixels right163break164case 1165case 7166Player.XPos += 0x180000 // 24 pixels right167Player.YPos -= 0x180000 // 24 pixels up168break169case 2170case 6171Player.YPos -= 0x200000 // 32 pixels up172break173case 3174case 5175Player.XPos -= 0x180000 // 24 pixels left176Player.YPos -= 0x180000 // 24 pixels up177break178case 4179Player.XPos -= 0x200000 // 32 pixels up180break181end switch182183end if184end if185186end sub187188189sub ObjectDraw190// Jump based on what angle the cage is currently191switch Object.Angle192case 0193// Facing right194DrawSprite(1)195Object.Direction = 2196DrawSpriteFX(1, FX_FLIP, Object.XPos, Object.YPos)197break198199case 1200case 7201// Facing up-right202DrawSprite(2)203Object.Direction = 3204DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)205break206207case 2208case 6209// Facing up210DrawSprite(4)211Object.Direction = FACING_LEFT212DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)213break214215case 3216case 5217// Facing up left218Object.Direction = FACING_LEFT219DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)220Object.Direction = 2221DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)222break223224case 4225// Facing left226DrawSprite(5)227Object.Direction = 2228DrawSpriteFX(5, FX_FLIP, Object.XPos, Object.YPos)229break230231end switch232233DrawSprite(0)234235end sub236237238sub ObjectStartup239240LoadSpriteSheet("R7/Objects.gif")241242// Base Frame243SpriteFrame(-8, -8, 16, 16, 90, 52)244245// Top Horizontal Half246SpriteFrame(-8, -28, 64, 24, 34, 96)247248// Top Diagonal Half249SpriteFrame(-24, -56, 56, 56, 59, 121)250251// Bottom Diagonal Half252SpriteFrame(-56, -24, 56, 56, 59, 121)253254// Vertical Half255SpriteFrame(-28, -56, 24, 64, 34, 121)256257// Bottom Horizontal Half258SpriteFrame(-56, -28, 64, 24, 34, 96)259260ArrayPos0 = 32261while ArrayPos0 < 1056262if Object[ArrayPos0].Type == TypeName[Spring Cage]263ArrayPos1 = ArrayPos0264ArrayPos1++265switch Object[ArrayPos0].PropertyValue266case 1267Object[ArrayPos0].Angle = 4268Object[ArrayPos1].PropertyValue = 2269break270271case 3272Object[ArrayPos0].Angle = 1273Object[ArrayPos1].PropertyValue = 1274break275276case 4277Object[ArrayPos0].Angle = 2278Object[ArrayPos1].PropertyValue = 4279break280281case 5282Object[ArrayPos0].Angle = 3283Object[ArrayPos1].PropertyValue = 5284break285286case 6287Object[ArrayPos0].Angle = 0288Object[ArrayPos1].PropertyValue = 2289break290291end switch292293Object[ArrayPos0].DrawOrder = 4294295// Move the spring to the cage296Object[ArrayPos1].XPos = Object[ArrayPos0].XPos297Object[ArrayPos1].YPos = Object[ArrayPos0].YPos298end if299300ArrayPos0++301loop302303end sub304305306// ========================307// Editor Subs308// ========================309310sub RSDKEdit311if Editor.ReturnVariable == true312switch Editor.VariableID313case EDIT_VAR_PROPVAL // Property Value314CheckResult = Object.PropertyValue315break316case 0 // Direction317CheckResult = Object.PropertyValue318break319end switch320else321switch Editor.VariableID322case EDIT_VAR_PROPVAL // Property Value323Object.PropertyValue = Editor.VariableValue324break325case 0 // Direction326Object.PropertyValue = Editor.VariableValue327break328end switch329end if330end sub331332333sub RSDKDraw334switch Object.PropertyValue335case 1336DrawSprite(5)337Object.Direction = 2338DrawSpriteFX(5, FX_FLIP, Object.XPos, Object.YPos)339break340341case 3342DrawSprite(2)343Object.Direction = 3344DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)345break346347case 0348case 4349DrawSprite(4)350Object.Direction = FACING_LEFT351DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)352break353354case 5355Object.Direction = FACING_LEFT356DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)357Object.Direction = 2358DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)359break360361case 6362DrawSprite(1)363Object.Direction = 2364DrawSpriteFX(1, FX_FLIP, Object.XPos, Object.YPos)365break366367end switch368369DrawSprite(0)370371if Editor.ShowGizmos == true372GetObjectType(TempValue0, "R7 Spring")373374ArrayPos1 = Object[+1].EntityNo375if Object[ArrayPos1].type != TempValue0376// Uh oh! The next object should be an R7 Spring object, but it isn't...377// Draw a bunch of red to let the user know378379Editor.DrawingOverlay = true380381DrawArrow(Object.XPos, Object.YPos, Object[ArrayPos1].XPos, Object[ArrayPos1].YPos, 255, 0, 0)382383TempValue0 = Object[ArrayPos1].XPos384TempValue0 -= 0x100000385386TempValue1 = Object[ArrayPos1].YPos387TempValue1 -= 0x100000388389TempValue2 = Object[ArrayPos1].XPos390TempValue2 += 0x100000391392TempValue3 = Object[ArrayPos1].YPos393TempValue3 += 0x100000394395DrawLine(TempValue0, TempValue1, TempValue2, TempValue3, 255, 0, 0)396DrawLine(TempValue2, TempValue1, TempValue0, TempValue3, 255, 0, 0)397398Editor.DrawingOverlay = false399end if400end if401end sub402403404sub RSDKLoad405LoadSpriteSheet("R7/Objects.gif")406SpriteFrame(-8, -8, 16, 16, 90, 52) // Base Frame407SpriteFrame(-8, -28, 64, 24, 34, 96) // Top Horizontal Half408SpriteFrame(-24, -56, 56, 56, 59, 121) // Top Diagonal Half409SpriteFrame(-56, -24, 56, 56, 59, 121) // Bottom Diagonal Half410SpriteFrame(-28, -56, 24, 64, 34, 121) // Vertical Half411SpriteFrame(-56, -28, 64, 24, 34, 96) // Bottom Horizontal Half412413AddEditorVariable("Direction")414SetActiveVariable("Direction")415AddEnumVariable("Rotating", 0)416AddEnumVariable("Left", 1)417// 2 is pointing up dupe418AddEnumVariable("Up-Right", 3)419AddEnumVariable("Up", 4)420AddEnumVariable("Up-Left", 5)421AddEnumVariable("Right", 6)422end sub423424425