Path: blob/master/Sonic 2/Scripts/HPZ/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.endPos2122private alias object.value8 : object.stoodSegment1C23private alias object.value9 : object.stoodSegment1L24private alias object.value10 : object.stoodSegment1R25private alias object.value11 : object.stoodSegment2C26private alias object.value12 : object.stoodSegment2L27private alias object.value13 : object.stoodSegment2R28private alias object.value14 : object.lastStoodSegment1C29private alias object.value15 : object.lastStoodSegment2C30private alias object.value16 : object.stoodSegment1AnimTimer31private alias object.value17 : object.stoodSegment2AnimTimer32private alias object.value18 : object.stoodSegment1FrameC33private alias object.value19 : object.stoodSegment1FrameLR34private alias object.value20 : object.stoodSegment2FrameC35private alias object.value21 : object.stoodSegment2FrameLR36private alias object.value22 : object.segmentID3738// Player Aliases39private alias object.state : player.state40private alias object.xpos : player.xpos41private alias object.ypos : player.ypos42private alias object.yvel : player.yvel43private alias object.gravity : player.gravity44private alias object.collisionBottom : player.collisionBottom45private alias object.floorSensorC : player.floorSensorC46private alias object.floorSensorL : player.floorSensorL47private alias object.floorSensorR : player.floorSensorR4849private alias object.value17 : debugMode.currentSelection5051// ========================52// Function Declarations53// ========================5455reserve function Bridge_DebugDraw56reserve function Bridge_DebugSpawn57reserve function Bridge_drawSegment5859// ========================60// Static Values61// ========================6263private value Bridge_startDebugID = 06465// ========================66// Tables67// ========================6869private table Bridge_segmentCFrameTable702, 2, 2, 2, 1, 0, 0, 171end table7273private table Bridge_segmentLRFrameTable741, 1, 1, 1, 0, 0, 0, 075end table767778// ========================79// Function Definitions80// ========================8182private function Bridge_DebugDraw83temp0 = debugMode[0].currentSelection84temp0 -= Bridge_startDebugID85temp2 = temp086temp0 <<= 1987FlipSign(temp0)88temp0 += object.xpos89temp0 += 0x800009091temp1 = 092while temp1 < temp293DrawSpriteXY(0, temp0, object.ypos)94temp0 += 0x10000095temp1++96loop9798if temp1 == 099DrawSprite(0)100end if101end function102103104private function Bridge_DebugSpawn105temp0 = debugMode[0].currentSelection106temp0 -= Bridge_startDebugID107CreateTempObject(TypeName[Bridge], temp0, object.xpos, object.ypos)108109object[tempObjectPos].startPos = temp0110object[tempObjectPos].startPos <<= 19111object[tempObjectPos].endPos = object[tempObjectPos].startPos112FlipSign(object[tempObjectPos].startPos)113object[tempObjectPos].startPos += object[tempObjectPos].xpos114object[tempObjectPos].endPos += object[tempObjectPos].xpos115object[tempObjectPos].playerID = -1116end function117118119private function Bridge_drawSegment120object.frame = 0121122if object.segmentID == object.stoodSegment1L123object.frame = object.stoodSegment1FrameLR124end if125126if object.segmentID == object.stoodSegment1R127object.frame = object.stoodSegment1FrameLR128end if129130if object.segmentID == object.stoodSegment2L131object.frame = object.stoodSegment2FrameLR132end if133134if object.segmentID == object.stoodSegment2R135object.frame = object.stoodSegment2FrameLR136end if137138if object.segmentID == object.stoodSegment1C139object.frame = object.stoodSegment1FrameC140end if141142if object.segmentID == object.stoodSegment2C143object.frame = object.stoodSegment2FrameC144end if145146DrawSpriteXY(object.frame, temp1, temp2)147end function148149150// ========================151// Events152// ========================153154event ObjectUpdate155if object.activePlayerCount > 0156if object.timer < 128157object.timer += 8158end if159else160if object.timer > 0161object.timer -= 8162object.playerID = -1163else164object.depression = 0165end if166end if167object.bridgeDepth = object.depression168object.bridgeDepth *= object.timer169object.bridgeDepth >>= 7170object.activePlayerCount = 0171172object.stoodSegment1C = -5 // current player stood segment173object.stoodSegment2C = -5 // new player stood segment174175foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)176if player[currentPlayer].state != Player_State_LedgePullUp177if player[currentPlayer].xpos > object.startPos178if player[currentPlayer].xpos < object.endPos179if currentPlayer == object.playerID180object.stoodPos = player[currentPlayer].xpos181object.stoodPos -= object.startPos182temp0 = object.stoodPos183temp0 >>= 8184temp1 = object.endPos185temp1 -= object.startPos186temp2 = temp1187temp2 >>= 16188temp0 /= temp2189Sin(object.depression, temp0)190temp1 >>= 13191object.depression *= temp1192temp0 = object.ypos193temp0 -= 0x300000194if player[currentPlayer].ypos > temp0195if player[currentPlayer].yvel >= 0196temp2 = player[currentPlayer].collisionBottom197FlipSign(temp2)198temp2 <<= 16199temp2 += object.bridgeDepth200temp2 -= 0x80000201object.activePlayerCount++202player[currentPlayer].ypos = object.ypos203player[currentPlayer].ypos += temp2204player[currentPlayer].gravity = GRAVITY_GROUND205player[currentPlayer].yvel = 0206player[currentPlayer].floorSensorL = 1207player[currentPlayer].floorSensorC = 1208player[currentPlayer].floorSensorR = 1209object.stoodSegment1C = object.stoodPos210object.stoodSegment1C >>= 20211else212object.playerID = -2213end if214end if215else216if player[currentPlayer].yvel >= 0217temp0 = player[currentPlayer].xpos218temp0 -= object.startPos219if temp0 > object.stoodPos220temp0 = object.endPos221temp0 -= player[currentPlayer].xpos222temp3 = object.endPos223temp3 -= object.startPos224temp3 -= object.stoodPos225temp1 = temp0226temp1 <<= 7227temp1 /= temp3228else229temp1 = temp0230temp1 <<= 7231temp1 /= object.stoodPos232end if233Sin(temp2, temp1)234temp2 *= object.bridgeDepth235temp2 >>= 9236temp2 -= 0x80000237if player[currentPlayer].yvel < 0x8000238temp3 = temp2239temp3 >>= 16240temp4 = temp3241temp3 -= 8242else243temp3 = temp2244temp3 >>= 16245temp4 = temp3246temp4 += 8247end if248249BoxCollisionTest(C_TOUCH, object.entityPos, -0x400, temp3, 0x400, temp4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)250if checkResult == true251object.activePlayerCount++252player[currentPlayer].ypos = player[currentPlayer].collisionBottom253FlipSign(player[currentPlayer].ypos)254player[currentPlayer].ypos <<= 16255player[currentPlayer].ypos += object.ypos256player[currentPlayer].ypos += temp2257player[currentPlayer].floorSensorL = true258player[currentPlayer].floorSensorC = true259player[currentPlayer].floorSensorR = true260object.stoodSegment2C = player[currentPlayer].xpos261object.stoodSegment2C -= object.startPos262object.stoodSegment2C >>= 20263if currentPlayer == 0264if object.playerID < 4265if object.playerID > 0266object.stoodPos = player[currentPlayer].xpos267object.stoodPos -= object.startPos268temp0 = object.stoodPos269temp0 >>= 8270temp1 = object.endPos271temp1 -= object.startPos272temp2 = temp1273temp2 >>= 16274temp0 /= temp2275Sin(object.depression, temp0)276temp1 >>= 13277object.depression *= temp1278object.bridgeDepth = object.depression279object.bridgeDepth *= object.timer280object.bridgeDepth >>= 7281end if282283object.playerID = 0284if player[currentPlayer].yvel < 256285object.timer = 128286end if287end if288else289if object.playerID == -1290object.playerID = currentPlayer291if player[currentPlayer].yvel < 256292object.timer = 128293end if294end if295296if object.playerID == -2297object.playerID = currentPlayer298end if299end if300301player[currentPlayer].gravity = GRAVITY_GROUND302player[currentPlayer].yvel = 0303end if304end if305end if306else307if currentPlayer == object.playerID308object.playerID = -2309object.timer = 32310end if311end if312else313if currentPlayer == object.playerID314object.playerID = -2315object.timer = 32316end if317end if318end if319next320321object.stoodSegment1L = object.stoodSegment1C322object.stoodSegment1L--323object.stoodSegment1R = object.stoodSegment1C324object.stoodSegment1R++325326object.stoodSegment2L = object.stoodSegment2C327object.stoodSegment2L--328object.stoodSegment2R = object.stoodSegment2C329object.stoodSegment2R++330331if object.lastStoodSegment1C != object.stoodSegment1C332object.lastStoodSegment1C = object.stoodSegment1C333object.stoodSegment1AnimTimer = 0334end if335336if object.lastStoodSegment2C != object.stoodSegment2C337object.lastStoodSegment2C = object.stoodSegment2C338object.stoodSegment2AnimTimer = 0339end if340341temp0 = object.stoodSegment1AnimTimer342temp0 >>= 2343GetTableValue(object.stoodSegment1FrameC, temp0, Bridge_segmentCFrameTable)344GetTableValue(object.stoodSegment1FrameLR, temp0, Bridge_segmentLRFrameTable)345object.stoodSegment1AnimTimer++346object.stoodSegment1AnimTimer &= 31347348temp0 = object.stoodSegment2AnimTimer349temp0 >>= 2350GetTableValue(object.stoodSegment2FrameC, temp0, Bridge_segmentCFrameTable)351GetTableValue(object.stoodSegment2FrameLR, temp0, Bridge_segmentLRFrameTable)352object.stoodSegment2AnimTimer++353object.stoodSegment2AnimTimer &= 31354end event355356357event ObjectDraw358object.segmentID = 0359temp0 = 0360temp1 = object.startPos361temp1 += 0x80000362temp4 = 0x80000363temp5 = object.stoodPos364temp5 >>= 20365while temp0 < temp5366temp3 = temp4367temp3 <<= 7368temp3 /= object.stoodPos369Sin(temp2, temp3)370temp2 *= object.bridgeDepth371temp2 >>= 9372temp2 += object.ypos373CallFunction(Bridge_drawSegment)374temp1 += 0x100000375temp4 += 0x100000376temp0++377object.segmentID++378loop379380temp2 = object.bridgeDepth381temp2 += object.ypos382CallFunction(Bridge_drawSegment)383temp1 += 0x100000384temp0++385386temp5 = object.endPos387temp5 -= object.startPos388temp5 -= object.stoodPos389temp1 = object.endPos390temp1 -= 0x80000391temp4 = 0x80000392393object.segmentID = object.length394object.segmentID--395while temp0 < object.length396temp3 = temp4397temp3 <<= 7398temp3 /= temp5399Sin(temp2, temp3)400temp2 *= object.bridgeDepth401temp2 >>= 9402temp2 += object.ypos403CallFunction(Bridge_drawSegment)404temp1 -= 0x100000405temp4 += 0x100000406temp0++407object.segmentID--408loop409end event410411412event ObjectStartup413LoadSpriteSheet("HPZ/Objects.gif")414SpriteFrame(-8, -8, 16, 16, 181, 73)415SpriteFrame(-8, -8, 16, 16, 181, 90)416SpriteFrame(-8, -8, 16, 16, 181, 107)417418foreach (TypeName[Bridge], arrayPos0, ALL_ENTITIES)419object[arrayPos0].startPos = object[arrayPos0].length420object[arrayPos0].startPos <<= 19421object[arrayPos0].endPos = object[arrayPos0].startPos422FlipSign(object[arrayPos0].startPos)423object[arrayPos0].startPos += object[arrayPos0].xpos424object[arrayPos0].endPos += object[arrayPos0].xpos425object[arrayPos0].playerID = -1426next427428temp0 = 0429Bridge_startDebugID = DebugMode_ObjCount430Bridge_startDebugID--431while temp0 < 16432SetTableValue(TypeName[Bridge], DebugMode_ObjCount, DebugMode_TypesTable)433SetTableValue(Bridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)434SetTableValue(Bridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)435DebugMode_ObjCount++436temp0++437loop438end event439440441event RSDKDraw442temp0 = object.length443temp2 = temp0444temp0 <<= 19445FlipSign(temp0)446temp0 += object.xpos447temp0 += 0x80000448449temp1 = 0450while temp1 < temp2451DrawSpriteXY(0, temp0, object.ypos)452temp0 += 0x100000453temp1++454loop455456if temp1 == 0457DrawSprite(0)458end if459end event460461462event RSDKLoad463LoadSpriteSheet("HPZ/Objects.gif")464SpriteFrame(-8, -8, 16, 16, 181, 73)465SpriteFrame(-8, -8, 16, 16, 181, 90)466SpriteFrame(-8, -8, 16, 16, 181, 107)467468SetVariableAlias(ALIAS_VAR_PROPVAL, "length")469end event470471472