User mods, screenshots & videos > Tracked vehicles
Panther G rigged!
murkz:
Snorri's amazing skins really do look superb in Outerra
--- Code: ---
//vehicle script file
//see http://xtrac.outerra.com/index.fcgi/wiki/vehicle for example and documentation
var turret,mantlet,barrel;
const MaxTurretXSpeed = 10; //deg/s
const MaxTurretYSpeed = 20; //deg/s
const MaxTurretXAccel = 120;//deg/s^2
const MaxTurretYAccel = 160;//deg/s^2
const MinTurretAngle = -8; //in deg gun depression
const TurretAngleSpan = 18; //in deg gun elevation
const TurningBoost = 0.4; //boost coefficient to help with turning at speed
const TurnForceCoef = 0.8; //portion of engine force for neutral turns
const RollingFriction = 1000;//force that needs to be overcome to get wheels turning
const EF = 25000.0; //engine force
const BF = 20000.0; //braking force
const EFr = 0.02; //engine force reduction coef with speed
const maxkmh = 40; //top speed
function radians(v){
return v*Math.PI/180.0;
}
//invoked only the first time the model is loaded, or upon reload
function init_chassis(){
var wheelparam = {
radius: 0.50,
width: 0.20,
suspension_max: 0.25,
suspension_min: -0.25,
//ride height
suspension_stiffness: 3.9,
damping_compression: 0.5,
damping_relaxation: 0.4,
slip: 4,
slip_lateral_coef: 0.3,
roll_influence: 0.1
//rotation: -1
};
this.add_wheel('wheel1', wheelparam);
this.add_wheel('wheel2', wheelparam);
this.add_wheel('wheel3', wheelparam);
this.add_wheel('wheel4', wheelparam);
this.add_wheel('wheel5', wheelparam);
this.add_wheel('wheel6', wheelparam);
this.add_wheel('wheel7', wheelparam);
this.add_wheel('wheel8', wheelparam);
this.add_wheel('wheel9', wheelparam);
this.add_wheel('wheel10', wheelparam);
this.add_wheel('wheel11', wheelparam);
this.add_wheel('wheel12', wheelparam);
this.add_wheel('wheel13', wheelparam);
this.add_wheel('wheel14', wheelparam);
this.add_wheel('wheel15', wheelparam);
this.add_wheel('wheel16', wheelparam);
this.load_sound("panther_eng_starter.ogg");
this.load_sound("panther_trans_01.ogg");
this.add_sound_emitter("turret");
var geom = this.get_geomob(0);
turret = geom.get_joint('turret');
mantlet = geom.get_joint('Mantlet');
barrel = geom.get_joint('barrel');
return {mass:11500, com:{z:0.5,y:0.5}, steering:2.0, steering_ecf:60, centering: 100, centering_ecf:20,
turretx_speed: radians(MaxTurretXSpeed),
turrety_speed: MaxTurretYSpeed/TurretAngleSpan,
turretx_accel: radians(MaxTurretXAccel),
turrety_accel: MaxTurretYAccel/TurretAngleSpan,
};
}
//invoked for each new instance of the vehicle
function init_vehicle(){
this.set_fps_camera_pos({x:-0.5,y:0.00,z:3.40});
this.snd = this.sound();
this.geom = this.get_geomob(0);
this.turx = this.tury = 0.0;
}
//invoked when engine starts or stops
function engine(start){
if(start){
this.snd.play(0, 0, false, false);
this.snd.play(0, 1, true, true);
}
else
this.snd.stop(0);
this.started = start;
}
//handle extra actions
function action(k,v,dt)
{
switch(k){
case ATurretX: this.geom.rotate_joint_orig(turret, v, {x:0,y:0,z:-1}); break;
case ATurretY: this.geom.rotate_joint_orig(mantlet, radians(TurretAngleSpan*0.5*(1+v)+MinTurretAngle), {x:1,y:0,z:0}); break;
}
}
const forceloss = 1.0 / (EFr*maxkmh + 1);
//invoked each frame to handle the inputs and animate the model
function update_frame(dt, engine, brake, steering)
{
var kmh = this.max_tire_speed()*3.6;
//reduce engine force with speed (hack)
var esign = engine<0 ? -1 : 1;
engine = EF*Math.abs(engine);
var force = (esign>0) == (kmh>=0)
? 1.0/(EFr*Math.abs(kmh) + 1)
: 1.0;
force -= forceloss;
force = esign*Math.max(0.0, Math.min(force, 1.0));
engine *= force;
this.snd.set_pitch(0, 1+0.01*kmh);
//if(steering!=0) engine *= 1.5;
//var el = steering>0 ? 0 : engine;
//var er = steering<0 ? 0 : engine;
var df = EF*TurnForceCoef*force;
var el=engine,er=engine;
var spd = 1 + TurningBoost*this.speed();
if(this.started){
if(steering>0){
el-=spd*df; er+=df;
}
else if(steering<0){
er-=spd*df; el+=df;
}
}
this.wheel_force(-2, el);
this.wheel_force(-3, er);
brake *= BF;
brake += RollingFriction;
this.wheel_brake(-1, brake);
//this.log_inf("L:"+el+" R:"+er+" B:"+brake+" SPD:"+kmh);
//this.geom.rotate_joint_orig(turret, this.turx, {x:0,y:0,z:-1});
//this.geom.rotate_joint_orig(mantlet, this.tury, {x:1,y:0,z:0});
this.animate_wheels();
}
--- End code ---
I would like to thank cameni for the code to make the turret turn, the gun elevate and the tank perform more realistically.
In the model in max, I have left roads wheels as odd numbers and right road wheels as even numbers. The barrel has to be a child of the mantlet and the mantlet a child of the turret.
The pivot for the barrel needs to be moved to the turret end, so it will raise up/down.
http://farm9.staticflickr.com/8545/8708330090_dd69a09077_o.jpg larger pic.
Tiger 1 model by Vexman and skin by Snorri.
Jeff
M7:
Super nice!!!!
Foxiol:
That looks incredible with those textures. Nice job.
ZeosPantera:
I will kill anyone you want for that Tiger 1 with a movable turret..
{anyone}
PytonPago:
--- Quote from: ZeosPantera on May 05, 2013, 12:54:29 am ---I will kill anyone you want for that Tiger 1 with a movable turret..
{anyone}
--- End quote ---
You're better start to train like Leon then. And buying a nice plant to moisture every day. ;D ... fine work ! ... will definitely take some of it for my work later. ;)
Navigation
[0] Message Index
[#] Next page
Go to full version