Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 184 additions & 0 deletions code/modules/vehicles/hardpoints/holder/humvee_turret.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
/obj/item/hardpoint/holder/humvee_turret
name = "\improper Humvee Turret"
desc = "The centerpiece of the humvee. Designed to support quick installation and deinstallation of various humvee weapon modules. Has inbuilt smoke screen deployment system."

icon = 'icons/obj/vehicles/humvee.dmi'
icon_state = "humveeturret"
disp_icon = "humvee"
disp_icon_state = "humveeturret"
activation_sounds = list('sound/weapons/vehicles/smokelauncher_fire.ogg')

density = TRUE //come on, it's huge

activatable = TRUE

ammo = new /obj/item/ammo_magazine/hardpoint/turret_smoke
max_clips = 2
use_muzzle_flash = FALSE

w_class = SIZE_MASSIVE
density = TRUE
anchored = TRUE

allowed_seat = VEHICLE_DRIVER

slot = HDPT_TURRET

// big beefy chonk of metal
health = 450
damage_multiplier = 0.05

accepted_hardpoints = list(
///obj/item/hardpoint/primary/humvee_grenade_launcher,
/obj/item/hardpoint/primary/humvee_cannon,
//secondary
/obj/item/hardpoint/support/humvee_flare_launcher
)

hdpt_layer = HDPT_LAYER_TURRET
px_offsets = list(
"1" = list(0, -10),
"2" = list(0, 10),
"4" = list(-10, 0),
"8" = list(10, 0)
)

var/gyro = FALSE

// How long the windup is before the turret rotates
var/rotation_windup = 0.5 SECONDS
// Used during the windup
var/rotating = FALSE

scatter = 4
gun_firemode = GUN_FIREMODE_BURSTFIRE
gun_firemode_list = list(
GUN_FIREMODE_BURSTFIRE,
)
burst_amount = 2
burst_delay = 1.0 SECONDS
extra_delay = 13.0 SECONDS

/obj/item/hardpoint/holder/humvee_turret/update_icon()
var/broken = (health <= 0)
icon_state = "humveeturret_[broken]"

/*
if(health <= initial(health))
var/image/damage_overlay = image(icon, icon_state = "damaged_turret")
damage_overlay.alpha = 255 * (1 - (health / initial(health)))
overlays += damage_overlay
*/
..()


/obj/item/hardpoint/holder/humvee_turret/get_icon_image(x_offset, y_offset, new_dir)
var/icon_state_suffix = "0"
if(health <= 0)
icon_state_suffix = "1"

var/image/I = image(icon = disp_icon, icon_state = "[disp_icon_state]_[icon_state_suffix]", pixel_x = x_offset, pixel_y = y_offset, dir = new_dir)
/*
if(health <= initial(health))
var/image/damage_overlay = image(icon, icon_state = "damaged_turret")
damage_overlay.alpha = 255 * (1 - (health / initial(health)))
I.overlays += damage_overlay
*/
return I

// no picking this big beast up
/obj/item/hardpoint/holder/humvee_turret/attack_hand(mob/user)
return

/obj/item/hardpoint/holder/humvee_turret/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/powerloader_clamp))
var/obj/item/powerloader_clamp/PC = I
if(!PC.linked_powerloader)
qdel(PC)
return TRUE

if(health < 1)
visible_message(SPAN_WARNING("\The [src] disintegrates into useless pile of scrap under the damage it suffered!"))
qdel(src)
return TRUE

PC.grab_object(user, src, "vehicle_module", 'sound/machines/hydraulics_2.ogg')
update_icon()
return TRUE
..()


/obj/item/hardpoint/holder/humvee_turret/get_tgui_info()
var/list/data = list()

