Path: blob/main/Scripts/R1/Ramp3D.txt
1319 views
//------------------Sonic CD 3D Ramp Script-------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value1 : Player.XOriginPos6#alias Object[+3].Value0 : StarBush1.XOriginPos7#alias Object[+3].XPos : StarBush1.XPos8#alias Object[+4].Value0 : StarBush2.XOriginPos9#alias Object[+4].XPos : StarBush2.XPos10#alias Object[+5].Value0 : BoostSpinner.XOriginPos11#alias Object[+5].XPos : BoostSpinner.XPos1213// States14#alias 0 : RAMP3D_RUN15#alias 1 : RAMP3D_EXIT_UNUSED // a copy of Exit Boost16#alias 2 : RAMP3D_EXIT17#alias 3 : RAMP3D_SET_YBOUND // this doesn't really have anything to do with this object18#alias 4 : RAMP3D_ENTER19#alias 5 : RAMP3D_DROP20#alias 6 : RAMP3D_SET_YBOUND2 // this doesn't really have anything to do with this object21#alias 7 : RAMP3D_RUN_FROM_TOP22#alias 8 : RAMP3D_EXIT_BOOST2324// Gravity25#alias 0 : GRAVITY_GROUND26#alias 1 : GRAVITY_AIR2728// Priority29#alias 0 : PRIORITY_BOUNDS30#alias 1 : PRIORITY_ACTIVE3132// Control Mode33#alias -1 : CONTROLMODE_NONE34#alias 0 : CONTROLMODE_NORMAL3536// Function declarations37#function Ramp3D_SetPlayerLaunch3839function Ramp3D_SetPlayerLaunch40#platform: Use_Origins41PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)42if CheckResult == 143Player.Timer = 044Player.State = Player_State_Air_NoDropDash4546Player.TileCollisions = true4748Player.Speed = 0x8000049Player.XVelocity = 0x8000050Player.YVelocity = -0xE00005152Player.Gravity = GRAVITY_AIR53Player.Rotation = 3845455Stage.NewYBoundary2 = 128056Stage.NewXBoundary1 = 20805758if Player.Animation == ANI_ROLL3D59Player.Animation = ANI_JUMPING60else61if Player.Animation != ANI_JUMPING62Player.Animation = ANI_WALKING63end if64end if6566Object[15].Type = TypeName[BackgroundFX]67Object[15].Priority = PRIORITY_ACTIVE68Object[15].DrawOrder = 06970ArrayPos0 = 071while ArrayPos0 < 272HParallax[ArrayPos0].ScrollPos = 073ArrayPos0++74loop75end if76if Player.YVelocity < 077Player.ControlMode = CONTROLMODE_NONE78Player.Left = false79Player.Right = false80Object.Priority = PRIORITY_ACTIVE81end if82#endplatform83end function848586sub ObjectPlayerInteraction87switch Object.PropertyValue88case RAMP3D_RUN89if Player.Gravity == GRAVITY_GROUND9091PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)92if CheckResult == true9394if Player.State != Player_State_Static95Player.State = Player_State_Static9697Player.TrackScroll = true98Player.TileCollisions = false99100Player.Speed = 0101Player.XVelocity = 0102Player.YVelocity = -0xC0000103104Player.AnimationSpeed = 0105end if106end if107end if108break109110case RAMP3D_EXIT_UNUSED111PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)112if CheckResult == true113114#platform: Use_Origins115Player.State = Player_State_Air_NoDropDash116#endplatform117118#platform: Use_Standalone119Player.State = Player_State_Air120#endplatform121122Player.TileCollisions = true123124Player.Speed = 0x80000125Player.XVelocity = 0x80000126Player.YVelocity = -0xE0000127128Player.Gravity = GRAVITY_AIR129Player.Rotation = 384130131Stage.NewYBoundary2 = 1280132Stage.NewXBoundary1 = 2080133134if Player.Animation == ANI_ROLL3D135Player.Animation = ANI_JUMPING136else137if Player.Animation != ANI_JUMPING138Player.Animation = ANI_WALKING139end if140end if141142Object[15].Type = TypeName[Background FX]143Object[15].Priority = PRIORITY_ACTIVE144Object[15].DrawOrder = 0145146ArrayPos0 = 0147while ArrayPos0 < 2148HParallax[ArrayPos0].ScrollPos = 0149ArrayPos0++150loop151end if152break153154case RAMP3D_EXIT155if Player.State == Player_State_Static156PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)157if CheckResult == true158159#platform: Use_Origins160Player.State = Player_State_Air_NoDropDash161#endplatform162163#platform: Use_Standalone164Player.State = Player_State_Air165#endplatform166167Player.TileCollisions = true168169Player.Speed = 0x40000170Player.XVelocity = 0x40000171Player.YVelocity = -0xC0000172173Player.Gravity = GRAVITY_AIR174Player.Rotation = 384175176Stage.NewYBoundary2 = 1280177178if Player.Animation == ANI_ROLL3D179Player.Animation = ANI_JUMPING180else181if Player.Animation != ANI_JUMPING182Player.Animation = ANI_WALKING183end if184end if185end if186end if187break188189case RAMP3D_SET_YBOUND190if Player.XPos > Object.XPos191Stage.YBoundary2 = 1024192else193Stage.YBoundary2 = 1280194end if195break196197case RAMP3D_ENTER198if Player.XPos > Object.XPos199if Player.Gravity == GRAVITY_GROUND200if Player.State != Player_State_Static201if Player.State == Player_State_Roll202203if Player.Angle > 216204Player.Animation = ANI_JUMPING205else206if Player.Angle == 0207Player.Animation = ANI_JUMPING208else209Player.Animation = ANI_ROLL3D210end if211end if212else213214if Player.Speed != 0215Player.State = Player_State_Ramp3D216end if217end if218end if219end if220221StarBush1.XOriginPos = Player.XPos222StarBush1.XOriginPos -= Object.XPos223224BoostSpinner.XOriginPos = StarBush1.XOriginPos225BoostSpinner.XOriginPos /= 3226227StarBush1.XOriginPos >>= 1228StarBush2.XOriginPos = StarBush1.XOriginPos229StarBush1.XOriginPos += StarBush1.XPos230StarBush2.XOriginPos += StarBush2.XPos231232BoostSpinner.XOriginPos += BoostSpinner.XPos233234TempValue0 = Object.YPos235TempValue0 -= Player.YPos236if TempValue0 < 0xE00000237238TempValue0 = Player.XPos239TempValue0 -= Player.XOriginPos240HParallax[0].ScrollPos += TempValue0241242ArrayPos0 = 13243TempValue2 = 128244while ArrayPos0 < 141245TempValue1 = TempValue0246TempValue1 *= TempValue2247TempValue1 >>= 7248HParallax[ArrayPos0].ScrollPos += TempValue1249250ArrayPos0++251252TempValue2--253loop254255TempValue0 <<= 1256HParallax[1].ScrollPos += TempValue0257end if258else259StarBush1.XOriginPos = StarBush1.XPos260261StarBush2.XOriginPos = StarBush2.XPos262263BoostSpinner.XOriginPos = BoostSpinner.XPos264265if Player.Gravity == GRAVITY_GROUND266if Player.State == Player_State_Ramp3D267Player.State = Player_State_Ground268end if269end if270271end if272Player.XOriginPos = Player.XPos273break274275case RAMP3D_DROP276#platform: Use_Origins277CheckEqual(Player.State, Player_State_Air_NoDropDash)278TempValue0 = CheckResult279CheckEqual(Player.State, Player_State_Air)280TempValue0 |= CheckResult281#endplatform282283#platform: Use_Standalone284CheckEqual(Player.State, Player_State_Air) // used to be a straight check, changed to be have a cleaner check with origins285TempValue0 = CheckResult286#endplatform287288if TempValue0 != false289PlayerObjectCollision(C_TOUCH, -16, -128, 16, 16)290if CheckResult == true291Player.Animation = ANI_DROPPING292Player.XOriginPos = Player.XPos293end if294295if Player.Animation == ANI_DROPPING296Player.Speed = 0297Player.XVelocity = 0298Player.XPos = Player.XOriginPos299end if300end if301break302303case RAMP3D_SET_YBOUND2304if Player.YPos < Object.YPos305if Player.XPos > Object.XPos306Stage.YBoundary2 = 792307else308Stage.YBoundary2 = 1024309end if310end if311break312313case RAMP3D_RUN_FROM_TOP // Technically speaking another YBound-like object314if Player.XPos > Object.XPos315Stage.YBoundary2 = 1024316if Player.Gravity == GRAVITY_GROUND317if Player.State == Player_State_Ramp3D318Player.State = Player_State_Ground319end if320end if321else322Stage.YBoundary2 = 792323end if324break325326case RAMP3D_EXIT_BOOST327#platform: Use_Standalone328PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)329if CheckResult == true330Player.Timer = 0331Player.State = Player_State_Air332333Player.TileCollisions = true334335Player.Speed = 0x80000336Player.XVelocity = 0x80000337Player.YVelocity = -0xE0000338339Player.Gravity = GRAVITY_AIR340Player.Rotation = 384341342Stage.NewYBoundary2 = 1280343Stage.NewXBoundary1 = 2080344345if Player.Animation == ANI_ROLL3D346Player.Animation = ANI_JUMPING347else348if Player.Animation != ANI_JUMPING349Player.Animation = ANI_WALKING350end if351end if352353Object[15].Type = TypeName[Background FX]354Object[15].Priority = PRIORITY_ACTIVE355Object[15].DrawOrder = 0356357ArrayPos0 = 0358while ArrayPos0 < 2359HParallax[ArrayPos0].ScrollPos = 0360ArrayPos0++361loop362end if363364if Player.YVelocity < 0365Player.ControlMode = CONTROLMODE_NONE366Player.Left = false367Player.Right = false368Object.Priority = PRIORITY_ACTIVE369else370Player.ControlMode = CONTROLMODE_NORMAL371Object.Priority = PRIORITY_BOUNDS372end if373#endplatform374375#platform: Use_Origins376if Stage.PlayerListPos == PLAYER_KNUCKLES377PlayerObjectCollision(C_TOUCH, -16, -16, 16, 16)378if CheckResult == true379TempValue0 = true380if Player.Angle == 0381TempValue0 = false382end if383if TempValue0 == true384CallFunction(Ramp3D_SetPlayerLaunch)385end if386end if387else388CallFunction(Ramp3D_SetPlayerLaunch)389end if390if Player.YVelocity >= 0391Player.ControlMode = CONTROLMODE_NORMAL392Object.Priority = PRIORITY_BOUNDS393end if394#endplatform395396break397end switch398end sub399400401sub ObjectStartup402if Player.XPos > 0x7D00000403Stage.YBoundary2 = 1280404Object[15].Type = TypeName[Background FX]405Object[15].Priority = PRIORITY_ACTIVE406Object[15].DrawOrder = 0407end if408409if Player.XPos > 0xFA00000410Stage.YBoundary2 = 1024411end if412end sub413414415// ========================416// Editor Subs417// ========================418419sub RSDKEdit420if Editor.ReturnVariable == true421switch Editor.VariableID422case EDIT_VAR_PROPVAL // Property Value423case 0 // type424CheckResult = Object.PropertyValue425CheckResult %= 9426break427end switch428else429switch Editor.VariableID430case EDIT_VAR_PROPVAL // Property Value431case 0 // type432Object.PropertyValue = Editor.VariableValue433CheckResult %= 9434break435end switch436end if437end sub438439440sub RSDKDraw441LoadSpriteSheet("Global/Display.gif")442TempValue5 = Object.SpriteSheet443LoadSpriteSheet("Players/Sonic2.gif")444TempValue6 = Object.SpriteSheet445LoadSpriteSheet("Players/Sonic3.gif")446TempValue7 = Object.SpriteSheet447448switch object.PropertyValue449case 0450Object.SpriteSheet = TempValue6451Object.InkEffect = 1452DrawSpriteFX(3,FX_INK, Object.XPos, Object.YPos)453Object.InkEffect = 0454if Editor.ShowGizmos == true455Editor.DrawingOverlay = true456TempValue1 = Object.YPos457TempValue1 -= 0xC00000458DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue1, 255, 255, 0)459Editor.DrawingOverlay = false460end if461break462case 1463case 8464Object.SpriteSheet = TempValue6465Object.InkEffect = 1466DrawSpriteFX(3,FX_INK, Object.XPos, Object.YPos)467Object.InkEffect = 0468if Editor.ShowGizmos == true469Editor.DrawingOverlay = true470TempValue0 = Object.XPos471TempValue0 += 0x800000472TempValue1 = Object.YPos473TempValue1 -= 0xE00000474DrawArrow(Object.XPos, Object.YPos, TempValue0, TempValue1, 255, 255, 0)475Editor.DrawingOverlay = false476end if477break478case 2479Object.SpriteSheet = TempValue6480Object.InkEffect = 1481DrawSpriteFX(3,FX_INK, Object.XPos, Object.YPos)482Object.InkEffect = 0483if Editor.ShowGizmos == true484Editor.DrawingOverlay = true485TempValue0 = Object.XPos486TempValue0 += 0x400000487TempValue1 = Object.YPos488TempValue1 -= 0xC00000489DrawArrow(Object.XPos, Object.YPos, TempValue0, TempValue1, 255, 255, 0)490Editor.DrawingOverlay = false491end if492break493case 3494case 6495Object.SpriteSheet = TempValue5496TempValue0 = Object.XPos497TempValue0 -= 0x100000498TempValue1 = Object.YPos499TempValue1 -= 0x100000500DrawRectWorld(TempValue0,TempValue1,32,32,96,96,192,255)501502TempValue0 = Object.XPos503TempValue0 -= 0x80000504TempValue1 = Object.YPos505TempValue1 -= 0x80000506DrawSpriteXY(1, TempValue0, TempValue1)507508TempValue0 += 0x100000509DrawSpriteXY(1, TempValue0, TempValue1)510511TempValue1 += 0x100000512DrawSpriteXY(1, TempValue0, TempValue1)513514TempValue0 -= 0x100000515DrawSpriteXY(1, TempValue0, TempValue1)516break517case 7518Object.SpriteSheet = TempValue5519TempValue0 = Object.XPos520TempValue0 -= 0x100000521TempValue1 = Object.YPos522TempValue1 -= 0xC0000523DrawSpriteXY(1, TempValue0, TempValue1)524525Object.SpriteSheet = TempValue6526Object.InkEffect = 1527DrawSpriteFX(2, FX_INK, Object.XPos, Object.YPos)528Object.InkEffect = 0529530if Editor.ShowGizmos == true531Editor.DrawingOverlay = true532TempValue0 = Object.XPos533TempValue0 -= 0x200000534DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, 255, 0)535Editor.DrawingOverlay = false536end if537break538case 4539Object.SpriteSheet = TempValue6540Object.InkEffect = 1541DrawSpriteFX(2, FX_INK, Object.XPos, Object.YPos)542Object.InkEffect = 0543544if Editor.ShowGizmos == true545Editor.DrawingOverlay = true546TempValue0 = Object.XPos547TempValue0 += 0x200000548DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, 255, 0)549550551Editor.DrawingOverlay = false552end if553break554case 5555Object.SpriteSheet = TempValue7556Object.InkEffect = 1557DrawSpriteFX(4, FX_INK, Object.XPos, Object.YPos)558Object.InkEffect = 0559if Editor.ShowGizmos == true560Editor.DrawingOverlay = true561TempValue0 = Object.YPos562TempValue0 += 0x200000563DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue0, 255, 255, 0)564Editor.DrawingOverlay = false565end if566break567default568Object.SpriteSheet = TempValue5569DrawSprite(0)570end switch571end sub572573574sub RSDKLoad575LoadSpriteSheet("Global/Display.gif")576SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon577SpriteFrame(-4, -4, 8, 8, 10, 98) // #1 - "Y"578579LoadSpriteSheet("Players/Sonic2.gif")580SpriteFrame(-20, -20, 40, 40, 133, 171) // #2 - Sonic 3D Ramp Enter581SpriteFrame(-16, -20, 32, 40, 1, 169) // #3 - Sonic 3D Ramp Exit582583LoadSpriteSheet("Players/Sonic3.gif")584SpriteFrame(-20, -24, 40, 48, 1, 83) // #4 - Sonic 3D Ramp Drop585586587AddEditorVariable("type")588SetActiveVariable("type")589AddEnumVariable("3D Ramp Run", RAMP3D_RUN)590AddEnumVariable("3D Ramp Exit Boost (Unused)", RAMP3D_EXIT_UNUSED)591AddEnumVariable("3D Ramp Exit ", RAMP3D_EXIT)592AddEnumVariable("3D Ramp (Set YBound)", RAMP3D_SET_YBOUND)593AddEnumVariable("3D Ramp Start", RAMP3D_ENTER)594AddEnumVariable("3D Ramp Drop", RAMP3D_DROP)595AddEnumVariable("3D Ramp (Set YBound 2)", RAMP3D_SET_YBOUND2)596AddEnumVariable("3D Ramp Top Run", RAMP3D_RUN_FROM_TOP)597AddEnumVariable("3D Ramp Exit Boost", RAMP3D_EXIT_BOOST)598end sub599600601