Path: blob/main/Scripts/R4/CPlatform.txt
1319 views
//------------Sonic CD Collapsing Platform Script-------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.HitboxLeft6#alias Object.Value1 : Object.HitboxRight7#alias Object.Value2 : Object.CollapseDelay8#alias Object.Value3 : Object.BridgeLength9#alias Object.Value4 : Object.YVelocity1011// States12#alias 0 : CPLATFORM_CHECK_COLLISION13#alias 1 : CPLATFORM_CRUMBLE_RIGHT14#alias 2 : CPLATFORM_CRUMBLE_LEFT15#alias 3 : CPLATFORM_COLLAPSE_LEFT16#alias 4 : CPLATFORM_COLLAPSE_RIGHT17#alias 5 : CPLATFORM_RESTORE // Sonic Nexus leftover18#alias 6 : CPLATFORM_FALLING_DEBRIS1920// Stage SFX21#alias 3 : SFX_S_CRUMBLE2223// Priority24#alias 0 : PRIORITY_BOUNDS25#alias 1 : PRIORITY_ACTIVE262728sub ObjectMain29switch Object.State30case CPLATFORM_CRUMBLE_RIGHT31if Object.CollapseDelay > 032Object.CollapseDelay--33else34PlayStageSfx(SFX_S_CRUMBLE, false)35Object.State = CPLATFORM_COLLAPSE_RIGHT36end if37break3839case CPLATFORM_CRUMBLE_LEFT40if Object.CollapseDelay > 041Object.CollapseDelay--42else43PlayStageSfx(SFX_S_CRUMBLE, false)44Object.State = CPLATFORM_COLLAPSE_LEFT45end if46break4748case CPLATFORM_COLLAPSE_LEFT49Object.CollapseDelay++50if Object.CollapseDelay == 1251Object.CollapseDelay = 052if Object.HitboxLeft < Object.HitboxRight53Object.BridgeLength--54Object.HitboxLeft += 165556TempValue0 = Object.HitboxLeft57TempValue0 -= 858TempValue0 <<= 1659TempValue0 += Object.XPos6061TempValue1 = Object.YPos62TempValue1 -= 0x800006364CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)65Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS66Object[TempObjectPos].YVelocity = -0x1000067TempValue1 += 0x1000006869CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)70Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS71else72ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)73end if74end if75break7677case CPLATFORM_COLLAPSE_RIGHT78Object.CollapseDelay++79if Object.CollapseDelay == 1280Object.CollapseDelay = 081if Object.HitboxRight > Object.HitboxLeft82Object.BridgeLength--83Object.HitboxRight -= 168485TempValue0 = Object.HitboxRight86TempValue0 += 887TempValue0 <<= 1688TempValue0 += Object.XPos8990TempValue1 = Object.YPos91TempValue1 -= 0x800009293CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)94Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS95Object[TempObjectPos].YVelocity = -0x1000096TempValue1 += 0x1000009798CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)99Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS100else101ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)102end if103end if104break105106case CPLATFORM_RESTORE107if Object.OutOfBounds == true108Object.State = CPLATFORM_CHECK_COLLISION109110Object.BridgeLength = Object.PropertyValue111112Object.HitboxLeft = Object.PropertyValue113Object.HitboxLeft <<= 3114115Object.HitboxRight = Object.HitboxLeft116FlipSign(Object.HitboxLeft)117118Object.Priority = PRIORITY_BOUNDS119Object.CollapseDelay = 0120end if121break122123case CPLATFORM_FALLING_DEBRIS124Object.YVelocity += 0x4000125126if Object.YVelocity > 0127Object.YPos += Object.YVelocity128end if129130if Object.OutOfBounds == true131Object.Type = TypeName[Blank Object]132end if133break134135end switch136end sub137138139sub ObjectPlayerInteraction140if Object.State == CPLATFORM_CHECK_COLLISION141PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)142if CheckResult == true143Object.CollapseDelay = 1144Object.Priority = PRIORITY_ACTIVE145146if Player.XPos > Object.XPos147Object.State = CPLATFORM_CRUMBLE_RIGHT148else149Object.State = CPLATFORM_CRUMBLE_LEFT150end if151end if152else153PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)154end if155end sub156157158sub ObjectDraw159switch Object.State160case CPLATFORM_CHECK_COLLISION161case CPLATFORM_CRUMBLE_RIGHT162case CPLATFORM_CRUMBLE_LEFT163case CPLATFORM_COLLAPSE_RIGHT164TempValue0 = 0165166TempValue1 = Object.HitboxLeft167TempValue1 <<= 16168TempValue1 += 0x80000169TempValue1 += Object.XPos170171while TempValue0 < Object.BridgeLength172DrawSpriteXY(0, TempValue1, Object.YPos)173TempValue0++174TempValue1 += 0x100000175loop176break177178case CPLATFORM_COLLAPSE_LEFT179TempValue0 = 0180181TempValue1 = Object.HitboxRight182TempValue1 <<= 16183TempValue1 -= 0x80000184TempValue1 += Object.XPos185186while TempValue0 < Object.BridgeLength187DrawSpriteXY(0, TempValue1, Object.YPos)188TempValue0++189TempValue1 -= 0x100000190loop191break192193case CPLATFORM_FALLING_DEBRIS194DrawSprite(1)195break196end switch197end sub198199200sub ObjectStartup201LoadSpriteSheet("R4/Objects.gif")202203SpriteFrame(-8, -16, 16, 32, 1, 198) // #0 - Collapsing Platform204SpriteFrame(-8, -8, 16, 16, 1, 198) // #1 - Collapsing Platform debris205206// Used to be below LoadSpriteSheet, moved here for consistency207ArrayPos0 = 32208while ArrayPos0 < 1056209if Object[ArrayPos0].Type == TypeName[CPlatform]210Object[ArrayPos0].BridgeLength = Object[ArrayPos0].PropertyValue211212Object[ArrayPos0].HitboxLeft = Object[ArrayPos0].PropertyValue213Object[ArrayPos0].HitboxLeft <<= 3214215Object[ArrayPos0].HitboxRight = Object[ArrayPos0].HitboxLeft216FlipSign(Object[ArrayPos0].HitboxLeft)217end if218ArrayPos0++219loop220end sub221222223// ========================224// Editor Subs225// ========================226227sub RSDKDraw228TempValue0 = 0229230TempValue1 = Object.PropertyValue231TempValue1 <<= 3232FlipSign(TempValue1)233234TempValue2 = TempValue1235TempValue2 <<= 16236TempValue2 += 0x80000237TempValue2 += Object.XPos238239while TempValue0 < Object.PropertyValue240DrawSpriteXY(0, TempValue2, Object.YPos)241TempValue0++242TempValue2 += 0x100000243loop244end sub245246247sub RSDKLoad248LoadSpriteSheet("R4/Objects.gif")249250SpriteFrame(-8, -16, 16, 32, 1, 198) // #0 - Collapsing Platform251252SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")253end sub254255256