Path: blob/master/Sonic 2/Scripts/CNZ/SnakePlatform.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Snake Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.collisionOffset.y1213// Player Aliases14private alias object.ypos : player.ypos151617// ========================18// Function Declarations19// ========================2021reserve function SnakePlatform_DebugDraw22reserve function SnakePlatform_DebugSpawn232425// ========================26// Tables27// ========================2829// Unused30// Likely would've been used for collsision in some fashion, though no real guesses as to how...31// This table loosely matches the one the original object used, though it's not a 1:1 copy like some other objects do32private table SnakePlatform_unusedTable330, 0, 0, 034-40, 16, -32, 3235-40, 0, -32, 3236-40, -16, -32, 3237-40, -32, -32, 3238end table394041// ========================42// Function Definitions43// ========================4445private function SnakePlatform_DebugDraw46DrawSprite(16)47end function484950private function SnakePlatform_DebugSpawn51CreateTempObject(TypeName[Snake Platform], 0, object.xpos, object.ypos)52end function535455// ========================56// Events57// ========================5859event ObjectUpdate60temp0 = object.frame61object.frame = object.animationTimer62object.frame >>= 463object.animationTimer++64object.animationTimer &= 0xFF6566object.collisionOffset.y = 067if object.frame > temp068switch temp069case 170case 271case 372object.collisionOffset.y = -0x10000073break7475case 1276case 1377case 1478object.collisionOffset.y = 0x10000079break8081end switch82end if8384foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)85switch temp086case 187BoxCollisionTest(C_SOLID, object.entityPos, -40, 16, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)88break8990case 291BoxCollisionTest(C_SOLID, object.entityPos, -40, 0, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)92break9394case 395BoxCollisionTest(C_SOLID, object.entityPos, -40, -16, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)96break9798case 499BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)100break101102case 5103BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)104BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, -8, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)105break106107case 6108BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)109BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 8, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)110break111112case 7113BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)114BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)115break116117case 8118BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, 40, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)119break120121case 9122BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)123BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)124break125126case 10127BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)128BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)129break130131case 11132BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)133BoxCollisionTest(C_SOLID, object.entityPos, 8, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)134break135136case 12137BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)138break139140case 13141BoxCollisionTest(C_SOLID, object.entityPos, 24, -16, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)142break143144case 14145BoxCollisionTest(C_SOLID, object.entityPos, 24, 0, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)146break147148case 15149BoxCollisionTest(C_SOLID, object.entityPos, 24, 16, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)150break151152end switch153154if checkResult == COL_TOP155player[currentPlayer].ypos += object.collisionOffset.y156end if157next158end event159160161event ObjectDraw162DrawSprite(object.frame)163end event164165166event ObjectStartup167LoadSpriteSheet("CNZ/Objects.gif")168SpriteFrame(0, 0, 0, 0, 61, 66)169SpriteFrame(-40, 16, 16, 16, 1, 82)170SpriteFrame(-40, 0, 16, 32, 1, 66)171SpriteFrame(-40, -16, 16, 48, 1, 50)172SpriteFrame(-40, -32, 16, 64, 1, 34)173SpriteFrame(-40, -32, 32, 64, 1, 34)174SpriteFrame(-40, -32, 48, 48, 1, 34)175SpriteFrame(-40, -32, 64, 32, 1, 34)176SpriteFrame(-40, -32, 80, 16, 1, 34)177SpriteFrame(-24, -32, 64, 32, 17, 34)178SpriteFrame(-8, -32, 48, 48, 33, 34)179SpriteFrame(8, -32, 32, 64, 49, 34)180SpriteFrame(24, -32, 16, 64, 65, 34)181SpriteFrame(24, -16, 16, 48, 65, 50)182SpriteFrame(24, 0, 16, 32, 65, 66)183SpriteFrame(24, 16, 16, 16, 65, 82)184SpriteFrame(-40, -32, 80, 64, 1, 34)185186SetTableValue(TypeName[Snake Platform], DebugMode_ObjCount, DebugMode_TypesTable)187SetTableValue(SnakePlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)188SetTableValue(SnakePlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)189DebugMode_ObjCount++190end event191192193// ========================194// Editor Events195// ========================196197event RSDKDraw198DrawSprite(0)199end event200201202event RSDKLoad203LoadSpriteSheet("CNZ/Objects.gif")204SpriteFrame(-40, -32, 80, 64, 1, 34)205206// The CNZ2 layouts set it as was in the original game, but it doesn't mean anything in this remake207// (In the original game it actually had a use, but this remake makes all platform types behave the same)208SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")209end event210211212