ChangeState problem

fck I want to program a scene where Ego walks in the water and gets knee deeper ext. I used a control area in the Roomscript which trigger the egoInWaterScript. All works fine, but once the ChangeState in activated, I cannot reset it. So, if Ego walks in the water again, the scene does not repeats itself.


(instance RoomScript of Script
(properties)
(method (doit)
(super:doit())
(if(== (send gEgo:onControl()) ctlYELLOW)
(send gRoom:setScript(egoInWaterScript))
)//if
)//method


(instance egoInWaterScript of Script
(properties)
(method (changeState newState)
(super:changeState(newState))
=state newState
(switch (state)
(case 0
(send gEgo:loop(4)) //in water loop
(send gEgo:setMotion(NULL)) //stop walking
(send gEgo:cel(1)) //knee deep
=cycles 5
)//case 0

(case 1
(send gEgo:cel(2)) //waste deep
)//case 1
)//switch
)//method
)//instance

Any help on this?

Another question: How can I make Ego to jump onto a box? If you just position him on top of the box, the view priorities hide legs behind the box and this creates the wrong visual impression.
fck Hi Guys! The solution is very simple! For other people, like myself still trying to master SCI, here is the solution:

Do not call in the doit() function a separate script. Change the code to be something like this:

(if(==(send gEgo:onControl()) ctlYELLOW)
(send gEgo:view(300))
)(else

(if(<>(send gEgo:onControl()) ctlYELLOW)
(send gEgo:view(0))
)//if
)//else

View 300 is a view of Ego swimming in the 4 directions.
View 0 is the default walking view.

You would typically call a script with a ChangeState method if you want to set up a scene where Ego is drowning, then you want to print some messages and lastly call the dying scene.

Any expert out that could advise on the "jump on box problem" - Please!!! It take hours for a beginner to sort it out these things on your own!