Path: blob/master/Sonic 2/Scripts/HTZ/BreakRock.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Break Rock Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias 0 : BREAKROCK_ROCK12private alias 1 : BREAKROCK_FRAGMENT1314// Player Aliases15private alias object.yvel : player.yvel16private alias object.gravity : player.gravity17private alias object.animation : player.animation18private alias object.value16 : player.isSidekick19private alias object.value19 : player.badnikBonus20private alias object.value40 : player.hitboxLeft21private alias object.value38 : player.hitboxTop22private alias object.value41 : player.hitboxRight23private alias object.value39 : player.hitboxBottom2425// Global Variable ID Aliases26private alias 22 : GLOBAL_PLAYERSCORE272829// ========================30// Function Declarations31// ========================3233reserve function BreakRock_DebugDraw34reserve function BreakRock_DebugSpawn353637// ========================38// Function Definitions39// ========================4041private function BreakRock_DebugDraw42DrawSprite(0)43end function444546private function BreakRock_DebugSpawn47CreateTempObject(TypeName[Break Rock], 0, object.xpos, object.ypos)48end function495051// ========================52// Events53// ========================5455event ObjectUpdate56switch object.state57case BREAKROCK_ROCK58foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)59#platform: USE_STANDALONE60if player[currentPlayer].animation == ANI_JUMPING61BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)62#endplatform63#platform: USE_ORIGINS64checkResult = false6566if player[currentPlayer].animation == ANI_JUMPING67checkResult = true68end if6970if player[currentPlayer].animation == ANI_HAMMER_JUMP71checkResult = 272end if7374if checkResult != false75switch checkResult76case 177BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)78break7980case 281BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)82break83end switch84#endplatform85if checkResult == COL_TOP86player[currentPlayer].yvel = -0x3000087player[currentPlayer].gravity = GRAVITY_AIR8889// Create the rock fragments9091CreateTempObject(TypeName[Break Rock], 1, object.xpos, object.ypos)92object[tempObjectPos].ixpos -= 1693object[tempObjectPos].iypos -= 894object[tempObjectPos].xvel = -0x2000095object[tempObjectPos].yvel = -0x2000096object[tempObjectPos].state = BREAKROCK_FRAGMENT97object[tempObjectPos].drawOrder = 59899CreateTempObject(TypeName[Break Rock], 2, object.xpos, object.ypos)100object[tempObjectPos].ixpos += 0101object[tempObjectPos].iypos -= 8102object[tempObjectPos].xvel = 0103object[tempObjectPos].yvel = -0x28000104object[tempObjectPos].state = BREAKROCK_FRAGMENT105object[tempObjectPos].drawOrder = 5106107CreateTempObject(TypeName[Break Rock], 3, object.xpos, object.ypos)108object[tempObjectPos].ixpos += 16109object[tempObjectPos].iypos -= 8110object[tempObjectPos].xvel = 0x20000111object[tempObjectPos].yvel = -0x20000112object[tempObjectPos].state = BREAKROCK_FRAGMENT113object[tempObjectPos].drawOrder = 5114115CreateTempObject(TypeName[Break Rock], 4, object.xpos, object.ypos)116object[tempObjectPos].ixpos -= 16117object[tempObjectPos].iypos += 8118object[tempObjectPos].xvel = -0x1C000119object[tempObjectPos].yvel = -0x1C000120object[tempObjectPos].state = BREAKROCK_FRAGMENT121object[tempObjectPos].drawOrder = 5122123CreateTempObject(TypeName[Break Rock], 5, object.xpos, object.ypos)124object[tempObjectPos].ixpos += 0125object[tempObjectPos].iypos += 8126object[tempObjectPos].xvel = 0127object[tempObjectPos].yvel = -0x20000128object[tempObjectPos].state = BREAKROCK_FRAGMENT129object[tempObjectPos].drawOrder = 5130131CreateTempObject(TypeName[Break Rock], 6, object.xpos, object.ypos)132object[tempObjectPos].ixpos += 16133object[tempObjectPos].iypos += 8134object[tempObjectPos].xvel = 0x1C000135object[tempObjectPos].yvel = -0x1C000136object[tempObjectPos].state = BREAKROCK_FRAGMENT137object[tempObjectPos].drawOrder = 5138139// Make this object disappear140object.type = TypeName[Blank Object]141142// global variable "array" (yes, this is actually how its done)143arrayPos0 = GLOBAL_PLAYERSCORE144#platform: USE_DECOMP145arrayPos0 = VarName[player.score]146#endplatform147if player[currentPlayer].isSidekick == 0148arrayPos0 += currentPlayer149end if150151switch player[currentPlayer].badnikBonus152case 0153global[arrayPos0] += 100154break155156case 1157global[arrayPos0] += 200158break159160case 2161global[arrayPos0] += 500162break163164case 3165case 4166case 5167case 6168case 7169case 8170case 9171case 10172case 11173case 12174case 13175case 14176global[arrayPos0] += 1000177break178179case 15180global[arrayPos0] += 10000181break182end switch183184CreateTempObject(TypeName[Object Score], player[currentPlayer].badnikBonus, object.xpos, object.ypos)185object[tempObjectPos].drawOrder = 5186if player[currentPlayer].gravity == 1187if player[currentPlayer].badnikBonus < 15188player[currentPlayer].badnikBonus++189end if190end if191PlaySfx(SfxName[Block Break], false)192end if193else194BoxCollisionTest(C_SOLID, object.entityPos, -24, -16, 24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)195end if196next197break198199case BREAKROCK_FRAGMENT200object.xpos += object.xvel201object.ypos += object.yvel202object.yvel += 0x1800203204if object.outOfBounds == true205object.type = TypeName[Blank Object]206end if207break208209end switch210end event211212213event ObjectDraw214DrawSprite(object.propertyValue)215end event216217218event ObjectStartup219LoadSpriteSheet("HTZ/Objects.gif")220SpriteFrame(-24, -16, 48, 32, 207, 94)221SpriteFrame(-8, -8, 16, 16, 207, 94)222SpriteFrame(-8, -8, 16, 16, 223, 94)223SpriteFrame(-8, -8, 16, 16, 239, 94)224SpriteFrame(-8, -8, 16, 16, 207, 110)225SpriteFrame(-8, -8, 16, 16, 223, 110)226SpriteFrame(-8, -8, 16, 16, 239, 110)227228SetTableValue(TypeName[Break Rock], DebugMode_ObjCount, DebugMode_TypesTable)229SetTableValue(BreakRock_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)230SetTableValue(BreakRock_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)231DebugMode_ObjCount++232end event233234235// ========================236// Editor Events237// ========================238239event RSDKDraw240DrawSprite(0)241end event242243244event RSDKLoad245LoadSpriteSheet("HTZ/Objects.gif")246SpriteFrame(-24, -16, 48, 32, 207, 94)247248// Although used by the object, it shouldn't be set by the editor249SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")250end event251252253