Path: blob/master/Sonic 1/Scripts/MZ/BossFireball.txt
1481 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Boss Fireball 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.fireballDir13private alias object.value3 : object.moveDistance1415private alias 0 : BOSSFIREBALL_SPAWNING16private alias 1 : BOSSFIREBALL_DROPPED17private alias 2 : BOSSFIREBALL_IDLE18private alias 3 : BOSSFIREBALL_HITFLOOR19private alias 4 : BOSSFIREBALL_MOVE_AND_SPAWN20private alias 5 : BOSSFIREBALL_SPAWNER21private alias 6 : BOSSFIREBALL_MOVE_HORIZONTAL22private alias 7 : BOSSFIREBALL_DISSIPATE2324// Path ID Aliases25private alias 0 : PATH_A262728// ========================29// Function Declarations30// ========================3132reserve function BossFireball_ProcessAnimation333435// ========================36// Function Definitions37// ========================3839// Shared by several states in order to animate the fireball40private function BossFireball_ProcessAnimation41object.frame = object.animationTimer42object.frame /= 124344object.direction = object.animationTimer45object.direction /= 646object.direction &= 147object.direction += object.fireballDir4849object.animationTimer++50object.animationTimer %= 2451end function525354// ========================55// Events56// ========================5758event ObjectUpdate59switch object.state60case BOSSFIREBALL_SPAWNING61object.fireballDir = 262object.timer++63if object.timer == 3064object.timer = 065object.fireballDir = 066object.state++67PlaySfx(SfxName[Small Fireball], false)68end if6970CallFunction(BossFireball_ProcessAnimation)71break7273case BOSSFIREBALL_DROPPED74object.yvel += 0x180075object.ypos += object.yvel7677if object.yvel > 0x3000078object.drawOrder = 579end if8081ObjectTileCollision(CSIDE_FLOOR, 0, 4, PATH_A)82if checkResult == true83CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)84object[tempObjectPos].moveDistance = object.xpos85object[tempObjectPos].moveDistance -= 0x10000086object[tempObjectPos].xvel = -0xA00087object[tempObjectPos].state = BOSSFIREBALL_HITFLOOR88object[tempObjectPos].drawOrder = 58990CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)91object[tempObjectPos].moveDistance = object.xpos92object[tempObjectPos].moveDistance += 0x10000093object[tempObjectPos].xvel = 0xA00094object[tempObjectPos].state = BOSSFIREBALL_HITFLOOR95object[tempObjectPos].drawOrder = 596object.state++97end if9899CallFunction(BossFireball_ProcessAnimation)100break101102case BOSSFIREBALL_IDLE103object.timer++104if object.timer == 120105object.timer = 0106object.state = BOSSFIREBALL_DISSIPATE107object.frame = 2108object.direction = FACING_RIGHT109else110CallFunction(BossFireball_ProcessAnimation)111end if112break113114case BOSSFIREBALL_HITFLOOR115object.xpos += object.xvel116117if object.xvel > 0118if object.xpos >= object.moveDistance119object.xvel = 0120object.xpos = object.moveDistance121object.state = BOSSFIREBALL_IDLE122123CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)124object[tempObjectPos].moveDistance = object.xpos125object[tempObjectPos].moveDistance += 0x100000126object[tempObjectPos].xvel = 0xA000127object[tempObjectPos].state = BOSSFIREBALL_MOVE_AND_SPAWN128object[tempObjectPos].drawOrder = 5129130end if131else132if object.xpos <= object.moveDistance133object.xvel = 0134object.xpos = object.moveDistance135object.state = BOSSFIREBALL_IDLE136137CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)138object[tempObjectPos].moveDistance = object.xpos139object[tempObjectPos].moveDistance -= 0x100000140object[tempObjectPos].xvel = -0xA000141object[tempObjectPos].state = BOSSFIREBALL_MOVE_AND_SPAWN142object[tempObjectPos].drawOrder = 5143144end if145end if146147CallFunction(BossFireball_ProcessAnimation)148break149150case BOSSFIREBALL_MOVE_AND_SPAWN151object.xpos += object.xvel152153if object.xvel > 0154if object.xpos >= object.moveDistance155object.xpos = object.moveDistance156object.state = BOSSFIREBALL_SPAWNER157158CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)159object[tempObjectPos].xvel = 0xA000160object[tempObjectPos].state = BOSSFIREBALL_MOVE_HORIZONTAL161object[tempObjectPos].drawOrder = 5162163end if164else165if object.xpos <= object.moveDistance166object.xpos = object.moveDistance167object.state = BOSSFIREBALL_SPAWNER168169CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)170object[tempObjectPos].xvel = -0xA000171object[tempObjectPos].state = BOSSFIREBALL_MOVE_HORIZONTAL172object[tempObjectPos].drawOrder = 5173174end if175end if176177CallFunction(BossFireball_ProcessAnimation)178break179180case BOSSFIREBALL_SPAWNER181object.timer++182183temp0 = object.timer184temp0 %= 48185if temp0 == 0186CreateTempObject(TypeName[Boss Fireball], 0, object.xpos, object.ypos)187188object[tempObjectPos].xvel = object.xvel189object[tempObjectPos].state = BOSSFIREBALL_MOVE_HORIZONTAL190object[tempObjectPos].drawOrder = 5191end if192193if object.timer == 120194object.timer = 0195object.state = BOSSFIREBALL_DISSIPATE196object.frame = 2197object.direction = FACING_RIGHT198199else200CallFunction(BossFireball_ProcessAnimation)201end if202break203204case BOSSFIREBALL_MOVE_HORIZONTAL205object.xpos += object.xvel206207if object.gravity == GRAVITY_GROUND208ObjectTileGrip(CSIDE_FLOOR, 0, 4, PATH_A)209object.gravity = checkResult210object.gravity ^= 1211else212object.drawOrder = 4213object.yvel += 0x1800214object.ypos += object.yvel215end if216217if object.outOfBounds == true218object.type = TypeName[Blank Object]219end if220221object.timer++222if object.timer == 90223object.type = TypeName[Blank Object]224end if225226CallFunction(BossFireball_ProcessAnimation)227break228229case BOSSFIREBALL_DISSIPATE230object.timer++231if object.timer == 8232object.type = TypeName[Blank Object]233end if234break235236end switch237238// Check for player collision239if object.state > BOSSFIREBALL_SPAWNING240if object.frame < 2241foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)242BoxCollisionTest(C_TOUCH, object.entityPos, -6, -6, 6, 6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)243if checkResult == true244CallFunction(Player_FireHit)245end if246next247end if248end if249end event250251252event ObjectDraw253DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)254end event255256257event ObjectStartup258LoadSpriteSheet("MZ/Objects.gif")259SpriteFrame(-7, -23, 15, 31, 52, 114)260SpriteFrame(-8, -24, 16, 32, 68, 114)261SpriteFrame(-8, -19, 16, 23, 85, 114)262end event263264265// ========================266// Editor Events267// ========================268269event RSDKDraw270DrawSprite(0)271end event272273274event RSDKLoad275LoadSpriteSheet("MZ/Objects.gif")276SpriteFrame(-7, -23, 15, 31, 52, 114)277SpriteFrame(-8, -24, 16, 32, 68, 114)278SpriteFrame(-8, -19, 16, 23, 85, 114)279280SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")281end event282283284