Repository: goonstation/goonstation
Pull request #22684: Proper NT Commander job
Author: login: JORJ949
Labels: name: C-Sprites
description: Automatically applied on any .dmi or icons folder change
name: size/L
description: Denotes a PR that changes 100-499 lines, ignoring generated files.
Created: 2025-03-22T07:40:41Z | Merged: 2025-03-30T22:21:08Z

<!-- The text between the arrows are comments - they won't be visible on your PR. -->
<!-- To label this PR, add the label(s) without the prefixes surrounded by brackets anywhere, for example: [LABEL] -->
<!-- PRs should at least have one area (A-) label and at least one category (C-) label -->

## About the PR <!-- Describe the Pull Request here. What does it change? What other things could this impact? -->
Adds a special NT commander job with gear more useful in a real round compared to a pod commander (who gets a podwars token that is worthless on station). That being the following:
- NT Commander's Sabre (same as syndicate commander's but without delimb chance
- Commander's great coat and beret (spaceproof)
- NTSO pouch with clock 180
- Security-Command clone-disk (the HoS one that contains netpass_heads alongside netpass_sec) ((so if they really need it they can packet-hack armory)) (((maybe replace with a blue commander auth disk for authing stuff? though that may detract from the captain's role so I didn't do that here)))
- Big heavy HoS boots (this is the commander of NT squads like HoS is commander of sec so)
- NT Operative glasses, combining sechuds and prodocs into one (they are meant to be able to command any team of responders, including medical teams)
- NT Commander headset, with access to station channels + NT channel
![image](https://github.com/user-attachments/assets/5dd008e6-5824-46c1-b367-f4150a0007c1)

## Why's this needed? <!-- Describe why you think this should be added to the game. -->
The NT commander from pod wars is occasionally used for admin gimmicks, this introduces one with gear actually usable in round (not the podwars token).  I didn't give it the powerful NTSO gun as I want the role to be more aimed at coordinating the team and they may be spawned to be in charge of just some medics and engineers, though I would not be against swapping the clock180 for a cooler gun with both stun and lethal settings like HoS and NTSC have.


Diff:
diff --git a/code/datums/jobs.dm b/code/datums/jobs.dm
index 84f5e2de517b8..e6b00c09cbbfd 100644
--- a/code/datums/jobs.dm
+++ b/code/datums/jobs.dm
@@ -2460,6 +2460,27 @@ ABSTRACT_TYPE(/datum/job/special/nt)
 	items_in_backpack = list(/obj/item/storage/firstaid/regular,
 							/obj/item/clothing/head/NTberet)
 
+/datum/job/special/nt/commander
+	name = "Nanotrasen Commander"
+	trait_list = list("training_security", "training_medical")
+	wages = PAY_EXECUTIVE //The big boss
+	receives_miranda = TRUE
+	receives_badge = TRUE
+	receives_disk = /obj/item/disk/data/floppy/sec_command
+
+	slot_belt = list(/obj/item/swords_sheaths/ntboss)
+	slot_jump = list(/obj/item/clothing/under/misc/NT)
+	slot_suit = list(/obj/item/clothing/suit/space/nanotrasen/pilot/commander)
+	slot_head = list(/obj/item/clothing/head/NTberet/commander)
+	slot_foot = list(/obj/item/clothing/shoes/swat/heavy)
+	slot_eyes = list(/obj/item/clothing/glasses/nt_operative)
+	slot_ears = list(/obj/item/device/radio/headset/command/nt/commander)
+	slot_mask = list(/obj/item/clothing/mask/gas/NTSO)
+	slot_poc1 = list(/obj/item/device/pda2/ntso)
+	slot_poc2 = list(/obj/item/storage/ntsc_pouch/ntso)
+	items_in_backpack = list(/obj/item/storage/firstaid/regular)
+
+
 /datum/job/special/nt/engineer
 	name = "Nanotrasen Emergency Repair Technician"
 	trait_list = list("training_engineer")
diff --git a/code/obj/item/clothing/glasses.dm b/code/obj/item/clothing/glasses.dm
index a0bd45de602be..4133a703013a7 100644
--- a/code/obj/item/clothing/glasses.dm
+++ b/code/obj/item/clothing/glasses.dm
@@ -261,6 +261,37 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Security
+			get_image_group(CLIENT_IMAGE_GROUP_ARREST_ICONS).add_mob(user)
+			//Medical
+			get_image_group(CLIENT_IMAGE_GROUP_HEALTH_MON_ICONS).add_mob(user)
+			APPLY_ATOM_PROPERTY(user,PROP_MOB_EXAMINE_HEALTH,src)
+
+	unequipped(var/mob/user)
+		if(src.equipped_in_slot == SLOT_GLASSES)
+			//Security
+			get_image_group(CLIENT_IMAGE_GROUP_ARREST_ICONS).remove_mob(user)
+			//Medical
+			REMOVE_ATOM_PROPERTY(user,PROP_MOB_EXAMINE_HEALTH,src)
+			get_image_group(CLIENT_IMAGE_GROUP_HEALTH_MON_ICONS).remove_mob(user)
+		..()
+
+	setupProperties()
+		..()
+		setProperty("disorient_resist_eye", 100)
+
 TYPEINFO(/obj/item/clothing/glasses/thermal)
 	mats = 8
 
diff --git a/code/obj/item/device/radios/headsets.dm b/code/obj/item/device/radios/headsets.dm
index 64f61204d8c4d..4db4cb3598fbb 100644
--- a/code/obj/item/device/radios/headsets.dm
+++ b/code/obj/item/device/radios/headsets.dm
@@ -128,6 +128,30 @@
 	icon_override = "nt"
 	icon_tooltip = "NanoTrasen Special Operative"
 
+/obj/item/device/radio/headset/command/nt/commander
+	name = "\improper NT Commander's headset"
+	desc = "Issued to NanoTrasen Commanders, this radio headset can access several secure radio channels."
+	secure_frequencies = list(
+		"n" = R_FREQ_NANOTRASEN,
+		"h" = R_FREQ_COMMAND,
+		"g" = R_FREQ_SECURITY,
+		"e" = R_FREQ_ENGINEERING,
+		"r" = R_FREQ_RESEARCH,
+		"m" = R_FREQ_MEDICAL,
+		"c" = R_FREQ_CIVILIAN,
+		)
+	secure_classes = list(
+		"n" = RADIOCL_NANOTRASEN,
+		"h" = RADIOCL_COMMAND,
+		"g" = RADIOCL_SECURITY,
+		"e" = RADIOCL_ENGINEERING,
+		"r" = RADIOCL_RESEARCH,
+		"m" = RADIOCL_MEDICAL,
+		"c" = RADIOCL_CIVILIAN,
+		)
+	icon_override = "ntboss"
+	icon_tooltip = "Nanotrasen Commander"
+
 /obj/item/device/radio/headset/command/nt/consultant
 	icon_tooltip = "NanoTrasen Security Consultant"
 
@@ -486,22 +510,6 @@
 	icon_override = "ghost_buster"
 	icon_tooltip = "Werewolf Hunter"
 
-/obj/item/device/radio/headset/command/nt/commander
-	name = "\improper NT Commander's headset"
-	desc = "Issued to NanoTrasen Commanders, this radio headset can access several secure radio channels."
-	secure_frequencies = list(
-		"n" = R_FREQ_NANOTRASEN,
-		"h" = R_FREQ_COMMAND,
-		"g" = R_FREQ_SECURITY,
-		)
-	secure_classes = list(
-		"n" = RADIOCL_NANOTRASEN,
-		"h" = RADIOCL_COMMAND,
-		"g" = RADIOCL_SECURITY,
-		)
-	icon_override = "ntboss"
-	icon_tooltip = "Nanotrasen Commander"
-
 /obj/item/device/radio/headset/syndicate
 	name = "radio headset"
 	desc = "A radio headset that is also capable of communicating over- wait, isn't that frequency illegal?"
diff --git a/code/obj/item/misc_weapons.dm b/code/obj/item/misc_weapons.dm
index 780626a370071..a09726453d87e 100644
--- a/code/obj/item/misc_weapons.dm
+++ b/code/obj/item/misc_weapons.dm
@@ -1403,6 +1403,17 @@ TYPEINFO(/obj/item/swords/captain)
 		..()
 		src.setItemSpecial(/datum/item_special/rangestab)
 
+/obj/item/swords/ntboss
+	icon_state = "ntboss_sword"
+	name = "NanoTrasen Commander's Sabre"
+	desc = "A sharp sabre for the most trusted and competent NanoTrasen Commanders. The blue paint is peeling a bit..."
+	force = 20
+	contraband = 4
+
+	New()
+		..()
+		src.setItemSpecial(/datum/item_special/rangestab)
+
 /obj/item/swords/nukeop/suicide(var/mob/living/carbon/human/user as mob)
 	if (!istype(user) || !user.organHolder || !src.user_can_suicide(user))
 		return 0
@@ -1622,6 +1633,18 @@ TYPEINFO(/obj/item/swords/captain)
 	ih_sheath_state = "scabbard-syndie0"
 	sword_path = /obj/item/swords/nukeop
 
+/obj/item/swords_sheaths/ntboss
+	name = "Nanotrasen Commander's Scabbard"
+	desc = "A nifty container for a mighty sword. Given to Nanotrasen's most trusted commanders. The blue paint is peeling a bit..."
+	icon_state = "ntboss_sword_scabbard"
+	item_state = "scabbard-ntboss1"
+
+	sheathed_state = "ntboss_sword_scabbard"
+	sheath_state = "ntboss_scabbard"
+	ih_sheathed_state = "scabbard-ntboss1"
+	ih_sheath_state = "scabbard-ntboss0"
+	sword_path = /obj/item/swords/ntboss
+
 /obj/item/swords_sheaths/pirate
 	name = "Pirate's Scabbard"
 	desc = "A nifty container for a ruthless sword. Given to the most feared space pirates, or stolen from the previous most feared space pirate. The scabbard bears the insignia 'I.B.B'."
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index 08f6e45880e3f..121c781f163db 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi
index 960d172f9508c..1fb6f278aa425 100644
Binary files a/icons/mob/clothing/eyes.dmi and b/icons/mob/clothing/eyes.dmi differ
diff --git a/icons/mob/inhand/hand_weapons.dmi b/icons/mob/inhand/hand_weapons.dmi
index f3655ccda3c32..3859247f16327 100644
Binary files a/icons/mob/inhand/hand_weapons.dmi and b/icons/mob/inhand/hand_weapons.dmi differ
diff --git a/icons/obj/clothing/item_glasses.dmi b/icons/obj/clothing/item_glasses.dmi
index 07d41b2ec9087..4c1d2b9c87f8c 100644
Binary files a/icons/obj/clothing/item_glasses.dmi and b/icons/obj/clothing/item_glasses.dmi differ
diff --git a/icons/obj/items/weapons.dmi b/icons/obj/items/weapons.dmi
index d352042110817..ac3a2908bca72 100644
Binary files a/icons/obj/items/weapons.dmi and b/icons/obj/items/weapons.dmi differ


Reviews:
user: login: TobleroneSwordfish
body: Looks cool, good to have this as a separate gimmick role
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:10:25Z
user: login: JORJ949
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:12:44Z
user: login: JORJ949
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:13:43Z
user: login: TobleroneSwordfish
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:14:49Z
user: login: 444Portal
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:21:43Z
user: login: JORJ949
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T14:28:00Z
user: login: TobleroneSwordfish
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-22T19:53:04Z

Review comments:
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
path: code/obj/item/clothing/glasses.dm
user: login: TobleroneSwordfish
body: Unused var?
created_at: 2025-03-22T14:05:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
path: code/obj/item/clothing/glasses.dm
user: login: TobleroneSwordfish
body: I think this var is entirely vestigial and doesn't do anything.
created_at: 2025-03-22T14:08:52Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: TobleroneSwordfish
body: Maybe not NV too, you should be able to see bulky NV glasses on someone if they have it.
created_at: 2025-03-22T14:09:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: JORJ949
body: How about thermals instead? Those give a minor amount of NV without being big and bulky, also the rest of the team can't see invisible threats so maybe the commander should
created_at: 2025-03-22T14:12:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: JORJ949
body: Also you cant see the NVGs on the NTSOs anyway as they have space helmets on
created_at: 2025-03-22T14:13:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: TobleroneSwordfish
body: Thermals should also be obvious I think, you could make them red but that would probably mess with the *aesthetic*
created_at: 2025-03-22T14:14:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: 444Portal
body: Could use Mesons, maybe? If you're set on the Commander having some extra vision. 
created_at: 2025-03-22T14:21:43Z
author_association: CONTRIBUTOR
diff_hunk: @@ -261,6 +261,43 @@ TYPEINFO(/obj/item/clothing/glasses/sunglasses/tanning)
 	color_b = 1
 	contraband = 4 // illegal (stolen) crimefighting vigilante gear
 
+/obj/item/clothing/glasses/nt_operative
+	name = "\improper NanoTrasen Operative HUD"
+	desc = "Patented NT technology compacting many different HUDs into one compact set of glasses.  Enhanced shielding blocks many flashes."
+	icon_state = "nt"
+	item_state = "sunglasses"
+	protective_temperature = 1300
+	var/already_worn = 0
+	color_r = 0.85
+	color_g = 0.85
+	color_b = 1
+
+	equipped(var/mob/user, var/slot)
+		..()
+		if (slot == SLOT_GLASSES)
+			//Night Vision
+			APPLY_ATOM_PROPERTY(user, PROP_MOB_NIGHTVISION, src)
path: code/obj/item/clothing/glasses.dm
user: login: JORJ949
body: It's not required, I avoided giving mesons as I still want them to get stunned by singularities but they should have some sort of engineering gear probably.
created_at: 2025-03-22T14:28:00Z
author_association: CONTRIBUTOR

PR comments:
user: login: JORJ949
created_at: 2025-03-22T14:31:43Z
body: Additionally before I PR it would like to ask opinions on removing the command radio from other NT roles with the exception of the consultant, as they have their own NT channel now and the commander would ideally be coordinating with command or they coordinate within the department they are in.
author_association: CONTRIBUTOR
user: login: TobleroneSwordfish
created_at: 2025-03-22T19:52:12Z
body: > emoving the command radio from other NT roles

I thiink that makes sense? They're not really command roles, just well trained centcom grunts.
author_association: CONTRIBUTOR