inside mohaa, jumpxy is implemented by doing some basic calculations on "how much should we add to the player's velocity" then adding these calculations to the player's velocity.
to make it feel real, sv_gravity (ie gravity force) is used.
here's how it's done in opm:
void Player::JumpXY
(
Event *ev
)
{
float forwardmove;
float sidemove;
float distance;
float time;
float speed;
forwardmove = ev->GetFloat( 1 );
sidemove = ev->GetFloat( 2 );
speed = ev->GetFloat( 3 );
velocity = yaw_forward * forwardmove - yaw_left * sidemove;
distance = velocity.length();
velocity *= speed / distance;
time = distance / speed;
velocity[ 2 ] = sv_gravity->integer * time * 0.5f;
airspeed = distance;
// make sure the player leaves the ground
client->ps.walking = qfalse;
}
here's an equivalent morpheus script:
jumpxy local.player local.forwardmove local.sidemove local.speed:
local.yaw_forward = angles_toforward(local.player.angles[1]);
local.yaw_left = angles_toleft(local.player.angles[1]);
local.yaw_forward = vector_scale(local.yaw_forward, local.forwardmove);
local.yaw_left = vector_scale(local.yaw_left, local.sidemove);
local.player.velocity = local.yaw_forward - local.yaw_left;
local.distance = vector_length(local.player.velocity);
local.player.velocity = vector_scale(local.player.velocity, local.speed / local.distance);
local.time = local.distance / local.speed;
local.gravity = int(getcvar("sv_gravity"));
local.player.velocity[2] = local.gravity * local.time * 0.5;
end
there's an odd part tho,
Code:
// make sure the player leaves the ground
client->ps.walking = qfalse;
this might be a fix for the crash, but idk, try the script to see if it crashes or smth.