Path: blob/main/Scripts/R7/Lightning.txt
1319 views
//-----------------Sonic CD Lightning 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.Flash78// Note - Object.Alpha is used for the actual lightning sprites, while Object.Flash is used for the screen-wide lightning flash910// States11#alias 0 : LIGHTNING_WAIT12#alias 1 : LIGHTNING_FALL1314// Priority15#alias 1 : PRIORITY_ACTIVE1617// Ink Effects18#alias 2 : INK_ALPHA192021sub ObjectMain22switch Object.State23case LIGHTNING_WAIT24if Object.Timer < 25625Object.Timer++26else27Object.Timer = 028Object.Alpha = 25429Object.Flash = 12830Object.State++31end if32break3334case LIGHTNING_FALL35if Object.Alpha > 036Object.Alpha -= 237else38Object.State = LIGHTNING_WAIT39Object.Frame++40Object.Frame &= 341end if4243if Object.Flash > 044Object.Flash -= 445end if46break4748end switch4950end sub515253sub ObjectDraw54if Object.State > LIGHTNING_WAIT55if Object.DrawOrder == 156// In this Draw Order, we're in the BG5758Object.YPos = Screen.YOffset59Object.YPos *= Object.PropertyValue60Object.YPos >>= 761FlipSign(Object.YPos)62Object.YPos += 3126364TempValue0 = Object.Flash65TempValue0 >>= 166DrawRect(0, 0, Screen.XSize, Screen.YSize, 224, 192, 128, TempValue0)6768TempValue0 = Screen.XOffset69TempValue0 >>= 370TempValue0 &= 51171FlipSign(TempValue0)7273TempValue1 = Object.Frame74TempValue0 += 6475if TempValue0 < -6476TempValue0 += 51277DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)78TempValue0 -= 51279else80DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)81end if8283TempValue1++84TempValue1 &= 385TempValue0 += 12886if TempValue0 < -6487TempValue0 += 51288DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)89TempValue0 -= 51290else91DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)92end if9394TempValue1++95TempValue1 &= 396TempValue0 += 12897if TempValue0 < -6498TempValue0 += 51299DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)100TempValue0 -= 512101else102DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)103end if104105TempValue1++106TempValue1 &= 3107TempValue0 += 96108if TempValue0 < -64109TempValue0 += 512110DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)111TempValue0 -= 512112else113DrawSpriteScreenFX(TempValue1, FX_INK, TempValue0, Object.YPos)114end if115116// For the flash, add this Object to a higher draw list117SetDrawListEntityRef(Object.EntityNo, 5, Screen.DrawListSize[5])118Screen[5].DrawListSize++119Object.DrawOrder = 5120else121// On this Draw Order, we're between the game objects and the HUD122123DrawRect(0, 0, Screen.XSize, Screen.YSize, 224, 224, 192, Object.Flash)124Object.DrawOrder = 1125end if126end if127128end sub129130131sub ObjectStartup132133LoadSpriteSheet("R7/Objects3.gif")134135// Lightning Frames136SpriteFrame(-8, 0, 16, 40, 43, 140)137SpriteFrame(-8, 0, 16, 24, 60, 140)138SpriteFrame(-16, 0, 32, 40, 77, 132)139SpriteFrame(-8, 0, 16, 24, 60, 140)140141// Go through the level to find and setup the Lightning object142ArrayPos0 = 32143while ArrayPos0 < 1056144if Object[ArrayPos0].Type == TypeName[Lightning]145146// Lightning never stops, make it always active147// (In terms of the actual object layout, normally this object is far out of bounds!)148Object[ArrayPos0].Priority = PRIORITY_ACTIVE149150// The lightning should be in the BG, so give it a low draw order151Object[ArrayPos0].DrawOrder = 1152153// Lightning flashes and pulses, so give it the INK_ALPHA effect154Object[ArrayPos0].InkEffect = INK_ALPHA155156end if157158ArrayPos0++159loop160161end sub162163164// ========================165// Editor Subs166// ========================167168sub RSDKDraw169DrawSprite(0)170end sub171172173sub RSDKLoad174LoadSpriteSheet("R7/Objects3.gif")175SpriteFrame(-16, 0, 32, 40, 77, 132)176177SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")178end sub179180181