I think you could make another animation where the rope is pulled towards the plunger. Then you could move the robot along with it and it will seem like he is moving up.
I was thinking about this method and I think there is a problem with the swinging part. The rope could have different lengths troughout the course. I mean, sometimes the ceiling is lower maybe and that would mean the swinging rope should be shorter.
I thought about 4 ways to deal with it:
1)You could maybe use ScaleEntity on the rope. However, scaling it too much might deform it too badly.
2)If the ceiling is closed, you could move the rope through it to hide a part of it.
3)You could also make a few rope animations with different sizes.
4)I don't know how to create a rope in a 3d editor, but maybe you could build it up out of several parts, sort of like a chain. Then using ShowEntity/HideEntity you could hide parts of the chain, to make the rope longer/shorter.
----edit-----
Okay, I was still thinking about it when I realised the maths are not that difficult when you want just a simple swinging rope. You can build the rope up out of segments and then for each segment, add it's angle to the previous ones:
;-----------------------------------------------------------------------------------------------------
; Globals
;-----------------------------------------------------------------------------------------------------
Global swing# = 5.0 ;how much swing increases throughout the rope
Global time# = 0.0 ;time value for rope swing
Dim rope(30) ;array for rope segments
;-----------------------------------------------------------------------------------------------------
; setup
;-----------------------------------------------------------------------------------------------------
;setup graphics
Graphics3D 800, 600, 0, 2
SetBuffer BackBuffer()
;create 30 rope segments
For i = 0 To 29
;create rope segment
rope(i) = CreateCylinder(3, 0)
;resize mesh
FitMesh rope(i), -0.1, 0, -0.1, 0.2, 1, 0.2
;rotate mesh
RotateMesh rope(i), 90, 0, 0
Next
;create player
player = CreateCube()
;setup camera
camera = CreateCamera()
MoveEntity camera, 0, -25, -75
CameraZoom camera, 2.4
;-----------------------------------------------------------------------------------------------------
; main loop
;-----------------------------------------------------------------------------------------------------
Repeat
;increase swing time
time# = time# + 1
;determine swing angle
ang# = Sin(time#) * swing#
;x/y offset ropes
x# = 0
y# = 0
;calculate positions for all rope segments
For i = 0 To 29
;place this rope at x,y
PositionEntity rope(i), x, y, 0
;calculate new position
x# = x# + Sin(ang# * i)
y# = y# - Cos(ang# * i)
Next
;place player at the last x,y
PositionEntity player, x, y, 0
;rotate all segments to point at each other
For i = 0 To 28
PointEntity rope(i), rope(i + 1)
Next
;rotate player to point at final rope segment
PointEntity player, rope(29)
;render
RenderWorld()
Flip
;until ESC is pressed
Until KeyHit(1)
End