Path: blob/master/Sonic 2/Scripts/HPZ/BreakGem.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Break Gem Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.gravityStrength1213// States14private alias 0 : BREAKGEM_INTACT15private alias 1 : BREAKGEM_SHARD1617// Player Aliases18private alias object.animation : player.animation19private alias object.gravity : player.gravity20private alias object.yvel : player.yvel21private alias object.value19 : player.badnikBonus22private alias object.value40 : player.hitboxLeft23private alias object.value38 : player.hitboxTop24private alias object.value41 : player.hitboxRight25private alias object.value39 : player.hitboxBottom262728// ========================29// Function Declarations30// ========================3132reserve function BreakGem_DebugDraw33reserve function BreakGem_DebugSpawn343536// ========================37// Function Definitions38// ========================3940private function BreakGem_DebugDraw41DrawSprite(0)42end function434445private function BreakGem_DebugSpawn46CreateTempObject(TypeName[Break Gem], 0, object.xpos, object.ypos)47end function484950// ========================51// Events52// ========================5354event ObjectUpdate55switch object.state56case BREAKGEM_INTACT57object.inkEffect = INK_ALPHA58temp0 = oscillation59temp0 <<= 460Sin(temp1, temp0)61temp1 >>= 562temp1 += 0xE063object.alpha = temp16465foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)66#platform: USE_STANDALONE67if player[currentPlayer].animation == ANI_JUMPING68BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)69#endplatform70#platform: USE_ORIGINS71checkResult = false7273if player[currentPlayer].animation == ANI_JUMPING74checkResult = true75end if7677if player[currentPlayer].animation == ANI_HAMMER_JUMP78checkResult = 279end if8081if checkResult != false82switch checkResult83case 184BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)85break8687case 288BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)89break90end switch91#endplatform92if checkResult == COL_TOP93player[currentPlayer].yvel = -0x3000094player[currentPlayer].gravity = GRAVITY_AIR9596CreateTempObject(TypeName[Break Gem], 6, object.xpos, object.ypos)97object[tempObjectPos].ixpos -= 2498object[tempObjectPos].iypos += 899object[tempObjectPos].xvel = -0x18000100object[tempObjectPos].yvel = -0x1C000101object[tempObjectPos].state = BREAKGEM_SHARD102object[tempObjectPos].drawOrder = 5103object[tempObjectPos].gravityStrength = 0x2800104105CreateTempObject(TypeName[Break Gem], 7, object.xpos, object.ypos)106object[tempObjectPos].ixpos -= 8107object[tempObjectPos].iypos += 8108object[tempObjectPos].xvel = -0xC000109object[tempObjectPos].yvel = -0x20000110object[tempObjectPos].state = BREAKGEM_SHARD111object[tempObjectPos].drawOrder = 5112object[tempObjectPos].gravityStrength = 0x2800113114CreateTempObject(TypeName[Break Gem], 8, object.xpos, object.ypos)115object[tempObjectPos].ixpos += 8116object[tempObjectPos].iypos += 8117object[tempObjectPos].xvel = 0xC000118object[tempObjectPos].yvel = -0x20000119object[tempObjectPos].state = BREAKGEM_SHARD120object[tempObjectPos].drawOrder = 5121object[tempObjectPos].gravityStrength = 0x2800122123CreateTempObject(TypeName[Break Gem], 9, object.xpos, object.ypos)124object[tempObjectPos].ixpos += 24125object[tempObjectPos].iypos += 8126object[tempObjectPos].xvel = 0x18000127object[tempObjectPos].yvel = -0x1C000128object[tempObjectPos].state = BREAKGEM_SHARD129object[tempObjectPos].drawOrder = 5130object[tempObjectPos].gravityStrength = 0x2800131132CreateTempObject(TypeName[Break Gem], 10, object.xpos, object.ypos)133object[tempObjectPos].ixpos -= 24134object[tempObjectPos].iypos -= 4135object[tempObjectPos].xvel = -0x18000136object[tempObjectPos].yvel = -0x1C000137object[tempObjectPos].state = BREAKGEM_SHARD138object[tempObjectPos].drawOrder = 5139object[tempObjectPos].gravityStrength = 0x2800140141CreateTempObject(TypeName[Break Gem], 11, object.xpos, object.ypos)142object[tempObjectPos].ixpos -= 8143object[tempObjectPos].iypos += 2144object[tempObjectPos].xvel = -0xC000145object[tempObjectPos].yvel = -0x20000146object[tempObjectPos].state = BREAKGEM_SHARD147object[tempObjectPos].drawOrder = 5148object[tempObjectPos].gravityStrength = 0x2800149150CreateTempObject(TypeName[Break Gem], 10, object.xpos, object.ypos)151object[tempObjectPos].ixpos += 8152object[tempObjectPos].iypos += 6153object[tempObjectPos].xvel = 0xC000154object[tempObjectPos].yvel = -0x20000155object[tempObjectPos].state = BREAKGEM_SHARD156object[tempObjectPos].drawOrder = 5157object[tempObjectPos].gravityStrength = 0x2800158159CreateTempObject(TypeName[Break Gem], 11, object.xpos, object.ypos)160object[tempObjectPos].ixpos += 24161object[tempObjectPos].iypos -= 4162object[tempObjectPos].xvel = 0x18000163object[tempObjectPos].yvel = -0x1C000164object[tempObjectPos].state = BREAKGEM_SHARD165object[tempObjectPos].drawOrder = 5166object[tempObjectPos].gravityStrength = 0x2800167168CreateTempObject(TypeName[Break Gem], 2, object.xpos, object.ypos)169object[tempObjectPos].ixpos -= 24170object[tempObjectPos].iypos -= 8171object[tempObjectPos].xvel = -0x20000172object[tempObjectPos].yvel = -0x20000173object[tempObjectPos].state = BREAKGEM_SHARD174object[tempObjectPos].drawOrder = 5175object[tempObjectPos].gravityStrength = 0x3800176177CreateTempObject(TypeName[Break Gem], 3, object.xpos, object.ypos)178object[tempObjectPos].ixpos -= 8179object[tempObjectPos].iypos -= 8180object[tempObjectPos].xvel = -0x10000181object[tempObjectPos].yvel = -0x28000182object[tempObjectPos].state = BREAKGEM_SHARD183object[tempObjectPos].drawOrder = 5184object[tempObjectPos].gravityStrength = 0x3800185186CreateTempObject(TypeName[Break Gem], 4, object.xpos, object.ypos)187object[tempObjectPos].ixpos += 8188object[tempObjectPos].iypos -= 8189object[tempObjectPos].xvel = 0x10000190object[tempObjectPos].yvel = -0x28000191object[tempObjectPos].state = BREAKGEM_SHARD192object[tempObjectPos].drawOrder = 5193object[tempObjectPos].gravityStrength = 0x3800194195CreateTempObject(TypeName[Break Gem], 5, object.xpos, object.ypos)196object[tempObjectPos].ixpos += 24197object[tempObjectPos].iypos -= 8198object[tempObjectPos].xvel = 0x20000199object[tempObjectPos].yvel = -0x20000200object[tempObjectPos].state = BREAKGEM_SHARD201object[tempObjectPos].drawOrder = 5202object[tempObjectPos].gravityStrength = 0x3800203204// Erase this object205object.type = TypeName[Blank Object]206207// Nope, no 2P trickery here!208switch player[currentPlayer].badnikBonus209case 0210player.score += 100211break212213case 1214player.score += 200215break216217case 2218player.score += 500219break220221case 3222case 4223case 5224case 6225case 7226case 8227case 9228case 10229case 11230case 12231case 13232case 14233player.score += 1000234break235236case 15237player.score += 10000238break239end switch240241CreateTempObject(TypeName[Object Score], player[currentPlayer].badnikBonus, object.xpos, object.ypos)242object[tempObjectPos].drawOrder = 5243244if player[currentPlayer].gravity == GRAVITY_AIR245if player[currentPlayer].badnikBonus < 15246player[currentPlayer].badnikBonus++247end if248end if249250PlaySfx(SfxName[Block Break], false)251end if252else253// Simply interact with the player as a box254BoxCollisionTest(C_SOLID, object.entityPos, -24, -16, 24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)255end if256next257break258259case BREAKGEM_SHARD260object.xpos += object.xvel261object.ypos += object.yvel262object.yvel += object.gravityStrength263264if object.outOfBounds == true265object.type = TypeName[Blank Object]266end if267break268269end switch270end event271272273event ObjectDraw274if object.state == BREAKGEM_INTACT275DrawSpriteFX(0, FX_INK, object.xpos, object.ypos)276DrawSprite(1)277else278DrawSprite(object.propertyValue)279end if280end event281282283event ObjectStartup284LoadSpriteSheet("HPZ/Objects.gif")285286// Sprite frames287288// Gem frames289SpriteFrame(-32, -16, 64, 32, 1, 223)290SpriteFrame(-32, 1, 64, 15, 115, 207)291292// Shard frames293SpriteFrame(-8, -8, 16, 16, 115, 173)294SpriteFrame(-8, -8, 16, 16, 132, 173)295SpriteFrame(-8, -8, 16, 16, 149, 173)296SpriteFrame(-8, -8, 16, 16, 166, 173)297SpriteFrame(-8, -8, 16, 16, 115, 190)298SpriteFrame(-8, -8, 16, 16, 132, 190)299SpriteFrame(-8, -8, 16, 16, 149, 190)300SpriteFrame(-8, -8, 16, 16, 166, 190)301302SpriteFrame(-4, -4, 8, 8, 183, 173)303SpriteFrame(-4, -4, 8, 8, 183, 182)304305// Add this object to the debug mode object list306SetTableValue(TypeName[Break Gem], DebugMode_ObjCount, DebugMode_TypesTable)307SetTableValue(BreakGem_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)308SetTableValue(BreakGem_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)309DebugMode_ObjCount++310end event311312313// ========================314// Editor Events315// ========================316317event RSDKDraw318DrawSprite(0)319end event320321322event RSDKLoad323LoadSpriteSheet("HPZ/Objects.gif")324SpriteFrame(-32, -16, 64, 32, 1, 223)325326SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")327end event328329330