Path: blob/main/Scripts/R7/R7BSetup.txt
1319 views
//-----------------Sonic CD R7 B Setup Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.DeformTimer6// Value1 is skipped over...7#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_ANGLEB1819// Deformation Layer20#alias 2 : DEFORM_BG2122// Function declarations23#function R7Setup_GetLoopTileInfo242526function R7Setup_GetLoopTileInfo27// Gets info from out of bounds chunks, located past the signpost2829// Precondition:30// - TempValue0 is the chunk ID of the chunk currentbly being checked against3132TempValue3 = Player.XPos33TempValue3 >>= 1634TempValue3 &= 25535TempValue3 += 0x31003637TempValue0 -= 1638TempValue0 >>= 239TempValue0 <<= 840TempValue4 = Player.YPos41TempValue4 >>= 1642TempValue4 &= 25543TempValue4 += TempValue04445Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)46end function474849sub ObjectMain5051// Make the lake in the BG ripple its surfacec a little bit52Object.DeformTimer++53if Object.DeformTimer > 154TileLayer[1].DeformationOffset++55Object.DeformTimer = 056end if5758// Update the Flames counter too59if 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 flammable 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 setup object into reserved object slt 19 and make it always active241Object[19].Type = TypeName[R7 Setup]242Object[19].Priority = PRIORITY_ACTIVE243244// Set initial deformation data for the BG water245SetLayerDeformation(DEFORM_BG, 128, 8, 0, 0, 0)246247end sub248249250// ========================251// Editor Subs252// ========================253254sub RSDKDraw255DrawSprite(0)256end sub257258259sub RSDKLoad260LoadSpriteSheet("Global/Display.gif")261SpriteFrame(-16, -16, 32, 32, 1, 143) // "Script" Icon262263SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")264end sub265266267