Path: blob/master/Sonic 2/Scripts/EHZ/FPlatform.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Fall Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.stood12private alias object.value1 : object.collisionOffset.y13private alias object.value2 : object.timer14private alias object.value3 : object.centerPos.y15private alias object.value4 : object.stoodAngle1617private alias 0 : FPLATFORM_FALL18private alias 1 : FPLATFORM_STATIC1920private alias 0 : FPLATFORM_IDLE21private alias 1 : FPLATFORM_FALLING_SOLID22private alias 2 : FPLATFORM_FALLING23private alias 3 : FPLATFORM_OFFSCREEN2425// Player Aliases26private alias object.ypos : player.ypos27private alias object.yvel : player.yvel28private alias object.gravity : player.gravity293031// ========================32// Function Declarations33// ========================3435reserve function FallPlatform_DebugDraw36reserve function FallPlatform_DebugSpawn373839// ========================40// Function Definitions41// ========================4243private function FallPlatform_DebugDraw44DrawSprite(0)45end function464748private function FallPlatform_DebugSpawn49CreateTempObject(TypeName[Fall Platform], 0, object.xpos, object.ypos)50object[tempObjectPos].centerPos.y = object[tempObjectPos].ypos51end function525354// ========================55// Events56// ========================5758event ObjectUpdate59if object.stood == true60if object.timer == 061object.priority = PRIORITY_ACTIVE62object.timer = 3063end if6465if object.stoodAngle < 6466object.stoodAngle += 467end if68else69if object.stoodAngle > 070object.stoodAngle -= 471end if72end if7374temp0 = object.ypos75temp0 &= 0xFFFF000076switch object.state77case FPLATFORM_IDLE78temp1 = object.stoodAngle79temp1 <<= 180Sin(temp2, temp1)81temp2 <<= 982object.ypos = object.centerPos.y83object.ypos += temp284if object.propertyValue == FPLATFORM_FALL85if object.timer != 086object.timer--87if object.timer == 088object.state++89object.timer = 3290end if91end if92end if93break9495case FPLATFORM_FALLING_SOLID96object.timer--97if object.timer == 098object.state++99foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)100BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -8, 32, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)101if checkResult == true102player[currentPlayer].ypos += object.yvel103player[currentPlayer].yvel = object.yvel104player[currentPlayer].yvel -= 0x3800105player[currentPlayer].gravity = GRAVITY_AIR106end if107next108end if109// [FallThrough]110case FPLATFORM_FALLING111object.ypos += object.yvel112object.yvel += 0x3800113114if object.outOfBounds == true115object.ypos = object.centerPos.y116object.yvel = 0117object.timer = 0118object.state++119end if120break121122case FPLATFORM_OFFSCREEN123if object.outOfBounds == true124object.state = FPLATFORM_IDLE125object.priority = PRIORITY_BOUNDS126end if127break128129end switch130131object.collisionOffset.y = object.ypos132object.collisionOffset.y &= 0xFFFF0000133object.collisionOffset.y -= temp0134object.stood = false135136if object.state < FPLATFORM_FALLING137temp1 = object.ypos138139object.ypos = temp0140foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)141BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -8, 32, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)142if checkResult == true143object.stood = true144player[currentPlayer].ypos += object.collisionOffset.y145end if146next147148object.ypos = temp1149end if150end event151152153event ObjectDraw154if object.state < FPLATFORM_OFFSCREEN155DrawSprite(0)156end if157end event158159160event ObjectStartup161CheckCurrentStageFolder("Zone01")162if checkResult == true163LoadSpriteSheet("EHZ/Objects.gif")164SpriteFrame(-32, -12, 64, 32, 127, 98)165else166LoadSpriteSheet("MBZ/Objects.gif")167SpriteFrame(-32, -8, 64, 32, 1, 402)168end if169170foreach (TypeName[Fall Platform], arrayPos0, ALL_ENTITIES)171object[arrayPos0].centerPos.y = object[arrayPos0].ypos172next173174SetTableValue(TypeName[Fall Platform], DebugMode_ObjCount, DebugMode_TypesTable)175SetTableValue(FallPlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)176SetTableValue(FallPlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)177DebugMode_ObjCount++178end event179180181// ========================182// Editor Events183// ========================184185event RSDKEdit186if editor.returnVariable == true187switch editor.variableID188case EDIT_VAR_PROPVAL // property value189checkResult = object.propertyValue190break191192case 0 // type193checkResult = object.propertyValue194break195196end switch197else198switch editor.variableID199case EDIT_VAR_PROPVAL // property value200object.propertyValue = editor.variableValue201break202203case 0 // type204object.propertyValue = editor.variableValue205break206207end switch208end if209end event210211212event RSDKDraw213DrawSprite(0)214215CheckEqual(editor.showGizmos, true)216temp0 = checkResult217CheckEqual(object.propertyValue, FPLATFORM_FALL)218temp0 &= checkResult219if temp0 == true220// Draw a dashed line to indicate that this platform is of the falling variety221// (Otherwise it's just the generic platform sprite, which is shared between two other objects)222223editor.drawingOverlay = true224225226temp0 = object.ypos227228temp1 = object.ypos229temp1 += 0x60000230231temp2 = object.ypos232temp2 += 0x3E0000233234while temp0 < temp2235DrawLine(object.xpos, temp0, object.xpos, temp1, 255, 255, 255)236237temp0 += 0xC0000238temp1 += 0xC0000239loop240241editor.drawingOverlay = false242end if243end event244245246event RSDKLoad247CheckCurrentStageFolder("Zone01")248if checkResult == true249LoadSpriteSheet("EHZ/Objects.gif")250SpriteFrame(-32, -12, 64, 32, 127, 98)251else252LoadSpriteSheet("MBZ/Objects.gif")253SpriteFrame(-32, -8, 64, 32, 1, 402)254end if255256AddEditorVariable("type")257SetActiveVariable("type")258AddEnumVariable("Falling Platform", FPLATFORM_FALL)259AddEnumVariable("Static Platform", FPLATFORM_STATIC)260end event261262263