#define MIN_JUMP_HEIGHT [1] #define MAX_JUMP_HEIGHT [8] #define JUMP_HEIGHT [2] static-var jumping, moving, jump_angle1, jump_angle2; // I'd rather use more than one arg but more than one corrupts stuff apparently Jump(jump_height) { var jump_speed; jumping = TRUE; jump_height = get MAX(MIN_JUMP_HEIGHT, jump_height); jump_speed = (get MAX(MIN_JUMP_HEIGHT, get CURRENT_SPEED)) * 4; move base to y-axis jump_height speed jump_speed; turn base to x-axis jump_angle1 speed <120>; wait-for-move base along y-axis; wait-for-turn base around x-axis; move base to y-axis 0 speed jump_speed; turn base to x-axis jump_angle2 speed <120>; wait-for-move base along y-axis; wait-for-turn base around x-axis; turn base to x-axis 0 speed <90>; wait-for-turn base around x-axis; jumping = FALSE; } AnimationControl() { var height1, height2; while (TRUE) { if (moving) { height1 = get GROUND_HEIGHT((get PIECE_XZ(sensor7))); //front object, part of the root, not the body which holds all the pieces, at y=0, z=16 height2 = get GROUND_HEIGHT((get PIECE_XZ(sensor8))); //rear object, part of the root, not the body which holds all the pieces, at y=0, z=-16 // front > rear+[2] => goes up if (!jumping AND (height1 > height2 + JUMP_HEIGHT)) { jump_angle1 = <-10>; jump_angle2 = <5>; start-script Jump(height1 - height2); } // front < rear-[2] => goes down else if(!jumping AND (height1 < height2 - JUMP_HEIGHT)) { jump_angle1 = <5>; jump_angle2 = <-10>; start-script Jump(height1 - height2); } } sleep blah; } } StartMoving() { moving = TRUE; } StopMoving() { moving = FALSE; } Create() { moving = FALSE; jumping = FALSE; start-script AnimationControl(); }