Path: blob/master/Sonic 1/Scripts/MZ/GlassPillar.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Glass Pillar Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.drawPos.y12private alias object.value2 : object.collisionOffset.y13private alias object.value3 : object.shinePos.y14private alias object.value4 : object.shineAmplitude.y15private alias object.value5 : object.amplitude.y1617private alias 0 : GLASSPILLAR_STATIC18private alias 1 : GLASSPILLAR_MOVE_UP_DOWN19private alias 2 : GLASSPILLAR_MOVE_DOWN_UP2021// Player Aliases22private alias object.ypos : player.ypos23private alias object.gravity : player.gravity24private alias object.value18 : player.sortedDrawOrder2526private alias object.value17 : debugMode.currentSelection272829// ========================30// Function Declarations31// ========================3233reserve function GlassPillar_DebugDraw34reserve function GlassPillar_DebugSpawn3536// ========================37// Static Values38// ========================3940private value GlassPillar_startDebugID = 04142private function GlassPillar_DebugDraw43temp0 = debugMode[0].currentSelection44temp0 -= GlassPillar_startDebugID45DrawSprite(temp0)46end function474849private function GlassPillar_DebugSpawn50CreateTempObject(TypeName[Glass Pillar], 0, object.xpos, object.ypos)51object[tempObjectPos].frame = debugMode[0].currentSelection52object[tempObjectPos].frame -= GlassPillar_startDebugID5354if object[tempObjectPos].frame == 055if object.direction == 156object[tempObjectPos].state = GLASSPILLAR_MOVE_DOWN_UP57object[tempObjectPos].amplitude.y = -0x100058object[tempObjectPos].shineAmplitude.y = 0x80059object[tempObjectPos].ypos -= 0x20000060else61object[tempObjectPos].state = GLASSPILLAR_MOVE_UP_DOWN62object[tempObjectPos].amplitude.y = 0x100063object[tempObjectPos].shineAmplitude.y = -0x80064object[tempObjectPos].ypos -= 0x20000065end if66else67object[tempObjectPos].shineAmplitude.y = 0x100068end if6970object[tempObjectPos].drawOrder = 571end function727374// ========================75// Events76// ========================7778event ObjectUpdate79switch object.state80case GLASSPILLAR_STATIC81object.angle = oscillation82object.angle <<= 18384object.drawPos.y = object.ypos85foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)86BoxCollisionTest(C_SOLID2, object.entityPos, -32, -56, 32, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)87if checkResult == COL_BOTTOM88if player[currentPlayer].gravity == GRAVITY_GROUND89CallFunction(Player_Kill)90player[currentPlayer].sortedDrawOrder = 691end if92end if93next9495object.angle = oscillation96object.angle <<= 197Sin(object.shinePos.y, object.angle)98object.shinePos.y *= object.shineAmplitude.y99object.shinePos.y += object.ypos100object.shinePos.y &= 0xFFFF0000101break102103case GLASSPILLAR_MOVE_UP_DOWN104case GLASSPILLAR_MOVE_DOWN_UP105object.angle = oscillation106object.angle <<= 1107Sin(object.collisionOffset.y, object.angle)108object.collisionOffset.y *= object.amplitude.y109object.collisionOffset.y += object.ypos110object.collisionOffset.y &= 0xFFFF0000111object.collisionOffset.y -= object.drawPos.y112113temp0 = object.ypos114object.ypos = object.drawPos.y115foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)116BoxCollisionTest(C_SOLID2, object.entityPos, -32, -72, 32, 68, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)117switch checkResult118case COL_TOP119if checkResult == true120player[currentPlayer].ypos += object.collisionOffset.y121end if122break123124case COL_BOTTOM125if player[currentPlayer].gravity == GRAVITY_GROUND126if object.collisionOffset.y > 0127CallFunction(Player_Kill)128player[currentPlayer].sortedDrawOrder = 6129end if130end if131break132end switch133next134135object.ypos = temp0136137Sin(object.drawPos.y, object.angle)138object.drawPos.y *= object.amplitude.y139object.drawPos.y += object.ypos140object.drawPos.y &= 0xFFFF0000141142Sin(object.shinePos.y, object.angle)143object.shinePos.y *= object.shineAmplitude.y144object.shinePos.y += object.ypos145object.shinePos.y &= 0xFFFF0000146147break148149end switch150end event151152153event ObjectDraw154DrawSpriteXY(object.frame, object.xpos, object.drawPos.y)155DrawSpriteXY(2, object.xpos, object.shinePos.y)156end event157158159event ObjectStartup160LoadSpriteSheet("MZ/Objects.gif")161SpriteFrame(-32, -72, 64, 144, 191, 1)162SpriteFrame(-32, -56, 64, 112, 126, 1)163SpriteFrame(-16, -16, 31, 32, 159, 114)164165foreach (TypeName[Glass Pillar], arrayPos0, ALL_ENTITIES)166object[arrayPos0].frame = object[arrayPos0].propertyValue167object[arrayPos0].frame >>= 4168object[arrayPos0].frame %= 3169object[arrayPos0].state = object[arrayPos0].propertyValue170object[arrayPos0].state &= 7171if object[arrayPos0].state > 5 // 5? but this object only has states counting up to 2..?172object[arrayPos0].state = GLASSPILLAR_STATIC173end if174175switch object[arrayPos0].state176default177case GLASSPILLAR_STATIC178break179180case GLASSPILLAR_MOVE_UP_DOWN181object[arrayPos0].amplitude.y = 0x1000182object[arrayPos0].shineAmplitude.y = -0x800183object[arrayPos0].ypos -= 0x200000184break185186case GLASSPILLAR_MOVE_DOWN_UP187object[arrayPos0].amplitude.y = -0x1000188object[arrayPos0].shineAmplitude.y = 0x800189object[arrayPos0].ypos -= 0x200000190break191192end switch193object[arrayPos0].drawOrder = 5194next195196temp0 = 0197GlassPillar_startDebugID = DebugMode_ObjCount198while temp0 < 2199SetTableValue(TypeName[Glass Pillar], DebugMode_ObjCount, DebugMode_TypesTable)200SetTableValue(GlassPillar_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)201SetTableValue(GlassPillar_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)202DebugMode_ObjCount++203temp0++204loop205end event206207208// ========================209// Editor Events210// ========================211212event RSDKEdit213if editor.returnVariable == true214switch editor.variableID215case EDIT_VAR_PROPVAL // property value216checkResult = object.propertyValue217break218219case 0 // frameID220checkResult = object.propertyValue221checkResult &= 0x7F222checkResult >>= 4223checkResult &= 1224break225226case 1 // moveType227checkResult = object.propertyValue228checkResult &= 7229if checkResult > 5230checkResult = GLASSPILLAR_STATIC231end if232break233234end switch235else236switch editor.variableID237case EDIT_VAR_PROPVAL // property value238object.propertyValue = editor.variableValue239break240241case 0 // frameID242temp1 = 0x70243Not(temp1)244object.propertyValue &= temp1245246editor.variableValue &= 1247editor.variableValue <<= 4248object.propertyValue |= editor.variableValue249break250251case 1 // moveType252temp1 = 7253Not(temp1)254object.propertyValue &= temp1255256temp0 = editor.variableValue257temp0 &= 7258object.propertyValue |= temp0259break260261end switch262end if263end event264265266event RSDKDraw267temp0 = object.propertyValue268temp0 >>= 4269temp0 %= 3270271DrawSpriteXY(object.frame, object.xpos, object.ypos)272DrawSpriteXY(2, object.xpos, object.ypos)273end event274275276event RSDKLoad277LoadSpriteSheet("MZ/Objects.gif")278SpriteFrame(-32, -72, 64, 144, 191, 1)279SpriteFrame(-32, -56, 64, 112, 126, 1)280SpriteFrame(-16, -16, 31, 32, 159, 114)281282AddEditorVariable("frameID")283SetActiveVariable("frameID")284AddEnumVariable("Long", 0)285AddEnumVariable("Medium", 1)286287AddEditorVariable("moveType")288SetActiveVariable("moveType")289AddEnumVariable("Static", GLASSPILLAR_STATIC)290AddEnumVariable("Move Vertically", GLASSPILLAR_MOVE_UP_DOWN)291AddEnumVariable("Move Vertically (Reversed)", GLASSPILLAR_MOVE_DOWN_UP)292end event293294295