Path: blob/master/Sonic 1/Scripts/SBZ/FlameThrower.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Flame Thrower 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.onTime13private alias object.value2 : object.offTime14private alias object.value3 : object.loopPoint15private alias object.value4 : object.lastFrame16private alias object.value5 : object.frameCount171819// ========================20// Function Declarations21// ========================2223reserve function FlameThrower_DebugDraw24reserve function FlameThrower_DebugSpawn252627// ========================28// Tables29// ========================3031private table FlameThrower_hitboxTable32-8, 23, 7, 4033-8, 14, 7, 4034-11, 2, 11, 4035-11, -14, 11, 4036end table373839// ========================40// Function Definitions41// ========================4243private function FlameThrower_DebugDraw44temp0 = object.direction45temp0 *= 1146object.direction <<= 147DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)48object.direction >>= 149end function505152private function FlameThrower_DebugSpawn53CreateTempObject(TypeName[Flame Thrower], 0, object.xpos, object.ypos)54object[tempObjectPos].drawOrder = 555object[tempObjectPos].onTime = 12856object[tempObjectPos].offTime = 12857if object.direction == FLIP_NONE58object[tempObjectPos].loopPoint = 059object[tempObjectPos].lastFrame = 1160else61object[tempObjectPos].loopPoint = 1162object[tempObjectPos].lastFrame = 2263object[tempObjectPos].frame = 1164object[tempObjectPos].direction = FLIP_Y65end if66object[tempObjectPos].frameCount = object[tempObjectPos].loopPoint67object[tempObjectPos].frameCount += 368end function697071// ========================72// Events73// ========================7475event ObjectUpdate76object.timer--77if object.timer < 078if object.animation == 079object.timer = object.offTime80else81object.timer = object.onTime82end if8384object.animation ^= 185if object.animation == 086PlaySfx(SfxName[Flame Thrower], false)87end if88end if8990if object.animation == 091if object.frame < object.lastFrame92object.animationTimer++93if object.animationTimer >= 494object.animationTimer = 095object.frame++96if object.frame == object.lastFrame97object.frame -= 298end if99end if100end if101else102if object.frame > object.loopPoint103object.frame--104end if105end if106107if object.frame >= object.frameCount108temp4 = object.frame109temp4 -= object.frameCount110temp4 <<= 1111temp4 &= 252112GetTableValue(temp0, temp4, FlameThrower_hitboxTable)113temp4++114GetTableValue(temp1, temp4, FlameThrower_hitboxTable)115temp4++116GetTableValue(temp2, temp4, FlameThrower_hitboxTable)117temp4++118GetTableValue(temp3, temp4, FlameThrower_hitboxTable)119120// See if the object is Y flipped or not121GetBit(temp4, object.direction, 1)122if temp4 == true123FlipSign(temp1)124FlipSign(temp3)125temp4 = temp1126temp1 = temp3127temp3 = temp4128end if129130foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)131BoxCollisionTest(C_TOUCH, object.entityPos, temp0, temp1, temp2, temp3, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)132if checkResult == true133CallFunction(Player_FireHit)134end if135next136end if137end event138139140event ObjectDraw141DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)142end event143144145event ObjectStartup146LoadSpriteSheet("SBZ/Objects.gif")147SpriteFrame(-5, 40, 16, 16, 77, 460)148SpriteFrame(-5, 32, 16, 24, 94, 452)149SpriteFrame(-5, 32, 16, 24, 111, 452)150SpriteFrame(-8, 17, 19, 39, 128, 437)151SpriteFrame(-7, 17, 18, 39, 148, 437)152SpriteFrame(-8, 9, 19, 47, 167, 429)153SpriteFrame(-7, 9, 18, 47, 187, 429)154SpriteFrame(-11, -6, 22, 62, 207, 414)155SpriteFrame(-11, -6, 22, 62, 230, 414)156SpriteFrame(-11, -22, 22, 78, 253, 398)157SpriteFrame(-11, -23, 22, 79, 276, 397)158159SpriteFrame(-7, 40, 16, 16, 299, 460)160SpriteFrame(-7, 32, 16, 24, 316, 452)161SpriteFrame(-7, 32, 16, 24, 333, 452)162SpriteFrame(-8, 17, 17, 39, 350, 437)163SpriteFrame(-7, 17, 16, 39, 368, 437)164SpriteFrame(-8, 9, 17, 47, 385, 429)165SpriteFrame(-7, 9, 16, 47, 403, 429)166SpriteFrame(-11, -6, 22, 62, 420, 414)167SpriteFrame(-11, -6, 22, 62, 443, 414)168SpriteFrame(-11, -22, 22, 78, 466, 398)169SpriteFrame(-11, -23, 22, 79, 489, 397)170171foreach (TypeName[Flame Thrower], arrayPos0, ALL_ENTITIES)172object[arrayPos0].drawOrder = 5173object[arrayPos0].onTime = object[arrayPos0].propertyValue174object[arrayPos0].onTime &= 0xF0175object[arrayPos0].onTime <<= 1176object[arrayPos0].offTime = object[arrayPos0].propertyValue177object[arrayPos0].offTime &= 0x0F178object[arrayPos0].offTime <<= 5179GetBit(temp0, object[arrayPos0].direction, 1)180if temp0 == FLIP_NONE181object[arrayPos0].loopPoint = 0182object[arrayPos0].lastFrame = 11183else184object[arrayPos0].loopPoint = 11185object[arrayPos0].lastFrame = 22186object[arrayPos0].frame = 11187end if188object[arrayPos0].frameCount = object[arrayPos0].loopPoint189object[arrayPos0].frameCount += 3190next191192SetTableValue(TypeName[Flame Thrower], DebugMode_ObjCount, DebugMode_TypesTable)193SetTableValue(FlameThrower_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)194SetTableValue(FlameThrower_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)195DebugMode_ObjCount++196end event197198199// ========================200// Editor Events201// ========================202203event RSDKEdit204if editor.returnVariable == true205switch editor.variableID206case EDIT_VAR_PROPVAL // property value207checkResult = object.propertyValue208break209210case 0 // onTime211checkResult = object.propertyValue212checkResult &= 0xF0213checkResult >>= 4214break215216case 1 // offTime217checkResult = object.propertyValue218checkResult &= 0x0F219break220221end switch222else223switch editor.variableID224case EDIT_VAR_PROPVAL // property value225object.propertyValue = editor.variableValue226break227228case 0 // onTime229temp0 = editor.variableValue230temp0 &= 0xF231temp0 <<= 4232233object.propertyValue &= 0x0F234object.propertyValue |= temp0235break236237case 1 // offTime238temp0 = editor.variableValue239temp0 &= 0xF240241object.propertyValue &= 0xF0242object.propertyValue |= temp0243break244245end switch246end if247end event248249250event RSDKDraw251GetBit(temp0, object.direction, 1)252if temp0 == 0253object.frame = 0254else255object.frame = 11256end if257258DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)259end event260261262event RSDKLoad263LoadSpriteSheet("SBZ/Objects.gif")264SpriteFrame(-5, 40, 16, 16, 77, 460)265SpriteFrame(-5, 32, 16, 24, 94, 452)266SpriteFrame(-5, 32, 16, 24, 111, 452)267SpriteFrame(-8, 17, 19, 39, 128, 437)268SpriteFrame(-7, 17, 18, 39, 148, 437)269SpriteFrame(-8, 9, 19, 47, 167, 429)270SpriteFrame(-7, 9, 18, 47, 187, 429)271SpriteFrame(-11, -6, 22, 62, 207, 414)272SpriteFrame(-11, -6, 22, 62, 230, 414)273SpriteFrame(-11, -22, 22, 78, 253, 398)274SpriteFrame(-11, -23, 22, 79, 276, 397)275276SpriteFrame(-7, 40, 16, 16, 299, 460)277SpriteFrame(-7, 32, 16, 24, 316, 452)278SpriteFrame(-7, 32, 16, 24, 333, 452)279SpriteFrame(-8, 17, 17, 39, 350, 437)280SpriteFrame(-7, 17, 16, 39, 368, 437)281SpriteFrame(-8, 9, 17, 47, 385, 429)282SpriteFrame(-7, 9, 16, 47, 403, 429)283SpriteFrame(-11, -6, 22, 62, 420, 414)284SpriteFrame(-11, -6, 22, 62, 443, 414)285SpriteFrame(-11, -22, 22, 78, 466, 398)286SpriteFrame(-11, -23, 22, 79, 489, 397)287288AddEditorVariable("onTime")289SetActiveVariable("onTime")290AddEnumVariable("0 Frames", 0)291AddEnumVariable("32 Frames", 1)292AddEnumVariable("64 Frames", 2)293AddEnumVariable("96 Frames", 3)294AddEnumVariable("128 Frames", 4)295AddEnumVariable("160 Frames", 5)296AddEnumVariable("192 Frames", 6)297AddEnumVariable("224 Frames", 7)298AddEnumVariable("256 Frames", 8)299AddEnumVariable("288 Frames", 9)300AddEnumVariable("320 Frames", 10)301AddEnumVariable("352 Frames", 11)302AddEnumVariable("384 Frames", 12)303AddEnumVariable("416 Frames", 13)304AddEnumVariable("448 Frames", 14)305AddEnumVariable("480 Frames", 15)306307AddEditorVariable("offTime")308SetActiveVariable("offTime")309AddEnumVariable("0 Frames", 0)310AddEnumVariable("32 Frames", 1)311AddEnumVariable("64 Frames", 2)312AddEnumVariable("96 Frames", 3)313AddEnumVariable("128 Frames", 4)314AddEnumVariable("160 Frames", 5)315AddEnumVariable("192 Frames", 6)316AddEnumVariable("224 Frames", 7)317AddEnumVariable("256 Frames", 8)318AddEnumVariable("288 Frames", 9)319AddEnumVariable("320 Frames", 10)320AddEnumVariable("352 Frames", 11)321AddEnumVariable("384 Frames", 12)322AddEnumVariable("416 Frames", 13)323AddEnumVariable("448 Frames", 14)324AddEnumVariable("480 Frames", 15)325end event326327328