Path: blob/main/Scripts/R7/R7DSetup.txt
1319 views
//-----------------Sonic CD R7 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.ActivePalette7#alias Object.Value2 : Object.FlamesTimer89// Collision Modes10#alias 0 : CMODE_FLOOR11#alias 1 : CMODE_LWALL12#alias 2 : CMODE_ROOF13#alias 3 : CMODE_RWALL1415// Priority16#alias 1 : PRIORITY_ACTIVE1718// Tile Info19#alias 0 : TILEINFO_INDEX20#alias 8 : TILEINFO_ANGLEB212223// Function declarations24#function R7Setup_GetLoopTileInfo2526function 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 += 0x310036TempValue0 -= 1637TempValue0 >>= 238TempValue0 <<= 83940TempValue4 = Player.YPos41TempValue4 >>= 1642TempValue4 &= 25543TempValue4 += TempValue04445Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)46end function474849sub ObjectMain5051Object.Timer++52if Object.Timer == 553Object.Timer = 054Object.ActivePalette++55Object.ActivePalette %= 656SetActivePalette(Object.ActivePalette, 0, 240)57end if5859if Object.FlamesTimer > 060Object.FlamesTimer--61end if6263end sub646566sub ObjectPlayerInteraction6768// Loops are handled here6970// Get the chunk ID of the player's current position71TempValue1 = Player.XPos72TempValue1 >>= 2373TempValue2 = Player.YPos74TempValue2 >>= 2375GetTileLayerEntry(TempValue0, 0, TempValue1, TempValue2)7677// Jump to its entry if it's a loop chunk78switch TempValue079case 1680case 1781case 1882case 1983// Loop chunks, open from left side84CallFunction(R7Setup_GetLoopTileInfo)85if Player.CollisionMode == CMODE_FLOOR86if TempValue0 == 100187TempValue1 &= 102288TempValue2 &= 102289SetTileLayerEntry(20, 0, TempValue1, TempValue2)90TempValue1++91SetTileLayerEntry(21, 0, TempValue1, TempValue2)92TempValue1--93TempValue2++94SetTileLayerEntry(22, 0, TempValue1, TempValue2)95TempValue1++96SetTileLayerEntry(23, 0, TempValue1, TempValue2)97end if98else99if Player.Speed > 0100if TempValue0 == 1003101TempValue1 &= 1022102TempValue2 &= 1022103SetTileLayerEntry(20, 0, TempValue1, TempValue2)104TempValue1++105SetTileLayerEntry(21, 0, TempValue1, TempValue2)106TempValue1--107TempValue2++108SetTileLayerEntry(22, 0, TempValue1, TempValue2)109TempValue1++110SetTileLayerEntry(23, 0, TempValue1, TempValue2)111end if112end if113end if114break115116case 20117case 21118case 22119case 23120// Loop chunks, open from right side121CallFunction(R7Setup_GetLoopTileInfo)122if Player.CollisionMode == CMODE_FLOOR123if TempValue0 == 1000124TempValue1 &= 1022125TempValue2 &= 1022126SetTileLayerEntry(16, 0, TempValue1, TempValue2)127TempValue1++128SetTileLayerEntry(17, 0, TempValue1, TempValue2)129TempValue1--130TempValue2++131SetTileLayerEntry(18, 0, TempValue1, TempValue2)132TempValue1++133SetTileLayerEntry(19, 0, TempValue1, TempValue2)134end if135else136if Player.Speed < 0137if TempValue0 == 1002138TempValue1 &= 1022139TempValue2 &= 1022140SetTileLayerEntry(16, 0, TempValue1, TempValue2)141TempValue1++142SetTileLayerEntry(17, 0, TempValue1, TempValue2)143TempValue1--144TempValue2++145SetTileLayerEntry(18, 0, TempValue1, TempValue2)146TempValue1++147SetTileLayerEntry(19, 0, TempValue1, TempValue2)148end if149end if150end if151break152153case 24154case 25155case 26156case 27157// Wavy chunks, open from left side158CallFunction(R7Setup_GetLoopTileInfo)159if TempValue0 == 1001160TempValue1 &= 1022161TempValue2 &= 1022162SetTileLayerEntry(28, 0, TempValue1, TempValue2)163TempValue1++164SetTileLayerEntry(29, 0, TempValue1, TempValue2)165TempValue1--166TempValue2++167SetTileLayerEntry(30, 0, TempValue1, TempValue2)168TempValue1++169SetTileLayerEntry(31, 0, TempValue1, TempValue2)170end if171break172173case 28174case 29175case 30176case 31177// Wavy chunks, open from right side178CallFunction(R7Setup_GetLoopTileInfo)179if TempValue0 == 1000180TempValue1 &= 1022181TempValue2 &= 1022182SetTileLayerEntry(24, 0, TempValue1, TempValue2)183TempValue1++184SetTileLayerEntry(25, 0, TempValue1, TempValue2)185TempValue1--186TempValue2++187SetTileLayerEntry(26, 0, TempValue1, TempValue2)188TempValue1++189SetTileLayerEntry(27, 0, TempValue1, TempValue2)190end if191break192193end switch194195if Object.FlamesTimer == 0196197// Get the absolute version of the player's speed198TempValue0 = Player.Speed199if TempValue0 < 0200FlipSign(TempValue0)201end if202203// Is the player going faster than 10px per frame?204if TempValue0 > 0xA0000205206// See if the tile the player's on is a fire-friendly one207TempValue3 = Player.XPos208TempValue3 >>= 16209TempValue4 = Player.YPos210TempValue4 >>= 16211TempValue4 += 8212Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_ANGLEB)213214if TempValue0 == 1215Object.FlamesTimer = 4216217// Start a Flame Trail behind the player218CreateTempObject(TypeName[Fire Trail], 0, Player.XPos, Player.YPos)219if Player.Speed < 0220Object[TempObjectPos].Direction = FACING_LEFT221else222Object[TempObjectPos].Direction = FACING_RIGHT223end if224Object[TempObjectPos].DrawOrder = 4225Object[TempObjectPos].iYPos += Player.CollisionBottom226227end if228end if229end if230231end sub232233234sub ObjectStartup235236Object[19].Type = TypeName[R7 Setup]237Object[19].Priority = PRIORITY_ACTIVE238239// Setup the palette cycling used in the stage240CopyPalette(0, 1)241CopyPalette(0, 2)242CopyPalette(0, 3)243CopyPalette(0, 4)244CopyPalette(0, 5)245TempValue0 = 0246TempValue1 = 0247TempValue2 = 16248while TempValue0 < 6249LoadPalette("R7D_PalCycle.act", TempValue0, 160, TempValue1, TempValue2)250TempValue0++251TempValue1 += 16252TempValue2 += 16253loop254255end sub256257258// ========================259// Editor Subs260// ========================261262sub RSDKDraw263DrawSprite(0)264end sub265266267sub RSDKLoad268LoadSpriteSheet("Global/Display.gif")269SpriteFrame(-16, -16, 32, 32, 1, 143) // "Script" Icon270271SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")272end sub273274275