data += list(list( // turret smokescreen data
"name" = "Turret Smoke Screen",
"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

//gyro ON locks the turret in one direction, OFF will make turret turning when tank turns
/obj/item/hardpoint/holder/humvee_turret/proc/toggle_gyro(mob/user)
if(health <= 0)
to_chat(user, SPAN_WARNING("\The [src]'s stabilization systems are busted!"))
return

gyro = !gyro
to_chat(user, SPAN_NOTICE("You toggle \the [src]'s gyroscopic stabilizer [gyro ? "ON" :"OFF"]."))

/obj/item/hardpoint/holder/humvee_turret/proc/user_rotation(mob/user, deg)
// no rotating a broken turret
if(health <= 0)
return

if(rotating)
return

rotating = TRUE
to_chat(user, SPAN_NOTICE("You begin rotating the turret towards the [dir2text(turn(dir,deg))]."))

if(!do_after(user, rotation_windup, INTERRUPT_ALL, BUSY_ICON_GENERIC))
rotating = FALSE
return
rotating = FALSE

rotate(deg, TRUE)

/obj/item/hardpoint/holder/humvee_turret/rotate(deg, override_gyro = FALSE)
if(gyro && !override_gyro)
return

..(deg)

/obj/item/hardpoint/holder/humvee_turret/try_fire(atom/target, mob/living/user, params)
var/turf/L
var/turf/R
switch(owner.dir)
if(NORTH)
L = locate(owner.x - 2, owner.y + 4, owner.z)
R = locate(owner.x + 2, owner.y + 4, owner.z)
if(SOUTH)
L = locate(owner.x + 2, owner.y - 4, owner.z)
R = locate(owner.x - 2, owner.y - 4, owner.z)
if(EAST)
L = locate(owner.x + 4, owner.y + 2, owner.z)
R = locate(owner.x + 4, owner.y - 2, owner.z)
else
L = locate(owner.x - 4, owner.y + 2, owner.z)
R = locate(owner.x - 4, owner.y - 2, owner.z)

if(shots_fired)
target = R
else
target = L

return ..()
4 changes: 2 additions & 2 deletions code/modules/vehicles/hardpoints/support/humvee_flare.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
desc = "A support module for APCs that shoots flares."
icon = 'icons/obj/vehicles/hardpoints/humvee.dmi'

icon_state = "launcher"
icon_state = "humveelauncher"
disp_icon = "humvee"
disp_icon_state = "launcher"
disp_icon_state = "humveelauncher"
activation_sounds = list('sound/weapons/gun_m92_attachable.ogg')

damage_multiplier = 0.1
Expand Down
73 changes: 70 additions & 3 deletions code/modules/vehicles/humvee/humvee.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,7 @@

hardpoints_allowed = list(
/obj/item/hardpoint/locomotion/humvee_wheels,
/obj/item/hardpoint/primary/humvee_cannon,
/obj/item/hardpoint/support/humvee_flare_launcher,
/obj/item/hardpoint/holder/humvee_turret,
/obj/item/hardpoint/armor/humvee_snowplow,
/obj/item/hardpoint/support/humvee_overhead_lights,
/obj/item/hardpoint/primary/humvee_hatch
Expand Down Expand Up @@ -80,6 +79,74 @@
vehicle_ram_multiplier = VEHICLE_TRAMPLE_DAMAGE_APC_REDUCTION
minimap_icon_state = "arc"

/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/relaymove(mob/user, direction)
if(user == seats[VEHICLE_DRIVER])
// Check if wheels are installed
if(!(locate(/obj/item/hardpoint/locomotion/humvee_wheels) in hardpoints))
return FALSE

return ..()

if(user != seats[VEHICLE_GUNNER])
return FALSE

var/obj/item/hardpoint/holder/humvee_turret/T = null
for(var/obj/item/hardpoint/holder/humvee_turret/TT in hardpoints)
T = TT
break
if(!T)
return FALSE

if(direction == GLOB.reverse_dir[T.dir] || direction == T.dir)
return FALSE

T.user_rotation(user, turning_angle(T.dir, direction))
update_icon()

return TRUE

/obj/effect/vehicle_spawner/humvee/Initialize()
. = ..()
spawn_vehicle()
Expand All @@ -95,4 +162,4 @@

/obj/effect/vehicle_spawner/humvee/load_hardpoints(obj/vehicle/multitile/V)
V.add_hardpoint(new /obj/item/hardpoint/locomotion/humvee_wheels)
V.add_hardpoint(new /obj/item/hardpoint/primary/humvee_hatch)
V.add_hardpoint(new /obj/item/hardpoint/holder/humvee_turret)
3 changes: 3 additions & 0 deletions code/modules/vehicles/multitile/multitile_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@
for(var/obj/item/hardpoint/holder/tank_turret/TT in V.hardpoints)
T = TT
break
for(var/obj/item/hardpoint/holder/humvee_turret/TT in V.hardpoints)
T = TT
break
if(!T)
return
T.toggle_gyro(usr)
Expand Down
1 change: 1 addition & 0 deletions colonialmarines.dme
Original file line number Diff line number Diff line change
Expand Up @@ -2617,6 +2617,7 @@
#include "code\modules\vehicles\hardpoints\hardpoint_ammo\smoke_ammo.dm"
#include "code\modules\vehicles\hardpoints\hardpoint_ammo\tow_ammo.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\primary\arc_sentry.dm"
#include "code\modules\vehicles\hardpoints\primary\autocannon.dm"
Expand Down
Binary file modified icons/obj/vehicles/hardpoints/humvee.dmi
Binary file not shown.
Binary file modified icons/obj/vehicles/humvee.dmi
Binary file not shown.