Path: blob/master/Sonic 2/Scripts/MPZ/EggmanBalloon.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Eggman Balloon Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.angle : object.angle.x12private alias object.value1 : object.angle.y1314private alias object.value0 : object.parent1516// TODO: prolly should be mpz rather than mbz, same applies to other uses of it in this zone too1718// States19private alias 0 : MBZEGGMANBALLOON_ROTATING20private alias 1 : MBZEGGMANBALLOON_EXPAND21private alias 2 : MBZEGGMANBALLOON_BOUNCING22private alias 3 : MBZEGGMANBALLOON_POPPED2324// MBZEggman Aliases25private alias object.value17 : mbzEggman.balloonRadius.x26private alias object.value18 : mbzEggman.balloonRadius.y27private alias object.value19 : mbzEggman.balloonOffset.y28private alias object.value20 : mbzEggman.activeBalloons2930// Player Aliases31private alias object.state : player.state32private alias object.xpos : player.xpos33private alias object.ypos : player.ypos34private alias object.xvel : player.xvel35private alias object.yvel : player.yvel36private alias object.speed : player.speed37private alias object.gravity : player.gravity38private alias object.animation : player.animation3940private alias object.value7 : player.invincibleTimer41private alias object.value8 : player.blinkTimer42private alias object.value16 : player.isSidekick43private alias object.value25 : player.gravityStrength44private alias object.value40 : player.hitboxLeft45private alias object.value38 : player.hitboxTop46private alias object.value41 : player.hitboxRight47private alias object.value39 : player.hitboxBottom4849// Path ID Aliases50private alias 0 : PATH_A515253// ========================54// Tables55// ========================5657private table EggmanBalloon_expandFrameTable580, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 4, 5, 6, 7, 859end table606162// ========================63// Events64// ========================6566event ObjectUpdate67switch object.state68case MBZEGGMANBALLOON_ROTATING69object.angle.x += 470object.angle.x &= 0xFF71object.angle.y += 472object.angle.y &= 0xFF7374if object.angle.x == 0x8075object.drawOrder = 376else77if object.angle.x == 078object.drawOrder = 279end if80end if8182object.frame = object.angle.x83object.frame -= 0x2084object.frame &= 0xFF85object.frame >>= 686if object.frame == 387object.frame = 188end if8990arrayPos0 = object.parent9192temp0 = object.angle.x93Cos256(object.xpos, temp0)94object.xpos *= mbzEggman[arrayPos0].balloonRadius.x95object.xpos <<= 896object.xpos += object[arrayPos0].xpos9798temp0 += object.angle.y99temp0 &= 0xFF100Sin256(object.ypos, temp0)101object.ypos *= mbzEggman[arrayPos0].balloonRadius.y102object.ypos <<= 8103object.ypos += object[arrayPos0].ypos104object.ypos += mbzEggman[arrayPos0].balloonOffset.y105break106107case MBZEGGMANBALLOON_EXPAND108object.xpos += object.xvel109object.ypos += object.yvel110object.yvel += 0x1800111112if object.yvel >= 0x18000113object.yvel = 0x18000114end if115116if object.yvel > 0117ObjectTileCollision(CSIDE_FLOOR, 0, 20, PATH_A)118if checkResult == true119if player[0].xpos < object.xpos120object.xvel = -0x8000121object.direction = FLIP_NONE122else123object.xvel = 0x8000124object.direction = FLIP_X125end if126FlipSign(object.yvel)127object.state = MBZEGGMANBALLOON_BOUNCING128end if129end if130131temp0 = object.animationTimer132temp0 >>= 2133GetTableValue(object.frame, temp0, EggmanBalloon_expandFrameTable)134if object.frame != 8135object.animationTimer++136end if137break138139case MBZEGGMANBALLOON_BOUNCING140object.xpos += object.xvel141object.ypos += object.yvel142object.yvel += 0x480143144if object.yvel >= 0x18000145object.yvel = 0x18000146end if147148if object.yvel > 0149ObjectTileCollision(CSIDE_FLOOR, 0, 20, PATH_A)150if checkResult == true151if player[0].xpos < object.xpos152object.xvel = -0x8000153object.direction = FLIP_NONE154else155object.xvel = 0x8000156object.direction = FLIP_X157end if158FlipSign(object.yvel)159end if160end if161break162163case MBZEGGMANBALLOON_POPPED164object.animationTimer--165if object.animationTimer == 0166object.type = TypeName[Blank Object]167end if168break169170end switch171172if object.state < MBZEGGMANBALLOON_POPPED173foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)174if object.frame < 6175BoxCollisionTest(C_TOUCH, object.entityPos, -6, -6, 6, 6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)176if checkResult == true177CallFunction(Player_Hit)178end if179else180BoxCollisionTest(C_TOUCH, object.entityPos, -12, -12, 12, 12, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)181if checkResult == true182CheckEqual(player[currentPlayer].animation, ANI_JUMPING)183temp0 = checkResult184CheckEqual(player[currentPlayer].animation, ANI_SPINDASH)185temp0 |= checkResult186CheckEqual(player[currentPlayer].animation, ANI_GLIDING)187temp0 |= checkResult188CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)189temp0 |= checkResult190#platform: USE_ORIGINS191if stage.playerListPos == PLAYER_AMY192if player[currentPlayer].isSidekick == false193CheckEqual(player[currentPlayer].animation, ANI_HAMMER_JUMP)194temp0 |= checkResult195CheckEqual(player[currentPlayer].animation, ANI_HAMMER_DASH)196temp0 |= checkResult197end if198end if199#endplatform200CheckNotEqual(player[currentPlayer].invincibleTimer, 0)201temp0 |= checkResult202CheckEqual(player[currentPlayer].animation, ANI_FLYING)203temp1 = checkResult204CheckEqual(player[currentPlayer].animation, ANI_FLYINGTIRED)205temp1 |= checkResult206CheckEqual(player[currentPlayer].animation, ANI_FLY_LIFT_UP)207temp1 |= checkResult208CheckEqual(player[currentPlayer].animation, ANI_FLY_LIFT_DOWN)209temp1 |= checkResult210CheckEqual(player[currentPlayer].animation, ANI_FLY_LIFT_TIRED)211temp1 |= checkResult212if temp1 == true213CheckGreater(player[currentPlayer].ypos, object.ypos)214temp0 |= checkResult215end if216217if temp0 == true218PlaySfx(SfxName[Explosion], false)219object.state = MBZEGGMANBALLOON_POPPED220object.frame = 9221object.animationTimer = 3222223arrayPos0 = object.parent224mbzEggman[arrayPos0].activeBalloons--225if mbzEggman[arrayPos0].activeBalloons < 0226mbzEggman[arrayPos0].activeBalloons = 0227end if228229if player[currentPlayer].gravity == GRAVITY_AIR230FlipSign(player[currentPlayer].xvel)231player[currentPlayer].speed = player[currentPlayer].xvel232player[currentPlayer].yvel += player[currentPlayer].gravityStrength233player[currentPlayer].yvel += player[currentPlayer].gravityStrength234FlipSign(player[currentPlayer].yvel)235end if236237if player[currentPlayer].animation == ANI_GLIDING238player[currentPlayer].animation = ANI_GLIDING_DROP239player[currentPlayer].state = Player_State_GlideDrop240end if241else242if player[currentPlayer].state != Player_State_Death243if player[currentPlayer].blinkTimer == 0244if player[currentPlayer].invincibleTimer == 0245player[currentPlayer].state = Player_State_GotHit246if player[currentPlayer].xpos > object.xpos247player[currentPlayer].speed = 0x20000248else249player[currentPlayer].speed = -0x20000250end if251end if252PlaySfx(SfxName[Explosion], false)253object.state = MBZEGGMANBALLOON_POPPED254object.frame = 9255object.animationTimer = 3256257arrayPos0 = object.parent258mbzEggman[arrayPos0].activeBalloons--259if mbzEggman[arrayPos0].activeBalloons < 0260mbzEggman[arrayPos0].activeBalloons = 0261end if262end if263end if264end if265end if266end if267next268end if269end event270271272event ObjectDraw273DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)274end event275276277event ObjectStartup278CheckCurrentStageFolder("Zone09")279if checkResult == true280LoadSpriteSheet("MPZ/Objects.gif")281SpriteFrame(-8, -8, 16, 16, 302, 138) // Balloon - Frame 1 - #0282SpriteFrame(-10, -10, 20, 20, 281, 134) // Balloon - Frame 2 - #1283SpriteFrame(-12, -12, 24, 24, 256, 130) // Balloon - Frame 3 - #2284SpriteFrame(-6, -12, 12, 23, 319, 133) // Squish Frame - #3285SpriteFrame(-11, -5, 22, 10, 332, 133) // Squash Frame - #4286SpriteFrame(-8, -8, 16, 18, 355, 133) // Tiny Balloon - #5287SpriteFrame(-12, -12, 24, 23, 372, 133) // Small Eggman Balloon - Frame 1 - #6288SpriteFrame(-16, -16, 32, 32, 397, 133) // Small Eggman Balloon - Frame 2 - #7289SpriteFrame(-24, -24, 48, 47, 430, 133) // Eggman Balloon - #8290SpriteFrame(-21, -24, 42, 48, 277, 207) // Pop - #9291else292LoadSpriteSheet("MBZ/Objects.gif")293SpriteFrame(-8, -8, 16, 16, 371, 239) // Balloon - Frame 1 - #0294SpriteFrame(-10, -10, 20, 20, 350, 235) // Balloon - Frame 2 - #1295SpriteFrame(-12, -12, 24, 24, 325, 231) // Balloon - Frame 3 - #2296SpriteFrame(-6, -12, 12, 23, 375, 214) // Squish Frame - #3297SpriteFrame(-11, -5, 22, 10, 388, 245) // Squash Frame - #4298SpriteFrame(-8, -8, 16, 18, 411, 237) // Tiny Balloon - #5299SpriteFrame(-12, -12, 24, 23, 428, 232) // Small Eggman Balloon - Frame 1 - #6300SpriteFrame(-16, -16, 32, 32, 453, 223) // Small Eggman Balloon - Frame 2 - #7301SpriteFrame(-24, -24, 48, 47, 486, 208) // Eggman Balloon - #8302SpriteFrame(-21, -24, 42, 48, 312, 182) // Pop - #9303end if304end event305306307event RSDKDraw308DrawSprite(8)309end event310311312event RSDKLoad313CheckCurrentStageFolder("Zone09")314if checkResult == true315LoadSpriteSheet("MPZ/Objects.gif")316SpriteFrame(-8, -8, 16, 16, 302, 138) // Balloon - Frame 1 - #0317SpriteFrame(-10, -10, 20, 20, 281, 134) // Balloon - Frame 2 - #1318SpriteFrame(-12, -12, 24, 24, 256, 130) // Balloon - Frame 3 - #2319SpriteFrame(-6, -12, 12, 23, 319, 133) // Squish Frame - #3320SpriteFrame(-11, -5, 22, 10, 332, 133) // Squash Frame - #4321SpriteFrame(-8, -8, 16, 18, 355, 133) // Tiny Balloon - #5322SpriteFrame(-12, -12, 24, 23, 372, 133) // Small Eggman Balloon - Frame 1 - #6323SpriteFrame(-16, -16, 32, 32, 397, 133) // Small Eggman Balloon - Frame 2 - #7324SpriteFrame(-24, -24, 48, 47, 430, 133) // Eggman Balloon - #8325SpriteFrame(-21, -24, 42, 48, 277, 207) // Pop - #9326else327LoadSpriteSheet("MBZ/Objects.gif")328SpriteFrame(-8, -8, 16, 16, 371, 239) // Balloon - Frame 1 - #0329SpriteFrame(-10, -10, 20, 20, 350, 235) // Balloon - Frame 2 - #1330SpriteFrame(-12, -12, 24, 24, 325, 231) // Balloon - Frame 3 - #2331SpriteFrame(-6, -12, 12, 23, 375, 214) // Squish Frame - #3332SpriteFrame(-11, -5, 22, 10, 388, 245) // Squash Frame - #4333SpriteFrame(-8, -8, 16, 18, 411, 237) // Tiny Balloon - #5334SpriteFrame(-12, -12, 24, 23, 428, 232) // Small Eggman Balloon - Frame 1 - #6335SpriteFrame(-16, -16, 32, 32, 453, 223) // Small Eggman Balloon - Frame 2 - #7336SpriteFrame(-24, -24, 48, 47, 486, 208) // Eggman Balloon - #8337SpriteFrame(-21, -24, 42, 48, 312, 182) // Pop - #9338end if339340SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")341end event342343344