Hurricane Harold
Veteran X
Don't see "=(ir)= Vengeance". Only a couple of the "Vengeance Server" variety.
yeah.. medium flies better than lightAmadeu5 said:Light armor uses energy too rapidly, it's just not worth taking over the medium.
JimBodkins said:Get the server and client files, install them.
Get this http://gate.chms.net/files/Vengeance_LAN.bat and put it into Gamedata and run it.
I dont think there are any servers currently running this. ZOD is busy at the moment. I'm sure it will start up again when he is available again.
Rooster128 said:Alrighty. I really wanna get this mod working but I'm an idiot when it comes to moving files around and such. Without sounding like a hearthrob, what am I supposed to go to get this thing running and get on the server? Are the servers on the front page still up?
function Player::moveGrappleSwingLoop(%player, %followObj)
{
if(!isObject(%player))
return;
if(isEventPending(%player.grappleSchedule))
cancel(%player.grappleSchedule);
if(isObject(%player.rope))
%player.rope.delete();
// Stop if they have un-grappled
if(%player.isHooked == false)
return;
if(%player.getState() !$= "Dead")
{
// Can't quite grapple to a non-existent object, can you?
if(!isObject(%followObj)) {
// If the object got destroyed then immediately disengage
%player.disengageGrapple();
return;
}
%SwingPos = VectorAdd(%followObj.getPosition(), VectorScale(%followObj.getVelocity(), $grapplingHook::scheduleTime / 1000));
%vel = VectorSub(%followObj.getVelocity(), %player.getVelocity());
%pos = %player.getPosition();
%rad = VectorSub(%SwingPos, %pos);
%dist = VectorLen(%rad);
%radVel = VectorProject(%vel, %rad);
// Ugly vector math beyond this point, keep out if you don't know what you're doing
if (%dist > %player.grappleLength && %dist > %player.StretchLength && !%player.StartingGrapple
&& VectorDist(%SwingPos, VectorAdd(%pos, VectorScale(%vel, $grappleHook::scheduleTime / 1000))) > %player.grappleLength) {
%tanVel = VectorProject(%vel, VectorCross(%rad, VectorCross(%rad, %vel)));
%mass = %player.getDataBlock().mass;
%force = mAbs(%dist * %radVel * %mass / %player.grappleLength);
%tanStress = %tanVel * %tanVel * %mass / %dist;
%value = %player.stretchLength / %player.GrappleLength * (%tanStress + %force);
//echo(%player.StretchLength / %player.grappleLength);
// Break the line if there's too much stress on it
if (%value > 10000 * $GrappleHook::RopeStrength
|| %player.StretchLength > 2.2 * %player.GrappleLength) {
%player.LineIsBroken = true;
%player.disengageGrapple();
}
else {
%player.StretchLength = %dist;
%targetMass = %followObj.getDatablock().mass;
%totalMass = %mass + %targetMass;
%vec = VectorScale(VectorNormalize(%rad), %force);
%player.ApplyImpulse(%player.getPosition(), VectorScale(%vec, %targetmass/%totalMass));
%followObj.applyImpulse(%SwingPos, VectorScale(%vec, -%mass / %totalMass));
echo("************" NL "force:" SPC %force NL
"total force:" SPC VectorLen(VectorScale(%vec, %targetmass/%totalMass)) + VectorLen(VectorScale(%vec, %mass/%totalMass)));
}
}
%player.StartingGrapple = false;
// Create the rope
%player.rope = new TargetProjectile() {
datablock = GrappleBeam;
sourceSlot = 0;
//sourceObject = %player;
initialPosition = %player.getMuzzlePoint(0);
initialDirection = %vec;
};
// Add it to the MissionCleanup Simgroup
MissionCleanup.add(%player.rope);
%player.grappleSchedule = %player.schedule($GrappleHook::ScheduleTime, "moveGrappleSwingLoop", %followObj);
}
}
function Player::disengageGrapple(%player)
{
// Un-Grapple the player
%player.isHooked = false;
// If we were clumsy and broke the line then play a sound
if (%player.LineIsBroken) {
serverPlay3D(GrappleLineBreakSound, %player.getTransform());
%player.LineIsBroken = false;
}
if(isObject(%player.rope))
%player.rope.delete();
if(isEventPending(%player.grappleSchedule))
cancel(%player.grappleSchedule);
}