Path: blob/master/Sonic 2/Scripts/MCZ/PullVine.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Pull Vine Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.pulled1213private alias object.value0 : object.timer14private alias object.value1 : object.startPos.y // Unused15private alias object.value2 : object.originPos.y // Used16private alias object.value3 : object.grabDelay1718private alias object.state : player.state19private alias object.animation : player.animation20private alias object.gravity : player.gravity21private alias object.collisionTop : player.collisionTop22private alias object.xpos : player.xpos23private alias object.ypos : player.ypos24private alias object.xvel : player.xvel25private alias object.yvel : player.yvel26private alias object.speed : player.speed27private alias object.jumpPress : player.jumpPress28private alias object.down : player.down293031// ========================32// Function Declarations33// ========================3435reserve function PullVine_DebugDraw36reserve function PullVine_DebugSpawn373839// ========================40// Function Definitions41// ========================4243private function PullVine_DebugDraw44DrawSprite(1)45end function464748private function PullVine_DebugSpawn49CreateTempObject(TypeName[Pull Vine], 0, object.xpos, object.ypos)50object[tempObjectPos].startPos.y = object[tempObjectPos].ypos51object[tempObjectPos].yvel = 0x2000052object[tempObjectPos].originPos.y = object[tempObjectPos].ypos53end function545556// ========================57// Events58// ========================5960event ObjectUpdate61if object.pulled == true62if object.timer < 8863object.timer++64object.ypos += object.yvel65end if66else67if object.timer > 068object.timer--69object.ypos -= object.yvel70end if71end if72object.pulled = false7374if object.grabDelay > 075object.grabDelay--76end if7778temp0 = object.ypos79temp0 += 0x38000080foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)81if player[currentPlayer].state != Player_State_Static82if player[currentPlayer].down == false83if object.grabDelay == 084if player[currentPlayer].ypos < temp085BoxCollisionTest(C_TOUCH, object.entityPos, -8, 88, 8, 96, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)86else87BoxCollisionTest(C_TOUCH, object.entityPos, -8, 40, 8, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)88end if8990if checkResult == true91if player[currentPlayer].gravity == 192player[currentPlayer].state = Player_State_Static93player[currentPlayer].animation = ANI_HANGING94player[currentPlayer].speed = 095player[currentPlayer].xvel = 096player[currentPlayer].yvel = 097player[currentPlayer].xpos = object.xpos98player[currentPlayer].ypos = player[currentPlayer].collisionTop99FlipSign(player[currentPlayer].ypos)100player[currentPlayer].ypos += 36101player[currentPlayer].ypos <<= 16102player[currentPlayer].ypos += object.ypos103object.pulled |= true104end if105end if106end if107end if108else109BoxCollisionTest(C_TOUCH, object.entityPos, -8, -4, 8, 72, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)110if checkResult == true111if player[currentPlayer].jumpPress == true112#platform: USE_STANDALONE113player[currentPlayer].state = Player_State_Air114#endplatform115#platform: USE_ORIGINS116player[currentPlayer].state = Player_State_Air_NoDropDash117#endplatform118player[currentPlayer].yvel = -0x40000119player[currentPlayer].gravity = GRAVITY_AIR120object.grabDelay = 30 // Half a second before the player can grab the vine again121else122player[currentPlayer].xpos = object.xpos123player[currentPlayer].ypos = player[currentPlayer].collisionTop124FlipSign(player[currentPlayer].ypos)125player[currentPlayer].ypos += 36126player[currentPlayer].ypos <<= 16127player[currentPlayer].ypos += object.ypos128object.pulled |= true129end if130end if131end if132next133134if object.frame == 0135if object.pulled == true136PlaySfx(SfxName[Catch], false)137end if138end if139140object.frame = object.pulled141end event142143144event ObjectDraw145// Edit the sprite frame based on how low (or high) the vine should appear146temp0 = object.ypos147temp0 -= object.originPos.y148temp0 >>= 16149temp1 = 176150temp1 -= temp0151temp2 = -40152temp2 -= temp0153temp0 += 80154EditFrame(0, -12, temp2, 24, temp0, 232, temp1)155156DrawSprite(0)157end event158159160event ObjectStartup161LoadSpriteSheet("MCZ/Objects.gif")162163SpriteFrame(-12, -40, 24, 80, 232, 176)164SpriteFrame(-12, -40, 24, 80, 232, 176) // Debug mode preview frame, otherwise unused165166foreach (TypeName[Pull Vine], arrayPos0, ALL_ENTITIES)167object[arrayPos0].originPos.y = object[arrayPos0].ypos168if object[arrayPos0].propertyValue == 0169// Moving down variant170object[arrayPos0].yvel = 0x20000171else172// Moving up variant173object[arrayPos0].yvel = -0x20000174object[arrayPos0].ypos += 0xB00000175end if176177object[arrayPos0].startPos.y = object[arrayPos0].ypos178object[arrayPos0].pulled = false179next180181SetTableValue(TypeName[Pull Vine], DebugMode_ObjCount, DebugMode_TypesTable)182SetTableValue(PullVine_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)183SetTableValue(PullVine_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)184DebugMode_ObjCount++185end event186187188// ========================189// Editor Events190// ========================191192event RSDKEdit193if editor.returnVariable == true194switch editor.variableID195case EDIT_VAR_PROPVAL // property value196checkResult = object.propertyValue197break198199case 0 // pull direction200checkResult = object.propertyValue201checkResult &= 1202break203204end switch205else206switch editor.variableID207case EDIT_VAR_PROPVAL // property value208object.propertyValue = editor.variableValue209break210211case 0 // pull direction212object.propertyValue = editor.variableValue213object.propertyValue &= 1214break215216end switch217end if218end event219220221event RSDKDraw222// TODO: maybe something about offsetting the sprite for the up variant, in order to make it closer to how it appears in-game223DrawSprite(0)224end event225226227event RSDKLoad228LoadSpriteSheet("MCZ/Objects.gif")229SpriteFrame(-12, -40, 24, 80, 232, 176)230231AddEditorVariable("pullDir")232SetActiveVariable("pullDir")233AddEnumVariable("down", 0)234AddEnumVariable("up" , 1)235end event236237238