Path: blob/master/Sonic 2/Scripts/MCZ/Eggman.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Eggman Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// Using MCZEggman as a prefix here because there's like 12 "Eggman" objects in the game so it's less confusing this way89// ========================10// Aliases11// ========================1213private alias object.value0 : object.timer14private alias object.value1 : object.originPos.y15private alias object.value2 : object.oscillationAngle16private alias object.value3 : object.health17private alias object.value4 : object.invincibilityTimer18private alias object.value5 : object.exploding1920private alias object.value6 : object.boundsM21private alias object.value7 : object.boundsL22private alias object.value8 : object.boundsR23private alias object.value9 : object.boundsT24private alias object.value10 : object.boundsB2526// value11 is unused2728private alias object.value12 : object.flameAnimation29private alias object.value13 : object.flameAnimTimer3031private alias object.value14 : object.lightsFrame3233private alias object.value15 : object.drillOffsetL.x34private alias object.value16 : object.drillOffsetR.x35private alias object.value17 : object.drillOffset.y36private alias object.value18 : object.drillFrame37private alias object.value19 : object.drillAnimSpeed3839private alias object.value20 : object.shakeStopPos40private alias object.value21 : object.shakeTimer4142// Eggman States43private alias 0 : MCZEGGMAN_AWAITPLAYER44private alias 1 : MCZEGGMAN_ENTERDELAY45private alias 2 : MCZEGGMAN_ENTEREGGMAN46private alias 3 : MCZEGGMAN_RISE47private alias 4 : MCZEGGMAN_LANDINGDRILLTURN48private alias 5 : MCZEGGMAN_RISINGDRILLTURN49private alias 6 : MCZEGGMAN_ADVANCELEFT50private alias 7 : MCZEGGMAN_ADVANCERIGHT51private alias 8 : MCZEGGMAN_EXPLODING52private alias 9 : MCZEGGMAN_DEFEATFALL53private alias 10 : MCZEGGMAN_DEFEATRISE54private alias 11 : MCZEGGMAN_FLEE55private alias 12 : MCZEGGMAN_ESCAPE5657// Eggman Animations58private alias 0 : MCZEGGANI_INVISIBLE59private alias 1 : MCZEGGANI_IDLE60private alias 2 : MCZEGGANI_LAUGH61private alias 3 : MCZEGGANI_HIT62private alias 4 : MCZEGGANI_DEFEATED63private alias 5 : MCZEGGANI_TOASTED64private alias 6 : MCZEGGANI_PANIC6566// Jet States67private alias 0 : FLAMEANI_INACITVE68private alias 1 : FLAMEANI_ACITVE6970// Drill states71private alias 0 : DRILL_ACTIVE72private alias 1 : DRILL_FELLOFF7374// Player aliases75private alias object.xpos : player.xpos76private alias object.xvel : player.xvel77private alias object.speed : player.speed78private alias object.animation : player.animation79private alias object.collisionRight : player.collisionRight80private alias object.value40 : player.hitboxLeft81private alias object.value38 : player.hitboxTop82private alias object.value41 : player.hitboxRight83private alias object.value39 : player.hitboxBottom8485// Music Events86private alias 26 : SLOT_MUSICEVENT_BOSS8788private alias 0 : MUSICEVENT_FADETOBOSS89private alias 1 : MUSICEVENT_FADETOSTAGE909192// ========================93// Function Declarations94// ========================9596reserve function MCZEggman_Oscillate97reserve function MCZEggman_UpdateDrills98reserve function MCZEggman_ShakeScreen99100101// ========================102// Tables103// ========================104105private table MCZEggman_flameAnimTimerTable1069, 9, 10, 10107end table108109110// ========================111// Function Definitions112// ========================113114private function MCZEggman_Oscillate115// Used after getting defeated116Sin256(object.ypos, object.oscillationAngle)117object.ypos <<= 10118object.ypos += object.originPos.y119object.oscillationAngle += 2120object.oscillationAngle &= 0xFF121end function122123124private function MCZEggman_UpdateDrills125// Set the two drill's angles so that they can properly rotate126object[-1].angle = object.rotation127object[+1].angle = object.rotation128129object[-1].frame = object.drillFrame130object[-1].frame >>= 2131132if object.rotation > 88133object[-1].frame += 3134temp0 = object.rotation135temp0 -= 128136temp0 &= 511137else138temp0 = object.rotation139end if140141// The two drills should use the same frame142object[+1].frame = object[-1].frame143144// Animation of the drills is done here145object.drillFrame += object.drillAnimSpeed146object.drillFrame %= 12147148object[-1].xpos = object.xpos149object[+1].xpos = object.xpos150151if object.direction == FLIP_NONE152object[-1].xpos += object.drillOffsetL.x153object[+1].xpos += object.drillOffsetR.x154object[-1].rotation = 0x200155object[-1].rotation -= temp0156object[-1].rotation &= 0x1FF157object[+1].rotation = object[-1].rotation158else159object[-1].xpos -= object.drillOffsetL.x160object[+1].xpos -= object.drillOffsetR.x161object[-1].rotation = temp0162object[+1].rotation = temp0163end if164165object[-1].ypos = object.ypos166object[-1].ypos += object.drillOffset.y167object[-1].direction = object.direction168169object[+1].ypos = object.ypos170object[+1].ypos += object.drillOffset.y171object[+1].direction = object.direction172end function173174175private function MCZEggman_ShakeScreen176// Called when "burrowing" in the rock in order to shake the screen and spawn rocks177if object.ypos < object.shakeStopPos178object.shakeTimer++179object.shakeTimer %= 40180if object.shakeTimer == 8181PlaySfx(SfxName[Rumble], false)182end if183184temp0 = object.shakeTimer185temp0 &= 3186if temp0 == 0187screen.shakeY = 2188end if189190temp0 = oscillation191temp0 &= 7192if temp0 == 0193temp0 = oscillation194temp0 &= 15195if temp0 == 0196temp0 = 1197else198temp0 = 0199end if200201Rand(temp1, screen.xsize)202temp2 = object.shakeTimer203temp2 <<= 4204temp1 += temp2205temp1 %= screen.xsize206temp1 -= screen.xcenter207temp1 <<= 16208temp1 += object.boundsM209temp2 = object.boundsT210temp2 += 0x900000211CreateTempObject(TypeName[Boss Rock], temp0, temp1, temp2)212end if213end if214end function215216217// ========================218// Events219// ========================220221event ObjectUpdate222switch object.state223case MCZEGGMAN_AWAITPLAYER224temp0 = object[-1].xpos225temp0 -= 0x100000226if player[0].xpos > temp0227// Set screen bounds228// object[-1] is drill A's slot, [+1] is drill B's slot229temp0 = object[-1].ixpos230temp0 -= screen.xcenter231stage.newXBoundary1 = temp0232233temp0 = object[-1].ixpos234temp0 += screen.xcenter235stage.newXBoundary2 = temp0236237temp0 = stage.newYBoundary2238temp0 -= screen.ysize239stage.newYBoundary1 = temp0240241object.boundsM = object[-1].xpos242243object.boundsL = -112244object.boundsL *= screen.xsize245object.boundsL /= 320246object.boundsL <<= 16247248object.boundsR = object.boundsL249FlipSign(object.boundsR)250251object.boundsL += object[-1].xpos252object.boundsR += object[-1].xpos253254object.boundsT = object[-1].ypos255object.boundsT -= 0x1200000256257object.boundsB = object[-1].ypos258object.boundsB -= 0x200000259260object.shakeStopPos = object[+1].ypos261object.shakeStopPos += 0x280000262263object.xpos = 16264object.xpos *= screen.xsize265object.xpos /= 320266object.xpos <<= 16267object.xpos += object[-1].xpos268269object.ypos = object.boundsT270271object.animation = MCZEGGANI_IDLE272273// Start the boss music274ResetObjectEntity(SLOT_MUSICEVENT_BOSS, TypeName[Music Event], MUSICEVENT_FADETOBOSS, 0, 0)275object[SLOT_MUSICEVENT_BOSS].priority = PRIORITY_ACTIVE276277// Spawn the drills278CheckCurrentStageFolder("Zone06")279if checkResult == true280// In Mystic Cave - no special action needed here281object[-1].type = TypeName[Eggman Drill]282object[+1].type = TypeName[Eggman Drill]283else284// In EGZ, the `Eggman Drill` namespace is already taken up by another object so use a renamed variant285object[-1].type = TypeName[Eggman Drill 2]286object[+1].type = TypeName[Eggman Drill 2]287end if288289object.lightsFrame = 6290291object.flameAnimation = FLAMEANI_ACITVE292293object.drillOffsetL.x = -0x120000294object.drillOffsetR.x = 0x160000295CallFunction(MCZEggman_UpdateDrills) // Called to init the drills' other values296297object.drillOffset.y = 0298299#platform: USE_STANDALONE300object.health = 8301#endplatform302#platform: USE_ORIGINS303if game.bossOneLife == false304object.health = 8305else306object.health = 1307end if308#endplatform309310object.priority = PRIORITY_ACTIVE311object.state = MCZEGGMAN_ENTERDELAY312end if313break314315case MCZEGGMAN_ENTERDELAY316object.timer++317if object.timer == 60318object.timer = 0319object.yvel = 0xC000320object.drillAnimSpeed = 2321object.state = MCZEGGMAN_ENTEREGGMAN322end if323break324325case MCZEGGMAN_ENTEREGGMAN326object.ypos += object.yvel327if object.ypos >= object.boundsB328object.ypos = object.boundsB329object.lightsFrame = 7330object.flameAnimation = FLAMEANI_INACITVE331object.drillAnimSpeed = 1332if player[0].xpos > object.xpos333object.direction = FLIP_X334end if335object.state = MCZEGGMAN_LANDINGDRILLTURN336end if337338CallFunction(MCZEggman_UpdateDrills)339CallFunction(MCZEggman_ShakeScreen)340break341342case MCZEGGMAN_RISE343object.ypos += object.yvel344if object.ypos <= object.boundsT345object.ypos = object.boundsT346object.yvel = 0x10000347if player[0].xpos > object.boundsM348object.xpos = object.boundsL349object.direction = FLIP_X350else351object.xpos = object.boundsR352object.direction = FLIP_NONE353end if354object.state = MCZEGGMAN_ENTEREGGMAN355end if356357CallFunction(MCZEggman_UpdateDrills)358CallFunction(MCZEggman_ShakeScreen)359break360361case MCZEGGMAN_LANDINGDRILLTURN362// Turning the drills horizontally after burrowing out363object.timer++364if object.timer == 100365object.timer = 0366object.drillAnimSpeed = 2367if object.direction == FLIP_NONE368object.xvel = -0x20000369object.state = MCZEGGMAN_ADVANCELEFT370else371object.xvel = 0x20000372object.state = MCZEGGMAN_ADVANCERIGHT373end if374end if375376if object.timer > 40377if object.rotation < 128378object.rotation += 4379end if380381temp0 = 128382temp0 -= object.rotation383temp0 <<= 9384temp1 = object.rotation385temp1 <<= 9386387object.drillOffsetL.x = -18388object.drillOffsetR.x = 22389object.drillOffsetL.x *= temp0390object.drillOffsetR.x *= temp0391object.drillOffset.y = 0392object.drillOffset.y *= temp0393394temp2 = -6395temp3 = 34396temp2 *= temp1397temp3 *= temp1398temp4 = 4399temp4 *= temp1400401object.drillOffsetL.x += temp2402object.drillOffsetR.x += temp3403object.drillOffset.y += temp4404end if405406CallFunction(MCZEggman_UpdateDrills)407break408409case MCZEGGMAN_RISINGDRILLTURN410// Turning the drills vertically in order to burrow back into the roof of rocks411object.timer++412if object.timer == 100413object.timer = 0414object.drillAnimSpeed = 2415object.yvel = -0xC000416object.lightsFrame = 6417object.state = MCZEGGMAN_RISE418end if419420if object.timer > 40421if object.rotation > 0422object.rotation -= 4423end if424425temp0 = 128426temp0 -= object.rotation427temp0 <<= 9428temp1 = object.rotation429temp1 <<= 9430431object.drillOffsetL.x = -18432object.drillOffsetR.x = 22433object.drillOffsetL.x *= temp0434object.drillOffsetR.x *= temp0435object.drillOffset.y = 0436object.drillOffset.y *= temp0437438temp2 = -6439temp3 = 34440temp2 *= temp1441temp3 *= temp1442temp4 = 4443temp4 *= temp1444445object.drillOffsetL.x += temp2446object.drillOffsetR.x += temp3447object.drillOffset.y += temp4448end if449450CallFunction(MCZEggman_UpdateDrills)451break452453case MCZEGGMAN_ADVANCELEFT454object.xpos += object.xvel455if object.xpos <= object.boundsL456object.xpos = object.boundsL457object.flameAnimation = FLAMEANI_ACITVE458object.drillAnimSpeed = 1459object.state = MCZEGGMAN_RISINGDRILLTURN460end if461462CallFunction(MCZEggman_UpdateDrills)463break464465case MCZEGGMAN_ADVANCERIGHT466object.xpos += object.xvel467if object.xpos >= object.boundsR468object.xpos = object.boundsR469object.flameAnimation = FLAMEANI_ACITVE470object.drillAnimSpeed = 1471object.state = MCZEGGMAN_RISINGDRILLTURN472end if473474CallFunction(MCZEggman_UpdateDrills)475break476477case MCZEGGMAN_EXPLODING478object.timer++479480if object.timer == 60481if object.direction == FLIP_NONE482object[-1].xvel = -0x10000483else484object[-1].xvel = 0x10000485end if486object[-1].yvel = -0x20000487object[-1].state = DRILL_FELLOFF488end if489490if object.timer == 120491if object.direction == FLIP_NONE492object[+1].xvel = 0x10000493else494object[+1].xvel = -0x10000495end if496object[+1].yvel = -0x20000497object[+1].state = DRILL_FELLOFF498end if499500if object.timer == 180501object.timer = 0502object.animation = MCZEGGANI_TOASTED503object.exploding = false504object.yvel = 0505object.state = MCZEGGMAN_DEFEATFALL506ResetObjectEntity(SLOT_MUSICEVENT_BOSS, TypeName[Music Event], MUSICEVENT_FADETOSTAGE, 0, 0)507object[SLOT_MUSICEVENT_BOSS].priority = PRIORITY_ACTIVE508temp0 = tileLayer[0].xsize509temp0 <<= 7510stage.newXBoundary2 = temp0511end if512break513514case MCZEGGMAN_DEFEATFALL515object.ypos += object.yvel516object.yvel += 0x1800517object.timer++518if object.timer == 16519object.yvel = 0520object.timer = 0521object.animationTimer = 0522object.state++523end if524break525526case MCZEGGMAN_DEFEATRISE527if object.timer < 24528object.ypos += object.yvel529object.yvel -= 0x800530object.timer++531else532object.timer = 0533object.yvel = 0534object.originPos.y = object.ypos535object.state++536end if537break538539case MCZEGGMAN_FLEE540CallFunction(MCZEggman_Oscillate)541if object.timer < 8542object.timer++543else544object.timer = 0545object.animation = MCZEGGANI_PANIC546object.flameAnimation = FLAMEANI_ACITVE547object.animationTimer = 0548object.direction = FLIP_X549object.priority = PRIORITY_ACTIVE550551#platform: USE_STANDALONE552temp0 = tileLayer[0].xsize553temp0 <<= 7554stage.newXBoundary2 = temp0555#endplatform556557object.state++558end if559break560561case MCZEGGMAN_ESCAPE562object.xpos += 0x40000563object.originPos.y -= 0x4000564CallFunction(MCZEggman_Oscillate)565if object.outOfBounds == true566ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)567end if568break569570end switch571572if object.health != 0573if object.invincibilityTimer > 0574// Update boss flashing575object.invincibilityTimer--576GetBit(temp0, object.invincibilityTimer, 0)577if temp0 == true578SetPaletteEntry(0, 192, 0xE0E0E0)579else580SetPaletteEntry(0, 192, 0x000000)581end if582end if583584foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)585if object.invincibilityTimer < 32586CheckEqual(player[currentPlayer].animation, ANI_HURT)587temp0 = checkResult588CheckEqual(player[currentPlayer].animation, ANI_DYING)589temp0 |= checkResult590CheckEqual(player[currentPlayer].animation, ANI_DROWNING)591temp0 |= checkResult592if temp0 != false593if object.animation != MCZEGGANI_LAUGH594// If the player just got hurt, then start chuckling595object.animation = MCZEGGANI_LAUGH596object.animationTimer = 0597end if598end if599600BoxCollisionTest(C_TOUCH, object.entityPos, -24, -24, 24, 24, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)601if checkResult == true602CallFunction(Player_CheckHit)603if checkResult == true604object.health--605if object.health == 0606#platform: USE_ORIGINS607CallNativeFunction2(NotifyCallback, NOTIFY_KILL_BOSS, 0)608CallNativeFunction2(NotifyCallback, NOTIFY_BOSS_END, 1)609#endplatform610611player.score += 1000612object.timer = 0613object.animation = MCZEGGANI_DEFEATED614object.flameAnimation = FLAMEANI_INACITVE615object.animationTimer = 0616object.exploding = true617object.originPos.y = object.ypos618object.state = MCZEGGMAN_EXPLODING619object[-1].interaction = false620object[+1].interaction = false621SetPaletteEntry(0, 192, 0x000000)622else623object.animation = MCZEGGANI_HIT624object.animationTimer = 0625object.invincibilityTimer = 64626PlaySfx(SfxName[Boss Hit], false)627end if628end if629end if630end if631next632end if633634if object.state != MCZEGGMAN_ESCAPE635// Enforce the right wall636foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)637temp0 = player[currentPlayer].collisionRight638temp0 <<= 16639temp0 += player[currentPlayer].xpos640temp1 = stage.curXBoundary2641temp1 <<= 16642if temp0 > temp1643player[currentPlayer].xvel = 0644player[currentPlayer].speed = 0645player[currentPlayer].xpos = temp1646temp0 = player[currentPlayer].collisionRight647temp0 <<= 16648player[currentPlayer].xpos -= temp0649end if650next651end if652653if object.exploding == true654temp0 = oscillation655temp0 &= 7656if temp0 == 0657Rand(temp0, 48)658temp0 -= 24659temp0 <<= 16660temp0 += object.xpos661Rand(temp1, 48)662temp1 -= 24663temp1 <<= 16664temp1 += object.ypos665CreateTempObject(TypeName[Explosion], 0, temp0, temp1)666object[tempObjectPos].drawOrder = 5667PlaySfx(SfxName[Explosion], false)668end if669end if670end event671672673event ObjectDraw674675// First draw the ship676DrawSpriteFX(6, FX_FLIP, object.xpos, object.ypos)677if object.lightsFrame == 7 // ??? - This could be a simple `DrawSpriteFX(object.lightsFrame, ...)` instead, as the variable's set up like that678DrawSpriteFX(7, FX_FLIP, object.xpos, object.ypos)679end if680681// Then draw Eggman himself, he's animated here as well682switch object.animation683case MCZEGGANI_INVISIBLE684default685break686687case MCZEGGANI_IDLE688temp0 = object.animationTimer689temp0 >>= 3690object.animationTimer++691object.animationTimer &= 15692DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)693break694695case MCZEGGANI_LAUGH696temp0 = object.animationTimer697temp0 &= 15698temp0 >>= 3699temp0 += 2700object.animationTimer++701if object.animationTimer == 50702object.animationTimer = 0703704if player[0].animation != ANI_DYING // If P1 is dead, continue laughing705object.animation = MCZEGGANI_IDLE706end if707end if708DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)709break710711case MCZEGGANI_HIT712temp0 = object.animationTimer713temp0 &= 1714temp0 += 2715object.animationTimer++716if object.animationTimer == 50717object.animationTimer = 0718object.animation = MCZEGGANI_IDLE719end if720DrawSpriteFX(4, FX_FLIP, object.xpos, object.ypos)721break722723case MCZEGGANI_DEFEATED724temp0 = object.animationTimer725temp0 >>= 5726temp0 += 4727temp0 %= 5728object.animationTimer++729object.animationTimer &= 63730DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)731break732733case MCZEGGANI_TOASTED734DrawSpriteFX(5, FX_FLIP, object.xpos, object.ypos)735break736737case MCZEGGANI_PANIC738temp0 = object.animationTimer739temp0 >>= 3740object.animationTimer++741object.animationTimer &= 15742DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)743temp0 = object.animationTimer744temp0 >>= 2745temp0 &= 1746if temp0 == 1747DrawSpriteFX(11, FX_FLIP, object.xpos, object.ypos)748end if749break750751end switch752753switch object.flameAnimation754case FLAMEANI_INACITVE755// The jet isn't "on" so just draw the frame without any fire coming from it756DrawSpriteFX(8, FX_FLIP, object.xpos, object.ypos)757break758759case FLAMEANI_ACITVE760// The jet is active, animate it761GetTableValue(temp0, object.flameAnimTimer, MCZEggman_flameAnimTimerTable)762object.flameAnimTimer++763object.flameAnimTimer &= 3764DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)765break766767end switch768end event769770771event ObjectStartup772CheckCurrentStageFolder("Zone06")773774if checkResult == true775LoadSpriteSheet("MCZ/Objects.gif")776SpriteFrame(-26, -24, 44, 16, 34, 48) // 0 - Robotnik normal frame 1777SpriteFrame(-26, -24, 44, 16, 79, 48) // 1 - Robotnik normal frame 2778SpriteFrame(-26, -24, 44, 16, 34, 65) // 2 - Robotnik laughing frame 2779SpriteFrame(-26, -24, 44, 16, 79, 65) // 3 - Robotnik laughing frame 2780SpriteFrame(-26, -24, 44, 16, 34, 82) // 4 - Robotnik hurt frame 2781SpriteFrame(-26, -24, 44, 16, 79, 82) // 5 - Robotnik hurt frame 2782SpriteFrame(-38, -37, 70, 58, 74, 197) // 6 - Ship, lights off frame783SpriteFrame(-34, 0, 17, 16, 5, 234) // 7 - Ship, lights on frame784SpriteFrame(-8, 18, 24, 8, 207, 152) // 8 - Jet frame 1785SpriteFrame(-8, 18, 24, 16, 190, 165) // 9 - Jet frame 2786SpriteFrame(-8, 18, 24, 32, 176, 132) // 10 - Jet frame 3787SpriteFrame(3, -28, 11, 8, 76, 132) // 11 - Panic frame788789if options.vsMode == true790// No bosses in 2P791foreach (TypeName[Eggman], arrayPos0, ALL_ENTITIES)792object[arrayPos0].type = TypeName[Blank Object]793next794end if795else796LoadSpriteSheet("MBZ/Objects.gif")797SpriteFrame(-26, -24, 44, 16, 1, 5)798SpriteFrame(-26, -24, 44, 16, 62, 5)799SpriteFrame(-26, -24, 44, 16, 1, 26)800SpriteFrame(-26, -24, 44, 16, 62, 26)801SpriteFrame(-26, -24, 44, 16, 1, 47)802SpriteFrame(-26, -24, 44, 16, 62, 47)803SpriteFrame(-38, -37, 70, 58, 182, 197)804SpriteFrame(-34, 0, 17, 16, 182, 180)805SpriteFrame(-8, 18, 24, 8, 388, 227)806SpriteFrame(-8, 18, 24, 16, 388, 210)807SpriteFrame(-8, 18, 24, 32, 388, 177)808SpriteFrame(3, -28, 11, 8, 45, 88)809end if810end event811812813// ========================814// Editor Events815// ========================816817event RSDKDraw818DrawSprite(1) // ship819DrawSprite(0) // robotnik820821if editor.showGizmos == true822editor.drawingOverlay = true823824// TODO: boss stuff825826editor.drawingOverlay = false827end if828end event829830831event RSDKLoad832CheckCurrentStageFolder("Zone06")833if checkResult == true834LoadSpriteSheet("MCZ/Objects.gif")835SpriteFrame(-26, -24, 44, 16, 34, 48)836SpriteFrame(-38, -37, 70, 58, 74, 197)837else838LoadSpriteSheet("MBZ/Objects.gif")839SpriteFrame(-26, -24, 44, 16, 1, 5)840SpriteFrame(-38, -37, 70, 58, 182, 197)841end if842843SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")844end event845846847