diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm
index 2704e52d2f85..02f992694832 100644
--- a/code/__DEFINES/mob_hud.dm
+++ b/code/__DEFINES/mob_hud.dm
@@ -65,3 +65,6 @@
#define TRACKER_HIVE "Hive Core"
#define TRACKER_LEADER "Leader"
#define TRACKER_TUNNEL "Tunnel"
+
+//These are used to manage the same HUD having multiple sources
+#define HUD_SOURCE_ADMIN "admin"
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index 22c3827022ff..6187a67825a4 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "6.5.2"
+#define TGS_DMAPI_VERSION "6.5.3"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -154,7 +154,7 @@
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
/**
- * Call this as late as possible in [world/proc/Reboot].
+ * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
*/
/world/proc/TgsReboot()
return
diff --git a/code/datums/agents/tools/tranq_gun.dm b/code/datums/agents/tools/tranq_gun.dm
index e95f853cef82..91f6f8c294b7 100644
--- a/code/datums/agents/tools/tranq_gun.dm
+++ b/code/datums/agents/tools/tranq_gun.dm
@@ -1,7 +1,7 @@
/obj/item/weapon/gun/pistol/tranquilizer
name = "Tranquilizer gun"
desc = "Contains horse tranquilizer darts. Useful at knocking people out."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/event.dmi'
icon_state = "pk9r"
item_state = "pk9r"
current_mag = /obj/item/ammo_magazine/pistol/tranq
@@ -28,7 +28,7 @@
name = "\improper Tranquilizer magazine (Horse Tranquilizer)"
default_ammo = /datum/ammo/bullet/pistol/tranq
caliber = ".22"
- icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/event.dmi'
icon_state = "pk-9_tranq"
max_rounds = 5
gun_type = /obj/item/weapon/gun/pistol/tranquilizer
diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm
index 94d4bf2a0ab6..04bcfecf9128 100644
--- a/code/datums/emergency_calls/upp.dm
+++ b/code/datums/emergency_calls/upp.dm
@@ -77,14 +77,14 @@
var/equipment_path = /datum/equipment_preset/upp/specialist
if(heavy_pick)
if(HAS_FLAG(H.client.prefs.toggles_ert, PLAY_HEAVY) && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER))
- equipment_path = pick(/datum/equipment_preset/upp/specialist, /datum/equipment_preset/upp/minigunner)
+ equipment_path = pick(/datum/equipment_preset/upp/specialist, /datum/equipment_preset/upp/machinegunner)
else if(HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && !HAS_FLAG(H.client.prefs.toggles_ert, PLAY_HEAVY))
- equipment_path = /datum/equipment_preset/upp/minigunner
+ equipment_path = /datum/equipment_preset/upp/machinegunner
arm_equipment(H, equipment_path, TRUE, TRUE)
else if(smartgunners < max_smartgunners && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(H.client, JOB_SQUAD_SMARTGUN, time_required_for_job))
smartgunners++
to_chat(H, SPAN_ROLE_HEADER("You are a sergeant of the Union of Progressive People, a powerful socialist state that rivals the United Americas!"))
- arm_equipment(H, /datum/equipment_preset/upp/minigunner, TRUE, TRUE)
+ arm_equipment(H, /datum/equipment_preset/upp/machinegunner, TRUE, TRUE)
else
to_chat(H, SPAN_ROLE_HEADER("You are a soldier of the Union of Progressive People, a powerful socialist state that rivals the United Americas!"))
arm_equipment(H, /datum/equipment_preset/upp/soldier, TRUE, TRUE)
diff --git a/code/datums/factions/clf.dm b/code/datums/factions/clf.dm
index 38e0d576f805..ce53b505b352 100644
--- a/code/datums/factions/clf.dm
+++ b/code/datums/factions/clf.dm
@@ -31,12 +31,12 @@
list("PRIMARY FIREARMS", 0, null, null, null),
list("ABR-40 Hunting Rifle", 30, /obj/item/weapon/gun/rifle/l42a/abr40, null, VENDOR_ITEM_REGULAR),
list("Basira-Armstrong Bolt-Action", 15, /obj/item/weapon/gun/boltaction, null, VENDOR_ITEM_REGULAR),
- list("CZ-81 Machine Pistol", 20, /obj/item/ammo_magazine/pistol/skorpion, null, VENDOR_ITEM_REGULAR),
list("Double Barrel Shotgun", 30, /obj/item/weapon/gun/shotgun/double, null, VENDOR_ITEM_REGULAR),
list("HG 37-12 Pump Shotgun", 30, /obj/item/weapon/gun/shotgun/double/sawn, null, VENDOR_ITEM_REGULAR),
list("M16 Rifle", 30, /obj/item/weapon/gun/rifle/m16, null, VENDOR_ITEM_REGULAR),
list("MAR-30 Battle Carbine", 30, /obj/item/weapon/gun/rifle/mar40/carbine, null, VENDOR_ITEM_REGULAR),
list("MAR-40 Battle Rifle", 30, /obj/item/weapon/gun/rifle/mar40, null, VENDOR_ITEM_REGULAR),
+ list("Type-64 Submachinegun", 20, /obj/item/weapon/gun/smg/bizon, null, VENDOR_ITEM_REGULAR),
list("MAC-15 Submachinegun", 20, /obj/item/weapon/gun/smg/mac15, null, VENDOR_ITEM_REGULAR),
list("MP27 Submachinegun", 20, /obj/item/weapon/gun/smg/mp27, null, VENDOR_ITEM_REGULAR),
list("MP5 Submachinegun", 20, /obj/item/weapon/gun/smg/mp5, null, VENDOR_ITEM_REGULAR),
@@ -48,12 +48,12 @@
list("Box Of Buckshot Shells", 10, /obj/item/ammo_magazine/shotgun/buckshot, null, VENDOR_ITEM_REGULAR),
list("Box Of Flechette Shells", 10, /obj/item/ammo_magazine/shotgun/flechette, null, VENDOR_ITEM_REGULAR),
list("Box Of Shotgun Slugs", 10, /obj/item/ammo_magazine/shotgun, null, VENDOR_ITEM_REGULAR),
- list("CZ-81 Magazine (.32ACP)", 5, /obj/item/ammo_magazine/pistol/skorpion, null, VENDOR_ITEM_REGULAR),
list("M16 AP Magazine (5.56x45mm)", 15, /obj/item/ammo_magazine/rifle/m16/ap, null, VENDOR_ITEM_REGULAR),
list("M16 Magazine (5.56x45mm)", 5, /obj/item/ammo_magazine/rifle/m16, null, VENDOR_ITEM_REGULAR),
list("MAC-15 Magazine (9mm)", 5, /obj/item/ammo_magazine/smg/mac15, null, VENDOR_ITEM_REGULAR),
list("MAR Magazine (7.62x39mm)", 5, /obj/item/ammo_magazine/rifle/mar40, null, VENDOR_ITEM_REGULAR),
list("MAR Extended Magazine (7.62x39mm)", 15, /obj/item/ammo_magazine/rifle/mar40/extended, null, VENDOR_ITEM_REGULAR),
+ list("Type-64 Helical Magazine (.7.62x19mm)", 5, /obj/item/ammo_magazine/smg/bizon, null, VENDOR_ITEM_REGULAR),
list("MP27 Magazine (4.6x30mm)", 5, /obj/item/ammo_magazine/smg/mp27, null, VENDOR_ITEM_REGULAR),
list("MP5 Magazine (9mm)", 5, /obj/item/ammo_magazine/smg/mp5, null, VENDOR_ITEM_REGULAR),
@@ -99,13 +99,13 @@
list("PRIMARY FIREARMS", -1, null, null),
list("ABR-40 Hunting Rifle", 30, /obj/item/weapon/gun/rifle/l42a/abr40, null, VENDOR_ITEM_REGULAR),
list("Basira-Armstrong Bolt-Action", 15, /obj/item/weapon/gun/boltaction, null, VENDOR_ITEM_REGULAR),
- list("CZ-81 Machine Pistol", 20, /obj/item/ammo_magazine/pistol/skorpion, VENDOR_ITEM_REGULAR),
list("Double Barrel Shotgun", 20, /obj/item/weapon/gun/shotgun/double, VENDOR_ITEM_REGULAR),
list("HG 37-12 Pump Shotgun", 20, /obj/item/weapon/gun/shotgun/double/sawn, VENDOR_ITEM_REGULAR),
list("M16 Rifle", 20, /obj/item/weapon/gun/rifle/m16, VENDOR_ITEM_REGULAR),
list("MAC-15 Submachinegun", 20, /obj/item/weapon/gun/smg/mac15, VENDOR_ITEM_REGULAR),
list("MAR-30 Battle Carbine", 20, /obj/item/weapon/gun/rifle/mar40/carbine, VENDOR_ITEM_REGULAR),
list("MAR-40 Battle Rifle", 20, /obj/item/weapon/gun/rifle/mar40, VENDOR_ITEM_REGULAR),
+ list("Type 64 Submachinegun", 20, /obj/item/weapon/gun/smg/bizon, VENDOR_ITEM_REGULAR),
list("MP27 Submachinegun", 20, /obj/item/weapon/gun/smg/mp27, VENDOR_ITEM_REGULAR),
list("MP5 Submachinegun", 20, /obj/item/weapon/gun/smg/mp5, VENDOR_ITEM_REGULAR),
list("Sawn-Off Shotgun", 20, /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, VENDOR_ITEM_REGULAR),
@@ -116,12 +116,12 @@
list("Box Of Buckshot Shells", 15, /obj/item/ammo_magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR),
list("Box Of Flechette Shells", 15, /obj/item/ammo_magazine/shotgun/flechette, VENDOR_ITEM_REGULAR),
list("Box Of Shotgun Slugs", 15, /obj/item/ammo_magazine/shotgun, VENDOR_ITEM_REGULAR),
- list("CZ-81 Magazine (.32ACP)", 60, /obj/item/ammo_magazine/pistol/skorpion, VENDOR_ITEM_REGULAR),
list("M16 AP Magazine (5.56x45mm)", 10, /obj/item/ammo_magazine/rifle/m16/ap, VENDOR_ITEM_REGULAR),
list("M16 Magazine (5.56x45mm)", 60, /obj/item/ammo_magazine/rifle/m16, VENDOR_ITEM_REGULAR),
list("MAC-15 Magazine (9mm)", 60, /obj/item/ammo_magazine/smg/mac15, VENDOR_ITEM_REGULAR),
list("MAR Magazine (7.62x39mm)", 60, /obj/item/ammo_magazine/rifle/mar40, VENDOR_ITEM_REGULAR),
list("MAR Extended Magazine (7.62x39mm)", 10, /obj/item/ammo_magazine/rifle/mar40/extended, VENDOR_ITEM_REGULAR),
+ list("Type 64 Helical Magazine (7.62x19mm)", 60, /obj/item/ammo_magazine/smg/bizon, VENDOR_ITEM_REGULAR),
list("MP27 Magazine (4.6x30mm)", 60, /obj/item/ammo_magazine/smg/mp27, VENDOR_ITEM_REGULAR),
list("MP5 Magazine (9mm)", 60, /obj/item/ammo_magazine/smg/mp5, VENDOR_ITEM_REGULAR),
diff --git a/code/datums/factions/upp.dm b/code/datums/factions/upp.dm
index a5a89cfd0a80..9f28e5967831 100644
--- a/code/datums/factions/upp.dm
+++ b/code/datums/factions/upp.dm
@@ -47,24 +47,24 @@
/datum/faction/upp/get_antag_guns_snowflake_equipment()
return list(
list("PRIMARY FIREARMS", 0, null, null, null),
- list("CZ-81 Machine Pistol", 20, /obj/item/weapon/gun/pistol/skorpion/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 64 Submachinegun", 20, /obj/item/weapon/gun/smg/bizon/upp, null, VENDOR_ITEM_REGULAR),
list("Type 71 Pulse Rifle", 30, /obj/item/weapon/gun/rifle/type71, null, VENDOR_ITEM_REGULAR),
list("Type 71 Pulse Rifle Carbine", 30, /obj/item/weapon/gun/rifle/type71/carbine, null, VENDOR_ITEM_REGULAR),
list("PRIMARY AMMUNITION", 0, null, null, null),
- list("CZ-81 Magazine (.32ACP)", 5, /obj/item/ammo_magazine/pistol/skorpion, null, VENDOR_ITEM_REGULAR),
+ list("Type 64 Helical Magazine (7.62x19mm)", 5, /obj/item/ammo_magazine/smg/bizon, null, VENDOR_ITEM_REGULAR),
list("Type 71 AP Magazine (5.45x39mm)", 15, /obj/item/ammo_magazine/rifle/type71/ap, null, VENDOR_ITEM_REGULAR),
list("Type 71 Magazine (5.45x39mm)", 5, /obj/item/ammo_magazine/rifle/type71, null, VENDOR_ITEM_REGULAR),
list("SIDEARMS", 0, null, null, null),
- list("Highpower Automag", 15, /obj/item/weapon/gun/pistol/highpower, null, VENDOR_ITEM_REGULAR),
- list("Korovin PK-9 Pistol", 15, /obj/item/weapon/gun/pistol/c99/upp, null, VENDOR_ITEM_REGULAR),
- list("N-Y 7.62mm Revolver", 15, /obj/item/weapon/gun/revolver/nagant, null, VENDOR_ITEM_REGULAR),
+ list("Type 73 Pistol", 25, /obj/item/weapon/gun/pistol/t73, null, VENDOR_ITEM_REGULAR),
+ list("NP92 Pistol", 15, /obj/item/weapon/gun/pistol/np92, null, VENDOR_ITEM_REGULAR),
+ list("ZHNK-72 Revolver", 15, /obj/item/weapon/gun/revolver/upp, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
- list("Highpower Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/highpower, null, VENDOR_ITEM_REGULAR),
- list("N-Y Speed Loader (7.62x38mmR)", 5, /obj/item/ammo_magazine/revolver/upp, null, VENDOR_ITEM_REGULAR),
- list("PK-9 Magazine (.22 Hollowpoint)", 5, /obj/item/ammo_magazine/pistol/c99, null, VENDOR_ITEM_REGULAR),
+ list("Type 73 Magazine (7.62x25mm Tokarev)", 5, /obj/item/ammo_magazine/pistol/t73, null, VENDOR_ITEM_REGULAR),
+ list("ZHNK-72 Speed Loader (7.62x38mmR)", 5, /obj/item/ammo_magazine/revolver/upp, null, VENDOR_ITEM_REGULAR),
+ list("NP92 Magazine (9x18mm Makarov)", 40, /obj/item/ammo_magazine/pistol/np92, null, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -86,24 +86,24 @@
/datum/faction/upp/get_antag_guns_sorted_equipment()
return list(
list("PRIMARY FIREARMS", -1, null, null),
- list("CZ-81 Machine Pistol", 20, /obj/item/weapon/gun/pistol/skorpion/upp, VENDOR_ITEM_REGULAR),
+ list("Type 64 Submachinegun", 20, /obj/item/weapon/gun/smg/bizon/upp, VENDOR_ITEM_REGULAR),
list("Type 71 Pulse Rifle", 20, /obj/item/weapon/gun/rifle/type71, VENDOR_ITEM_REGULAR),
list("Type 71 Pulse Rifle Carbine", 20, /obj/item/weapon/gun/rifle/type71/carbine, VENDOR_ITEM_REGULAR),
list("PRIMARY AMMUNITION", -1, null, null),
- list("CZ-81 Magazine (.32ACP)", 60, /obj/item/ammo_magazine/pistol/skorpion, VENDOR_ITEM_REGULAR),
+ list("Type 64 Helical Magazine (7.62x19mm)", 60, /obj/item/ammo_magazine/smg/bizon, VENDOR_ITEM_REGULAR),
list("Type 71 AP Magazine (5.45x39mm)", 60, /obj/item/ammo_magazine/rifle/type71/ap, VENDOR_ITEM_REGULAR),
list("Type 71 Magazine (5.45x39mm)", 60, /obj/item/ammo_magazine/rifle/type71, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("Highpower Automag", 20, /obj/item/weapon/gun/pistol/highpower, VENDOR_ITEM_REGULAR),
- list("Korovin PK-9 Pistol", 20, /obj/item/weapon/gun/pistol/c99/upp, VENDOR_ITEM_REGULAR),
- list("N-Y 7.62mm Revolver", 20, /obj/item/weapon/gun/revolver/nagant, VENDOR_ITEM_REGULAR),
+ list("Type 73 Pistol", 20, /obj/item/weapon/gun/pistol/t73, VENDOR_ITEM_REGULAR),
+ list("NP02 Pistol", 20, /obj/item/weapon/gun/pistol/np92, VENDOR_ITEM_REGULAR),
+ list("ZHNK-72 Revolver", 20, /obj/item/weapon/gun/revolver/upp, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("Highpower Magazine (9mm)", 40, /obj/item/ammo_magazine/pistol/highpower, VENDOR_ITEM_REGULAR),
- list("N-Y Speed Loader (7.62x38mmR)", 40, /obj/item/ammo_magazine/revolver/upp, VENDOR_ITEM_REGULAR),
- list("PK-9 Magazine (.22 Hollowpoint)", 40, /obj/item/ammo_magazine/pistol/c99, VENDOR_ITEM_REGULAR),
+ list("Type 73 Magazine (7.62x25mm Tokarev)", 40, /obj/item/ammo_magazine/pistol/t73, VENDOR_ITEM_REGULAR),
+ list("ZHNK-72 Speed Loader (7.62x38mmR)", 40, /obj/item/ammo_magazine/revolver/upp, VENDOR_ITEM_REGULAR),
+ list("NP92 Magazine (9x18mm Makarov)", 40, /obj/item/ammo_magazine/pistol/np92, VENDOR_ITEM_REGULAR),
list("UTILITIES", -1, null, null),
list("M94 Marking Flare Pack", 20, /obj/item/storage/box/m94, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm
index aa1bc9b40783..65c5a47896fa 100644
--- a/code/datums/mob_hud.dm
+++ b/code/datums/mob_hud.dm
@@ -30,10 +30,18 @@ var/list/datum/mob_hud/huds = list(
// Stop displaying a HUD to a specific person
// (took off medical glasses)
-/datum/mob_hud/proc/remove_hud_from(mob/user)
+/datum/mob_hud/proc/remove_hud_from(mob/user, source)
+ if(length(hudusers[user]) && (source in hudusers[user]))
+ hudusers[user] -= source
+
+ if(length(hudusers[user]))
+ return FALSE
+
for(var/mob/target in hudmobs)
remove_from_single_hud(user, target)
+
hudusers -= user
+ return TRUE
// Stop rendering a HUD on a target
// "unenroll" them so to speak
@@ -53,8 +61,24 @@ var/list/datum/mob_hud/huds = list(
user.client.images -= target.clone.hud_list[i]
// Allow user to view a HUD (putting on medical glasses)
-/datum/mob_hud/proc/add_hud_to(mob/user)
+/datum/mob_hud/proc/add_hud_to(mob/user, source)
hudusers |= user
+ if(hudusers[user])
+ hudusers[user] |= list(source)
+ else
+ hudusers[user] += list(source)
+
+ for(var/mob/target in hudmobs)
+ add_to_single_hud(user, target)
+
+/// Refreshes the HUD, adding user and sources if missing and then calls to add the HUD
+/datum/mob_hud/proc/refresh_hud(mob/user, list/source)
+ hudusers |= user
+ if(hudusers[user])
+ hudusers[user] |= source
+ else
+ hudusers[user] += source
+
for(var/mob/target in hudmobs)
add_to_single_hud(user, target)
@@ -229,13 +253,13 @@ var/list/datum/mob_hud/huds = list(
for(var/datum/mob_hud/hud in huds)
if(istype(hud, /datum/mob_hud/xeno))
hud.remove_from_hud(src)
- hud.remove_hud_from(src)
+ hud.remove_hud_from(src, src)
else if (istype(hud, /datum/mob_hud/xeno_infection))
- hud.remove_hud_from(src)
+ hud.remove_hud_from(src, src)
if (xeno_hostile_hud)
xeno_hostile_hud = FALSE
var/datum/mob_hud/hostile_hud = huds[MOB_HUD_XENO_HOSTILE]
- hostile_hud.remove_hud_from(src)
+ hostile_hud.remove_hud_from(src, src)
@@ -243,13 +267,7 @@ var/list/datum/mob_hud/huds = list(
var/mob/M = source_mob ? source_mob : src
for(var/datum/mob_hud/hud in huds)
if(M in hud.hudusers)
- readd_hud(hud)
-
-/mob/proc/readd_hud(datum/mob_hud/hud)
- hud.add_hud_to(src)
-
-
-
+ hud.refresh_hud(src, hud.hudusers[M])
//Medical HUDs
diff --git a/code/datums/skills.dm b/code/datums/skills.dm
index 9bc53007173d..a2edde24b8d4 100644
--- a/code/datums/skills.dm
+++ b/code/datums/skills.dm
@@ -1290,6 +1290,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_EXPERT,
+ SKILL_EXECUTION = SKILL_EXECUTION_TRAINED,
)
/datum/skills/upp/conscript
name = "UPP Conscript"
diff --git a/code/datums/supply_packs/black_market.dm b/code/datums/supply_packs/black_market.dm
index 3f4453d03f32..1737a66e85a9 100644
--- a/code/datums/supply_packs/black_market.dm
+++ b/code/datums/supply_packs/black_market.dm
@@ -332,15 +332,15 @@ Additionally, weapons that are way too good to put in the basically-flavor black
dollar_cost = 5
containertype = /obj/structure/largecrate/black_market
-/datum/supply_packs/contraband/seized/ppsh
- name = "PPSh-17b submachinegun crate (x5 magazines included)"
+/datum/supply_packs/contraband/seized/pps43
+ name = "Type-19 submachinegun crate (x5 magazines included)"
contains = list(
- /obj/item/weapon/gun/smg/ppsh,
- /obj/item/ammo_magazine/smg/ppsh/extended,
- /obj/item/ammo_magazine/smg/ppsh/extended,
- /obj/item/ammo_magazine/smg/ppsh,
- /obj/item/ammo_magazine/smg/ppsh,
- /obj/item/ammo_magazine/smg/ppsh,
+ /obj/item/weapon/gun/smg/pps43,
+ /obj/item/ammo_magazine/smg/pps43/extended,
+ /obj/item/ammo_magazine/smg/pps43/extended,
+ /obj/item/ammo_magazine/smg/pps43,
+ /obj/item/ammo_magazine/smg/pps43,
+ /obj/item/ammo_magazine/smg/pps43,
)
dollar_cost = 15
containertype = /obj/structure/largecrate/black_market
@@ -373,18 +373,18 @@ Additionally, weapons that are way too good to put in the basically-flavor black
dollar_cost = 45
containertype = /obj/structure/largecrate/black_market
-/datum/supply_packs/contraband/seized/c99
- name = "Korovin PK-9 pistol crate (x6 magazines included)"
+/datum/supply_packs/contraband/seized/t73
+ name = "Type 73 pistol crate (x6 magazines included)"
contains = list(
- /obj/item/weapon/gun/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
+ /obj/item/weapon/gun/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
)
- dollar_cost = 5
+ dollar_cost = 15
containertype = /obj/structure/largecrate/black_market
/datum/supply_packs/contraband/seized/kt42
@@ -415,14 +415,14 @@ Additionally, weapons that are way too good to put in the basically-flavor black
dollar_cost = 5
containertype = /obj/structure/largecrate/black_market
-/datum/supply_packs/contraband/seized/skorpion
- name = "CZ-81 machine pistol (x4 magazines included)"
+/datum/supply_packs/contraband/seized/bizon
+ name = "Type 64 Submachinegun (x4 magazines included)"
contains = list(
- /obj/item/weapon/gun/pistol/skorpion,
- /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/ammo_magazine/pistol/skorpion,
+ /obj/item/weapon/gun/smg/bizon,
+ /obj/item/ammo_magazine/smg/bizon,
+ /obj/item/ammo_magazine/smg/bizon,
+ /obj/item/ammo_magazine/smg/bizon,
+ /obj/item/ammo_magazine/smg/bizon,
)
dollar_cost = 15
containertype = /obj/structure/largecrate/black_market
@@ -456,10 +456,10 @@ Additionally, weapons that are way too good to put in the basically-flavor black
dollar_cost = 15
containertype = /obj/structure/largecrate/black_market
-/datum/supply_packs/contraband/seized/nagant
- name = "N-Y 7.62mm revolver (x6 magazines included)"
+/datum/supply_packs/contraband/seized/upprevolver
+ name = "ZHNK-72 revolver (x6 magazines included)"
contains = list(
- /obj/item/weapon/gun/revolver/nagant,
+ /obj/item/weapon/gun/revolver/upp,
/obj/item/ammo_magazine/revolver/upp,
/obj/item/ammo_magazine/revolver/upp,
/obj/item/ammo_magazine/revolver/upp,
@@ -467,7 +467,7 @@ Additionally, weapons that are way too good to put in the basically-flavor black
/obj/item/ammo_magazine/revolver/upp,
/obj/item/ammo_magazine/revolver/upp,
)
- dollar_cost = 10
+ dollar_cost = 15
containertype = /obj/structure/largecrate/black_market
/datum/supply_packs/contraband/seized/r4t
@@ -1067,11 +1067,11 @@ Things that don't fit anywhere else. If they're meant for shipside use, they pro
new picked_type(loc)
loot_message = SPAN_NOTICE("It's some strange elite gear...?")
if(11 to 15)
- //Skorpion
- new /obj/item/weapon/gun/pistol/skorpion(loc)
- new /obj/item/ammo_magazine/pistol/skorpion(loc)
- new /obj/item/ammo_magazine/pistol/skorpion(loc)
- new /obj/item/ammo_magazine/pistol/skorpion(loc)
+ //Type 64
+ new /obj/item/weapon/gun/smg/bizon(loc)
+ new /obj/item/ammo_magazine/smg/bizon(loc)
+ new /obj/item/ammo_magazine/smg/bizon(loc)
+ new /obj/item/ammo_magazine/smg/bizon(loc)
// Somehow they found a Webley.
new /obj/item/weapon/gun/revolver/m44/custom/webley(loc)
new /obj/item/ammo_magazine/revolver/webley(loc)
@@ -1079,11 +1079,11 @@ Things that don't fit anywhere else. If they're meant for shipside use, they pro
new /obj/item/ammo_magazine/revolver/webley(loc)
loot_message = SPAN_NOTICE("It's some CLF pistol armaments!")
if(16 to 20)
- // PPSH
- new /obj/item/weapon/gun/smg/ppsh/with_drum_mag(loc)
- new /obj/item/ammo_magazine/smg/ppsh/extended(loc)
- new /obj/item/ammo_magazine/smg/ppsh/extended(loc)
- new /obj/item/ammo_magazine/smg/ppsh/extended(loc)
+ // Type 19
+ new /obj/item/weapon/gun/smg/pps43/extended_mag(loc)
+ new /obj/item/ammo_magazine/smg/pps43/extended(loc)
+ new /obj/item/ammo_magazine/smg/pps43/extended(loc)
+ new /obj/item/ammo_magazine/smg/pps43/extended(loc)
// MAC-15
new /obj/item/weapon/gun/smg/mac15/extended(loc)
new /obj/item/ammo_magazine/smg/mac15/extended(loc)
diff --git a/code/game/machinery/vending/vendor_types/antag/antag_gear.dm b/code/game/machinery/vending/vendor_types/antag/antag_gear.dm
index c2b27dc91ef1..84cd4a8bcec0 100644
--- a/code/game/machinery/vending/vendor_types/antag/antag_gear.dm
+++ b/code/game/machinery/vending/vendor_types/antag/antag_gear.dm
@@ -49,9 +49,9 @@
/obj/effect/essentials_set/upp_heavy
spawned_gear_list = list(
- /obj/item/weapon/gun/minigun/upp,
- /obj/item/ammo_magazine/minigun,
- /obj/item/ammo_magazine/minigun,
+ /obj/item/weapon/gun/pkp,
+ /obj/item/ammo_magazine/pkp,
+ /obj/item/ammo_magazine/pkp,
)
/obj/effect/essentials_set/leader/upp
diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
index fb9b662be1bc..891a2a907b39 100644
--- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
+++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
@@ -306,7 +306,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
list("Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Tanker Armor", 0, /obj/item/clothing/suit/storage/marine/tanker, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("M50 Tanker Helmet", 0, /obj/item/clothing/head/helmet/marine/tech/tanker, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
- list("SensorMate HUD", 0, /obj/item/clothing/glasses/hud/sensor, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
+ list("Medical Helmet Optic", 0, /obj/item/device/helmet_visor/medical, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Welding Kit", 0, /obj/item/tool/weldpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
index a2afe897b495..1f5bb1fda024 100644
--- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm
+++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list(
list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
- list("Sensor Medical HUD", 5, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("POUCHES", 0, null, null, null),
list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
index faff01f7f299..d43e53db4f0d 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
@@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list(
list("M56D Heavy Machine Gun", 24, /obj/item/storage/box/guncase/m56d, null, VENDOR_ITEM_REGULAR),
list("UTILITIES", 0, null, null, null),
- list("SensorMate Medical HUD", 12, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 12, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
list("M3 B12 Pattern Armor", 24, /obj/item/clothing/suit/storage/marine/leader, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
index 9757576e6d0b..935469b13b47 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
@@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list(
list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
- list("SensorMate Medical HUD", 4, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_RECOMMENDED),
+ list("Medical Helmet Optic", 4, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_RECOMMENDED),
list("Roller Bed", 2, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("SPECIAL AMMUNITION", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
index 7c9682985298..d2ba88096131 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
@@ -42,7 +42,6 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list(
list("MEDICAL UTILITIES", 0, null, null, null),
list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
- list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (EMPTY)", 3, /obj/item/storage/pouch/pressurized_reagent_canister, null, VENDOR_ITEM_REGULAR),
@@ -110,7 +109,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list(
list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Uniform", 0, /obj/item/clothing/under/marine/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
- list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/marine, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Helmet", 0, /obj/item/clothing/head/helmet/marine/medic, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
index d92eaabf52c1..09881536901e 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
@@ -76,7 +76,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list(
list("Brown Webbing Vest", 15, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_REGULAR),
list("Black Webbing Vest", 15, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 15, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
- list("SensorMate Medical HUD", 15, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
list("B12 Pattern Marine Armor", 30, /obj/item/clothing/suit/storage/marine/leader, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
index 5560508ca4c1..d3a606ae6b41 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
@@ -34,6 +34,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list(
list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("RADIO KEYS", 0, null, null, null),
list("Engineering Radio Encryption Key", 5, /obj/item/device/encryptionkey/engi, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
index e0900c3fd3c8..b09ae4aa15c5 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
@@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list(
list("UTILITIES", 0, null, null, null),
list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
- list("SensorMate Medical HUD", 15, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
list("Fuel Tank Strap Pouch", 5, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
index ceef80ab6952..7b96b5ee6dcd 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list(
list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
list("Breaching Charge", 10, /obj/item/explosive/plastic/breaching_charge, null, VENDOR_ITEM_REGULAR),
- list("SensorMate Medical HUD", 15, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("M2 Night Vision Goggles", 30, /obj/item/prop/helmetgarb/helmet_nvg, null, VENDOR_ITEM_RECOMMENDED),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/effects/spawners/random.dm b/code/game/objects/effects/spawners/random.dm
index 4d5bf88b9e6c..77390d533c9e 100644
--- a/code/game/objects/effects/spawners/random.dm
+++ b/code/game/objects/effects/spawners/random.dm
@@ -400,7 +400,6 @@
/obj/item/weapon/gun/revolver/small = /obj/item/ammo_magazine/revolver/small,
/obj/item/weapon/gun/pistol/heavy = /obj/item/ammo_magazine/pistol/heavy,
/obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/weapon/gun/pistol/skorpion/upp = /obj/item/ammo_magazine/pistol/skorpion,
)
/obj/effect/spawner/random/gun/pistol/lowchance
@@ -494,7 +493,7 @@
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
- /obj/item/weapon/gun/smg/ppsh = /obj/item/ammo_magazine/smg/ppsh,
+ /obj/item/weapon/gun/smg/pps43 = /obj/item/ammo_magazine/smg/pps43,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/uzi = /obj/item/ammo_magazine/smg/uzi,
diff --git a/code/game/objects/items/devices/helmet_visors.dm b/code/game/objects/items/devices/helmet_visors.dm
new file mode 100644
index 000000000000..dd913daf7620
--- /dev/null
+++ b/code/game/objects/items/devices/helmet_visors.dm
@@ -0,0 +1,98 @@
+/obj/item/device/helmet_visor
+ name = "squad optic"
+ desc = "An insertable visor HUD into a standard USCM helmet."
+ icon = 'icons/obj/items/clothing/helmet_visors.dmi'
+ icon_state = "hud_sight"
+ w_class = SIZE_TINY
+
+ ///The type of HUD our visor shows
+ var/hud_type = MOB_HUD_FACTION_USCM
+
+ ///The sound when toggling on the visor
+ var/toggle_on_sound = 'sound/handling/hud_on.ogg'
+
+ ///The sound when toggling off the visor
+ var/toggle_off_sound = 'sound/handling/hud_off.ogg'
+
+ ///The icon name for our helmet's action
+ var/action_icon_string = "hud_sight_down"
+
+ ///The overlay name for when our visor is active
+ var/helmet_overlay = "hud_sight_right"
+
+/// Called to see if the user can even use this visor
+/obj/item/device/helmet_visor/proc/can_toggle(mob/living/carbon/human/user)
+ return TRUE
+
+/// Called to see if this visor is a special non-HUD visor
+/obj/item/device/helmet_visor/proc/visor_function(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user, silent = FALSE)
+ if(attached_helmet == user.head && attached_helmet.active_visor == src)
+ var/datum/mob_hud/current_mob_hud = huds[hud_type]
+ current_mob_hud.add_hud_to(user, attached_helmet)
+ if(!silent)
+ to_chat(user, SPAN_NOTICE("You activate [src] on [attached_helmet]."))
+ return TRUE
+
+ var/datum/mob_hud/current_mob_hud = huds[hud_type]
+ current_mob_hud.remove_hud_from(user, attached_helmet)
+ if(!silent)
+ to_chat(user, SPAN_NOTICE("You deactivate [src] on [attached_helmet]."))
+ return TRUE
+
+/obj/item/device/helmet_visor/medical
+ name = "basic medical optic"
+ icon_state = "med_sight"
+ hud_type = MOB_HUD_MEDICAL_ADVANCED
+ action_icon_string = "med_sight_down"
+ helmet_overlay = "med_sight_right"
+
+/obj/item/device/helmet_visor/medical/advanced
+ name = "advanced medical optic"
+ helmet_overlay = "med_sight_left"
+
+/obj/item/device/helmet_visor/medical/advanced/can_toggle(mob/living/carbon/human/user)
+ if(!skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
+ to_chat(user, SPAN_NOTICE("You are not skilled enough to use [src]."))
+ return FALSE
+
+ return TRUE
+
+/obj/item/device/helmet_visor/security
+ name = "security optic"
+ icon_state = "sec_sight"
+ hud_type = MOB_HUD_SECURITY_ADVANCED
+ action_icon_string = "sec_sight_down"
+ helmet_overlay = "sec_sight_right"
+
+/obj/item/device/helmet_visor/welding_visor
+ name = "welding visor"
+ icon_state = "sight_empty"
+ hud_type = null
+ action_icon_string = "blank_hud_sight_down"
+ helmet_overlay = "weld_visor"
+
+/obj/item/device/helmet_visor/welding_visor/visor_function(obj/item/clothing/head/helmet/marine/attached_helmet, mob/living/carbon/human/user, silent = FALSE)
+ if(attached_helmet == user.head && attached_helmet.active_visor == src)
+ attached_helmet.vision_impair = VISION_IMPAIR_MAX
+ attached_helmet.flags_inventory |= COVEREYES|COVERMOUTH
+ attached_helmet.flags_inv_hide |= HIDEEYES|HIDEFACE
+ attached_helmet.eye_protection = EYE_PROTECTION_WELDING
+ user.update_tint()
+ if(!silent)
+ to_chat(user, SPAN_NOTICE("You activate [src] on [attached_helmet]."))
+ return TRUE
+
+ attached_helmet.vision_impair = VISION_IMPAIR_NONE
+ attached_helmet.flags_inventory &= ~(COVEREYES|COVERMOUTH)
+ attached_helmet.flags_inv_hide &= ~(HIDEEYES|HIDEFACE)
+ attached_helmet.eye_protection = EYE_PROTECTION_NONE
+ if(!silent)
+ to_chat(user, SPAN_NOTICE("You deactivate [src] on [attached_helmet]."))
+ user.update_tint()
+ return TRUE
+
+/obj/item/device/helmet_visor/welding_visor/mercenary
+ helmet_overlay = ""
+
+/obj/item/device/helmet_visor/welding_visor/tanker
+ helmet_overlay = "tanker_weld_visor"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 7e6b0db056d0..4ab9e19d5ae1 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -238,7 +238,7 @@
RegisterSignal(user, COMSIG_HUMAN_SET_UNDEFIBBABLE, PROC_REF(update_minimap_icon))
if(headset_hud_on)
var/datum/mob_hud/H = huds[hud_type]
- H.add_hud_to(user)
+ H.add_hud_to(user, src)
//squad leader locator is no longer invisible on our player HUD.
if(user.mind && (user.assigned_squad || misc_tracking) && user.hud_used && user.hud_used.locate_leader)
user.show_hud_tracker()
@@ -257,7 +257,7 @@
))
if(istype(user) && user.has_item_in_ears(src)) //dropped() is called before the inventory reference is update.
var/datum/mob_hud/H = huds[hud_type]
- H.remove_hud_from(user)
+ H.remove_hud_from(user, src)
//squad leader locator is invisible again
if(user.hud_used && user.hud_used.locate_leader)
user.hide_hud_tracker()
@@ -290,14 +290,14 @@
if(user.has_item_in_ears(src)) //worn
var/datum/mob_hud/H = huds[hud_type]
if(headset_hud_on)
- H.add_hud_to(usr)
+ H.add_hud_to(usr, src)
if(user.mind && (misc_tracking || user.assigned_squad) && user.hud_used?.locate_leader)
user.show_hud_tracker()
if(misc_tracking)
SStracking.start_misc_tracking(user)
update_minimap_icon()
else
- H.remove_hud_from(usr)
+ H.remove_hud_from(usr, src)
if(user.hud_used?.locate_leader)
user.hide_hud_tracker()
if(misc_tracking)
diff --git a/code/game/objects/items/shards.dm b/code/game/objects/items/shards.dm
index f46f5b5a5fc0..412a14268037 100644
--- a/code/game/objects/items/shards.dm
+++ b/code/game/objects/items/shards.dm
@@ -232,13 +232,13 @@
organ.take_damage(damage_on_move * count, 0, 0, no_limb_loss = TRUE)
embedded_mob.pain.apply_pain(damage_on_move * count)
-/obj/item/shard/shrapnel/nagant
+/obj/item/shard/shrapnel/upp
name = "small shrapnel"
desc = "Some shrapnel that used to be embedded underneath someone's skin."
icon_state = "small"
damage_on_move = 2
-/obj/item/shard/shrapnel/nagant/bits
+/obj/item/shard/shrapnel/upp/bits
name = "tiny shrapnel"
desc = "A tiny piece of shrapnel that used to be embedded underneath someone's skin."
icon_state = "tiny"
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 3bf3656f4bd2..37320aca0133 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -497,7 +497,7 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r
var/obj/structure/transmitter/internal/internal_transmitter
var/phone_category = PHONE_MARINE
- var/network_receive = FACTION_MARINE
+ var/list/networks_receive = list(FACTION_MARINE)
var/list/networks_transmit = list(FACTION_MARINE)
var/base_icon
@@ -523,7 +523,7 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r
internal_transmitter.relay_obj = src
internal_transmitter.phone_category = phone_category
internal_transmitter.enabled = FALSE
- internal_transmitter.network_receive = network_receive
+ internal_transmitter.networks_receive = networks_receive
internal_transmitter.networks_transmit = networks_transmit
RegisterSignal(internal_transmitter, COMSIG_TRANSMITTER_UPDATE_ICON, PROC_REF(check_for_ringing))
GLOB.radio_packs += src
@@ -593,7 +593,8 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r
. = ..()
/obj/item/storage/backpack/marine/satchel/rto/upp_net
- network_receive = FACTION_UPP
+ name = "\improper UPP Radio Telephone Pack"
+ networks_receive = list(FACTION_UPP)
networks_transmit = list(FACTION_UPP)
/obj/item/storage/backpack/marine/satchel/rto/small
@@ -602,7 +603,8 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r
/obj/item/storage/backpack/marine/satchel/rto/small/upp_net
- network_receive = FACTION_UPP
+ name = "\improper UPP Radio Telephone Pack"
+ networks_receive = list(FACTION_UPP)
networks_transmit = list(FACTION_UPP)
phone_category = PHONE_UPP_SOLDIER
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 7721a9643fb5..805f1f49c7ff 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -391,6 +391,7 @@
new /obj/item/weapon/baton(src)
new /obj/item/handcuffs(src)
new /obj/item/reagent_container/spray/pepper(src)
+ new /obj/item/ammo_magazine/revolver/upp/shrapnel(src)
/obj/item/storage/belt/security/MP/CMB
name = "\improper CMB duty belt"
@@ -1405,37 +1406,50 @@
/obj/item/storage/belt/gun/type47
name = "\improper Type 47 pistol holster rig"
- desc = "This UPP-designed sidearm rig can very snugly and securely fit either a Nagant-Yamasaki revolver or a Korovin PK-9, and both their magazines or speedloaders. However, it lacks versatility in stored weaponry."
+ desc = "This UPP-designed sidearm rig can very snugly and securely fit a Type-73, NP92, or a ZHNK-72, and their magazines or speedloaders. However, it lacks versatility in stored weaponry."
icon_state = "korovin_holster"
item_state = "upp_belt"
storage_slots = 7
can_hold = list(
- /obj/item/weapon/gun/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99,
- /obj/item/ammo_magazine/pistol/c99/tranq,
- /obj/item/weapon/gun/revolver/nagant,
+ /obj/item/weapon/gun/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73_impact,
+ /obj/item/weapon/gun/pistol/np92,
+ /obj/item/ammo_magazine/pistol/np92,
+ /obj/item/ammo_magazine/pistol/np92/tranq,
+ /obj/item/weapon/gun/revolver/upp,
/obj/item/ammo_magazine/revolver/upp,
/obj/item/ammo_magazine/revolver/upp/shrapnel,
)
holster_slots = list("1" = list("icon_x" = -1))
-/obj/item/storage/belt/gun/type47/PK9/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/c99/upp())
+/obj/item/storage/belt/gun/type47/np92/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/np92())
for(var/i = 1 to storage_slots - 1)
- new /obj/item/ammo_magazine/pistol/c99(src)
+ new /obj/item/ammo_magazine/pistol/np92(src)
-/obj/item/storage/belt/gun/type47/PK9/tranq/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/c99/upp/tranq())
+/obj/item/storage/belt/gun/type47/np92/suppressed/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/np92/suppressed())
for(var/i = 1 to storage_slots - 1)
- new /obj/item/ammo_magazine/pistol/c99/tranq(src)
+ new /obj/item/ammo_magazine/pistol/np92/suppressed(src)
-/obj/item/storage/belt/gun/type47/NY/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/revolver/nagant())
+/obj/item/storage/belt/gun/type47/t73/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/t73())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/t73(src)
+
+/obj/item/storage/belt/gun/type47/t73/leader/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/t73/leader())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/t73_impact(src)
+
+/obj/item/storage/belt/gun/type47/revolver/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/upp())
for(var/total_storage_slots in 1 to storage_slots - 1)
new /obj/item/ammo_magazine/revolver/upp(src)
-/obj/item/storage/belt/gun/type47/NY/shrapnel/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/revolver/nagant/shrapnel())
+/obj/item/storage/belt/gun/type47/revolver/shrapnel/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/upp/shrapnel())
for(var/total_storage_slots in 1 to storage_slots - 1)
new /obj/item/ammo_magazine/revolver/upp/shrapnel(src)
diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm
index eb6f100f6e8b..424a4f5be0e8 100644
--- a/code/game/objects/items/storage/misc.dm
+++ b/code/game/objects/items/storage/misc.dm
@@ -124,6 +124,20 @@
new /obj/item/weapon/gun/pistol/clfpistol(src)
new /obj/item/ammo_magazine/pistol/clfpistol(src)
+/obj/item/storage/box/upp //war trophy luger
+ name = "Type 73 storing case"
+ desc = "A small case containing the once-standard sidearm of the UPP, the Type 73, and two additional magazines. The contained sidearm is probably looted off a dead officer or from a captured stockpile, either way this thing is worth a pretty penny."
+ icon = 'icons/obj/items/storage.dmi'
+ icon_state = "matebacase"
+ w_class = SIZE_MEDIUM
+ max_w_class = SIZE_MEDIUM
+ storage_slots = 3
+
+/obj/item/storage/box/upp/fill_preset_inventory()
+ new /obj/item/weapon/gun/pistol/t73(src)
+ new /obj/item/ammo_magazine/pistol/t73(src)
+ new /obj/item/ammo_magazine/pistol/t73(src)
+
/obj/item/storage/box/co2_knife
name = "M8 cartridge bayonet packaging"
desc = "Contains one M8 Cartridge Bayonet and two sister CO2 cartridges. Thanks for being a dedicated Boots magazine subscriber!"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 11b440e0e2ec..9557013268bf 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -105,7 +105,7 @@
new /obj/item/clothing/head/ushanka(src)
new /obj/item/clothing/mask/rebreather/scarf(src)
new /obj/item/clothing/under/rank/veteran/soviet_uniform_01(src)
- new /obj/item/storage/belt/gun/type47/NY(src)
+ new /obj/item/storage/belt/gun/type47/t73(src)
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 2393b5df8265..becd128830b6 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -335,13 +335,13 @@
num_guns = 3
num_mags = 3
name = "\improper Hyperdyne firearm crate"
- stuff = list( /obj/item/weapon/gun/revolver/nagant = /obj/item/ammo_magazine/revolver/upp,
- /obj/item/weapon/gun/pistol/c99 = /obj/item/ammo_magazine/pistol/c99,
+ stuff = list( /obj/item/weapon/gun/revolver/upp = /obj/item/ammo_magazine/revolver/upp,
+ /obj/item/weapon/gun/pistol/np92 = /obj/item/ammo_magazine/pistol/np92,
/obj/item/weapon/gun/pistol/kt42 = /obj/item/ammo_magazine/pistol/kt42,
/obj/item/weapon/gun/rifle/mar40 = /obj/item/ammo_magazine/rifle/mar40,
/obj/item/weapon/gun/rifle/mar40/carbine = /obj/item/ammo_magazine/rifle/mar40/extended,
/obj/item/weapon/gun/rifle/sniper/svd = /obj/item/ammo_magazine/sniper/svd,
- /obj/item/weapon/gun/smg/ppsh = /obj/item/ammo_magazine/smg/ppsh
+ /obj/item/weapon/gun/smg/pps43 = /obj/item/ammo_magazine/smg/pps43
)
/obj/structure/largecrate/guns/merc
@@ -357,11 +357,11 @@
/obj/item/weapon/gun/shotgun/merc = /obj/item/ammo_magazine/handful/shotgun/buckshot,
/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb = /obj/item/ammo_magazine/handful/shotgun/buckshot,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
- /obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion,
+ /obj/item/weapon/gun/smg/bizon = /obj/item/ammo_magazine/smg/bizon,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/uzi = /obj/item/ammo_magazine/smg/uzi,
/obj/item/weapon/gun/rifle/mar40/carbine = /obj/item/ammo_magazine/rifle/mar40,
- /obj/item/weapon/gun/smg/ppsh = /obj/item/ammo_magazine/smg/ppsh,
+ /obj/item/weapon/gun/smg/pps43 = /obj/item/ammo_magazine/smg/pps43,
/obj/item/weapon/gun/rifle/l42a = /obj/item/ammo_magazine/rifle/l42a,
/obj/item/weapon/gun/rifle/l42a/abr40 = /obj/item/ammo_magazine/rifle/l42a/abr40,
/obj/item/weapon/gun/smg/mp5 = /obj/item/ammo_magazine/smg/mp5,
@@ -525,9 +525,9 @@
new /obj/item/weapon/gun/rifle/mar40(src)
new /obj/item/ammo_magazine/rifle/mar40(src)
new /obj/item/ammo_magazine/rifle/mar40(src)
- new /obj/item/weapon/gun/pistol/skorpion(src)
- new /obj/item/ammo_magazine/pistol/skorpion(src)
- new /obj/item/ammo_magazine/pistol/skorpion(src)
+ new /obj/item/weapon/gun/smg/bizon(src)
+ new /obj/item/ammo_magazine/smg/bizon(src)
+ new /obj/item/ammo_magazine/smg/bizon(src)
new /obj/item/weapon/gun/shotgun/combat(src)
new /obj/item/ammo_magazine/shotgun(src)
new /obj/item/ammo_magazine/shotgun/buckshot(src)
@@ -571,8 +571,8 @@
new /obj/item/ammo_magazine/rifle(src)
new /obj/item/ammo_magazine/rifle/mar40(src)
new /obj/item/ammo_magazine/rifle/mar40(src)
- new /obj/item/ammo_magazine/pistol/skorpion(src)
- new /obj/item/ammo_magazine/pistol/skorpion(src)
+ new /obj/item/ammo_magazine/smg/bizon(src)
+ new /obj/item/ammo_magazine/smg/bizon(src)
new /obj/item/ammo_magazine/shotgun(src)
new /obj/item/ammo_magazine/shotgun/buckshot(src)
diff --git a/code/modules/admin/verbs/mob_verbs.dm b/code/modules/admin/verbs/mob_verbs.dm
index 376115c0d630..4809d9b2e6ee 100644
--- a/code/modules/admin/verbs/mob_verbs.dm
+++ b/code/modules/admin/verbs/mob_verbs.dm
@@ -81,7 +81,7 @@
H = huds[MOB_HUD_XENO_STATUS]
else return
- H.add_hud_to(M)
+ H.add_hud_to(M, HUD_SOURCE_ADMIN)
to_chat(src, SPAN_INFO("[hud_choice] enabled."))
message_admins(SPAN_INFO("[key_name(usr)] has given a [hud_choice] to [M]."))
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index e712e267fb2d..106da02a00b6 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -515,6 +515,12 @@ var/global/list/gear_datums_by_name = list()
display_name = "D18 Holdout Pistol"
path = /obj/item/storage/box/clf
+/datum/gear/weapon/upppistol //ww2 war trophy luger
+ display_name = "Type 73 Pistol"
+ path = /obj/item/storage/box/upp
+ slot = WEAR_IN_BACK
+ cost = 4
+
/datum/gear/weapon/m4a3_custom
display_name = "M4A3 Custom Pistol"
path = /obj/item/weapon/gun/pistol/m4a3/custom
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index b81411a26440..b600b39a0018 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -623,7 +623,7 @@
if(!isobserver(usr))
return
- var/mob/dead/observer/O = usr
+ var/mob/dead/observer/observer_user = usr
var/datum/mob_hud/H
switch(hud_choice)
if("Medical HUD")
@@ -643,11 +643,11 @@
if("Faction CLF HUD")
H = huds[MOB_HUD_FACTION_CLF]
- O.HUD_toggled[hud_choice] = prefs.observer_huds[hud_choice]
- if(O.HUD_toggled[hud_choice])
- H.add_hud_to(O)
+ observer_user.HUD_toggled[hud_choice] = prefs.observer_huds[hud_choice]
+ if(observer_user.HUD_toggled[hud_choice])
+ H.add_hud_to(observer_user, observer_user)
else
- H.remove_hud_from(O)
+ H.remove_hud_from(observer_user, observer_user)
/client/proc/toggle_ghost_health_scan()
set name = "Toggle Health Scan"
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 7bcf1dd6645c..a7844631051e 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -70,10 +70,10 @@
if(hud_type)
var/datum/mob_hud/MH = huds[hud_type]
if(active)
- MH.add_hud_to(H)
+ MH.add_hud_to(H, src)
playsound(H, 'sound/handling/hud_on.ogg', 25, 1)
else
- MH.remove_hud_from(H)
+ MH.remove_hud_from(H, src)
playsound(H, 'sound/handling/hud_off.ogg', 25, 1)
if(active) //turning it on? then add the traits
for(var/trait in clothing_traits)
@@ -95,7 +95,7 @@
else if(hud_type)
var/datum/mob_hud/MH = huds[hud_type]
- MH.add_hud_to(user)
+ MH.add_hud_to(user, src)
user.update_sight()
..()
@@ -103,7 +103,7 @@
if(hud_type && active && istype(user))
if(src == user.glasses) //dropped is called before the inventory reference is updated.
var/datum/mob_hud/H = huds[hud_type]
- H.remove_hud_from(user)
+ H.remove_hud_from(user, src)
user.glasses = null
user.update_inv_glasses()
user.update_sight()
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index f5baeb804412..1a133eee0dfe 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -109,7 +109,7 @@
deactive_state = "sensorhud_d"
flags_armor_protection = 0
toggleable = TRUE
- hud_type = MOB_HUD_MEDICAL_BASIC
+ hud_type = MOB_HUD_MEDICAL_ADVANCED
actions_types = list(/datum/action/item_action/toggle)
req_skill = SKILL_MEDICAL
req_skill_level = SKILL_MEDICAL_DEFAULT
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 0181d239c574..fe2b92c45dd8 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -360,6 +360,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
var/flags_marine_helmet = HELMET_SQUAD_OVERLAY|HELMET_GARB_OVERLAY|HELMET_DAMAGE_OVERLAY
var/helmet_bash_cooldown = 0
+ //speciality does NOTHING if you have NO_NAME_OVERRIDE
var/specialty = "M10 pattern marine" //Give them a specialty var so that they show up correctly in vendors. speciality does NOTHING if you have NO_NAME_OVERRIDE.
valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C)
@@ -372,11 +373,27 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
var/storage_slots_reserved_for_garb = 1
var/storage_max_w_class = SIZE_TINY // can hold tiny items only, EXCEPT for glasses & metal flask.
var/storage_max_storage_space = 4
+
/// The dmi where the grayscale squad overlays are contained
var/helmet_overlay_icon = 'icons/mob/humans/onmob/head_1.dmi'
-/obj/item/clothing/head/helmet/marine/New(loc,
- new_protection[] = list(MAP_ICE_COLONY = ICE_PLANET_MIN_COLD_PROT))
+ ///Any visors built into the helmet
+ var/list/built_in_visors = list(new /obj/item/device/helmet_visor)
+
+ ///Any visors that have been added into the helmet
+ var/list/inserted_visors = list()
+
+ ///Max amount of inserted visors
+ var/max_inserted_visors = 1
+
+ ///The current active visor that is shown
+ var/obj/item/device/helmet_visor/active_visor = null
+
+ ///Designates a visor type that should start down when initialized
+ var/start_down_visor_type
+
+/obj/item/clothing/head/helmet/marine/Initialize(mapload, new_protection[] = list(MAP_ICE_COLONY = ICE_PLANET_MIN_COLD_PROT))
+ . = ..()
if(!(flags_atom & NO_NAME_OVERRIDE))
name = "[specialty]"
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
@@ -385,7 +402,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
name += " helmet"
if(!(flags_atom & NO_SNOW_TYPE))
- select_gamemode_skin(type,null,new_protection)
+ select_gamemode_skin(type, null, new_protection)
helmet_overlays = list() //To make things simple.
@@ -399,7 +416,24 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
camera = new /obj/structure/machinery/camera(src)
camera.network = list(CAMERA_NET_OVERWATCH)
- ..()
+ if(length(inserted_visors) || length(built_in_visors))
+ var/datum/action/item_action/cycle_helmet_huds/new_action = new(src)
+ LAZYADD(actions, new_action)
+ if(ishuman(loc))
+ var/mob/living/carbon/human/holding_human = loc
+ if(holding_human.head == src)
+ new_action.give_to(holding_human)
+
+ if(start_down_visor_type)
+ for(var/obj/item/device/helmet_visor/cycled_visor in (built_in_visors + inserted_visors))
+ if(cycled_visor.type == start_down_visor_type)
+ active_visor = cycled_visor
+ break
+
+ if(active_visor)
+ var/datum/action/item_action/cycle_helmet_huds/cycle_action = locate() in actions
+ if(cycle_action)
+ cycle_action.set_action_overlay(active_visor)
/obj/item/clothing/head/helmet/marine/Destroy(force)
helmet_overlays = null
@@ -421,9 +455,9 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
if(pockets.handle_mousedrop(usr, over_object))
..()
-/obj/item/clothing/head/helmet/marine/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/ammo_magazine) && world.time > helmet_bash_cooldown && user)
- var/obj/item/ammo_magazine/M = W
+/obj/item/clothing/head/helmet/marine/attackby(obj/item/attacking_item, mob/user)
+ if(istype(attacking_item, /obj/item/ammo_magazine) && world.time > helmet_bash_cooldown && user)
+ var/obj/item/ammo_magazine/M = attacking_item
var/ammo_level = "somewhat"
playsound(user, 'sound/items/trayhit1.ogg', 15, FALSE)
if(M.current_rounds > (M.max_rounds/2))
@@ -436,9 +470,48 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
ammo_level = "empty. Uh oh."
user.visible_message("[user] bashes [M] against their helmet", "You bash [M] against your helmet. It is [ammo_level]")
helmet_bash_cooldown = world.time + 20 SECONDS
- else
- ..()
- return pockets.attackby(W, user)
+ return
+
+ if(istype(attacking_item, /obj/item/device/helmet_visor))
+ if(length(inserted_visors) >= max_inserted_visors)
+ to_chat(user, SPAN_NOTICE("[src] has used all of its visor attachment sockets."))
+ return
+
+ var/obj/item/device/helmet_visor/new_visor = attacking_item
+ for(var/obj/item/device/helmet_visor/cycled_visor as anything in (built_in_visors + inserted_visors))
+ if(cycled_visor.type == new_visor.type)
+ to_chat(user, SPAN_NOTICE("[src] already has this type of HUD connected."))
+ return
+ if(!user.drop_held_item())
+ return
+
+ inserted_visors += new_visor
+ to_chat(user, SPAN_NOTICE("You connect [new_visor] to [src]."))
+ new_visor.forceMove(src)
+ if(!(locate(/datum/action/item_action/cycle_helmet_huds) in actions))
+ var/datum/action/item_action/cycle_helmet_huds/new_action = new(src)
+ new_action.give_to(user)
+ return
+
+ if(HAS_TRAIT(attacking_item, TRAIT_TOOL_SCREWDRIVER) && length(inserted_visors))
+ for(var/obj/item/device/visor as anything in inserted_visors)
+ visor.forceMove(get_turf(src))
+
+ inserted_visors = list()
+ to_chat(user, SPAN_NOTICE("You remove the inserted visors."))
+ turn_off_visor(user, active_visor, TRUE)
+
+ var/datum/action/item_action/cycle_helmet_huds/cycle_action = locate() in actions
+ cycle_action.set_default_overlay()
+ if(!length(built_in_visors))
+ cycle_action.remove_from(user)
+
+ active_visor = null
+ recalculate_visors(user)
+ return
+
+ ..()
+ return pockets.attackby(attacking_item, user)
/obj/item/clothing/head/helmet/marine/on_pocket_insertion()
update_icon()
@@ -478,6 +551,9 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
else
helmet_overlays = above_band_layer + below_band_layer
+ if(active_visor)
+ helmet_overlays += active_visor.helmet_overlay
+
if(ismob(loc))
var/mob/M = loc
M.update_inv_head()
@@ -485,6 +561,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/clothing/head/helmet/marine/equipped(mob/living/carbon/human/mob, slot)
if(camera)
camera.c_tag = mob.name
+ if(active_visor)
+ recalculate_visors(mob)
..()
/obj/item/clothing/head/helmet/marine/unequipped(mob/user, slot)
@@ -493,6 +571,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
for(var/obj/item/attachable/flashlight/F in pockets)
if(F.activated)
F.activate_attachment(src, user, TRUE)
+ if(active_visor)
+ recalculate_visors(user)
/obj/item/clothing/head/helmet/marine/dropped(mob/living/carbon/human/mob)
if(camera)
@@ -501,6 +581,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
for(var/obj/item/attachable/flashlight/F in pockets)
if(F.activated)
F.activate_attachment(src, mob, TRUE)
+ if(active_visor)
+ recalculate_visors(mob)
..()
/obj/item/clothing/head/helmet/marine/has_garb_overlay()
@@ -518,59 +600,122 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
return pockets
return ..()
-/obj/item/clothing/head/helmet/marine/tech
- name = "\improper M10 technician helmet"
- desc = "A modified M10 marine helmet for ComTechs. Features a toggleable welding screen for eye protection."
- icon_state = "tech_helmet"
- specialty = "M10 technician"
- var/protection_on = FALSE
- ///To remember the helmet's map variant-adjusted icon state
- var/base_icon_state
+/// Recalculates and sets the proper visor effects
+/obj/item/clothing/head/helmet/marine/proc/recalculate_visors(mob/user)
+ turn_off_visors(user)
- actions_types = list(/datum/action/item_action/toggle)
- vision_impair = VISION_IMPAIR_NONE
+ if(!active_visor)
+ return
-/obj/item/clothing/head/helmet/marine/tech/Initialize()
- . = ..()
- base_icon_state = icon_state
+ if(user != loc)
+ return
-/obj/item/clothing/head/helmet/marine/tech/attack_self(mob/user)
- ..()
- toggle()
+ var/mob/living/carbon/human/human_user = user
+ if(!human_user || human_user.head != src)
+ return
-/obj/item/clothing/head/helmet/marine/tech/verb/toggle()
- set category = "Object"
- set name = "Toggle Tech Helmet"
- set src in usr
+ turn_on_visor(human_user)
- if(usr.canmove && !usr.stat && !usr.is_mob_restrained())
- if(protection_on)
- vision_impair = VISION_IMPAIR_NONE
- flags_inventory &= ~(COVEREYES|COVERMOUTH)
- flags_inv_hide &= ~(HIDEEYES|HIDEFACE)
- icon_state = base_icon_state
- eye_protection = EYE_PROTECTION_NONE
- to_chat(usr, "You deactivate the [src]'s welding screen.")
- else
- vision_impair = VISION_IMPAIR_MAX
- flags_inventory |= COVEREYES|COVERMOUTH
- flags_inv_hide |= HIDEEYES|HIDEFACE
- icon_state = "[base_icon_state]_on"
- eye_protection = EYE_PROTECTION_WELDING
- to_chat(usr, "You activate the [src]'s welding screen.")
+/// Turns on the current active visor
+/obj/item/clothing/head/helmet/marine/proc/turn_on_visor(mob/user)
+ if(!active_visor)
+ return
- protection_on = !protection_on
+ if(active_visor.can_toggle(user))
+ active_visor.visor_function(src, user)
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- if(H.head == src)
- H.update_tint()
+ playsound_client(user.client, active_visor.toggle_on_sound, null, 75)
+ update_icon()
+
+/// Turns off the specified visor
+/obj/item/clothing/head/helmet/marine/proc/turn_off_visor(mob/user, obj/item/device/helmet_visor/current_visor, sound = FALSE)
+ if(!current_visor)
+ return
+
+ if(current_visor.can_toggle(user))
+ current_visor.visor_function(src, user)
+
+ if(sound)
+ playsound_client(user.client, current_visor.toggle_off_sound, null, 75)
+ update_icon()
+
+/// Attempts to turn off all visors
+/obj/item/clothing/head/helmet/marine/proc/turn_off_visors(mob/user)
+ var/list/total_visors = built_in_visors + inserted_visors
+
+ for(var/obj/item/device/helmet_visor/cycled_helmet_visor in total_visors)
+ if(cycled_helmet_visor.can_toggle(user))
+ cycled_helmet_visor.visor_function(src, user, TRUE)
+
+ update_icon()
+
+///Cycles the active HUD to the next between built_in_visors and inserted_visors, nullifies if at end and removes all HUDs
+/obj/item/clothing/head/helmet/marine/proc/cycle_huds(mob/user)
+ var/list/total_visors = built_in_visors + inserted_visors
+
+ if(!length(total_visors))
+ return FALSE
+
+ if(active_visor)
+ var/iterator = 1
+ for(var/hud_type in total_visors)
+ if(hud_type == active_visor)
+ if(length(total_visors) > iterator)
+ turn_off_visor(user, active_visor, FALSE)
+ active_visor = total_visors[(iterator + 1)]
+ recalculate_visors(user)
+ return active_visor
+ else
+ turn_off_visor(user, active_visor, TRUE)
+ active_visor = null
+ recalculate_visors(user)
+ return FALSE
+ iterator++
+
+ if(total_visors[1])
+ active_visor = total_visors[1]
+ recalculate_visors(user)
+ return active_visor
+
+ active_visor = null
+ recalculate_visors(user)
+ return FALSE
+
+/datum/action/item_action/cycle_helmet_huds/New(Target, obj/item/holder)
+ . = ..()
+ name = "Cycle helmet HUD"
+ button.name = name
+ set_default_overlay()
+
+/datum/action/item_action/cycle_helmet_huds/action_activate()
+ . = ..()
+ var/obj/item/clothing/head/helmet/marine/holder_helmet = holder_item
+ var/cycled_hud = holder_helmet.cycle_huds(usr)
+
+ set_action_overlay(cycled_hud)
- update_clothing_icon() //so our mob-overlays update
+/// Sets the action overlay based on the visor type
+/datum/action/item_action/cycle_helmet_huds/proc/set_action_overlay(obj/item/device/helmet_visor/new_visor)
+ if(!new_visor)
+ set_default_overlay()
+ return
- for(var/X in actions)
- var/datum/action/A = X
- A.update_button_icon()
+ action_icon_state = new_visor.action_icon_string
+ button.overlays.Cut()
+ button.overlays += image('icons/obj/items/clothing/helmet_visors.dmi', button, action_icon_state)
+
+/// Sets the action overlay to default hud sight up
+/datum/action/item_action/cycle_helmet_huds/proc/set_default_overlay()
+ action_icon_state = "hud_sight_up"
+ button.overlays.Cut()
+ button.overlays += image('icons/obj/items/clothing/helmet_visors.dmi', button, action_icon_state)
+
+/obj/item/clothing/head/helmet/marine/tech
+ name = "\improper M10 technician helmet"
+ desc = "A modified M10 marine helmet for ComTechs. Features a toggleable welding screen for eye protection."
+ icon_state = "tech_helmet"
+ specialty = "M10 technician"
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/welding_visor)
/obj/item/clothing/head/helmet/marine/tech/tanker
name = "\improper M50 tanker helmet"
@@ -583,12 +728,15 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
flags_inventory = BLOCKSHARPOBJ
flags_inv_hide = HIDEEARS|HIDETOPHAIR
specialty = "M50 tanker"
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/welding_visor/tanker)
/obj/item/clothing/head/helmet/marine/medic
name = "\improper M10 corpsman helmet"
desc = "An M10 marine helmet version worn by marine hospital corpsmen. Has red cross painted on its front."
icon_state = "med_helmet"
specialty = "M10 pattern medic"
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/medical/advanced)
+ start_down_visor_type = /obj/item/device/helmet_visor/medical/advanced
/obj/item/clothing/head/helmet/marine/covert
name = "\improper M10 covert helmet"
@@ -729,6 +877,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
armor_bio = CLOTHING_ARMOR_MEDIUMHIGH
specialty = "M10 pattern captain"
flags_atom = NO_SNOW_TYPE
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/medical/advanced, new /obj/item/device/helmet_visor/security)
/obj/item/clothing/head/helmet/marine/MP
name = "\improper M10 pattern MP helmet"
@@ -737,6 +886,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
item_state = "mp_helmet"
armor_energy = CLOTHING_ARMOR_MEDIUMLOW
specialty = "M10 pattern military police"
+ built_in_visors = list(new /obj/item/device/helmet_visor/security)
/obj/item/clothing/head/helmet/marine/MP/WO
name = "\improper M3 pattern chief MP helmet"
@@ -751,6 +901,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
icon_state = "helmet"
item_state = "helmet"
specialty = "M10 pattern officer"
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/medical/advanced)
/obj/item/clothing/head/helmet/marine/mp/provost/marshal
name = "\improper Provost Marshal Cap"
@@ -770,6 +921,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
armor_bio = CLOTHING_ARMOR_MEDIUMHIGH
specialty = "M10 pattern SOF"
flags_atom = NO_SNOW_TYPE
+ built_in_visors = list(new /obj/item/device/helmet_visor, new /obj/item/device/helmet_visor/medical, new /obj/item/device/helmet_visor/security)
//=============================//PMCS\\==================================\\
@@ -777,6 +929,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/clothing/head/helmet/marine/veteran
flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE //Let's make these keep their name and icon.
+ built_in_visors = list()
/obj/item/clothing/head/helmet/marine/veteran/pmc
name = "\improper PMC tactical cap"
@@ -926,6 +1079,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
armor_rad = CLOTHING_ARMOR_MEDIUMLOW
armor_internaldamage = CLOTHING_ARMOR_HIGH
min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT
+ clothing_traits = list(TRAIT_EAR_PROTECTION) //the sprites clearly fully cover the ears and most of the head
/obj/item/clothing/head/helmet/marine/veteran/UPP/engi
name = "\improper UM4-V helmet"
@@ -1137,44 +1291,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/clothing/head/helmet/marine/veteran/mercenary/support/engineer
desc = "A sturdy helmet worn by an unknown mercenary group. Features a toggleable welding screen for eye protection."
- var/protection_on = FALSE
-
- actions_types = list(/datum/action/item_action/toggle)
- vision_impair = VISION_IMPAIR_NONE
-
-/obj/item/clothing/head/helmet/marine/veteran/mercenary/support/engineer/attack_self(mob/user)
- ..()
- toggle()
-
-/obj/item/clothing/head/helmet/marine/veteran/mercenary/support/engineer/verb/toggle()
- set category = "Object"
- set name = "Toggle Helmet Welding Visor"
- set src in usr
-
- if(usr.canmove && !usr.stat && !usr.is_mob_restrained())
- if(protection_on)
- vision_impair = VISION_IMPAIR_NONE
- flags_inventory &= ~(COVEREYES|COVERMOUTH)
- flags_inv_hide &= ~(HIDEEYES|HIDEFACE)
- eye_protection = EYE_PROTECTION_NONE
- to_chat(usr, "You deactivate the [src]'s welding screen.")
- else
- vision_impair = VISION_IMPAIR_MAX
- flags_inventory |= COVEREYES|COVERMOUTH
- flags_inv_hide |= HIDEEYES|HIDEFACE
- eye_protection = EYE_PROTECTION_WELDING
- to_chat(usr, "You activate the [src]'s welding screen.")
-
- protection_on = !protection_on
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- if(H.head == src)
- H.update_tint()
-
- for(var/X in actions)
- var/datum/action/A = X
- A.update_button_icon()
+ built_in_visors = list(new /obj/item/device/helmet_visor/welding_visor/mercenary)
//=============================//MEME\\==================================\\
//=======================================================================\\
@@ -1193,6 +1310,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
armor_melee = CLOTHING_ARMOR_VERYHIGH
armor_bomb = CLOTHING_ARMOR_GIGAHIGH
+ built_in_visors = list()
+
var/mob/activator = null
var/active = FALSE
var/det_time = 40
@@ -1243,4 +1362,6 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
contained_sprite = TRUE
flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE
+ built_in_visors = list()
+
#undef HELMET_GARB_RELAY_ICON_STATE
diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm
index 910bb032349e..23e542b98d4b 100644
--- a/code/modules/clothing/suits/marine_armor.dm
+++ b/code/modules/clothing/suits/marine_armor.dm
@@ -69,6 +69,7 @@
/obj/item/attachable/bayonet,
/obj/item/storage/backpack/general_belt,
/obj/item/storage/large_holster/machete,
+ /obj/item/storage/belt/gun/type47,
/obj/item/storage/belt/gun/m4a3,
/obj/item/storage/belt/gun/m44,
/obj/item/storage/belt/gun/smartpistol,
@@ -1268,9 +1269,10 @@
storage_slots = 1
uniform_restricted = list(/obj/item/clothing/under/marine/veteran/UPP, /obj/item/clothing/under/marine/veteran/UPP/medic, /obj/item/clothing/under/marine/veteran/UPP/engi)
-/obj/item/clothing/suit/storage/marine/faction/support
- name = "\improper UM5B personal armor"
- desc = "Standard body armor of the UPP military, the UM5B (Union Medium MK5 Beta) is a light body armor, slightly weaker than the M3 pattern body armor in service with the USCM, specialized towards ballistics protection. This set of personal armor lacks the iconic neck piece and some of the armor in favor of user mobility."
+/obj/item/clothing/suit/storage/marine/faction/UPP/support
+ name = "\improper UL6 personal armor"
+ desc = "Standard body armor of the UPP military, the UL6 (Union Light MK6) is a light body armor, slightly weaker than the M3 pattern body armor in service with the USCM, specialized towards ballistics protection. This set of personal armor lacks the iconic neck piece and some of the armor in favor of user mobility."
+ storage_slots = 3
icon_state = "upp_armor_support"
slowdown = SLOWDOWN_ARMOR_LIGHT
armor_melee = CLOTHING_ARMOR_HIGH
@@ -1278,7 +1280,6 @@
armor_bio = CLOTHING_ARMOR_MEDIUMLOW
armor_rad = CLOTHING_ARMOR_MEDIUMLOW
armor_internaldamage = CLOTHING_ARMOR_HIGH
- uniform_restricted = list(/obj/item/clothing/under/marine/veteran/UPP/officer)
/obj/item/clothing/suit/storage/marine/faction/UPP/commando
name = "\improper UM5CU personal armor"
@@ -1291,6 +1292,7 @@
name = "\improper UH7 heavy plated armor"
desc = "An extremely heavy-duty set of body armor in service with the UPP military, the UH7 (Union Heavy MK7) is known for having powerful ballistic protection, alongside a noticeable neck guard, fortified in order to allow the wearer to endure the stresses of the bulky helmet."
icon_state = "upp_armor_heavy"
+ storage_slots = 3
slowdown = SLOWDOWN_ARMOR_HEAVY
flags_inventory = BLOCKSHARPOBJ|BLOCK_KNOCKDOWN
flags_armor_protection = BODY_FLAG_ALL_BUT_HEAD
@@ -1306,19 +1308,20 @@
/obj/item/clothing/suit/storage/marine/faction/UPP/heavy/Initialize()
. = ..()
pockets.bypass_w_limit = list(
- /obj/item/ammo_magazine/minigun
+ /obj/item/ammo_magazine/minigun,
+ /obj/item/ammo_magazine/pkp,
)
/obj/item/clothing/suit/storage/marine/faction/UPP/officer
- name = "\improper UL6 officers jacket"
- desc = "A lightweight jacket, issued to officers of the UPP's military. Still studded to the brim with kevlar shards, though the synthread construction reduces its effectiveness."
+ name = "\improper UL4 officer jacket"
+ desc = "A lightweight jacket, issued to officers of the UPP's military. Slightly protective from incoming damage, best off with proper armor however."
icon_state = "upp_coat_officer"
- slowdown = SLOWDOWN_ARMOR_VERY_LIGHT
+ slowdown = SLOWDOWN_ARMOR_NONE
flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS
- armor_melee = CLOTHING_ARMOR_LOW
- armor_bullet = CLOTHING_ARMOR_MEDIUMLOW
- armor_energy = CLOTHING_ARMOR_MEDIUMLOW
- armor_bomb = CLOTHING_ARMOR_MEDIUMLOW
+ armor_melee = CLOTHING_ARMOR_LOW //wear actual armor if you go into combat
+ armor_bullet = CLOTHING_ARMOR_LOW
+ armor_energy = CLOTHING_ARMOR_LOW
+ armor_bomb = CLOTHING_ARMOR_LOW
armor_bio = CLOTHING_ARMOR_LOW
armor_rad = CLOTHING_ARMOR_LOW
armor_internaldamage = CLOTHING_ARMOR_LOW
@@ -1326,31 +1329,31 @@
uniform_restricted = list(/obj/item/clothing/under/marine/veteran/UPP/officer)
/obj/item/clothing/suit/storage/marine/faction/UPP/kapitan
- name = "\improper UL6 Kapitan's jacket"
- desc = "A lightweight jacket, issued to the Kapitans of the UPP's military. Made of high-quality materials, even going as far as having the ranks and insignia of the Kapitan and their Company emblazoned on the shoulders and front of the jacket."
+ name = "\improper UL4 senior officer jacket"
+ desc = "A lightweight jacket, issued to senior officers of the UPP's military. Made of high-quality materials, even going as far as having the ranks and insignia of the Kapitan and their Company emblazoned on the shoulders and front of the jacket. Slightly protective from incoming damage, best off with proper armor however."
icon_state = "upp_coat_kapitan"
- slowdown = SLOWDOWN_ARMOR_VERY_LIGHT
- flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS
- armor_melee = CLOTHING_ARMOR_LOW
- armor_bullet = CLOTHING_ARMOR_MEDIUMLOW
- armor_energy = CLOTHING_ARMOR_MEDIUMLOW
- armor_bomb = CLOTHING_ARMOR_MEDIUMLOW
+ slowdown = SLOWDOWN_ARMOR_NONE
+ armor_melee = CLOTHING_ARMOR_LOW //wear actual armor if you go into combat
+ armor_bullet = CLOTHING_ARMOR_LOW
+ armor_energy = CLOTHING_ARMOR_LOW
+ armor_bomb = CLOTHING_ARMOR_LOW
armor_bio = CLOTHING_ARMOR_LOW
armor_rad = CLOTHING_ARMOR_LOW
armor_internaldamage = CLOTHING_ARMOR_LOW
+ flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS
storage_slots = 4
uniform_restricted = list(/obj/item/clothing/under/marine/veteran/UPP/officer)
/obj/item/clothing/suit/storage/marine/faction/UPP/mp
- name = "\improper UL6 camouflaged jacket"
+ name = "\improper UL4 camouflaged jacket"
desc = "A lightweight jacket, issued to troops when they're not expected to engage in combat. Still studded to the brim with kevlar shards, though the synthread construction reduces its effectiveness."
icon_state = "upp_coat_mp"
- slowdown = SLOWDOWN_ARMOR_VERY_LIGHT
+ slowdown = SLOWDOWN_ARMOR_NONE
flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS
- armor_melee = CLOTHING_ARMOR_LOW
- armor_bullet = CLOTHING_ARMOR_MEDIUMLOW
- armor_energy = CLOTHING_ARMOR_MEDIUMLOW
- armor_bomb = CLOTHING_ARMOR_MEDIUMLOW
+ armor_melee = CLOTHING_ARMOR_LOW //wear actual armor if you go into combat
+ armor_bullet = CLOTHING_ARMOR_LOW
+ armor_energy = CLOTHING_ARMOR_LOW
+ armor_bomb = CLOTHING_ARMOR_LOW
armor_bio = CLOTHING_ARMOR_LOW
armor_rad = CLOTHING_ARMOR_LOW
armor_internaldamage = CLOTHING_ARMOR_LOW
@@ -1360,8 +1363,8 @@
restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND)
/obj/item/clothing/suit/storage/marine/faction/UPP/jacket/ivan
- name = "\improper UH6 Camo Jacket"
- desc = "An experimental heavily armored variant of the UL6 given to only the most elite units... usually."
+ name = "\improper UH4 Camo Jacket"
+ desc = "An experimental heavily armored variant of the UL4 given to only the most elite units... usually."
slowdown = SLOWDOWN_ARMOR_MEDIUM
flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_LEGS|BODY_FLAG_ARMS|BODY_FLAG_HANDS|BODY_FLAG_FEET
armor_melee = CLOTHING_ARMOR_HIGH
diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm
index a552b8eb0927..be60dce0e783 100644
--- a/code/modules/cm_marines/equipment/kit_boxes.dm
+++ b/code/modules/cm_marines/equipment/kit_boxes.dm
@@ -429,7 +429,7 @@
new /obj/item/pamphlet/skill/medical(src)
new /obj/item/storage/pouch/first_responder/full(src)
new /obj/item/storage/pouch/autoinjector/full(src)
- new /obj/item/clothing/glasses/hud/sensor(src)
+ new /obj/item/device/helmet_visor/medical(src)
new /obj/item/roller(src)
diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm
index b3e0ecd87206..a99bb5603dcb 100644
--- a/code/modules/cm_phone/phone.dm
+++ b/code/modules/cm_phone/phone.dm
@@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/timeout_timer_id
var/timeout_duration = 30 SECONDS
- var/network_receive = FACTION_MARINE
+ var/list/networks_receive = list(FACTION_MARINE)
var/list/networks_transmit = list(FACTION_MARINE)
/obj/structure/transmitter/hidden
@@ -82,7 +82,12 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/obj/structure/transmitter/target_phone = possible_phone
if(TRANSMITTER_UNAVAILABLE(target_phone) || !target_phone.callable) // Phone not available
continue
- if(!(target_phone.network_receive in networks_transmit))
+ var/net_link = FALSE
+ for(var/network in networks_transmit)
+ if(network in target_phone.networks_receive)
+ net_link = TRUE
+ continue
+ if(!net_link)
continue
var/id = target_phone.phone_id
@@ -538,9 +543,19 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
UnregisterSignal(attached_to, COMSIG_MOVABLE_MOVED)
reset_tether()
+//rotary desk phones (need a touch tone handset at some point)
+/obj/structure/transmitter/rotary
+ name = "rotary telephone"
+ icon_state = "rotary_phone"
+ desc = "The finger plate is a little stiff."
+
+/obj/structure/transmitter/touchtone
+ name = "touch-tone telephone"
+ icon_state = "rotary_phone"//placeholder
+ desc = "Ancient aliens, it's all true. I'm an expert just like you!"
/obj/structure/transmitter/colony_net
- network_receive = FACTION_COLONIST
+ networks_receive = list(FACTION_COLONIST)
networks_transmit = list(FACTION_COLONIST)
/obj/structure/transmitter/colony_net/rotary
@@ -548,13 +563,29 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
icon_state = "rotary_phone"
desc = "The finger plate is a little stiff."
-//rotary desk phones (need a touch tone handset at some point)
-/obj/structure/transmitter/rotary
+/obj/structure/transmitter/upp_net
+ networks_receive = list(FACTION_UPP)
+ networks_transmit = list(FACTION_UPP)
+
+/obj/structure/transmitter/upp_net/rotary
name = "rotary telephone"
icon_state = "rotary_phone"
desc = "The finger plate is a little stiff."
-/obj/structure/transmitter/touchtone
- name = "touch-tone telephone"
- icon_state = "rotary_phone"//placeholder
- desc = "Ancient aliens, it's all true. I'm an expert just like you!"
+/obj/structure/transmitter/clf_net
+ networks_receive = list(FACTION_CLF)
+ networks_transmit = list(FACTION_CLF)
+
+/obj/structure/transmitter/clf_net/rotary
+ name = "rotary telephone"
+ icon_state = "rotary_phone"
+ desc = "The finger plate is a little stiff."
+
+/obj/structure/transmitter/wy_net
+ networks_receive = list(FACTION_WY)
+ networks_transmit = list(FACTION_WY)
+
+/obj/structure/transmitter/wy_net/rotary
+ name = "rotary telephone"
+ icon_state = "rotary_phone"
+ desc = "The finger plate is a little stiff."
diff --git a/code/modules/cm_preds/yaut_mask.dm b/code/modules/cm_preds/yaut_mask.dm
index be0aa8ed761a..94b244b09f14 100644
--- a/code/modules/cm_preds/yaut_mask.dm
+++ b/code/modules/cm_preds/yaut_mask.dm
@@ -155,7 +155,7 @@
if(istype(user) && user.wear_mask == src) //inventory reference is only cleared after dropped().
for(var/listed_hud in mask_huds)
var/datum/mob_hud/H = huds[listed_hud]
- H.remove_hud_from(user)
+ H.remove_hud_from(user, src)
var/obj/item/visor = user.glasses
if(visor) //make your hud fuck off
if(istype(visor, /obj/item/clothing/glasses/night/yautja))
@@ -170,7 +170,7 @@
START_PROCESSING(SSobj, src)
for(var/listed_hud in mask_huds)
var/datum/mob_hud/H = huds[listed_hud]
- H.add_hud_to(user)
+ H.add_hud_to(user, src)
if(current_goggles)
var/obj/item/clothing/gloves/yautja/bracer = user.gloves
if(!bracer || !istype(bracer))
diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm
index 94a628553252..89b0fe072c9b 100644
--- a/code/modules/gear_presets/_select_equipment.dm
+++ b/code/modules/gear_presets/_select_equipment.dm
@@ -388,8 +388,7 @@
/obj/item/weapon/gun/pistol/b92fs = /obj/item/ammo_magazine/pistol/b92fs,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
/obj/item/weapon/gun/smg/mp5 = /obj/item/ammo_magazine/smg/mp5,
- /obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/weapon/gun/pistol/skorpion/upp = /obj/item/ammo_magazine/pistol/skorpion,
+ /obj/item/weapon/gun/smg/bizon = /obj/item/ammo_magazine/smg/bizon,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/uzi = /obj/item/ammo_magazine/smg/uzi
)
@@ -473,11 +472,10 @@ var/list/rebel_shotguns = list(
)
var/list/rebel_smgs = list(
- /obj/item/weapon/gun/smg/ppsh = /obj/item/ammo_magazine/smg/ppsh,
+ /obj/item/weapon/gun/smg/pps43 = /obj/item/ammo_magazine/smg/pps43,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
/obj/item/weapon/gun/smg/mp5 = /obj/item/ammo_magazine/smg/mp5,
- /obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion,
- /obj/item/weapon/gun/pistol/skorpion/upp = /obj/item/ammo_magazine/pistol/skorpion,
+ /obj/item/weapon/gun/smg/bizon = /obj/item/ammo_magazine/smg/bizon,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/uzi = /obj/item/ammo_magazine/smg/uzi,
/obj/item/weapon/gun/smg/fp9000 = /obj/item/ammo_magazine/smg/fp9000
@@ -551,7 +549,6 @@ var/list/rebel_rifles = list(
/obj/item/weapon/gun/pistol/holdout = /obj/item/ammo_magazine/pistol/holdout,
/obj/item/weapon/gun/pistol/highpower = /obj/item/ammo_magazine/pistol/highpower,
/obj/item/weapon/gun/smg/mp27 = /obj/item/ammo_magazine/smg/mp27,
- /obj/item/weapon/gun/pistol/skorpion = /obj/item/ammo_magazine/pistol/skorpion,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15,
/obj/item/weapon/gun/smg/mac15 = /obj/item/ammo_magazine/smg/mac15/extended)
@@ -565,6 +562,7 @@ var/list/rebel_rifles = list(
/obj/item/weapon/gun/rifle/mar40/lmg = /obj/item/ammo_magazine/rifle/mar40/lmg,
/obj/item/weapon/gun/rifle/m41aMK1 = /obj/item/ammo_magazine/rifle/m41aMK1,
/obj/item/weapon/gun/smg/fp9000 = /obj/item/ammo_magazine/smg/fp9000,
+ /obj/item/weapon/gun/smg/bizon = /obj/item/ammo_magazine/smg/bizon,
/obj/item/weapon/gun/rifle/m16 = /obj/item/ammo_magazine/rifle/m16)
var/gunpath = sidearm? pick(merc_sidearms) : pick(merc_firearms)
@@ -954,21 +952,26 @@ var/list/rebel_rifles = list(
)
/datum/equipment_preset/proc/add_upp_weapon(mob/living/carbon/human/new_human)
- var/random_gun = rand(1,3)
+ var/random_gun = rand(1,5)
switch(random_gun)
- if(1)
+ if(1,2)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
- if(2)
+ if(3)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/carbine(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
- if(3)
+ if(4)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot(new_human), WEAR_IN_BACK)
+ if(4)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/bizon(new_human), WEAR_L_HAND)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon(new_human), WEAR_IN_BACK)
/datum/equipment_preset/proc/spawn_random_upp_headgear(mob/living/carbon/human/new_human)
var/random_hat = rand(1,10)
@@ -983,7 +986,7 @@ var/list/rebel_rifles = list(
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/ushanka(new_human), WEAR_HEAD)
/datum/equipment_preset/proc/spawn_random_upp_armor(mob/living/carbon/human/new_human)
- var/random_gear = rand(1, 4)
+ var/random_gear = rand(1, 5)
switch(random_gear)
if (1, 2, 3)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY)
@@ -994,11 +997,17 @@ var/list/rebel_rifles = list(
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET)
+ if (4)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP (new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/support(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET)
/datum/equipment_preset/proc/spawn_random_upp_belt(mob/living/carbon/human/new_human)
- var/random_gun = rand(1, 3)
+ var/random_gun = rand(1, 4)
switch(random_gun)
- if (1, 2)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY(new_human), WEAR_WAIST)
+ if (1 to 2)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92(new_human), WEAR_WAIST)
if (3)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73(new_human), WEAR_WAIST)
+ if (4)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp(new_human), WEAR_WAIST)
diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm
index 901de2c21ca3..81abf8bce550 100644
--- a/code/modules/gear_presets/clf.dm
+++ b/code/modules/gear_presets/clf.dm
@@ -675,7 +675,7 @@
list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
- list("Sensor Medical HUD", 4, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_MANDATORY),
+ list("Medical Helmet Optic", 4, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
list("M16 AP Magazine (5.56x45mm)", 10, /obj/item/ammo_magazine/rifle/m16/ap, null, VENDOR_ITEM_REGULAR),
@@ -996,7 +996,7 @@
list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
- list("Sensor Medical HUD", 4, /obj/item/clothing/glasses/hud/sensor, null, VENDOR_ITEM_MANDATORY),
+ list("Medical Helmet Optic", 4, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
list("M16 AP Magazine (5.56x45mm)", 10, /obj/item/ammo_magazine/rifle/m16/ap, null, VENDOR_ITEM_REGULAR),
diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm
index 9780b739cf67..b440fe4533b2 100644
--- a/code/modules/gear_presets/other.dm
+++ b/code/modules/gear_presets/other.dm
@@ -807,7 +807,7 @@
for(var/hud_to_add in huds_to_add)
var/datum/mob_hud/hud = huds[hud_to_add]
- hud.add_hud_to(new_human)
+ hud.add_hud_to(new_human, new_human)
var/list/actions_to_add = subtypesof(/datum/action/human_action/activable/cult)
diff --git a/code/modules/gear_presets/survivors.dm b/code/modules/gear_presets/survivors.dm
index 78fdc20c8b9f..37bc52936c40 100644
--- a/code/modules/gear_presets/survivors.dm
+++ b/code/modules/gear_presets/survivors.dm
@@ -1707,7 +1707,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73(new_human), WEAR_WAIST)
..()
@@ -1725,7 +1725,7 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver(new_human), WEAR_WAIST)
add_upp_weapon(new_human)
..()
diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm
index 63d1fd48e665..4248a5e0a1be 100644
--- a/code/modules/gear_presets/upp.dm
+++ b/code/modules/gear_presets/upp.dm
@@ -126,9 +126,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/box/m94, WEAR_IN_BACK) //3.25
new_human.equip_to_slot_or_del(new /obj/item/storage/box/m94, WEAR_IN_BACK) //4.25
//waist
- var/gunbelt = prob(50) ? /obj/item/storage/belt/gun/type47/NY : /obj/item/storage/belt/gun/type47/PK9
- new_human.equip_to_slot_or_del(new gunbelt, WEAR_WAIST)
- pick_ammotype(new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
/datum/equipment_preset/upp/soldier/proc/pick_ammotype(mob/living/carbon/human/new_human)
var/percentage = rand(1, 100)
@@ -266,18 +264,18 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD)
//body
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/medic, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP, WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/skorpion/upp/medic, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/support, WEAR_JACKET) //medic should move fast
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/bizon/upp, WEAR_J_STORE)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
//póckets
- var/obj/item/storage/pouch/magazine/pistol/large/ppouch = new()
+ var/obj/item/storage/pouch/magazine/large/ppouch = new()
new_human.equip_to_slot_or_del(ppouch, WEAR_R_STORE)
for(var/i = 1 to ppouch.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/skorpion, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_L_STORE)
@@ -292,7 +290,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UM5 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/medic, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -557,9 +555,6 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK) //1
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //1.33
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //1.66
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2.33
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2.66
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
//head
@@ -589,7 +584,8 @@
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23/dragon, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/dragonsbreath, WEAR_IN_JACKET)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY, WEAR_WAIST)
+ var/uppvetsidearm = prob(50) ? /obj/item/storage/belt/gun/type47/t73 : /obj/item/storage/belt/gun/type47/np92
+ new_human.equip_to_slot_or_del(new uppvetsidearm, WEAR_WAIST)
/datum/equipment_preset/upp/specialist/get_antag_clothing_equipment()
return list(
@@ -607,7 +603,7 @@
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -641,9 +637,9 @@
list("Essential Heavy Set", 0, /obj/effect/essentials_set/upp_heavy, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
- list("Rotating Ammo Drum (7.62x51mm)", 15, /obj/item/ammo_magazine/minigun , null, VENDOR_ITEM_RECOMMENDED),
+ list("QYJ-72 Box Magazine(7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED),
- list("ATTACHMENTS (NONE FIT GSh-7.62)", 0, null, null, null),
+ list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null),
list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
@@ -670,8 +666,8 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/minigunner
- name = "UPP Minigunner"
+/datum/equipment_preset/upp/machinegunner
+ name = "UPP Machinegunner"
flags = EQUIPMENT_PRESET_EXTRA
skills = /datum/skills/upp/specialist
@@ -680,15 +676,12 @@
role_comm_title = "Spc"
paygrade = "UE5"
-/datum/equipment_preset/upp/minigunner/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/machinegunner/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK) //1
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //1.33
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //1.66
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2.33
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK) //2.66
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
//head
@@ -711,12 +704,15 @@
implant.on_implanted(new_human)
//body
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/minigun/upp, WEAR_J_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/minigun, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pkp, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pkp, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pkp, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pkp, WEAR_IN_JACKET)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY/shrapnel, WEAR_WAIST)
+ var/uppvetsidearm = prob(50) ? /obj/item/storage/belt/gun/type47/t73 : /obj/item/storage/belt/gun/type47/np92
+ new_human.equip_to_slot_or_del(new uppvetsidearm, WEAR_WAIST) // 50/50 np92 or t73
-/datum/equipment_preset/upp/minigunner/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/machinegunner/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
@@ -760,15 +756,15 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/minigunner/get_antag_gear_equipment()
+/datum/equipment_preset/upp/machinegunner/get_antag_gear_equipment()
return list(
list("HEAVY SET (MANDATORY)", 0, null, null, null),
list("Essential Heavy Set", 0, /obj/effect/essentials_set/upp_heavy, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
- list("Rotating Ammo Drum (7.62x51mm)", 15, /obj/item/ammo_magazine/minigun , null, VENDOR_ITEM_RECOMMENDED),
+ list("QYJ-72 Box Magazine (7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED),
- list("ATTACHMENTS (NONE FIT GSh-7.62)", 0, null, null, null),
+ list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null),
list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
@@ -806,6 +802,7 @@
paygrade = "UE6"
/datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human)
+ var/UPPleadsidearm = rand(1,4)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/jima, WEAR_BACK)
//face
@@ -824,7 +821,14 @@
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY/shrapnel, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ switch(UPPleadsidearm)
+ if(1 to 2) // 50%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ if(3) //25%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
+ if(4) //25%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -962,23 +966,17 @@
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
//head
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
//uniform
- var/obj/item/clothing/under/marine/veteran/UPP/mp/M = new()
- var/obj/item/clothing/accessory/storage/webbing/W = new()
- M.attach_accessory(new_human, W)
- new_human.equip_to_slot_or_del(M, WEAR_BODY)
- for(var/i in 1 to W.hold.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/mp, WEAR_BODY)
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/mp, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_J_STORE)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/UPP/full, WEAR_WAIST)
//limbs
@@ -995,7 +993,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/mp, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL6 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -1003,7 +1001,11 @@
list("HELMET (CHOOSE 1)", 0, null, null, null),
list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM7 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1118,7 +1120,6 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
@@ -1130,14 +1131,15 @@
M.attach_accessory(new_human, W)
new_human.equip_to_slot_or_del(M, WEAR_BODY)
for(var/i in 1 to W.hold.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/heap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -1163,15 +1165,15 @@
list("HELMET (CHOOSE 1)", 0, null, null, null),
list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM7 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("ARMOR (CHOOSE 1)", 0, null, null, null),
- list("UL6 officers jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("UM5B Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 47 Pistol Holster Rig NY", 0, /obj/item/storage/belt/gun/type47/NY, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1278,7 +1280,6 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
@@ -1290,14 +1291,15 @@
M.attach_accessory(new_human, W)
new_human.equip_to_slot_or_del(M, WEAR_BODY)
for(var/i in 1 to W.hold.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/heap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/NY/shrapnel, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -1316,7 +1318,6 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL6 officers jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -1324,11 +1325,15 @@
list("HELMET (CHOOSE 1)", 0, null, null, null),
list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM7 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 47 Pistol Holster Rig NY", 0, /obj/item/storage/belt/gun/type47/NY/shrapnel, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1428,6 +1433,7 @@
rank = JOB_UPP_MAY_OFFICER
role_comm_title = "May."
paygrade = "UO3"
+ skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human)
//back
@@ -1435,7 +1441,6 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
@@ -1447,14 +1452,15 @@
M.attach_accessory(new_human, W)
new_human.equip_to_slot_or_del(M, WEAR_BODY)
for(var/i in 1 to W.hold.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/heap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/mateba/general/impact, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -1473,19 +1479,22 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL6 officers jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM7 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 47 Pistol Holster Rig NY", 0, /obj/item/storage/belt/gun/type47/NY/shrapnel, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1593,7 +1602,6 @@
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
@@ -1605,14 +1613,15 @@
M.attach_accessory(new_human, W)
new_human.equip_to_slot_or_del(M, WEAR_BODY)
for(var/i in 1 to W.hold.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/heap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
//jacket
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/mateba/general/impact, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -1631,19 +1640,22 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL6 officers jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM7 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP/heavy, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 47 Pistol Holster Rig NY", 0, /obj/item/storage/belt/gun/type47/NY/shrapnel, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1742,10 +1754,10 @@
/datum/equipment_preset/upp/sapper/survivor/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/upp, WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/nagant, WEAR_IN_BACK) //1
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/upp, WEAR_IN_BACK) //1.3
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/upp, WEAR_IN_BACK) //1.6
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/upp, WEAR_IN_BACK) //2
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/np92, WEAR_IN_BACK) //1
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //1.3
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //1.6
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK) //2
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) //3
new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry/mini, WEAR_IN_BACK) //4
//face
@@ -1845,19 +1857,19 @@
var/obj/item/clothing/accessory/storage/black_vest/tool_webbing/W = new()
UPP.attach_accessory(new_human, W)
new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/jacket, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/support, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/glass/bottle/tricordrazine, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/skorpion/upp/medic, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/bizon/upp, WEAR_J_STORE)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
//póckets
- var/obj/item/storage/pouch/magazine/pistol/large/ppouch = new()
+ var/obj/item/storage/pouch/magazine/large/ppouch = new()
new_human.equip_to_slot_or_del(ppouch, WEAR_R_STORE)
for(var/i = 1 to ppouch.storage_slots)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/skorpion, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/bizon, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_L_STORE)
@@ -2112,8 +2124,10 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9/tranq, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92/suppressed, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -2131,7 +2145,7 @@
new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK)
- spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71/heap, new_human, 0, 8)
+ spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71, new_human, 0, 8)
/datum/equipment_preset/upp/commando/get_antag_clothing_equipment()
return list(
@@ -2152,7 +2166,7 @@
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/PK9/tranq, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("NPZ92 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/np92/suppressed, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -2233,6 +2247,8 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/medic, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/medic, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
@@ -2260,7 +2276,7 @@
new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_JACKET)
- spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71/heap, new_human, 0, 5)
+ spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71, new_human, 0, 5)
/datum/equipment_preset/upp/commando/medic/get_antag_clothing_equipment()
return list(
@@ -2401,6 +2417,8 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/command, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
@@ -2408,7 +2426,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9/tranq, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92/suppressed, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK)
@@ -2422,7 +2440,7 @@
new_human.equip_to_slot_or_del(new /obj/item/handcuffs, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/handcuffs, WEAR_IN_BACK)
- spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71/heap, new_human, 0, 7)
+ spawn_weapon(/obj/item/weapon/gun/rifle/type71/carbine/commando, /obj/item/ammo_magazine/rifle/type71, new_human, 0, 7)
/datum/equipment_preset/upp/commando/leader/get_antag_clothing_equipment()
return list(
@@ -2443,7 +2461,7 @@
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/PK9/tranq, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("NPZ92 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/np92/suppressed, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -2554,7 +2572,7 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/cct(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/PK9(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/tool/weldpack(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE)
@@ -2576,7 +2594,9 @@
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
- list("Korovin PK-9 Pistol", 0, /obj/item/weapon/gun/pistol/c99/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Type 73 Pistol", 0, /obj/item/weapon/gun/pistol/t73, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_RECOMMENDED),
+ list("NP92 Pistol", 0, /obj/item/weapon/gun/pistol/np92, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("ZHNK-72 Revolver", 0, /obj/item/weapon/gun/revolver/upp, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -2667,9 +2687,9 @@
new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/np92, WEAR_IN_BACK) //targeting unarmed medical personal is not a war crime in aliens(primarily because, off memory, warcrimes aren't really a thing, although this definately is bad manners), and the playerbase is HRP in this concern!(if you don't get the joke, the players regularly execute unarmed doctors in hvh events. :D)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
if(new_human.disabilities & NEARSIGHTED)
@@ -2685,12 +2705,15 @@
new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_BELT)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
//póckets
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium, WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_L_STORE)
@@ -2705,6 +2728,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm
index 77f7665ce5b7..8109a458ac41 100644
--- a/code/modules/gear_presets/uscm_event.dm
+++ b/code/modules/gear_presets/uscm_event.dm
@@ -167,9 +167,9 @@
//Otherwise, if you spawn the spy next to other people
//they will see messages for them putting guns and explosives into their backpack...
new_human.equip_to_slot_or_del(new /obj/item/handcuffs(new_human.back), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/c99/upp/tranq(new_human.back), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/c99/tranq(new_human.back), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/c99/tranq(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/np92/suppressed/tranq(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92/tranq(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92/tranq(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/handcuffs(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/chameleon(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
diff --git a/code/modules/mob/camera/imaginary_friend.dm b/code/modules/mob/camera/imaginary_friend.dm
index a78de70a7e15..3d6d5d5a0aa2 100644
--- a/code/modules/mob/camera/imaginary_friend.dm
+++ b/code/modules/mob/camera/imaginary_friend.dm
@@ -168,10 +168,10 @@
hud = huds[MOB_HUD_FACTION_CLF]
if(hud_choice in current_huds)
- hud.remove_hud_from(src)
+ hud.remove_hud_from(src, src)
current_huds -= hud_choice
else
- hud.add_hud_to(src)
+ hud.add_hud_to(src, src)
current_huds += hud_choice
/mob/camera/imaginary_friend/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language, ignore_spam = FALSE, forced)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index ee36d25fc687..405dea1772f0 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -267,28 +267,28 @@
switch(i)
if("Medical HUD")
H = huds[MOB_HUD_MEDICAL_OBSERVER]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Security HUD")
H = huds[MOB_HUD_SECURITY_ADVANCED]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Squad HUD")
H = huds[MOB_HUD_FACTION_OBSERVER]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Xeno Status HUD")
H = huds[MOB_HUD_XENO_STATUS]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Faction UPP HUD")
H = huds[MOB_HUD_FACTION_UPP]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Faction Wey-Yu HUD")
H = huds[MOB_HUD_FACTION_WY]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Faction TWE HUD")
H = huds[MOB_HUD_FACTION_TWE]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
if("Faction CLF HUD")
H = huds[MOB_HUD_FACTION_CLF]
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
see_invisible = INVISIBILITY_OBSERVER
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index aa0cbba74a5a..6e99ca1e5a15 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -512,25 +512,30 @@
//Helper procedure. Called by /mob/living/carbon/human/get_examine_text() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
-/proc/hasHUD(mob/M, hudtype)
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if (issynth(H))
+/proc/hasHUD(mob/passed_mob, hudtype)
+ if(istype(passed_mob, /mob/living/carbon/human))
+ var/mob/living/carbon/human/passed_human = passed_mob
+ if (issynth(passed_human))
return 1
switch(hudtype)
if("security")
- //only MPs can use the security HUD glasses's functionalities
- if(skillcheck(H, SKILL_POLICE, SKILL_POLICE_SKILLED))
- return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud)
+ if(skillcheck(passed_human, SKILL_POLICE, SKILL_POLICE_SKILLED))
+ var/datum/mob_hud/sec_hud = huds[MOB_HUD_SECURITY_ADVANCED]
+ if(locate(passed_mob) in sec_hud.hudusers)
+ return TRUE
if("medical")
- if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
- return istype(H.glasses, /obj/item/clothing/glasses/hud/health)
+ if(skillcheck(passed_human, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
+ var/datum/mob_hud/med_hud = huds[MOB_HUD_MEDICAL_ADVANCED]
+ if(locate(passed_mob) in med_hud.hudusers)
+ return TRUE
if("squadleader")
- return H.mind && H.assigned_squad && H.assigned_squad.squad_leader == H && H.get_type_in_ears(/obj/item/device/radio/headset/almayer/marine)
+ var/datum/mob_hud/faction_hud = huds[MOB_HUD_FACTION_USCM]
+ if(passed_human.mind && passed_human.assigned_squad && passed_human.assigned_squad.squad_leader == passed_human && locate(passed_mob) in faction_hud.hudusers)
+ return TRUE
else
return 0
- else if(isrobot(M))
- var/mob/living/silicon/robot/R = M
+ else if(isrobot(passed_mob))
+ var/mob/living/silicon/robot/R = passed_mob
switch(hudtype)
if("security")
return istype(R.module_state_1, /obj/item/robot/sight/hud/sec) || istype(R.module_state_2, /obj/item/robot/sight/hud/sec) || istype(R.module_state_3, /obj/item/robot/sight/hud/sec)
diff --git a/code/modules/mob/living/carbon/human/powers/human_powers.dm b/code/modules/mob/living/carbon/human/powers/human_powers.dm
index 1c8c011f7c71..10b13225b314 100644
--- a/code/modules/mob/living/carbon/human/powers/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/powers/human_powers.dm
@@ -240,9 +240,9 @@
if(synthetic_HUD_toggled[chosen_HUD])
synthetic_HUD_toggled[chosen_HUD] = FALSE
- H.remove_hud_from(src)
+ H.remove_hud_from(src, src)
to_chat(src, SPAN_INFO("[hud_choice] Disabled"))
else
synthetic_HUD_toggled[chosen_HUD] = TRUE
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
to_chat(src, SPAN_INFO("[hud_choice] Enabled"))
diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm
index 07fe8f5e1255..5fa928a67f36 100644
--- a/code/modules/mob/living/carbon/human/species/zombie.dm
+++ b/code/modules/mob/living/carbon/human/species/zombie.dm
@@ -68,7 +68,7 @@
D.stage = 5
var/datum/mob_hud/Hu = huds[MOB_HUD_MEDICAL_OBSERVER]
- Hu.add_hud_to(zombie)
+ Hu.add_hud_to(zombie, zombie)
return ..()
@@ -77,7 +77,7 @@
..()
remove_from_revive(zombie)
var/datum/mob_hud/Hu = huds[MOB_HUD_MEDICAL_OBSERVER]
- Hu.remove_hud_from(zombie)
+ Hu.remove_hud_from(zombie, zombie)
/datum/species/zombie/handle_unique_behavior(mob/living/carbon/human/zombie)
diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
index cc0c12bd1cc8..a1809138de51 100644
--- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
@@ -813,7 +813,7 @@
//and display them
add_to_all_mob_huds()
var/datum/mob_hud/MH = huds[MOB_HUD_XENO_INFECTION]
- MH.add_hud_to(src)
+ MH.add_hud_to(src, src)
/mob/living/carbon/xenomorph/check_improved_pointing()
diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
index 583d26de3ee5..94218b224e2d 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
@@ -83,9 +83,9 @@
var/datum/mob_hud/H = huds[MOB_HUD_XENO_STATUS]
if (xeno_mobhud)
- H.remove_hud_from(usr)
+ H.remove_hud_from(usr, usr)
else
- H.add_hud_to(usr)
+ H.add_hud_to(usr, usr)
xeno_mobhud = !xeno_mobhud
@@ -96,9 +96,9 @@
var/datum/mob_hud/H = huds[MOB_HUD_XENO_HOSTILE]
if (xeno_hostile_hud)
- H.remove_hud_from(usr)
+ H.remove_hud_from(usr, usr)
else
- H.add_hud_to(usr)
+ H.add_hud_to(usr, usr)
xeno_hostile_hud = !xeno_hostile_hud
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 2910da65cb79..b0f08acc33fa 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -160,11 +160,11 @@
if(HUD_toggled[HUD_nbr])
HUD_toggled[HUD_nbr] = 0
- H.remove_hud_from(src)
+ H.remove_hud_from(src, src)
to_chat(src, SPAN_NOTICE(" [hud_choice] Disabled"))
else
HUD_toggled[HUD_nbr] = 1
- H.add_hud_to(src)
+ H.add_hud_to(src, src)
to_chat(src, SPAN_NOTICE(" [hud_choice] Enabled"))
/mob/living/silicon/verb/pose()
diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm
index d09c7ad7bb26..9315a1dd0c68 100644
--- a/code/modules/projectiles/ammo_datums.dm
+++ b/code/modules/projectiles/ammo_datums.dm
@@ -410,6 +410,13 @@
penetration = ARMOR_PENETRATION_TIER_10
damage = 45
+/datum/ammo/bullet/pistol/heavy/super/highimpact/upp
+ name = "high-impact pistol bullet"
+ sound_override = 'sound/weapons/gun_DE50.ogg'
+ penetration = ARMOR_PENETRATION_TIER_6
+ debilitate = list(0,1.5,0,0,0,1,0,0)
+ flags_ammo_behavior = AMMO_BALLISTIC
+
/datum/ammo/bullet/pistol/heavy/super/highimpact/New()
..()
RegisterSignal(src, COMSIG_AMMO_POINT_BLANK, PROC_REF(handle_battlefield_execution))
@@ -617,42 +624,43 @@
BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_penetrating)
))
-/datum/ammo/bullet/revolver/nagant
- name = "nagant revolver bullet"
- headshot_state = HEADSHOT_OVERLAY_LIGHT //Smaller bullet.
- damage = 40
+/datum/ammo/bullet/revolver/upp
+ name = "heavy revolver bullet"
+ headshot_state = HEADSHOT_OVERLAY_MEDIUM
+ penetration = ARMOR_PENETRATION_TIER_4
+ damage = 70
-/datum/ammo/bullet/revolver/nagant/shrapnel
+/datum/ammo/bullet/revolver/upp/shrapnel
name = "shrapnel shot"
headshot_state = HEADSHOT_OVERLAY_HEAVY //Gol-dang shotgun blow your fething head off.
debilitate = list(0,0,0,0,0,0,0,0)
icon_state = "shrapnelshot"
handful_state = "shrapnel"
- bonus_projectiles_type = /datum/ammo/bullet/revolver/nagant/shrapnel_bits
+ bonus_projectiles_type = /datum/ammo/bullet/revolver/upp/shrapnel_bits
max_range = 6
- damage = 25 // + TIER_4 * 3
+ damage = 40 // + TIER_4 * 3
damage_falloff = DAMAGE_FALLOFF_TIER_7
- penetration = ARMOR_PENETRATION_TIER_6
+ penetration = ARMOR_PENETRATION_TIER_8
bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_3
shrapnel_chance = 100
- shrapnel_type = /obj/item/shard/shrapnel/nagant
- //roughly 35 or so damage
+ shrapnel_type = /obj/item/shard/shrapnel/upp
+ //roughly 90 or so damage with the additional shrapnel, around 130 in total with primary round
-/datum/ammo/bullet/revolver/nagant/shrapnel/on_hit_mob(mob/M, obj/item/projectile/P)
+/datum/ammo/bullet/revolver/upp/shrapnel/on_hit_mob(mob/M, obj/item/projectile/P)
pushback(M, P, 1)
-/datum/ammo/bullet/revolver/nagant/shrapnel_bits
+/datum/ammo/bullet/revolver/upp/shrapnel_bits
name = "small shrapnel"
icon_state = "shrapnelshot_bit"
max_range = 6
- damage = 20
- penetration = ARMOR_PENETRATION_TIER_1
+ damage = 30
+ penetration = ARMOR_PENETRATION_TIER_4
scatter = SCATTER_AMOUNT_TIER_1
bonus_projectiles_amount = 0
- shrapnel_type = /obj/item/shard/shrapnel/nagant/bits
+ shrapnel_type = /obj/item/shard/shrapnel/upp/bits
/datum/ammo/bullet/revolver/small
name = "small revolver bullet"
@@ -862,6 +870,15 @@
damage_falloff = DAMAGE_FALLOFF_TIER_7
scatter = SCATTER_AMOUNT_TIER_5
+/datum/ammo/bullet/smg/pps43
+ name = "simple submachinegun bullet"
+ damage = 35
+ accurate_range = 7
+ effective_range_max = 10
+ penetration = ARMOR_PENETRATION_TIER_4
+ damage_falloff = DAMAGE_FALLOFF_TIER_6
+ scatter = SCATTER_AMOUNT_TIER_6
+
/*
//======
Rifle Ammo
@@ -1057,21 +1074,21 @@
/datum/ammo/bullet/rifle/type71
name = "heavy rifle bullet"
- damage = 35
- penetration = ARMOR_PENETRATION_TIER_2
+ damage = 55
+ penetration = ARMOR_PENETRATION_TIER_3
/datum/ammo/bullet/rifle/type71/ap
name = "heavy armor-piercing rifle bullet"
- damage = 20
+ damage = 40
penetration = ARMOR_PENETRATION_TIER_10
/datum/ammo/bullet/rifle/type71/heap
name = "heavy high-explosive armor-piercing rifle bullet"
headshot_state = HEADSHOT_OVERLAY_HEAVY
- damage = 50
- penetration = ARMOR_PENETRATION_TIER_8
+ damage = 65
+ penetration = ARMOR_PENETRATION_TIER_10
/*
//======
@@ -1599,6 +1616,11 @@
. = ..()
pushback(M, P, 3)
+/datum/ammo/bullet/sniper/upp
+ name = "armor-piercing sniper bullet"
+ damage = 80
+ penetration = ARMOR_PENETRATION_TIER_10
+
/datum/ammo/bullet/sniper/anti_materiel
name = "anti-materiel sniper bullet"
@@ -1865,6 +1887,18 @@
penetration= ARMOR_PENETRATION_TIER_6
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
+/datum/ammo/bullet/pkp
+ name = "machinegun bullet"
+ headshot_state = HEADSHOT_OVERLAY_MEDIUM
+
+ accuracy = HIT_ACCURACY_TIER_1
+ accuracy_var_low = PROJECTILE_VARIANCE_TIER_8
+ accuracy_var_high = PROJECTILE_VARIANCE_TIER_6
+ accurate_range = 14
+ damage = 35
+ penetration= ARMOR_PENETRATION_TIER_6
+ shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
+
/*
//======
Rocket Ammo
@@ -2079,6 +2113,42 @@
/datum/ammo/rocket/wp/do_at_max_range(obj/item/projectile/P)
drop_flame(get_turf(P), P.weapon_cause_data)
+/datum/ammo/rocket/wp/upp
+ name = "extreme-intensity incendiary rocket"
+ flags_ammo_behavior = AMMO_ROCKET|AMMO_EXPLOSIVE|AMMO_STRIKES_SURFACE
+ damage_type = BURN
+
+ accuracy_var_low = PROJECTILE_VARIANCE_TIER_6
+ accurate_range = 8
+ damage = 150
+ max_range = 10
+
+/datum/ammo/rocket/wp/upp/set_bullet_traits()
+ . = ..()
+ LAZYADD(traits_to_give, list(
+ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_incendiary)
+ ))
+
+/datum/ammo/rocket/wp/upp/drop_flame(turf/T, datum/cause_data/cause_data)
+ playsound(T, 'sound/weapons/gun_flamethrower3.ogg', 75, 1, 7)
+ if(!istype(T)) return
+ smoke.set_up(1, T)
+ smoke.start()
+ var/datum/reagent/napalm/upp/R = new()
+ new /obj/flamer_fire(T, cause_data, R, 3)
+
+/datum/ammo/rocket/wp/upp/on_hit_mob(mob/M, obj/item/projectile/P)
+ drop_flame(get_turf(M), P.weapon_cause_data)
+
+/datum/ammo/rocket/wp/upp/on_hit_obj(obj/O, obj/item/projectile/P)
+ drop_flame(get_turf(O), P.weapon_cause_data)
+
+/datum/ammo/rocket/wp/upp/on_hit_turf(turf/T, obj/item/projectile/P)
+ drop_flame(T, P.weapon_cause_data)
+
+/datum/ammo/rocket/wp/upp/do_at_max_range(obj/item/projectile/P)
+ drop_flame(get_turf(P), P.weapon_cause_data)
+
/datum/ammo/rocket/wp/quad
name = "thermobaric rocket"
flags_ammo_behavior = AMMO_ROCKET|AMMO_STRIKES_SURFACE
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index eb0e53986f9d..adaa5ba1dee3 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -974,6 +974,9 @@ Defined in conflicts.dm of the #defines folder.
//other variable zoom scopes
+/obj/item/attachable/scope/variable_zoom/integrated
+ name = "variable zoom scope"
+
/obj/item/attachable/scope/variable_zoom/slavic
icon_state = "slavicscope"
attach_icon = "slavicscope"
@@ -1677,6 +1680,81 @@ Defined in conflicts.dm of the #defines folder.
if(MAP_PRISON_STATION, MAP_PRISON_STATION_V3, MAP_LV522_CHANCES_CLAIM)
attach_icon = new_attach_icon ? new_attach_icon : "c_" + attach_icon
+/obj/item/attachable/upp_rpg_breech
+ name = "HJRA-12 Breech"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
+ icon_state = "hjra_breech"
+ attach_icon = "hjra_breech"
+ slot = "stock"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 0
+ size_mod = 0
+
+/obj/item/attachable/pkpbarrel
+ name = "QYJ-72 Barrel"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi'
+ icon_state = "uppmg_barrel"
+ attach_icon = "uppmg_barrel"
+ slot = "muzzle"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 0
+ size_mod = 0
+
+/obj/item/attachable/stock/pkpstock
+ name = "QYJ-72 Stock"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
+ icon_state = "uppmg_stock"
+ attach_icon = "uppmg_stock"
+ slot = "stock"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 20 //the thought of a upp spec beating people to death with a pk makes me laugh
+ size_mod = 0
+
+/obj/item/attachable/type88_barrel
+ name = "Type-88 Barrel"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi'
+ icon_state = "type88_barrel"
+ attach_icon = "type88_barrel"
+ slot = "special"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 0
+ size_mod = 0
+
+/obj/item/attachable/type73suppressor
+ name = "Type 73 Integrated Suppressor"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/barrel.dmi'
+ icon_state = "type73_suppressor"
+ attach_icon = "type73_suppressor"
+ slot = "muzzle"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 0
+ size_mod = 0
+
+/obj/item/attachable/stock/type71
+ name = "Type 71 Stock"
+ desc = "This isn't supposed to be seperated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
+ icon_state = "type71_stock"
+ attach_icon = "type71_stock"
+ slot = "stock"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 15
+ size_mod = 0
+
+/obj/item/attachable/stock/type71/New()
+ ..()
+
/obj/item/attachable/stock/smg
name = "submachinegun stock"
desc = "A rare ARMAT stock distributed in small numbers to USCM forces. Compatible with the M39, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Seemingly a bit more effective in a brawl"
diff --git a/code/modules/projectiles/guns/misc.dm b/code/modules/projectiles/guns/misc.dm
index 373587ff881a..5503ab03a1da 100644
--- a/code/modules/projectiles/guns/misc.dm
+++ b/code/modules/projectiles/guns/misc.dm
@@ -4,7 +4,7 @@
/obj/item/weapon/gun/minigun
name = "\improper Ol' Painless"
desc = "An enormous multi-barreled rotating gatling gun. This thing will no doubt pack a punch."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/event.dmi'
icon_state = "painless"
item_state = "painless"
@@ -159,6 +159,125 @@
return FALSE
+/obj/item/weapon/gun/pkp
+ name = "\improper QYJ-72 General Purpose Machine Gun"
+ desc = "The QYJ-72 is the standard GPMG of the Union of Progressive Peoples, chambered in 7.62x54mmR, it fires a hard-hitting cartridge with a high rate of fire. With an extremely large box at 250 rounds, the QJY-72 is designed with suppressing fire and accuracy by volume of fire at its forefront. \nAlt-click it to open the feed cover and allow for reloading."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "qjy72"
+ item_state = "qjy72"
+
+ fire_sound = 'sound/weapons/gun_mg.ogg'
+ cocked_sound = 'sound/weapons/gun_m60_cocked.ogg'
+ current_mag = /obj/item/ammo_magazine/pkp
+ w_class = SIZE_LARGE
+ force = 30 //the image of a upp machinegunner beating someone to death with a gpmg makes me laugh
+ start_semiauto = FALSE
+ start_automatic = TRUE
+ flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_CAN_POINTBLANK|GUN_AUTO_EJECTOR|GUN_SPECIALIST|GUN_AMMO_COUNTER
+ gun_category = GUN_CATEGORY_HEAVY
+ attachable_allowed = list(
+ /obj/item/attachable/pkpbarrel,
+ /obj/item/attachable/stock/pkpstock,
+ )
+ var/cover_open = FALSE //if the gun's feed-cover is open or not.
+
+
+/obj/item/weapon/gun/pkp/handle_starting_attachment()
+ ..()
+ var/obj/item/attachable/attachie = new /obj/item/attachable/pkpbarrel(src)
+ attachie.flags_attach_features &= ~ATTACH_REMOVABLE
+ attachie.Attach(src)
+ update_attachable(attachie.slot)
+
+ var/obj/item/attachable/pkpstock = new /obj/item/attachable/stock/pkpstock(src)
+ pkpstock.flags_attach_features &= ~ATTACH_REMOVABLE
+ pkpstock.Attach(src)
+ update_attachable(pkpstock.slot)
+
+ //invisible mag harness
+ var/obj/item/attachable/magnetic_harness/Integrated = new(src)
+ Integrated.hidden = TRUE
+ Integrated.flags_attach_features &= ~ATTACH_REMOVABLE
+ Integrated.Attach(src)
+ update_attachable(Integrated.slot)
+
+/obj/item/weapon/gun/pkp/Initialize(mapload, spawn_empty)
+ . = ..()
+ if(current_mag && current_mag.current_rounds > 0)
+ load_into_chamber()
+
+/obj/item/weapon/gun/pkp/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 18,"rail_x" = 5, "rail_y" = 5, "under_x" = 39, "under_y" = 7, "stock_x" = 10, "stock_y" = 13)
+
+
+/obj/item/weapon/gun/pkp/set_gun_config_values()
+ ..()
+ fire_delay = FIRE_DELAY_TIER_10
+ burst_amount = BURST_AMOUNT_TIER_6
+ burst_delay = FIRE_DELAY_TIER_9
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT
+ fa_max_scatter = SCATTER_AMOUNT_TIER_8
+ scatter = SCATTER_AMOUNT_TIER_10
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_8
+ scatter_unwielded = SCATTER_AMOUNT_TIER_10
+ damage_mult = BASE_BULLET_DAMAGE_MULT
+ recoil = RECOIL_AMOUNT_TIER_5
+ empty_sound = 'sound/weapons/gun_empty.ogg'
+
+/obj/item/weapon/gun/pkp/clicked(mob/user, list/mods)
+ if(!mods["alt"] || !CAN_PICKUP(user, src))
+ return ..()
+ else
+ if(!locate(src) in list(user.get_active_hand(), user.get_inactive_hand()))
+ return TRUE
+ if(user.get_active_hand() && user.get_inactive_hand())
+ to_chat(user, SPAN_WARNING("You can't do that with your hands full!"))
+ return TRUE
+ if(!cover_open)
+ playsound(src.loc, 'sound/handling/smartgun_open.ogg', 50, TRUE, 3)
+ to_chat(user, SPAN_NOTICE("You open [src]'s feed cover, allowing the belt to be removed."))
+ cover_open = TRUE
+ else
+ playsound(src.loc, 'sound/handling/smartgun_close.ogg', 50, TRUE, 3)
+ to_chat(user, SPAN_NOTICE("You close [src]'s feed cover."))
+ cover_open = FALSE
+ update_icon()
+ return TRUE
+
+/obj/item/weapon/gun/pkp/replace_magazine(mob/user, obj/item/ammo_magazine/magazine)
+ if(!cover_open)
+ to_chat(user, SPAN_WARNING("[src]'s feed cover is closed! You can't put a new belt in! (alt-click to open it)"))
+ return
+ return ..()
+
+/obj/item/weapon/gun/pkp/unload(mob/user, reload_override, drop_override, loc_override)
+ if(!cover_open)
+ to_chat(user, SPAN_WARNING("[src]'s feed cover is closed! You can't take out the belt! (alt-click to open it)"))
+ return
+ return ..()
+
+/obj/item/weapon/gun/pkp/update_icon()
+ . = ..()
+ if(cover_open)
+ overlays += "+[base_gun_icon]_cover_open"
+ else
+ overlays += "+[base_gun_icon]_cover_closed"
+
+/obj/item/weapon/gun/pkp/able_to_fire(mob/living/user)
+ . = ..()
+ if(.)
+ if(cover_open)
+ to_chat(user, SPAN_WARNING("You can't fire [src] with the feed cover open! (alt-click to close)"))
+ return FALSE
+ if(!skillcheck(user, SKILL_FIREARMS, SKILL_FIREARMS_TRAINED))
+ to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
+ return 0
+ if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_UPP)
+ to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
+ return 0
+
+
/obj/effect/syringe_gun_dummy
name = ""
desc = ""
diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm
index e2985df6a12a..c17ca5bca739 100644
--- a/code/modules/projectiles/guns/pistols.dm
+++ b/code/modules/projectiles/guns/pistols.dm
@@ -258,66 +258,132 @@
icon_state = "g_deagle"
item_state = "g_deagle"
base_gun_icon = "g_deagle"
+
//-------------------------------------------------------
-//MAUSER MERC PISTOL //Inspired by the Makarov, specifically the "PB" version, an integrally silenced Makarov.
-//Rebalanced: Now acts like an UPP M4A3.
+//NP92 pistol
+//Its a makarov
+
+/obj/item/weapon/gun/pistol/np92
+ name = "\improper NP92 pistol"
+ desc = "The standard issue sidearm of the UPP. The NP92 is a small but powerful sidearm, well-liked by most it is issued to, although some prefer the weapon it was meant to replace, the Type 73. Takes 12 round magazines."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "np92"
+ item_state = "np92"
+ fire_sound = "88m4"
+ current_mag = /obj/item/ammo_magazine/pistol/np92
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ attachable_allowed = list(
+ /obj/item/attachable/suppressor,
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight,
+ )
+
+/obj/item/weapon/gun/pistol/np92/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 27, "muzzle_y" = 20,"rail_x" = 13, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 21, "stock_y" = 18)
+
+/obj/item/weapon/gun/pistol/np92/set_gun_config_values()
+ ..()
+ set_fire_delay(FIRE_DELAY_TIER_12)
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_5
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_5
+ scatter = SCATTER_AMOUNT_TIER_6
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_6
+ scatter_unwielded = SCATTER_AMOUNT_TIER_6
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_3
-/obj/item/weapon/gun/pistol/c99
- name = "\improper Korovin PK-9 pistol"
- desc = "The Korovin PK-9 is a cheap, robust and reliable sidearm, its design is strongly inspired by the classic ancient Makarov pistol. Commonly used by many groups, mostly those worried about cost."
+/obj/item/weapon/gun/pistol/np92/suppressed
+ name = "\improper NPZ92 pistol"
+ desc = "The NPZ92 is a version of the NP92 that includes an integrated suppressor, issued sparingly to Kommando units."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
- icon_state = "pk9"
- item_state = "pk9"
+ icon_state = "npz92"
+ item_state = "npz92"
inherent_traits = list(TRAIT_GUN_SILENCED)
- fire_sound = 'sound/weapons/gun_c99.ogg'
- current_mag = /obj/item/ammo_magazine/pistol/c99
- flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
+ fire_sound = "gun_silenced"
+ current_mag = /obj/item/ammo_magazine/pistol/np92/suppressed
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ attachable_allowed = list(
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight,
+ )
+
+/obj/item/weapon/gun/pistol/np92/suppressed/tranq
+ current_mag = /obj/item/ammo_magazine/pistol/np92/tranq
+
+//-------------------------------------------------------
+//Type 73 pistol
+//Its a TT
+
+/obj/item/weapon/gun/pistol/t73
+ name = "\improper Type 73 pistol"
+ desc = "The Type 73 is the once-standard issue sidearm of the UPP. Replaced by the NP92 in UPP use, it remains popular with veteran UPP troops due to familiarity and extra power. Due to an extremely large amount being produced, they tend to end up in the hands of forces attempting to arm themselves on a budget. Users include the Union of Progressive Peoples, Colonial Liberation Front, and just about any mercenary or pirate group out there."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "tt"
+ item_state = "tt"
+ fire_sound = 'sound/weapons/gun_tt.ogg'
+ current_mag = /obj/item/ammo_magazine/pistol/t73
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
attachable_allowed = list(
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
/obj/item/attachable/flashlight,
/obj/item/attachable/lasersight,
- /obj/item/attachable/burstfire_assembly,
+ /obj/item/attachable/suppressor,
)
-/obj/item/weapon/gun/pistol/c99/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 21, "stock_y" = 18)
+/obj/item/weapon/gun/pistol/t73/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 13, "rail_y" = 22, "under_x" = 22, "under_y" = 15, "stock_x" = 21, "stock_y" = 18)
-/obj/item/weapon/gun/pistol/c99/set_gun_config_values()
+/obj/item/weapon/gun/pistol/t73/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_12)
- accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
- accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
+ set_fire_delay(FIRE_DELAY_TIER_11)
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_5
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_5
scatter = SCATTER_AMOUNT_TIER_6
burst_scatter_mult = SCATTER_AMOUNT_TIER_6
scatter_unwielded = SCATTER_AMOUNT_TIER_6
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_6
-/obj/item/weapon/gun/pistol/c99/upp
- desc = "The Korovin PK-9 is a cheap, robust and reliable sidearm, its design is strongly inspired by the classic ancient Makarov pistol. This version has been refitted for military usage by the UPP."
- icon_state = "pk9u"
- item_state = "pk9u"
-/obj/item/weapon/gun/pistol/c99/upp/tranq
- desc = "The Korovin PK-9 is a cheap, robust and reliable sidearm, its design strongly inspired by the classic ancient Makarov pistol. This version contains a customized exterior, an integrated laser and reflex sight, and is noticeably easy to handle."
- icon_state = "pk9r"
- item_state = "pk9r"
- current_mag = /obj/item/ammo_magazine/pistol/c99/tranq
- aim_slowdown = 0
- wield_delay = WIELD_DELAY_MIN
+/obj/item/weapon/gun/pistol/t73/leader
+ name = "\improper Type 74 pistol"
+ desc = "The Type 74 is the designation for a specially modified Type 73 with an integrated laser sight system, multiple lightning cuts to reduce weight in order to allow a higher pressure round to be used with the same recoil sping, and a more comfortable grip. Due to the adoption of the NP92, the Type 74 was produced in limited numbers, because of this it is typically only issued on request to high-ranking officers."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "ttb"
+ item_state = "ttb"
+ current_mag = /obj/item/ammo_magazine/pistol/t73_impact
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ accepted_ammo = list(
+ /obj/item/ammo_magazine/pistol/t73,
+ /obj/item/ammo_magazine/pistol/t73_impact,
+ )
+ attachable_allowed = list(
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight,
+ /obj/item/attachable/suppressor,
+ /obj/item/attachable/heavy_barrel,
+ )
-/obj/item/weapon/gun/pistol/c99/upp/tranq/handle_starting_attachment()
+/obj/item/weapon/gun/pistol/t73/leader/handle_starting_attachment()
..()
- var/obj/item/attachable/lasersight/LS = new(src)
- LS.flags_attach_features &= ~ATTACH_REMOVABLE
- LS.Attach(src)
- update_attachable(LS.slot)
+ var/obj/item/attachable/lasersight/TT = new(src)
+ TT.flags_attach_features &= ~ATTACH_REMOVABLE
+ TT.hidden = TRUE
+ TT.Attach(src)
+ update_attachable(TT.slot)
- var/obj/item/attachable/reflex/RX = new(src)
- RX.flags_attach_features &= ~ATTACH_REMOVABLE
- RX.Attach(src)
- update_attachable(RX.slot)
+/obj/item/weapon/gun/pistol/t73/leader/set_gun_config_values()
+ ..()
+ set_fire_delay(FIRE_DELAY_TIER_11)
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_6
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_6
+ scatter = SCATTER_AMOUNT_TIER_7
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_6
+ scatter_unwielded = SCATTER_AMOUNT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_6
//-------------------------------------------------------
//KT-42 //Inspired by the .44 Auto Mag pistol
@@ -770,7 +836,7 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
/obj/item/weapon/gun/pistol/skorpion
name = "\improper CZ-81 machine pistol"
desc = "A robust, 20th century firearm that's a combination of pistol and submachinegun. Fires .32ACP caliber rounds from a 20-round magazine."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
icon_state = "skorpion"
item_state = "skorpion"
@@ -798,36 +864,8 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
..()
set_fire_delay(FIRE_DELAY_TIER_11)
fa_scatter_peak = 15 //shots
- fa_max_scatter = SCATTER_AMOUNT_TIER_4
-
- accuracy_mult = BASE_ACCURACY_MULT
- scatter = SCATTER_AMOUNT_TIER_6
- damage_mult = BASE_BULLET_DAMAGE_MULT
-
-/obj/item/weapon/gun/pistol/skorpion/upp
- desc = "A robust, 20th century firearm modernized for the 23rd century. Fires .32ACP caliber rounds from a 20-round magazine."
- icon_state = "skorpion_u"
- item_state = "skorpion_u"
-
-/obj/item/weapon/gun/pistol/skorpion/upp/medic
- random_spawn_chance = 100
- random_rail_chance = 70
- random_spawn_rail = list(
- /obj/item/attachable/reflex,
- /obj/item/attachable/flashlight,
- )
- random_muzzle_chance = 50
- random_spawn_muzzle = list(
- /obj/item/attachable/suppressor,
- )
- random_under_chance = 60
- random_spawn_under = list(
- /obj/item/attachable/lasersight,
- )
-
-/obj/item/weapon/gun/pistol/skorpion/set_gun_config_values()
- ..()
fa_max_scatter = SCATTER_AMOUNT_TIER_5
+ accuracy_mult = BASE_ACCURACY_MULT
scatter = SCATTER_AMOUNT_TIER_7
damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2
diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm
index 7a8782f34d7d..7f89e652ef4e 100644
--- a/code/modules/projectiles/guns/revolvers.dm
+++ b/code/modules/projectiles/guns/revolvers.dm
@@ -440,14 +440,20 @@
//-------------------------------------------------------
//RUSSIAN REVOLVER //Based on the 7.62mm Russian revolvers.
-/obj/item/weapon/gun/revolver/nagant
- name = "\improper N-Y 7.62mm revolver"
- desc = "The Nagant-Yamasaki 7.62 is an effective killing machine designed by a consortion of shady Not-Americans. It is frequently found in the hands of criminals or mercenaries."
+/obj/item/weapon/gun/revolver/upp
+ name = "\improper ZHNK-72 revolver"
+ desc = "The ZHNK-72 is a UPP designed revolver. The ZHNK-72 is used by the UPP armed forces in a policing role as well as limited numbers in the hands of SNCOs."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
- icon_state = "ny762"
- item_state = "ny762"
+ icon_state = "zhnk72"
+ item_state = "zhnk72"
- fire_sound = 'sound/weapons/gun_pistol_medium.ogg'
+ fire_sound = "gun_pkd" //sounds stolen from bladerunner revolvers bc they arent used and sound awesome
+ fire_rattle = 'sound/weapons/gun_pkd_fire01_rattle.ogg'
+ reload_sound = 'sound/weapons/handling/pkd_speed_load.ogg'
+ cocked_sound = 'sound/weapons/handling/pkd_cock.wav'
+ unload_sound = 'sound/weapons/handling/pkd_open_chamber.ogg'
+ chamber_close_sound = 'sound/weapons/handling/pkd_close_chamber.ogg'
+ hand_reload_sound = 'sound/weapons/gun_revolver_load3.ogg'
current_mag = /obj/item/ammo_magazine/internal/revolver/upp
force = 8
attachable_allowed = list(
@@ -460,23 +466,22 @@
/obj/item/attachable/bayonet/upp,
/obj/item/attachable/heavy_barrel,
/obj/item/attachable/extended_barrel,
- /obj/item/attachable/compensator,
/obj/item/attachable/lasersight, // Underbarrel
)
-/obj/item/weapon/gun/revolver/nagant/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 21,"rail_x" = 14, "rail_y" = 23, "under_x" = 24, "under_y" = 19, "stock_x" = 24, "stock_y" = 19)
+/obj/item/weapon/gun/revolver/upp/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 21,"rail_x" = 14, "rail_y" = 23, "under_x" = 19, "under_y" = 17, "stock_x" = 24, "stock_y" = 19)
-/obj/item/weapon/gun/revolver/nagant/set_gun_config_values()
+/obj/item/weapon/gun/revolver/upp/set_gun_config_values()
..()
set_fire_delay(FIRE_DELAY_TIER_9)
accuracy_mult = BASE_ACCURACY_MULT
scatter = SCATTER_AMOUNT_TIER_6
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_1
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_4
recoil = 0
recoil_unwielded = 0
-/obj/item/weapon/gun/revolver/nagant/shrapnel
+/obj/item/weapon/gun/revolver/upp/shrapnel
current_mag = /obj/item/ammo_magazine/internal/revolver/upp/shrapnel
random_spawn_chance = 100
random_under_chance = 100
diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm
index 70c1709e9e67..167fb2c66809 100644
--- a/code/modules/projectiles/guns/rifles.dm
+++ b/code/modules/projectiles/guns/rifles.dm
@@ -1277,6 +1277,8 @@
item_state = "type71"
fire_sound = 'sound/weapons/gun_type71.ogg'
+ reload_sound = 'sound/weapons/handling/m41_reload.ogg'
+ unload_sound = 'sound/weapons/handling/m41_unload.ogg'
current_mag = /obj/item/ammo_magazine/rifle/type71
wield_delay = WIELD_DELAY_FAST
attachable_allowed = list(
@@ -1292,10 +1294,8 @@
/obj/item/attachable/extended_barrel,
/obj/item/attachable/heavy_barrel,
/obj/item/attachable/verticalgrip, // Underbarrel
- /obj/item/attachable/angledgrip,
/obj/item/attachable/flashlight/grip,
/obj/item/attachable/lasersight,
- /obj/item/attachable/bipod,
/obj/item/attachable/burstfire_assembly,
/obj/item/attachable/attached_gun/flamer,
/obj/item/attachable/attached_gun/flamer/advanced,
@@ -1307,11 +1307,11 @@
start_automatic = TRUE
/obj/item/weapon/gun/rifle/type71/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 18,"rail_x" = 18, "rail_y" = 23, "under_x" = 20, "under_y" = 13, "stock_x" = 24, "stock_y" = 13)
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 10, "rail_y" = 23, "under_x" = 20, "under_y" = 13, "stock_x" = 11, "stock_y" = 13)
/obj/item/weapon/gun/rifle/type71/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_11)
+ set_fire_delay(FIRE_DELAY_TIER_8)
set_burst_amount(BURST_AMOUNT_TIER_4)
set_burst_delay(FIRE_DELAY_TIER_9)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
@@ -1319,9 +1319,16 @@
scatter = SCATTER_AMOUNT_TIER_6
burst_scatter_mult = SCATTER_AMOUNT_TIER_10
scatter_unwielded = SCATTER_AMOUNT_TIER_4
- damage_mult = BASE_BULLET_DAMAGE_MULT
+ damage_mult = BASE_BULLET_DAMAGE_MULT //10~ more damage than m41, as well as higher ap from bullet, slightly higher DPS, 133>137.5
recoil_unwielded = RECOIL_AMOUNT_TIER_3
+/obj/item/weapon/gun/rifle/type71/handle_starting_attachment()
+ ..()
+ var/obj/item/attachable/stock/type71/STOCK = new(src)
+ STOCK.flags_attach_features &= ~ATTACH_REMOVABLE
+ STOCK.Attach(src)
+ update_attachable(STOCK.slot)
+
/obj/item/weapon/gun/rifle/type71/rifleman
//add GL
random_spawn_chance = 100
@@ -1336,9 +1343,7 @@
)
random_under_chance = 40
random_spawn_under = list(
- /obj/item/attachable/lasersight,
/obj/item/attachable/verticalgrip,
- /obj/item/attachable/angledgrip,
)
/obj/item/weapon/gun/rifle/type71/dual
@@ -1356,7 +1361,6 @@
random_spawn_under = list(
/obj/item/attachable/lasersight,
/obj/item/attachable/verticalgrip,
- /obj/item/attachable/angledgrip,
)
/obj/item/weapon/gun/rifle/type71/sapper
@@ -1375,7 +1379,6 @@
)
random_under_chance = 90
random_spawn_under = list(
- /obj/item/attachable/lasersight,
/obj/item/attachable/attached_gun/extinguisher,
)
@@ -1383,10 +1386,17 @@
name = "\improper Type 71-F pulse rifle"
desc = " This appears to be a less common variant of the Type 71 with an integrated flamethrower that seems especially powerful."
attachable_allowed = list(
- /obj/item/attachable/suppressor,
+ /obj/item/attachable/flashlight, // Rail
+ /obj/item/attachable/magnetic_harness,
+ /obj/item/attachable/scope,
+ /obj/item/attachable/scope/mini,
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
+ /obj/item/attachable/suppressor, // Muzzle
+ /obj/item/attachable/bayonet,
+ /obj/item/attachable/bayonet/upp,
/obj/item/attachable/extended_barrel,
+ /obj/item/attachable/heavy_barrel,
)
/obj/item/weapon/gun/rifle/type71/flamer/handle_starting_attachment()
@@ -1418,16 +1428,35 @@
aim_slowdown = SLOWDOWN_ADS_QUICK //Carbine is more lightweight
wield_delay = WIELD_DELAY_VERY_FAST
bonus_overlay_x = 2
+ force = 20 //integrated melee mod from stock, which doesn't fit on the gun but is still clearly there on the sprite
+ attachable_allowed = list(
+ /obj/item/attachable/flashlight, // Rail
+ /obj/item/attachable/magnetic_harness,
+ /obj/item/attachable/scope,
+ /obj/item/attachable/scope/mini,
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/suppressor, // Muzzle
+ /obj/item/attachable/bayonet,
+ /obj/item/attachable/bayonet/upp,
+ /obj/item/attachable/extended_barrel,
+ /obj/item/attachable/heavy_barrel,
+ /obj/item/attachable/verticalgrip, // Underbarrel
+ /obj/item/attachable/burstfire_assembly,
+ )
random_spawn_muzzle = list() //no default bayonet
/obj/item/weapon/gun/rifle/type71/carbine/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 18,"rail_x" = 19, "rail_y" = 22, "under_x" = 21, "under_y" = 14, "stock_x" = 24, "stock_y" = 13)
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 14, "rail_y" = 23, "under_x" = 25, "under_y" = 14, "stock_x" = 24, "stock_y" = 13)
+
+/obj/item/weapon/gun/rifle/type71/carbine/handle_starting_attachment()
+ return //integrated attachment code makes me want to blow my brains out
/obj/item/weapon/gun/rifle/type71/carbine/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_11)
- damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_2
+ set_fire_delay(FIRE_DELAY_TIER_11)//same fire rate as m41
+ damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_4//same damage as m41 reg bullets probably
scatter_unwielded = SCATTER_AMOUNT_TIER_5
recoil_unwielded = RECOIL_AMOUNT_TIER_4
@@ -1444,9 +1473,7 @@
)
random_under_chance = 40
random_spawn_under = list(
- /obj/item/attachable/lasersight,
/obj/item/attachable/verticalgrip,
- /obj/item/attachable/angledgrip,
)
/obj/item/weapon/gun/rifle/type71/carbine/commando
@@ -1454,12 +1481,13 @@
desc = "A much rarer variant of the Type 71, this version contains an integrated suppressor, integrated scope, and extensive fine-tuning. Many parts have been replaced, filed down, and improved upon. As a result, this variant is rarely seen outside of commando units."
icon_state = "type73"
item_state = "type73"
+
+ fire_sound = "gun_silenced"
wield_delay = 0 //Ends up being .5 seconds due to scope
- current_mag = /obj/item/ammo_magazine/rifle/type71/heap
+ inherent_traits = list(TRAIT_GUN_SILENCED)
+ current_mag = /obj/item/ammo_magazine/rifle/type71/ap
attachable_allowed = list(
- /obj/item/attachable/lasersight,
/obj/item/attachable/verticalgrip,
- /obj/item/attachable/angledgrip,
)
random_spawn_chance = 0
random_spawn_rail = list()
@@ -1467,24 +1495,23 @@
bonus_overlay_x = 1
bonus_overlay_y = 0
-/obj/item/weapon/gun/rifle/type71/carbine/commando/handle_starting_attachment()//Making the gun have an invisible silencer since it's supposed to have one.
+/obj/item/weapon/gun/rifle/type71/carbine/commando/handle_starting_attachment()
..()
//suppressor
- var/obj/item/attachable/suppressor/S = new(src)
- S.hidden = TRUE
- S.flags_attach_features &= ~ATTACH_REMOVABLE
- S.Attach(src)
- update_attachable(S.slot)
+ var/obj/item/attachable/type73suppressor/suppressor = new(src)
+ suppressor.flags_attach_features &= ~ATTACH_REMOVABLE
+ suppressor.Attach(src)
+ update_attachable(suppressor.slot)
//scope
- var/obj/item/attachable/scope/mini/F = new(src)
- F.hidden = TRUE
- F.flags_attach_features &= ~ATTACH_REMOVABLE
- F.Attach(src)
- update_attachable(F.slot)
+ var/obj/item/attachable/scope/mini/scope = new(src)
+ scope.hidden = TRUE
+ scope.flags_attach_features &= ~ATTACH_REMOVABLE
+ scope.Attach(src)
+ update_attachable(scope.slot)
/obj/item/weapon/gun/rifle/type71/carbine/commando/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 21, "stock_y" = 18)
+ attachable_offset = list("muzzle_x" = 35, "muzzle_y" = 17,"rail_x" = 10, "rail_y" = 22, "under_x" = 23, "under_y" = 14, "stock_x" = 21, "stock_y" = 18)
/obj/item/weapon/gun/rifle/type71/carbine/commando/set_gun_config_values()
diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm
index 3c366df40b57..1cf35623408c 100644
--- a/code/modules/projectiles/guns/shotguns.dm
+++ b/code/modules/projectiles/guns/shotguns.dm
@@ -391,7 +391,7 @@ can cause issues with ammo types getting mixed up during the burst.
starting_attachment_types = list(/obj/item/attachable/stock/type23)
/obj/item/weapon/gun/shotgun/type23/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 31, "muzzle_y" = 19,"rail_x" = 13, "rail_y" = 21, "under_x" = 24, "under_y" = 15, "stock_x" = 1, "stock_y" = 16)
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 13, "rail_y" = 21, "under_x" = 24, "under_y" = 15, "stock_x" = -1, "stock_y" = 17)
/obj/item/weapon/gun/shotgun/type23/set_gun_config_values()
..()
diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm
index b9c2b9c3514d..89e6594c64e7 100644
--- a/code/modules/projectiles/guns/smgs.dm
+++ b/code/modules/projectiles/guns/smgs.dm
@@ -338,6 +338,89 @@
#undef PPSH_UNJAM_CHANCE
+//-------------------------------------------------------
+//Type-19,
+
+/obj/item/weapon/gun/smg/pps43
+ name = "\improper Type-19 Submachinegun" //placeholder
+ desc = "An outdated, but reliable and powerful, submachinegun originating in the Union of Progressive Peoples, it is still in limited service in the UPP but is most often used by paramilitary groups or corporate security forces. It is usually used with a 35 round stick magazine, or a 71 round drum."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "insasu"
+ item_state = "insasu"
+
+ fire_sound = 'sound/weapons/smg_heavy.ogg'
+ current_mag = /obj/item/ammo_magazine/smg/pps43
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER
+ attachable_allowed = list(
+ /obj/item/attachable/suppressor,
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight/grip,
+ /obj/item/attachable/verticalgrip,
+ /obj/item/attachable/lasersight,
+ /obj/item/attachable/flashlight,
+ /obj/item/attachable/extended_barrel,
+ /obj/item/attachable/magnetic_harness,
+ )
+
+/obj/item/weapon/gun/smg/pps43/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 20,"rail_x" = 20, "rail_y" = 24, "under_x" = 25, "under_y" = 17, "stock_x" = 26, "stock_y" = 15)
+
+/obj/item/weapon/gun/smg/pps43/set_gun_config_values()
+ ..()
+ fire_delay = FIRE_DELAY_TIER_SMG
+ burst_delay = FIRE_DELAY_TIER_SMG
+ burst_amount = BURST_AMOUNT_TIER_3
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_5
+ scatter = SCATTER_AMOUNT_TIER_6
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_4
+ scatter_unwielded = SCATTER_AMOUNT_TIER_4
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_4
+ recoil_unwielded = RECOIL_AMOUNT_TIER_5
+
+/obj/item/weapon/gun/smg/pps43/extended_mag
+ current_mag = /obj/item/ammo_magazine/smg/pps43/extended
+//-------------------------------------------------------
+//Type 64
+
+/obj/item/weapon/gun/smg/bizon
+ name = "\improper Type 64 Submachinegun"
+ desc = "The standard submachinegun of the UPP, sporting an unusual 64 round helical magazine, it has a high fire-rate, but is unusually accurate. This one has a faux-wood grip, denoting it as civilian use or as an export model."
+ desc_lore = "The Type 64 finds its way into the hands of more than just UPP soldiers, it has an active life with rebel groups, corporate security forces, mercenaries, less well-armed militaries, and just about everything or everyone in between."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "type64"
+ item_state = "type64"
+
+ fire_sound = 'sound/weapons/smg_heavy.ogg'
+ current_mag = /obj/item/ammo_magazine/smg/bizon
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER
+ wield_delay = WIELD_DELAY_MIN
+ aim_slowdown = SLOWDOWN_ADS_QUICK_MINUS
+
+/obj/item/weapon/gun/smg/bizon/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 20,"rail_x" = 18, "rail_y" = 23, "under_x" = 26, "under_y" = 15, "stock_x" = 26, "stock_y" = 15)
+
+/obj/item/weapon/gun/smg/bizon/set_gun_config_values()
+ ..()
+ fire_delay = FIRE_DELAY_TIER_SMG
+ burst_delay = FIRE_DELAY_TIER_SMG
+ burst_amount = BURST_AMOUNT_TIER_4
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_5
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
+ scatter = SCATTER_AMOUNT_TIER_9
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_8
+ scatter_unwielded = SCATTER_AMOUNT_TIER_4
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_3
+ recoil_unwielded = RECOIL_AMOUNT_TIER_5
+
+/obj/item/weapon/gun/smg/bizon/upp
+ name = "\improper Type 64 Submachinegun"
+ desc = "The standard submachinegun of the UPP, sporting an unusual 64 round helical magazine, it has a high fire-rate, but is unusually accurate. This one has a black polymer grip, denoting it as in-use by the UPP military."
+ desc_lore = "The Type 64 finds its way into the hands of more than just UPP soldiers, it has an active life with rebel groups, corporate security forces, mercenaries, less well-armed militaries, and just about everything or everyone in between."
+ icon_state = "type64_u"
+ item_state = "type64"
+
//-------------------------------------------------------
//GENERIC UZI //Based on the uzi submachinegun, of course.
diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm
index a73335971ffa..400f6c928144 100644
--- a/code/modules/projectiles/guns/specialist.dm
+++ b/code/modules/projectiles/guns/specialist.dm
@@ -450,73 +450,56 @@
step(PMC_sniper,turn(PMC_sniper.dir,180))
PMC_sniper.apply_effect(5, WEAKEN)
-//SVD //Based on the actual Dragunov DMR rifle.
+//Type 88 //Based on the actual Dragunov DMR rifle.
/obj/item/weapon/gun/rifle/sniper/svd
- name = "\improper SVD Dragunov-033 designated marksman rifle"
- desc = "A wannabe replica of an SVD, constructed from a MAR-40 by someone probably illiterate that thought the original SVD was built from an AK pattern. Fires 7.62x54mmR rounds."
+ name = "\improper Type 88 designated marksman rifle"
+ desc = "The standard issue DMR of the UPP, the Type 88 is sought after by competitive shooters and terrorists alike for its high degree of accuracy. Typically loaded with armor-piercing 7.62x54mmR rounds in a 12 round magazine."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
- icon_state = "svd003"
- item_state = "svd003" //NEEDS A ONE HANDED STATE
+ icon_state = "type88"
+ item_state = "type88"
- fire_sound = 'sound/weapons/gun_kt42.ogg'
+ fire_sound = 'sound/weapons/gun_mg.ogg'
current_mag = /obj/item/ammo_magazine/sniper/svd
attachable_allowed = list(
//Muzzle,
/obj/item/attachable/bayonet,
/obj/item/attachable/bayonet/upp_replica,
/obj/item/attachable/bayonet/upp,
- /obj/item/attachable/extended_barrel,
- /obj/item/attachable/heavy_barrel,
- //Barrel,
- /obj/item/attachable/slavicbarrel,
- //Rail,
- /obj/item/attachable/reddot,
- /obj/item/attachable/reflex,
- /obj/item/attachable/flashlight,
- /obj/item/attachable/magnetic_harness,
- /obj/item/attachable/scope,
- /obj/item/attachable/scope/variable_zoom,
- /obj/item/attachable/scope/variable_zoom/slavic,
- /obj/item/attachable/scope/mini,
- /obj/item/attachable/scope/slavic,
//Under,
/obj/item/attachable/verticalgrip,
- /obj/item/attachable/angledgrip,
- /obj/item/attachable/lasersight,
/obj/item/attachable/bipod,
- //Stock,
- /obj/item/attachable/stock/slavic,
+ //Integrated,
+ /obj/item/attachable/type88_barrel,
)
has_aimed_shot = FALSE
- flags_gun_features = GUN_AUTO_EJECTOR|GUN_WIELDED_FIRING_ONLY
- starting_attachment_types = list(/obj/item/attachable/scope/variable_zoom/slavic)
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_WIELDED_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_CAN_POINTBLANK
+ starting_attachment_types = list()
sniper_beam_type = null
skill_locked = FALSE
/obj/item/weapon/gun/rifle/sniper/svd/handle_starting_attachment()
..()
- var/obj/item/attachable/attachie = new /obj/item/attachable/slavicbarrel(src)
+ var/obj/item/attachable/attachie = new /obj/item/attachable/type88_barrel(src)
attachie.flags_attach_features &= ~ATTACH_REMOVABLE
attachie.Attach(src)
update_attachable(attachie.slot)
- attachie = new /obj/item/attachable/stock/slavic(src)
- attachie.flags_attach_features &= ~ATTACH_REMOVABLE
- attachie.Attach(src)
- update_attachable(attachie.slot)
+ var/obj/item/attachable/scope/variable_zoom/integrated/type88sight = new(src)
+ type88sight.flags_attach_features &= ~ATTACH_REMOVABLE
+ type88sight.hidden = TRUE
+ type88sight.Attach(src)
+ update_attachable(type88sight.slot)
/obj/item/weapon/gun/rifle/sniper/svd/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 13, "rail_y" = 19, "under_x" = 24, "under_y" = 13, "stock_x" = 24, "stock_y" = 13)
+ attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 13, "rail_y" = 19, "under_x" = 26, "under_y" = 14, "stock_x" = 24, "stock_y" = 13, "special_x" = 39, "special_y" = 18)
/obj/item/weapon/gun/rifle/sniper/svd/set_gun_config_values()
..()
set_fire_delay(FIRE_DELAY_TIER_6)
- set_burst_amount(BURST_AMOUNT_TIER_2)
- set_burst_delay(FIRE_DELAY_TIER_11)
- accuracy_mult = BASE_ACCURACY_MULT
+ set_burst_amount(BURST_AMOUNT_TIER_1)
+ accuracy_mult = BASE_ACCURACY_MULT * 3
scatter = SCATTER_AMOUNT_TIER_8
- burst_scatter_mult = SCATTER_AMOUNT_TIER_6
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_5
damage_falloff_mult = 0
@@ -1336,6 +1319,56 @@
qdel(src)
user.put_in_active_hand(F)
+//-------------------------------------------------------
+//UPP Rocket Launcher
+
+/obj/item/weapon/gun/launcher/rocket/upp
+ name = "\improper HJRA-12 Handheld Anti-Tank Grenade Launcher"
+ desc = "The HJRA-12 Handheld Anti-Tank Grenade Launcher is the standard Anti-Armor weapon of the UPP. It is designed to be easy to use and to take out or disable armored vehicles."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "hjra12"
+ item_state = "hjra12"
+ skill_locked = FALSE
+ current_mag = /obj/item/ammo_magazine/rocket/upp/at
+
+ attachable_allowed = list(/obj/item/attachable/upp_rpg_breech)
+
+ flags_gun_features = GUN_WIELDED_FIRING_ONLY
+
+ flags_item = TWOHANDED
+
+/obj/item/weapon/gun/launcher/rocket/upp/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 18,"rail_x" = 6, "rail_y" = 19, "under_x" = 19, "under_y" = 14, "stock_x" = -6, "stock_y" = 16, "special_x" = 37, "special_y" = 16)
+
+/obj/item/weapon/gun/launcher/rocket/upp/handle_starting_attachment()
+ ..()
+ var/obj/item/attachable/upp_rpg_breech/S = new(src)
+ S.flags_attach_features &= ~ATTACH_REMOVABLE
+ S.Attach(src)
+ update_attachables()
+
+ var/obj/item/attachable/magnetic_harness/Integrated = new(src)
+ Integrated.hidden = TRUE
+ Integrated.flags_attach_features &= ~ATTACH_REMOVABLE
+ Integrated.Attach(src)
+ update_attachable(Integrated.slot)
+
+/obj/item/weapon/gun/launcher/rocket/upp/apply_bullet_effects(obj/item/projectile/projectile_to_fire, mob/user, i = 1, reflex = 0)
+ . = ..()
+ if(!HAS_TRAIT(user, TRAIT_EAR_PROTECTION) && ishuman(user))
+ return
+
+ var/backblast_loc = get_turf(get_step(user.loc, turn(user.dir, 180)))
+ smoke.set_up(1, 0, backblast_loc, turn(user.dir, 180))
+ smoke.start()
+ playsound(src, 'sound/weapons/gun_rocketlauncher.ogg', 100, TRUE, 10)
+ for(var/mob/living/carbon/C in backblast_loc)
+ if(!C.lying && !HAS_TRAIT(C, TRAIT_EAR_PROTECTION)) //Have to be standing up to get the fun stuff
+ C.apply_damage(15, BRUTE) //The shockwave hurts, quite a bit. It can knock unarmored targets unconscious in real life
+ C.apply_effect(4, STUN) //For good measure
+ C.apply_effect(6, STUTTER)
+ C.emote("pain")
+
//-------------------------------------------------------
//Flare gun. Close enough to a specialist gun?
diff --git a/code/modules/projectiles/magazines/misc.dm b/code/modules/projectiles/magazines/misc.dm
index d224498ebceb..87568c953211 100644
--- a/code/modules/projectiles/magazines/misc.dm
+++ b/code/modules/projectiles/magazines/misc.dm
@@ -6,7 +6,7 @@
name = "rotating ammo drum (7.62x51mm)"
desc = "A huge ammo drum for a huge gun."
caliber = "7.62x51mm"
- icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/event.dmi'
icon_state = "painless" //PLACEHOLDER
matter = list("metal" = 10000)
@@ -31,6 +31,19 @@
reload_delay = 8
gun_type = /obj/item/weapon/gun/m60
+/obj/item/ammo_magazine/pkp
+ name = "QYJ-72 ammo box (7.62x54mmR)"
+ desc = "A 250 round box for the UPP's standard GPMG, the QYJ-72. Chambered in 7.62x54mmR."
+ caliber = "7.62x54mmR"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "qjy72"
+
+ matter = list("metal" = 10000)
+ default_ammo = /datum/ammo/bullet/pkp
+ max_rounds = 250
+ reload_delay = 12
+ gun_type = /obj/item/weapon/gun/pkp
+
//rocket launchers
/obj/item/ammo_magazine/rifle/grenadespawner
diff --git a/code/modules/projectiles/magazines/pistols.dm b/code/modules/projectiles/magazines/pistols.dm
index dae86cc813cc..11e6fe9dbfeb 100644
--- a/code/modules/projectiles/magazines/pistols.dm
+++ b/code/modules/projectiles/magazines/pistols.dm
@@ -192,21 +192,53 @@
ammo_band_color = AMMO_BAND_COLOR_AP
//-------------------------------------------------------
-//MAUSER MERC PISTOL //Inspired by the Makarov.
+//Type 31 pistol. //A makarov
-/obj/item/ammo_magazine/pistol/c99
- name = "\improper PK-9 magazine (.380)"
+/obj/item/ammo_magazine/pistol/np92
+ name = "\improper NP92 magazine (9x18mm Makarov)"
default_ammo = /datum/ammo/bullet/pistol
- caliber = ".380"
+ caliber = "9x18mm Makarov"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
- icon_state = "pk-9"
- max_rounds = 8
- gun_type = /obj/item/weapon/gun/pistol/c99
+ icon_state = "np92mag"
+ max_rounds = 12
+ gun_type = /obj/item/weapon/gun/pistol/np92
+
+/obj/item/ammo_magazine/pistol/np92/suppressed
+ name = "\improper NPZ92 magazine (9x18mm Makarov)"
+ default_ammo = /datum/ammo/bullet/pistol
+ caliber = "9x18mm Makarov"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "npz92mag"
+ max_rounds = 12
-/obj/item/ammo_magazine/pistol/c99/tranq
- name = "\improper PK-9 tranquilizer magazine (.380)"
+/obj/item/ammo_magazine/pistol/np92/tranq
+ name = "\improper NPZ92 tranq magazine (9x18mm Makarov)"
default_ammo = /datum/ammo/bullet/pistol/tranq
- icon_state = "pk-9_tranq"
+ caliber = "9x18mm Makarov"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "npz92tranqmag"
+ max_rounds = 12
+
+//-------------------------------------------------------
+//Type 73 pistol. //A TT
+
+/obj/item/ammo_magazine/pistol/t73
+ name = "\improper Type 73 magazine (7.62x25mm Tokarev)"
+ default_ammo = /datum/ammo/bullet/pistol/heavy
+ caliber = "7.62x25mm Tokarev"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "ttmag"
+ max_rounds = 9
+ gun_type = /obj/item/weapon/gun/pistol/t73
+
+/obj/item/ammo_magazine/pistol/t73_impact
+ name = "\improper High Impact Type 74 magazine (7.62x25mm Tokarev)"
+ default_ammo = /datum/ammo/bullet/pistol/heavy/super/highimpact/upp
+ caliber = "7.62x25mm Tokarev"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "ttmag_impact"
+ max_rounds = 9
+ gun_type = /obj/item/weapon/gun/pistol/t73/leader
//-------------------------------------------------------
//KT-42 //Inspired by the .44 Auto Mag pistol
@@ -316,7 +348,7 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
name = "\improper CZ-81 20-round magazine (.32ACP)"
desc = "A .32ACP caliber magazine for the CZ-81."
caliber = ".32ACP"
- icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi'
icon_state = "skorpion" //PLACEHOLDER
gun_type = /obj/item/weapon/gun/pistol/skorpion
max_rounds = 20
diff --git a/code/modules/projectiles/magazines/revolvers.dm b/code/modules/projectiles/magazines/revolvers.dm
index c9803fdf5671..07fc75a50fad 100644
--- a/code/modules/projectiles/magazines/revolvers.dm
+++ b/code/modules/projectiles/magazines/revolvers.dm
@@ -55,18 +55,18 @@
caliber = ".44 sabot"
/obj/item/ammo_magazine/revolver/upp
- name = "\improper N-Y speed loader (7.62x38mmR)"
- default_ammo = /datum/ammo/bullet/revolver/nagant
+ name = "\improper ZHNK-72 speed loader (7.62x38mmR)"
+ default_ammo = /datum/ammo/bullet/revolver/upp
caliber = "7.62x38mmR"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
- icon_state = "ny762"
- gun_type = /obj/item/weapon/gun/revolver/nagant
+ icon_state = "zhnk72loader"
+ gun_type = /obj/item/weapon/gun/revolver/upp
/obj/item/ammo_magazine/revolver/upp/shrapnel
- name = "\improper N-Y shrapnel-shot speed loader (7.62x38mmR)"
+ name = "\improper ZHNK-72 shrapnel-shot speed loader (7.62x38mmR)"
desc = "This speedloader contains seven 'shrapnel-shot' bullets, cheap recycled casings picked up off the ground and refilled with gunpowder and random scrap metal. Acts similarly to flechette."
- default_ammo = /datum/ammo/bullet/revolver/nagant/shrapnel
- icon_state = "ny762_shrapnel"
+ default_ammo = /datum/ammo/bullet/revolver/upp/shrapnel
+ icon_state = "zhnk72loader_shrapnel"
/obj/item/ammo_magazine/revolver/small
name = "\improper S&W speed loader (.38)"
@@ -167,13 +167,13 @@
//RUSSIAN REVOLVER //Based on the 7.62mm Russian revolvers.
/obj/item/ammo_magazine/internal/revolver/upp
- default_ammo = /datum/ammo/bullet/revolver/nagant
+ default_ammo = /datum/ammo/bullet/revolver/upp
caliber = "7.62x38mmR"
max_rounds = 7
- gun_type = /obj/item/weapon/gun/revolver/nagant
+ gun_type = /obj/item/weapon/gun/revolver/upp
/obj/item/ammo_magazine/internal/revolver/upp/shrapnel
- default_ammo = /datum/ammo/bullet/revolver/nagant/shrapnel
+ default_ammo = /datum/ammo/bullet/revolver/upp/shrapnel
//-------------------------------------------------------
diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm
index 57bcd7f0a563..f960cc82535b 100644
--- a/code/modules/projectiles/magazines/rifles.dm
+++ b/code/modules/projectiles/magazines/rifles.dm
@@ -290,7 +290,9 @@
desc = "A 5.45x39mm high-capacity casket magazine for the Type 71 rifle."
caliber = "5.45x39mm"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
- icon_state = "type_71"
+ icon_state = "type71"
+ ammo_band_icon = "+type71_band"
+ ammo_band_icon_empty = "+type71_band_e"
default_ammo = /datum/ammo/bullet/rifle/type71
max_rounds = 60
gun_type = /obj/item/weapon/gun/rifle/type71
@@ -298,16 +300,14 @@
/obj/item/ammo_magazine/rifle/type71/ap
name = "\improper Type 71 AP magazine (5.45x39mm)"
desc = "A 5.45x39mm high-capacity casket magazine containing armor piercing rounds for the Type 71 rifle."
- icon_state = "type_71_ap"
default_ammo = /datum/ammo/bullet/rifle/type71/ap
- bonus_overlay = "type71_ap"
+ ammo_band_color = AMMO_BAND_COLOR_AP
/obj/item/ammo_magazine/rifle/type71/heap
name = "\improper Type 71 HEAP magazine (5.45x39mm)"
desc = "A 5.45x39mm high-capacity casket magazine containing the standard high explosive armor piercing rounds for the Type 71 rifle."
- icon_state = "type_71_heap"
default_ammo = /datum/ammo/bullet/rifle/type71/heap
- bonus_overlay = "type71_heap"
+ ammo_band_color = AMMO_BAND_COLOR_HEAP
//-------------------------------------------------------
//L42A Battle Rifle
diff --git a/code/modules/projectiles/magazines/smgs.dm b/code/modules/projectiles/magazines/smgs.dm
index 333d47e19931..b89aee06f6be 100644
--- a/code/modules/projectiles/magazines/smgs.dm
+++ b/code/modules/projectiles/magazines/smgs.dm
@@ -150,6 +150,44 @@
#undef PPSH_STICK_MAGAZINE_JAM_CHANCE
#undef PPSH_DRUM_MAGAZINE_JAM_CHANCE
+//-------------------------------------------------------
+//Type-19, based on the PPS-43
+
+/obj/item/ammo_magazine/smg/pps43
+ name = "\improper Type-19 stick magazine (7.62x25mm)"
+ desc = "A stick magazine for the Type-19 submachinegun."
+ caliber = "7.62x25mm"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "insasu_stickmag"
+ bonus_overlay = "insasu_stickmag_overlay"
+ max_rounds = 35
+ gun_type = /obj/item/weapon/gun/smg/pps43
+ default_ammo = /datum/ammo/bullet/smg/pps43
+ var/bonus_mag_aim_slowdown = 0
+ var/bonus_mag_wield_delay = 0
+
+
+/obj/item/ammo_magazine/smg/pps43/extended
+ name = "\improper Type-19 drum magazine (7.62x25mm)"
+ desc = "A drum magazine for the Type-19 submachinegun."
+ icon_state = "insasu_drum"
+ bonus_overlay = "insasu_drum_overlay"
+ max_rounds = 71
+ w_class = SIZE_MEDIUM
+ bonus_mag_aim_slowdown = SLOWDOWN_ADS_QUICK_MINUS
+ bonus_mag_wield_delay = WIELD_DELAY_VERY_FAST
+//-------------------------------------------------------
+//Type 64 SMG, based on the PP Bizon.
+
+/obj/item/ammo_magazine/smg/bizon
+ name = "\improper Type 64 Helical Magazine (7.62x19mm)"
+ desc = "A 64 round magazine for the Type 64 submachinegun, the standard SMG of the UPP armed forces."
+ caliber = "7.62x19mm"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon_state = "type64mag"
+ max_rounds = 64
+ gun_type = /obj/item/weapon/gun/smg/bizon
+
//-------------------------------------------------------
//GENERIC UZI //Based on the uzi submachinegun, of course.
diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm
index 23b540202c40..2730563e2cbb 100644
--- a/code/modules/projectiles/magazines/specialist.dm
+++ b/code/modules/projectiles/magazines/specialist.dm
@@ -48,16 +48,16 @@
max_rounds = 6
-//SVD //Based on the actual Dragunov designated marksman rifle.
+//Type 88 //Based on the actual Dragunov designated marksman rifle.
/obj/item/ammo_magazine/sniper/svd
- name = "\improper SVD magazine (7.62x54mmR)"
- desc = "A large caliber magazine for the SVD designated marksman rifle."
+ name = "\improper Type-88 Magazine (7.62x54mmR)"
+ desc = "A large caliber magazine for the Type-88 designated marksman rifle."
caliber = "7.62x54mmR"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
- icon_state = "svd"
- default_ammo = /datum/ammo/bullet/sniper/crude
- max_rounds = 10
+ icon_state = "type88mag"
+ default_ammo = /datum/ammo/bullet/sniper/upp
+ max_rounds = 12
gun_type = /obj/item/weapon/gun/rifle/sniper/svd
//M4RA magazines
@@ -331,3 +331,47 @@
default_ammo = /datum/ammo/rocket/ap/anti_tank
gun_type = /obj/item/weapon/gun/launcher/rocket/anti_tank
reload_delay = 100
+
+
+//-------------------------------------------------------
+//UPP Rockets
+
+/obj/item/ammo_magazine/rocket/upp
+ name = "\improper HJRA-12 High-Explosive Rocket"
+ desc = "A rocket for the UPP standard-issue HJRA-12 Handheld Anti-Tank Grenade Launcher. This one is a standard High-Explosive rocket for anti-personal or light-vehicle use."
+ caliber = "88mm"
+ icon_state = "hjra_explosive"
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+
+ max_rounds = 1
+ default_ammo = /datum/ammo/rocket
+ gun_type = /obj/item/weapon/gun/launcher/rocket/upp
+ reload_delay = 85
+
+/obj/item/ammo_magazine/rocket/upp/update_icon()
+ if(current_rounds <= 0)
+ qdel(src)
+ else
+ icon_state = initial(icon_state)
+
+/obj/item/ammo_magazine/rocket/upp/at
+ name = "\improper HJRA-12 Anti-Tank Rocket"
+ desc = "A rocket for the UPP standard-issue HJRA-12 Handheld Anti-Tank Grenade Launcher. This one is a standard Anti-Tank rocket designed to disable or destroy hostile vehicles."
+ caliber = "88mm"
+ icon_state = "hjra_tank"
+
+ max_rounds = 1
+ default_ammo = /datum/ammo/rocket/ap/anti_tank
+ gun_type = /obj/item/weapon/gun/launcher/rocket/upp
+ reload_delay = 85
+
+/obj/item/ammo_magazine/rocket/upp/incen
+ name = "\improper HJRA-12 Extreme-Intensity Incendiary Rocket"
+ desc = "A rocket for the UPP standard-issue HJRA-12 Handheld Anti-Tank Grenade Launcher. This one is an extreme-intensity incendiary rocket, using an experimental chemical designated R-189 by the UPP, it is designed to melt through fortified positions and bunkers but is most commonly used in an anti-personnal role due to over-issuing and the tempatures after use in its intended role leaving the tempature of the air incompatible with human life."
+ caliber = "88mm"
+ icon_state = "hjra_incen"
+
+ max_rounds = 1
+ default_ammo = /datum/ammo/rocket/wp/upp
+ gun_type = /obj/item/weapon/gun/launcher/rocket/upp
+ reload_delay = 85
diff --git a/code/modules/reagents/chemistry_reagents/other.dm b/code/modules/reagents/chemistry_reagents/other.dm
index a7f0a1143428..45e66c182e6a 100644
--- a/code/modules/reagents/chemistry_reagents/other.dm
+++ b/code/modules/reagents/chemistry_reagents/other.dm
@@ -788,6 +788,20 @@
PROPERTY_FIRE_PENETRATING = 1
)
+/datum/reagent/napalm/upp
+ name = "R189"
+ id = "R189"
+ description = "A UPP chemical, it burns at an extremely high tempature and is designed to melt directly through fortified positions or bunkers."
+ color = "#ffe49c"
+ burncolor = "#ffe49c"
+ burn_sprite = "dynamic"
+ properties = list(
+ PROPERTY_INTENSITY = BURN_LEVEL_TIER_9,
+ PROPERTY_DURATION = BURN_TIME_TIER_3,
+ PROPERTY_RADIUS = 6,
+ PROPERTY_FIRE_PENETRATING = 1,
+ )
+
/datum/reagent/chlorinetrifluoride
name = "Chlorine Trifluoride"
id = "chlorine trifluoride"
diff --git a/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm b/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
index 23219f551a47..78222cdb3a40 100644
--- a/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
+++ b/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
@@ -1,6 +1,6 @@
/obj/item/ammo_magazine/hardpoint/ltaaap_minigun
name = "LTAA-AP Minigun Magazine"
- icon = 'icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi'
+ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/event.dmi'
desc = "A primary armament minigun magazine."
caliber = "7.62x51mm" //Correlates to miniguns
icon_state = "painless"
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 43a250b7b091..b28138cdad12 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -1018,6 +1018,7 @@
#include "code\game\objects\items\devices\flash.dm"
#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\floor_painter.dm"
+#include "code\game\objects\items\devices\helmet_visors.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
#include "code\game\objects\items\devices\megaphone.dm"
#include "code\game\objects\items\devices\motion_detector.dm"
diff --git a/html/changelogs/AutoChangeLog-pr-3865.yml b/html/changelogs/AutoChangeLog-pr-3865.yml
new file mode 100644
index 000000000000..b9f40a81c133
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3865.yml
@@ -0,0 +1,35 @@
+author: "CapCamIII"
+delete-after: True
+changes:
+ - rscadd: "Adds 6(8 if you're pedantic) new guns for the UPP, details for each in following lines."
+ - rscadd: "Type 19, Replacement for PPsh on colonies and black market."
+ - rscadd: "Type 64, replacement for scorpion, full sized SMG, 2 versions, 1 for upp, 1 for not upp"
+ - rscadd: "HJRA-12, RPG for UPP."
+ - rscadd: "Type 73, pistol for higher ranked UPP troops, UPP COs get a Type 74 which has high-impact rounds, replaces PK9 in non-UPP use."
+ - rscadd: "NP92, pistol, replaces PK9 in UPP use(mostly), integrally suppressed version called NPZ92 for UPP Commandos."
+ - rscadd: "QYJ-72, UPP GPMG, replaces minigun with UPP Minigunners"
+ - rscadd: "Technically resprites but due to changes closer to replaces N-Y revolver with ZHNK-72"
+ - rscadd: "Adds a character custom loadout Type 73, 2 mags spare."
+ - rscadd: "UPP helmets now work as ear protection, intended use with HJRA-12 RPG"
+ - rscadd: "UPP officers now have regular UM4 helmets instead of UH7 helmets in their vendors as UH7 looked ugly with their combat gear"
+ - rscdel: "Removes the PK9 entirely"
+ - rscdel: "Removes tranqs from UPP Commando loadout"
+ - rscdel: "Removes HEAP ammo from UPP officers and commandos, replaced with normal and AP mags when applicable"
+ - balance: "UPP jackets no longer have massive armor, in exchange they no longer slow and in clothing vendors a light version of UPP armor is vendable"
+ - balance: "UPP MPs are now armed with a ZHNK-72 belt on their jacket, with an additional shrapnelshot loader in their belt."
+ - balance: "Rebalances Type 71 damage/firerate/AP to be a sidegrade of M41A, about equal DPS, higher damage per shot and AP, lower fire rate, carbine is round-about the exact same as M41A however."
+ - balance: "Fixes UPP support armor, given to medics on their person and officers in their vendor, lighter version of UPP armor, exchanges protection for speed."
+ - balance: "Seperates SVD bullet damage from crude rifle bullet and buffs it as a hard-hitting AP bullet."
+ - balance: "Rebalances UPP revolver(now ZHNK-72), much harder hitting and has higher AP, but rarer, shrapnelshot extremely rare and good."
+ - balance: "Due to ammo changes, SVD no longer has burst."
+ - balance: "Removes ceramic plates from UPP loadouts"
+ - bugfix: "UPP Major now has the correct UPP Commander skillset"
+ - bugfix: "UPP Commander skillset can BE"
+ - bugfix: "Fixes typepath for UPP support/light armor, actually works now."
+ - spellcheck: "Renames SVD to Type 88"
+ - spellcheck: "Renames UPP Minigunner to UPP Machinegunner"
+ - spellcheck: "Renames UPP jackets to UL4 all around"
+ - soundadd: "Adds firing sounds for Type 73 and SVD/UPP MG"
+ - imageadd: "Resprites the SVD, Type 71, and Type 23, all sprites by wei/esselnek"
+ - imageadd: "Adds sprites for all above guns, all sprites by wei/esselnek"
+ - maptweak: "Changes instances of skorpion to non-upp type 64, also changes instances of ppsh to type 19"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4067.yml b/html/changelogs/AutoChangeLog-pr-4067.yml
deleted file mode 100644
index e0a9e4b383ef..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4067.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - rscadd: "Added a new lockdown system to research."
- - rscadd: "Added an admin button to interact with above."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4131.yml b/html/changelogs/AutoChangeLog-pr-4131.yml
new file mode 100644
index 000000000000..807b4ab3b5cf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4131.yml
@@ -0,0 +1,6 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Telephones can now receive calls from multiple networks."
+ - rscadd: "Adds UPP, CLF and WY prefab phones."
+ - bugfix: "UPP RTO pack is now titled UPP rather than USCM"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4156.yml b/html/changelogs/AutoChangeLog-pr-4156.yml
new file mode 100644
index 000000000000..0c8ec3e3213a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4156.yml
@@ -0,0 +1,5 @@
+author: "Morrow, Frans_Feiffer (beautiful sprites)"
+delete-after: True
+changes:
+ - rscadd: "Added in built HUDs to various helmets"
+ - rscadd: "Sensormates used by squads without medical skills have been converted to buyable helmet optics"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4209.yml b/html/changelogs/AutoChangeLog-pr-4209.yml
deleted file mode 100644
index 1c1d284b371b..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4209.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Huffie56"
-delete-after: True
-changes:
- - bugfix: "add a check before people start the long process of unlock the DS so that people don't waste time."
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml
index 92158fdf3668..1452b4bdaba0 100644
--- a/html/changelogs/archive/2023-08.yml
+++ b/html/changelogs/archive/2023-08.yml
@@ -326,12 +326,10 @@
- balance: M4RA damage buffed by 10%
Zonespace27:
- balance: The M41A, M41Amk1, m39, m46c (iff off), mar-30/40/60, type 71, laser
- uzi, and every SMG now has automatic fire. To compensate for the ability to
- re-aim (unlike burst), the guns fire 20% slower while automatic. This does not
- apply to already-existing automatic weaponry.
+ uzi, and every SMG now has automatic fire.
- balance: The HPR can now fire in full auto when bipodded.
- bugfix: Adding/removing attachments now keeps the current firemode, if possible.
- - bugfix: The dualtube and spec sniper now can switch tubes/toggle laser again
+ - bugfix: The dualtube and spec sniper now can switch tubes/toggle laser again.
- bugfix: Fixed a long-standing exploit with bipods and scopes.
- bugfix: Fixed guns jamming when shooting UI elements.
- bugfix: Fixed a bunch of guns unintentionally having burst.
@@ -339,3 +337,10 @@
realforest2001:
- rscadd: Gave the ASO ability to modify IDs.
- rscdel: Removed this from the QM.
+2023-08-25:
+ Huffie56:
+ - bugfix: add a check before people start the long process of unlock the DS so that
+ people don't waste time.
+ realforest2001:
+ - rscadd: Added a new lockdown system to research.
+ - rscadd: Added an admin button to interact with above.
diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi
index 969016a4a4e5..e4f228109127 100644
Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ
diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi
index 0fb5700225e3..7f78ce119341 100644
Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ
diff --git a/icons/mob/humans/onmob/helmet_garb.dmi b/icons/mob/humans/onmob/helmet_garb.dmi
index 3bb63088783f..325aed72b155 100644
Binary files a/icons/mob/humans/onmob/helmet_garb.dmi and b/icons/mob/humans/onmob/helmet_garb.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi
index d65bcccc02af..75c578316c83 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi
index f9b5350d6a7b..4f98571ff715 100644
Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi
index df588b9b59ca..9f0e15209fe6 100644
Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ
diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi
index e561b5f84548..989a2eb5b9ec 100644
Binary files a/icons/obj/items/clothing/belts.dmi and b/icons/obj/items/clothing/belts.dmi differ
diff --git a/icons/obj/items/clothing/helmet_visors.dmi b/icons/obj/items/clothing/helmet_visors.dmi
new file mode 100644
index 000000000000..6ba0cfe5623e
Binary files /dev/null and b/icons/obj/items/clothing/helmet_visors.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi
index 6d0e08c40623..2adece3b1ab1 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/event.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/event.dmi
index 7328f00f8b3d..868ae1a1211a 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/event.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/event.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi
index a6b212b5f0dc..6f160bbbe7cb 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments.dmi b/icons/obj/items/weapons/guns/attachments.dmi
index 4a879f0d91c0..332217fe1cf0 100644
Binary files a/icons/obj/items/weapons/guns/attachments.dmi and b/icons/obj/items/weapons/guns/attachments.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi
index d040aa85fd5d..aaa591f64a88 100644
Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi
index 8eb95d15770f..330102213689 100644
Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi
index 1e659671c999..caa62ef55605 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/event.dmi b/icons/obj/items/weapons/guns/guns_by_faction/event.dmi
index 3494faec7f7e..4c517b712bb2 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/event.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/event.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi b/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi
index 68919a4b9db4..669efcfc59c4 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi differ
diff --git a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi
index 24cade43454f..0c416b3605e4 100644
Binary files a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi and b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi differ
diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm
index 32259fa72f45..d1b53b3d2bdc 100644
--- a/maps/map_files/BigRed/BigRed.dmm
+++ b/maps/map_files/BigRed/BigRed.dmm
@@ -32114,19 +32114,19 @@
},
/area/bigredv2/caves/mining)
"mmz" = (
-/obj/item/ammo_magazine/pistol/skorpion{
+/obj/item/ammo_magazine/smg/bizon{
pixel_x = 5;
pixel_y = -5
},
-/obj/item/weapon/gun/pistol/skorpion{
+/obj/item/weapon/gun/smg/bizon{
pixel_x = 1;
pixel_y = 11
},
-/obj/item/ammo_magazine/pistol/skorpion{
+/obj/item/ammo_magazine/smg/bizon{
pixel_x = 11;
pixel_y = -3
},
-/obj/item/ammo_magazine/pistol/skorpion,
+/obj/item/ammo_magazine/smg/bizon,
/obj/structure/machinery/light/small{
dir = 8
},
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index d221090da880..023b4094286e 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -24178,9 +24178,9 @@
/area/shiva/exterior/junkyard)
"tJX" = (
/obj/structure/closet/secure_closet/engineering_personal,
-/obj/item/weapon/gun/smg/ppsh,
-/obj/item/ammo_magazine/smg/ppsh,
-/obj/item/ammo_magazine/smg/ppsh,
+/obj/item/weapon/gun/smg/pps43,
+/obj/item/ammo_magazine/smg/pps43,
+/obj/item/ammo_magazine/smg/pps43,
/turf/open/floor/shiva{
dir = 1
},
@@ -27086,9 +27086,9 @@
"wOf" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/structure/machinery/light/double,
-/obj/item/weapon/gun/smg/ppsh,
-/obj/item/ammo_magazine/smg/ppsh,
-/obj/item/ammo_magazine/smg/ppsh,
+/obj/item/weapon/gun/smg/pps43,
+/obj/item/ammo_magazine/smg/pps43,
+/obj/item/ammo_magazine/smg/pps43,
/turf/open/floor/shiva{
dir = 1
},
diff --git a/maps/map_files/LV624/standalone/clfship.dmm b/maps/map_files/LV624/standalone/clfship.dmm
index 362eef00fd21..e69c2de5bcb8 100644
--- a/maps/map_files/LV624/standalone/clfship.dmm
+++ b/maps/map_files/LV624/standalone/clfship.dmm
@@ -161,9 +161,7 @@
},
/area/lv624/lazarus/crashed_ship)
"fA" = (
-/obj/structure/transmitter/colony_net{
- network_receive = "CLF";
- networks_transmit = list("CLF");
+/obj/structure/transmitter/clf_net{
phone_category = "CR-116";
phone_id = "Armoury";
pixel_y = 32
@@ -666,9 +664,7 @@
"sI" = (
/obj/structure/surface/table/reinforced/prison,
/obj/effect/spawner/random/toolbox,
-/obj/structure/transmitter/colony_net/rotary{
- network_receive = "CLF";
- networks_transmit = list("CLF");
+/obj/structure/transmitter/clf_net/rotary{
phone_category = "CR-116";
phone_color = "yellow";
phone_id = "Engineering"
@@ -1661,9 +1657,7 @@
/area/lv624/lazarus/crashed_ship)
"Qj" = (
/obj/structure/machinery/body_scanconsole,
-/obj/structure/transmitter/colony_net{
- network_receive = "CLF";
- networks_transmit = list("CLF");
+/obj/structure/transmitter/clf_net{
phone_category = "CR-116";
phone_color = "green";
phone_id = "Medical Bay";
@@ -1993,9 +1987,7 @@
},
/area/lv624/lazarus/crashed_ship)
"XM" = (
-/obj/structure/transmitter/colony_net{
- network_receive = "CLF";
- networks_transmit = list("CLF");
+/obj/structure/transmitter/clf_net{
phone_category = "CR-116";
phone_id = "Cargo Bay";
pixel_y = 32
diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
index c43a02dddf12..8ee54d9cc1df 100644
--- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
+++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
@@ -1474,7 +1474,7 @@
},
/area/strata/ug/interior/jungle/deep/structures/res)
"aem" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/auto_turf/snow/brown_base/layer0,
/area/strata/ag/interior/outpost/gen/bball/nest)
@@ -1552,7 +1552,7 @@
/area/strata/ug/interior/jungle/deep/minehead)
"aeA" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -4302,7 +4302,7 @@
/area/strata/ag/exterior/paths/cabin_area)
"amy" = (
/obj/effect/decal/strata_decals/catwalk/prison,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/greengrid,
/area/strata/ag/exterior/research_decks)
"amz" = (
@@ -7015,7 +7015,7 @@
},
/area/strata/ag/interior/outpost/canteen/lower_cafeteria)
"auS" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/structure/pipes/standard/manifold/hidden/cyan{
dir = 1
},
@@ -9161,7 +9161,7 @@
"aBr" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/storage/pouch/flare/full,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
icon_state = "orange_tile"
@@ -14758,7 +14758,7 @@
/turf/open/floor/strata,
/area/strata/ag/exterior/research_decks)
"aTo" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/strata,
/area/strata/ag/exterior/research_decks)
"aTp" = (
@@ -20782,7 +20782,7 @@
/turf/open/auto_turf/snow/brown_base/layer0,
/area/strata/ag/exterior/paths/southresearch)
"bpt" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/auto_turf/snow/brown_base/layer0,
/area/strata/ag/exterior/paths/southresearch)
@@ -22040,7 +22040,7 @@
"buh" = (
/obj/structure/surface/rack,
/obj/item/tool/shovel/etool/folded,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/item/attachable/bayonet/upp,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/prison{
@@ -26680,7 +26680,7 @@
},
/area/strata/ag/interior/outpost/canteen)
"caT" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/interior/outpost/gen/bball/nest)
@@ -27006,7 +27006,7 @@
/area/strata/ag/interior/outpost/security)
"cdf" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -28839,7 +28839,7 @@
/turf/closed/wall/strata_ice/jungle,
/area/strata/ug/interior/jungle/deep/east_dorms)
"cph" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/auto_turf/ice/layer1,
@@ -30696,7 +30696,7 @@
/area/strata/ag/exterior/marsh/center)
"enQ" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -33594,7 +33594,7 @@
"jhu" = (
/obj/structure/surface/rack,
/obj/item/tool/shovel/etool/folded,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/item/attachable/bayonet/upp,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
@@ -33761,7 +33761,7 @@
/area/strata/ag/interior/mountain)
"jwS" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/item/handcuffs,
/turf/open/floor/strata{
icon_state = "red1"
@@ -39250,7 +39250,7 @@
},
/area/strata/ag/interior/dorms)
"sWr" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/auto_turf/strata_grass/layer1,
/area/strata/ug/interior/jungle/deep/east_engi)
@@ -40868,7 +40868,7 @@
},
/area/strata/ug/interior/jungle/deep/structures/engi)
"vsG" = (
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/auto_turf/strata_grass/layer1,
/area/strata/ug/interior/jungle/deep/east_engi)
"vsL" = (
@@ -41076,7 +41076,7 @@
/obj/structure/mirror{
pixel_x = -29
},
-/obj/item/weapon/gun/pistol/c99,
+/obj/item/weapon/gun/pistol/t73,
/turf/open/floor/strata{
dir = 8;
icon_state = "white_cyan2"
diff --git a/sound/weapons/gun_mg.ogg b/sound/weapons/gun_mg.ogg
new file mode 100644
index 000000000000..9741526d31b0
Binary files /dev/null and b/sound/weapons/gun_mg.ogg differ
diff --git a/sound/weapons/gun_tt.ogg b/sound/weapons/gun_tt.ogg
new file mode 100644
index 000000000000..e55663329860
Binary files /dev/null and b/sound/weapons/gun_tt.ogg differ