5 #define VR_SETUP 1 // (BOTH) setup vehicle data
6 #define VR_THINK 2 // (SERVER) logic to run every frame
7 #define VR_DEATH 3 // (SERVER) called when vehicle dies
8 #define VR_PRECACHE 4 // (BOTH) precaches models/sounds used by this vehicle
9 #define VR_ENTER 5 // (SERVER) called when a player enters this vehicle
10 #define VR_SPAWN 6 // (SERVER) called when the vehicle re-spawns
11 #define VR_IMPACT 7 // (SERVER) called when a vehicle hits something
12 #define VR_HUD 8 // (CLIENT) logic to run every frame
15 entity get_vehicleinfo(int id);
22 const int VHF_ISVEHICLE = 2; /// Indicates vehicle
23 const int VHF_HASSHIELD = 4; /// Vehicle has shileding
24 const int VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates
25 const int VHF_HEALTHREGEN = 16; /// Vehicles health regenerates
26 const int VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates
27 const int VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage
28 const int VHF_MOVE_GROUND = 128; /// Vehicle moves on gound
29 const int VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound
30 const int VHF_MOVE_FLY = 512; /// Vehicle is airborn
31 const int VHF_DMGSHAKE = 1024; /// Add random velocity each frame if health < 50%
32 const int VHF_DMGROLL = 2048; /// Add random angles each frame if health < 50%
33 const int VHF_DMGHEADROLL = 4096; /// Add random head angles each frame if health < 50%
34 const int VHF_MULTISLOT = 8192; /// Vehicle has multiple player slots
35 const int VHF_PLAYERSLOT = 16384; /// This ent is a player slot on a multi-person vehicle
38 // entity properties of vehicleinfo:
39 .int vehicleid; // VEH_...
40 .string netname; // short name
41 .string vehicle_name; // human readable name
42 .int(int) vehicle_func; // v_...
43 .string mdl; // currently a copy of the model
44 .string model; // full name of model
45 .string head_model; // full name of tur_head model
46 .string hud_model; // cockpit model
47 .string tag_head; // tur_head model tag
48 .string tag_hud; // hud model tag
49 .string tag_view; // cockpit model tag
50 .int() PlayerPhysplug; // player physics mod
52 .vector mins, maxs; // vehicle hitbox size
54 // other useful macros
55 #define VEH_ACTION(vehicletype,mrequest) (get_vehicleinfo(vehicletype)).vehicle_func(mrequest)
56 #define VEH_NAME(vehicletype) (get_vehicleinfo(vehicletype)).vehicle_name
58 // =====================
59 // Vehicle Registration
60 // =====================
62 int v_null(int dummy);
63 void register_vehicle(int id, int(int) 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);
64 void register_vehicles_done();
66 const int VEH_MAXCOUNT = 24;
71 #define REGISTER_VEHICLE_2(id,func,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname) \
74 void RegisterVehicles_##id() \
76 VEH_LAST = (id = VEH_FIRST + VEH_COUNT); \
78 register_vehicle(id,func,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname); \
80 ACCUMULATE_FUNCTION(RegisterVehicles, RegisterVehicles_##id)
82 #define REGISTER_VEHICLE(id,func,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname) \
83 REGISTER_VEHICLE_2(VEH_##id,v_null,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname)
85 #define REGISTER_VEHICLE(id,func,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname) \
86 REGISTER_VEHICLE_2(VEH_##id,func,vehicleflags,min_s,max_s,modelname,headmodelname,hudmodelname,headtag,hudtag,viewtag,shortname,vname)
91 #undef REGISTER_VEHICLE
92 ACCUMULATE_FUNCTION(RegisterVehicles, register_vehicles_done);