Path: blob/master/Sonic 2/Scripts/MCZ/EggmanDrill.txt
1488 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Eggman Drill Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias 0 : DRILL_ACTIVE12private alias 1 : DRILL_FELLOFF131415// ========================16// Events17// ========================1819event ObjectUpdate20if object.state == DRILL_ACTIVE21if object.interaction == true22// Object is active, check collision with players2324// Backup the object's position since it'll need to be changed for collision checks25temp0 = object.xpos26temp1 = object.ypos2728// First, check for the hitbox at the base of the drill29Sin(object.xpos, object.angle)30if object.direction == FLIP_NONE31object.xpos *= -0xC0032else33object.xpos *= 0xC0034end if35Cos(object.ypos, object.angle)36object.ypos *= -0xC0037object.xpos += temp038object.ypos += temp139foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)40BoxCollisionTest(C_TOUCH, object.entityPos, -6, -6, 6, 6, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)41if checkResult == true42CallFunction(Player_Hit)43end if44next4546// Check for the hitbox at the tip of the drill, too47Sin(object.xpos, object.angle)48if object.direction == FLIP_NONE49object.xpos *= -0x130050else51object.xpos *= 0x130052end if53Cos(object.ypos, object.angle)54object.ypos *= -0x130055object.xpos += temp056object.ypos += temp157foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)58BoxCollisionTest(C_TOUCH, object.entityPos, -4, -4, 4, 4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)59if checkResult == true60CallFunction(Player_Hit)61end if62next6364// Restore the object's position65object.xpos = temp066object.ypos = temp167end if68else69// Drills falling off after boss is defeated70object.xpos += object.xvel71object.ypos += object.yvel72object.yvel += 0x38007374if object.outOfBounds == true75object.type = TypeName[Blank Object]76end if77end if78end event798081event ObjectDraw82DrawSpriteFX(object.frame, FX_ROTATE, object.xpos, object.ypos)83end event848586event ObjectStartup87CheckCurrentStageFolder("Zone06")88if checkResult == true89LoadSpriteSheet("MCZ/Objects.gif")90SpriteFrame(-12, -48, 24, 64, 1, 132)91SpriteFrame(-12, -48, 24, 64, 26, 132)92SpriteFrame(-12, -48, 24, 64, 51, 132)93// Mid-turn frame inbetween the two is unused, the sprite is rotated via script FX instead94SpriteFrame(-48, -12, 64, 24, 150, 182)95SpriteFrame(-48, -12, 64, 24, 150, 207)96SpriteFrame(-48, -12, 64, 24, 150, 232)97else98LoadSpriteSheet("MBZ/Objects.gif")99SpriteFrame(-12, -48, 24, 64, 42, 191)100SpriteFrame(-12, -48, 24, 64, 67, 191)101SpriteFrame(-12, -48, 24, 64, 92, 191)102103SpriteFrame(-48, -12, 64, 24, 117, 181)104SpriteFrame(-48, -12, 64, 24, 117, 206)105SpriteFrame(-48, -12, 64, 24, 117, 231)106end if107end event108109110// ========================111// Editor Events112// ========================113114event RSDKDraw115DrawSprite(0)116end event117118119event RSDKLoad120CheckCurrentStageFolder("Zone06")121if checkResult == true122LoadSpriteSheet("MCZ/Objects.gif")123SpriteFrame(-12, -48, 24, 64, 1, 132)124else125LoadSpriteSheet("MBZ/Objects.gif")126SpriteFrame(-12, -48, 24, 64, 42, 191)127end if128129SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")130end event131132133