Path: blob/master/Sonic 1/Scripts/SLZ/RisingPlatform.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Rising Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011// Platform12private alias object.value0 : object.startPos.x13private alias object.value1 : object.startPos.y14private alias object.value2 : object.collisionOffset.x15private alias object.value3 : object.collisionOffset.y16private alias object.value4 : object.moveVel17private alias object.value5 : object.halfwayDist18private alias object.value6 : object.movePos19private alias object.value7 : object.reverseDir20private alias object.value8 : object.finishedMoving2122// Spawner23private alias object.value0 : object.interval24private alias object.value1 : object.timer2526private alias 0 : RISINGPLAT_MOVE_UP_IDLE27private alias 1 : RISINGPLAT_MOVE_UP28private alias 2 : RISINGPLAT_MOVE_DOWN_IDLE29private alias 3 : RISINGPLAT_MOVE_DOWN30private alias 4 : RISINGPLAT_MOVE_UP_RIGHT_IDLE31private alias 5 : RISINGPLAT_MOVE_UP_RIGHT32private alias 6 : RISINGPLAT_MOVE_DOWN_LEFT_IDLE33private alias 7 : RISINGPLAT_MOVE_DOWN_LEFT34private alias 8 : RISINGPLAT_FADEAWAY35private alias 9 : RISINGPLAT_SPAWNER36private alias 10 : RISINGPLAT_TRYRESET3738// Player Aliases39private alias object.xpos : player.xpos40private alias object.ypos : player.ypos4142private alias object.value17 : debugMode.currentSelection434445// ========================46// Function Declarations47// ========================4849reserve function RisingPlatform_DebugDraw50reserve function RisingPlatform_DebugSpawn51reserve function RisingPlatform_HandleMovement52reserve function RisingPlatform_HandleMoveFade53reserve function RisingPlatform_HandleCollisions54reserve function RisingPlatform_CheckOnScreen555657// ========================58// Static Values59// ========================6061private value RisingPlatform_startDebugID = 0626364// ========================65// Tables66// ========================6768private table RisingPlatform_distanceTable690x400000700x800000710xD00000720x400000730x800000740xD00000750x500000760x900000770xB00000780x500000790x900000800xB00000810x800000820x800000830xC0000084end table8586private table RisingPlatform_stateTable870 // RISINGPLAT_MOVE_UP_IDLE880 // RISINGPLAT_MOVE_UP_IDLE890 // RISINGPLAT_MOVE_UP_IDLE902 // RISINGPLAT_MOVE_DOWN_IDLE912 // RISINGPLAT_MOVE_DOWN_IDLE922 // RISINGPLAT_MOVE_DOWN_IDLE930 // RISINGPLAT_MOVE_UP_IDLE940 // RISINGPLAT_MOVE_UP_IDLE950 // RISINGPLAT_MOVE_UP_IDLE962 // RISINGPLAT_MOVE_DOWN_IDLE972 // RISINGPLAT_MOVE_DOWN_IDLE982 // RISINGPLAT_MOVE_DOWN_IDLE994 // RISINGPLAT_MOVE_UP_RIGHT_IDLE1006 // RISINGPLAT_MOVE_DOWN_LEFT_IDLE1018 // RISINGPLAT_FADEAWAY102end table103104105// ========================106// Function Definitions107// ========================108109private function RisingPlatform_DebugDraw110DrawSprite(0)111end function112113114private function RisingPlatform_DebugSpawn115temp0 = debugMode[0].currentSelection116temp0 -= RisingPlatform_startDebugID117118CreateTempObject(TypeName[Rising Platform], temp0, object.xpos, object.ypos)119120if temp0 < 14121object[tempObjectPos].startPos.x = object[tempObjectPos].xpos122object[tempObjectPos].startPos.y = object[tempObjectPos].ypos123object[tempObjectPos].collisionOffset.x = object[tempObjectPos].xpos124object[tempObjectPos].collisionOffset.y = object[tempObjectPos].ypos125temp0 = object[tempObjectPos].propertyValue126temp0 &= 15127GetTableValue(object[tempObjectPos].halfwayDist, temp0, RisingPlatform_distanceTable)128GetTableValue(object[tempObjectPos].state, temp0, RisingPlatform_stateTable)129object[tempObjectPos].movePos = 0130object[tempObjectPos].reverseDir = 0131object[tempObjectPos].finishedMoving = false132else133object[tempObjectPos].interval = 60134object[tempObjectPos].timer = 60135object[tempObjectPos].state = RISINGPLAT_SPAWNER136object[tempObjectPos].priority = PRIORITY_XBOUNDS137end if138end function139140141private function RisingPlatform_HandleMovement142if object.reverseDir == false143if object.moveVel < 0x80000144object.moveVel += 0x1000145end if146else147if object.moveVel > 0x4000148object.moveVel -= 0x1000149end if150end if151152if object.movePos > object.halfwayDist153object.reverseDir = true154end if155156object.movePos += object.moveVel157158temp0 = object.halfwayDist159temp0 <<= 1160161if object.movePos >= temp0162object.finishedMoving = true163object.movePos = temp0164end if165end function166167168private function RisingPlatform_HandleMoveFade169if object.reverseDir == false170if object.moveVel < 0x80000171object.moveVel += 0x1000172end if173else174if object.moveVel > 0175object.moveVel -= 0x1000176end if177end if178179if object.movePos > object.halfwayDist180object.reverseDir = true181end if182183object.movePos += object.moveVel184185if object.moveVel == 0186object.finishedMoving = true187end if188end function189190191private function RisingPlatform_HandleCollisions192temp6 = object.xpos193temp6 &= 0xFFFF0000194temp0 = object.collisionOffset.x195temp0 &= 0xFFFF0000196197temp6 -= temp0198temp7 = object.ypos199temp7 &= 0xFFFF0000200temp0 = object.collisionOffset.y201temp0 &= 0xFFFF0000202temp7 -= temp0203204foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)205BoxCollisionTest(C_PLATFORM, object.entityPos, -40, -8, 40, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)206if checkResult == true207player[currentPlayer].xpos -= temp6208player[currentPlayer].ypos -= temp7209end if210next211212object.xpos = object.collisionOffset.x213object.ypos = object.collisionOffset.y214end function215216217private function RisingPlatform_CheckOnScreen218if object.outOfBounds == true219object.xpos = object.startPos.x220object.ypos = object.startPos.y221object.collisionOffset.x = object.xpos222object.collisionOffset.y = object.ypos223object.movePos = 0224object.reverseDir = 0225object.finishedMoving = false226object.state = RISINGPLAT_TRYRESET227end if228end function229230231// ========================232// Events233// ========================234235event ObjectUpdate236switch object.state237case RISINGPLAT_MOVE_UP_IDLE238case RISINGPLAT_MOVE_DOWN_IDLE239case RISINGPLAT_MOVE_UP_RIGHT_IDLE240case RISINGPLAT_MOVE_DOWN_LEFT_IDLE241foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)242BoxCollisionTest(C_PLATFORM, object.entityPos, -40, -8, 40, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)243if checkResult == true244object.state++245object.priority = PRIORITY_ACTIVE246end if247next248break249250case RISINGPLAT_MOVE_UP251CallFunction(RisingPlatform_HandleMovement)252object.collisionOffset.y = object.movePos253FlipSign(object.collisionOffset.y)254object.collisionOffset.y += object.startPos.y255CallFunction(RisingPlatform_HandleCollisions)256CallFunction(RisingPlatform_CheckOnScreen)257break258259case RISINGPLAT_MOVE_DOWN260CallFunction(RisingPlatform_HandleMovement)261object.collisionOffset.y = object.movePos262object.collisionOffset.y += object.startPos.y263CallFunction(RisingPlatform_HandleCollisions)264CallFunction(RisingPlatform_CheckOnScreen)265break266267case RISINGPLAT_MOVE_UP_RIGHT268CallFunction(RisingPlatform_HandleMovement)269object.collisionOffset.y = object.movePos270object.collisionOffset.y >>= 1271FlipSign(object.collisionOffset.y)272object.collisionOffset.y += object.startPos.y273274object.collisionOffset.x = object.movePos275object.collisionOffset.x += object.startPos.x276CallFunction(RisingPlatform_HandleCollisions)277CallFunction(RisingPlatform_CheckOnScreen)278break279280case RISINGPLAT_MOVE_DOWN_LEFT281CallFunction(RisingPlatform_HandleMovement)282object.collisionOffset.y = object.movePos283object.collisionOffset.y >>= 1284object.collisionOffset.y += object.startPos.y285286object.collisionOffset.x = object.movePos287FlipSign(object.collisionOffset.x)288object.collisionOffset.x += object.startPos.x289CallFunction(RisingPlatform_HandleCollisions)290CallFunction(RisingPlatform_CheckOnScreen)291break292293case RISINGPLAT_FADEAWAY294CallFunction(RisingPlatform_HandleMoveFade)295object.collisionOffset.y = object.movePos296FlipSign(object.collisionOffset.y)297object.collisionOffset.y += object.startPos.y298CallFunction(RisingPlatform_HandleCollisions)299temp0 = object.moveVel300temp0 >>= 8301if temp0 > 0x100302temp0 = 0x100303end if304object.alpha = temp0305306if object.finishedMoving == true307object.type = TypeName[Blank Object]308end if309break310311case RISINGPLAT_SPAWNER312object.timer--313if object.timer <= 0314CreateTempObject(TypeName[Rising Platform], 0, object.xpos, object.ypos)315object[tempObjectPos].startPos.x = object.xpos316object[tempObjectPos].startPos.y = object.ypos317object[tempObjectPos].collisionOffset.x = object.xpos318object[tempObjectPos].collisionOffset.y = object.ypos319temp0 = 14320GetTableValue(object[tempObjectPos].halfwayDist, temp0, RisingPlatform_distanceTable)321GetTableValue(object[tempObjectPos].state, temp0, RisingPlatform_stateTable)322object[tempObjectPos].movePos = 0323object[tempObjectPos].reverseDir = false324object[tempObjectPos].finishedMoving = false325object[tempObjectPos].inkEffect = INK_ALPHA326object.timer = object.interval327end if328break329330case RISINGPLAT_TRYRESET331if object.outOfBounds == true332temp0 = object.propertyValue333temp0 &= 15334GetTableValue(object.halfwayDist, temp0, RisingPlatform_distanceTable)335GetTableValue(object.state, temp0, RisingPlatform_stateTable)336object.priority = PRIORITY_BOUNDS337end if338break339340end switch341end event342343344event ObjectDraw345if object.state == RISINGPLAT_FADEAWAY346DrawSpriteFX(0, FX_INK, object.xpos, object.ypos)347else348if object.state < RISINGPLAT_SPAWNER349DrawSprite(0)350end if351end if352end event353354355event ObjectStartup356LoadSpriteSheet("SLZ/Objects.gif")357SpriteFrame(-40, -8, 80, 32, 84, 188)358359foreach (TypeName[Rising Platform], arrayPos0, ALL_ENTITIES)360GetBit(temp0, object[arrayPos0].propertyValue, 7)361if temp0 == false362object[arrayPos0].startPos.x = object[arrayPos0].xpos363object[arrayPos0].startPos.y = object[arrayPos0].ypos364object[arrayPos0].collisionOffset.x = object[arrayPos0].xpos365object[arrayPos0].collisionOffset.y = object[arrayPos0].ypos366temp0 = object[arrayPos0].propertyValue367temp0 &= 15368GetTableValue(object[arrayPos0].halfwayDist, temp0, RisingPlatform_distanceTable)369GetTableValue(object[arrayPos0].state, temp0, RisingPlatform_stateTable)370object[arrayPos0].movePos = 0371object[arrayPos0].reverseDir = false372object[arrayPos0].finishedMoving = false373else374object[arrayPos0].interval = object[arrayPos0].propertyValue375object[arrayPos0].interval &= 0x7F376object[arrayPos0].interval *= 6377object[arrayPos0].timer = object[arrayPos0].interval378object[arrayPos0].state = RISINGPLAT_SPAWNER379object[arrayPos0].priority = PRIORITY_XBOUNDS380end if381next382383temp0 = 0384RisingPlatform_startDebugID = DebugMode_ObjCount385while temp0 < 15386SetTableValue(TypeName[Rising Platform], DebugMode_ObjCount, DebugMode_TypesTable)387SetTableValue(RisingPlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)388SetTableValue(RisingPlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)389DebugMode_ObjCount++390temp0++391loop392end event393394395// ========================396// Editor Events397// ========================398399event RSDKEdit400if editor.returnVariable == true401switch editor.variableID402case EDIT_VAR_PROPVAL // property value403checkResult = object.propertyValue404break405406case 0 // type407GetBit(temp0, object.propertyValue, 7)408if temp0 == 0409checkResult = object.propertyValue410checkResult &= 0x0F411else412checkResult = 0413end if414break415416case 1 // spawnInterval417checkResult = object.propertyValue418checkResult &= 0x7F419break420421end switch422else423switch editor.variableID424case EDIT_VAR_PROPVAL // property value425object.propertyValue = editor.variableValue426break427428case 0 // type429editor.variableValue &= 0x0F430431object.propertyValue = editor.variableValue432break433434case 1 // spawnInterval435if editor.variableValue > 0 // it is "possible" to do 0 interval, but that would prolly just kill the game so actually no its not :]436editor.variableValue &= 0x7F437438object.propertyValue = editor.variableValue439object.propertyValue |= 0x80440else441object.propertyValue = 0442end if443break444445end switch446end if447end event448449450event RSDKDraw451DrawSprite(0)452end event453454455event RSDKLoad456LoadSpriteSheet("SLZ/Objects.gif")457SpriteFrame(-40, -8, 80, 32, 84, 188)458459AddEditorVariable("type")460SetActiveVariable("type")461AddEnumVariable("Up (Slow)", 0)462AddEnumVariable("Up (Med)", 1)463AddEnumVariable("Up (Fast)", 2)464AddEnumVariable("Down (Slow)", 3)465AddEnumVariable("Down (Med)", 4)466AddEnumVariable("Down (Fast)", 5)467AddEnumVariable("Up (Slow, Faster)", 6)468AddEnumVariable("Up (Med, Faster)", 7)469AddEnumVariable("Up (Fast, Faster)", 8)470AddEnumVariable("Down (Slow, Faster)", 9)471AddEnumVariable("Down (Med, Faster)", 10)472AddEnumVariable("Down (Fast, Faster)", 11)473AddEnumVariable("Up-Right", 12)474AddEnumVariable("Down-Left", 13)475476// Intervals of 6 (so 6, 12, 18, 24, etc...)477AddEditorVariable("spawnInterval")478SetActiveVariable("spawnInterval")479end event480481482