1 registered members (AndrewAMD),
692
guests, and 1
spider. |
Key:
Admin,
Global Mod,
Mod
|
|
|
newton custom car script
#122644
04/10/07 09:07
04/10/07 09:07
|
Joined: Dec 2006
Posts: 65
andy_1984
OP
Junior Member
|
OP
Junior Member
Joined: Dec 2006
Posts: 65
|
this is my real first big attempt in months at trying to do somthing, spent a good few hours on this last night and i know its not the best. the steering is prety bad with a steering wheel were it turns realy fast and cant get a nice smooth motion and turning faster the more the wheel is turned which im updating tonight and theres some weird bug that makes a6 crash when i change from a higher gear into gear 0 "Neutral". other than that im prety proud and have a better understanding of scripting, watch out for me ![](/ubbthreads/images/graemlins/wink.gif) alot of code borrowed from elsewhere and credit will be given i just cant remember who but ill find out. Replace newtons Vehicle_playground wdl with code below modifications: 1. rear View mirror 2. simple gear system (maths needs tweaking) 3. engine sounds 4. braking sounds when at high speeds no sound at lower speeds 5. brake now does not reverse you must select reverse gear and use accelerator 6. simple steering wheel intigration (steering needs refined) 7. 1st person camera (cockpit cam) Todo: 1. driver and passanger side mirrors 2. virtual steering wheel 3. better steering with steering wheel 4. better internal camera 5. better gear and speedo display 6. map gear change to shifters on steering wheel or buttons Quote:
var video_mode=8; var video_depth=32;
entity* p_vehicle;
include <sky.wdl>; include <newton.wdl>; include <newtonScript2.wdl>; include <newtonVehicle.wdl>;
var d3d_alphadepth=32; var d3d_anisotropy=4; var clip_size=0; var enginenoise; var screech; var Gtorque=0; // 0 - neutral var gear_num; var omega; var resistance; var steer; var torque; var throttle; var steer_x; string s_level=<vehicle_playground.wmb>; string s_levelcls=<vehicle_playground.cls>; string newtonLevel_cls=s_levelcls;
font Myfont, <ackfont.pcx>, 6,9; //The Font sound engine_wav = <engine.wav>; sound tire_screech = <tire_screech.wav>; //////////////////////////////////////////////////////////////////////////////////////////// panel steeringwheel_display {
pos_x = 640; pos_y = 380; layer = 10; digits = 120,15,8,myfont,1,steer_x; flags = overlay, refresh, visible; }
panel gear_display {
pos_x = 640; pos_y = 370; layer = 10; digits = 120,15,8,myfont,1,gear_num; flags = overlay, refresh, visible; }
panel torque_display {
pos_x = 640; pos_y = 360; layer = 10; digits = 120,15,8,myfont,1,torque; flags = overlay, refresh, visible; }
panel speed_display {
pos_x = 640; pos_y = 350; layer = 10; digits = 120,15,8,myfont,1,omega; flags = overlay, refresh, visible; }
panel throttle_display {
pos_x = 640; pos_y = 340; layer = 10; digits = 120,15,8,myfont,1,throttle; flags = overlay, refresh, visible; }
view rear_view { layer = 1; pos_x = 400; pos_y = 0; size_x = 400; size_y = 100; arc = 45; aspect = 1; offset_x = 0; offset_y = 0; ambient = 10; fog = 10; flags = visible; }
function update_views() { rear_view.genius = my; rear_view.arc = -80; rear_view.x = my.x; rear_view.y = my.y; rear_view.z = my.z; rear_view.pan = my.pan + 180; rear_view.roll = -my.roll; rear_view.tilt = -my.tilt +6; }
starter move_camera() { // camera.arc=70; camera.clip_near=20; camera.clip_far=24000;
while(!p_vehicle){wait(1);}
while(1) { //trying proc late to see if it resovles camera lag proc_late(); //havnt tested with this function yet camera.x = p_vehicle.x - 10 * cos(p_vehicle.pan); camera.y = p_vehicle.y - 10 * sin(p_vehicle.pan); camera.z = p_vehicle.z + 18; camera.pan = p_vehicle.pan; camera.tilt = p_vehicle.tilt; camera.roll = p_vehicle.roll; wait(1); } }
function VehicleBeginEvent(vehicleConst) { var p; p = 0; }
// use this function to apply feeback to GS // you could play a sound effect base on the max tyre slide value // you could also play the engine sound, etc function VehicleEndEvent(vehicleConst) { var p; p = 0; }
// use the function to control the tyre handling // basically this function apply torque to the tyre, and set the eteering angle. function VehicleTireEvent(vehicleConst, tyreIndex) { // set the steer angle steer = NewtonGetTyreSteerParam (vehicleConst, tyreIndex); steer = steer + (my.carSteerTorque - steer) * 0.1; NewtonSetTyreSteerParam (vehicleConst, tyreIndex, steer);
// coeficienty of friction contant for arcade type of game // play with this to change the vihaviuor of the car NewtonSetTyreLateralFrictionCoef (vehicleConst, tyreIndex, 0.7); NewtonSetTyreLongituFrictionCoef (vehicleConst, tyreIndex, 0.8);
// if (you.is_PoweredWheel) { torque = my.carEngineTorque; if (torque != 0) { resistance = my.car_maxToque * NewtonGetTyreRadius (vehicleConst, tyreIndex) / my.car_topSpeed; } else {
if(throttle > 2) || (key_s) { resistance = 0.15 * NewtonGetTyreInertia (vehicleConst, tyreIndex); if(omega>=35) // change this so that its sensitive to pedal, fully pressed for emergency stop { screech = ent_playsound (p_vehicle, tire_screech, 30); } } else{ resistance = 0.002 * NewtonGetTyreInertia (vehicleConst, tyreIndex); } }
omega = NewtonGetTyreOmega (vehicleConst, tyreIndex); torque = torque - resistance * omega; NewtonSetTyreTorque (vehicleConst, tyreIndex, torque); // } }
function VehicleForceEvent(body) { // apply the gravity force ApplyGravityForceEvent(body); // vehicle are always active NewtonSetBodyAutoActiveState (body, 0); }
action NewtonVehicle { var car; p_vehicle = my; NewtonCreateVehicle (wood_material, VehicleTireEvent, VehicleBeginEvent, VehicleEndEvent); dll_handle = newtonHandle; car = NewtonGetBody (my); NewtonSetBodyAutoActiveState (car, 0); NewtonSetBodyActiveState (car, 1); NewtonSetBodyForceAndTorque (car, VehicleForceEvent); enginenoise = ent_playloop (p_vehicle, engine_wav, 30);
while (1) {
snd_tune (enginenoise, 50, omega + 30, 0); my.carEngineTorque = 0.0; my.carSteerTorque = 0.0; throttle = joy_raw.y+2;
if(throttle < 0) && (gear_num > 0 ) { my.carEngineTorque = -throttle; //minus because the pedals appear reversed relative to real pedals } else{ if(gear_num==-1) && (throttle < 0) { my.carEngineTorque = throttle; } }
steer_x = int(-joy_raw.x/10-0); //played with this, still same effect no matter how large
my.carSteerTorque = steer_x; //same as above (organized)
if(key_r) { gear_num = -1; } if(key_0) { Gtorque = 0; my.car_topSpeed = 0; gear_num = 0; } if(key_1) { Gtorque = 500; gear_num=1; my.car_topSpeed = 700; } if(key_2) { Gtorque = 500; gear_num=2; my.car_topSpeed = 800; } if(key_3) { Gtorque = 600; gear_num=3; my.car_topSpeed = 900; } if(key_4) { Gtorque = 700; gear_num=4; my.car_topSpeed = 1000; } if(key_5) { Gtorque = 800; gear_num=5; my.car_topSpeed = 1100; }
//Keyboard Control if(key_a) {
my.carSteerTorque = 1.0; } if(key_d) { my.carSteerTorque = -1.0; } if(key_w) { if(gear_num==0) { snd_tune (enginenoise, 50, 200, 0); // tune the engine sound } if(gear_num == -1) { my.carEngineTorque = -my.car_maxToque * 0.5; //i wanted to keep reverse speed realy slow }else{ my.carEngineTorque = Gtorque; //my.car_maxToque; } } //key_s (brake/reverse changed to just brake under function VehicleTireEvent)
update_views(); wait(1); } }
function main() { mat_model.albedo=15; wait(3); level_load(s_level); wait(1); dll_handle=newtonHandle; NewtonAddMap(s_level,0); }
Last edited by andy_1984; 04/10/07 10:24.
|
|
|
Re: newton custom car script
[Re: bstudio]
#122646
04/10/07 10:15
04/10/07 10:15
|
Joined: May 2006
Posts: 398
Bot190
Senior Member
|
Senior Member
Joined: May 2006
Posts: 398
|
it sounds cool! but do you happen to have all the panel graphics and sounds? cause its a pan to go through and make your on sounds, panels are better but still.
Wait, there isn't a "Make My Game Now" button?
|
|
|
Re: newton custom car script
[Re: Bot190]
#122647
04/10/07 10:23
04/10/07 10:23
|
Joined: Dec 2006
Posts: 65
andy_1984
OP
Junior Member
|
OP
Junior Member
Joined: Dec 2006
Posts: 65
|
sounds can be got from the movecar demo by Bill Mc Gonigal http://www.coniserver.net/coni_users/web_users/pirvu/au/scripts/movecar.zipthere are no graphical panels just the font which uses ackfont that can be found somewhere in your 3dgs folder. i would have uploaded a more complete contribution but because im at work im limited to what i can do without being seen
Last edited by andy_1984; 04/10/07 10:28.
|
|
|
Re: newton custom car script
[Re: andy_1984]
#122648
04/10/07 10:39
04/10/07 10:39
|
Joined: May 2006
Posts: 398
Bot190
Senior Member
|
Senior Member
Joined: May 2006
Posts: 398
|
ok i waasn't sure if it used panels or not, casue i say some stuff used to define panels, i didn't look to closely to see if it needed a graphic or not.
Wait, there isn't a "Make My Game Now" button?
|
|
|
|