Path: blob/master/Sonic 1/Scripts/SBZ/BeltPlatform.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Belt Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.movePos.x12private alias object.value1 : object.movePos.y13private alias object.value2 : object.collisionOffset.x14private alias object.value3 : object.collisionOffset.y15private alias object.value4 : object.tablePtr16private alias object.value5 : object.tablePos17private alias object.value6 : object.tableSize1819// Player Aliases20private alias object.xpos : player.xpos21private alias object.ypos : player.ypos222324// ========================25// Function Declarations26// ========================2728reserve function BeltPlatform_UpdateMovement293031// ========================32// Tables33// ========================3435private table BeltPlatform_frameTable360, 1, 2, 3, 4, 3, 2, 137end table3839private table BeltPlatform_directionTable400, 0, 0, 0410, 2, 2, 2422, 3, 3, 3433, 1, 1, 144end table4546private table BeltPlatform_tableSizes476, 6, 6, 6, 6, 648end table4950private table BeltPlatform_tablePtrs[6]5152// format of these tables:53// x, y (total world-space positions, not relative to anything)54private table BeltPlatform_movementTable0553604, 880563824, 770573824, 832583604, 94259end table6061private table BeltPlatform_movementTable1623860, 736634080, 626644080, 688653860, 79866end table6768private table BeltPlatform_movementTable2694116, 624704336, 514714336, 576724116, 68673end table7475private table BeltPlatform_movementTable3763860, 1392774080, 1282784080, 1344793860, 145480end table8182private table BeltPlatform_movementTable4836932, 1648847152, 1538857152, 1600866932, 171087end table8889private table BeltPlatform_movementTable5907188, 1504917408, 1394927408, 1456937188, 156694end table959697// ========================98// Function Definitions99// ========================100101private function BeltPlatform_UpdateMovement102temp0 = object[arrayPos0].tablePos103GetTableValue(object[arrayPos0].movePos.x, temp0, object[arrayPos0].tablePtr)104temp0++105GetTableValue(object[arrayPos0].movePos.y, temp0, object[arrayPos0].tablePtr)106107temp0 = object[arrayPos0].ixpos108temp0 -= object[arrayPos0].movePos.x109Abs(temp0)110temp1 = object[arrayPos0].iypos111temp1 -= object[arrayPos0].movePos.y112Abs(temp1)113114if temp1 < temp0115object[arrayPos0].xvel = 0x10000116temp1 <<= 16117object[arrayPos0].yvel = temp1118object[arrayPos0].yvel /= temp0119else120if temp1 != 0121temp0 <<= 16122object[arrayPos0].xvel = temp0123object[arrayPos0].xvel /= temp1124else125object[arrayPos0].xvel = 0126end if127128object[arrayPos0].yvel = 0x10000129end if130131if object[arrayPos0].movePos.x < object[arrayPos0].ixpos132FlipSign(object[arrayPos0].xvel)133end if134135if object[arrayPos0].movePos.y < object[arrayPos0].iypos136FlipSign(object[arrayPos0].yvel)137end if138end function139140141// ========================142// Events143// ========================144145event ObjectUpdate146temp0 = object.xpos147temp1 = object.ypos148temp0 >>= 16149temp1 >>= 16150151if temp0 == object.movePos.x152if temp1 == object.movePos.y153object.tablePos += 2154if object.tablePos > object.tableSize155object.tablePos = 0156end if157arrayPos0 = object.entityPos158CallFunction(BeltPlatform_UpdateMovement)159end if160end if161162if object.rotation != 0163object.rotation++164object.rotation &= 15165else166if object.tablePos > 2167object.rotation++168end if169end if170171temp0 = object.rotation172GetTableValue(object.direction, temp0, BeltPlatform_directionTable)173temp0 &= 7174GetTableValue(object.frame, temp0, BeltPlatform_frameTable)175temp0 = object.xpos176temp0 &= 0xFFFF0000177temp1 = object.ypos178temp1 &= 0xFFFF0000179temp2 = object.xpos180temp2 += object.xvel181temp3 = object.ypos182temp3 += object.yvel183184object.collisionOffset.x = temp2185object.collisionOffset.x &= 0xFFFF0000186object.collisionOffset.x -= temp0187object.collisionOffset.y = temp3188object.collisionOffset.y &= 0xFFFF0000189object.collisionOffset.y -= temp1190191if object.rotation == 0192foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)193BoxCollisionTest(C_SOLID, object.entityPos, -16, -7, 16, 7, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)194if checkResult == COL_TOP195player[currentPlayer].xpos += object.collisionOffset.x196player[currentPlayer].ypos += object.collisionOffset.y197end if198next199end if200201object.xpos = temp2202object.ypos = temp3203end event204205206event ObjectDraw207DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)208end event209210211event ObjectStartup212LoadSpriteSheet("SBZ/Objects.gif")213SpriteFrame(-16, -7, 32, 14, 413, 166)214SpriteFrame(-16, -12, 32, 25, 446, 169)215SpriteFrame(-15, -15, 30, 30, 480, 166)216SpriteFrame(-13, -16, 25, 32, 449, 198)217SpriteFrame(-7, -16, 14, 32, 480, 198)218219SetTableValue(BeltPlatform_movementTable0, 0, BeltPlatform_tablePtrs)220SetTableValue(BeltPlatform_movementTable1, 1, BeltPlatform_tablePtrs)221SetTableValue(BeltPlatform_movementTable2, 2, BeltPlatform_tablePtrs)222SetTableValue(BeltPlatform_movementTable3, 3, BeltPlatform_tablePtrs)223SetTableValue(BeltPlatform_movementTable4, 4, BeltPlatform_tablePtrs)224SetTableValue(BeltPlatform_movementTable5, 5, BeltPlatform_tablePtrs)225226foreach (TypeName[Belt Platform], arrayPos0, ALL_ENTITIES)227object[arrayPos0].priority = PRIORITY_INACTIVE228229temp0 = object[arrayPos0].propertyValue230temp0 >>= 4231GetTableValue(object[arrayPos0].tablePtr, temp0, BeltPlatform_tablePtrs)232GetTableValue(object[arrayPos0].tableSize, temp0, BeltPlatform_tableSizes)233234object[arrayPos0].tablePos = object[arrayPos0].propertyValue235object[arrayPos0].tablePos &= 15236object[arrayPos0].tablePos <<= 1237CallFunction(BeltPlatform_UpdateMovement)238next239end event240241242// ========================243// Editor Events244// ========================245246event RSDKEdit247if editor.returnVariable == true248switch editor.variableID249case EDIT_VAR_PROPVAL // property value250checkResult = object.propertyValue251break252253case 0 // type254checkResult = object.propertyValue255checkResult >>= 4256checkResult %= 6257break258259case 1 // startOffset260checkResult = object.propertyValue261checkResult &= 0x0F262break263264end switch265else266switch editor.variableID267case EDIT_VAR_PROPVAL // property value268object.propertyValue = editor.variableValue269break270271case 0 // type272editor.variableValue %= 6273editor.variableValue <<= 4274275object.propertyValue &= 0x0F276object.propertyValue |= editor.variableValue277break278279case 1 // startOffset280editor.variableValue &= 0x0F281282object.propertyValue &= 0xF0283object.propertyValue |= editor.variableValue284break285286end switch287end if288end event289290291event RSDKDraw292DrawSprite(0)293294if editor.showGizmos == true295editor.drawingOverlay = true296297temp0 = object.propertyValue298temp0 >>= 4299GetTableValue(object.tablePtr, temp0, BeltPlatform_tablePtrs)300GetTableValue(object.tableSize, temp0, BeltPlatform_tableSizes)301302object.tablePos = object.propertyValue303object.tablePos &= 15304object.tablePos <<= 1305arrayPos0 = object.entityPos306CallFunction(BeltPlatform_UpdateMovement)307308temp0 = object.xvel309temp0 <<= 5310temp0 += object.xpos311312temp1 = object.yvel313temp1 <<= 5314temp1 += object.ypos315316DrawArrow(object.xpos, object.ypos, temp0, temp1, 0x00, 0xFF, 0x00)317318editor.drawingOverlay = false319end if320end event321322323event RSDKLoad324LoadSpriteSheet("SBZ/Objects.gif")325SpriteFrame(-16, -7, 32, 14, 413, 166)326327SetTableValue(BeltPlatform_movementTable0, 0, BeltPlatform_tablePtrs)328SetTableValue(BeltPlatform_movementTable1, 1, BeltPlatform_tablePtrs)329SetTableValue(BeltPlatform_movementTable2, 2, BeltPlatform_tablePtrs)330SetTableValue(BeltPlatform_movementTable3, 3, BeltPlatform_tablePtrs)331SetTableValue(BeltPlatform_movementTable4, 4, BeltPlatform_tablePtrs)332SetTableValue(BeltPlatform_movementTable5, 5, BeltPlatform_tablePtrs)333334AddEditorVariable("type")335SetActiveVariable("type")336337AddEditorVariable("startOffset")338SetActiveVariable("startOffset")339end event340341342