Path: blob/master/Sonic 2/Scripts/Enemies/Snail.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Snail 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.y1415// States16private alias 0 : SNAIL_MOVING17private alias 1 : SNAIL_STOPPED1819// Player Aliases20private alias object.value40 : player.hitboxLeft21private alias object.value38 : player.hitboxTop22private alias object.value41 : player.hitboxRight23private alias object.value39 : player.hitboxBottom2425// Path ID Aliases26private alias 0 : PATH_A272829// ========================30// Function Declarations31// ========================3233reserve function Snail_DebugDraw34reserve function Snail_DebugSpawn353637// ========================38// Function Definitions39// ========================4041private function Snail_DebugDraw42DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)43DrawSpriteFX(2, FX_FLIP, object.xpos, object.ypos)44end function454647private function Snail_DebugSpawn48CreateTempObject(TypeName[Snail], 0, object.xpos, object.ypos)49GetBit(temp0, object.direction, 0)50if temp0 == FACING_RIGHT51object[tempObjectPos].direction = FLIP_NONE52object[tempObjectPos].xvel = -0x800053else54object[tempObjectPos].direction = FLIP_X55object[tempObjectPos].xvel = 0x800056end if57end function585960// ========================61// Events62// ========================6364event ObjectUpdate65switch object.state66case SNAIL_MOVING67object.priority = PRIORITY_ACTIVE68object.xpos += object.xvel6970ObjectTileGrip(CSIDE_FLOOR, 0, 15, PATH_A)71if checkResult == false72object.xpos -= object.xvel73if object.direction == FLIP_X74object.xvel = -0x800075else76object.xvel = 0x800077end if7879object.state = SNAIL_STOPPED80end if8182temp0 = object.xvel83Abs(temp0)84if temp0 == 0x800085temp0 = 686else87// The Snail's going faster, meaning it should animate faster as well88temp0 = 389end if9091object.animationTimer++92if object.animationTimer >= temp093object.animationTimer = 094object.frame ^= 195end if96break9798case SNAIL_STOPPED99if object.timer < 59100object.timer++101else102object.timer = 0103object.state = SNAIL_MOVING104object.direction ^= FLIP_X105end if106break107108end switch109110if object.outOfBounds == true111temp0 = object.xpos112temp1 = object.ypos113object.xpos = object.startPos.x114object.ypos = object.startPos.y115116if object.outOfBounds == true117if object.propertyValue == 0118object.direction = FLIP_NONE119object.xvel = -0x8000120else121object.direction = FLIP_X122object.xvel = 0x8000123end if124125object.animationTimer = 0126object.frame = 0127object.priority = PRIORITY_BOUNDS128object.state = SNAIL_MOVING129else130object.xpos = temp0131object.ypos = temp1132end if133end if134135foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)136// Try Detect Player137if object.direction == FLIP_NONE138BoxCollisionTest(C_TOUCH, object.entityPos, -96, -96, 0, 96, currentPlayer, 0, 0, 0, 0)139else140BoxCollisionTest(C_TOUCH, object.entityPos, 0, -96, 96, 96, currentPlayer, 0, 0, 0, 0)141end if142143if checkResult == true144// If we're detected, dash until we hit an edge145if object.direction == FLIP_NONE146object.xvel = -0x20000147else148object.xvel = 0x20000149end if150end if151152BoxCollisionTest(C_TOUCH, object.entityPos, -12, -16, 12, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)153if checkResult == true154CallFunction(Player_BadnikBreak)155end if156next157end event158159160event ObjectDraw161DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)162DrawSpriteFX(2, FX_FLIP, object.xpos, object.ypos)163164// Going fast means we should have boosters on165temp0 = object.xvel166Abs(temp0)167if temp0 != 0x8000168temp0 = object.frame169temp0 += 3170DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)171end if172end event173174175event ObjectStartup176CheckCurrentStageFolder("Zone01")177if checkResult == true178LoadSpriteSheet("EHZ/Objects.gif")179SpriteFrame(-16, -16, 32, 33, 44, 27)180SpriteFrame(-16, -16, 32, 33, 77, 27)181SpriteFrame(-23, -6, 16, 16, 110, 44)182SpriteFrame(16, 0, 6, 5, 19, 50)183SpriteFrame(16, 0, 7, 5, 19, 56)184else185LoadSpriteSheet("MBZ/Objects.gif")186SpriteFrame(-16, -16, 32, 33, 44, 27)187SpriteFrame(-16, -16, 32, 33, 77, 27)188SpriteFrame(-23, -6, 16, 16, 110, 44)189SpriteFrame(16, 0, 6, 5, 19, 50)190SpriteFrame(16, 0, 7, 5, 19, 56)191end if192193foreach (TypeName[Snail], arrayPos0, ALL_ENTITIES)194object[arrayPos0].startPos.x = object[arrayPos0].xpos195object[arrayPos0].startPos.y = object[arrayPos0].ypos196197GetBit(temp0, object[arrayPos0].propertyValue, 0)198if temp0 == FLIP_NONE199object[arrayPos0].direction = FLIP_NONE200object[arrayPos0].xvel = -0x8000201else202object[arrayPos0].direction = FLIP_X203object[arrayPos0].xvel = 0x8000204end if205next206207SetTableValue(TypeName[Snail], DebugMode_ObjCount, DebugMode_TypesTable)208SetTableValue(Snail_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)209SetTableValue(Snail_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 // direction226checkResult = object.propertyValue227break228229end switch230else231switch editor.variableID232case EDIT_VAR_PROPVAL // property value233object.propertyValue = editor.variableValue234break235236case 0 // direction237object.propertyValue = editor.variableValue238break239240end switch241end if242end event243244245event RSDKDraw246GetBit(object.direction, object.propertyValue, 0)247DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)248DrawSpriteFX(2, FX_FLIP, object.xpos, object.ypos)249end event250251252event RSDKLoad253CheckCurrentStageFolder("Zone01")254if checkResult == true255LoadSpriteSheet("EHZ/Objects.gif")256SpriteFrame(-16, -16, 32, 33, 44, 27)257SpriteFrame(-16, -16, 32, 33, 77, 27)258SpriteFrame(-23, -6, 16, 16, 110, 44)259SpriteFrame(16, 0, 6, 5, 19, 50)260SpriteFrame(16, 0, 7, 5, 19, 56)261else262LoadSpriteSheet("MBZ/Objects.gif")263SpriteFrame(-16, -16, 32, 33, 44, 27)264SpriteFrame(-16, -16, 32, 33, 77, 27)265SpriteFrame(-23, -6, 16, 16, 110, 44)266SpriteFrame(16, 0, 6, 5, 19, 50)267SpriteFrame(16, 0, 7, 5, 19, 56)268end if269270AddEditorVariable("direction")271SetActiveVariable("direction")272AddEnumVariable("Left", 0)273AddEnumVariable("Right", 1)274end event275276277