Path: blob/master/Sonic 2/Scripts/ARZ/RotatePlatform.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Rotate Platform Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.rotateAngle12private alias object.value1 : object.drawPos.x13private alias object.value2 : object.drawPos.y14private alias object.value3 : object.collisionOffset.x15private alias object.value4 : object.collisionOffset.y16private alias object.value5 : object.length // Always 317private alias object.value6 : object.rotateSpeed1819// Player Aliases20private alias object.xpos : player.xpos21private alias object.ypos : player.ypos222324// ========================25// Function Declarations26// ========================2728reserve function RotatePlatform_DebugDraw29reserve function RotatePlatform_DebugSpawn303132// ========================33// Function Definitions34// ========================3536private function RotatePlatform_DebugDraw37temp7 = 338DrawSprite(0)3940temp0 = 041temp1 = 1642while temp0 < temp743Cos(temp2, 128)44temp2 *= temp145temp2 <<= 746temp2 += object.xpos4748Sin(temp3, 128)49temp3 *= temp150temp3 <<= 751temp3 += object.ypos5253DrawSpriteXY(1, temp2, temp3)5455temp0++56temp1 += 1657loop58temp1 -= 85960Cos(temp2, 128)61temp2 *= temp162temp2 <<= 763temp2 += object.xpos6465Sin(temp3, 128)66temp3 *= temp167temp3 <<= 768temp3 += object.ypos6970DrawSpriteXY(2, temp2, temp3)71end function727374private function RotatePlatform_DebugSpawn75// Bug Details:76// -> Only the last Rotate Platform spawned here is given the PRIORITY_XBOUNDS_DESTROY priority, while the first two aren't77// -> Because of this, if you go make these go off screen and then return to them later,78// it'll only be a set of 2 platforms rather than the usual 379// (yeah this really isn't too big of a bug but hey, it's worth noting anyway)8081CreateTempObject(TypeName[Rotate Platform], 0, object.xpos, object.ypos)82object[tempObjectPos].length = 383object[tempObjectPos].rotateSpeed = 12884object[tempObjectPos].rotateAngle = 0x00008586CreateTempObject(TypeName[Rotate Platform], 0, object.xpos, object.ypos)87object[tempObjectPos].length = 388object[tempObjectPos].rotateSpeed = 12889object[tempObjectPos].rotateAngle = 0x55009091CreateTempObject(TypeName[Rotate Platform], 0, object.xpos, object.ypos)92object[tempObjectPos].length = 393object[tempObjectPos].rotateSpeed = 12894object[tempObjectPos].rotateAngle = 0xAB0095end function969798// ========================99// Events100// ========================101102event ObjectUpdate103temp2 = object.xpos104temp3 = object.ypos105object.rotateAngle += object.rotateSpeed106object.rotateAngle &= 0x1FFFF107108temp0 = object.rotateAngle109temp0 >>= 8110temp1 = object.length111temp1++112temp1 <<= 4113object.xpos = object.drawPos.x114object.ypos = object.drawPos.y115116Cos256(object.collisionOffset.x, temp0)117object.collisionOffset.x *= temp1118object.collisionOffset.x <<= 8119object.collisionOffset.x += temp2120object.collisionOffset.x &= 0xFFFF0000121object.drawPos.x = object.collisionOffset.x122object.collisionOffset.x -= object.xpos123124Sin256(object.collisionOffset.y, temp0)125object.collisionOffset.y *= temp1126object.collisionOffset.y <<= 8127object.collisionOffset.y += temp3128object.collisionOffset.y &= 0xFFFF0000129object.drawPos.y = object.collisionOffset.y130object.collisionOffset.y -= object.ypos131132foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)133BoxCollisionTest(C_PLATFORM, object.entityPos, -24, -8, 24, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX) // 24 length on both sides? The sprite's width is 64, and other scripts' uses of this platform sprite use -32,32 hitboxes too...134if checkResult == true135player[currentPlayer].xpos += object.collisionOffset.x136player[currentPlayer].ypos += object.collisionOffset.y137end if138next139object.xpos = temp2140object.ypos = temp3141end event142143144event ObjectDraw145temp0 = 0146temp1 = 16147148temp4 = object.rotateAngle149temp4 >>= 8150while temp0 < object.length151Cos256(temp2, temp4)152temp2 *= temp1153temp2 <<= 8154temp2 += object.xpos155156Sin256(temp3, temp4)157temp3 *= temp1158temp3 <<= 8159temp3 += object.ypos160161DrawSpriteXY(1, temp2, temp3)162163temp0++164temp1 += 16165loop166Cos256(object.drawPos.x, temp4)167object.drawPos.x *= temp1168object.drawPos.x <<= 8169object.drawPos.x += object.xpos170object.drawPos.x &= 0xFFFF0000171172Sin256(object.drawPos.y, temp4)173object.drawPos.y *= temp1174object.drawPos.y <<= 8175object.drawPos.y += object.ypos176object.drawPos.y &= 0xFFFF0000177178DrawSpriteXY(2, object.drawPos.x, object.drawPos.y)179180DrawSprite(0)181end event182183184event ObjectStartup185LoadSpriteSheet("ARZ/Objects.gif")186SpriteFrame(-15, -12, 30, 20, 160, 235)187SpriteFrame(-8, -8, 16, 16, 174, 218)188SpriteFrame(-32, -8, 64, 16, 126, 191)189190SetTableValue(TypeName[Rotate Platform], DebugMode_ObjCount, DebugMode_TypesTable)191SetTableValue(RotatePlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)192SetTableValue(RotatePlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)193DebugMode_ObjCount++194195foreach (TypeName[Rotate Platform], arrayPos0, ALL_ENTITIES)196object[arrayPos0].length = 3197198object[arrayPos0].rotateSpeed = object[arrayPos0].propertyValue199object[arrayPos0].rotateSpeed &= 0xF0200if object[arrayPos0].rotateSpeed >= 0x80201object[arrayPos0].rotateSpeed -= 0x80202FlipSign(object[arrayPos0].rotateSpeed)203end if204object[arrayPos0].rotateSpeed <<= 3205206object[arrayPos0].rotateAngle = object[arrayPos0].propertyValue207object[arrayPos0].rotateAngle &= 3208object[arrayPos0].rotateAngle <<= 15209210temp5 = object[arrayPos0].propertyValue211temp5 >>= 2212temp5 &= 3213if temp5 == 1214object[arrayPos0].rotateAngle += 0x5500215end if216217if temp5 == 2218object[arrayPos0].rotateAngle -= 0x5500219end if220next221end event222223224// ========================225// Editor Events226// ========================227228event RSDKEdit229if editor.returnVariable == true230switch editor.variableID231case EDIT_VAR_PROPVAL // property value232checkResult = object.propertyValue233break234235case 0 // angle236checkResult = object.propertyValue237checkResult &= 3238break239240case 1 // offset241checkResult = object.propertyValue242checkResult >>= 2243checkResult &= 3244break245246case 2 // rotateSpeed247checkResult = object.propertyValue248checkResult >>= 4249checkResult &= 0xF250break251end switch252else253switch editor.variableID254case EDIT_VAR_PROPVAL // property value255object.propertyValue = editor.variableValue256break257258case 0 // angle259editor.variableValue &= 3260261temp0 = 3262Not(temp0)263object.propertyValue &= temp0264265object.propertyValue |= editor.variableValue266break267268case 1 // offset269editor.variableValue &= 3270editor.variableValue <<= 2271272temp0 = 3273temp0 <<= 2274Not(temp0)275object.propertyValue &= temp0276277object.propertyValue |= editor.variableValue278break279280case 2 // rotateSpeed281editor.variableValue &= 0xF282editor.variableValue <<= 4283284temp0 = 0x0F285object.propertyValue &= temp0286287object.propertyValue |= editor.variableValue288break289end switch290end if291end event292293294event RSDKDraw295object.length = 3296297object.rotateSpeed = object.propertyValue298object.rotateSpeed &= 0xF0299if object.rotateSpeed >= 0x80300object.rotateSpeed -= 0x80301FlipSign(object.rotateSpeed)302end if303304object.rotateAngle = object.propertyValue305object.rotateAngle &= 3306object.rotateAngle <<= 15307308temp5 = object.propertyValue309temp5 >>= 2310temp5 &= 3311if temp5 == 1312object.rotateAngle += 0x5500313end if314315if temp5 == 2316object.rotateAngle -= 0x5500317end if318319temp2 = object.xpos320temp3 = object.ypos321object.rotateAngle &= 0x1FFFF322323temp0 = object.rotateAngle324temp0 >>= 8325temp1 = object.length326temp1++327temp1 <<= 4328object.xpos = object.drawPos.x329object.ypos = object.drawPos.y330331Cos256(object.collisionOffset.x, temp0)332object.collisionOffset.x *= temp1333object.collisionOffset.x <<= 8334object.collisionOffset.x += temp2335object.collisionOffset.x &= 0xFFFF0000336object.drawPos.x = object.collisionOffset.x337object.collisionOffset.x -= object.xpos338339Sin256(object.collisionOffset.y, temp0)340object.collisionOffset.y *= temp1341object.collisionOffset.y <<= 8342object.collisionOffset.y += temp3343object.collisionOffset.y &= 0xFFFF0000344object.drawPos.y = object.collisionOffset.y345object.collisionOffset.y -= object.ypos346347object.xpos = temp2348object.ypos = temp3349350temp0 = 0351temp1 = 16352353temp4 = object.rotateAngle354temp4 >>= 8355while temp0 < object.length356Cos256(temp2, temp4)357temp2 *= temp1358temp2 <<= 8359temp2 += object.xpos360361Sin256(temp3, temp4)362temp3 *= temp1363temp3 <<= 8364temp3 += object.ypos365366DrawSpriteXY(1, temp2, temp3)367368temp0++369temp1 += 16370loop371Cos256(object.drawPos.x, temp4)372object.drawPos.x *= temp1373object.drawPos.x <<= 8374object.drawPos.x += object.xpos375object.drawPos.x &= 0xFFFF0000376377Sin256(object.drawPos.y, temp4)378object.drawPos.y *= temp1379object.drawPos.y <<= 8380object.drawPos.y += object.ypos381object.drawPos.y &= 0xFFFF0000382383DrawSpriteXY(2, object.drawPos.x, object.drawPos.y)384385DrawSprite(0)386end event387388389event RSDKLoad390LoadSpriteSheet("ARZ/Objects.gif")391SpriteFrame(-15, -12, 30, 20, 160, 235)392SpriteFrame(-8, -8, 16, 16, 174, 218)393SpriteFrame(-32, -8, 64, 16, 126, 191)394395AddEditorVariable("angle")396SetActiveVariable("angle")397398AddEditorVariable("offset")399SetActiveVariable("offset")400AddEnumVariable("None", 0)401AddEnumVariable("Right", 1)402AddEnumVariable("Left", 2)403404AddEditorVariable("rotateSpeed")405SetActiveVariable("rotateSpeed")406end event407408409