Path: blob/master/Sonic 2/Scripts/EHZ/Bridge.txt
1479 views
// ----------------------------------1// RSDK Project: Sonic 22// 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.state : player.state24private alias object.xpos : player.xpos25private alias object.ypos : player.ypos26private alias object.yvel : player.yvel27private alias object.gravity : player.gravity28private alias object.collisionBottom : player.collisionBottom29private alias object.floorSensorC : player.floorSensorC30private alias object.floorSensorL : player.floorSensorL31private alias object.floorSensorR : player.floorSensorR3233private alias object.value17 : debugMode.currentSelection343536// ========================37// Function Declarations38// ========================3940reserve function Bridge_DebugDraw41reserve function Bridge_DebugSpawn424344// ========================45// Static Values46// ========================4748private value Bridge_startDebugID = 0495051// ========================52// Function Definitions53// ========================5455private function Bridge_DebugDraw56temp0 = debugMode[0].currentSelection57temp0 -= Bridge_startDebugID58temp2 = temp059temp0 <<= 1960FlipSign(temp0)61temp0 += object.xpos62temp0 += 0x800006364temp1 = 065while temp1 < temp266DrawSpriteXY(0, temp0, object.ypos)67temp0 += 0x10000068temp1++69loop7071if temp1 == 072DrawSprite(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].state != Player_State_LedgePullUp116if player[currentPlayer].xpos > object.startPos117if player[currentPlayer].xpos < object.endPos118if currentPlayer == object.playerID119object.stoodPos = player[currentPlayer].xpos120object.stoodPos -= object.startPos121temp0 = object.stoodPos122temp0 >>= 8123temp1 = object.endPos124temp1 -= object.startPos125temp2 = temp1126temp2 >>= 16127temp0 /= temp2128Sin(object.depression, temp0)129temp1 >>= 13130object.depression *= temp1131temp0 = object.ypos132temp0 -= 0x300000133if player[currentPlayer].ypos > temp0134if player[currentPlayer].yvel >= 0135temp2 = player[currentPlayer].collisionBottom136FlipSign(temp2)137temp2 <<= 16138temp2 += object.bridgeDepth139temp2 -= 0x80000140object.activePlayerCount++141player[currentPlayer].ypos = object.ypos142player[currentPlayer].ypos += temp2143player[currentPlayer].gravity = GRAVITY_GROUND144player[currentPlayer].yvel = 0145player[currentPlayer].floorSensorL = 1146player[currentPlayer].floorSensorC = 1147player[currentPlayer].floorSensorR = 1148else149object.playerID = -2150end if151end if152else153if player[currentPlayer].yvel >= 0154temp0 = player[currentPlayer].xpos155temp0 -= object.startPos156if temp0 > object.stoodPos157temp0 = object.endPos158temp0 -= player[currentPlayer].xpos159temp3 = object.endPos160temp3 -= object.startPos161temp3 -= object.stoodPos162temp1 = temp0163temp1 <<= 7164temp1 /= temp3165else166temp1 = temp0167temp1 <<= 7168temp1 /= object.stoodPos169end if170Sin(temp2, temp1)171temp2 *= object.bridgeDepth172temp2 >>= 9173temp2 -= 0x80000174if player[currentPlayer].yvel < 0x8000175temp3 = temp2176temp3 >>= 16177temp4 = temp3178temp3 -= 8179else180temp3 = temp2181temp3 >>= 16182temp4 = temp3183temp4 += 8184end if185186BoxCollisionTest(C_TOUCH, object.entityPos, -0x400, temp3, 0x400, temp4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)187if checkResult == true188object.activePlayerCount++189player[currentPlayer].ypos = player[currentPlayer].collisionBottom190FlipSign(player[currentPlayer].ypos)191player[currentPlayer].ypos <<= 16192player[currentPlayer].ypos += object.ypos193player[currentPlayer].ypos += temp2194player[currentPlayer].floorSensorL = true195player[currentPlayer].floorSensorC = true196player[currentPlayer].floorSensorR = true197if currentPlayer == 0198if object.playerID < 4199if object.playerID > 0200object.stoodPos = player[currentPlayer].xpos201object.stoodPos -= object.startPos202temp0 = object.stoodPos203temp0 >>= 8204temp1 = object.endPos205temp1 -= object.startPos206temp2 = temp1207temp2 >>= 16208temp0 /= temp2209Sin(object.depression, temp0)210temp1 >>= 13211object.depression *= temp1212object.bridgeDepth = object.depression213object.bridgeDepth *= object.timer214object.bridgeDepth >>= 7215end if216217object.playerID = 0218if player[currentPlayer].yvel < 256219object.timer = 128220end if221end if222else223if object.playerID == -1224object.playerID = currentPlayer225if player[currentPlayer].yvel < 256226object.timer = 128227end if228end if229230if object.playerID == -2231object.playerID = currentPlayer232end if233end if234235player[currentPlayer].gravity = GRAVITY_GROUND236player[currentPlayer].yvel = 0237end if238end if239end if240else241if currentPlayer == object.playerID242object.playerID = -2243object.timer = 32244end if245end if246else247if currentPlayer == object.playerID248object.playerID = -2249object.timer = 32250end if251end if252end if253next254end event255256257event ObjectDraw258temp0 = 0259temp1 = object.startPos260temp1 += 0x80000261temp4 = 0x80000262temp5 = object.stoodPos263temp5 >>= 20264while temp0 < temp5265temp3 = temp4266temp3 <<= 7267temp3 /= object.stoodPos268Sin(temp2, temp3)269temp2 *= object.bridgeDepth270temp2 >>= 9271temp2 += object.ypos272DrawSpriteXY(0, temp1, temp2)273temp1 += 0x100000274temp4 += 0x100000275temp0++276loop277temp2 = object.bridgeDepth278temp2 += object.ypos279DrawSpriteXY(0, temp1, temp2)280281temp1 += 0x100000282temp0++283temp5 = object.endPos284temp5 -= object.startPos285temp5 -= object.stoodPos286temp1 = object.endPos287temp1 -= 0x80000288temp4 = 0x80000289while temp0 < object.length290temp3 = temp4291temp3 <<= 7292temp3 /= temp5293Sin(temp2, temp3)294temp2 *= object.bridgeDepth295temp2 >>= 9296temp2 += object.ypos297DrawSpriteXY(0, temp1, temp2)298temp1 -= 0x100000299temp4 += 0x100000300temp0++301loop302end event303304305event ObjectStartup306CheckCurrentStageFolder("Zone01")307if checkResult == true308LoadSpriteSheet("EHZ/Objects.gif")309SpriteFrame(-8, -8, 16, 16, 82, 78)310else311LoadSpriteSheet("MBZ/Objects.gif")312SpriteFrame(-8, -8, 16, 16, 137, 313)313end if314315foreach (TypeName[Bridge], arrayPos0, ALL_ENTITIES)316object[arrayPos0].startPos = object[arrayPos0].length317object[arrayPos0].startPos <<= 19318object[arrayPos0].endPos = object[arrayPos0].startPos319FlipSign(object[arrayPos0].startPos)320object[arrayPos0].startPos += object[arrayPos0].xpos321object[arrayPos0].endPos += object[arrayPos0].xpos322object[arrayPos0].playerID = -1323next324325temp0 = 0326Bridge_startDebugID = DebugMode_ObjCount327Bridge_startDebugID--328while temp0 < 16329SetTableValue(TypeName[Bridge], DebugMode_ObjCount, DebugMode_TypesTable)330SetTableValue(Bridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)331SetTableValue(Bridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)332DebugMode_ObjCount++333temp0++334loop335end event336337338// ========================339// Editor Events340// ========================341342event RSDKDraw343temp0 = object.length344temp2 = temp0345temp0 <<= 19346FlipSign(temp0)347temp0 += object.xpos348temp0 += 0x80000349temp1 = 0350while temp1 < temp2351DrawSpriteXY(0, temp0, object.ypos)352temp0 += 0x100000353temp1++354loop355356if temp1 == 0357DrawSprite(0)358end if359end event360361362event RSDKLoad363CheckCurrentStageFolder("Zone01")364if checkResult == true365LoadSpriteSheet("EHZ/Objects.gif")366SpriteFrame(-8, -8, 16, 16, 82, 78)367else368LoadSpriteSheet("MBZ/Objects.gif")369SpriteFrame(-8, -8, 16, 16, 137, 313)370end if371372SetVariableAlias(ALIAS_VAR_PROPVAL, "length")373end event374375376