Path: blob/master/Sonic 1/Scripts/Mission/Caterkiller2.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Caterkiller Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// This script is a copy of the normal Caterkiller script but with tile collisions removed so that the badnik can be placed on Mission Blocks89// ========================10// Aliases11// ========================1213private alias object.value0 : object.bodyPosition1.x14private alias object.value1 : object.bodyPosition1.y15private alias object.value2 : object.bodyDirection116private alias object.value3 : object.bodyFrame11718private alias object.value4 : object.bodyPosition2.x19private alias object.value5 : object.bodyPosition2.y20private alias object.value6 : object.bodyDirection221private alias object.value7 : object.bodyFrame22223private alias object.value8 : object.bodyPosition3.x24private alias object.value9 : object.bodyPosition3.y25private alias object.value10 : object.bodyDirection326private alias object.value11 : object.bodyFrame32728private alias object.value12 : object.startPos.x29private alias object.value13 : object.startPos.y3031private alias object.value14 : object.timer3233// these two values are new to Caterkiller 234private alias object.value15 : object.xBoundary135private alias object.value16 : object.xBoundary23637private alias 0 : CATERKILLER_SETUP38private alias 1 : CATERKILLER_CONTRACT39private alias 2 : CATERKILLER_LIFTHEAD40private alias 3 : CATERKILLER_UNCONTRACT41private alias 4 : CATERKILLER_LOWERHEAD42private alias 5 : CATERKILLER_SPLITBODYPART4344// Player Aliases45private alias object.value40 : player.hitboxLeft46private alias object.value38 : player.hitboxTop47private alias object.value41 : player.hitboxRight48private alias object.value39 : player.hitboxBottom4950// Tile Info ID Aliases51private alias 1 : TILEINFO_DIRECTION52private alias 6 : TILEINFO_ANGLEA5354// Path ID Aliases55private alias 0 : PATH_A565758// ========================59// Function Declarations60// ========================6162reserve function Caterkiller_SetupBody63reserve function Caterkiller_DebugDraw64reserve function Caterkiller_DebugSpawn65reserve function Caterkiller_CheckPlayerCollisions66reserve function Caterkiller_CheckTileAngle67reserve function Caterkiller_CheckTileCollisions686970// ========================71// Function Definitions72// ========================7374private function Caterkiller_SetupBody75object[arrayPos0].startPos.x = object[arrayPos0].xpos76object[arrayPos0].startPos.y = object[arrayPos0].ypos7778temp0 = object[arrayPos0].xpos79temp1 = 0xC000080if temp7 == FLIP_X81FlipSign(temp1)82end if83object[arrayPos0].direction = temp784object[arrayPos0].frame = 085temp0 += temp18687object[arrayPos0].bodyPosition1.x = temp088object[arrayPos0].bodyPosition1.y = object[arrayPos0].ypos89object[arrayPos0].bodyDirection1 = object[arrayPos0].direction90object[arrayPos0].bodyFrame1 = 091temp0 += temp19293object[arrayPos0].bodyPosition2.x = temp094object[arrayPos0].bodyPosition2.y = object[arrayPos0].ypos95object[arrayPos0].bodyDirection2 = object[arrayPos0].direction96object[arrayPos0].bodyFrame2 = 097temp0 += temp19899object[arrayPos0].bodyPosition3.x = temp0100object[arrayPos0].bodyPosition3.y = object[arrayPos0].ypos101object[arrayPos0].bodyDirection3 = object[arrayPos0].direction102object[arrayPos0].bodyFrame3 = 0103104object[arrayPos0].state = CATERKILLER_SETUP105object[arrayPos0].timer = 0106107// these two lines are new to Caterkiller 2, they just set bounds108object[arrayPos0].xBoundary1 = object[arrayPos0].xpos109object[arrayPos0].xBoundary1 &= 0xFFE00000110object[arrayPos0].xBoundary2 = object[arrayPos0].xBoundary1111object[arrayPos0].xBoundary2 += 0x400000112end function113114115private function Caterkiller_DebugDraw116temp0 = object.xpos117GetBit(temp1, object.direction, 0)118if temp1 == FLIP_NONE119temp0 += 0x240000120temp1 = -0xC0000121else122temp0 -= 0x240000123temp1 = 0xC0000124end if125126temp2 = 0127while temp2 < 3128DrawSpriteFX(16, FX_FLIP, temp0, object.ypos)129temp0 += temp1130temp2++131loop132133DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)134end function135136137private function Caterkiller_DebugSpawn138temp0 = object.ixpos139temp0 <<= 16140temp1 = object.iypos141temp1 <<= 16142143CreateTempObject(TypeName[Caterkiller], 0, temp0, temp1)144arrayPos0 = object[tempObjectPos].entityPos145temp7 = object.direction146147CallFunction(Caterkiller_SetupBody)148end function149150151private function Caterkiller_CheckPlayerCollisions152temp7 = false153temp5 = object.xpos154temp6 = object.ypos155foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)156BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)157if checkResult == true158CallFunction(Player_BadnikBreak)159else160object.xpos = object.bodyPosition1.x161object.ypos = object.bodyPosition1.y162BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)163if checkResult == true164CallFunction(Player_Hit)165temp7 = true166else167object.xpos = object.bodyPosition2.x168object.ypos = object.bodyPosition2.y169BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)170if checkResult == true171CallFunction(Player_Hit)172temp7 = true173else174object.xpos = object.bodyPosition3.x175object.ypos = object.bodyPosition3.y176BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)177if checkResult == true178CallFunction(Player_Hit)179temp7 = true180end if181end if182end if183end if184185object.xpos = temp5186object.ypos = temp6187next188189// Uh oh! we hit the body! time to explode!190if temp7 == true191temp0 = object.frame192temp0 <<= 15193object.ypos -= temp0194195CreateTempObject(TypeName[Caterkiller], 0, object.xpos, object.ypos)196if object.direction == FLIP_NONE197object[tempObjectPos].xvel = -0x20000198else199object[tempObjectPos].xvel = 0x20000200end if201object[tempObjectPos].yvel = -0x40000202object[tempObjectPos].direction = object.direction203object[tempObjectPos].frame = object.frame204object[tempObjectPos].frame &= 8205object[tempObjectPos].state = CATERKILLER_SPLITBODYPART206object[tempObjectPos].priority = PRIORITY_ACTIVE_SMALL207208CreateTempObject(TypeName[Caterkiller], 0, object.bodyPosition1.x, object.bodyPosition1.y)209if object.bodyDirection1 == FLIP_NONE210object[tempObjectPos].xvel = -0x18000211else212object[tempObjectPos].xvel = 0x18000213end if214object[tempObjectPos].yvel = -0x40000215object[tempObjectPos].direction = object.bodyDirection1216object[tempObjectPos].frame = 16217object[tempObjectPos].state = CATERKILLER_SPLITBODYPART218object[tempObjectPos].priority = PRIORITY_ACTIVE_SMALL219temp0 = object.bodyFrame2220temp0 <<= 15221object.bodyPosition2.y -= temp0222object.frame -= temp0223224CreateTempObject(TypeName[Caterkiller], 0, object.bodyPosition2.x, object.bodyPosition2.y)225if object.bodyDirection2 == FLIP_NONE226object[tempObjectPos].xvel = 0x18000227else228object[tempObjectPos].xvel = -0x18000229end if230object[tempObjectPos].yvel = -0x40000231object[tempObjectPos].direction = object.bodyDirection2232object[tempObjectPos].frame = 16233object[tempObjectPos].state = CATERKILLER_SPLITBODYPART234object[tempObjectPos].priority = PRIORITY_ACTIVE_SMALL235236CreateTempObject(TypeName[Caterkiller], 0, object.bodyPosition3.x, object.bodyPosition3.y)237if object.bodyDirection3 == FLIP_NONE238object[tempObjectPos].xvel = 0x20000239else240object[tempObjectPos].xvel = -0x20000241end if242object[tempObjectPos].yvel = -0x40000243object[tempObjectPos].direction = object.bodyDirection3244object[tempObjectPos].frame = 16245object[tempObjectPos].state = CATERKILLER_SPLITBODYPART246object[tempObjectPos].priority = PRIORITY_ACTIVE_SMALL247248ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, object.xpos, object.ypos)249250if game.playMode == BOOT_PLAYMODE_MISSION251CallNativeFunction2(NotifyCallback, NOTIFY_KILL_ENEMY, temp0)252253// (the normal Caterkiller has code for the Mercy mission here, but this object doesn't appear in any Mercy missions so that code isn't needed here)254end if255end if256end function257258259private function Caterkiller_CheckTileAngle260// This function's unused in this script, it's just the same thing as the normal Caterkiller version261temp2 >>= 16262temp3 >>= 16263temp3 += 8264Get16x16TileInfo(temp5, temp2, temp3, TILEINFO_ANGLEA)265Get16x16TileInfo(temp6, temp2, temp3, TILEINFO_DIRECTION)266switch temp6267case FLIP_NONE268temp5 &= 255269break270271case FLIP_X272temp5 &= 255273temp6 = temp5274temp5 = 256275temp5 -= temp6276temp5 &= 255277break278279case FLIP_Y280temp5 >>= 24281temp5 += 128282temp6 = temp5283temp5 = 256284temp5 -= temp6285temp5 &= 255286break287288case FLIP_XY289temp5 >>= 24290temp5 += 128291temp5 &= 255292break293294end switch295296checkResult = false297if temp4 == FLIP_NONE298if temp5 < 128299if temp5 > 24300checkResult = true301end if302end if303else304if temp5 > 128305if temp5 < 232306checkResult = true307end if308end if309end if310end function311312313private function Caterkiller_CheckTileCollisions314// This function's reworked for Caterkiller 2, it just checks against bounds rather than tile collisions315316if object.state != CATERKILLER_LIFTHEAD317CheckLower(object.xpos, object.xBoundary1)318temp2 = checkResult319CheckGreater(object.xpos, object.xBoundary2)320checkResult |= temp2321if checkResult == true322object.direction ^= FLIP_X323end if324end if325326CheckLower(object.bodyPosition1.x, object.xBoundary1)327temp2 = checkResult328CheckGreater(object.bodyPosition1.x, object.xBoundary2)329checkResult |= temp2330if checkResult == true331object.bodyDirection1 = object.direction332end if333334CheckLower(object.bodyPosition2.x, object.xBoundary1)335temp2 = checkResult336CheckGreater(object.bodyPosition2.x, object.xBoundary2)337checkResult |= temp2338if checkResult == true339object.bodyDirection2 = object.direction340end if341342if object.state != CATERKILLER_LOWERHEAD343CheckLower(object.bodyPosition3.x, object.xBoundary1)344temp2 = checkResult345CheckGreater(object.bodyPosition3.x, object.xBoundary2)346checkResult |= temp2347if checkResult == true348object.bodyDirection3 = object.direction349end if350end if351end function352353354// ========================355// Events356// ========================357358event ObjectUpdate359switch object.state360case CATERKILLER_SETUP361object.priority = PRIORITY_ACTIVE362// [Fallthrough]363case CATERKILLER_CONTRACT364if object.timer == 0365object.timer = 15366object.state++367object.frame = -1368object.bodyFrame2 = -1369// fallthrough....right.?370else371object.timer--372CallFunction(Caterkiller_CheckPlayerCollisions)373break //whats this doin here374end if375// [Fallthrough, I think]376case CATERKILLER_LIFTHEAD377if object.timer == 0378object.timer = 7379object.state++380else381object.timer--382383if object.bodyDirection1 == FLIP_NONE384object.bodyPosition1.x -= 0x4000385else386object.bodyPosition1.x += 0x4000387end if388389if object.bodyDirection2 == FLIP_NONE390object.bodyPosition2.x -= 0x8000391else392object.bodyPosition2.x += 0x8000393end if394395if object.bodyDirection3 == FLIP_NONE396object.bodyPosition3.x -= 0xC000397else398object.bodyPosition3.x += 0xC000399end if400401object.frame++402object.bodyFrame2++403CallFunction(Caterkiller_CheckTileCollisions)404CallFunction(Caterkiller_CheckPlayerCollisions)405end if406break407408case CATERKILLER_UNCONTRACT409if object.timer == 0410object.timer = 15411object.state++412object.frame = 16413object.bodyFrame2 = 16414else415object.timer--416CallFunction(Caterkiller_CheckPlayerCollisions)417break418end if419// [Fallthrough]420case CATERKILLER_LOWERHEAD421if object.timer == 0422object.timer = 7423object.state = CATERKILLER_CONTRACT424425// Origins 2.0.1 added some code here in the normal Caterkiller, they left this copy of the script alone though426// Was it on purpose or did they forget? No way to know..427else428object.timer--429if object.direction == FLIP_NONE430object.xpos -= 0xC000431else432object.xpos += 0xC000433end if434435if object.bodyDirection1 == FLIP_NONE436object.bodyPosition1.x -= 0x8000437else438object.bodyPosition1.x += 0x8000439end if440441if object.bodyDirection2 == FLIP_NONE442object.bodyPosition2.x -= 0x4000443else444object.bodyPosition2.x += 0x4000445end if446447object.frame--448object.bodyFrame2--449CallFunction(Caterkiller_CheckTileCollisions)450CallFunction(Caterkiller_CheckPlayerCollisions)451end if452break453454case CATERKILLER_SPLITBODYPART455object.xpos += object.xvel456object.ypos += object.yvel457object.yvel += 0x3800458459if object.yvel > 0460ObjectTileCollision(CSIDE_FLOOR, 0, 8, PATH_A) // (the one use of tile collisions in the Caterkiller 2 script)461if checkResult == true462object.yvel = -0x40000463end if464end if465466foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)467BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)468if checkResult == true469if object.frame < 16470CallFunction(Player_BadnikBreak)471else472CallFunction(Player_Hit)473end if474end if475next476477if object.outOfBounds == true478object.type = TypeName[Blank Object]479end if480break481482end switch483484if object.state != CATERKILLER_SPLITBODYPART485if object.outOfBounds == true486temp0 = object.xpos487temp1 = object.ypos488object.xpos = object.startPos.x489object.ypos = object.startPos.y490if object.outOfBounds == true491arrayPos0 = object.entityPos492temp7 = object[arrayPos0].propertyValue493CallFunction(Caterkiller_SetupBody)494else495object.xpos = temp0496object.ypos = temp1497end if498end if499end if500end event501502503event ObjectDraw504if object.state < CATERKILLER_SPLITBODYPART505temp0 = object.direction506507object.direction = object.bodyDirection3508temp1 = object.bodyFrame3509temp1 >>= 1510temp1 += 16511DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition3.x, object.bodyPosition3.y)512513object.direction = object.bodyDirection2514temp1 = object.bodyFrame2515temp1 >>= 1516temp1 += 16517DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition2.x, object.bodyPosition2.y)518519object.direction = object.bodyDirection1520temp1 = object.bodyFrame1521temp1 >>= 1522temp1 += 16523DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition1.x, object.bodyPosition1.y)524525object.direction = temp0526527temp0 = object.frame528temp0 >>= 1529CheckEqual(object.state, CATERKILLER_LIFTHEAD)530temp1 = checkResult531CheckEqual(object.state, CATERKILLER_UNCONTRACT)532temp1 |= checkResult533if temp1 == true534temp0 += 8535end if536DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)537else538DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)539end if540end event541542543event ObjectStartup544CheckCurrentStageFolder("Zone02")545if checkResult == true546LoadSpriteSheet("MZ/Objects.gif")547SpriteFrame(-8, -14, 16, 22, 18, 81)548SpriteFrame(-8, -15, 16, 22, 18, 81)549SpriteFrame(-8, -16, 16, 22, 18, 81)550SpriteFrame(-8, -17, 16, 22, 18, 81)551SpriteFrame(-8, -18, 16, 22, 18, 81)552SpriteFrame(-8, -19, 16, 22, 18, 81)553SpriteFrame(-8, -20, 16, 22, 18, 81)554SpriteFrame(-8, -21, 16, 22, 18, 81)555SpriteFrame(-8, -14, 16, 24, 1, 81)556SpriteFrame(-8, -15, 16, 24, 1, 81)557SpriteFrame(-8, -16, 16, 24, 1, 81)558SpriteFrame(-8, -17, 16, 24, 1, 81)559SpriteFrame(-8, -18, 16, 24, 1, 81)560SpriteFrame(-8, -19, 16, 24, 1, 81)561SpriteFrame(-8, -20, 16, 24, 1, 81)562SpriteFrame(-8, -21, 16, 24, 1, 81)563SpriteFrame(-8, -8, 16, 16, 35, 81)564SpriteFrame(-8, -9, 16, 16, 35, 81)565SpriteFrame(-8, -10, 16, 16, 35, 81)566SpriteFrame(-8, -11, 16, 16, 35, 81)567SpriteFrame(-8, -12, 16, 16, 35, 81)568SpriteFrame(-8, -13, 16, 16, 35, 81)569SpriteFrame(-8, -14, 16, 16, 35, 81)570SpriteFrame(-8, -15, 16, 16, 35, 81)571end if572573CheckCurrentStageFolder("Zone03")574if checkResult == true575LoadSpriteSheet("SYZ/Objects.gif")576SpriteFrame(-8, -14, 16, 22, 98, 98)577SpriteFrame(-8, -15, 16, 22, 98, 98)578SpriteFrame(-8, -16, 16, 22, 98, 98)579SpriteFrame(-8, -17, 16, 22, 98, 98)580SpriteFrame(-8, -18, 16, 22, 98, 98)581SpriteFrame(-8, -19, 16, 22, 98, 98)582SpriteFrame(-8, -20, 16, 22, 98, 98)583SpriteFrame(-8, -21, 16, 22, 98, 98)584SpriteFrame(-8, -14, 16, 24, 81, 98)585SpriteFrame(-8, -15, 16, 24, 81, 98)586SpriteFrame(-8, -16, 16, 24, 81, 98)587SpriteFrame(-8, -17, 16, 24, 81, 98)588SpriteFrame(-8, -18, 16, 24, 81, 98)589SpriteFrame(-8, -19, 16, 24, 81, 98)590SpriteFrame(-8, -20, 16, 24, 81, 98)591SpriteFrame(-8, -21, 16, 24, 81, 98)592SpriteFrame(-8, -8, 16, 16, 98, 121)593SpriteFrame(-8, -9, 16, 16, 98, 121)594SpriteFrame(-8, -10, 16, 16, 98, 121)595SpriteFrame(-8, -11, 16, 16, 98, 121)596SpriteFrame(-8, -12, 16, 16, 98, 121)597SpriteFrame(-8, -13, 16, 16, 98, 121)598SpriteFrame(-8, -14, 16, 16, 98, 121)599SpriteFrame(-8, -15, 16, 16, 98, 121)600end if601602CheckCurrentStageFolder("Zone06")603if checkResult == true604LoadSpriteSheet("SBZ/Objects.gif")605SpriteFrame(-8, -14, 16, 22, 75, 26)606SpriteFrame(-8, -15, 16, 22, 75, 26)607SpriteFrame(-8, -16, 16, 22, 75, 26)608SpriteFrame(-8, -17, 16, 22, 75, 26)609SpriteFrame(-8, -18, 16, 22, 75, 26)610SpriteFrame(-8, -19, 16, 22, 75, 26)611SpriteFrame(-8, -20, 16, 22, 75, 26)612SpriteFrame(-8, -21, 16, 22, 75, 26)613SpriteFrame(-8, -14, 16, 24, 75, 1)614SpriteFrame(-8, -15, 16, 24, 75, 1)615SpriteFrame(-8, -16, 16, 24, 75, 1)616SpriteFrame(-8, -17, 16, 24, 75, 1)617SpriteFrame(-8, -18, 16, 24, 75, 1)618SpriteFrame(-8, -19, 16, 24, 75, 1)619SpriteFrame(-8, -20, 16, 24, 75, 1)620SpriteFrame(-8, -21, 16, 24, 75, 1)621SpriteFrame(-8, -8, 16, 16, 75, 49)622SpriteFrame(-8, -9, 16, 16, 75, 49)623SpriteFrame(-8, -10, 16, 16, 75, 49)624SpriteFrame(-8, -11, 16, 16, 75, 49)625SpriteFrame(-8, -12, 16, 16, 75, 49)626SpriteFrame(-8, -13, 16, 16, 75, 49)627SpriteFrame(-8, -14, 16, 16, 75, 49)628SpriteFrame(-8, -15, 16, 16, 75, 49)629end if630631CheckCurrentStageFolder("Zone07")632if checkResult == true633LoadSpriteSheet("MBZ/Objects.gif")634SpriteFrame(-8, -14, 16, 22, 1, 68)635SpriteFrame(-8, -15, 16, 22, 1, 68)636SpriteFrame(-8, -16, 16, 22, 1, 68)637SpriteFrame(-8, -17, 16, 22, 1, 68)638SpriteFrame(-8, -18, 16, 22, 1, 68)639SpriteFrame(-8, -19, 16, 22, 1, 68)640SpriteFrame(-8, -20, 16, 22, 1, 68)641SpriteFrame(-8, -21, 16, 22, 1, 68)642SpriteFrame(-8, -14, 16, 24, 18, 68)643SpriteFrame(-8, -15, 16, 24, 18, 68)644SpriteFrame(-8, -16, 16, 24, 18, 68)645SpriteFrame(-8, -17, 16, 24, 18, 68)646SpriteFrame(-8, -18, 16, 24, 18, 68)647SpriteFrame(-8, -19, 16, 24, 18, 68)648SpriteFrame(-8, -20, 16, 24, 18, 68)649SpriteFrame(-8, -21, 16, 24, 18, 68)650SpriteFrame(-8, -8, 16, 16, 35, 68)651SpriteFrame(-8, -9, 16, 16, 35, 68)652SpriteFrame(-8, -10, 16, 16, 35, 68)653SpriteFrame(-8, -11, 16, 16, 35, 68)654SpriteFrame(-8, -12, 16, 16, 35, 68)655SpriteFrame(-8, -13, 16, 16, 35, 68)656SpriteFrame(-8, -14, 16, 16, 35, 68)657SpriteFrame(-8, -15, 16, 16, 35, 68)658end if659660foreach (TypeName[Caterkiller], arrayPos0, ALL_ENTITIES)661temp7 = object[arrayPos0].propertyValue662CallFunction(Caterkiller_SetupBody)663next664665SetTableValue(TypeName[Caterkiller], DebugMode_ObjCount, DebugMode_TypesTable)666SetTableValue(Caterkiller_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)667SetTableValue(Caterkiller_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)668DebugMode_ObjCount++669end event670671672// ========================673// Editor Events674// ========================675676event RSDKEdit677if editor.returnVariable == true678switch editor.variableID679case EDIT_VAR_PROPVAL // property value680checkResult = object.propertyValue681break682683case 0 // direction684checkResult = object.propertyValue685break686687end switch688else689switch editor.variableID690case EDIT_VAR_PROPVAL // property value691object.propertyValue = editor.variableValue692break693694case 0 // direction695object.propertyValue = editor.variableValue696break697698end switch699end if700end event701702703event RSDKDraw704arrayPos0 = object.entityPos705temp7 = object.propertyValue706CallFunction(Caterkiller_SetupBody)707708temp0 = object.direction709object.direction = object.bodyDirection3710temp1 = object.bodyFrame3711temp1 >>= 1712temp1 += 16713DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition3.x, object.bodyPosition3.y)714715object.direction = object.bodyDirection2716temp1 = object.bodyFrame2717temp1 >>= 1718temp1 += 16719DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition2.x, object.bodyPosition2.y)720721object.direction = object.bodyDirection1722temp1 = object.bodyFrame1723temp1 >>= 1724temp1 += 16725DrawSpriteFX(temp1, FX_FLIP, object.bodyPosition1.x, object.bodyPosition1.y)726727object.direction = temp0728temp0 = object.frame729temp0 >>= 1730DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)731end event732733734event RSDKLoad735// Make sure we have a fall-back, in case the current folder isn't actually a valid one736temp0 = false737738CheckCurrentStageFolder("Zone03")739temp0 |= checkResult740if checkResult == true741LoadSpriteSheet("SYZ/Objects.gif")742SpriteFrame(-8, -14, 16, 22, 98, 98) // Head (Mouth Closed) - #0743SpriteFrame(-8, -15, 16, 22, 98, 98) // Head (Mouth Closed) - #1744SpriteFrame(-8, -16, 16, 22, 98, 98) // Head (Mouth Closed) - #2745SpriteFrame(-8, -17, 16, 22, 98, 98) // Head (Mouth Closed) - #3746SpriteFrame(-8, -18, 16, 22, 98, 98) // Head (Mouth Closed) - #4747SpriteFrame(-8, -19, 16, 22, 98, 98) // Head (Mouth Closed) - #5748SpriteFrame(-8, -20, 16, 22, 98, 98) // Head (Mouth Closed) - #6749SpriteFrame(-8, -21, 16, 22, 98, 98) // Head (Mouth Closed) - #7750SpriteFrame(-8, -14, 16, 24, 81, 98) // Head (Mouth Open) - #8751SpriteFrame(-8, -15, 16, 24, 81, 98) // Head (Mouth Open) - #9752SpriteFrame(-8, -16, 16, 24, 81, 98) // Head (Mouth Open) - #10753SpriteFrame(-8, -17, 16, 24, 81, 98) // Head (Mouth Open) - #11754SpriteFrame(-8, -18, 16, 24, 81, 98) // Head (Mouth Open) - #12755SpriteFrame(-8, -19, 16, 24, 81, 98) // Head (Mouth Open) - #13756SpriteFrame(-8, -20, 16, 24, 81, 98) // Head (Mouth Open) - #14757SpriteFrame(-8, -21, 16, 24, 81, 98) // Head (Mouth Open) - #15758SpriteFrame(-8, -8, 16, 16, 98, 121) // Body - #16759SpriteFrame(-8, -9, 16, 16, 98, 121) // Body - #17760SpriteFrame(-8, -10, 16, 16, 98, 121) // Body - #18761SpriteFrame(-8, -11, 16, 16, 98, 121) // Body - #19762SpriteFrame(-8, -12, 16, 16, 98, 121) // Body - #20763SpriteFrame(-8, -13, 16, 16, 98, 121) // Body - #21764SpriteFrame(-8, -14, 16, 16, 98, 121) // Body - #22765SpriteFrame(-8, -15, 16, 16, 98, 121) // Body - #23766end if767768CheckCurrentStageFolder("Zone06")769temp0 |= checkResult770if checkResult == true771LoadSpriteSheet("SBZ/Objects.gif")772SpriteFrame(-8, -14, 16, 22, 75, 26) // Head (Mouth Closed) - #0773SpriteFrame(-8, -15, 16, 22, 75, 26) // Head (Mouth Closed) - #1774SpriteFrame(-8, -16, 16, 22, 75, 26) // Head (Mouth Closed) - #2775SpriteFrame(-8, -17, 16, 22, 75, 26) // Head (Mouth Closed) - #3776SpriteFrame(-8, -18, 16, 22, 75, 26) // Head (Mouth Closed) - #4777SpriteFrame(-8, -19, 16, 22, 75, 26) // Head (Mouth Closed) - #5778SpriteFrame(-8, -20, 16, 22, 75, 26) // Head (Mouth Closed) - #6779SpriteFrame(-8, -21, 16, 22, 75, 26) // Head (Mouth Closed) - #7780SpriteFrame(-8, -14, 16, 24, 75, 1) // Head (Mouth Open) - #8781SpriteFrame(-8, -15, 16, 24, 75, 1) // Head (Mouth Open) - #9782SpriteFrame(-8, -16, 16, 24, 75, 1) // Head (Mouth Open) - #10783SpriteFrame(-8, -17, 16, 24, 75, 1) // Head (Mouth Open) - #11784SpriteFrame(-8, -18, 16, 24, 75, 1) // Head (Mouth Open) - #12785SpriteFrame(-8, -19, 16, 24, 75, 1) // Head (Mouth Open) - #13786SpriteFrame(-8, -20, 16, 24, 75, 1) // Head (Mouth Open) - #14787SpriteFrame(-8, -21, 16, 24, 75, 1) // Head (Mouth Open) - #15788SpriteFrame(-8, -8, 16, 16, 75, 49) // Body - #16789SpriteFrame(-8, -9, 16, 16, 75, 49) // Body - #17790SpriteFrame(-8, -10, 16, 16, 75, 49) // Body - #18791SpriteFrame(-8, -11, 16, 16, 75, 49) // Body - #19792SpriteFrame(-8, -12, 16, 16, 75, 49) // Body - #20793SpriteFrame(-8, -13, 16, 16, 75, 49) // Body - #21794SpriteFrame(-8, -14, 16, 16, 75, 49) // Body - #22795SpriteFrame(-8, -15, 16, 16, 75, 49) // Body - #23796end if797798CheckCurrentStageFolder("Zone07")799temp0 |= checkResult800if checkResult == true801LoadSpriteSheet("MBZ/Objects.gif")802SpriteFrame(-8, -14, 16, 22, 1, 68) // Head (Mouth Closed) - #0803SpriteFrame(-8, -15, 16, 22, 1, 68) // Head (Mouth Closed) - #1804SpriteFrame(-8, -16, 16, 22, 1, 68) // Head (Mouth Closed) - #2805SpriteFrame(-8, -17, 16, 22, 1, 68) // Head (Mouth Closed) - #3806SpriteFrame(-8, -18, 16, 22, 1, 68) // Head (Mouth Closed) - #4807SpriteFrame(-8, -19, 16, 22, 1, 68) // Head (Mouth Closed) - #5808SpriteFrame(-8, -20, 16, 22, 1, 68) // Head (Mouth Closed) - #6809SpriteFrame(-8, -21, 16, 22, 1, 68) // Head (Mouth Closed) - #7810SpriteFrame(-8, -14, 16, 24, 18, 68) // Head (Mouth Open) - #8811SpriteFrame(-8, -15, 16, 24, 18, 68) // Head (Mouth Open) - #9812SpriteFrame(-8, -16, 16, 24, 18, 68) // Head (Mouth Open) - #10813SpriteFrame(-8, -17, 16, 24, 18, 68) // Head (Mouth Open) - #11814SpriteFrame(-8, -18, 16, 24, 18, 68) // Head (Mouth Open) - #12815SpriteFrame(-8, -19, 16, 24, 18, 68) // Head (Mouth Open) - #13816SpriteFrame(-8, -20, 16, 24, 18, 68) // Head (Mouth Open) - #14817SpriteFrame(-8, -21, 16, 24, 18, 68) // Head (Mouth Open) - #15818SpriteFrame(-8, -8, 16, 16, 35, 68) // Body - #16819SpriteFrame(-8, -9, 16, 16, 35, 68) // Body - #17820SpriteFrame(-8, -10, 16, 16, 35, 68) // Body - #18821SpriteFrame(-8, -11, 16, 16, 35, 68) // Body - #19822SpriteFrame(-8, -12, 16, 16, 35, 68) // Body - #20823SpriteFrame(-8, -13, 16, 16, 35, 68) // Body - #21824SpriteFrame(-8, -14, 16, 16, 35, 68) // Body - #22825SpriteFrame(-8, -15, 16, 16, 35, 68) // Body - #23826end if827828if temp0 == false829// We use MZ's sprites as the fallback, "Zone02" (MZ's folder) will come here too830LoadSpriteSheet("MZ/Objects.gif")831SpriteFrame(-8, -14, 16, 22, 18, 81) // Head (Mouth Closed) - #0832SpriteFrame(-8, -15, 16, 22, 18, 81) // Head (Mouth Closed) - #1833SpriteFrame(-8, -16, 16, 22, 18, 81) // Head (Mouth Closed) - #2834SpriteFrame(-8, -17, 16, 22, 18, 81) // Head (Mouth Closed) - #3835SpriteFrame(-8, -18, 16, 22, 18, 81) // Head (Mouth Closed) - #4836SpriteFrame(-8, -19, 16, 22, 18, 81) // Head (Mouth Closed) - #5837SpriteFrame(-8, -20, 16, 22, 18, 81) // Head (Mouth Closed) - #6838SpriteFrame(-8, -21, 16, 22, 18, 81) // Head (Mouth Closed) - #7839SpriteFrame(-8, -14, 16, 24, 1, 81) // Head (Mouth Open) - #8840SpriteFrame(-8, -15, 16, 24, 1, 81) // Head (Mouth Open) - #9841SpriteFrame(-8, -16, 16, 24, 1, 81) // Head (Mouth Open) - #10842SpriteFrame(-8, -17, 16, 24, 1, 81) // Head (Mouth Open) - #11843SpriteFrame(-8, -18, 16, 24, 1, 81) // Head (Mouth Open) - #12844SpriteFrame(-8, -19, 16, 24, 1, 81) // Head (Mouth Open) - #13845SpriteFrame(-8, -20, 16, 24, 1, 81) // Head (Mouth Open) - #14846SpriteFrame(-8, -21, 16, 24, 1, 81) // Head (Mouth Open) - #15847SpriteFrame(-8, -8, 16, 16, 35, 81) // Body - #16848SpriteFrame(-8, -9, 16, 16, 35, 81) // Body - #17849SpriteFrame(-8, -10, 16, 16, 35, 81) // Body - #18850SpriteFrame(-8, -11, 16, 16, 35, 81) // Body - #19851SpriteFrame(-8, -12, 16, 16, 35, 81) // Body - #20852SpriteFrame(-8, -13, 16, 16, 35, 81) // Body - #21853SpriteFrame(-8, -14, 16, 16, 35, 81) // Body - #22854SpriteFrame(-8, -15, 16, 16, 35, 81) // Body - #23855end if856857AddEditorVariable("direction")858SetActiveVariable("direction")859AddEnumVariable("Left", 0)860AddEnumVariable("Right", 1)861end event862863864