Path: blob/main/Scripts/R3/Flipper.txt
1319 views
//------------------Sonic CD Flipper Script-------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer67// States8#alias 0 : FLIPPER_IDLE9#alias 1 : FLIPPER_ACTIVE10#alias 2 : FLIPPER_RETURN_POSITION1112// Collision13#alias 1 : PLAYER_COL_FLOOR1415// Collision Mode16#alias 0 : CMODE_FLOOR1718#alias 0 : GRAVITY_GROUND1920// Global SFX21#alias 0 : SFX_G_JUMP2223// Stage SFX24#alias 7 : SFX_S_FLIPPER252627sub ObjectMain28switch Object.State29case FLIPPER_ACTIVE30Object.Frame = Object.Timer31Object.Frame >>= 13233Object.Timer++34if Object.Timer > 335Object.Timer = 636Object.State = FLIPPER_RETURN_POSITION37end if38break3940case FLIPPER_RETURN_POSITION41Object.Frame = Object.Timer42Object.Frame /= 34344Object.Timer++45if Object.Timer > 1246Object.Timer = 047Object.Frame = 048Object.State = FLIPPER_IDLE49end if50break5152end switch53end sub545556sub ObjectPlayerInteraction57TempValue0 = 058if Object.Direction == FACING_RIGHT59if Player.YPos > Object.YPos60if Player.YVelocity < 061PlayerObjectCollision(C_BOX, -32, -12, 28, 12)62end if63end if64#platform: Use_Origins65PlayerObjectCollision(C_PLATFORM, 15, -16, 32, 16)66#endplatform6768#platform:Use_Standalone69PlayerObjectCollision(C_PLATFORM, 20, -16, 32, 16)70#endplatform71TempValue0 = CheckResult7273TempValue1 = Player.XPos74TempValue1 -= Object.XPos75TempValue1 >>= 1676TempValue1 += 3277TempValue1 += Player.CollisionRight7879if TempValue1 >= 080if TempValue1 < 5481TempValue2 = TempValue182TempValue2 /= -283TempValue2 += 1084PlayerObjectCollision(C_PLATFORM, -32, TempValue2, 32, 16)85TempValue0 |= CheckResult86end if87end if8889if TempValue0 == PLAYER_COL_FLOOR90Player.CollisionMode = CMODE_FLOOR9192Player.YPos += 0x4000093Player.XPos -= 0x100009495if Player.Speed < 0x400096if Player.Speed > -0x400097Player.Speed = -0x400098end if99end if100#platform: Use_Origins101if Stage.PlayerListPos == PLAYER_KNUCKLES102if Player.Animation == ANI_GLIDING_STOP103Player.State = Player_State_Roll104Player.Animation = ANI_JUMPING105106Player.Gravity = GRAVITY_GROUND107Player.Speed = 0x4000108end if109end if110#endplatform111else112PlayerObjectCollision(C_TOUCH, -32, -24, 32, 16)113if CheckResult == true114if Player.YVelocity < -0x40000115if Player.JumpPress == true116Player.Speed = Player.XPos117Player.Speed -= Object.XPos118Player.Speed >>= 2119120Player.YVelocity = -0xE0000121TempValue2 = Player.Speed122TempValue2 >>= 2123if TempValue2 < 0124Player.YVelocity += TempValue2125else126Player.YVelocity -= TempValue2127end if128Object.State = FLIPPER_ACTIVE129StopSfx(SFX_G_JUMP)130PlayStageSfx(SFX_S_FLIPPER, false)131132#platform: Use_Haptics133HapticEffect(88, 0, 0, 0)134#endplatform135end if136end if137end if138end if139140else141if Player.YPos > Object.YPos142if Player.YVelocity < 0143PlayerObjectCollision(C_BOX, -28, -12, 32, 12)144end if145end if146147#platform: Use_Origins148PlayerObjectCollision(C_PLATFORM, -32, -16, -15, 16)149#endplatform150151#platform:Use_Standalone152PlayerObjectCollision(C_PLATFORM, -32, -16, -20, 16)153#endplatform154TempValue0 = CheckResult155156TempValue1 = Player.XPos157TempValue1 -= Object.XPos158TempValue1 >>= 16159TempValue1 += 32160TempValue1 += Player.CollisionLeft161if TempValue1 >= 12162if TempValue1 < 64163TempValue2 = TempValue1164TempValue2 /= 2165TempValue2 -= 21166PlayerObjectCollision(C_PLATFORM, -32, TempValue2, 32, 16)167TempValue0 |= CheckResult168end if169end if170171if TempValue0 == PLAYER_COL_FLOOR172Player.CollisionMode = CMODE_FLOOR173Player.YPos += 0x40000174Player.XPos += 0x10000175if Player.Speed > -0x4000176if Player.Speed < 0x4000177Player.Speed = 0x4000178end if179end if180181#platform: Use_Origins182if Stage.PlayerListPos == PLAYER_KNUCKLES183if Player.Animation == ANI_GLIDING_STOP184Player.State = Player_State_Roll185Player.Animation = ANI_JUMPING186187Player.Gravity = GRAVITY_GROUND188Player.Speed = 0x4000189end if190end if191#endplatform192else193PlayerObjectCollision(C_TOUCH, -32, -24, 32, 16)194if CheckResult == true195if Player.YVelocity < -0x40000196if Player.JumpPress == true197Player.Speed = Player.XPos198Player.Speed -= Object.XPos199Player.Speed >>= 2200201Player.YVelocity = -0xE0000202203TempValue2 = Player.Speed204TempValue2 >>= 2205if TempValue2 < 0206Player.YVelocity += TempValue2207else208Player.YVelocity -= TempValue2209end if210211Object.State = FLIPPER_ACTIVE212213StopSfx(SFX_G_JUMP)214PlayStageSfx(SFX_S_FLIPPER, false)215end if216end if217end if218end if219end if220end sub221222223sub ObjectDraw224DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)225end sub226227228sub ObjectStartup229LoadSpriteSheet("R3/Objects.gif")230231SpriteFrame(-32, -12, 64, 32, 100, 167) // #0 - Flipper idle232SpriteFrame(-32, -12, 64, 24, 67, 200) // #1 - Flipper active frame 0233SpriteFrame(-32, -20, 64, 32, 132, 200) // #2 - Flipper active frame 1234SpriteFrame(-32, -12, 64, 24, 67, 200) // #3 - Flipper active frame 2235236// Used to be below LoadSpriteSheet, moved here for consistency237ArrayPos0 = 32238while ArrayPos0 < 1056239if Object[ArrayPos0].Type == TypeName[Flipper]240Object[ArrayPos0].Direction = Object[ArrayPos0].PropertyValue241Object[ArrayPos0].DrawOrder = 4242end if243ArrayPos0++244loop245end sub246247248// ========================249// Editor Subs250// ========================251252sub RSDKEdit253if Editor.ReturnVariable == true254switch Editor.VariableID255case EDIT_VAR_PROPVAL // Property Value256CheckResult = Object.PropertyValue257CheckResult &= 1258break259case 0 // condition260CheckResult = Object.PropertyValue261CheckResult &= 1262break263end switch264else265switch Editor.VariableID266case EDIT_VAR_PROPVAL // Property Value267Object.PropertyValue = Editor.VariableValue268Object.PropertyValue &= 1269break270case 0 // condition271Object.PropertyValue = Editor.VariableValue272Object.PropertyValue &= 1273break274end switch275end if276end sub277278279sub RSDKDraw280Object.Direction = Object.PropertyValue281DrawSpriteFX(0, FX_FLIP, Object.XPos, Object.YPos)282end sub283284285sub RSDKLoad286LoadSpriteSheet("R3/Objects.gif")287288SpriteFrame(-32, -12, 64, 32, 100, 167) // #0 - Flipper idle289290AddEditorVariable("direction")291SetActiveVariable("direction")292AddEnumVariable("Facing Left", 0)293AddEnumVariable("Facing Right", 1)294end sub295296297