Path: blob/master/Sonic 1/Scripts/GHZ/Bridge.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Bridge Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.length1213private alias object.value0 : object.activePlayerCount14private alias object.value1 : object.timer15private alias object.value2 : object.stoodPos16private alias object.value3 : object.depression17private alias object.value4 : object.bridgeDepth18private alias object.value5 : object.playerID19private alias object.value6 : object.startPos20private alias object.value7 : object.endPos2122// Player Aliases23private alias object.xpos : player.xpos24private alias object.ypos : player.ypos25private alias object.yvel : player.yvel26private alias object.gravity : player.gravity27private alias object.floorSensorL : player.floorSensorL28private alias object.floorSensorC : player.floorSensorC29private alias object.floorSensorR : player.floorSensorR30private alias object.collisionBottom : player.collisionBottom3132private alias object.value17 : debugMode.currentSelection333435// ========================36// Function Declarations37// ========================3839reserve function Bridge_DebugDraw40reserve function Bridge_DebugSpawn414243// ========================44// Static Values45// ========================4647private value Bridge_startDebugID = 0484950// ========================51// Function Definitions52// ========================5354private function Bridge_DebugDraw55temp0 = debugMode[0].currentSelection56temp0 -= Bridge_startDebugID57temp2 = temp058temp0 <<= 1959FlipSign(temp0)60temp0 += object.xpos61temp0 += 0x800006263temp1 = 064while temp1 < temp265DrawSpriteXY(0, temp0, object.ypos)66temp0 += 0x10000067temp1++68loop6970if temp1 == 071// If no sprites are drawn, then draw at least 172DrawSprite(0)73end if74end function757677private function Bridge_DebugSpawn78temp0 = debugMode[0].currentSelection79temp0 -= Bridge_startDebugID80CreateTempObject(TypeName[Bridge], temp0, object.xpos, object.ypos)8182object[tempObjectPos].startPos = temp083object[tempObjectPos].startPos <<= 1984object[tempObjectPos].endPos = object[tempObjectPos].startPos85FlipSign(object[tempObjectPos].startPos)86object[tempObjectPos].startPos += object[tempObjectPos].xpos87object[tempObjectPos].endPos += object[tempObjectPos].xpos88object[tempObjectPos].playerID = -189end function909192// ========================93// Events94// ========================9596event ObjectUpdate97if object.activePlayerCount > 098if object.timer < 12899object.timer += 8100end if101else102if object.timer > 0103object.timer -= 8104object.playerID = -1105else106object.depression = 0107end if108end if109object.bridgeDepth = object.depression110object.bridgeDepth *= object.timer111object.bridgeDepth >>= 7112object.activePlayerCount = 0113114foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)115if player[currentPlayer].xpos > object.startPos116if player[currentPlayer].xpos < object.endPos117if currentPlayer == object.playerID118object.stoodPos = player[currentPlayer].xpos119object.stoodPos -= object.startPos120temp0 = object.stoodPos121temp0 >>= 8122temp1 = object.endPos123temp1 -= object.startPos124temp2 = temp1125temp2 >>= 16126temp0 /= temp2127Sin(object.depression, temp0)128temp1 >>= 13129object.depression *= temp1130temp0 = object.ypos131temp0 -= 0x300000132if player[currentPlayer].ypos > temp0133if player[currentPlayer].yvel >= 0134temp2 = player[currentPlayer].collisionBottom135FlipSign(temp2)136temp2 <<= 16137temp2 += object.bridgeDepth138temp2 -= 0x80000139object.activePlayerCount++140player[currentPlayer].ypos = object.ypos141player[currentPlayer].ypos += temp2142player[currentPlayer].gravity = GRAVITY_GROUND143player[currentPlayer].yvel = 0144player[currentPlayer].floorSensorL = true145player[currentPlayer].floorSensorC = true146player[currentPlayer].floorSensorR = true147else148object.playerID = -2149end if150end if151else152if player[currentPlayer].yvel >= 0153temp0 = player[currentPlayer].xpos154temp0 -= object.startPos155if temp0 > object.stoodPos156temp0 = object.endPos157temp0 -= player[currentPlayer].xpos158temp3 = object.endPos159temp3 -= object.startPos160temp3 -= object.stoodPos161temp1 = temp0162temp1 <<= 7163temp1 /= temp3164else165temp1 = temp0166temp1 <<= 7167temp1 /= object.stoodPos168end if169Sin(temp2, temp1)170temp2 *= object.bridgeDepth171temp2 >>= 9172temp2 -= 0x80000173if player[currentPlayer].yvel < 0x8000174temp3 = temp2175temp3 >>= 16176temp4 = temp3177temp3 -= 8178else179temp3 = temp2180temp3 >>= 16181temp4 = temp3182temp4 += 8183end if184185BoxCollisionTest(C_TOUCH, object.entityPos, -0x400, temp3, 0x400, temp4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)186if checkResult == true187object.activePlayerCount++188player[currentPlayer].ypos = player[currentPlayer].collisionBottom189FlipSign(player[currentPlayer].ypos)190player[currentPlayer].ypos <<= 16191player[currentPlayer].ypos += object.ypos192player[currentPlayer].ypos += temp2193player[currentPlayer].floorSensorL = true194player[currentPlayer].floorSensorC = true195player[currentPlayer].floorSensorR = true196if currentPlayer == 0197if object.playerID < 4198if object.playerID > 0199object.stoodPos = player[currentPlayer].xpos200object.stoodPos -= object.startPos201temp0 = object.stoodPos202temp0 >>= 8203temp1 = object.endPos204temp1 -= object.startPos205temp2 = temp1206temp2 >>= 16207temp0 /= temp2208Sin(object.depression, temp0)209temp1 >>= 13210object.depression *= temp1211object.bridgeDepth = object.depression212object.bridgeDepth *= object.timer213object.bridgeDepth >>= 7214end if215216object.playerID = 0217if player[currentPlayer].yvel < 256218object.timer = 128219end if220end if221else222if object.playerID == -1223object.playerID = currentPlayer224if player[currentPlayer].yvel < 256225object.timer = 128226end if227end if228229if object.playerID == -2230object.playerID = currentPlayer231end if232end if233234player[currentPlayer].gravity = GRAVITY_GROUND235player[currentPlayer].yvel = 0236end if237end if238end if239else240if currentPlayer == object.playerID241object.playerID = -2242object.timer = 32243end if244end if245else246if currentPlayer == object.playerID247object.playerID = -2248object.timer = 32249end if250end if251next252end event253254255event ObjectDraw256temp0 = 0257temp1 = object.startPos258temp1 += 0x80000259temp4 = 0x80000260temp5 = object.stoodPos261temp5 >>= 20262while temp0 < temp5263temp3 = temp4264temp3 <<= 7265temp3 /= object.stoodPos266Sin(temp2, temp3)267temp2 *= object.bridgeDepth268temp2 >>= 9269temp2 += object.ypos270DrawSpriteXY(0, temp1, temp2)271temp1 += 0x100000272temp4 += 0x100000273temp0++274loop275276temp2 = object.bridgeDepth277temp2 += object.ypos278DrawSpriteXY(0, temp1, temp2)279280temp1 += 0x100000281temp0++282temp5 = object.endPos283temp5 -= object.startPos284temp5 -= object.stoodPos285temp1 = object.endPos286temp1 -= 0x80000287temp4 = 0x80000288while temp0 < object.length289temp3 = temp4290temp3 <<= 7291temp3 /= temp5292Sin(temp2, temp3)293temp2 *= object.bridgeDepth294temp2 >>= 9295temp2 += object.ypos296DrawSpriteXY(0, temp1, temp2)297temp1 -= 0x100000298temp4 += 0x100000299temp0++300loop301end event302303304event ObjectStartup305LoadSpriteSheet("GHZ/Objects.gif")306307SpriteFrame(-8, -8, 16, 16, 1, 1)308309foreach (TypeName[Bridge], arrayPos0, ALL_ENTITIES)310object[arrayPos0].startPos = object[arrayPos0].length311object[arrayPos0].startPos <<= 19312object[arrayPos0].endPos = object[arrayPos0].startPos313FlipSign(object[arrayPos0].startPos)314object[arrayPos0].startPos += object[arrayPos0].xpos315object[arrayPos0].endPos += object[arrayPos0].xpos316object[arrayPos0].playerID = -1317next318319// Add bridges of varying lengths to the debug object list320temp0 = 0321Bridge_startDebugID = DebugMode_ObjCount322Bridge_startDebugID--323while temp0 < 16324SetTableValue(TypeName[Bridge], DebugMode_ObjCount, DebugMode_TypesTable)325SetTableValue(Bridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)326SetTableValue(Bridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)327DebugMode_ObjCount++328temp0++329loop330end event331332333// ========================334// Editor Events335// ========================336337event RSDKDraw338temp0 = object.length339temp2 = temp0340temp0 <<= 19341FlipSign(temp0)342temp0 += object.xpos343temp0 += 0x80000344temp1 = 0345while temp1 < temp2346DrawSpriteXY(0, temp0, object.ypos)347temp0 += 0x100000348temp1++349loop350if temp1 == 0351DrawSprite(0)352end if353end event354355356event RSDKLoad357LoadSpriteSheet("GHZ/Objects.gif")358SpriteFrame(-8, -8, 16, 16, 1, 1)359360SetVariableAlias(ALIAS_VAR_PROPVAL, "length")361end event362363364