Path: blob/master/Sonic 2/Scripts/Enemies/Crawl.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Crawl 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.foundTarget15private alias object.value4 : object.prevState1617// States18private alias 0 : CRAWL_SETUP19private alias 1 : CRAWL_MOVING20private alias 2 : CRAWL_IDLE21private alias 3 : CRAWL_DEFEND2223// Player Aliases24private alias object.xpos : player.xpos25private alias object.ypos : player.ypos26private alias object.xvel : player.xvel27private alias object.yvel : player.yvel28private alias object.speed : player.speed29private alias object.gravity : player.gravity30private alias object.animation : player.animation3132private alias object.value1 : player.timer33private alias object.value40 : player.hitboxLeft34private alias object.value38 : player.hitboxTop35private alias object.value41 : player.hitboxRight36private alias object.value39 : player.hitboxBottom3738// Path ID Aliases39private alias 0 : PATH_A404142// ========================43// Function Declarations44// ========================4546reserve function Crawl_DebugDraw47reserve function Crawl_DebugSpawn48reserve function Crawl_FindTarget49reserve function Crawl_HandleBump505152// ========================53// Function Definitions54// ========================5556private function Crawl_DebugDraw57DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)58end function596061private function Crawl_DebugSpawn62CreateTempObject(TypeName[Crawl], 0, object.xpos, object.ypos)63object[tempObjectPos].startPos.x = object.xpos64object[tempObjectPos].startPos.y = object.ypos65object[tempObjectPos].direction = object.direction66end function676869private function Crawl_FindTarget70object.foundTarget = false7172foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)73temp0 = player[currentPlayer].xpos74temp0 -= object.xpos75Abs(temp0)76if temp0 < 0x40000077temp0 = player[currentPlayer].ypos78temp0 -= object.ypos79Abs(temp0)80if temp0 < 0x40000081object.foundTarget |= true82end if83end if84next85end function868788private function Crawl_HandleBump89temp0 = player[currentPlayer].xpos90temp0 -= object.xpos91temp1 = player[currentPlayer].ypos92temp1 -= object.ypos93ATan2(temp2, temp0, temp1)94Cos256(temp0, temp2)95Sin256(temp1, temp2)96temp0 *= 0x70097temp1 *= 0x70098player[currentPlayer].timer = 099player[currentPlayer].speed = temp0100player[currentPlayer].xvel = temp0101player[currentPlayer].yvel = temp1102PlaySfx(SfxName[Bumper], false)103end function104105106// ========================107// Events108// ========================109110event ObjectUpdate111switch object.state112case CRAWL_SETUP113if object.priority != PRIORITY_XBOUNDS_DESTROY114object.priority = PRIORITY_ACTIVE115end if116117if object.direction == FLIP_NONE118object.xvel = -0x2000119else120object.xvel = 0x2000121end if122123object.state = CRAWL_MOVING124break125126case CRAWL_MOVING127object.xpos += object.xvel128ObjectTileGrip(CSIDE_FLOOR, 0, 16, PATH_A)129130object.timer++131if object.timer == 512132object.timer = 0133object.state = CRAWL_IDLE134end if135136CallFunction(Crawl_FindTarget)137if object.foundTarget == true138object.prevState = object.state139object.state = CRAWL_DEFEND140object.frame = 0141object.animationTimer = 0142end if143144object.frame = object.animationTimer145object.frame /= 20146object.animationTimer++147object.animationTimer %= 40148break149150case CRAWL_IDLE151object.timer++152if object.timer == 60153object.timer = 0154object.direction ^= FLIP_X155FlipSign(object.xvel)156object.state = CRAWL_MOVING157end if158159CallFunction(Crawl_FindTarget)160if object.foundTarget == true161object.prevState = object.state162object.state = CRAWL_DEFEND163end if164165object.frame = 0166object.animationTimer = 0167break168169case CRAWL_DEFEND170CallFunction(Crawl_FindTarget)171172if object.foundTarget == false173object.state = object.prevState174end if175176object.animationTimer = 0177break178179end switch180181if object.outOfBounds == true182temp0 = object.xpos183temp1 = object.ypos184object.xpos = object.startPos.x185object.ypos = object.startPos.y186if object.outOfBounds == true187if object.priority != PRIORITY_XBOUNDS_DESTROY188object.priority = PRIORITY_BOUNDS189end if190object.state = CRAWL_SETUP191else192object.xpos = temp0193object.ypos = temp1194end if195end if196197foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)198BoxCollisionTest(C_TOUCH, object.entityPos, -15, -16, 15, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)199if checkResult == true200if player[currentPlayer].animation == ANI_JUMPING201if player[currentPlayer].gravity == GRAVITY_AIR202CallFunction(Crawl_HandleBump)203object.frame = 3204else205if object.direction == FLIP_NONE206if player[currentPlayer].xpos > object.xpos207CallFunction(Player_BadnikBreak)208else209CallFunction(Crawl_HandleBump)210object.frame = 2211end if212else213if player[currentPlayer].xpos < object.xpos214CallFunction(Player_BadnikBreak)215else216CallFunction(Crawl_HandleBump)217object.frame = 2218end if219end if220end if221else222CallFunction(Player_BadnikBreak)223end if224end if225next226end event227228229event ObjectDraw230DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)231end event232233234event ObjectStartup235CheckCurrentStageFolder("Zone04")236if checkResult == true237LoadSpriteSheet("CNZ/Objects.gif")238SpriteFrame(-23, -16, 47, 32, 1, 1)239SpriteFrame(-31, -16, 59, 32, 49, 1)240SpriteFrame(-24, -16, 40, 32, 109, 1)241SpriteFrame(-32, -16, 48, 32, 150, 1)242else243LoadSpriteSheet("MBZ/Objects.gif")244SpriteFrame(-23, -16, 47, 32, 436, 256)245SpriteFrame(-31, -16, 59, 32, 484, 256)246SpriteFrame(-24, -16, 40, 32, 544, 256)247SpriteFrame(-32, -16, 48, 32, 585, 256)248end if249250foreach (TypeName[Crawl], arrayPos0, ALL_ENTITIES)251object[arrayPos0].startPos.x = object[arrayPos0].xpos252object[arrayPos0].startPos.y = object[arrayPos0].ypos253next254255SetTableValue(TypeName[Crawl], DebugMode_ObjCount, DebugMode_TypesTable)256SetTableValue(Crawl_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)257SetTableValue(Crawl_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)258DebugMode_ObjCount++259end event260261262// ========================263// Editor Events264// ========================265266event RSDKDraw267DrawSprite(0)268end event269270271event RSDKLoad272CheckCurrentStageFolder("Zone04")273if checkResult == true274LoadSpriteSheet("CNZ/Objects.gif")275SpriteFrame(-23, -16, 47, 32, 1, 1)276else277LoadSpriteSheet("MBZ/Objects.gif")278SpriteFrame(-23, -16, 47, 32, 436, 256)279end if280281// Set to 172 in the scene for some reason?282// dunno what that's about, but at the very least i can say that this value isn't used here283SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")284end event285286287