Path: blob/master/Sonic 2/Scripts/HPZ/CollapsingFloor.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: C Floor Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.delay13private alias object.value2 : object.collapseTable1415private alias 0 : CFLOOR_ACTIVE16private alias 1 : CFLOOR_COLLAPSE17private alias 2 : CFLOOR_COLLAPSED18private alias 3 : CFLOOR_NONE19private alias 4 : CFLOOR_TILEDELAY20private alias 5 : CFLOOR_TILEFALL2122// Player Aliases23private alias object.yvel : player.yvel242526// ========================27// Function Declarations28// ========================2930reserve function CFloor_DebugDraw31reserve function CFloor_DebugSpawn323334// ========================35// Tables36// ========================3738private table CFloor_tileFramesFlipX391, 2, 3, 4, 5, 6407, 8, 9, 10, 11, 1241end table4243private table CFloor_tileFramesNoFlip446, 5, 4, 3, 2, 14512, 11, 10, 9, 8, 746end table4748private table CFloor_collapseTable4930, 38, 46, 42, 34, 26506, 14, 22, 18, 10, 251end table525354// ========================55// Function Definitions56// ========================5758private function CFloor_DebugDraw59DrawSprite(0)60end function616263private function CFloor_DebugSpawn64CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)65object[tempObjectPos].collapseTable = CFloor_collapseTable66GetBit(temp0, object.direction, 0)67if temp0 == FACING_RIGHT68object[tempObjectPos].direction = FLIP_NONE69else70object[tempObjectPos].direction = FLIP_X71end if72end function737475// ========================76// Events77// ========================7879event ObjectUpdate80switch object.state81default82case CFLOOR_ACTIVE83break8485case CFLOOR_COLLAPSE86if object.timer < 1087object.timer++88else89temp5 = 090temp0 = 091temp3 = object.ypos92temp3 -= 0x8000093while temp0 < 294temp1 = 095temp2 = object.xpos96if object.direction == FLIP_X97temp2 -= 0x28000098else99temp2 += 0x280000100end if101102while temp1 < 6103if object.direction == FLIP_X104GetTableValue(temp6, temp5, CFloor_tileFramesFlipX)105else106GetTableValue(temp6, temp5, CFloor_tileFramesNoFlip)107end if108109CreateTempObject(TypeName[C Floor], temp6, temp2, temp3)110object[tempObjectPos].state = CFLOOR_TILEDELAY111GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)112temp5++113temp6++114temp1++115if object.direction == FLIP_X116temp2 += 0x100000117else118temp2 -= 0x100000119end if120loop121object.frame += 2122temp0++123temp3 += 0x100000124loop125PlaySfx(SfxName[Ledge Break], false)126object.timer = 0127object.state++128end if129break130131case CFLOOR_COLLAPSED132if object.timer < 32133object.timer++134else135object.timer = 0136object.state++137end if138break139140case CFLOOR_NONE141break142143case CFLOOR_TILEDELAY144if object.timer < object.delay145object.timer++146else147object.timer = 0148object.state++149end if150break151152case CFLOOR_TILEFALL153object.ypos += object.yvel154object.yvel += 0x4000155if object.outOfBounds == true156object.type = TypeName[Blank Object]157end if158break159160end switch161162if object.state < CFLOOR_TILEDELAY163temp0 = object.xpos164temp0 >>= 16165temp0 -= camera[0].xpos166Abs(temp0)167temp1 = screen.xcenter168temp1 += 128169if temp0 > temp1170object.state = CFLOOR_ACTIVE171object.timer = 0172if object.priority != PRIORITY_XBOUNDS_DESTROY173object.priority = PRIORITY_BOUNDS174end if175end if176end if177178if object.state < CFLOOR_NONE179foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)180if object.propertyValue < 2181if player[currentPlayer].yvel >= 0182BoxCollisionTest(C_PLATFORM, object.entityPos, -48, -16, 48, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)183else184checkResult = COL_NONE185end if186else187BoxCollisionTest(C_SOLID, object.entityPos, -48, -16, 48, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)188end if189190if checkResult == COL_TOP191if object.state == CFLOOR_ACTIVE192object.state = CFLOOR_COLLAPSE193if object.priority != PRIORITY_XBOUNDS_DESTROY194object.priority = PRIORITY_ACTIVE195end if196end if197end if198next199end if200end event201202203event ObjectDraw204switch object.state205case CFLOOR_ACTIVE206case CFLOOR_COLLAPSE207DrawSprite(0)208break209210case CFLOOR_COLLAPSED211case CFLOOR_NONE212break213214case CFLOOR_TILEDELAY215case CFLOOR_TILEFALL216DrawSprite(object.propertyValue)217break218219end switch220end event221222223event ObjectStartup224LoadSpriteSheet("HPZ/Objects.gif")225SpriteFrame(-48, -16, 96, 32, 66, 223)226SpriteFrame(-8, -8, 16, 16, 66, 223)227SpriteFrame(-8, -8, 16, 16, 82, 223)228SpriteFrame(-8, -8, 16, 16, 98, 223)229SpriteFrame(-8, -8, 16, 16, 114, 223)230SpriteFrame(-8, -8, 16, 16, 130, 223)231SpriteFrame(-8, -8, 16, 16, 146, 223)232SpriteFrame(-8, -8, 16, 16, 66, 239)233SpriteFrame(-8, -8, 16, 16, 82, 239)234SpriteFrame(-8, -8, 16, 16, 98, 239)235SpriteFrame(-8, -8, 16, 16, 114, 239)236SpriteFrame(-8, -8, 16, 16, 130, 239)237SpriteFrame(-8, -8, 16, 16, 146, 239)238239foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)240object[arrayPos0].collapseTable = CFloor_collapseTable241next242243SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)244SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)245SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)246DebugMode_ObjCount++247end event248249250// ========================251// Editor Events252// ========================253254event RSDKEdit255if editor.returnVariable == true256switch editor.variableID257case EDIT_VAR_PROPVAL // property value258checkResult = object.propertyValue259checkResult &= 3260break261262case 0 // type263checkResult = object.propertyValue264checkResult &= 3265break266267end switch268else269switch editor.variableID270case EDIT_VAR_PROPVAL // property value271object.propertyValue = editor.variableValue272object.propertyValue &= 3273break274275case 0 // type276object.propertyValue = editor.variableValue277object.propertyValue &= 3278break279280end switch281end if282end event283284285event RSDKDraw286DrawSprite(0)287end event288289290event RSDKLoad291LoadSpriteSheet("HPZ/Objects.gif")292SpriteFrame(-48, -16, 96, 32, 66, 223)293294AddEditorVariable("type")295SetActiveVariable("type")296AddEnumVariable("Bottom (Top Solid)", 0)297AddEnumVariable("Bottom (All Solid)", 2)298// 1 & 3 go unused since direction is set via editor rather than as a propertyValue299end event300301302