Path: blob/master/Sonic 2/Scripts/HPZ/BreakWall.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Breakable Wall Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.isDebris1213// Player Aliases14private alias object.propertyValue : player.character15private alias object.state : player.state16private alias object.xpos : player.xpos17private alias object.speed : player.speed18private alias object.direction : player.direction19private alias object.animation : player.animation20private alias object.value16 : player.isSidekick21private alias object.value40 : player.hitboxLeft22private alias object.value38 : player.hitboxTop23private alias object.value41 : player.hitboxRight24private alias object.value39 : player.hitboxBottom2526private alias 1 : SUPERSTATE_SUPER272829// ========================30// Function Declarations31// ========================3233reserve function BreakableWall_DebugDraw34reserve function BreakableWall_DebugSpawn353637// ========================38// Function Definitions39// ========================4041private function BreakableWall_DebugDraw42DrawSprite(0)43end function444546private function BreakableWall_DebugSpawn47CreateTempObject(TypeName[Breakable Wall], 0, object.xpos, object.ypos)48object[tempObjectPos].isDebris = false49object[tempObjectPos].drawOrder = 450end function515253// ========================54// Events55// ========================5657event ObjectUpdate58if object.isDebris == true59object.xpos += object.xvel60object.ypos += object.yvel61object.yvel += 0x70006263if object.outOfBounds == true64object.type = TypeName[Blank Object]65end if66else67foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)68checkResult = false69if player[currentPlayer].state == Player_State_Roll70if player[currentPlayer].speed >= 0x4800071checkResult = true72end if7374if player[currentPlayer].speed < -0x4800075checkResult = true76end if77end if7879#platform: USE_STANDALONE80if stage.playerListPos == PLAYER_KNUCKLES_A81#endplatform82#platform: USE_ORIGINS83// Origins Plus fixed a bug where sidekick Tails could break walls when playing as Knuckles & Tails84if player[currentPlayer].character == PLAYER_KNUCKLES85#endplatform86checkResult = true87end if8889if Player_superState == SUPERSTATE_SUPER90checkResult = true91end if9293#platform: USE_STANDALONE94if checkResult == true95BoxCollisionTest(C_TOUCH, object.entityPos, -17, -32, 17, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)96#endplatform97#platform: USE_ORIGINS98if stage.playerListPos == PLAYER_AMY99if player[currentPlayer].isSidekick == false100if player[currentPlayer].animation == ANI_HAMMER_JUMP101checkResult = 2102end if103if player[currentPlayer].animation == ANI_HAMMER_DASH104checkResult = 2105end if106end if107end if108109if checkResult != false110switch checkResult111case 1112BoxCollisionTest(C_TOUCH, object.entityPos, -17, -32, 17, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)113break114115case 2116BoxCollisionTest(C_TOUCH, object.entityPos, -17, -32, 17, 32, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)117break118end switch119#endplatform120if checkResult == true121object.type = TypeName[Blank Object]122PlaySfx(SfxName[Ledge Break], false)123124temp2 = object.xpos125temp2 -= 0x80000126127temp3 = object.xpos128temp3 += 0x80000129temp4 = object.ypos130temp4 -= 0x180000131132if player[currentPlayer].xpos < object.xpos133CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)134object[tempObjectPos].xvel = -0x60000135object[tempObjectPos].yvel = -0x60000136object[tempObjectPos].drawOrder = 4137138CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)139object[tempObjectPos].xvel = -0x40000140object[tempObjectPos].yvel = -0x50000141object[tempObjectPos].drawOrder = 4142temp4 += 0x100000143144CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)145object[tempObjectPos].xvel = -0x80000146object[tempObjectPos].yvel = -0x20000147object[tempObjectPos].drawOrder = 4148149CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)150object[tempObjectPos].xvel = -0x60000151object[tempObjectPos].yvel = -0x10000152object[tempObjectPos].drawOrder = 4153temp4 += 0x100000154155CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)156object[tempObjectPos].xvel = -0x80000157object[tempObjectPos].yvel = 0x20000158object[tempObjectPos].drawOrder = 4159160CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)161object[tempObjectPos].xvel = -0x60000162object[tempObjectPos].yvel = 0x10000163object[tempObjectPos].drawOrder = 4164temp4 += 0x100000165166CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)167object[tempObjectPos].xvel = -0x60000168object[tempObjectPos].yvel = 0x60000169object[tempObjectPos].drawOrder = 4170171CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)172object[tempObjectPos].xvel = -0x40000173object[tempObjectPos].yvel = 0x50000174object[tempObjectPos].drawOrder = 4175else176CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)177object[tempObjectPos].xvel = 0x40000178object[tempObjectPos].yvel = -0x50000179object[tempObjectPos].drawOrder = 4180181CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)182object[tempObjectPos].xvel = 0x60000183object[tempObjectPos].yvel = -0x60000184object[tempObjectPos].drawOrder = 4185temp4 += 0x100000186187CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)188object[tempObjectPos].xvel = 0x60000189object[tempObjectPos].yvel = -0x10000190object[tempObjectPos].drawOrder = 4191192CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)193object[tempObjectPos].xvel = 0x80000194object[tempObjectPos].yvel = -0x20000195object[tempObjectPos].drawOrder = 4196temp4 += 0x100000197198CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)199object[tempObjectPos].xvel = 0x60000200object[tempObjectPos].yvel = 0x10000201object[tempObjectPos].drawOrder = 4202203CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)204object[tempObjectPos].xvel = 0x80000205object[tempObjectPos].yvel = 0x20000206object[tempObjectPos].drawOrder = 4207temp4 += 0x100000208209CreateTempObject(TypeName[Breakable Wall], true, temp2, temp4)210object[tempObjectPos].xvel = 0x40000211object[tempObjectPos].yvel = 0x50000212object[tempObjectPos].drawOrder = 4213214CreateTempObject(TypeName[Breakable Wall], true, temp3, temp4)215object[tempObjectPos].xvel = 0x60000216object[tempObjectPos].yvel = 0x60000217object[tempObjectPos].drawOrder = 4218end if219220if player[currentPlayer].animation == ANI_GLIDING221player[currentPlayer].animation = ANI_GLIDING_DROP222player[currentPlayer].state = Player_State_GlideDrop223if player[currentPlayer].direction == FACING_LEFT224FlipSign(player[currentPlayer].speed)225end if226end if227end if228else229BoxCollisionTest(C_SOLID, object.entityPos, -16, -32, 16, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)230end if231next232end if233end event234235236event ObjectDraw237DrawSprite(object.propertyValue)238end event239240241event ObjectStartup242LoadSpriteSheet("HPZ/Objects.gif")243244arrayPos0 = 0x20245while arrayPos0 < 0x420246if object[arrayPos0].type == TypeName[Breakable Wall]247object[arrayPos0].isDebris = false // Make sure we don't accidentally spawn debris by mistake248object[arrayPos0].drawOrder = 4249end if250251arrayPos0++252loop253254SpriteFrame(-16, -32, 32, 64, 443, 34)255SpriteFrame(-8, -8, 16, 16, 443, 34)256257SetTableValue(TypeName[Breakable Wall], DebugMode_ObjCount, DebugMode_TypesTable)258SetTableValue(BreakableWall_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)259SetTableValue(BreakableWall_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)260DebugMode_ObjCount++261end event262263264// ========================265// Editor Events266// ========================267268event RSDKDraw269DrawSprite(0)270end event271272273event RSDKLoad274LoadSpriteSheet("HPZ/Objects.gif")275SpriteFrame(-16, -32, 32, 64, 443, 34)276277SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")278end event279280281