]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/vehicles/vehicles.qc
New vehicle system based on weapons system
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / vehicles / vehicles.qc
1 #include "all.qh"
2
3 // VEHICLE PLUGIN SYSTEM
4 entity vehicle_info[VEH_MAXCOUNT];
5 entity dummy_vehicle_info;
6
7 void vehicles_common_initialize()
8 {
9 #ifdef CSQC
10         precache_model("models/vehicles/bomblet.md3");
11         precache_model("models/vehicles/clusterbomb.md3");
12         precache_model("models/vehicles/clusterbomb_fragment.md3");
13         precache_model("models/vehicles/rocket01.md3");
14         precache_model("models/vehicles/rocket02.md3");
15
16         precache_sound ("vehicles/alarm.wav");
17         precache_sound ("vehicles/alarm_shield.wav");
18 #endif // CSQC
19 #ifdef SVQC
20         precache_sound("onslaught/ons_hit2.wav");
21         precache_sound("onslaught/electricity_explode.wav");
22
23         addstat(STAT_HUD, AS_INT, hud);
24         addstat(STAT_VEHICLESTAT_HEALTH,  AS_INT, vehicle_health);
25         addstat(STAT_VEHICLESTAT_SHIELD,  AS_INT, vehicle_shield);
26         addstat(STAT_VEHICLESTAT_ENERGY,  AS_INT, vehicle_energy);
27
28         addstat(STAT_VEHICLESTAT_AMMO1,   AS_INT, vehicle_ammo1);
29         addstat(STAT_VEHICLESTAT_RELOAD1, AS_INT, vehicle_reload1);
30
31         addstat(STAT_VEHICLESTAT_AMMO2,   AS_INT, vehicle_ammo2);
32         addstat(STAT_VEHICLESTAT_RELOAD2, AS_INT, vehicle_reload2);
33 #endif // SVQC
34 }
35
36 void register_vehicle(float id, float(float) func, float vehicleflags, vector min_s, vector max_s, string modelname, string headmodelname, string hudmodelname, string headtag, string hudtag, string viewtag, string shortname, string vname)
37 {
38         entity e;
39         vehicle_info[id - 1] = e = spawn();
40         e.classname = "vehicle_info";
41         e.vehicleid = id;
42         e.netname = shortname;
43         e.vehicle_name = vname;
44         e.vehicle_func = func;
45         e.mdl = modelname;
46         e.spawnflags = vehicleflags;
47         e.mins = min_s;
48         e.maxs = max_s;
49         e.model = modelname;
50         e.head_model = headmodelname;
51         e.hud_model = hudmodelname;
52         e.tag_head = headtag;
53         e.tag_hud = hudtag;
54         e.tag_view = viewtag;
55         
56         #ifndef MENUQC
57         vehicles_common_initialize();
58         func(VR_PRECACHE);
59         #endif
60 }
61 float v_null(float dummy) { return 0; }
62 void register_vehicles_done()
63 {
64         dummy_vehicle_info = spawn();
65         dummy_vehicle_info.classname = "vehicle_info";
66         dummy_vehicle_info.vehicleid = 0; // you can recognize dummies by this
67         dummy_vehicle_info.netname = "";
68         dummy_vehicle_info.vehicle_name = "Vehicle";
69         dummy_vehicle_info.vehicle_func = v_null;
70         dummy_vehicle_info.mdl = "";
71         dummy_vehicle_info.mins = '-0 -0 -0';
72         dummy_vehicle_info.maxs = '0 0 0';
73         dummy_vehicle_info.model = "";
74         dummy_vehicle_info.head_model = "";
75         dummy_vehicle_info.hud_model = "";
76 }
77 entity get_vehicleinfo(float id)
78 {
79         entity m;
80         if(id < VEH_FIRST || id > VEH_LAST)
81                 return dummy_vehicle_info;
82         m = vehicle_info[id - 1];
83         if(m)
84                 return m;
85         return dummy_vehicle_info;
86 }