Path: blob/master/Sonic 1/Scripts/SBZ/HCrushGirder.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: H Crush Girder Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.startPos.x13private alias object.value2 : object.startPos.y14private alias object.value3 : object.nextState1516private alias 0 : HCRUSHGIRDER_MOVE_RIGHT17private alias 1 : HCRUSHGIRDER_MOVE_DOWN18private alias 2 : HCRUSHGIRDER_MOVE_LEFT19private alias 3 : HCRUSHGIRDER_MOVE_UP20private alias 4 : HCRUSHGIRDER_DELAY2122// Player Aliases23private alias object.xpos : player.xpos24private alias object.ypos : player.ypos25private alias object.gravity : player.gravity26private alias object.pushing : player.pushing272829// ========================30// Function Declarations31// ========================3233reserve function HCrushGirder_DebugDraw34reserve function HCrushGirder_DebugSpawn353637// ========================38// Tables39// ========================4041private function HCrushGirder_DebugDraw42DrawSprite(0)43end function444546private function HCrushGirder_DebugSpawn47CreateTempObject(TypeName[H Crush Girder], 0, object.xpos, object.ypos)48object[tempObjectPos].startPos.x = object.xpos49object[tempObjectPos].startPos.y = object.ypos50end function515253// ========================54// Events55// ========================5657event ObjectUpdate58switch object.state59case HCRUSHGIRDER_MOVE_RIGHT60object.timer++61if object.timer == 9662object.timer = 663object.nextState = HCRUSHGIRDER_MOVE_DOWN64object.state = HCRUSHGIRDER_DELAY65end if6667foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)68BoxCollisionTest(C_SOLID, object.entityPos, -96, -24, 96, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)69switch checkResult70case COL_TOP71player[currentPlayer].xpos += 0x1000072break7374case COL_LEFT75player[currentPlayer].pushing = false76break77end switch78next7980object.xpos += 0x1000081break8283case HCRUSHGIRDER_MOVE_DOWN84object.timer++85if object.timer == 4886object.timer = 687object.nextState = HCRUSHGIRDER_MOVE_LEFT88object.state = HCRUSHGIRDER_DELAY89end if9091foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)92BoxCollisionTest(C_SOLID, object.entityPos, -96, -24, 96, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)93switch checkResult94case COL_TOP95player[currentPlayer].ypos += 0x1000096break9798case COL_BOTTOM99if player[currentPlayer].gravity == GRAVITY_GROUND100CallFunction(Player_Kill)101end if102break103end switch104next105106object.ypos += 0x10000107break108109// actually moves left and up a bit110case HCRUSHGIRDER_MOVE_LEFT111object.timer++112if object.timer == 96113object.timer = 6114object.nextState = HCRUSHGIRDER_MOVE_UP115object.state = HCRUSHGIRDER_DELAY116end if117118object.ypos -= 0x4000119object.xpos -= 0x10000120foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)121BoxCollisionTest(C_SOLID, object.entityPos, -96, -24, 96, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)122switch checkResult123case COL_TOP124player[currentPlayer].xpos -= 0x10000125break126127case COL_BOTTOM128break129end switch130next131break132133case HCRUSHGIRDER_MOVE_UP134object.timer++135if object.timer == 24136object.timer = 6137object.nextState = HCRUSHGIRDER_MOVE_RIGHT138object.state = HCRUSHGIRDER_DELAY139end if140141foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)142BoxCollisionTest(C_SOLID, object.entityPos, -96, -24, 96, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)143switch checkResult144case COL_TOP145player[currentPlayer].ypos -= 0x10000146break147148case COL_BOTTOM149break150end switch151next152object.ypos -= 0x10000153break154155case HCRUSHGIRDER_DELAY156if object.timer > 0157object.timer--158else159object.state = object.nextState160end if161162foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)163BoxCollisionTest(C_SOLID, object.entityPos, -96, -24, 96, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)164if checkResult == COL_BOTTOM165if player[currentPlayer].gravity == GRAVITY_GROUND166CallFunction(Player_Kill)167end if168end if169next170break171172end switch173end event174175176event ObjectDraw177DrawSprite(0)178end event179180181event ObjectStartup182LoadSpriteSheet("SBZ/Objects.gif")183SpriteFrame(-96, -24, 192, 48, 319, 1)184185foreach (TypeName[H Crush Girder], arrayPos0, ALL_ENTITIES)186object[arrayPos0].startPos.x = object[arrayPos0].xpos187object[arrayPos0].startPos.y = object[arrayPos0].ypos188next189190SetTableValue(TypeName[H Crush Girder], DebugMode_ObjCount, DebugMode_TypesTable)191SetTableValue(HCrushGirder_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)192SetTableValue(HCrushGirder_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)193DebugMode_ObjCount++194end event195196197// ========================198// Editor Events199// ========================200201event RSDKDraw202DrawSprite(0)203end event204205206event RSDKLoad207LoadSpriteSheet("SBZ/Objects.gif")208SpriteFrame(-96, -24, 192, 48, 319, 1)209210SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")211end event212213214