Path: blob/master/Sonic 1/Scripts/LZ/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.tableSize18private alias object.value7 : object.beltDir1920// Player Aliases21private alias object.xpos : player.xpos22private alias object.ypos : player.ypos232425// ========================26// Function Declarations27// ========================2829reserve function BeltPlatform_UpdateMovement303132// ========================33// Tables34// ========================3536private table BeltPlatform_tableSizes3710, 8, 6, 6, 8, 638end table3940private table BeltPlatform_tablePtrs[6]4142// format of these tables:43// x, y (total world-space positions, not relative to anything)44private table BeltPlatform_movementTable0454216, 538464286, 608474286, 915484236, 965494130, 912504130, 58051end table5253private table BeltPlatform_movementTable1544734, 640554814, 720564814, 1134574658, 1056584658, 71659end table6061private table BeltPlatform_movementTable2623362, 1154633362, 1502643502, 1502653502, 115466end table6768private table BeltPlatform_movementTable3693426, 930703566, 930713566, 1246723426, 124673end table7475private table BeltPlatform_movementTable4763244, 578773550, 578783550, 990793154, 990803154, 66881end table8283private table BeltPlatform_movementTable5844690, 522855086, 522865086, 702874690, 70288end table899091// ========================92// Function Definitions93// ========================9495private function BeltPlatform_UpdateMovement96temp0 = object[arrayPos0].tablePos97GetTableValue(object[arrayPos0].movePos.x, temp0, object[arrayPos0].tablePtr)98temp0++99GetTableValue(object[arrayPos0].movePos.y, temp0, object[arrayPos0].tablePtr)100101temp0 = object[arrayPos0].ixpos102temp0 -= object[arrayPos0].movePos.x103Abs(temp0)104temp1 = object[arrayPos0].iypos105temp1 -= object[arrayPos0].movePos.y106Abs(temp1)107108if temp1 < temp0109object[arrayPos0].xvel = 0x10000110temp1 <<= 16111object[arrayPos0].yvel = temp1112object[arrayPos0].yvel /= temp0113else114if temp1 != 0115temp0 <<= 16116object[arrayPos0].xvel = temp0117object[arrayPos0].xvel /= temp1118else119object[arrayPos0].xvel = 0120end if121122object[arrayPos0].yvel = 0x10000123end if124125if object[arrayPos0].movePos.x < object[arrayPos0].ixpos126FlipSign(object[arrayPos0].xvel)127end if128129if object[arrayPos0].movePos.y < object[arrayPos0].iypos130FlipSign(object[arrayPos0].yvel)131end if132end function133134135// ========================136// Events137// ========================138139event ObjectUpdate140temp2 = false141142if object.beltDir != LZSetup_beltDirection143object.direction ^= FLIP_X144object.beltDir = LZSetup_beltDirection145temp2 = true146else147temp0 = object.xpos148temp1 = object.ypos149temp0 >>= 16150temp1 >>= 16151if temp0 == object.movePos.x152if temp1 == object.movePos.y153temp2 = true154end if155end if156end if157158if temp2 == true159if object.direction == FLIP_NONE160object.tablePos += 2161if object.tablePos > object.tableSize162object.tablePos = 0163end if164else165object.tablePos -= 2166if object.tablePos < 0167object.tablePos = object.tableSize168end if169end if170arrayPos0 = object.entityPos171CallFunction(BeltPlatform_UpdateMovement)172end if173174temp0 = object.xpos175temp0 &= 0xFFFF0000176temp1 = object.ypos177temp1 &= 0xFFFF0000178temp2 = object.xpos179temp2 += object.xvel180temp3 = object.ypos181temp3 += object.yvel182183object.collisionOffset.x = temp2184object.collisionOffset.x &= 0xFFFF0000185object.collisionOffset.x -= temp0186object.collisionOffset.y = temp3187object.collisionOffset.y &= 0xFFFF0000188object.collisionOffset.y -= temp1189190foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)191BoxCollisionTest(C_PLATFORM, object.entityPos, -16, -8, 16, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)192if checkResult == true193player[currentPlayer].xpos += object.collisionOffset.x194player[currentPlayer].ypos += object.collisionOffset.y195end if196next197198object.xpos = temp2199object.ypos = temp3200end event201202203event ObjectDraw204DrawSprite(0)205end event206207208event ObjectStartup209LoadSpriteSheet("LZ/Objects.gif")210SpriteFrame(-16, -8, 32, 16, 223, 154)211212SetTableValue(BeltPlatform_movementTable0, 0, BeltPlatform_tablePtrs)213SetTableValue(BeltPlatform_movementTable1, 1, BeltPlatform_tablePtrs)214SetTableValue(BeltPlatform_movementTable2, 2, BeltPlatform_tablePtrs)215SetTableValue(BeltPlatform_movementTable3, 3, BeltPlatform_tablePtrs)216SetTableValue(BeltPlatform_movementTable4, 4, BeltPlatform_tablePtrs)217SetTableValue(BeltPlatform_movementTable5, 5, BeltPlatform_tablePtrs)218219foreach (TypeName[Belt Platform], arrayPos0, ALL_ENTITIES)220object[arrayPos0].priority = PRIORITY_INACTIVE221222temp0 = object[arrayPos0].propertyValue223temp0 >>= 4224GetTableValue(object[arrayPos0].tablePtr, temp0, BeltPlatform_tablePtrs)225GetTableValue(object[arrayPos0].tableSize, temp0, BeltPlatform_tableSizes)226227object[arrayPos0].tablePos = object[arrayPos0].propertyValue228object[arrayPos0].tablePos &= 15229object[arrayPos0].tablePos <<= 1230CallFunction(BeltPlatform_UpdateMovement)231next232end event233234235// ========================236// Editor Events237// ========================238239event RSDKEdit240if editor.returnVariable == true241switch editor.variableID242case EDIT_VAR_PROPVAL // property value243checkResult = object.propertyValue244break245246case 0 // type247checkResult = object.propertyValue248checkResult >>= 4249checkResult %= 6250break251252case 1 // startOffset253checkResult = object.propertyValue254checkResult &= 0x0F255break256257end switch258else259switch editor.variableID260case EDIT_VAR_PROPVAL // property value261object.propertyValue = editor.variableValue262break263264case 0 // type265editor.variableValue %= 6266editor.variableValue <<= 4267268object.propertyValue &= 0x0F269object.propertyValue |= editor.variableValue270break271272case 1 // startOffset273editor.variableValue &= 0x0F274275object.propertyValue &= 0xF0276object.propertyValue |= editor.variableValue277break278279end switch280end if281end event282283284event RSDKDraw285DrawSprite(0)286287if editor.showGizmos == true288editor.drawingOverlay = true289290temp0 = object.propertyValue291temp0 >>= 4292GetTableValue(object.tablePtr, temp0, BeltPlatform_tablePtrs)293GetTableValue(object.tableSize, temp0, BeltPlatform_tableSizes)294295object.tablePos = object.propertyValue296object.tablePos &= 15297object.tablePos <<= 1298arrayPos0 = object.entityPos299CallFunction(BeltPlatform_UpdateMovement)300301temp0 = object.xvel302temp0 <<= 5303temp0 += object.xpos304305temp1 = object.yvel306temp1 <<= 5307temp1 += object.ypos308309DrawArrow(object.xpos, object.ypos, temp0, temp1, 0x00, 0xFF, 0x00)310311editor.drawingOverlay = false312end if313end event314315316event RSDKLoad317LoadSpriteSheet("LZ/Objects.gif")318SpriteFrame(-16, -8, 32, 16, 223, 154)319320SetTableValue(BeltPlatform_movementTable0, 0, BeltPlatform_tablePtrs)321SetTableValue(BeltPlatform_movementTable1, 1, BeltPlatform_tablePtrs)322SetTableValue(BeltPlatform_movementTable2, 2, BeltPlatform_tablePtrs)323SetTableValue(BeltPlatform_movementTable3, 3, BeltPlatform_tablePtrs)324SetTableValue(BeltPlatform_movementTable4, 4, BeltPlatform_tablePtrs)325SetTableValue(BeltPlatform_movementTable5, 5, BeltPlatform_tablePtrs)326327AddEditorVariable("type")328SetActiveVariable("type")329330AddEditorVariable("startOffset")331SetActiveVariable("startOffset")332end event333334335