Path: blob/master/Sonic 2/Scripts/Enemies/Grounder.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Grounder 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.targetPlayer15private alias object.value4 : object.targetPlayerDistance1617// States18private alias 0 : GROUNDER_HIDDEN19private alias 1 : GROUNDER_APPEAR20private alias 2 : GROUNDER_MOVING21private alias 3 : GROUNDER_TURNING2223// Player Aliases24private alias object.xpos : player.xpos25private alias object.value40 : player.hitboxLeft26private alias object.value38 : player.hitboxTop27private alias object.value41 : player.hitboxRight28private alias object.value39 : player.hitboxBottom2930private alias object.value17 : debugMode.currentSelection3132// Path ID Aliases33private alias 0 : PATH_A343536// ========================37// Function Declarations38// ========================3940reserve function Grounder_DebugDraw41reserve function Grounder_DebugSpawn424344// ========================45// Static Values46// ========================4748private value Grounder_startDebugID = 0495051// ========================52// Function Definitions53// ========================5455private function Grounder_DebugDraw56DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)57end function585960private function Grounder_DebugSpawn61temp0 = debugMode[0].currentSelection62temp0 -= Grounder_startDebugID6364CreateTempObject(TypeName[Grounder], temp0, object.xpos, object.ypos)65object[tempObjectPos].startPos.x = object.xpos66object[tempObjectPos].startPos.y = object.ypos67end function686970// ========================71// Events72// ========================7374event ObjectUpdate75switch object.state76case GROUNDER_HIDDEN77object.priority = PRIORITY_ACTIVE78if object.propertyValue == 179ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)80object.state = GROUNDER_APPEAR81object.timer = 1782end if8384foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)85BoxCollisionTest(C_TOUCH, object.entityPos, -96, -256, 96, 256, currentPlayer, -1, -1, 1, 1)86if checkResult == true87CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)88object[tempObjectPos].xvel = -0x1000089object[tempObjectPos].yvel = -0x400009091CreateTempObject(TypeName[Brick], 3, object.xpos, object.ypos)92object[tempObjectPos].xvel = 0x4000093object[tempObjectPos].yvel = -0x300009495CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)96object[tempObjectPos].xvel = 0x2000097object[tempObjectPos].yvel = 09899CreateTempObject(TypeName[Brick], 2, object.xpos, object.ypos)100object[tempObjectPos].xvel = -0x30000101object[tempObjectPos].yvel = -0x10000102103CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)104object[tempObjectPos].xvel = -0x30000105object[tempObjectPos].yvel = -0x30000106107CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)108object[tempObjectPos].ypos -= 0x140000109object[tempObjectPos].xvel = 0x10000110object[tempObjectPos].yvel = -0x20000111112CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)113object[tempObjectPos].xpos += 0x100000114object[tempObjectPos].ypos -= 0x40000115object[tempObjectPos].xvel = 0x10000116object[tempObjectPos].yvel = -0x10000117118CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)119object[tempObjectPos].ypos += 0xC0000120object[tempObjectPos].xvel = -0x10000121object[tempObjectPos].yvel = -0x20000122123CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)124object[tempObjectPos].xpos -= 0x100000125object[tempObjectPos].ypos -= 0x40000126object[tempObjectPos].xvel = -0x10000127object[tempObjectPos].yvel = -0x10000128129ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)130object.state = GROUNDER_APPEAR131end if132next133break134135case GROUNDER_APPEAR136object.timer++137if object.timer == 8138object.frame = 1139end if140141if object.timer == 18142object.timer = 0143object.frame = 2144object.state = GROUNDER_MOVING145146object.targetPlayerDistance = 0x7FFFFFFF147object.targetPlayer = 0148foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)149temp0 = player[currentPlayer].xpos150temp0 -= object.xpos151if temp0 < 0152temp1 = FLIP_NONE153FlipSign(temp0)154else155temp1 = FLIP_X156end if157158if temp0 < object.targetPlayerDistance159object.targetPlayerDistance = temp0160object.targetPlayer = currentPlayer161object.direction = temp1162end if163next164165if object.direction == FLIP_NONE166object.xvel = -0x10000167else168object.xvel = 0x10000169end if170end if171break172173case GROUNDER_MOVING174object.xpos += object.xvel175176temp0 = object.ypos177temp1 = object.ypos178ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)179temp2 = checkResult180temp1 -= object.ypos181182if temp1 <= -0xC0000183object.ypos = temp0184temp2 = 0185end if186187if temp1 > 0x10000188object.ypos = temp0189temp2 = 0190end if191192if temp2 == 0193object.timer = 60194object.state = GROUNDER_TURNING195end if196197object.animationTimer++198if object.animationTimer == 12199object.animationTimer = 0200end if201object.frame = object.animationTimer202object.frame >>= 2203object.frame += 2204break205206case GROUNDER_TURNING207object.timer--208if object.timer == 0209object.direction ^= FLIP_X210FlipSign(object.xvel)211object.state = GROUNDER_MOVING212end if213break214215end switch216217if object.outOfBounds == true218temp0 = object.xpos219temp1 = object.ypos220object.xpos = object.startPos.x221object.ypos = object.startPos.y222if object.outOfBounds == true223object.state = GROUNDER_HIDDEN224object.timer = 0225object.animationTimer = 0226object.frame = 0227object.priority = PRIORITY_BOUNDS228else229object.xpos = temp0230object.ypos = temp1231end if232end if233234foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)235BoxCollisionTest(C_TOUCH, object.entityPos, -12, -20, 12, 20, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)236if checkResult == true237CallFunction(Player_BadnikBreak)238end if239next240end event241242243event ObjectDraw244if object.state == GROUNDER_HIDDEN245temp0 = object.xpos246temp1 = object.ypos247248temp1 -= 0x140000249DrawSpriteFX(5, FX_FLIP, temp0, temp1)250251temp1 += 0x100000252temp0 -= 0x100000253DrawSpriteFX(5, FX_FLIP, temp0, temp1)254255temp0 += 0x200000256DrawSpriteFX(5, FX_FLIP, temp0, temp1)257258temp1 += 0x100000259temp0 -= 0x100000260DrawSpriteFX(5, FX_FLIP, temp0, temp1)261else262DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)263end if264end event265266267event ObjectStartup268CheckCurrentStageFolder("Zone03")269if checkResult == true270LoadSpriteSheet("ARZ/Objects.gif")271272// Emerging From Wall Frames273SpriteFrame(-14, -12, 28, 32, 133, 1)274SpriteFrame(-16, -16, 32, 36, 162, 1)275276// Normal Frames277SpriteFrame(-16, -20, 32, 40, 34, 1)278SpriteFrame(-16, -20, 32, 40, 67, 1)279SpriteFrame(-16, -20, 32, 40, 100, 1)280281// Brick Cover Frame282SpriteFrame(-16, -8, 32, 16, 18, 128)283else284LoadSpriteSheet("MBZ/Objects.gif")285286// Emerging From Wall Frames287SpriteFrame(-14, -12, 28, 32, 374, 256)288SpriteFrame(-16, -16, 32, 36, 403, 256)289290// Normal Frames291SpriteFrame(-16, -20, 32, 40, 275, 256)292SpriteFrame(-16, -20, 32, 40, 308, 256)293SpriteFrame(-16, -20, 32, 40, 341, 256)294295// Brick Cover Frame296SpriteFrame(-16, -8, 32, 16, 436, 306)297end if298299foreach (TypeName[Grounder], arrayPos0, ALL_ENTITIES)300object[arrayPos0].startPos.x = object[arrayPos0].xpos301object[arrayPos0].startPos.y = object[arrayPos0].ypos302next303304temp0 = 0305Grounder_startDebugID = DebugMode_ObjCount306Grounder_startDebugID--307while temp0 < 2308SetTableValue(TypeName[Grounder], DebugMode_ObjCount, DebugMode_TypesTable)309SetTableValue(Grounder_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)310SetTableValue(Grounder_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)311DebugMode_ObjCount++312temp0++313loop314end event315316317// ========================318// Editor Events319// ========================320321event RSDKEdit322if editor.returnVariable == true323switch editor.variableID324case EDIT_VAR_PROPVAL // property value325checkResult = object.propertyValue326break327328case 0 // type329GetBit(checkResult, object.propertyValue, 0)330break331332end switch333else334switch editor.variableID335case EDIT_VAR_PROPVAL // property value336object.propertyValue = editor.variableValue337break338339case 0 // type340CheckNotEqual(editor.variableValue, 0)341SetBit(object.propertyValue, 0, checkResult)342break343344end switch345end if346end event347348349event RSDKDraw350object.frame = object.propertyValue351object.frame <<= 1352353DrawSprite(object.frame)354end event355356357event RSDKLoad358CheckCurrentStageFolder("Zone03")359if checkResult == true360LoadSpriteSheet("ARZ/Objects.gif")361SpriteFrame(-14, -12, 28, 32, 133, 1)362SpriteFrame(-16, -16, 32, 36, 162, 1)363SpriteFrame(-16, -20, 32, 40, 34, 1)364SpriteFrame(-16, -20, 32, 40, 67, 1)365SpriteFrame(-16, -20, 32, 40, 100, 1)366SpriteFrame(-16, -8, 32, 16, 18, 128)367else368LoadSpriteSheet("MBZ/Objects.gif")369SpriteFrame(-14, -12, 28, 32, 374, 256)370SpriteFrame(-16, -16, 32, 36, 403, 256)371SpriteFrame(-16, -20, 32, 40, 275, 256)372SpriteFrame(-16, -20, 32, 40, 308, 256)373SpriteFrame(-16, -20, 32, 40, 341, 256)374SpriteFrame(-16, -8, 32, 16, 436, 306)375end if376377AddEditorVariable("type")378SetActiveVariable("type")379AddEnumVariable("Start Hidden", 0)380AddEnumVariable("Not Hidden", 1)381end event382383384