Path: blob/main/Scripts/R5/DipPlatform.txt
1319 views
//--------------Sonic CD Dipping Platform Script--------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Ridden6#alias Object.Value1 : Object.PlatformY7#alias Object.Value2 : Object.ChangeY89// HUD Alias10#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1112// Time Period Aliases13#alias 0 : TIME_PRESENT14#alias 1 : TIME_PAST15#alias 2 : TIME_GOOD_FUTURE16#alias 3 : TIME_BAD_FUTURE171819sub ObjectMain2021if Object.Ridden == true22if Object.PlatformY < 1623Object.PlatformY++2425TempValue0 = Object.PlatformY26TempValue0 &= 32728if TempValue0 == 329// The Platform will be moved 1 pixel down30Object.ChangeY = 0x1000031else32Object.ChangeY = 033end if34else35Object.ChangeY = 036end if37else38if Object.PlatformY > 039Object.PlatformY--4041TempValue0 = Object.PlatformY42TempValue0 &= 34344if TempValue0 == 345// The Platform should be moved 1 pixel up46Object.ChangeY = -0x1000047else48Object.ChangeY = 049end if50else51Object.ChangeY = 052end if53end if5455Object.Ridden = false5657end sub585960sub ObjectPlayerInteraction6162switch Object.PropertyValue63case 064// Small Platform6566PlayerObjectCollision(C_PLATFORM, -16, -16, 16, 12)67if CheckResult == true68Object.Ridden = true6970// Move the Player along with the Platform71Player.YPos += Object.ChangeY72end if73break7475case 176// Medium-sized Platform7778PlayerObjectCollision(C_PLATFORM, -32, -16, 32, 12)79if CheckResult == true80Object.Ridden = true8182// Move the Player in accordance with the Platform83Player.YPos += Object.ChangeY84end if85break8687case 288// Large Platform8990PlayerObjectCollision(C_PLATFORM, -48, -16, 48, 12)91if CheckResult == true92Object.Ridden = true9394// As needed, nudge the Player so that the follow the Platform95Player.YPos += Object.ChangeY96end if97break9899case 3100// Small Conveyor Platform101102PlayerObjectCollision(C_PLATFORM, -16, -16, 16, 12)103if CheckResult == true104Object.Ridden = true105106// Update the Player's Y Position to follow the Platform107Player.YPos += Object.ChangeY108109// Also, update their X Position as needed with the Conveyor Belt too110if ConveyorBelt_Flag == 0111Player.XPos += ConveyorBelt_Speed112else113Player.XPos -= ConveyorBelt_Speed114end if115116end if117break118119case 4120// Medium-sized Conveyor Platform121122PlayerObjectCollision(C_PLATFORM, -32, -16, 32, 12)123if CheckResult == true124Object.Ridden = true125126// Make the Player follow the Platform127Player.YPos += Object.ChangeY128129// And make them follow the Conveyor Belt as well130if ConveyorBelt_Flag == 0131Player.XPos += ConveyorBelt_Speed132else133Player.XPos -= ConveyorBelt_Speed134end if135136end if137break138139case 5140// Large Conveyor Platform141142PlayerObjectCollision(C_PLATFORM, -48, -16, 48, 12)143if CheckResult == true144Object.Ridden = true145146// The Platform moves vertically, so should the Player!147Player.YPos += Object.ChangeY148149// And don't forget about the Conveyor Belt, too!150if ConveyorBelt_Flag == 0151Player.XPos += ConveyorBelt_Speed152else153Player.XPos -= ConveyorBelt_Speed154end if155156end if157break158159end switch160161end sub162163164sub ObjectDraw165166Object.YPos += Object.ChangeY167168switch Object.PropertyValue169case 0170case 1171case 2172// Standard Platform173DrawSprite(Object.PropertyValue)174break175176// These below 3 are Conveyor Platforms, so they need the Conveyor overlay Sprite drawn ontop of them too177case 3178DrawSprite(0)179DrawSprite(3)180break181case 4182DrawSprite(1)183DrawSprite(4)184break185case 5186DrawSprite(2)187DrawSprite(5)188break189end switch190191end sub192193194sub ObjectStartup195196// So a sheet is loaded here, but then it's loaded again for each time zone?197// Probably just a small oversight...198LoadSpriteSheet("R5/Objects.gif")199200// But anyway...201// Order of Sprite Frames:202203// 0 - Small Platform Frame204// 1 - Normal Sized Platform Frame205// 2 - Large Platform Frame206207// 3 - Small Conveyor Belt Frame208// 4 - Medium Sized Conveyor Belt Frame209// 5 - Large Conveyor Belt Frame210211// The Conveyor Belt Frames are overlayed ontop of the normal Platform Frames212213// Load the corresponding sprites for each Time Period214switch HUD.CurrentTimePeriod215case TIME_PRESENT216LoadSpriteSheet("R5/Objects.gif")217SpriteFrame(-16, -16, 32, 32, 1, 51)218SpriteFrame(-32, -16, 64, 32, 34, 51)219SpriteFrame(-48, -16, 96, 32, 1, 84)220SpriteFrame(-16, -16, 32, 16, 65, 208)221SpriteFrame(-32, -16, 64, 16, 1, 208)222SpriteFrame(-48, -16, 96, 16, 1, 191)223break224225case TIME_PAST226LoadSpriteSheet("R5/Objects3.gif")227SpriteFrame(-16, -16, 32, 32, 1, 170)228SpriteFrame(-32, -16, 64, 32, 34, 170)229SpriteFrame(-48, -16, 96, 32, 1, 203)230SpriteFrame(-16, -16, 32, 16, 223, 148)231SpriteFrame(-32, -16, 64, 16, 159, 148)232SpriteFrame(-48, -16, 96, 16, 159, 131)233break234235case TIME_GOOD_FUTURE236LoadSpriteSheet("R5/Objects3.gif")237SpriteFrame(-16, -16, 32, 32, 1, 170)238SpriteFrame(-32, -16, 64, 32, 34, 170)239SpriteFrame(-48, -16, 96, 32, 1, 203)240SpriteFrame(-16, -16, 32, 16, 223, 182)241SpriteFrame(-32, -16, 64, 16, 159, 182)242SpriteFrame(-48, -16, 96, 16, 159, 165)243break244245case TIME_BAD_FUTURE246LoadSpriteSheet("R5/Objects3.gif")247SpriteFrame(-16, -16, 32, 32, 1, 170)248SpriteFrame(-32, -16, 64, 32, 34, 170)249SpriteFrame(-48, -16, 96, 32, 1, 203)250SpriteFrame(-16, -16, 32, 16, 223, 216)251SpriteFrame(-32, -16, 64, 16, 159, 216)252SpriteFrame(-48, -16, 96, 16, 159, 199)253break254255end switch256257end sub258259260// ========================261// Editor Subs262// ========================263264sub RSDKEdit265if Editor.ReturnVariable == true266switch Editor.VariableID267case EDIT_VAR_PROPVAL // Property Value268CheckResult = Object.PropertyValue269break270case 0 // Type271CheckResult = Object.PropertyValue272break273end switch274else275switch Editor.VariableID276case EDIT_VAR_PROPVAL // Property Value277Object.PropertyValue = Editor.VariableValue278break279case 0 // Type280Object.PropertyValue = Editor.VariableValue281break282end switch283end if284end sub285286287sub RSDKDraw288if Object.PropertyValue >= 3289TempValue0 = -3290TempValue0 += Object.PropertyValue291DrawSprite(TempValue0)292end if293294DrawSprite(Object.PropertyValue)295end sub296297298sub RSDKLoad299LoadSpriteSheet("R5/Objects.gif")300301// TODO: supporting other time periods302// surely there's some better way to do it than a bunch of unique and boring checkCurrentStageFolder checks?303SpriteFrame(-16, -16, 32, 32, 1, 51)304SpriteFrame(-32, -16, 64, 32, 34, 51)305SpriteFrame(-48, -16, 96, 32, 1, 84)306SpriteFrame(-16, -16, 32, 16, 65, 208)307SpriteFrame(-32, -16, 64, 16, 1, 208)308SpriteFrame(-48, -16, 96, 16, 1, 191)309310AddEditorVariable("Type")311SetActiveVariable("Type")312AddEnumVariable("Small", 0)313AddEnumVariable("Medium", 1)314AddEnumVariable("Large", 2)315AddEnumVariable("Small Conveyor", 3)316AddEnumVariable("Medium Conveyor", 4)317AddEnumVariable("Large Conveyor", 5)318end sub319320321