Path: blob/master/Sonic 2/Scripts/Global/Spikes.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Spikes 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.movePos13private alias object.value2 : object.parentSlot1415private alias 0 : SPIKES_STATIC16private alias 1 : SPIKES_HIDDEN17private alias 2 : SPIKES_APPEAR18private alias 3 : SPIKES_SHOWN19private alias 4 : SPIKES_DISAPPEAR20private alias 5 : SPIKES_HASPARENT2122// Player Aliases23private alias object.xvel : player.xvel24private alias object.yvel : player.yvel25private alias object.gravity : player.gravity26private alias object.collisionMode : player.collisionMode27private alias object.value7 : player.invincibleTimer28private alias object.value17 : debugMode.currentSelection293031// ========================32// Function Declarations33// ========================3435reserve function Spikes_DebugDraw36reserve function Spikes_DebugSpawn373839// ========================40// Static Values41// ========================4243private value Spikes_startDebugID = 0444546// ========================47// Function Definitions48// ========================4950private function Spikes_DebugDraw51temp2 = debugMode[0].currentSelection52temp2 -= Spikes_startDebugID53DrawSprite(temp2)54end function555657private function Spikes_DebugSpawn58temp0 = debugMode[0].currentSelection59temp0 -= Spikes_startDebugID60CreateTempObject(TypeName[Spikes], temp0, object.xpos, object.ypos)61end function626364// ========================65// Events66// ========================6768event ObjectUpdate69switch object.state70case SPIKES_HIDDEN71if object.timer < 6072object.timer++73else74object.state++75object.timer = 076temp0 = screen.xcenter77temp0 += 6478temp1 = temp079FlipSign(temp0)80BoxCollisionTest(C_TOUCH, object.entityPos, temp0, -128, temp1, 128, 0, 0, 0, 0, 0)81if checkResult == true82PlaySfx(SfxName[Spikes Move], false)83end if84end if85break8687case SPIKES_APPEAR88if object.movePos < 0x20000089object.movePos += 0x8000090object.xpos += object.xvel91object.ypos += object.yvel92else93object.state++94end if95break9697case SPIKES_SHOWN98if object.timer < 6099object.timer++100else101object.state++102object.timer = 0103temp0 = screen.xcenter104temp0 += 64105temp1 = temp0106FlipSign(temp0)107BoxCollisionTest(C_TOUCH, object.entityPos, temp0, -128, temp1, 128, 0, 0, 0, 0, 0)108if checkResult == true109PlaySfx(SfxName[Spikes Move], false)110end if111end if112break113114case SPIKES_DISAPPEAR115if object.movePos > 0116object.movePos -= 0x80000117object.xpos -= object.xvel118object.ypos -= object.yvel119else120object.state = SPIKES_HIDDEN121end if122break123124case SPIKES_HASPARENT125arrayPos0 = object.parentSlot126object.ypos = object[-arrayPos0].ypos127break128end switch129130switch object.propertyValue131case 0132foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)133BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)134if checkResult == COL_BOTTOM135if player[currentPlayer].gravity == GRAVITY_GROUND136CallFunction(Player_Kill)137end if138end if139140if player[currentPlayer].yvel > -1141BoxCollisionTest(C_TOUCH, object.entityPos, -15, -17, 15, -12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)142if checkResult == true143CallFunction(Player_SpikeHit)144end if145end if146next147break148149case 1150foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)151BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 15, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)152if checkResult == COL_BOTTOM153if player[currentPlayer].gravity == GRAVITY_GROUND154CallFunction(Player_Kill)155end if156end if157158if player[currentPlayer].xvel <= 0159BoxCollisionTest(C_TOUCH, object.entityPos, 12, -15, 16, 15, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)160if checkResult == true161CallFunction(Player_SpikeHit)162end if163end if164next165break166167case 2168foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)169BoxCollisionTest(C_SOLID, object.entityPos, -15, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)170if checkResult == COL_BOTTOM171if player[currentPlayer].gravity == GRAVITY_GROUND172CallFunction(Player_Kill)173end if174end if175176BoxCollisionTest(C_TOUCH, object.entityPos, -16, -15, -12, 15, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)177if checkResult == true178CallFunction(Player_SpikeHit)179end if180next181break182183case 3184foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)185temp0 = player[currentPlayer].yvel186BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 15, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)187if checkResult == COL_BOTTOM188if player[currentPlayer].gravity == GRAVITY_GROUND189if player[currentPlayer].collisionMode == CMODE_FLOOR190CallFunction(Player_Kill)191player[currentPlayer].invincibleTimer = 0192else193CallFunction(Player_SpikeHit)194end if195else196CallFunction(Player_SpikeHit)197end if198temp0 = 1199end if200201if temp0 < 1202BoxCollisionTest(C_TOUCH, object.entityPos, -15, 12, 15, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)203if checkResult == true204CallFunction(Player_SpikeHit)205end if206end if207next208break209end switch210end event211212213event ObjectDraw214DrawSprite(object.propertyValue)215end event216217218event ObjectStartup219LoadSpriteSheet("Global/Items2.gif")220SpriteFrame(-16, -16, 32, 32, 182, 99)221SpriteFrame(-16, -16, 32, 32, 182, 132)222SpriteFrame(-16, -16, 32, 32, 215, 132)223SpriteFrame(-16, -16, 32, 32, 215, 99)224225temp0 = 0226Spikes_startDebugID = DebugMode_ObjCount227while temp0 < 4228SetTableValue(TypeName[Spikes], DebugMode_ObjCount, DebugMode_TypesTable)229SetTableValue(Spikes_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)230SetTableValue(Spikes_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)231DebugMode_ObjCount++232temp0++233loop234235foreach (TypeName[Spikes], arrayPos0, ALL_ENTITIES)236if object[arrayPos0].propertyValue > 3237object[arrayPos0].propertyValue &= 3238temp0 = object[arrayPos0].propertyValue239temp0 &= 3240switch temp0241case 0242object[arrayPos0].xvel = 0243object[arrayPos0].yvel = 0x80000244object[arrayPos0].ypos += 0x200000245break246247case 1248object[arrayPos0].xvel = -0x80000249object[arrayPos0].yvel = 0250object[arrayPos0].xpos -= 0x200000251break252253case 2254object[arrayPos0].xvel = 0x80000255object[arrayPos0].yvel = 0256object[arrayPos0].xpos += 0x200000257break258259case 3260object[arrayPos0].xvel = 0261object[arrayPos0].yvel = -0x80000262object[arrayPos0].ypos -= 0x200000263break264end switch265266object[arrayPos0].movePos = 0x200000267if object[arrayPos0].state != SPIKES_HASPARENT268object[arrayPos0].state = SPIKES_SHOWN269end if270end if271next272end event273274275// ========================276// Editor Events277// ========================278279event RSDKEdit280if editor.returnVariable == true281switch editor.variableID282case EDIT_VAR_PROPVAL // property value283checkResult = object.propertyValue284break285286case 0 // orientation287checkResult = object.propertyValue288checkResult &= 3289break290291case 1 // moving292GetBit(checkResult, object.propertyValue, 7)293break294295end switch296else297switch editor.variableID298case EDIT_VAR_PROPVAL // property value299object.propertyValue = editor.variableValue300break301302case 0 // orientation303temp0 = editor.variableValue304temp0 &= 3305306temp1 = 3307Not(temp1)308309object.propertyValue &= temp1310object.propertyValue |= temp0311break312313case 1 // moving314CheckNotEqual(editor.variableValue, false)315SetBit(object.propertyValue, 7, checkResult)316break317318case EDIT_VAR_VAL2319// TODO: dunno if val2 is set before, after, or not at all during this, test320CheckNotEqual(editor.variableValue, 0)321checkResult *= 5322object.state = checkResult323break324325end switch326end if327end event328329330event RSDKDraw331object.frame = object.propertyValue332object.frame &= 3333DrawSprite(object.frame)334335CheckEqual(object.state, 5)336temp0 = checkResult337CheckEqual(editor.showGizmos, true)338temp0 &= checkResult339if temp0 == true340editor.drawingOverlay = true341342arrayPos0 = object.parentSlot343DrawLine(object.xpos, object.ypos, object[-arrayPos0].xpos, object[-arrayPos0].ypos, 0xFF, 0xFF, 0x00)344345editor.drawingOverlay = false346end if347end event348349350event RSDKLoad351LoadSpriteSheet("Global/Items2.gif")352SpriteFrame(-16, -16, 32, 32, 182, 99)353SpriteFrame(-16, -16, 32, 32, 182, 132)354SpriteFrame(-16, -16, 32, 32, 215, 132)355SpriteFrame(-16, -16, 32, 32, 215, 99)356357AddEditorVariable("orientation")358SetActiveVariable("orientation")359AddEnumVariable("Up", 0)360AddEnumVariable("Right", 1)361AddEnumVariable("Left", 2)362AddEnumVariable("Down", 3)363364AddEditorVariable("moving")365SetActiveVariable("moving")366AddEnumVariable("false", false)367AddEnumVariable("true", true)368369SetVariableAlias(ALIAS_VAR_VAL2, "parentOffset") // state has to be set to 5 for this to be used370end event371372373