Path: blob/master/Sonic 2/Scripts/MCZ/HDropBridge.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: H Drop Bridge Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.left.angle12private alias object.value2 : object.right.angle13private alias object.value3 : object.left.x14private alias object.value4 : object.right.x1516private alias 0 : HDROPBRIDGE_CLOSED17private alias 1 : HDROPBRIDGE_OPENING18private alias 2 : HDROPBRIDGE_OPENED1920// Activator Switch Aliases21private alias object.propertyValue : pullSwitch.pulled222324// ========================25// Function Declarations26// ========================2728reserve function HDropBridge_DebugDraw29reserve function HDropBridge_DebugSpawn303132// ========================33// Function Definitions34// ========================3536private function HDropBridge_DebugDraw37temp0 = object.xpos38temp1 = 039temp0 -= 0x38000040while temp1 < 841DrawSpriteXY(0, temp0, object.ypos)42temp0 += 0x10000043temp1++44loop45end function464748private function HDropBridge_DebugSpawn49CreateTempObject(TypeName[H Drop Bridge], 0, object.xpos, object.ypos)50object[tempObjectPos].drawOrder = 451object[tempObjectPos].left.angle = 052object[tempObjectPos].right.angle = 25653object[tempObjectPos].left.x = object[tempObjectPos].xpos54object[tempObjectPos].left.x -= 0x38000055object[tempObjectPos].right.x = object[tempObjectPos].xpos56object[tempObjectPos].right.x += 0x38000057end function585960// ========================61// Events62// ========================6364event ObjectUpdate65switch object.state66case HDROPBRIDGE_CLOSED67// object[-1] is a switch of either the normal or vine variety68if pullSwitch[-1].pulled == true69object.state++70PlaySfx(SfxName[Flapping Door], false)71if object.priority != PRIORITY_XBOUNDS_DESTROY72object.priority = PRIORITY_ACTIVE73end if74end if7576foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)77BoxCollisionTest(C_SOLID, object.entityPos, -64, -8, 64, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)78next79break8081case HDROPBRIDGE_OPENING82if object.left.angle < 12883object.left.angle += 884object.right.angle -= 885else86object.state++87end if88// [Fallthrough]89case HDROPBRIDGE_OPENED90temp6 = object.xpos91temp7 = object.ypos9293temp0 = 094temp1 = 095while temp0 < 496Cos(object.xpos, object.left.angle)97object.xpos *= temp198object.xpos += object.left.x99Sin(object.ypos, object.left.angle)100object.ypos *= temp1101object.ypos += temp7102foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)103BoxCollisionTest(C_SOLID, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)104next105temp0++106temp1 += 0x800107loop108109temp0 = 0110temp1 = 0111while temp0 < 4112Cos(object.xpos, object.right.angle)113object.xpos *= temp1114object.xpos += object.right.x115Sin(object.ypos, object.right.angle)116object.ypos *= temp1117object.ypos += temp7118foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)119BoxCollisionTest(C_SOLID, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)120next121temp0++122temp1 += 0x800123loop124object.xpos = temp6125object.ypos = temp7126break127128end switch129130if object.outOfBounds == true131if object.priority != PRIORITY_XBOUNDS_DESTROY132object.left.angle = 0133object.right.angle = 256134object.state = HDROPBRIDGE_CLOSED135end if136end if137end event138139140event ObjectDraw141// Draw the left 4 pieces first142temp0 = 0143temp1 = 0144while temp0 < 4145Cos(temp2, object.left.angle)146temp2 *= temp1147temp2 += object.left.x148Sin(temp3, object.left.angle)149temp3 *= temp1150temp3 += object.ypos151DrawSpriteXY(0, temp2, temp3)152temp0++153temp1 += 0x800154loop155156// Then draw the right 4 pieces afterwards157temp0 = 0158temp1 = 0159while temp0 < 4160Cos(temp2, object.right.angle)161temp2 *= temp1162temp2 += object.right.x163Sin(temp3, object.right.angle)164temp3 *= temp1165temp3 += object.ypos166DrawSpriteXY(0, temp2, temp3)167temp0++168temp1 += 0x800169loop170end event171172173event ObjectStartup174LoadSpriteSheet("MCZ/Objects.gif")175176SpriteFrame(-8, -8, 16, 16, 135, 131)177178foreach (TypeName[H Drop Bridge], arrayPos0, ALL_ENTITIES)179object[arrayPos0].drawOrder = 4180object[arrayPos0].left.angle = 0181object[arrayPos0].right.angle = 256182object[arrayPos0].left.x = object[arrayPos0].xpos183object[arrayPos0].left.x -= 0x380000184object[arrayPos0].right.x = object[arrayPos0].xpos185object[arrayPos0].right.x += 0x380000186next187188// Add this object to the debug item list189SetTableValue(TypeName[H Drop Bridge], DebugMode_ObjCount, DebugMode_TypesTable)190SetTableValue(HDropBridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)191SetTableValue(HDropBridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)192DebugMode_ObjCount++193end event194195196// ========================197// Editor Events198// ========================199200event RSDKDraw201temp0 = 0202temp1 = 0203while temp0 < 4204Cos(temp2, 0)205temp2 *= temp1206temp2 += object.xpos207temp2 -= 0x380000208Sin(temp3, 0)209temp3 *= temp1210temp3 += object.ypos211DrawSpriteXY(0, temp2, temp3)212temp0++213temp1 += 0x800214loop215216temp0 = 0217temp1 = 0218while temp0 < 4219Cos(temp2, 256)220temp2 *= temp1221temp2 += object.xpos222temp2 += 0x380000223Sin(temp3, 256)224temp3 *= temp1225temp3 += object.ypos226DrawSpriteXY(0, temp2, temp3)227temp0++228temp1 += 0x800229loop230231if editor.showGizmos == true232editor.drawingOverlay = true233234// Draw a semi-transparent version of how the bridge will look when opened235236object.inkEffect = INK_BLEND237238temp0 = 0239temp1 = 0240while temp0 < 4241Cos(temp2, 128)242temp2 *= temp1243temp2 += object.xpos244temp2 -= 0x380000245Sin(temp3, 128)246temp3 *= temp1247temp3 += object.ypos248DrawSpriteXY(0, FX_INK, temp2, temp3)249temp0++250temp1 += 0x800251loop252253temp0 = 0254temp1 = 0255while temp0 < 4256Cos(temp2, 128)257temp2 *= temp1258temp2 += object.xpos259temp2 += 0x380000260Sin(temp3, 128)261temp3 *= temp1262temp3 += object.ypos263DrawSpriteXY(0, FX_INK, temp2, temp3)264temp0++265temp1 += 0x800266loop267268editor.drawingOverlay = false269end if270end event271272273event RSDKLoad274LoadSpriteSheet("MCZ/Objects.gif")275SpriteFrame(-8, -8, 16, 16, 135, 131)276277SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")278end event279280281