Path: blob/main/Scripts/R7/R7CBossSetup.txt
1319 views
//--------------Sonic CD R7 C Boss Setup Script---------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Priority5#alias 1 : PRIORITY_ACTIVE67// Collision Mode8#alias 0 : CMODE_FLOOR910// Tile Info11#alias 0 : TILEINFO_INDEX1213// Function declarations14#function R7Setup_GetLoopTileInfo151617function R7Setup_GetLoopTileInfo18// Gets info from out of bounds chunks, located past the signpost1920// Precondition:21// - TempValue0 is the chunk ID of the chunk currentbly being checked against2223TempValue3 = Player.XPos24TempValue3 >>= 1625TempValue3 &= 25526TempValue3 += 0x40002728TempValue0 -= 1629TempValue0 >>= 230TempValue0 <<= 831TempValue4 = Player.YPos32TempValue4 >>= 1633TempValue4 &= 25534TempValue4 += TempValue03536Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)37end function383940sub ObjectPlayerInteraction41// "Layers" are managed here42// (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)4344// Get the position of the chunk the player's currently in45TempValue1 = Player.XPos46TempValue1 >>= 2347TempValue2 = Player.YPos48TempValue2 >>= 234950// And find what chunk ID it holds51GetTileLayerEntry(TempValue0, 0, TempValue1, TempValue2)5253// If applicable, jump to the loop chunk set it corresponds to54switch TempValue055case 1656case 1757case 1858case 1959// Loop chunks, open from left side60CallFunction(R7Setup_GetLoopTileInfo)61if Player.CollisionMode == CMODE_FLOOR62if TempValue0 == 100163TempValue1 &= 102264TempValue2 &= 102265SetTileLayerEntry(20, 0, TempValue1, TempValue2)66TempValue1++67SetTileLayerEntry(21, 0, TempValue1, TempValue2)68TempValue1--69TempValue2++70SetTileLayerEntry(22, 0, TempValue1, TempValue2)71TempValue1++72SetTileLayerEntry(23, 0, TempValue1, TempValue2)73end if74else75if Player.Speed > 076if TempValue0 == 100377TempValue1 &= 102278TempValue2 &= 102279SetTileLayerEntry(20, 0, TempValue1, TempValue2)80TempValue1++81SetTileLayerEntry(21, 0, TempValue1, TempValue2)82TempValue1--83TempValue2++84SetTileLayerEntry(22, 0, TempValue1, TempValue2)85TempValue1++86SetTileLayerEntry(23, 0, TempValue1, TempValue2)87end if88end if89end if90break9192case 2093case 2194case 2295case 2396// Loop chunks, open from right side97CallFunction(R7Setup_GetLoopTileInfo)98if Player.CollisionMode == CMODE_FLOOR99if TempValue0 == 1000100TempValue1 &= 1022101TempValue2 &= 1022102SetTileLayerEntry(16, 0, TempValue1, TempValue2)103TempValue1++104SetTileLayerEntry(17, 0, TempValue1, TempValue2)105TempValue1--106TempValue2++107SetTileLayerEntry(18, 0, TempValue1, TempValue2)108TempValue1++109SetTileLayerEntry(19, 0, TempValue1, TempValue2)110end if111else112if Player.Speed < 0113if TempValue0 == 1002114TempValue1 &= 1022115TempValue2 &= 1022116SetTileLayerEntry(16, 0, TempValue1, TempValue2)117TempValue1++118SetTileLayerEntry(17, 0, TempValue1, TempValue2)119TempValue1--120TempValue2++121SetTileLayerEntry(18, 0, TempValue1, TempValue2)122TempValue1++123SetTileLayerEntry(19, 0, TempValue1, TempValue2)124end if125end if126end if127break128129case 24130case 25131case 26132case 27133// Wavy chunks, open from left side134// Note - These don't actually exist in Act 3! So the function is comparing against blank chunks...135CallFunction(R7Setup_GetLoopTileInfo)136if TempValue0 == 1001137TempValue1 &= 1022138TempValue2 &= 1022139SetTileLayerEntry(28, 0, TempValue1, TempValue2)140TempValue1++141SetTileLayerEntry(29, 0, TempValue1, TempValue2)142TempValue1--143TempValue2++144SetTileLayerEntry(30, 0, TempValue1, TempValue2)145TempValue1++146SetTileLayerEntry(31, 0, TempValue1, TempValue2)147end if148break149150case 28151case 29152case 30153case 31154// Wavy chunks, open from right side, but they don't actually exist155// See note above156CallFunction(R7Setup_GetLoopTileInfo)157if TempValue0 == 1000158TempValue1 &= 1022159TempValue2 &= 1022160SetTileLayerEntry(24, 0, TempValue1, TempValue2)161TempValue1++162SetTileLayerEntry(25, 0, TempValue1, TempValue2)163TempValue1--164TempValue2++165SetTileLayerEntry(26, 0, TempValue1, TempValue2)166TempValue1++167SetTileLayerEntry(27, 0, TempValue1, TempValue2)168end if169break170171end switch172173end sub174175176sub ObjectDraw177178// Find the XPos to draw it at, keeping the screen width in mind179Object.XPos = Screen.XOffset180Object.XPos /= 420181Object.XPos *= 420182Object.XPos += 320183Object.XPos *= 3184Object.XPos >>= 1185TempValue0 = Screen.XOffset186TempValue0 *= 3187TempValue0 >>= 1188Object.XPos -= TempValue0189190Object.YPos = 520191TempValue0 = Screen.YOffset192TempValue0 *= 23193TempValue0 >>= 4194Object.YPos -= TempValue0195196// Draw the street lamp197DrawSpriteScreenXY(0, Object.XPos, Object.YPos)198DrawSpriteScreenXY(1, Object.XPos, Object.YPos)199DrawSpriteScreenXY(2, Object.XPos, Object.YPos)200DrawSpriteScreenXY(3, Object.XPos, Object.YPos)201202end sub203204205sub ObjectStartup206207LoadSpriteSheet("R7/Objects2.gif")208209// Place a Setup object in reserved object slot 19 and make it always active210Object[19].Type = TypeName[R7 Setup]211Object[19].Priority = PRIORITY_ACTIVE212Object[19].DrawOrder = 5213214// Street Lamps215SpriteFrame(-24, -24, 48, 24, 207, 1)216217// Street Lamp Post Frames218SpriteFrame(-8, 0, 16, 224, 239, 26)219SpriteFrame(-8, 224, 16, 224, 239, 26)220SpriteFrame(-8, 448, 16, 224, 239, 26)221222// Set initial stage bounds223Stage.XBoundary2 -= 288224225end sub226227228// ========================229// Editor Subs230// ========================231232sub RSDKDraw233DrawSprite(0)234DrawSprite(1)235end sub236237238sub RSDKLoad239LoadSpriteSheet("R7/Objects2.gif")240SpriteFrame(-24, -24, 48, 24, 207, 1)241SpriteFrame(-8, 0, 16, 224, 239, 26)242243SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")244end sub245246247