Path: blob/main/Scripts/R8/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 0 : SFX_S_CRUMBLE2223// Priority24#alias 0 : PRIORITY_BOUNDS25#alias 1 : PRIORITY_ACTIVE2627// Property Values28#alias 0 : PLATFORM_DEFAULT29#alias 1 : PLATFORM_DEBRIS_130#alias 2 : PLATFORM_DEBRIS_2313233sub ObjectMain34switch Object.State35case CPLATFORM_CRUMBLE_RIGHT36if Object.CollapseDelay > 037Object.CollapseDelay--38else39PlayStageSfx(SFX_S_CRUMBLE, false)40Object.State = CPLATFORM_COLLAPSE_RIGHT41end if42break4344case CPLATFORM_CRUMBLE_LEFT45if Object.CollapseDelay > 046Object.CollapseDelay--47else48PlayStageSfx(SFX_S_CRUMBLE, false)49Object.State = CPLATFORM_COLLAPSE_LEFT50end if51break5253case CPLATFORM_COLLAPSE_LEFT54Object.CollapseDelay++55if Object.CollapseDelay == 1056Object.CollapseDelay = 057if Object.HitboxLeft < Object.HitboxRight58Object.BridgeLength--59Object.HitboxLeft += 166061TempValue0 = Object.HitboxLeft62TempValue0 -= 863TempValue0 <<= 1664TempValue0 += Object.XPos6566TempValue1 = Object.YPos67TempValue1 -= 0x800006869CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)70Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS71Object[TempObjectPos].YVelocity = -0x1000072Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_173TempValue1 += 0x10000074CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)75Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS76Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_277else78ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)79end if80end if81break8283case CPLATFORM_COLLAPSE_RIGHT84Object.CollapseDelay++85if Object.CollapseDelay == 1086Object.CollapseDelay = 087if Object.HitboxRight > Object.HitboxLeft88Object.BridgeLength--89Object.HitboxRight -= 169091TempValue0 = Object.HitboxRight92TempValue0 += 893TempValue0 <<= 1694TempValue0 += Object.XPos9596TempValue1 = Object.YPos97TempValue1 -= 0x800009899CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)100Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS101Object[TempObjectPos].YVelocity = -0x10000102Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_1103TempValue1 += 0x100000104CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)105Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS106Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_2107else108ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)109end if110end if111break112113case CPLATFORM_RESTORE114if Object.OutOfBounds == true115Object.State = CPLATFORM_CHECK_COLLISION116117Object.BridgeLength = Object.PropertyValue118119Object.HitboxLeft = Object.PropertyValue120Object.HitboxLeft <<= 3121122Object.HitboxRight = Object.HitboxLeft123FlipSign(Object.HitboxLeft)124125Object.Priority = PRIORITY_BOUNDS126Object.CollapseDelay = 0127end if128break129130case CPLATFORM_FALLING_DEBRIS131Object.YVelocity += 0x4000132133if Object.YVelocity > 0134Object.YPos += Object.YVelocity135end if136137if Object.OutOfBounds == true138Object.Type = TypeName[Blank Object]139end if140break141end switch142end sub143144145sub ObjectPlayerInteraction146if Object.State == CPLATFORM_CHECK_COLLISION147PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)148if Object.PropertyValue > 1149if CheckResult == true150Object.CollapseDelay = 1151Object.Priority = PRIORITY_ACTIVE152153if Player.XPos > Object.XPos154Object.State = CPLATFORM_CRUMBLE_RIGHT155else156Object.State = CPLATFORM_CRUMBLE_LEFT157end if158end if159end if160else161PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)162end if163end sub164165166sub ObjectDraw167switch Object.State168case CPLATFORM_CHECK_COLLISION169case CPLATFORM_CRUMBLE_RIGHT170case CPLATFORM_CRUMBLE_LEFT171case CPLATFORM_COLLAPSE_RIGHT172TempValue0 = 0173174TempValue1 = Object.HitboxLeft175TempValue1 <<= 16176TempValue1 += 0x80000177TempValue1 += Object.XPos178179while TempValue0 < Object.BridgeLength180DrawSpriteXY(0, TempValue1, Object.YPos)181TempValue0++182TempValue1 += 0x100000183loop184break185186case CPLATFORM_COLLAPSE_LEFT187TempValue0 = 0188TempValue1 = Object.HitboxRight189TempValue1 <<= 16190TempValue1 -= 0x80000191TempValue1 += Object.XPos192while TempValue0 < Object.BridgeLength193DrawSpriteXY(0, TempValue1, Object.YPos)194TempValue0++195TempValue1 -= 0x100000196loop197break198199case CPLATFORM_FALLING_DEBRIS200DrawSprite(Object.PropertyValue)201break202end switch203end sub204205206sub ObjectStartup207LoadSpriteSheet("R8/Objects.gif")208209SpriteFrame(-8, -16, 16, 32, 222, 212) // #0 - Collapsing Platform210SpriteFrame(-8, -8, 16, 16, 222, 212) // #1 - Collapsing Platform half 1211SpriteFrame(-8, -8, 16, 16, 222, 228) // #2 - Collapsing Platform half 2212213// Used to be below LoadSpriteSheet, moved here for consistency with the rest of scripts214ArrayPos0 = 32215while ArrayPos0 < 1056216if Object[ArrayPos0].Type == TypeName[CPlatform]217Object[ArrayPos0].BridgeLength = Object[ArrayPos0].PropertyValue218Object[ArrayPos0].HitboxLeft = Object[ArrayPos0].PropertyValue219Object[ArrayPos0].HitboxLeft <<= 3220Object[ArrayPos0].HitboxRight = Object[ArrayPos0].HitboxLeft221FlipSign(Object[ArrayPos0].HitboxLeft)222end if223ArrayPos0++224loop225end sub226227228// ========================229// Editor Subs230// ========================231232sub RSDKDraw233TempValue0 = 0234235TempValue1 = Object.PropertyValue236TempValue1 <<= 3237FlipSign(TempValue1)238239TempValue2 = TempValue1240TempValue2 <<= 16241TempValue2 += 0x80000242TempValue2 += Object.XPos243244while TempValue0 < Object.PropertyValue245DrawSpriteXY(0, TempValue2, Object.YPos)246TempValue0++247TempValue2 += 0x100000248loop249end sub250251252sub RSDKLoad253LoadSpriteSheet("R8/Objects.gif")254255SpriteFrame(-8, -16, 16, 32, 222, 212) // #0 - Collapsing Platform256257SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")258end sub259260261