Path: blob/master/Sonic 2/Scripts/Enemies/Aquis.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Aquis 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.startPos.x13private alias object.value2 : object.startPos.y14private alias object.value3 : object.turnCount15private alias object.value4 : object.wingFrame16private alias object.value5 : object.wingAnimTimer17private alias object.value6 : object.playerInRange1819private alias 0 : AQUIS_SETUP20private alias 1 : AQUIS_MOVING21private alias 2 : AQUIS_SHOOT22private alias 3 : AQUIS_FLEE2324// Player Aliases25private alias object.xpos : player.xpos26private alias object.ypos : player.ypos27private alias object.controlMode : player.controlMode2829private alias object.value40 : player.hitboxLeft30private alias object.value38 : player.hitboxTop31private alias object.value41 : player.hitboxRight32private alias object.value39 : player.hitboxBottom333435// ========================36// Function Declarations37// ========================3839reserve function Aquis_DebugDraw40reserve function Aquis_DebugSpawn414243// ========================44// Function Definitions45// ========================4647private function Aquis_DebugDraw48DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)49end function505152private function Aquis_DebugSpawn53CreateTempObject(TypeName[Aquis], 0, object.xpos, object.ypos)54object[tempObjectPos].direction = object.direction55end function565758// ========================59// Events60// ========================6162event ObjectUpdate63switch object.state64case AQUIS_SETUP65if object.priority != PRIORITY_XBOUNDS_DESTROY66object.priority = PRIORITY_ACTIVE67end if6869if player[0].controlMode > CONTROLMODE_NONE // ???70object.timer = -1671object.state = AQUIS_SHOOT72end if73break7475case AQUIS_MOVING76temp1 = 0x7FFFFFFF77temp2 = 078foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)79temp0 = object.xpos80temp0 -= player[currentPlayer].xpos81Abs(temp0)82if temp0 < temp183temp1 = temp084temp2 = currentPlayer85end if86next87currentPlayer = temp28889if object.xpos > player[currentPlayer].xpos90object.direction = FLIP_NONE9192object.xvel -= 0x100093if object.xvel < -0x1000094object.xvel = -0x1000095end if96else97object.direction = FLIP_X9899object.xvel += 0x1000100if object.xvel > 0x10000101object.xvel = 0x10000102end if103end if104105if object.ypos > player[currentPlayer].ypos106object.yvel -= 0x1000107if object.yvel < -0x10000108object.yvel = -0x10000109end if110else111object.yvel += 0x1000112if object.yvel > 0x10000113object.yvel = 0x10000114end if115end if116117object.xpos += object.xvel118object.ypos += object.yvel119120if object.playerInRange == false121temp0 = player[currentPlayer].xpos122temp0 -= object.xpos123if object.direction == FLIP_NONE124if temp0 > -0x400000125if temp0 <= 0126CreateTempObject(TypeName[Aquis Shot], 0, object.xpos, object.ypos)127object[tempObjectPos].xpos -= 0x100000128object[tempObjectPos].ypos -= 0xA0000129object[tempObjectPos].xvel = -0x30000130object[tempObjectPos].yvel = 0x20000131object.playerInRange = true132end if133end if134else135if temp0 < 0x400000136if temp0 >= 0137CreateTempObject(TypeName[Aquis Shot], 0, object.xpos, object.ypos)138object[tempObjectPos].xpos += 0x100000139object[tempObjectPos].ypos -= 0xA0000140object[tempObjectPos].xvel = 0x30000141object[tempObjectPos].yvel = 0x20000142object.playerInRange = true143end if144end if145end if146end if147148object.timer++149if object.timer == 128150object.timer = 0151object.xvel = 0152object.yvel = 0153object.state = AQUIS_SHOOT154end if155break156157case AQUIS_SHOOT158object.timer++159if object.timer == 32160object.timer = 0161object.playerInRange = false162object.turnCount++163if object.turnCount == 4164object.xvel = -0x20000165object.yvel = 0166object.state = AQUIS_FLEE167else168object.state = AQUIS_MOVING169end if170end if171break172173case AQUIS_FLEE174object.xpos += object.xvel175object.ypos += object.yvel176break177178end switch179180object.wingFrame = object.wingAnimTimer181object.wingFrame >>= 2182object.wingFrame += 3183object.wingAnimTimer++184object.wingAnimTimer &= 7185186if object.outOfBounds == true187temp0 = object.xpos188temp1 = object.ypos189object.xpos = object.startPos.x190object.ypos = object.startPos.y191if object.outOfBounds == true192if object.priority != PRIORITY_XBOUNDS_DESTROY193object.priority = PRIORITY_BOUNDS194object.turnCount = 0195object.timer = 0196object.animationTimer = 0197object.xvel = 0198object.yvel = 0199object.state = AQUIS_SETUP200end if201else202object.xpos = temp0203object.ypos = temp1204end if205end if206207foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)208BoxCollisionTest(C_TOUCH, object.entityPos, -16, -12, 16, 12, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)209if checkResult == true210CallFunction(Player_BadnikBreak)211end if212next213end event214215216event ObjectDraw217DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)218DrawSpriteFX(object.wingFrame, FX_FLIP, object.xpos, object.ypos)219end event220221222event ObjectStartup223CheckCurrentStageFolder("Zone07")224if checkResult == true225LoadSpriteSheet("OOZ/Objects.gif")226SpriteFrame(-15, -24, 29, 47, 1, 1)227SpriteFrame(-16, -23, 30, 46, 31, 1)228SpriteFrame(-15, -23, 29, 46, 62, 1)229SpriteFrame(3, -13, 11, 13, 108, 18)230SpriteFrame(3, -9, 13, 12, 108, 32)231else232LoadSpriteSheet("MBZ/Objects.gif")233SpriteFrame(-15, -24, 29, 47, 929, 331)234SpriteFrame(-16, -23, 30, 46, 928, 379)235SpriteFrame(-15, -23, 29, 46, 929, 426)236SpriteFrame(3, -13, 11, 13, 917, 331)237SpriteFrame(3, -9, 13, 12, 915, 345)238end if239240foreach (TypeName[Aquis], arrayPos0, ALL_ENTITIES)241object[arrayPos0].direction = object[arrayPos0].propertyValue242object[arrayPos0].direction &= FLIP_X243object[arrayPos0].startPos.x = object[arrayPos0].xpos244object[arrayPos0].startPos.y = object[arrayPos0].ypos245next246247SetTableValue(TypeName[Aquis], DebugMode_ObjCount, DebugMode_TypesTable)248SetTableValue(Aquis_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)249SetTableValue(Aquis_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)250DebugMode_ObjCount++251end event252253254// ========================255// Editor Events256// ========================257258event RSDKEdit259if editor.returnVariable == true260switch editor.variableID261case EDIT_VAR_PROPVAL // property value262checkResult = object.propertyValue263break264265case 0 // direction266checkResult = object.propertyValue267break268269end switch270else271switch editor.variableID272case EDIT_VAR_PROPVAL // property value273object.propertyValue = editor.variableValue274break275276case 0 // direction277object.propertyValue = editor.variableValue278break279280end switch281end if282end event283284285event RSDKDraw286GetBit(object.direction, object.propertyValue, 0)287DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)288end event289290291event RSDKLoad292CheckCurrentStageFolder("Zone07")293if checkResult == true294LoadSpriteSheet("OOZ/Objects.gif")295SpriteFrame(-15, -24, 29, 47, 1, 1)296else297LoadSpriteSheet("MBZ/Objects.gif")298SpriteFrame(-15, -24, 29, 47, 929, 331)299end if300301AddEditorVariable("direction")302SetActiveVariable("direction")303AddEnumVariable("Left", 0)304AddEnumVariable("Right", 1)305end event306307308