Path: blob/master/Sonic 2/Scripts/WFZ/PullChain.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Pull Chain Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.isRetracting1213private alias object.value0 : object.extendPos14private alias object.value1 : object.startPos.y15private alias object.value2 : object.originPos.y16private alias object.value3 : object.grabDelay17private alias object.value4 : object.length1819// Player Aliases20private alias object.state : player.state21private alias object.xpos : player.xpos22private alias object.ypos : player.ypos23private alias object.xvel : player.xvel24private alias object.yvel : player.yvel25private alias object.speed : player.speed26private alias object.gravity : player.gravity27private alias object.animation : player.animation28private alias object.collisionTop : player.collisionTop29private alias object.jumpPress : player.jumpPress3031private alias object.value17 : debugMode.currentSelection3233// ========================34// Function Declarations35// ========================3637reserve function PullChain_DebugDraw38reserve function PullChain_DebugSpawn394041// ========================42// Static Values43// ========================4445private value PullChain_sheetX = 046private value PullChain_sheetY = 047private value PullChain_startDebugID = 0484950// ========================51// Function Definitions52// ========================5354private function PullChain_DebugDraw55DrawSprite(1)56end function575859private function PullChain_DebugSpawn60temp0 = debugMode[0].currentSelection61temp0 -= PullChain_startDebugID62CreateTempObject(TypeName[Pull Chain], 0, object.xpos, object.ypos)63object[tempObjectPos].originPos.y = object[tempObjectPos].ypos6465GetBit(temp1, temp0, 0)66if temp1 == 067object[tempObjectPos].length = 8068else69object[tempObjectPos].length = 4870end if7172GetBit(temp2, temp0, 1)73if temp2 == 074object[tempObjectPos].yvel = 0x2000075object[tempObjectPos].ypos -= 0xF000076else77object[tempObjectPos].yvel = -0x2000078if temp1 == 079object[tempObjectPos].ypos += 0x91000080else81object[tempObjectPos].ypos += 0x51000082end if83end if8485object[tempObjectPos].startPos.y = object[tempObjectPos].ypos86end function878889// ========================90// Events91// ========================9293event ObjectUpdate94if object.isRetracting == true95if object.extendPos < object.length96object.extendPos++97object.ypos += object.yvel98end if99else100if object.extendPos > 0101object.extendPos--102object.ypos -= object.yvel103end if104end if105106object.isRetracting = false107if object.grabDelay > 0108object.grabDelay--109end if110111temp0 = object.ypos112temp0 += 0x380000113foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)114if player[currentPlayer].state != Player_State_Static115if object.grabDelay == 0116if player[currentPlayer].ypos < temp0117BoxCollisionTest(C_TOUCH, object.entityPos, -8, 70, 8, 96, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)118else119BoxCollisionTest(C_TOUCH, object.entityPos, -8, 32, 8, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)120end if121122if checkResult == true123player[currentPlayer].state = Player_State_Static124player[currentPlayer].animation = ANI_HANGING125player[currentPlayer].speed = 0126player[currentPlayer].xvel = 0127player[currentPlayer].yvel = 0128player[currentPlayer].xpos = object.xpos129player[currentPlayer].ypos = player[currentPlayer].collisionTop130FlipSign(player[currentPlayer].ypos)131player[currentPlayer].ypos += 36132player[currentPlayer].ypos <<= 16133player[currentPlayer].ypos += object.ypos134object.isRetracting |= true135end if136end if137else138BoxCollisionTest(C_TOUCH, object.entityPos, -8, -4, 8, 72, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)139if checkResult == true140if player[currentPlayer].jumpPress == true141#platform: USE_STANDALONE142player[currentPlayer].state = Player_State_Air143#endplatform144#platform: USE_ORIGINS145player[currentPlayer].state = Player_State_Air_NoDropDash146#endplatform147player[currentPlayer].yvel = -0x40000148player[currentPlayer].gravity = 1149object.grabDelay = 30150else151player[currentPlayer].xpos = object.xpos152player[currentPlayer].ypos = player[currentPlayer].collisionTop153FlipSign(player[currentPlayer].ypos)154player[currentPlayer].ypos += 36155player[currentPlayer].ypos <<= 16156player[currentPlayer].ypos += object.ypos157object.isRetracting |= true158end if159end if160end if161next162163if object.frame == 0164if object.isRetracting == true165PlaySfx(SfxName[Catch], false)166end if167end if168169// Not Actually used...170object.frame = object.isRetracting171end event172173174event ObjectDraw175temp0 = object.ypos176temp0 -= object.originPos.y177temp0 >>= 16178temp1 = PullChain_sheetY179temp1 -= temp0180temp2 = -40181temp2 -= temp0182temp0 += 80183EditFrame(0, -12, temp2, 24, temp0, PullChain_sheetX, temp1)184185DrawSprite(0)186end event187188189event ObjectStartup190CheckCurrentStageFolder("Zone11")191if checkResult == true192LoadSpriteSheet("SCZ/Objects.gif")193SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook - #0194SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook (Again) - #1195PullChain_sheetX = 236196PullChain_sheetY = 176197else198LoadSpriteSheet("MBZ/Objects.gif")199SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook - #0200SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook (Again) - #1201PullChain_sheetX = 901202PullChain_sheetY = 358203PullChain_sheetY += 176 // weird way to do it, but sure204end if205206foreach (TypeName[Pull Chain], arrayPos0, ALL_ENTITIES)207object[arrayPos0].originPos.y = object[arrayPos0].ypos208GetBit(temp1, object[arrayPos0].propertyValue, 0)209if temp1 == false210object[arrayPos0].length = 80211else212object[arrayPos0].length = 48213end if214215GetBit(temp0, object[arrayPos0].propertyValue, 4)216if temp0 == false217object[arrayPos0].yvel = 0x20000218object[arrayPos0].ypos -= 0x200000219else220object[arrayPos0].yvel = -0x20000221if temp1 == false222object[arrayPos0].ypos += 0x800000223else224object[arrayPos0].ypos += 0x400000225end if226object[arrayPos0].originPos.y -= 0x110000227end if228229object[arrayPos0].startPos.y = object[arrayPos0].ypos230object[arrayPos0].propertyValue = 0231next232233temp0 = 0234PullChain_startDebugID = DebugMode_ObjCount235while temp0 < 4236SetTableValue(TypeName[Pull Chain], DebugMode_ObjCount, DebugMode_TypesTable)237SetTableValue(PullChain_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)238SetTableValue(PullChain_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)239DebugMode_ObjCount++240temp0++241loop242end event243244245// ========================246// Editor Events247// ========================248249event RSDKEdit250if editor.returnVariable == true251switch editor.variableID252case EDIT_VAR_PROPVAL // property value253checkResult = object.propertyValue254break255256case 0 // type257GetBit(checkResult, object.propertyValue, 0)258break259260case 1 // direction261GetBit(checkResult, object.propertyValue, 4)262break263264end switch265else266switch editor.variableID267case EDIT_VAR_PROPVAL // property value268object.propertyValue = editor.variableValue269break270271case 0 // type272CheckNotEqual(editor.variableValue, false)273SetBit(object.propertyValue, 0, checkResult)274break275276case 1 // direction277CheckNotEqual(editor.variableValue, false)278SetBit(object.propertyValue, 4, checkResult)279break280281end switch282end if283end event284285286event RSDKDraw287temp7 = object.ypos288object.originPos.y = temp7289290GetBit(temp1, object.propertyValue, 0)291GetBit(temp0, object.propertyValue, 4)292if temp0 == false293object.ypos -= 0x200000294else295if temp1 == false296object.ypos += 0x800000297else298object.ypos += 0x400000299end if300object.originPos.y -= 0x110000301end if302303temp0 = object.ypos304temp0 -= object.originPos.y305temp0 >>= 16306temp1 = PullChain_sheetY307temp1 -= temp0308temp2 = -40309temp2 -= temp0310temp0 += 80311EditFrame(0, -12, temp2, 24, temp0, PullChain_sheetX, temp1)312313DrawSprite(0)314315object.ypos = temp7316end event317318319event RSDKLoad320CheckCurrentStageFolder("Zone11")321if checkResult == true322LoadSpriteSheet("SCZ/Objects.gif")323SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook - #0324SpriteFrame(-12, -40, 24, 65, 236, 191) // The Hook (Again) - #1325PullChain_sheetX = 236326PullChain_sheetY = 176327else328LoadSpriteSheet("MBZ/Objects.gif")329SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook - #0330SpriteFrame(-12, -40, 24, 65, 901, 358) // The Hook (Again) - #1331PullChain_sheetX = 901332PullChain_sheetY = 358333PullChain_sheetY += 176334end if335336AddEditorVariable("length")337SetActiveVariable("length")338AddEnumVariable("Long", 0)339AddEnumVariable("Short", 1)340341AddEditorVariable("direction")342SetActiveVariable("direction")343AddEnumVariable("Down", 0)344AddEnumVariable("Up", 1)345end event346347348