Path: blob/master/Sonic 2/Scripts/Enemies/ChopChop.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Chop Chop 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.bubbleTimer13private alias object.value2 : object.startPos.x14private alias object.value3 : object.startPos.y1516// States17private alias 0 : CHOPCHOP_SWIMMING18private alias 1 : CHOPCHOP_ATTACKDELAY19private alias 2 : CHOPCHOP_ATTACK2021// Player Aliases22private alias object.xpos : player.xpos23private alias object.ypos : player.ypos2425private alias object.value40 : player.hitboxLeft26private alias object.value38 : player.hitboxTop27private alias object.value41 : player.hitboxRight28private alias object.value39 : player.hitboxBottom2930// Air Bubble Aliases31private alias object.value1 : object.originPos.x32private alias object.value2 : object.targetPlayer333435// ========================36// Function Declarations37// ========================3839reserve function ChopChop_Setup40reserve function ChopChop_DebugDraw41reserve function ChopChop_DebugSpawn424344// ========================45// Function Definitions46// ========================4748private function ChopChop_Setup49object[arrayPos0].direction = object[arrayPos0].propertyValue50if object[arrayPos0].direction == FLIP_NONE51object[arrayPos0].xvel = -0x400052else53object[arrayPos0].xvel = 0x400054end if5556object[arrayPos0].yvel = 057object[arrayPos0].timer = 51258object[arrayPos0].bubbleTimer = 059object[arrayPos0].frame = 060object[arrayPos0].animation = 061object[arrayPos0].animationTimer = 062object[arrayPos0].priority = PRIORITY_BOUNDS63end function646566private function ChopChop_DebugDraw67DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)68end function697071private function ChopChop_DebugSpawn72CreateTempObject(TypeName[Chop Chop], object.direction, object.xpos, object.ypos)73object[tempObjectPos].startPos.x = object.xpos74object[tempObjectPos].startPos.y = object.ypos75arrayPos0 = object[tempObjectPos].entityPos76CallFunction(ChopChop_Setup)77end function787980// ========================81// Events82// ========================8384event ObjectUpdate85switch object.state86case CHOPCHOP_SWIMMING87object.priority = PRIORITY_ACTIVE88object.xpos += object.xvel8990object.timer--91if object.timer == 092object.direction ^= FLIP_X93FlipSign(object.xvel)94object.timer = 51295end if9697foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)98if object.state == CHOPCHOP_SWIMMING99if object.direction == FLIP_NONE100BoxCollisionTest(C_TOUCH, object.entityPos, -160, -32, 16, 32, currentPlayer, -1, -1, 1, 1)101else102BoxCollisionTest(C_TOUCH, object.entityPos, 16, -32, 160, 32, currentPlayer, -1, -1, 1, 1)103end if104105if checkResult == true106object.state = CHOPCHOP_ATTACKDELAY107object.animation = 1108object.timer = 16109if player[currentPlayer].xpos < object.xpos110object.xvel = -0x20000111else112object.xvel = 0x20000113end if114115temp0 = object.ypos116temp0 -= player[currentPlayer].ypos117Abs(temp0)118if temp0 > 0x100000119if player[currentPlayer].ypos < object.ypos120object.yvel = -0x8000121else122object.yvel = 0x8000123end if124end if125end if126end if127next128129object.bubbleTimer++130if object.bubbleTimer >= 240131object.bubbleTimer = 0132end if133break134135case CHOPCHOP_ATTACKDELAY136object.timer--137if object.timer < 0138object.state = CHOPCHOP_ATTACK139end if140break141142case CHOPCHOP_ATTACK143object.xpos += object.xvel144object.ypos += object.yvel145146object.bubbleTimer++147if object.bubbleTimer >= 20148object.bubbleTimer = 0149end if150break151152end switch153154if object.outOfBounds == true155temp0 = object.xpos156temp1 = object.ypos157object.xpos = object.startPos.x158object.ypos = object.startPos.y159if object.outOfBounds == true160arrayPos0 = object.entityPos161CallFunction(ChopChop_Setup)162else163object.xpos = temp0164object.ypos = temp1165end if166end if167168if object.animation == 1169object.frame = object.animationTimer170object.frame >>= 3171object.animationTimer++172object.animationTimer &= 15173end if174175if object.bubbleTimer == 0176CreateTempObject(TypeName[Air Bubble], 2, object.xpos, object.ypos)177object[tempObjectPos].drawOrder = 4178object[tempObjectPos].yvel = -0x8800179object[tempObjectPos].ypos += 0x60000180if object.direction == FLIP_NONE181object[tempObjectPos].xpos += 0x100000182else183object[tempObjectPos].xpos -= 0x100000184object[tempObjectPos].angle = 256185end if186187object[tempObjectPos].targetPlayer = 0xFFFF188object[tempObjectPos].originPos.x = object[tempObjectPos].xpos189end if190191foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)192BoxCollisionTest(C_TOUCH, object.entityPos, -16, -12, 16, 12, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)193if checkResult == true194CallFunction(Player_BadnikBreak)195end if196next197end event198199200event ObjectDraw201DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)202end event203204205event ObjectStartup206CheckCurrentStageFolder("Zone03")207if checkResult == true208LoadSpriteSheet("ARZ/Objects.gif")209SpriteFrame(-15, -12, 31, 24, 18, 78)210SpriteFrame(-15, -12, 31, 24, 18, 103)211else212LoadSpriteSheet("MBZ/Objects.gif")213SpriteFrame(-15, -12, 31, 24, 209, 313)214SpriteFrame(-15, -12, 31, 24, 242, 313)215end if216217foreach (TypeName[Chop Chop], arrayPos0, ALL_ENTITIES)218object[arrayPos0].startPos.x = object[arrayPos0].xpos219CallFunction(ChopChop_Setup)220next221222SetTableValue(TypeName[Chop Chop], DebugMode_ObjCount, DebugMode_TypesTable)223SetTableValue(ChopChop_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)224SetTableValue(ChopChop_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)225DebugMode_ObjCount++226end event227228229// ========================230// Editor Events231// ========================232233event RSDKEdit234if editor.returnVariable == true235switch editor.variableID236case EDIT_VAR_PROPVAL // property value237checkResult = object.propertyValue238checkResult &= 1239break240241case 0 // direction242GetBit(checkResult, object.propertyValue, 0)243break244245end switch246else247switch editor.variableID248case EDIT_VAR_PROPVAL // property value249object.propertyValue = editor.variableValue250object.propertyValue &= 1251break252253case 0 // direction254CheckNotEqual(editor.variableValue, 0)255SetBit(object.propertyValue, 0, checkResult)256break257258end switch259end if260end event261262263event RSDKDraw264GetBit(object.direction, object.propertyValue, 0)265DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)266end event267268269event RSDKLoad270CheckCurrentStageFolder("Zone03")271if checkResult == true272LoadSpriteSheet("ARZ/Objects.gif")273SpriteFrame(-15, -12, 31, 24, 18, 78)274else275LoadSpriteSheet("MBZ/Objects.gif")276SpriteFrame(-15, -12, 31, 24, 209, 313)277end if278279AddEditorVariable("direction")280SetActiveVariable("direction")281AddEnumVariable("Left", 0)282AddEnumVariable("Right", 1)283end event284285286