Path: blob/main/Scripts/R3/Bumper.txt
1319 views
//-------------------Sonic CD Bumper Script-------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.FrameTimer6#alias Object.Value1 : Object.BonusScore7#alias Object.Value2 : Object.Oscillation8#alias Object.Value3 : Object.TurnDirection9#alias Object.Value4 : Object.XOriginPos10#alias Object.Value5 : Object.YOriginPos1112// R3Setup Aliases13#alias Object[29].Value2 : R3Setup.BumperOscillation1415// States16#alias 0 : BUMPER_IDLE17#alias 1 : BUMPER_ACTIVE1819// Gravity20#alias 0 : GRAVITY_GROUND21#alias 1 : GRAVITY_AIR2223// Stage SFX24#alias 0 : SFX_S_BUMPER2526// Priority27#alias 0 : PRIORITY_BOUNDS28#alias 1 : PRIORITY_ACTIVE2930// Property Values31// _G properties use R3Setup oscillation32#alias 0 : BUMPER_STATIC33#alias 1 : BUMPER_RIGHT_TO_LEFT_G34#alias 2 : BUMPER_LEFT_TO_RIGHT_G35#alias 3 : BUMPER_TOP_TO_BOTTOM36#alias 4 : BUMPER_BOTTOM_TO_TOP37#alias 5 : BUMPER_TOP_TO_BOTTOM_G38#alias 6 : BUMPER_BOTTOM_TO_TOP_G394041sub ObjectMain42switch Object.PropertyValue43case BUMPER_RIGHT_TO_LEFT_G44Object.XPos = Object.XOriginPos45Object.XPos += R3Setup.BumperOscillation46break4748case BUMPER_LEFT_TO_RIGHT_G49Object.XPos = Object.XOriginPos50Object.XPos -= R3Setup.BumperOscillation51break5253case BUMPER_TOP_TO_BOTTOM54if Object.TurnDirection == false5556if Object.Oscillation < 0x38000057Object.Oscillation += 0x1000058else59Object.TurnDirection = true60end if6162else6364if Object.Oscillation > -0x38000065Object.Oscillation -= 0x1000066else67Object.TurnDirection = false68end if6970end if71Object.YPos = Object.YOriginPos72Object.YPos += Object.Oscillation73break7475case BUMPER_BOTTOM_TO_TOP76if Object.TurnDirection == false7778if Object.Oscillation < 0x38000079Object.Oscillation += 0x1000080else81Object.TurnDirection = true82end if8384else8586if Object.Oscillation > -0x38000087Object.Oscillation -= 0x1000088else89Object.TurnDirection = false90end if9192end if93Object.YPos = Object.YOriginPos94Object.YPos -= Object.Oscillation95break9697case BUMPER_TOP_TO_BOTTOM_G98Object.YPos = Object.YOriginPos99Object.YPos += R3Setup.BumperOscillation100break101102case BUMPER_BOTTOM_TO_TOP_G103Object.YPos = Object.YOriginPos104Object.YPos -= R3Setup.BumperOscillation105break106107end switch108109if Object.State > 0110Object.Frame = Object.FrameTimer111Object.Frame /= 5112Object.Frame++113114Object.FrameTimer++115if Object.FrameTimer > 22116Object.FrameTimer = 0117Object.State = BUMPER_IDLE118Object.Frame = 0119end if120121end if122123if Object.OutOfBounds == true124Object.BonusScore = 0125Object.Priority = PRIORITY_BOUNDS126end if127end sub128129130sub ObjectPlayerInteraction131if Player.Animation != ANI_HURT132PlayerObjectCollision(C_TOUCH, -14, -14, 14, 14)133if CheckResult == true134#platform: Use_Origins135if Player.Animation == ANI_CLIMBING136// Before bouncing him away, let's make sure Knuckles is in his normal air state, first137CallFunction(Player_CancelClimb)138end if139#endplatform140if Object.State == BUMPER_IDLE141PlayStageSfx(SFX_S_BUMPER, false)142143#platform: Use_Haptics144HapticEffect(9, 0, 0, 0)145#endplatform146147if Object.BonusScore < 5148CreateTempObject(TypeName[Object Score], 0, Object.XPos, Object.YPos)149Player.Score += 100150Object.BonusScore++151end if152end if153154if Object.FrameTimer > 5155PlayStageSfx(SFX_S_BUMPER, false)156end if157158Object.State = BUMPER_ACTIVE159160Object.Priority = PRIORITY_ACTIVE161162TempValue0 = Player.XPos163TempValue0 -= Object.XPos164165TempValue1 = Player.YPos166TempValue1 -= Object.YPos167168ATan2(TempValue2, TempValue0, TempValue1)169Cos256(TempValue0, TempValue2)170Sin256(TempValue1, TempValue2)171172if Player.State == Player_State_Fly173TempValue0 <<= 10174TempValue1 <<= 10175else176TempValue0 *= 0x700177TempValue1 *= 0x700178Player.Timer = 0179end if180181Player.XVelocity = TempValue0182Player.YVelocity = TempValue1183184Player.Speed = Player.XVelocity185186Player.Gravity = GRAVITY_AIR187end if188end if189end sub190191192sub ObjectDraw193DrawSprite(Object.Frame)194end sub195196197sub ObjectStartup198LoadSpriteSheet("R3/Objects.gif")199200SpriteFrame(-16, -16, 32, 32, 67, 167) // #0 - Bumper201SpriteFrame(-12, -12, 24, 24, 206, 170) // #1 - Bumper Hit Frame 0202SpriteFrame(-20, -20, 40, 40, 215, 203) // #2 - Bumper Hit Frame 1203SpriteFrame(-12, -12, 24, 24, 206, 170) // #3 - Bumper Hit Frame 2204SpriteFrame(-20, -20, 40, 40, 215, 203) // #4 - Bumper Hit Frame 3205SpriteFrame(-20, -20, 40, 40, 215, 203) // #5 - Bumper Hit Frame 4206207// Used to be below LoadSpriteSheet, moved here for consistency208ArrayPos0 = 32209while ArrayPos0 < 1056210if Object[ArrayPos0].Type == TypeName[Bumper]211Object[ArrayPos0].XOriginPos = Object[ArrayPos0].XPos212Object[ArrayPos0].YOriginPos = Object[ArrayPos0].YPos213end if214ArrayPos0++215loop216end sub217218219// ========================220// Editor Subs221// ========================222223sub RSDKEdit224if Editor.ReturnVariable == true225switch Editor.VariableID226case EDIT_VAR_PROPVAL // Property Value227CheckResult = Object.PropertyValue228break229case 0 // pattern230CheckResult = Object.PropertyValue231break232end switch233else234switch Editor.VariableID235case EDIT_VAR_PROPVAL // Property Value236Object.PropertyValue = Editor.VariableValue237break238case 0 // pattern239Object.PropertyValue = Editor.VariableValue240break241end switch242end if243end sub244245246sub RSDKDraw247DrawSprite(0)248switch Object.PropertyValue249case 1250TempValue0 = Object.XPos251TempValue0 -= 0x300000252TempValue1 = Object.XPos253TempValue1 += 0x300000254TempValue2 = Object.YPos255TempValue2 -= 0x100000256257if Editor.ShowGizmos == true258Editor.DrawingOverlay = true259DrawRectOutline(TempValue0, TempValue2, 0x60, 32, 255, 255, 0, 255)260DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, 255, 255, 0)261Editor.DrawingOverlay = false262end if263DrawArrow(Object.XPos, Object.YPos, TempValue1, Object.YPos, 255, 128, 0, 0)264break265case 2266TempValue0 = Object.XPos267TempValue0 += 0x300000268TempValue1 = Object.XPos269TempValue1 -= 0x300000270TempValue2 = Object.YPos271TempValue2 -= 0x100000272273if Editor.ShowGizmos == true274Editor.DrawingOverlay = true275DrawRectOutline(TempValue0, TempValue2, -0x60, 32, 255, 255, 0, 255)276DrawArrow(Object.XPos, Object.YPos, TempValue0, Object.YPos, 255, 255, 255, 0)277Editor.DrawingOverlay = false278end if279280DrawArrow(Object.XPos, Object.YPos, TempValue1, Object.YPos, 255, 128, 0, 0)281break282case 3283TempValue0 = Object.XPos284TempValue0 -= 0x100000285TempValue1 = Object.YPos286TempValue1 -= 0x380000287TempValue2 = Object.YPos288TempValue2 += 0x380000289290if Editor.ShowGizmos == true291Editor.DrawingOverlay = true292DrawRectOutline(TempValue0, TempValue1, 32, 0x70, 255, 255, 0, 255)293DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue1, 255, 255, 255, 0)294Editor.DrawingOverlay = false295end if296297DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue2, 255, 128, 0, 0)298break299case 5300TempValue0 = Object.XPos301TempValue0 -= 0x100000302TempValue1 = Object.YPos303TempValue1 -= 0x300000304TempValue2 = Object.YPos305TempValue2 += 0x300000306307if Editor.ShowGizmos == true308Editor.DrawingOverlay = true309DrawRectOutline(TempValue0, TempValue1, 32, 0x60, 255, 255, 0, 255)310DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue1, 255, 255, 255, 0)311Editor.DrawingOverlay = false312end if313314DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue2, 255, 128, 0, 0)315break316317case 4318TempValue0 = Object.XPos319TempValue0 -= 0x100000320TempValue1 = Object.YPos321TempValue1 += 0x380000322TempValue2 = Object.YPos323TempValue2 -= 0x380000324325if Editor.ShowGizmos == true326Editor.DrawingOverlay = true327DrawRectOutline(TempValue0, TempValue1, 32, -0x70, 255, 255, 0, 255)328DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue1, 255, 255, 255, 0)329Editor.DrawingOverlay = false330end if331DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue2, 255, 128, 0, 0)332break333case 6334TempValue0 = Object.XPos335TempValue0 -= 0x100000336TempValue1 = Object.YPos337TempValue1 += 0x300000338TempValue2 = Object.YPos339TempValue2 -= 0x300000340341if Editor.ShowGizmos == true342Editor.DrawingOverlay = true343DrawRectOutline(TempValue0, TempValue1, 32, -0x60, 255, 255, 0, 255)344DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue1, 255, 255, 255, 0)345Editor.DrawingOverlay = false346end if347DrawArrow(Object.XPos, Object.YPos, Object.XPos, TempValue2, 255, 128, 0, 0)348break349end switch350end sub351352353sub RSDKLoad354LoadSpriteSheet("R3/Objects.gif")355356SpriteFrame(-16, -16, 32, 32, 67, 167) // #0 - Bumper357358AddEditorVariable("Pattern")359SetActiveVariable("Pattern")360AddEnumVariable("Static", BUMPER_STATIC)361AddEnumVariable("Right to Left (Global Sync)", BUMPER_RIGHT_TO_LEFT_G)362AddEnumVariable("Left to Right (Global Sync)", BUMPER_LEFT_TO_RIGHT_G)363AddEnumVariable("Top to Bottom", BUMPER_TOP_TO_BOTTOM)364AddEnumVariable("Bottom to Top", BUMPER_BOTTOM_TO_TOP)365AddEnumVariable("Top to Bottom (Global Sync)", BUMPER_TOP_TO_BOTTOM_G)366AddEnumVariable("Bottom to Top (Global Sync)", BUMPER_BOTTOM_TO_TOP_G)367end sub368369370