Path: blob/master/Sonic 1/Scripts/Animals/Rocky.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Rocky Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.delay1213private alias object.value0 : object.timer // its this in ANIMAL_WAIT14private alias object.value0 : object.bounceDir // its this in every other state15private alias object.value1 : object.randomizeDir1617private alias 0 : ANIMAL_WAIT18private alias 1 : ANIMAL_FALL19private alias 2 : ANIMAL_BOUNCING_PLACED20private alias 3 : ANIMAL_BOUNCING_FIXED21private alias 4 : ANIMAL_BOUNCING_FOLLOW22private alias 5 : ANIMAL_BOUNCING_FREE2324private alias 0x14000 : ANIMAL_XVEL25private alias -0x18000 : ANIMAL_YVEL2627// Player Aliases28private alias object.xpos : player.xpos2930// Path ID Aliases31private alias 0 : PATH_A323334// ========================35// Function Declarations36// ========================3738reserve function Rocky_DebugDraw39reserve function Rocky_DebugSpawn404142// ========================43// Function Definitions44// ========================4546private function Rocky_DebugDraw47DrawSprite(2)48end function495051private function Rocky_DebugSpawn52CreateTempObject(TypeName[Rocky], 0, object.xpos, object.ypos)5354GetBit(temp0, object.direction, 0)55if temp0 == FACING_RIGHT56object[tempObjectPos].state = ANIMAL_BOUNCING_FIXED57object[tempObjectPos].xvel = ANIMAL_XVEL58object[tempObjectPos].yvel = ANIMAL_YVEL5960Rand(checkResult, 32)61if checkResult < 1662object[tempObjectPos].direction = FACING_LEFT63FlipSign(object[tempObjectPos].xvel)64end if65else66object[tempObjectPos].state = ANIMAL_BOUNCING_FOLLOW67end if68end function697071// ========================72// Events73// ========================7475event ObjectUpdate76switch object.state77case ANIMAL_WAIT78if object.timer < object.delay79object.timer++80else81object.xvel = ANIMAL_XVEL82if object.randomizeDir == true83object.drawOrder = 484Rand(checkResult, 32)85if checkResult < 1686object.direction = FACING_LEFT87FlipSign(object.xvel)88end if89else90object.direction = FACING_LEFT91FlipSign(object.xvel)92end if9394object.yvel = -0x4000095object.state++96end if97break9899case ANIMAL_FALL100object.ypos += object.yvel101object.yvel += 0x3800102if object.yvel > 0103ObjectTileCollision(CSIDE_FLOOR, 0, 8, PATH_A)104if checkResult == true105object.yvel = ANIMAL_YVEL106object.state++107end if108end if109break110111case ANIMAL_BOUNCING_FOLLOW112if player[0].xpos < object.xpos113object.direction = FACING_LEFT114else115object.direction = FACING_RIGHT116end if117// [Fallthrough]118case ANIMAL_BOUNCING_PLACED119case ANIMAL_BOUNCING_FIXED120case ANIMAL_BOUNCING_FREE121object.xpos += object.xvel122object.ypos += object.yvel123object.yvel += 0x3800124125if object.yvel > 0126ObjectTileCollision(CSIDE_FLOOR, 0, 8, PATH_A)127if checkResult == true128if object.state == ANIMAL_BOUNCING_FIXED129if object.bounceDir == FACING_LEFT130FlipSign(object.xvel)131object.direction ^= FACING_LEFT132end if133134object.bounceDir ^= FACING_LEFT135end if136137object.yvel = ANIMAL_YVEL138end if139end if140break141142end switch143144if object.state < ANIMAL_BOUNCING_FIXED145if object.outOfBounds == true146object.type = TypeName[Blank Object]147end if148end if149end event150151152event ObjectDraw153switch object.state154case ANIMAL_WAIT155case ANIMAL_FALL156DrawSprite(2)157break158159case ANIMAL_BOUNCING_PLACED160case ANIMAL_BOUNCING_FIXED161case ANIMAL_BOUNCING_FOLLOW162case ANIMAL_BOUNCING_FREE163if object.yvel < 0164DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)165else166DrawSpriteFX(1, FX_FLIP, object.xpos, object.ypos)167end if168break169170end switch171end event172173174event ObjectStartup175LoadSpriteSheet("Global/Items2.gif")176SpriteFrame(-8, -8, 16, 16, 83, 91)177SpriteFrame(-8, -8, 16, 15, 83, 108)178SpriteFrame(-7, -12, 16, 24, 83, 66)179180foreach (TypeName[Rocky], arrayPos0, ALL_ENTITIES)181if object[arrayPos0].propertyValue == 1182object[arrayPos0].state = ANIMAL_BOUNCING_FIXED183object[arrayPos0].xvel = ANIMAL_XVEL184object[arrayPos0].yvel = ANIMAL_YVEL185186Rand(checkResult, 32)187if checkResult < 16188object[arrayPos0].direction = FACING_LEFT189FlipSign(object[arrayPos0].xvel)190end if191else192if object[arrayPos0].propertyValue == 2193object[arrayPos0].state = ANIMAL_BOUNCING_FOLLOW194end if195196if object[arrayPos0].propertyValue == 3197object[arrayPos0].state = ANIMAL_BOUNCING_FREE198object[arrayPos0].xvel = ANIMAL_XVEL199FlipSign(object[arrayPos0].xvel)200object[arrayPos0].direction = FACING_LEFT201end if202end if203204object[arrayPos0].propertyValue = 0205next206207SetTableValue(TypeName[Rocky], DebugMode_ObjCount, DebugMode_TypesTable)208SetTableValue(Rocky_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)209SetTableValue(Rocky_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)210DebugMode_ObjCount++211end event212213214// ========================215// Editor Events216// ========================217218event RSDKEdit219if editor.returnVariable == true220switch editor.variableID221case EDIT_VAR_PROPVAL // property value222checkResult = object.propertyValue223break224225case 0 // behaviour226checkResult = object.propertyValue227break228229end switch230else231switch editor.variableID232case EDIT_VAR_PROPVAL // property value233object.propertyValue = editor.variableValue234break235236case 0 // behaviour237object.propertyValue = editor.variableValue238break239240end switch241end if242end event243244245event RSDKDraw246DrawSprite(0)247end event248249250event RSDKLoad251LoadSpriteSheet("Global/Items2.gif")252SpriteFrame(-7, -12, 16, 24, 83, 66)253254AddEditorVariable("behavior")255SetActiveVariable("behavior")256AddEnumVariable("Placed", 0)257AddEnumVariable("Fixed", 1)258AddEnumVariable("Follow", 2)259AddEnumVariable("Free", 3)260end event261262263