diff --git a/code/datums/vehicles.dm b/code/datums/vehicles.dm
index 2611e7f5b5..00bdfa1aed 100644
--- a/code/datums/vehicles.dm
+++ b/code/datums/vehicles.dm
@@ -113,3 +113,15 @@
/datum/map_template/interior/uppapc
name = "ZSL-68"
interior_id = "uppapc"
+
+/datum/map_template/interior/humvee
+ name = "Humvee"
+ interior_id = "humvee"
+
+/datum/map_template/interior/humvee/transport
+ name = "Transport Humvee"
+ interior_id = "humvee_transport"
+
+/datum/map_template/interior/humvee/medical
+ name = "Medical Humvee"
+ interior_id = "humvee_medical"
diff --git a/code/modules/vehicles/hardpoints/holder/humvee_turret.dm b/code/modules/vehicles/hardpoints/holder/humvee_turret.dm
new file mode 100644
index 0000000000..e5ca98d61f
--- /dev/null
+++ b/code/modules/vehicles/hardpoints/holder/humvee_turret.dm
@@ -0,0 +1,229 @@
+/obj/item/hardpoint/holder/tank_turret/humvee
+ name = "\improper M34A2-A Multipurpose Turret"
+ desc = "The centerpiece of the tank. Designed to support quick installation and deinstallation of various tank weapon modules. Has inbuilt flare deployment system."
+
+ icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'
+ icon_state = "humveeturret"
+ disp_icon = "humvee"
+ disp_icon_state = "humveeturret"
+ pixel_x = -65
+ pixel_y = -65
+
+ max_clips = 2
+ rotation_windup = 3
+
+ activatable = FALSE
+
+ // big beefy chonk of metal
+ health = 1500
+ damage_multiplier = 0.05
+
+ accepted_hardpoints = list(
+ /obj/item/hardpoint/primary/autocannon/humvee,
+ /obj/item/hardpoint/secondary/grenade_launcher/humvee,
+ )
+
+ hdpt_layer = HDPT_LAYER_TURRET
+ px_offsets = list(
+ "1" = list(0, 4),
+ "2" = list(0, 15),
+ "4" = list(-6, 16),
+ "8" = list(6, 16)
+ )
+
+/obj/item/hardpoint/holder/tank_turret/humvee/update_icon()
+ icon_state = "humveeturret_[(health <= 0)]"
+ overlays.Cut()
+ for(var/obj/item/hardpoint/hardpoint in hardpoints)
+ var/image/image = hardpoint.get_hardpoint_image()
+ overlays += image
+
+/obj/item/hardpoint/holder/tank_turret/humvee/get_tgui_info()
+ var/list/data = list()
+
+ data += list(list( // turret smokescreen data
+ "name" = "M34A2-A Turret Flare Mortar",
+ "health" = health <= 0 ? null : floor(get_integrity_percent()),
+ "uses_ammo" = TRUE,
+ "current_rounds" = ammo.current_rounds / 2,
+ "max_rounds"= ammo.max_rounds / 2,
+ "mags" = LAZYLEN(backup_clips),
+ "max_mags" = max_clips,
+ ))
+
+ for(var/obj/item/hardpoint/H in hardpoints)
+ data += list(H.get_tgui_info())
+
+ return data
+
+/obj/item/hardpoint/primary/autocannon/humvee
+ name = "\improper AC3-E Autocannon"
+ desc = "A primary autocannon for tanks that shoots explosive flak rounds."
+ icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'
+ icon_state = "humveecannon"
+ disp_icon = "humvee"
+ disp_icon_state = "humveecannon"
+ activation_sounds = list('sound/weapons/vehicles/autocannon_fire.ogg')
+
+ health = 2000
+ firing_arc = 75
+
+ ammo = new /obj/item/ammo_magazine/hardpoint/humvee_autocannon
+ max_clips = 3
+
+ angle_muzzleflash = FALSE
+ use_muzzle_flash = TRUE
+ muzzleflash_icon_state = "muzzle_flash"
+
+ muzzle_flash_pos = list(
+ "1" = list(-16, 0),
+ "2" = list(-17, -64),
+ "4" = list(18, -33),
+ "8" = list(-50, -32)
+ )
+
+ px_offsets = list(
+ "1" = list(0, 0),
+ "2" = list(0, 0),
+ "4" = list(0, 0),
+ "8" = list(0, 0)
+ )
+
+ var/list/bullet_px_offsets = list(
+ "1" = list(-16, 0),
+ "2" = list(16, 0),
+ "4" = list(0, 32),
+ "8" = list(0, 0)
+ )
+
+ scatter = 1
+ gun_firemode = GUN_FIREMODE_AUTOMATIC
+ gun_firemode_list = list(GUN_FIREMODE_AUTOMATIC)
+ fire_delay = 4
+
+/obj/item/hardpoint/primary/autocannon/humvee/generate_bullet(mob/user, turf/origin_turf)
+ var/obj/projectile/bullet = new projectile_type(origin_turf, create_cause_data(initial(name), user))
+
+ var/obj/item/hardpoint/holder/holder = loc
+ bullet.process_start_pixel_x = bullet_px_offsets["[holder.dir]"][1]
+ bullet.process_start_pixel_y = bullet_px_offsets["[holder.dir]"][2]
+ bullet.generate_bullet(new ammo.default_ammo)
+
+
+ // Apply bullet traits from gun
+ for(var/entry in traits_to_give)
+ var/list/traits_list
+ // Check if this is an ID'd bullet trait
+ if(istext(entry))
+ traits_list = traits_to_give[entry].Copy()
+ else
+ // Prepend the bullet trait to the list
+ traits_list = list(entry) + traits_to_give[entry]
+ bullet.apply_bullet_trait(traits_list)
+
+ return bullet
+
+/obj/item/ammo_magazine/hardpoint/humvee_autocannon
+ name = "AC3-E Autocannon Magazine"
+ desc = "A 100 round magazine holding 40mm telescoped shells for the AC3-E autocannon."
+ caliber = "40mm"
+ icon_state = "ace_autocannon"
+ w_class = SIZE_LARGE
+ default_ammo = /datum/ammo/bullet/tank/flak/humvee
+ max_rounds = 100
+ gun_type = /obj/item/hardpoint/primary/autocannon/humvee
+
+/datum/ammo/bullet/tank/flak/humvee
+ name = "flak autocannon bullet"
+ icon_state = "autocannon"
+ sound_hit = null
+ sound_armor = null
+ sound_bounce = null
+ damage_falloff = 0
+ flags_ammo_behavior = AMMO_BALLISTIC
+ accurate_range_min = 4
+ ammo_glowing = TRUE
+ bullet_light_color = LIGHT_COLOR_FIRE
+
+ accuracy = HIT_ACCURACY_TIER_8
+ scatter = 0
+ damage = 150
+ damage_var_high = PROJECTILE_VARIANCE_TIER_8
+ penetration = ARMOR_PENETRATION_TIER_7
+ accurate_range = 32
+ max_range = 32
+ shell_speed = AMMO_SPEED_TIER_8
+
+/datum/ammo/bullet/tank/flak/humvee/on_hit_mob(mob/target, obj/projectile/projectile)
+ knockback(target, projectile, 10)
+ playsound(target, "ballistic_hit", 30)
+
+/datum/ammo/bullet/tank/flak/humvee/on_hit_obj(obj/O,obj/projectile/P)
+ return
+
+/datum/ammo/bullet/tank/flak/humvee/on_hit_turf(turf/T,obj/projectile/P)
+ playsound(T, pick(60;"ballistic_miss", 40;"ballistic_bounce"), 65)
+ return
+
+/obj/item/hardpoint/secondary/grenade_launcher/humvee
+ name = "\improper M92T Grenade Launcher"
+ desc = "A magazine fed secondary grenade launcher for tanks that shoots M40 grenades."
+
+ icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'
+ icon_state = "humveelauncher_installed"
+ disp_icon = "humvee"
+ disp_icon_state = "humveelauncher"
+ activation_sounds = list('sound/weapons/handling/m79_shoot.ogg')
+
+ health = 2000
+ firing_arc = 120
+
+ ammo = new /obj/item/ammo_magazine/hardpoint/tank_glauncher
+ max_clips = 4
+
+ angle_muzzleflash = FALSE
+ muzzleflash_icon_state = "muzzle_laser"
+ use_muzzle_flash = TRUE
+
+ px_offsets = list(
+ "1" = list(0, 0),
+ "2" = list(0, 0),
+ "4" = list(0, 0),
+ "8" = list(0, 0)
+ )
+
+ muzzle_flash_pos = list(
+ "1" = list(-27, -28),
+ "2" = list(-5, -37),
+ "4" = list(-12, -19),
+ "8" = list(-21, -42)
+ )
+
+ scatter = 3
+ gun_firemode = GUN_FIREMODE_SEMIAUTO
+ gun_firemode_list = list(
+ GUN_FIREMODE_SEMIAUTO,
+ )
+ fire_delay = 10
+
+/obj/item/hardpoint/secondary/grenade_launcher/humvee/update_icon()
+ if(!ammo || ammo?.current_rounds <= 0)
+ icon_state = "humveelauncher_2"
+ else if(health <= 0)
+ icon_state = "humveelauncher_1"
+ else
+ icon_state = "humveelauncher_0"
+
+/obj/item/ammo_magazine/hardpoint/humvee_glauncher
+ name = "M92T Grenade Launcher Magazine"
+ desc = "A magazine loaded with frag grenades. Used to reload the magazine fed M92T Grenade launcher."
+ caliber = "grenade"
+ icon_state = "glauncher_2"
+ w_class = SIZE_LARGE
+ default_ammo = /datum/ammo/grenade_container/humvee_glauncher
+ max_rounds = 20
+ gun_type = /obj/item/hardpoint/secondary/grenade_launcher/humvee
+
+/datum/ammo/grenade_container/humvee_glauncher
+ nade_type = /obj/item/explosive/grenade/high_explosive/impact/frag
+
diff --git a/code/modules/vehicles/hardpoints/support/humvee_lights.dm b/code/modules/vehicles/hardpoints/support/humvee_lights.dm
new file mode 100644
index 0000000000..a47447d16c
--- /dev/null
+++ b/code/modules/vehicles/hardpoints/support/humvee_lights.dm
@@ -0,0 +1,40 @@
+/obj/item/hardpoint/support/humvee_overhead_lights
+ name = "\improper JTMV Overhead Lights"
+ desc = "Overhead lights for the JTMV. For when you really need to brighten your day."
+ icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'
+
+ icon_state = "overlight"
+ disp_icon = "humvee"
+ disp_icon_state = "overlight"
+
+ slot = HDPT_SUPPORT
+ hdpt_layer = HDPT_LAYER_SUPPORT
+
+ health = 150
+
+ var/light_range_upgrade = 10
+ var/light_power_upgrade = 8
+
+/obj/item/hardpoint/support/humvee_overhead_lights/proc/turn_off_lights()
+ var/obj/vehicle/multitile/humvee_owner = owner
+ if(!istype(humvee_owner))
+ return
+
+ humvee_owner.light_holder.set_light_range(humvee_owner.vehicle_light_range)
+ humvee_owner.light_holder.set_light_power(humvee_owner.vehicle_light_power)
+
+/obj/item/hardpoint/support/humvee_overhead_lights/on_install(obj/vehicle/multitile/vehicle)
+ . = ..()
+ vehicle.light_holder.set_light_range(light_range_upgrade)
+ vehicle.light_holder.set_light_power(light_power_upgrade)
+
+/obj/item/hardpoint/support/humvee_overhead_lights/on_uninstall(obj/vehicle/multitile/vehicle)
+ . = ..()
+ turn_off_lights()
+
+/obj/item/hardpoint/support/humvee_overhead_lights/on_destroy()
+ . = ..()
+ var/obj/vehicle/multitile/humvee_owner = owner
+ if(!istype(humvee_owner))
+ return
+ turn_off_lights()
diff --git a/code/modules/vehicles/hardpoints/wheels/van_wheels.dm b/code/modules/vehicles/hardpoints/wheels/van_wheels.dm
index d693482406..094138a55e 100644
--- a/code/modules/vehicles/hardpoints/wheels/van_wheels.dm
+++ b/code/modules/vehicles/hardpoints/wheels/van_wheels.dm
@@ -27,3 +27,12 @@
health = 1200
move_delay = VEHICLE_SPEED_VERYFAST
+
+/obj/item/hardpoint/locomotion/van_wheels/humvee
+ name = "Humvee tires"
+ icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'
+
+ disp_icon = "humvee"
+ disp_icon_state = "humvee_wheels"
+
+ health = 1200
diff --git a/code/modules/vehicles/humvee/humvee.dm b/code/modules/vehicles/humvee/humvee.dm
new file mode 100644
index 0000000000..e9369c5d1c
--- /dev/null
+++ b/code/modules/vehicles/humvee/humvee.dm
@@ -0,0 +1,384 @@
+
+//Trucks
+//Read the documentation in multitile.dm before trying to decipher this stuff
+
+/obj/vehicle/multitile/humvee
+ name = "M26-JLTV"
+ layer = ABOVE_XENO_LAYER
+
+ icon = 'icons/obj/vehicles/humvee.dmi'
+ icon_state = "humvee_base"
+ pixel_x = -16
+ pixel_y = -16
+
+ bound_width = 64
+ bound_height = 64
+
+ bound_x = 0
+ bound_y = 0
+
+ health = 800
+
+ interior_map = /datum/map_template/interior/humvee
+
+ entrances = list(
+ "left" = list(2, 0),
+ "right" = list(-1, 0),
+ "back_left" = list(1, 2),
+ "back_right" = list(0, 2)
+ )
+
+ vehicle_flags = VEHICLE_CLASS_WEAK
+
+ passengers_slots = 14
+ xenos_slots = 2
+
+ misc_multipliers = list(
+ "move" = 0.5, // fucking annoying how this is the only way to modify speed
+ "accuracy" = 1,
+ "cooldown" = 1
+ )
+
+ movement_sound = 'sound/vehicles/tank_driving.ogg'
+ honk_sound = 'sound/vehicles/honk_2_truck.ogg'
+
+ light_range = 3
+ vehicle_light_range = 6
+
+ dmg_multipliers = list(
+ "all" = 1,
+ "acid" = 1.8,
+ "slash" = 1.1,
+ "bullet" = 0.6,
+ "explosive" = 0.8,
+ "blunt" = 0.8,
+ "abstract" = 1,
+ )
+
+ move_max_momentum = 2.2
+ move_momentum_build_factor = 1.5
+ move_turn_momentum_loss_factor = 0.8
+
+ vehicle_ram_multiplier = VEHICLE_TRAMPLE_DAMAGE_APC_REDUCTION
+
+
+ hardpoints_allowed = list(
+ /obj/item/hardpoint/locomotion/van_wheels/humvee,
+ /obj/item/hardpoint/holder/tank_turret/humvee,
+ )
+
+ req_access = list()
+ req_one_access = list()
+
+ door_locked = FALSE
+
+ var/overdrive_next = 0
+ var/overdrive_cooldown = 15 SECONDS
+ var/overdrive_duration = 3 SECONDS
+ var/overdrive_speed_mult = 0.3 // Additive (30% more speed, adds to 80% more speed)
+
+ var/momentum_loss_on_weeds_factor = 0.2
+
+ move_on_turn = TRUE
+
+ var/list/mobs_under = list()
+ var/image/under_image
+ var/image/normal_image
+
+ var/next_push = 0
+ var/push_delay = 0.5 SECONDS
+
+/obj/vehicle/multitile/humveetank/load_role_reserved_slots()
+ var/datum/role_reserved_slots/RRS = new
+ RRS.category_name = "Crewmen"
+ RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN)
+ RRS.total = 2
+ role_reserved_slots += RRS
+
+/obj/vehicle/multitile/humvee/add_seated_verbs(mob/living/M, seat)
+ if(!M.client)
+ return
+ add_verb(M.client, list(
+ /obj/vehicle/multitile/proc/switch_hardpoint,
+ /obj/vehicle/multitile/proc/get_status_info,
+ /obj/vehicle/multitile/proc/open_controls_guide,
+ /obj/vehicle/multitile/proc/name_vehicle,
+ ))
+ if(seat == VEHICLE_DRIVER)
+ add_verb(M.client, list(
+ /obj/vehicle/multitile/proc/toggle_door_lock,
+ /obj/vehicle/multitile/proc/activate_horn,
+ ))
+ else if(seat == VEHICLE_GUNNER)
+ add_verb(M.client, list(
+ /obj/vehicle/multitile/proc/cycle_hardpoint,
+ /obj/vehicle/multitile/proc/toggle_gyrostabilizer,
+ ))
+
+
+/obj/vehicle/multitile/humvee/remove_seated_verbs(mob/living/M, seat)
+ if(!M.client)
+ return
+ remove_verb(M.client, list(
+ /obj/vehicle/multitile/proc/get_status_info,
+ /obj/vehicle/multitile/proc/open_controls_guide,
+ /obj/vehicle/multitile/proc/name_vehicle,
+ /obj/vehicle/multitile/proc/switch_hardpoint,
+ ))
+ SStgui.close_user_uis(M, src)
+ if(seat == VEHICLE_DRIVER)
+ remove_verb(M.client, list(
+ /obj/vehicle/multitile/proc/toggle_door_lock,
+ /obj/vehicle/multitile/proc/activate_horn,
+ ))
+ else if(seat == VEHICLE_GUNNER)
+ remove_verb(M.client, list(
+ /obj/vehicle/multitile/proc/cycle_hardpoint,
+ /obj/vehicle/multitile/proc/toggle_gyrostabilizer,
+ ))
+
+/obj/vehicle/multitile/humvee/Initialize()
+ . = ..()
+ under_image = image(icon, src, icon_state, layer = BELOW_MOB_LAYER)
+ under_image.alpha = 127
+
+ normal_image = image(icon, src, icon_state, layer = layer)
+
+ icon_state = null
+
+ RegisterSignal(SSdcs, COMSIG_GLOB_MOB_LOGGED_IN, PROC_REF(add_default_image))
+
+ for(var/I in GLOB.player_list)
+ add_default_image(SSdcs, I)
+
+/obj/vehicle/multitile/humvee/relaymove(mob/user, direction)
+ if(user == seats[VEHICLE_DRIVER])
+ return ..()
+
+ if(user != seats[VEHICLE_GUNNER])
+ return FALSE
+
+ var/obj/item/hardpoint/holder/tank_turret/humvee/turret = null
+ for(var/obj/item/hardpoint/holder/tank_turret/humvee/tonkturret in hardpoints)
+ turret = tonkturret
+ break
+ if(!turret)
+ return FALSE
+
+ if(direction == GLOB.reverse_dir[turret.dir] || direction == turret.dir)
+ return FALSE
+
+ turret.user_rotation(user, turning_angle(turret.dir, direction))
+ update_icon()
+
+ return TRUE
+
+/obj/vehicle/multitile/humvee/BlockedPassDirs(atom/movable/mover, target_dir)
+ if(mover in mobs_under) //can't collide with the thing you're buckled to
+ return NO_BLOCKED_MOVEMENT
+
+ if(isliving(mover))
+ var/mob/living/M = mover
+ if(M.mob_flags & SQUEEZE_UNDER_VEHICLES)
+ add_under_van(M)
+ return NO_BLOCKED_MOVEMENT
+
+ if(M.body_position == LYING_DOWN)
+ return NO_BLOCKED_MOVEMENT
+
+ if(M.mob_size >= MOB_SIZE_IMMOBILE && next_push < world.time)
+ if(try_move(target_dir, force=TRUE))
+ next_push = world.time + push_delay
+ return NO_BLOCKED_MOVEMENT
+
+ return ..()
+
+/obj/vehicle/multitile/humvee/pre_movement()
+ if(locate(/obj/effect/alien/weeds) in loc)
+ move_momentum *= momentum_loss_on_weeds_factor
+
+ . = ..()
+
+ for(var/I in mobs_under)
+ var/mob/M = I
+ if(!(M.loc in locs))
+ remove_under_van(M)
+
+/obj/vehicle/multitile/humvee/proc/add_under_van(mob/living/L)
+ if(L in mobs_under)
+ return
+
+ mobs_under += L
+ RegisterSignal(L, COMSIG_PARENT_QDELETING, PROC_REF(remove_under_van))
+ RegisterSignal(L, COMSIG_MOB_LOGGED_IN, PROC_REF(add_client))
+ RegisterSignal(L, COMSIG_MOVABLE_MOVED, PROC_REF(check_under_van))
+
+ if(L.client)
+ add_client(L)
+
+/obj/vehicle/multitile/humvee/proc/remove_under_van(mob/living/L)
+ SIGNAL_HANDLER
+ mobs_under -= L
+
+ if(L.client)
+ L.client.images -= under_image
+ add_default_image(SSdcs, L)
+
+ UnregisterSignal(L, list(
+ COMSIG_PARENT_QDELETING,
+ COMSIG_MOB_LOGGED_IN,
+ COMSIG_MOVABLE_MOVED,
+ ))
+
+/obj/vehicle/multitile/humvee/proc/check_under_van(mob/M, turf/oldloc, direction)
+ SIGNAL_HANDLER
+ if(!(M.loc in locs))
+ remove_under_van(M)
+
+/obj/vehicle/multitile/humvee/proc/add_client(mob/living/L)
+ SIGNAL_HANDLER
+ L.client.images += under_image
+ L.client.images -= normal_image
+
+/obj/vehicle/multitile/humvee/proc/add_default_image(subsystem, mob/M)
+ SIGNAL_HANDLER
+ M.client.images += normal_image
+
+/obj/vehicle/multitile/humvee/Destroy()
+ for(var/I in mobs_under)
+ remove_under_van(I)
+
+ for(var/I in GLOB.player_list)
+ var/mob/M = I
+ M.client.images -= normal_image
+
+ QDEL_NULL(light_holder)
+
+ return ..()
+
+/obj/vehicle/multitile/humvee/attackby(obj/item/O, mob/user)
+ if(user.z != z)
+ return ..()
+
+ if(iswelder(O) && health >= initial(health))
+ if(!HAS_TRAIT(O, TRAIT_TOOL_BLOWTORCH))
+ to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
+ return
+ var/obj/item/hardpoint/H
+ for(var/obj/item/hardpoint/potential_hardpoint in hardpoints)
+ if(potential_hardpoint.health < initial(potential_hardpoint.health))
+ H = potential_hardpoint
+ break
+
+ if(H)
+ H.handle_repair(O, user)
+ update_icon()
+ return
+
+ . = ..()
+
+
+/obj/vehicle/multitile/humvee/handle_click(mob/living/user, atom/A, list/mods)
+ if(mods["shift"] && !mods["alt"])
+ if(overdrive_next > world.time)
+ to_chat(user, SPAN_WARNING("You can't activate overdrive yet! Wait [round((overdrive_next - world.time) / 10, 0.1)] seconds."))
+ return
+
+ misc_multipliers["move"] -= overdrive_speed_mult
+ addtimer(CALLBACK(src, PROC_REF(reset_overdrive)), overdrive_duration)
+
+ overdrive_next = world.time + overdrive_cooldown
+ to_chat(user, SPAN_NOTICE("You activate overdrive."))
+ playsound(src, 'sound/vehicles/overdrive_activate.ogg', 75, FALSE)
+ return
+
+ return ..()
+
+/obj/vehicle/multitile/humvee/proc/reset_overdrive()
+ misc_multipliers["move"] += overdrive_speed_mult
+
+/obj/vehicle/multitile/humvee/get_projectile_hit_boolean(obj/projectile/P)
+ if(src == P.original) //clicking on the van itself will hit it.
+ var/hitchance = P.get_effective_accuracy()
+ if(prob(hitchance))
+ return TRUE
+ return FALSE
+
+/*
+** PRESETS
+*/
+
+/obj/vehicle/multitile/humvee/transport
+ icon = 'icons/obj/vehicles/humvee_transport.dmi'
+
+ interior_map = /datum/map_template/interior/humvee/transport
+
+ hardpoints_allowed = list(/obj/item/hardpoint/locomotion/van_wheels/humvee)
+
+/obj/vehicle/multitile/humvee/medical
+ icon = 'icons/obj/vehicles/humvee_medical.dmi'
+
+ interior_map = /datum/map_template/interior/humvee/medical
+
+ hardpoints_allowed = list(/obj/item/hardpoint/locomotion/van_wheels/humvee)
+
+/*
+** PRESETS SPAWNERS
+*/
+
+/obj/effect/vehicle_spawner/humvee
+ name = "Van Spawner"
+ icon = 'icons/obj/vehicles/humvee.dmi'
+ icon_state = "humvee_base"
+ pixel_x = -16
+ pixel_y = -16
+
+/obj/effect/vehicle_spawner/humvee/Initialize()
+ . = ..()
+ spawn_vehicle()
+ qdel(src)
+
+//PRESET: no hardpoints
+/obj/effect/vehicle_spawner/humvee/spawn_vehicle()
+ var/obj/vehicle/multitile/humvee/VAN = new (loc)
+
+ load_misc(VAN)
+ handle_direction(VAN)
+ VAN.update_icon()
+
+//PRESET: wheels installed
+/obj/effect/vehicle_spawner/humvee/assault/spawn_vehicle()
+ var/obj/vehicle/multitile/humvee/VAN = new (loc)
+
+ load_misc(VAN)
+ load_hardpoints(VAN)
+ handle_direction(VAN)
+ VAN.update_icon()
+
+/obj/effect/vehicle_spawner/humvee/assault/load_hardpoints(obj/vehicle/multitile/humvee/V)
+ V.add_hardpoint(new /obj/item/hardpoint/locomotion/van_wheels/humvee)
+ V.add_hardpoint(new /obj/item/hardpoint/holder/tank_turret/humvee)
+ for(var/obj/item/hardpoint/holder/tank_turret/humvee/turret in V.hardpoints)
+ turret.add_hardpoint(new /obj/item/hardpoint/primary/autocannon/humvee)
+
+/obj/effect/vehicle_spawner/humvee/transport/spawn_vehicle()
+ var/obj/vehicle/multitile/humvee/VAN = new (loc)
+
+ load_misc(VAN)
+ load_hardpoints(VAN)
+ handle_direction(VAN)
+ VAN.update_icon()
+
+/obj/effect/vehicle_spawner/humvee/transport/load_hardpoints(obj/vehicle/multitile/humvee/V)
+ V.add_hardpoint(new /obj/item/hardpoint/locomotion/van_wheels/humvee)
+
+/obj/effect/vehicle_spawner/humvee/medical/spawn_vehicle()
+ var/obj/vehicle/multitile/humvee/VAN = new (loc)
+
+ load_misc(VAN)
+ load_hardpoints(VAN)
+ handle_direction(VAN)
+ VAN.update_icon()
+
+/obj/effect/vehicle_spawner/humvee/medical/load_hardpoints(obj/vehicle/multitile/humvee/V)
+ V.add_hardpoint(new /obj/item/hardpoint/locomotion/van_wheels/humvee)
diff --git a/code/modules/vehicles/humvee/interior.dm b/code/modules/vehicles/humvee/interior.dm
new file mode 100644
index 0000000000..c780db9f60
--- /dev/null
+++ b/code/modules/vehicles/humvee/interior.dm
@@ -0,0 +1,71 @@
+/obj/structure/interior_exit/vehicle/humvee
+ name = "Humvee side door"
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "exit_door"
+ density = FALSE
+
+/obj/structure/interior_exit/vehicle/humvee/left
+ entrance_id = "left"
+ icon_state = "exit_door1"
+ layer = DOOR_OPEN_LAYER
+
+/obj/structure/interior_exit/vehicle/humvee/right
+ entrance_id = "right"
+ alpha = 50
+
+/obj/structure/interior_exit/vehicle/humvee/left2
+ entrance_id = "rear left"
+ icon_state = "exit_door1"
+ layer = DOOR_OPEN_LAYER
+
+/obj/structure/interior_exit/vehicle/humvee/right2
+ entrance_id = "rear right"
+ alpha = 50
+
+/obj/structure/interior_exit/vehicle/humvee/back/left
+ entrance_id = "rear left"
+ icon_state = "carrier_backdoor1"
+
+/obj/structure/interior_exit/vehicle/humvee/back/right
+ entrance_id = "rear right"
+ icon_state = "carrier_backdoor2"
+
+/obj/structure/interior_exit/vehicle/humvee/back/medical/left
+ entrance_id = "rear left"
+ icon_state = "medical_backdoor1"
+
+/obj/structure/interior_exit/vehicle/humvee/back/medical/right
+ entrance_id = "rear right"
+ icon_state = "medical_backdoor2"
+
+/obj/structure/bed/chair/comfy/vehicle/driver/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "car_seat"
+
+/obj/structure/bed/chair/comfy/vehicle/gunner/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "car_seat"
+
+/obj/structure/bed/chair/comfy/vehicle/passager
+ name = "seat"
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "car_seat"
+ unacidable = TRUE
+ unslashable = TRUE
+ can_rotate = FALSE
+
+/obj/structure/prop/vehicle/humvee
+ name = "Humvee chassis"
+
+ icon = 'icons/obj/vehicles/interiors/humvee_chassis.dmi'
+ icon_state = "humvee_chassis"
+ layer = ABOVE_TURF_LAYER
+ mouse_opacity = FALSE
+ density = FALSE
+ opacity = TRUE
+
+/obj/structure/prop/vehicle/humvee/medical
+ icon_state = "humvee_chassis_medical"
+
+/obj/structure/prop/vehicle/humvee/transport
+ icon_state = "humvee_chassis_transport"
diff --git a/code/modules/vehicles/interior/areas.dm b/code/modules/vehicles/interior/areas.dm
index 2a9a6166c7..c1c9ec2c2b 100644
--- a/code/modules/vehicles/interior/areas.dm
+++ b/code/modules/vehicles/interior/areas.dm
@@ -92,3 +92,15 @@
/area/interior/vehicle/uppvan/prisoner
name = "\improper UPP van prisoner interior"
icon_state = "upp_van_prisoner"
+
+/area/interior/vehicle/humvee
+ name = "\improper vehicle interior"
+ icon_state = "apc"
+
+/area/interior/vehicle/humvee/medical
+ name = "\improper vehicle interior"
+ icon_state = "apc"
+
+/area/interior/vehicle/humvee/transport
+ name = "\improper vehicle interior"
+ icon_state = "apc"
diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm
index fdbaf37d1f..5fb5e4a238 100644
--- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm
+++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm
@@ -250,6 +250,8 @@
if (container.handle_mousedrop(user, over_object))
..(over_object)
+/obj/structure/vehicle_locker/med/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
/obj/structure/vehicle_locker/med/verb/remove_surgical_tray()
set name = "Remove Surgical Tray"
diff --git a/code/modules/vehicles/interior/interactable/vendors.dm b/code/modules/vehicles/interior/interactable/vendors.dm
index bacea95efd..de11000dba 100644
--- a/code/modules/vehicles/interior/interactable/vendors.dm
+++ b/code/modules/vehicles/interior/interactable/vendors.dm
@@ -112,6 +112,10 @@
list("Empty Blood Pack", floor(scale * 2), /obj/item/reagent_container/blood, VENDOR_ITEM_REGULAR)
)
+//Humvee version
+/obj/structure/machinery/cm_vending/sorted/medical/blood/vehicle/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+
//----------------------SUPPLY VENDORS--------------------
//Combined vehicle version of req guns and ammo vendors. Starts, basically, empty, but can become a resupply point if marines bother to stock it with ammo and weapons.
diff --git a/code/modules/vehicles/interior/interactable/viewports.dm b/code/modules/vehicles/interior/interactable/viewports.dm
index e6febbe270..8b0aaff58b 100644
--- a/code/modules/vehicles/interior/interactable/viewports.dm
+++ b/code/modules/vehicles/interior/interactable/viewports.dm
@@ -44,3 +44,9 @@
/obj/structure/interior_viewport/terminal/tank
name = "Command & Control Terminal"
desc = "A terminal hooked up to the various sensors of the M579 ADS-C, featuring plenty of flashing buttons and whooping alarms alongside a more rudimentary external-view system."
+
+/obj/structure/interior_viewport/humvee
+ name = "humvee window"
+ desc = "Nothing beats the good old sheet of glass."
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "viewport_door"
diff --git a/code/modules/vehicles/interior/interactable/weapons_loader.dm b/code/modules/vehicles/interior/interactable/weapons_loader.dm
index 872d2906cd..d111943703 100644
--- a/code/modules/vehicles/interior/interactable/weapons_loader.dm
+++ b/code/modules/vehicles/interior/interactable/weapons_loader.dm
@@ -109,3 +109,8 @@
playsound(loc, 'sound/machines/hydraulics_3.ogg', 50)
to_chat(user, SPAN_NOTICE("You reload \the [HP]. Ammo: [SPAN_HELPFUL(HP.ammo.current_rounds)]/[SPAN_HELPFUL(HP.ammo.max_rounds)] | Mags: [SPAN_HELPFUL(LAZYLEN(HP.backup_clips))]/[SPAN_HELPFUL(HP.max_clips)]"))
+
+/obj/structure/weapons_loader/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ density = FALSE
+ opacity = TRUE
diff --git a/code/modules/vehicles/interior/interior_landmarks.dm b/code/modules/vehicles/interior/interior_landmarks.dm
index fe703df088..33ef1d4b99 100644
--- a/code/modules/vehicles/interior/interior_landmarks.dm
+++ b/code/modules/vehicles/interior/interior_landmarks.dm
@@ -128,6 +128,24 @@
qdel(src)
+/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "car_seat"
+ color = "blue"
+
+/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/humvee/on_load(datum/interior/interior)
+ var/obj/structure/bed/chair/comfy/vehicle/gunner/humvee/S = new(loc)
+ S.layer = layer
+ S.vehicle = interior.exterior
+ S.setDir(dir)
+ S.alpha = alpha
+ S.update_icon()
+ S.handle_rotation()
+ S.pixel_x = pixel_x
+ S.pixel_y = pixel_y
+
+ qdel(src)
+
/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor
name = "armor gunner's seat spawner"
icon = 'icons/obj/vehicles/interiors/general.dmi'
@@ -149,6 +167,26 @@
qdel(src)
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "car_seat"
+ color = "red"
+ var/buckling_x = -3
+ var/buckling_y = 1
+
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee/on_load(datum/interior/interior)
+ var/obj/structure/bed/chair/comfy/vehicle/driver/humvee/S = new(loc)
+ S.vehicle = interior.exterior
+ S.required_skill = S.vehicle.required_skill
+ S.setDir(dir)
+ S.update_icon()
+ S.alpha = alpha
+ S.handle_rotation()
+ S.pixel_x = pixel_x
+ S.pixel_y = pixel_y
+
+ qdel(src)
+
/obj/effect/landmark/interior/spawn/vehicle_commander_seat/armor
name = "armor commander's seat spawner"
icon = 'icons/obj/vehicles/interiors/general.dmi'
@@ -278,6 +316,22 @@
qdel(src)
+/obj/effect/landmark/interior/spawn/weapons_loader/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "weapons_loader"
+ color = "#00920c"
+
+/obj/effect/landmark/interior/spawn/weapons_loader/humvee/on_load(datum/interior/interior)
+ var/obj/structure/weapons_loader/humvee/R = new(loc)
+ R.layer = layer
+ R.pixel_x = pixel_x
+ R.pixel_y = pixel_y
+ R.vehicle = interior.exterior
+ R.setDir(dir)
+ R.update_icon()
+
+ qdel(src)
+
//This one spawns armored vehicles version of viewport
/obj/effect/landmark/interior/spawn/interior_viewport
name = "armored vehicle viewport spawner"
@@ -328,15 +382,29 @@
color = "#009cb8"
alpha = 80
-/obj/effect/landmark/interior/spawn/interior_viewport/simple/windshield/on_load(datum/interior/I)
- var/obj/structure/interior_viewport/simple/windshield/V = new(loc)
+/obj/effect/landmark/interior/spawn/interior_viewport/simple/windshield/on_load(datum/interior/interior)
+ var/obj/structure/interior_viewport/simple/windshield/viewport = new(loc)
- V.vehicle = I.exterior
- V.pixel_x = pixel_x
- V.pixel_y = pixel_y
- V.alpha = alpha
- V.icon = icon
+ viewport.vehicle = interior.exterior
+ viewport.pixel_x = pixel_x
+ viewport.pixel_y = pixel_y
+ viewport.alpha = alpha
+ viewport.icon = icon
+ qdel(src)
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ icon_state = "viewport_door"
+
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee/on_load(datum/interior/interior)
+ var/obj/structure/interior_viewport/humvee/viewport = new(loc)
+ viewport.vehicle = interior.exterior
+ viewport.pixel_x = pixel_x
+ viewport.pixel_y = pixel_y
+ viewport.alpha = alpha
+ viewport.icon = icon
+ viewport.icon_state = icon_state
+ viewport.layer = layer
qdel(src)
//AA APC fancy viewport spawner
diff --git a/colonialmarines.dme b/colonialmarines.dme
index e2b70b1e95..9bc1c69802 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -2629,6 +2629,7 @@
#include "code\modules\vehicles\hardpoints\hardpoint_ammo\tow_ammo.dm"
#include "code\modules\vehicles\hardpoints\holder\apc_turret.dm"
#include "code\modules\vehicles\hardpoints\holder\holder.dm"
+#include "code\modules\vehicles\hardpoints\holder\humvee_turret.dm"
#include "code\modules\vehicles\hardpoints\holder\tank_turret.dm"
#include "code\modules\vehicles\hardpoints\holder\van_turret.dm"
#include "code\modules\vehicles\hardpoints\primary\aa_cannon.dm"
@@ -2658,6 +2659,7 @@
#include "code\modules\vehicles\hardpoints\support\antenna.dm"
#include "code\modules\vehicles\hardpoints\support\artillery.dm"
#include "code\modules\vehicles\hardpoints\support\flare.dm"
+#include "code\modules\vehicles\hardpoints\support\humvee_lights.dm"
#include "code\modules\vehicles\hardpoints\support\iwsa.dm"
#include "code\modules\vehicles\hardpoints\support\overdrive.dm"
#include "code\modules\vehicles\hardpoints\support\smokelauncher.dm"
@@ -2667,6 +2669,8 @@
#include "code\modules\vehicles\hardpoints\wheels\locomotion.dm"
#include "code\modules\vehicles\hardpoints\wheels\treads.dm"
#include "code\modules\vehicles\hardpoints\wheels\van_wheels.dm"
+#include "code\modules\vehicles\humvee\humvee.dm"
+#include "code\modules\vehicles\humvee\interior.dm"
#include "code\modules\vehicles\interior\areas.dm"
#include "code\modules\vehicles\interior\interior.dm"
#include "code\modules\vehicles\interior\interior_hull.dm"
diff --git a/icons/obj/vehicles/hardpoints/humvee.dmi b/icons/obj/vehicles/hardpoints/humvee.dmi
new file mode 100644
index 0000000000..6a608af7d7
Binary files /dev/null and b/icons/obj/vehicles/hardpoints/humvee.dmi differ
diff --git a/icons/obj/vehicles/humvee.dmi b/icons/obj/vehicles/humvee.dmi
new file mode 100644
index 0000000000..4ad4fe804b
Binary files /dev/null and b/icons/obj/vehicles/humvee.dmi differ
diff --git a/icons/obj/vehicles/humvee_medical.dmi b/icons/obj/vehicles/humvee_medical.dmi
new file mode 100644
index 0000000000..319567107f
Binary files /dev/null and b/icons/obj/vehicles/humvee_medical.dmi differ
diff --git a/icons/obj/vehicles/humvee_transport.dmi b/icons/obj/vehicles/humvee_transport.dmi
new file mode 100644
index 0000000000..c672efc85b
Binary files /dev/null and b/icons/obj/vehicles/humvee_transport.dmi differ
diff --git a/icons/obj/vehicles/interiors/general_humvee.dmi b/icons/obj/vehicles/interiors/general_humvee.dmi
new file mode 100644
index 0000000000..10de4b2eac
Binary files /dev/null and b/icons/obj/vehicles/interiors/general_humvee.dmi differ
diff --git a/icons/obj/vehicles/interiors/humvee_chassis.dmi b/icons/obj/vehicles/interiors/humvee_chassis.dmi
new file mode 100644
index 0000000000..0c97680f9b
Binary files /dev/null and b/icons/obj/vehicles/interiors/humvee_chassis.dmi differ
diff --git a/maps/interiors/humvee.dmm b/maps/interiors/humvee.dmm
new file mode 100644
index 0000000000..cccad23816
--- /dev/null
+++ b/maps/interiors/humvee.dmm
@@ -0,0 +1,165 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"h" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = 1;
+ pixel_y = -8;
+ layer = 5.23;
+ alpha = 150
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 4;
+ pixel_y = 5;
+ buckling_y = 5;
+ pixel_x = 1;
+ buckling_x = 1
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ alpha = 75;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/right2;
+ name = "back right entrance marker";
+ tag = "back right";
+ pixel_x = 1;
+ pixel_y = -10;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door";
+ layer = 5.22
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee)
+"o" = (
+/obj/structure/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = 16
+ },
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee{
+ dir = 4;
+ pixel_x = -3;
+ pixel_y = 1;
+ layer = 2.8
+ },
+/obj/effect/landmark/interior/spawn/weapons_loader/humvee{
+ pixel_x = -17;
+ pixel_y = -13;
+ layer = 3.1
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = 16
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 1;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/left;
+ name = "left entrance marker";
+ tag = "left";
+ pixel_x = -3;
+ pixel_y = 14;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door1";
+ layer = 2.8
+ },
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee{
+ dir = 4;
+ pixel_x = -3;
+ pixel_y = 1
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee)
+"t" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_north";
+ pixel_x = -10;
+ pixel_y = 5
+ },
+/turf/open/void/vehicle,
+/area/space)
+"v" = (
+/obj/structure/prop/vehicle/humvee{
+ pixel_x = 16;
+ pixel_y = -12
+ },
+/turf/open/void/vehicle,
+/area/space)
+"y" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_south";
+ pixel_x = -10;
+ pixel_y = 7
+ },
+/turf/open/void/vehicle,
+/area/space)
+"G" = (
+/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/humvee{
+ dir = 4;
+ pixel_y = 5;
+ layer = 3.12
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = -8;
+ layer = 5.23;
+ alpha = 150
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ alpha = 75;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/right;
+ name = "right entrance marker";
+ tag = "right";
+ pixel_x = -3;
+ pixel_y = -10;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door";
+ layer = 5.22
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee)
+"M" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = 1;
+ pixel_y = 16
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 4;
+ pixel_y = 1;
+ buckling_y = 1;
+ pixel_x = 1;
+ buckling_x = 1
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 1;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/left2;
+ name = "back left entrance marker";
+ tag = "back left";
+ pixel_y = 14;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door1"
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee)
+"O" = (
+/turf/open/void/vehicle,
+/area/space)
+
+(1,1,1) = {"
+O
+O
+v
+O
+"}
+(2,1,1) = {"
+O
+M
+h
+O
+"}
+(3,1,1) = {"
+O
+o
+G
+O
+"}
+(4,1,1) = {"
+O
+t
+y
+O
+"}
diff --git a/maps/interiors/humvee_medical.dmm b/maps/interiors/humvee_medical.dmm
new file mode 100644
index 0000000000..bfefa5fcba
--- /dev/null
+++ b/maps/interiors/humvee_medical.dmm
@@ -0,0 +1,182 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"g" = (
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "small_viewport";
+ pixel_x = -1;
+ pixel_y = -7;
+ alpha = 150
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"o" = (
+/obj/structure/extinguisher_cabinet/lifeboat{
+ icon = 'icons/obj/vehicles/interiors/general.dmi';
+ pixel_x = -18;
+ pixel_y = 13
+ },
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee{
+ dir = 4;
+ pixel_x = -3;
+ pixel_y = 1;
+ buckling_x = -3;
+ buckling_y = 1
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 4;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/left;
+ name = "left entrance marker";
+ tag = "left";
+ pixel_x = -3;
+ pixel_y = 14;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door1";
+ layer = 2.8
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = 16
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"s" = (
+/obj/structure/machinery/cm_vending/sorted/medical/vehicle{
+ pixel_x = -4;
+ pixel_y = 3
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"t" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_north";
+ pixel_x = -10;
+ pixel_y = 5
+ },
+/turf/open/void/vehicle,
+/area/space)
+"v" = (
+/obj/structure/prop/vehicle/humvee/medical{
+ pixel_x = 24;
+ pixel_y = -12
+ },
+/turf/open/void/vehicle,
+/area/space)
+"y" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_south";
+ pixel_x = -10;
+ pixel_y = 7
+ },
+/turf/open/void/vehicle,
+/area/space)
+"C" = (
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 4;
+ pixel_y = 5;
+ buckling_y = 5;
+ pixel_x = -3;
+ buckling_x = -3
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ alpha = 75;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/right;
+ name = "right entrance marker";
+ tag = "right";
+ pixel_x = -3;
+ pixel_y = -10;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door";
+ layer = 5.22
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = -8;
+ layer = 5.23;
+ alpha = 150
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"G" = (
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 8;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/back/medical/right;
+ name = "back right entrance marker";
+ pixel_x = -31;
+ tag = "back right";
+ icon_state = "medical_backdoor2";
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1;
+ pixel_x = 16;
+ buckling_x = 16
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"M" = (
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 8;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/back/medical/left;
+ name = "back left entrance marker";
+ pixel_x = -31;
+ tag = "back left";
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "medical_backdoor1"
+ },
+/obj/structure/machinery/cm_vending/sorted/medical/blood/vehicle/humvee{
+ pixel_x = -7;
+ pixel_y = 14
+ },
+/obj/structure/vehicle_locker/med/humvee{
+ pixel_x = 15;
+ pixel_y = 14;
+ layer = 2.98
+ },
+/obj/structure/bed/portable_surgery{
+ icon_state = "surgical_up";
+ pixel_x = 2;
+ pixel_y = -4;
+ buckling_x = 2;
+ buckling_y = -4
+ },
+/turf/open/shuttle/vehicle/med,
+/area/interior/vehicle/humvee/medical)
+"O" = (
+/turf/open/void/vehicle,
+/area/space)
+
+(1,1,1) = {"
+O
+O
+v
+O
+"}
+(2,1,1) = {"
+O
+M
+G
+O
+"}
+(3,1,1) = {"
+O
+s
+g
+O
+"}
+(4,1,1) = {"
+O
+o
+C
+O
+"}
+(5,1,1) = {"
+O
+t
+y
+O
+"}
diff --git a/maps/interiors/humvee_transport.dmm b/maps/interiors/humvee_transport.dmm
new file mode 100644
index 0000000000..cb50820450
--- /dev/null
+++ b/maps/interiors/humvee_transport.dmm
@@ -0,0 +1,179 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"h" = (
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 8;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/back/right;
+ name = "back right entrance marker";
+ pixel_x = -31;
+ tag = "back right";
+ icon_state = "carrier_backdoor2";
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ },
+/obj/structure/prop/vehicle/humvee/transport{
+ pixel_x = -8;
+ pixel_y = -12
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1;
+ pixel_x = 16;
+ buckling_x = 16
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+"o" = (
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ pixel_y = 1;
+ buckling_y = 1
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "small_viewport";
+ pixel_x = -1;
+ pixel_y = 17;
+ layer = 3
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+"t" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_north";
+ pixel_x = -10;
+ pixel_y = 5
+ },
+/turf/open/void/vehicle,
+/area/space)
+"v" = (
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 4;
+ pixel_y = 5;
+ buckling_y = 5;
+ pixel_x = -3;
+ buckling_x = -3
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ alpha = 75;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/right;
+ name = "right entrance marker";
+ tag = "right";
+ pixel_x = -3;
+ pixel_y = -10;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door";
+ layer = 5.22
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = -8;
+ layer = 5.23;
+ alpha = 150
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+"y" = (
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "viewport_frontwindow_south";
+ pixel_x = -10;
+ pixel_y = 7
+ },
+/turf/open/void/vehicle,
+/area/space)
+"G" = (
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ dir = 1
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ icon_state = "small_viewport";
+ pixel_x = -1;
+ pixel_y = -7;
+ alpha = 150
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+"M" = (
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 8;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/back/left;
+ name = "back left entrance marker";
+ pixel_x = -31;
+ tag = "back left";
+ icon_state = "carrier_backdoor1";
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi'
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ pixel_x = 16;
+ pixel_y = 1;
+ buckling_x = 16;
+ buckling_y = 1
+ },
+/obj/structure/bed/chair/comfy/vehicle/passager{
+ pixel_y = 1;
+ buckling_y = 1
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+"O" = (
+/turf/open/void/vehicle,
+/area/space)
+"V" = (
+/obj/structure/extinguisher_cabinet/lifeboat{
+ icon = 'icons/obj/vehicles/interiors/general.dmi';
+ pixel_x = -19;
+ pixel_y = 14
+ },
+/obj/effect/landmark/interior/spawn/vehicle_driver_seat/armor/humvee{
+ dir = 4;
+ pixel_x = -3;
+ pixel_y = 1;
+ buckling_x = -3;
+ buckling_y = 1
+ },
+/obj/effect/landmark/interior/spawn/entrance{
+ dir = 4;
+ exit_type = /obj/structure/interior_exit/vehicle/humvee/left;
+ name = "left entrance marker";
+ tag = "left";
+ pixel_x = -3;
+ pixel_y = 14;
+ icon = 'icons/obj/vehicles/interiors/general_humvee.dmi';
+ icon_state = "exit_door1";
+ layer = 2.8
+ },
+/obj/effect/landmark/interior/spawn/interior_viewport/humvee{
+ pixel_x = -3;
+ pixel_y = 16
+ },
+/turf/open/shuttle/vehicle,
+/area/interior/vehicle/humvee/transport)
+
+(1,1,1) = {"
+O
+O
+O
+O
+"}
+(2,1,1) = {"
+O
+M
+h
+O
+"}
+(3,1,1) = {"
+O
+o
+G
+O
+"}
+(4,1,1) = {"
+O
+V
+v
+O
+"}
+(5,1,1) = {"
+O
+t
+y
+O
+"}