Path: blob/main/Scripts/Global/MSProjector.txt
1319 views
//---------------Sonic CD MS Projector Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer6#alias Object.Value1 : Object.Flicker7#alias Object.Value2 : Object.Angle8#alias Object.Value3 : Object.CurrentFrame9#alias Object.Value4 : Object.ProjectorSheet10#alias Object.Value5 : Object.AnimalSheet11#alias Object.Value6 : Object.Speed // "speed" as in angle increase, not as in movement speed or anything1213// States14#alias 0 : MSPROJECTOR_ANIM_115#alias 1 : MSPROJECTOR_ANIM_216#alias 2 : MSPROJECTOR_DESTROYED1718// Player19#alias 0 : PLAYER_SONIC_A2021// Gravity22#alias 1 : GRAVITY_AIR2324// Priority25#alias 1 : PRIORITY_ACTIVE2627// Global SFX28#alias 22 : SFX_G_EXPLOSION293031sub ObjectMain32switch Object.State33case MSPROJECTOR_ANIM_134Object.Timer++35if Object.Timer == 1636Object.Timer = 037Object.State = MSPROJECTOR_ANIM_238end if3940Object.Flicker = Object.Timer41Object.Flicker &= 34243Object.Frame++44if Object.Frame == 5645Object.Frame = 046end if47break4849case MSPROJECTOR_ANIM_250Object.Timer++51if Object.Timer == 1252Object.Timer = 053Object.State = MSPROJECTOR_ANIM_154end if5556Object.Flicker = Object.Timer57Object.Flicker %= 35859Object.Frame++60if Object.Frame == 5661Object.Frame = 062end if63break6465case MSPROJECTOR_DESTROYED66TempValue0 = Object.Timer67TempValue0 &= 368if TempValue0 == 069Rand(TempValue0, 32)70TempValue0 -= 1671TempValue0 <<= 1672TempValue0 += Object.XPos7374Rand(TempValue1, 32)75TempValue1 -= 1676TempValue1 <<= 1677TempValue1 += Object.YPos7879CreateTempObject(TypeName[Explosion], 0, TempValue0, TempValue1)80Object[TempObjectPos].DrawOrder = 481PlaySfx(SFX_G_EXPLOSION, false)82end if8384Object.Timer++85if Object.Timer == 6086ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, Object.XPos, Object.YPos)87end if88break8990end switch91end sub929394sub ObjectPlayerInteraction95if Object.State < MSPROJECTOR_DESTROYED96// if Player.Animation == ANI_JUMPING // Standalone original check97CheckEqual(Player.Animation, ANI_JUMPING)98TempValue0 = CheckResult99100#platform: Use_Origins101CheckEqual(Player.Animation, ANI_GLIDING)102TempValue0 |= CheckResult103if Stage.PlayerListPos == PLAYER_AMY104if Player.Animation == ANI_HAMMER_JUMP105TempValue0 = true106end if107if Player.Animation == ANI_HAMMER_DASH108TempValue0 = true109end if110end if111#endplatform112113if TempValue0 == true114#platform: Use_Standalone115PlayerObjectCollision(C_TOUCH, -13, -13, 13, 13)116#endplatform117#platform: Use_Origins118PlayerObjectCollision(C_ENEMY, -13, -13, 13, 13)119#endplatform120if CheckResult == true121Object.Timer = 0122MetalSonic_Destroyed = true123Object.Priority = PRIORITY_ACTIVE124Object.State = MSPROJECTOR_DESTROYED125MetalSonic_List++126127#platform: Use_Origins128if Stage.PlayerListPos == PLAYER_AMY129game.callbackParam0 = 0130game.callbackParam1 = 3131EngineCallback(NOTIFY_STATS_BREAK_OBJECT)132end if133#endplatform134// Saviour of the Planet Unlock Criteria135if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins136if Stage.DebugMode == false137if Good_Future_List > 16382 // 0b11111111111110138if MetalSonic_List > 11139SetAchievement(11, 100)140end if141end if142end if143end if144145#platform: Use_Haptics146HapticEffect(90, 0, 0, 0)147#endplatform148149end if150if Player.Gravity == GRAVITY_AIR151PlayerObjectCollision(C_BOX, -12, -12, 12, 12)152end if153else154PlayerObjectCollision(C_BOX, -12, -12, 12, 12)155end if156end if157end sub158159160sub ObjectDraw161Object.SpriteSheet = Object.ProjectorSheet162DrawSprite(0)163164if Object.State < MSPROJECTOR_DESTROYED165Object.CurrentFrame++166Object.CurrentFrame &= 31167TempValue2 = Object.CurrentFrame168TempValue2 >>= 4169TempValue2 += 7170171Object.Angle += Object.Speed172Object.Angle &= 511173Cos(TempValue0, Object.Angle)174Sin(TempValue1, Object.Angle)175if TempValue1 < 0176Object.Direction = FACING_RIGHT177else178Object.Direction = FACING_LEFT179end if180181TempValue0 <<= 12182TempValue1 <<= 11183184TempValue0 += Object.XPos185TempValue1 += Object.YPos186187TempValue0 -= 0x580000188TempValue1 -= 0x180000189190// Projector Particles191TempValue3 = Object.Timer192TempValue3 &= 1193if TempValue3 == 0194TempValue3 = Object.Timer195TempValue3 &= 3196TempValue3 >>= 1197TempValue3++198DrawSprite(TempValue3)199end if200201if Object.Flicker < 2202if Object.Speed == 8 // This is true for every animal except the TTZ Fishes203// Metal and stomped animal204if Object.Frame < 28205Object.SpriteSheet = Object.AnimalSheet206DrawSprite(5)207Object.SpriteSheet = Object.ProjectorSheet208DrawSprite(3)209else210Object.SpriteSheet = Object.AnimalSheet211DrawSprite(6)212Object.SpriteSheet = Object.ProjectorSheet213DrawSprite(4)214end if215216// Free animal217Object.SpriteSheet = Object.AnimalSheet218DrawSpriteFX(TempValue2, FX_FLIP, TempValue0, TempValue1)219else220// Metal221Object.SpriteSheet = Object.ProjectorSheet222if Object.Frame < 28223DrawSprite(3)224else225DrawSprite(4)226end if227228// Fishes229Object.SpriteSheet = Object.AnimalSheet230DrawSpriteFX(TempValue2, FX_FLIP, TempValue0, TempValue1)231TempValue4 = Object.Angle232TempValue4 += 320233TempValue4 &= 511234Cos(TempValue0, TempValue4)235Sin(TempValue1, TempValue4)236237if TempValue1 < 0238Object.Direction = FACING_RIGHT239else240Object.Direction = FACING_LEFT241end if242TempValue0 <<= 12243TempValue1 <<= 11244TempValue0 += Object.XPos245TempValue1 += Object.YPos246TempValue0 -= 0x600000247TempValue1 -= 0x180000248TempValue2 -= 2249DrawSpriteFX(TempValue2, FX_FLIP, TempValue0, TempValue1)250end if251end if252end if253end sub254255256sub ObjectStartup257LoadSpriteSheet("Global/Items3.gif")258TempValue0 = Object.SpriteSheet259260SpriteFrame(-12, -12, 24, 24, 150, 86) // #0 - Projector261SpriteFrame(-29, -10, 16, 8, 158, 111) // #1 - Projector Particles 1262SpriteFrame(-29, -10, 16, 8, 158, 120) // #2 - Projector Particles 2263SpriteFrame(-108, -28, 40, 40, 175, 136) // #3 - Metal Hologram Frame 0264SpriteFrame(-108, -28, 40, 40, 216, 136) // #4 - Metal Hologram Frame 1265266TempValue2 = Stage.ListPos267#platform: Use_Decomp268// Origins Plus uses a hacky engine edit to work around the Anniversary Mode layouts not properly loading SpriteFrames269// Rather than implement that in the decomp, let's just correct the stage pos here instead270if TempValue2 >= 70 // If past the regular layouts and in the Anniversary Mode ones271// R11A - R12D272if TempValue2 <= 77273TempValue2 -= 70274else275// R31A - R42D276if TempValue2 <= 95277TempValue2 -= 68278else279// R61A - R82D280if TempValue2 <= 133281TempValue2 -= 56282end if283end if284end if285end if286#endplatform287TempValue2 /= 10288switch TempValue2289case 0290case 3291TempValue3 = 8292SpriteFrame(-112, -3, 24, 16, 150, 52) // #5 - Ricky Frame 0293SpriteFrame(-112, -3, 24, 16, 150, 69) // #6 - Ricky Frame 1294SpriteFrame(-8, -8, 16, 16, 240, 199) // #7 - Flicky Frame 0295SpriteFrame(-8, -8, 16, 16, 240, 216) // #8 - Flicky Frame 1296break297298case 1299TempValue3 = 8300LoadSpriteSheet("R3/Objects3.gif")301SpriteFrame(-108, -11, 16, 24, 132, 35) // #5 - Pocky Frame 0302SpriteFrame(-112, -3, 24, 16, 149, 26) // #6 - Pocky Frame 1303SpriteFrame(-8, -8, 16, 16, 132, 1) // #7 - Canary Frame 0304SpriteFrame(-8, -8, 16, 16, 132, 18) // #8 - Canary Frame 1305break306307case 2308TempValue3 = 4309LoadSpriteSheet("R4/Objects3.gif")310SpriteFrame(-8, -12, 16, 24, 1, 92) // #5 - Green Fish Frame 0311SpriteFrame(-8, -12, 16, 24, 18, 92) // #6 - Green Fish Frame 1312SpriteFrame(-8, -12, 16, 24, 1, 67) // #7 - Red Fish Frame 0313SpriteFrame(-8, -12, 16, 24, 18, 67) // #8 - Red Fish Frame 1314break315316case 4317TempValue3 = 8318LoadSpriteSheet("R6/Objects3.gif")319SpriteFrame(-112, -3, 24, 16, 1, 201) // #5 - Pecky Frame 0320SpriteFrame(-112, -3, 24, 16, 26, 201) // #6 - Pecky Frame 1321SpriteFrame(-12, -8, 24, 16, 1, 218) // #7 - Swallow Frame 0322SpriteFrame(-12, -8, 24, 16, 26, 218) // #8 - Swallow Frame 1323break324325case 5326TempValue3 = 8327LoadSpriteSheet("R7/Objects3.gif")328SpriteFrame(-108, -11, 16, 24, 1, 192) // #5 - Pocky Frame 0329SpriteFrame(-112, -3, 24, 16, 18, 158) // #6 - Pocky Frame 1330SpriteFrame(-8, -8, 16, 16, 1, 158) // #7 - Canary Frame 0331SpriteFrame(-8, -8, 16, 16, 1, 175) // #8 - Canary Frame 1332break333334case 6335TempValue3 = 8336LoadSpriteSheet("R8/Objects2.gif")337SpriteFrame(-112, -3, 24, 16, 1, 234) // #5 - Sheep Frame 0338SpriteFrame(-112, -3, 24, 16, 26, 234) // #6 - Sheep Frame 1339SpriteFrame(-8, -8, 16, 16, 143, 110) // #7 - Dove Frame 0340SpriteFrame(-8, -8, 16, 16, 143, 127) // #8 - Dove Frame 1341break342343end switch344TempValue1 = Object.SpriteSheet345346ArrayPos0 = 32347while ArrayPos0 < 1056348if Object[ArrayPos0].Type == TypeName[MSProjector]349Object[ArrayPos0].ProjectorSheet = TempValue0350Object[ArrayPos0].AnimalSheet = TempValue1351Object[ArrayPos0].Speed = TempValue3352if MetalSonic_Destroyed == true353Object[ArrayPos0].Type = TypeName[Blank Object]354end if355end if356ArrayPos0++357loop358end sub359360361// ========================362// Editor Subs363// ========================364365sub RSDKDraw366DrawSprite(0)367DrawSprite(1)368DrawSprite(3)369end sub370371372sub RSDKLoad373LoadSpriteSheet("Global/Items3.gif")374SpriteFrame(-12, -12, 24, 24, 150, 86) // #0 - Projector375SpriteFrame(-29, -10, 16, 8, 158, 111) // #1 - Projector Particles 1376SpriteFrame(-29, -10, 16, 8, 158, 120) // #2 - Projector Particles 2377SpriteFrame(-108, -28, 40, 40, 175, 136) // #3 - Metal Hologram Frame 0378SpriteFrame(-108, -28, 40, 40, 216, 136) // #4 - Metal Hologram Frame 1379380SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")381end sub382383384