-#ifndef VEHICLES_ALL_H
-#define VEHICLES_ALL_H
+#pragma once
-#if defined(SVQC)
- #include "sv_vehicles.qh"
-#elif defined(CSQC)
- #include "cl_vehicles.qh"
-#endif
-
-
-// vehicle requests
-const int VR_SETUP = 1; // (BOTH) setup vehicle data
-const int VR_THINK = 2; // (SERVER) logic to run every frame
-const int VR_DEATH = 3; // (SERVER) called when vehicle dies
-const int VR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this vehicle
-const int VR_ENTER = 5; // (SERVER) called when a player enters this vehicle
-const int VR_SPAWN = 6; // (SERVER) called when the vehicle re-spawns
-const int VR_IMPACT = 7; // (SERVER) called when a vehicle hits something
-const int VR_HUD = 8; // (CLIENT) logic to run every frame
-
-// vehicle spawn flags (need them here for common registrations)
-const int VHF_ISVEHICLE = 2; /// Indicates vehicle
-const int VHF_HASSHIELD = 4; /// Vehicle has shileding
-const int VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates
-const int VHF_HEALTHREGEN = 16; /// Vehicles health regenerates
-const int VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates
-const int VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage
-const int VHF_MOVE_GROUND = 128; /// Vehicle moves on gound
-const int VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound
-const int VHF_MOVE_FLY = 512; /// Vehicle is airborn
-const int VHF_DMGSHAKE = 1024; /// Add random velocity each frame if health < 50%
-const int VHF_DMGROLL = 2048; /// Add random angles each frame if health < 50%
-const int VHF_DMGHEADROLL = 4096; /// Add random head angles each frame if health < 50%
-const int VHF_MULTISLOT = 8192; /// Vehicle has multiple player slots
-const int VHF_PLAYERSLOT = 16384; /// This ent is a player slot on a multi-person vehicle
-
-// functions:
-entity get_vehicleinfo(float id);
-
-// fields:
-.entity tur_head;
-
-
-// entity properties of vehicleinfo:
-.int vehicleid; // VEH_...
-.string netname; // short name
-.string vehicle_name; // human readable name
-.int(int) vehicle_func; // v_...
-.string mdl; // currently a copy of the model
-.string model; // full name of model
-.string head_model; // full name of tur_head model
-.string hud_model; // cockpit model
-.string tag_head; // tur_head model tag
-.string tag_hud; // hud model tag
-.string tag_view; // cockpit model tag
-.int() PlayerPhysplug; // player physics mod
-.int spawnflags;
-.vector mins, maxs; // vehicle hitbox size
-
-// other useful macros
-#define VEH_ACTION(vehicletype,mrequest) (get_vehicleinfo(vehicletype)).vehicle_func(mrequest)
-#define VEH_NAME(vehicletype) (get_vehicleinfo(vehicletype)).vehicle_name
+#include "vehicle.qh"
-// =====================
-// Vehicle Registration
-// =====================
+REGISTRY(Vehicles, BITS(4))
+#define Vehicles_from(i) _Vehicles_from(i, VEH_Null)
+REGISTER_REGISTRY(Vehicles)
+REGISTRY_CHECK(Vehicles)
-void RegisterVehicles();
-const int VEH_MAXCOUNT = 24;
-entity vehicle_info[VEH_MAXCOUNT], vehicle_info_first, vehicle_info_last;
-int VEH_COUNT;
const int VEH_FIRST = 1;
-#define VEH_LAST (VEH_FIRST + VEH_COUNT - 1)
-/** If you register a new vehicle, make sure to add it to all.inc */
-#define REGISTER_VEHICLE(id, class) REGISTER(RegisterVehicles, VEH, vehicle_info, VEH_COUNT, id, vehicleid, NEW(class))
-#include "vehicle.qh"
-#define REGISTER_VEHICLE_SIMPLE(id, func, vehicleflags, min_s, max_s, modelname, headmodelname, hudmodelname, headtag, hudtag, viewtag, shortname, vname) \
- REGISTER_VEHICLE(id, Vehicle) { \
- this.netname = shortname; \
- this.vehicle_name = vname; \
- this.vehicle_func = func; \
- this.mdl = modelname; \
- this.spawnflags = vehicleflags; \
- this.mins = min_s; \
- this.maxs = max_s; \
- this.model = modelname; \
- this.head_model = headmodelname; \
- this.hud_model = hudmodelname; \
- this.tag_head = headtag; \
- this.tag_hud = hudtag; \
- this.tag_view = viewtag; \
- } \
- REGISTER_INIT(VEH, id)
-REGISTER_REGISTRY(RegisterVehicles)
+#define VEH_LAST (Vehicles_COUNT - 1)
+#define REGISTER_VEHICLE(id, inst) REGISTER(Vehicles, VEH, id, vehicleid, inst)
-REGISTER_VEHICLE(NULL, Vehicle) {
- this.vehicleid = 0; // you can recognize dummies by this
- this.netname = "";
- this.vehicle_name = "Vehicle";
- this.vehicle_func = v_null;
- this.mdl = "";
- this.mins = '-0 -0 -0';
- this.maxs = '0 0 0';
- this.model = "";
- this.head_model = "";
- this.hud_model = "";
-}
+#if defined(SVQC)
+ #include "sv_vehicles.qh"
+#elif defined(CSQC)
+ #include "cl_vehicles.qh"
+#endif
-#include "all.inc"
+REGISTER_VEHICLE(Null, NEW(Vehicle));
-#endif
+#include "vehicle/_mod.inc"