Path: blob/main/Scripts/R6/R6DSetup.txt
1319 views
//-----------------Sonic CD R6 D Setup 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.PaletteBank7#alias Object.Value2 : Object.AlarmTimer8#alias Object.Value3 : Object.AlarmTile9#alias Object.Value4 : Object.LightTile10#alias Object.Value5 : Object.ElectricTile11#alias Object.Value6 : Object.BounceFloorAnim12#alias Object.Value7 : Object.BounceFloorTile13#alias Object.Scale : Object.BounceFloorFlag14#alias Object.Direction : Object.WebDirection1516// Player Aliases17#alias Player.Value4 : Player.InvincibleTimer1819// States20#alias 0 : R6D_SETUP_PREPARE_CHARGE21#alias 1 : R6D_SETUP_WEB_CHARGE22#alias 2 : R6D_SETUP_WEB_SHOCK2324// Web Directions25#alias 0 : VERTICAL_WEB26#alias 1 : HORIZONTAL_WEB27#alias 2 : DIAGONAL_WEB2829// Gravity30#alias 1 : GRAVITY_AIR3132// Stage SFX33#alias 0 : SFX_S_BOUNCEFLOOR34#alias 1 : SFX_S_ELECTRICITY35#alias 2 : SFX_S_CATCH3637// Priority38#alias 1 : PRIORITY_ACTIVE3940// Tile Info41#alias 8 : TILEINFO_ANGLEB424344sub ObjectMain45switch Object.State46case R6D_SETUP_PREPARE_CHARGE47if Object.Timer < 24048Object.Timer++49else50PlayStageSfx(SFX_S_ELECTRICITY, false)51Object.Timer = 052Object.State = R6D_SETUP_WEB_CHARGE53end if54break5556case R6D_SETUP_WEB_CHARGE57if Object.Timer < 9058Object.Timer++59Object.Frame++60Object.Frame &= 161else62Object.Timer = 063Object.Frame = 264Object.State = R6D_SETUP_WEB_SHOCK65end if66break6768case R6D_SETUP_WEB_SHOCK69if Object.Timer < 12070Object.Timer++71Object.Frame++72if Object.Frame == 973Object.Frame = 274end if75else76Object.Timer = 077Object.Frame = 078Object.State = R6D_SETUP_PREPARE_CHARGE79Object.WebDirection++80Object.WebDirection %= 381end if82break83end switch8485switch Object.AlarmTile86case 087if Object.AlarmTimer < 1588Object.AlarmTimer++89else90Copy16x16Tile(646, 841)91Copy16x16Tile(809, 841)92Object.AlarmTimer = 093Object.AlarmTile++94end if95break96case 197if Object.AlarmTimer < 498Object.AlarmTimer++99else100Copy16x16Tile(646, 842)101Copy16x16Tile(809, 842)102Object.AlarmTimer = 0103Object.AlarmTile++104end if105break106case 2107if Object.AlarmTimer < 9108Object.AlarmTimer++109else110Copy16x16Tile(646, 843)111Copy16x16Tile(809, 843)112Object.AlarmTimer = 0113Object.AlarmTile++114end if115break116case 3117if Object.AlarmTimer < 4118Object.AlarmTimer++119else120Copy16x16Tile(646, 840)121Copy16x16Tile(809, 840)122Object.AlarmTimer = 0123Object.AlarmTile = 0124end if125break126end switch127128TempValue0 = Object.LightTile129TempValue0 &= 1130if TempValue0 == 0131TempValue0 = Object.LightTile132TempValue0 >>= 1133TempValue0 += 844134Copy16x16Tile(647, TempValue0)135end if136Object.LightTile++137Object.LightTile %= 24138139TempValue0 = Object.ElectricTile140TempValue0 %= 5141if TempValue0 == 0142TempValue0 = Object.ElectricTile143TempValue0 /= 5144TempValue0 += 856145Copy16x16Tile(648, TempValue0)146TempValue0 += 3147Copy16x16Tile(649, TempValue0)148end if149Object.ElectricTile++150Object.ElectricTile %= 15151152TempValue0 = Object.BounceFloorAnim153TempValue0 &= 1154if TempValue0 == 0155TempValue0 = Object.BounceFloorTile156TempValue0 += 862157Object.BounceFloorTile++158Object.BounceFloorTile %= 6159Copy16x16Tile(543, TempValue0)160end if161Object.BounceFloorAnim++162Object.BounceFloorAnim &= 511163164Object.BounceFloorFlag = true165166TempValue0 = Object.PaletteBank167TempValue0 >>= 1168SetActivePalette(TempValue0, 0, 240)169Object.PaletteBank++170Object.PaletteBank %= 6171end sub172173174sub ObjectPlayerInteraction175TempValue2 = Player.XPos176TempValue2 >>= 16177TempValue2 += Player.CollisionRight178TempValue3 = Player.YPos179TempValue3 >>= 16180TempValue3 += Player.CollisionBottom181TempValue3 += 2182Get16x16TileInfo(TempValue0, TempValue2, TempValue3, TILEINFO_ANGLEB)183184TempValue2 = Player.XPos185TempValue2 >>= 16186TempValue2 += Player.CollisionLeft187Get16x16TileInfo(TempValue1, TempValue2, TempValue3, TILEINFO_ANGLEB)188// Bug Details:189// Sonic Team updated the normal bounce floor (which is R6BounceFloor in Origins for the Past and Present)190// to prevent Knuckles from disabling his collisions when climbing onto the floor (they knew about this bug)191// However, they didn't update it here and in R6CSetup.192TempValue0 |= TempValue1193if TempValue0 == 1194if Object.BounceFloorFlag == true195if Player.YVelocity > -1196Player.Animation = ANI_JUMPING197Player.Gravity = GRAVITY_AIR198Player.Timer = 0199Player.YVelocity = -0x160000200201#platform: Use_Origins202Player.State = Player_State_Air_NoDropDash203#endplatform204#platform: Use_Standalone205Player.State = Player_State_Air206#endplatform207208PlayStageSfx(SFX_S_BOUNCEFLOOR, false)209210#platform: Use_Haptics211HapticEffect(60, 0, 0, 0)212#endplatform213214end if215end if216end if217218TempValue2 -= Player.CollisionLeft219TempValue3 -= Player.CollisionBottom220TempValue3 -= 2221Get16x16TileInfo(TempValue0, TempValue2, TempValue3, TILEINFO_ANGLEB)222switch TempValue0223case 2224if Player.InvincibleTimer == 0225Player.State = Player_State_GotHit226if Player.Direction == FACING_LEFT227Player.Speed = 0x20000228else229Player.Speed = -0x20000230end if231end if232break233234case 5235if Object.State == R6D_SETUP_WEB_SHOCK236if Player.InvincibleTimer == 0237Player.State = Player_State_GotHit238if Player.Direction == FACING_LEFT239Player.Speed = 0x20000240else241Player.Speed = -0x20000242end if243end if244end if245break246247case 6248if Object.State == R6D_SETUP_WEB_SHOCK249if Object.WebDirection == VERTICAL_WEB250if Player.InvincibleTimer == 0251Player.State = Player_State_GotHit252if Player.Direction == FACING_LEFT253Player.Speed = 0x20000254else255Player.Speed = -0x20000256end if257end if258end if259end if260break261262case 7263if Object.State == R6D_SETUP_WEB_SHOCK264if Object.WebDirection == HORIZONTAL_WEB265if Player.InvincibleTimer == 0266Player.State = Player_State_GotHit267if Player.Direction == FACING_LEFT268Player.Speed = 0x20000269else270Player.Speed = -0x20000271end if272end if273end if274end if275break276277case 8278if Object.State == R6D_SETUP_WEB_SHOCK279if Object.WebDirection == DIAGONAL_WEB280if Player.InvincibleTimer == 0281Player.State = Player_State_GotHit282if Player.Direction == FACING_LEFT283Player.Speed = 0x20000284else285Player.Speed = -0x20000286end if287end if288end if289end if290break291end switch292293TempValue3 -= 4294Get16x16TileInfo(TempValue0, TempValue2, TempValue3, TILEINFO_ANGLEB)295switch TempValue0296case 2297if Player.InvincibleTimer == 0298Player.State = Player_State_GotHit299if Player.Direction == FACING_LEFT300Player.Speed = 0x20000301else302Player.Speed = -0x20000303end if304end if305break306307case 5308if Object.State == R6D_SETUP_WEB_SHOCK309if Player.InvincibleTimer == 0310Player.State = Player_State_GotHit311if Player.Direction == FACING_LEFT312Player.Speed = 0x20000313else314Player.Speed = -0x20000315end if316end if317end if318break319320case 6321if Object.State == R6D_SETUP_WEB_SHOCK322if Object.WebDirection == VERTICAL_WEB323if Player.InvincibleTimer == 0324Player.State = Player_State_GotHit325if Player.Direction == FACING_LEFT326Player.Speed = 0x20000327else328Player.Speed = -0x20000329end if330end if331end if332end if333break334335case 7336if Object.State == R6D_SETUP_WEB_SHOCK337if Object.WebDirection == HORIZONTAL_WEB338if Player.InvincibleTimer == 0339Player.State = Player_State_GotHit340if Player.Direction == FACING_LEFT341Player.Speed = 0x20000342else343Player.Speed = -0x20000344end if345end if346end if347end if348break349350case 8351if Object.State == R6D_SETUP_WEB_SHOCK352if Object.WebDirection == DIAGONAL_WEB353if Player.InvincibleTimer == 0354Player.State = Player_State_GotHit355if Player.Direction == FACING_LEFT356Player.Speed = 0x20000357else358Player.Speed = -0x20000359end if360end if361end if362end if363break364end switch365366TempValue3 += 4367TempValue3 += Player.CollisionTop368Get16x16TileInfo(TempValue0, TempValue2, TempValue3, TILEINFO_ANGLEB)369if TempValue0 == 3370TempValue4 = TempValue3371TempValue4 &= 15372if TempValue4 < 8373if Player.State != Player_State_HangBar374Player.State = Player_State_HangBar375Player.YVelocity = 0376Player.Animation = ANI_HANGING377TempValue3 &= 0x7FF0378TempValue3 += 4379TempValue3 -= Player.CollisionTop380Player.iYPos = TempValue3381PlayStageSfx(SFX_S_CATCH, false)382Screen.AdjustCameraY = 0383end if384end if385end if386end sub387388389sub ObjectDraw390if Object.State == R6D_SETUP_WEB_SHOCK391switch Object.Frame392case 2393DrawRect(0, 0, Screen.XSize, Screen.YSize, 128, 0, 64, 64)394break395case 3396DrawRect(0, 0, Screen.XSize, Screen.YSize, 128, 0, 64, 32)397break398case 4399DrawRect(0, 0, Screen.XSize, Screen.YSize, 255, 128, 255, 32)400break401case 5402DrawRect(0, 0, Screen.XSize, Screen.YSize, 128, 0, 64, 64)403break404case 6405DrawRect(0, 0, Screen.XSize, Screen.YSize, 128, 0, 64, 32)406break407case 7408DrawRect(0, 0, Screen.XSize, Screen.YSize, 255, 128, 255, 32)409break410case 8411DrawRect(0, 0, Screen.XSize, Screen.YSize, 128, 0, 64, 32)412break413end switch414end if415end sub416417418sub ObjectStartup419Object[19].Type = TypeName[R6 Setup]420Object[19].Priority = PRIORITY_ACTIVE421Object[19].DrawOrder = 2422423TempValue0 = 1424while TempValue0 < 3425RotatePalette(161, 163, 0)426CopyPalette(0, TempValue0)427TempValue0++428loop429RotatePalette(161, 163, 0)430end sub431432433// ========================434// Editor Subs435// ========================436437sub RSDKDraw438DrawSprite(0)439end sub440441442sub RSDKLoad443LoadSpriteSheet("Global/Display.gif")444SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon445446SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")447end sub448449450