Path: blob/main/Scripts/R7/R7ASetup.txt
1319 views
//-----------------Sonic CD R7 A Setup Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.PaletteTimer6#alias Object.Value1 : Object.ActivePalette7#alias Object.Value2 : Object.FlamesTimer89// Collision Modes10#alias 0 : CMODE_FLOOR1112// Priority13#alias 1 : PRIORITY_ACTIVE1415// Tile Info16#alias 0 : TILEINFO_INDEX17#alias 8 : TILEINFO_ANGLEB181920// Function declarations21#function R7Setup_GetLoopTileInfo222324function R7Setup_GetLoopTileInfo25// Gets info from out of bounds chunks, located past the signpost2627// Precondition:28// - TempValue0 is the chunk ID of the chunk currentbly being checked against2930TempValue3 = Player.XPos31TempValue3 >>= 1632TempValue3 &= 25533TempValue3 += 0x31003435TempValue0 -= 1636TempValue0 >>= 237TempValue0 <<= 838TempValue4 = Player.YPos39TempValue4 >>= 1640TempValue4 &= 25541TempValue4 += TempValue04243Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)44end function454647sub ObjectMain4849// Palette cycling50// Despite banks 0-5 being set up earler, only banks 0-1 are used here51Object.PaletteTimer++52if Object.PaletteTimer == 553Object.PaletteTimer = 054Object.ActivePalette++55Object.ActivePalette &= 156SetActivePalette(Object.ActivePalette, 0, 240)57end if5859if Object.FlamesTimer > 060Object.FlamesTimer--61end if6263end sub646566sub ObjectPlayerInteraction6768// "Layers" are managed here69// (In reality, chunks are swapped on-the-fly in order to make it appear as if the player's moving behind/in front of them)7071// Get the position of the chunk the player's currently in72TempValue1 = Player.XPos73TempValue1 >>= 2374TempValue2 = Player.YPos75TempValue2 >>= 237677// And find what chunk ID it corresponds to78GetTileLayerEntry(TempValue0, 0, TempValue1, TempValue2)7980// If applicable, jump to the loop chunk set it corresponds to81switch TempValue082case 1683case 1784case 1885case 1986// Loop chunks, open from left side87CallFunction(R7Setup_GetLoopTileInfo)88if Player.CollisionMode == CMODE_FLOOR89if TempValue0 == 100190TempValue1 &= 102291TempValue2 &= 102292SetTileLayerEntry(20, 0, TempValue1, TempValue2)93TempValue1++94SetTileLayerEntry(21, 0, TempValue1, TempValue2)95TempValue1--96TempValue2++97SetTileLayerEntry(22, 0, TempValue1, TempValue2)98TempValue1++99SetTileLayerEntry(23, 0, TempValue1, TempValue2)100end if101else102if Player.Speed > 0103if TempValue0 == 1003104TempValue1 &= 1022105TempValue2 &= 1022106SetTileLayerEntry(20, 0, TempValue1, TempValue2)107TempValue1++108SetTileLayerEntry(21, 0, TempValue1, TempValue2)109TempValue1--110TempValue2++111SetTileLayerEntry(22, 0, TempValue1, TempValue2)112TempValue1++113SetTileLayerEntry(23, 0, TempValue1, TempValue2)114end if115end if116end if117break118119case 20120case 21121case 22122case 23123// Loop chunks, open from right side124CallFunction(R7Setup_GetLoopTileInfo)125if Player.CollisionMode == CMODE_FLOOR126if TempValue0 == 1000127TempValue1 &= 1022128TempValue2 &= 1022129SetTileLayerEntry(16, 0, TempValue1, TempValue2)130TempValue1++131SetTileLayerEntry(17, 0, TempValue1, TempValue2)132TempValue1--133TempValue2++134SetTileLayerEntry(18, 0, TempValue1, TempValue2)135TempValue1++136SetTileLayerEntry(19, 0, TempValue1, TempValue2)137end if138else139if Player.Speed < 0140if TempValue0 == 1002141TempValue1 &= 1022142TempValue2 &= 1022143SetTileLayerEntry(16, 0, TempValue1, TempValue2)144TempValue1++145SetTileLayerEntry(17, 0, TempValue1, TempValue2)146TempValue1--147TempValue2++148SetTileLayerEntry(18, 0, TempValue1, TempValue2)149TempValue1++150SetTileLayerEntry(19, 0, TempValue1, TempValue2)151end if152end if153end if154break155156case 24157case 25158case 26159case 27160// Wavy chunks, open from left side161CallFunction(R7Setup_GetLoopTileInfo)162if TempValue0 == 1001163TempValue1 &= 1022164TempValue2 &= 1022165SetTileLayerEntry(28, 0, TempValue1, TempValue2)166TempValue1++167SetTileLayerEntry(29, 0, TempValue1, TempValue2)168TempValue1--169TempValue2++170SetTileLayerEntry(30, 0, TempValue1, TempValue2)171TempValue1++172SetTileLayerEntry(31, 0, TempValue1, TempValue2)173end if174break175176case 28177case 29178case 30179case 31180// Wavy chunks, open from right side181CallFunction(R7Setup_GetLoopTileInfo)182if TempValue0 == 1000183TempValue1 &= 1022184TempValue2 &= 1022185SetTileLayerEntry(24, 0, TempValue1, TempValue2)186TempValue1++187SetTileLayerEntry(25, 0, TempValue1, TempValue2)188TempValue1--189TempValue2++190SetTileLayerEntry(26, 0, TempValue1, TempValue2)191TempValue1++192SetTileLayerEntry(27, 0, TempValue1, TempValue2)193end if194break195196end switch197198if Object.FlamesTimer == 0199200// Get the absolute version of the Player's speed201TempValue0 = Player.Speed202if TempValue0 < 0203FlipSign(TempValue0)204end if205206// Is the player going at a speed above 10 pixels?207if TempValue0 > 0xA0000208TempValue3 = Player.XPos209TempValue3 >>= 16210211TempValue4 = Player.YPos212TempValue4 >>= 16213TempValue4 += 8214215// See if the player's on a fire-compatible tile216Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_ANGLEB)217218if TempValue0 == 1219Object.FlamesTimer = 4220221// Spawn a Flame Trail behind the player222CreateTempObject(TypeName[Fire Trail], 0, Player.XPos, Player.YPos)223if Player.Speed < 0224Object[TempObjectPos].Direction = FACING_LEFT225else226Object[TempObjectPos].Direction = FACING_RIGHT227end if228Object[TempObjectPos].DrawOrder = 4229Object[TempObjectPos].iYPos += Player.CollisionBottom230231end if232end if233end if234235end sub236237238sub ObjectStartup239240// Place the object into the scene and make it always active241Object[19].Type = TypeName[R7 Setup]242Object[19].Priority = PRIORITY_ACTIVE243244// Setup the palette cycle245246// First, copy the main palette bank into banks 1-5247// (Side note - 1-5? But only banks 0-1 are actually used throughout the stage...)248CopyPalette(0, 1)249CopyPalette(0, 2)250CopyPalette(0, 3)251CopyPalette(0, 4)252CopyPalette(0, 5)253254// And now insert the modified colors into the alternate palette banks255TempValue0 = 0256TempValue1 = 0257TempValue2 = 32258while TempValue0 < 2259LoadPalette("R7A_PalCycle.act", TempValue0, 160, TempValue1, TempValue2)260TempValue0++261TempValue1 += 32262TempValue2 += 32263loop264265end sub266267268// ========================269// Editor Subs270// ========================271272sub RSDKDraw273DrawSprite(0)274end sub275276277sub RSDKLoad278LoadSpriteSheet("Global/Display.gif")279SpriteFrame(-16, -16, 32, 32, 1, 143) // "Script" Icon280281SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")282end sub283284285