Path: blob/main/Scripts/R7/R7CSetup.txt
1319 views
//-----------------Sonic CD R7 C Setup Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value2 : Object.FlamesTimer67// Collision Modes8#alias 0 : CMODE_FLOOR910// Priority11#alias 1 : PRIORITY_ACTIVE1213// Tile Info14#alias 0 : TILEINFO_INDEX15#alias 8 : TILEINFO_ANGLEB161718// Function declarations19#function R7Setup_GetLoopTileInfo202122function R7Setup_GetLoopTileInfo23// Gets info from out of bounds chunks, located past the signpost2425// Precondition:26// - TempValue0 is the chunk ID of the chunk currentbly being checked against2728TempValue3 = Player.XPos29TempValue3 >>= 1630TempValue3 &= 25531TempValue3 += 0x31003233TempValue0 -= 1634TempValue0 >>= 235TempValue0 <<= 836TempValue4 = Player.YPos37TempValue4 >>= 1638TempValue4 &= 25539TempValue4 += TempValue04041Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)42end function434445sub ObjectMain46if Object.FlamesTimer > 047Object.FlamesTimer--48end if49end sub505152sub ObjectPlayerInteraction5354// "Layers" are managed here55// (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)5657// Get the position of the chunk the player's currently in58TempValue1 = Player.XPos59TempValue1 >>= 2360TempValue2 = Player.YPos61TempValue2 >>= 236263// And find what chunk ID it is64GetTileLayerEntry(TempValue0, 0, TempValue1, TempValue2)6566// If applicable, jump to the loop chunk set it corresponds to67switch TempValue068case 1669case 1770case 1871case 1972// Loop chunks, from left side73CallFunction(R7Setup_GetLoopTileInfo)74if Player.CollisionMode == CMODE_FLOOR75if TempValue0 == 100176TempValue1 &= 102277TempValue2 &= 102278SetTileLayerEntry(20, 0, TempValue1, TempValue2)79TempValue1++80SetTileLayerEntry(21, 0, TempValue1, TempValue2)81TempValue1--82TempValue2++83SetTileLayerEntry(22, 0, TempValue1, TempValue2)84TempValue1++85SetTileLayerEntry(23, 0, TempValue1, TempValue2)86end if87else88if Player.Speed > 089if TempValue0 == 100390TempValue1 &= 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 if101end if102end if103break104105case 20106case 21107case 22108case 23109// Loop chunks, from right side110CallFunction(R7Setup_GetLoopTileInfo)111if Player.CollisionMode == CMODE_FLOOR112if TempValue0 == 1000113TempValue1 &= 1022114TempValue2 &= 1022115SetTileLayerEntry(16, 0, TempValue1, TempValue2)116TempValue1++117SetTileLayerEntry(17, 0, TempValue1, TempValue2)118TempValue1--119TempValue2++120SetTileLayerEntry(18, 0, TempValue1, TempValue2)121TempValue1++122SetTileLayerEntry(19, 0, TempValue1, TempValue2)123end if124else125if Player.Speed < 0126if TempValue0 == 1002127TempValue1 &= 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 if138end if139end if140break141142case 24143case 25144case 26145case 27146// Wave chunks, from left side147CallFunction(R7Setup_GetLoopTileInfo)148if TempValue0 == 1001149TempValue1 &= 1022150TempValue2 &= 1022151SetTileLayerEntry(28, 0, TempValue1, TempValue2)152TempValue1++153SetTileLayerEntry(29, 0, TempValue1, TempValue2)154TempValue1--155TempValue2++156SetTileLayerEntry(30, 0, TempValue1, TempValue2)157TempValue1++158SetTileLayerEntry(31, 0, TempValue1, TempValue2)159end if160break161162case 28163case 29164case 30165case 31166// Wave chunks, from right side167CallFunction(R7Setup_GetLoopTileInfo)168if TempValue0 == 1000169TempValue1 &= 1022170TempValue2 &= 1022171SetTileLayerEntry(24, 0, TempValue1, TempValue2)172TempValue1++173SetTileLayerEntry(25, 0, TempValue1, TempValue2)174TempValue1--175TempValue2++176SetTileLayerEntry(26, 0, TempValue1, TempValue2)177TempValue1++178SetTileLayerEntry(27, 0, TempValue1, TempValue2)179end if180break181182end switch183184if Object.FlamesTimer == 0185186TempValue0 = Player.Speed187if TempValue0 < 0188FlipSign(TempValue0)189end if190191// See if the player's going above a rate of 10 pixels per frame192if TempValue0 > 0xA0000193194// Get the player's positions195TempValue3 = Player.XPos196TempValue3 >>= 16197198TempValue4 = Player.YPos199TempValue4 >>= 16200TempValue4 += 8201202// See if the player is on a special flame tile203Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_ANGLEB)204205if TempValue0 == 1206Object.FlamesTimer = 4207208// If so, spawn a Fire Trail behind Sonic209CreateTempObject(TypeName[Fire Trail], 0, Player.XPos, Player.YPos)210if Player.Speed < 0211Object[TempObjectPos].Direction = FACING_LEFT212else213Object[TempObjectPos].Direction = FACING_RIGHT214end if215Object[TempObjectPos].DrawOrder = 4216Object[TempObjectPos].iYPos += Player.CollisionBottom217218end if219end if220end if221end sub222223224sub ObjectStartup225226// Place a Setup object into slot 19 and set it to always be active227Object[19].Type = TypeName[R7 Setup]228Object[19].Priority = PRIORITY_ACTIVE229230end sub231232233// ========================234// Editor Subs235// ========================236237sub RSDKDraw238DrawSprite(0)239end sub240241242sub RSDKLoad243LoadSpriteSheet("Global/Display.gif")244SpriteFrame(-16, -16, 32, 32, 1, 143) // "Script" Icon245246SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")247end sub248249250