diff --git a/code/__DEFINES/stats.dm b/code/__DEFINES/stats.dm
index 1810d01e1d..bc7cbfc4a4 100644
--- a/code/__DEFINES/stats.dm
+++ b/code/__DEFINES/stats.dm
@@ -8,7 +8,11 @@
#define FACEHUG_TIER_3 100
#define FACEHUG_TIER_4 1000
+/// Consecutive rounds this player has readied up and failed to get a slot.
+#define PLAYER_STAT_UNASSIGNED_ROUND_STREAK "unassigned_round_streak"
+
// Stat Categories
#define STAT_CATEGORY_MARINE "marine"
#define STAT_CATEGORY_XENO "xeno"
#define STAT_CATEGORY_YAUTJA "yautja"
+#define STAT_CATEGORY_MISC "misc"
diff --git a/code/__DEFINES/strippable.dm b/code/__DEFINES/strippable.dm
new file mode 100644
index 0000000000..f62c4d6c1b
--- /dev/null
+++ b/code/__DEFINES/strippable.dm
@@ -0,0 +1,30 @@
+// All of these must be matched in StripMenu.js.
+#define STRIPPABLE_ITEM_HEAD "head"
+#define STRIPPABLE_ITEM_BACK "back"
+#define STRIPPABLE_ITEM_MASK "wear_mask"
+#define STRIPPABLE_ITEM_EYES "glasses"
+#define STRIPPABLE_ITEM_L_EAR "wear_l_ear"
+#define STRIPPABLE_ITEM_R_EAR "wear_r_ear"
+#define STRIPPABLE_ITEM_JUMPSUIT "w_uniform"
+#define STRIPPABLE_ITEM_SUIT "wear_suit"
+#define STRIPPABLE_ITEM_GLOVES "gloves"
+#define STRIPPABLE_ITEM_FEET "shoes"
+#define STRIPPABLE_ITEM_SUIT_STORAGE "j_store"
+#define STRIPPABLE_ITEM_ID "id"
+#define STRIPPABLE_ITEM_BELT "belt"
+#define STRIPPABLE_ITEM_LPOCKET "l_store"
+#define STRIPPABLE_ITEM_RPOCKET "r_store"
+#define STRIPPABLE_ITEM_LHAND "l_hand"
+#define STRIPPABLE_ITEM_RHAND "r_hand"
+#define STRIPPABLE_ITEM_HANDCUFFS "handcuffs"
+#define STRIPPABLE_ITEM_LEGCUFFS "legcuffs"
+
+
+/// This slot is not obscured.
+#define STRIPPABLE_OBSCURING_NONE 0
+
+/// This slot is completely obscured, and cannot be accessed.
+#define STRIPPABLE_OBSCURING_COMPLETELY 1
+
+/// This slot can't be seen, but can be accessed.
+#define STRIPPABLE_OBSCURING_HIDDEN 2
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index fe15e6d84c..ff63e33beb 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -143,6 +143,43 @@
return null
+/**
+ * Shuffles a provided list based on the weight of each element.
+ *
+ * Higher weight elements have a higher probability of being picked and tend to appear earlier in the list.
+ * Unweighted elements are never picked and are discarded.
+ *
+ * Arguments:
+ * * list_to_pick - assoc list in the form of: element = weight
+ *
+ * Returns list of shuffled weighted elements
+ */
+/proc/shuffle_weight(list/list_to_pick)
+ list_to_pick = list_to_pick.Copy() //not inplace
+
+ var/total_weight = 0
+ for(var/item in list_to_pick)
+ if(list_to_pick[item])
+ total_weight += list_to_pick[item]
+ else
+ list_to_pick -= item //discard unweighted
+
+ var/list_to_return = list()
+
+ while(length(list_to_pick))
+ var/target_weight = rand(1, total_weight)
+ for(var/item in list_to_pick)
+ var/item_weight = list_to_pick[item]
+ target_weight -= item_weight
+
+ if(target_weight <= 0)
+ list_to_return += item
+ list_to_pick -= item
+ total_weight -= item_weight
+ break
+
+ return list_to_return
+
/**
* Removes any null entries from the list
* Returns TRUE if the list had nulls, FALSE otherwise
diff --git a/code/_macros.dm b/code/_macros.dm
index 6c1f37b4bc..0e85827bc0 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -67,6 +67,11 @@
#define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; }
///Accesses an associative list, returns null if nothing is found
#define LAZYACCESSASSOC(L, I, K) L ? L[I] ? L[I][K] ? L[I][K] : null : null : null
+///Performs an insertion on the given lazy list with the given key and value. If the value already exists, a new one will not be made.
+#define LAZYORASSOCLIST(lazy_list, key, value) \
+ LAZYINITLIST(lazy_list); \
+ LAZYINITLIST(lazy_list[key]); \
+ lazy_list[key] |= value;
// Insert an object A into a sorted list using cmp_proc (/code/_helpers/cmp.dm) for comparison.
#define ADD_SORTED(list, A, cmp_proc) if(!list.len) {list.Add(A)} else {list.Insert(FindElementIndex(A, list, cmp_proc), A)}
diff --git a/code/_onclick/click_hold.dm b/code/_onclick/click_hold.dm
index 996f7ed2bf..e972821615 100644
--- a/code/_onclick/click_hold.dm
+++ b/code/_onclick/click_hold.dm
@@ -97,9 +97,8 @@
/client/MouseDrop(datum/over_object, datum/src_location, over_location, src_control, over_control, params)
. = ..()
+ if(over_object)
+ SEND_SIGNAL(over_object, COMSIG_ATOM_DROP_ON, src_location, src)
if(src_location)
SEND_SIGNAL(src_location, COMSIG_ATOM_DROPPED_ON, over_object, src)
-
- if(over_object)
- SEND_SIGNAL(over_object, COMSIG_ATOM_DROP_ON, src_location, src)
diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm
index fff5e9200d..4dcc0d6468 100644
--- a/code/_onclick/drag_drop.dm
+++ b/code/_onclick/drag_drop.dm
@@ -7,6 +7,7 @@
*/
/atom/MouseDrop(atom/over)
if(!usr || !over) return
+
if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows
spawn(0)
diff --git a/code/controllers/subsystem/item_cleanup.dm b/code/controllers/subsystem/item_cleanup.dm
index 35d1fc2859..f23422329b 100644
--- a/code/controllers/subsystem/item_cleanup.dm
+++ b/code/controllers/subsystem/item_cleanup.dm
@@ -3,7 +3,7 @@ var/global/list/item_cleanup_list = list()
SUBSYSTEM_DEF(item_cleanup)
name = "Item Cleanup"
wait = 10 MINUTES //should be adjusted for WO
- var/start_processing_time = 35 MINUTES //should be adjusted for WO
+ var/start_processing_time = INFINITY //should be adjusted for WO
var/percentage_of_garbage_to_delete = 0.5 //should be adjusted for WO
//We keep a separate, private list
//So we don't get instant deletions of items
diff --git a/code/controllers/subsystem/xeno_ai.dm b/code/controllers/subsystem/xeno_ai.dm
index 9cd608f211..6f22d17e42 100644
--- a/code/controllers/subsystem/xeno_ai.dm
+++ b/code/controllers/subsystem/xeno_ai.dm
@@ -11,6 +11,43 @@ SUBSYSTEM_DEF(xeno_ai)
var/ai_kill = FALSE
+ //currently the only caste that has an actual targeting difference is facehugger
+ /// Assoc list of valid targets by hive & caste, in the form of: hive = (/caste = targets)
+ var/list/target_cache = list()
+
+/datum/controller/subsystem/xeno_ai/proc/get_valid_targets(mob/living/carbon/xenomorph/xeno)
+ var/datum/hive_status/hive = xeno.hive
+ LAZYINITLIST(target_cache[hive])
+
+ var/caste = xeno.type
+ if(target_cache[hive][caste])
+ return target_cache[hive][caste]
+
+ var/list/valid_targets = list()
+ target_cache[hive][caste] = valid_targets
+
+ for(var/mob/living/carbon/potential_target in GLOB.alive_mob_list)
+ if(!potential_target.ai_can_target(xeno))
+ continue
+
+ valid_targets += potential_target
+
+ for(var/obj/vehicle/multitile/potential_vehicle_target as anything in GLOB.all_multi_vehicles)
+ if(potential_vehicle_target.health <= 0)
+ continue
+
+ if(hive.faction_is_ally(potential_vehicle_target.vehicle_faction))
+ continue
+
+ if(!length(valid_targets & potential_vehicle_target.interior.get_passengers()))
+ continue
+
+ valid_targets += potential_vehicle_target
+
+ valid_targets += GLOB.all_active_defenses
+
+ return valid_targets
+
/datum/controller/subsystem/xeno_ai/stat_entry(msg)
msg = "P:[length(ai_mobs)]"
return ..()
@@ -26,6 +63,10 @@ SUBSYSTEM_DEF(xeno_ai)
message_admins("[key_name_admin(usr)] [SSxeno_ai.ai_kill? "killed" : "revived"] all xeno AI.")
/datum/controller/subsystem/xeno_ai/fire(resumed = FALSE)
+ for(var/datum/hive_status/hive as anything in target_cache)
+ for(var/caste as anything in target_cache[hive])
+ target_cache[hive][caste] = null
+
if(ai_kill)
return
diff --git a/code/datums/ammo/bullet/pistol.dm b/code/datums/ammo/bullet/pistol.dm
index 3ce778bb1f..d4bdbc3ae4 100644
--- a/code/datums/ammo/bullet/pistol.dm
+++ b/code/datums/ammo/bullet/pistol.dm
@@ -100,7 +100,7 @@
headshot_state = HEADSHOT_OVERLAY_MEDIUM
accuracy = HIT_ACCURACY_TIER_3
accuracy_var_low = PROJECTILE_VARIANCE_TIER_6
- damage = 55
+ damage = 45
penetration = ARMOR_PENETRATION_TIER_3
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
diff --git a/code/datums/ammo/bullet/shotgun.dm b/code/datums/ammo/bullet/shotgun.dm
index cf13fb9b01..b2bbf607ce 100644
--- a/code/datums/ammo/bullet/shotgun.dm
+++ b/code/datums/ammo/bullet/shotgun.dm
@@ -11,28 +11,30 @@
name = "shotgun slug"
handful_state = "slug_shell"
- accurate_range = 6
- max_range = 8
- damage = 70
- penetration = ARMOR_PENETRATION_TIER_4
+ accurate_range = 7
+ max_range = 14
+ damage = 90
+ penetration = ARMOR_PENETRATION_TIER_6
+ damage_var_low = PROJECTILE_VARIANCE_TIER_10
+ damage_var_high = PROJECTILE_VARIANCE_TIER_1
damage_armor_punch = 2
handful_state = "slug_shell"
/datum/ammo/bullet/shotgun/slug/on_hit_mob(mob/M,obj/projectile/P)
- knockback(M, P, 6)
+ knockback(M, P, 8)
/datum/ammo/bullet/shotgun/slug/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
if(iscarbonsizexeno(living_mob))
var/mob/living/carbon/xenomorph/target = living_mob
to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
- target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues
- target.Stun(0.5)
- target.apply_effect(1, SUPERSLOW)
- target.apply_effect(3, SLOW)
+ target.KnockDown(3.5)
+ target.Stun(3.5)
+ target.Slow(5)
else
if(!isyautja(living_mob)) //Not predators.
- living_mob.apply_effect(1, SUPERSLOW)
- living_mob.apply_effect(2, SLOW)
+ living_mob.KnockDown(2)
+ living_mob.Stun(2)
+ living_mob.Superslow(5)
to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
@@ -42,11 +44,9 @@
handful_state = "beanbag_slug"
icon_state = "beanbag"
flags_ammo_behavior = AMMO_BALLISTIC|AMMO_IGNORE_RESIST
- sound_override = 'sound/weapons/gun_shotgun_riot.ogg'
-
max_range = 12
shrapnel_chance = 0
- damage = 0
+ damage = 20
stamina_damage = 45
accuracy = HIT_ACCURACY_TIER_3
shell_speed = AMMO_SPEED_TIER_3
@@ -127,19 +127,36 @@
accuracy_var_low = PROJECTILE_VARIANCE_TIER_5
accuracy_var_high = PROJECTILE_VARIANCE_TIER_5
- accurate_range = 4
- max_range = 4
- damage = 65
- damage_var_low = PROJECTILE_VARIANCE_TIER_8
- damage_var_high = PROJECTILE_VARIANCE_TIER_8
+ accurate_range = 7
+ max_range = 9
+ damage = 50
+ damage_var_low = PROJECTILE_VARIANCE_TIER_10
+ damage_var_high = PROJECTILE_VARIANCE_TIER_1
penetration = ARMOR_PENETRATION_TIER_1
- bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_3
+ bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_7
shell_speed = AMMO_SPEED_TIER_2
damage_armor_punch = 0
pen_armor_punch = 0
handful_state = "buckshot_shell"
multiple_handful_name = TRUE
+/datum/ammo/bullet/shotgun/buckshot/on_hit_mob(mob/M,obj/projectile/P)
+ knockback(M, P, 4)
+/datum/ammo/bullet/shotgun/buckshot/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(iscarbonsizexeno(living_mob))
+ var/mob/living/carbon/xenomorph/target = living_mob
+ to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
+ target.KnockDown(2.5)
+ target.Stun(2.5)
+ target.Slow(4)
+ else
+ if(!isyautja(living_mob)) //Not predators.
+ living_mob.KnockDown(3)
+ living_mob.Stun(3)
+ living_mob.Slow(5)
+ to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
+ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
+
/datum/ammo/bullet/shotgun/buckshot/incendiary
name = "incendiary buckshot shell"
handful_state = "incen_buckshot"
@@ -178,8 +195,8 @@
accuracy_var_low = PROJECTILE_VARIANCE_TIER_6
accuracy_var_high = PROJECTILE_VARIANCE_TIER_6
accurate_range = 4
- max_range = 4
- damage = 65
+ max_range = 6
+ damage = 50
damage_var_low = PROJECTILE_VARIANCE_TIER_8
damage_var_high = PROJECTILE_VARIANCE_TIER_8
penetration = ARMOR_PENETRATION_TIER_1
@@ -191,6 +208,23 @@
/datum/ammo/bullet/shotgun/spread/masterkey
damage = 20
+/datum/ammo/bullet/shotgun/spread/on_hit_mob(mob/M,obj/projectile/P)
+ knockback(M, P, 4)
+/datum/ammo/bullet/shotgun/spread/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(iscarbonsizexeno(living_mob))
+ var/mob/living/carbon/xenomorph/target = living_mob
+ to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
+ target.KnockDown(2.5)
+ target.Stun(2.5)
+ target.Slow(4)
+ else
+ if(!isyautja(living_mob)) //Not predators.
+ living_mob.KnockDown(3)
+ living_mob.Stun(3)
+ living_mob.Slow(5)
+ to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
+ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
+
/datum/ammo/bullet/shotgun/spread/special
name = "additional buckshot, USCM special type"
@@ -209,24 +243,53 @@
handful_state = "heavy_buckshot"
multiple_handful_name = TRUE
bonus_projectiles_type = /datum/ammo/bullet/shotgun/heavy/buckshot/spread
- bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_3
- accurate_range = 3
- max_range = 3
+ bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_8
+ accurate_range = 8
+ max_range = 10
damage = 75
- penetration = 0
+ penetration = ARMOR_PENETRATION_TIER_2
shell_speed = AMMO_SPEED_TIER_2
damage_armor_punch = 0
pen_armor_punch = 0
/datum/ammo/bullet/shotgun/heavy/buckshot/on_hit_mob(mob/M,obj/projectile/P)
- knockback(M,P)
+ knockback(M,P,5)
+/datum/ammo/bullet/shotgun/heavy/buckshot/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(iscarbonsizexeno(living_mob))
+ var/mob/living/carbon/xenomorph/target = living_mob
+ to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
+ target.KnockDown(5)
+ target.Stun(5)
+ target.Slow(8)
+ else
+ if(!isyautja(living_mob)) //Not predators.
+ living_mob.KnockDown(2)
+ living_mob.Stun(2)
+ living_mob.Slow(6)
+ to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
+ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
/datum/ammo/bullet/shotgun/heavy/buckshot/spread
name = "additional heavy buckshot"
- max_range = 4
+ max_range = 7
scatter = SCATTER_AMOUNT_TIER_1
bonus_projectiles_amount = 0
+/datum/ammo/bullet/shotgun/heavy/buckshot/spread/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(iscarbonsizexeno(living_mob))
+ var/mob/living/carbon/xenomorph/target = living_mob
+ to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
+ target.KnockDown(5)
+ target.Stun(5)
+ target.Slow(8)
+ else
+ if(!isyautja(living_mob)) //Not predators.
+ living_mob.KnockDown(2)
+ living_mob.Stun(2)
+ living_mob.Slow(6)
+ to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
+ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
+
/datum/ammo/bullet/shotgun/heavy/buckshot/special
bonus_projectiles_type = /datum/ammo/bullet/shotgun/heavy/buckshot/spread/special
bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_8
@@ -251,8 +314,8 @@
multiple_handful_name = TRUE
damage_type = BURN
damage = 60
- accurate_range = 3
- max_range = 4
+ accurate_range = 4
+ max_range = 6
bonus_projectiles_type = /datum/ammo/bullet/shotgun/heavy/buckshot/dragonsbreath/spread
/datum/ammo/bullet/shotgun/heavy/buckshot/dragonsbreath/set_bullet_traits()
@@ -264,9 +327,7 @@
/datum/ammo/bullet/shotgun/heavy/buckshot/dragonsbreath/spread
name = "additional dragon's breath"
bonus_projectiles_amount = 0
- accurate_range = 4
- max_range = 5 //make use of the ablaze property
- shell_speed = AMMO_SPEED_TIER_4 // so they hit before the main shell stuns
+ shell_speed = AMMO_SPEED_TIER_4
/datum/ammo/bullet/shotgun/heavy/slug
@@ -274,26 +335,26 @@
handful_state = "heavy_slug"
accurate_range = 7
- max_range = 8
- damage = 90 //ouch.
- penetration = ARMOR_PENETRATION_TIER_6
+ max_range = 17
+ damage = 120 //ouch.
+ penetration = ARMOR_PENETRATION_TIER_9
damage_armor_punch = 2
/datum/ammo/bullet/shotgun/heavy/slug/on_hit_mob(mob/M,obj/projectile/P)
- knockback(M, P, 7)
+ knockback(M, P, 8)
/datum/ammo/bullet/shotgun/heavy/slug/knockback_effects(mob/living/living_mob, obj/projectile/fired_projectile)
if(iscarbonsizexeno(living_mob))
var/mob/living/carbon/xenomorph/target = living_mob
to_chat(target, SPAN_XENODANGER("You are shaken and slowed by the sudden impact!"))
- target.KnockDown(0.5) // If you ask me the KD should be left out, but players like their visual cues
- target.Stun(0.5)
- target.apply_effect(2, SUPERSLOW)
- target.apply_effect(5, SLOW)
+ target.KnockDown(7)
+ target.Stun(7)
+ target.Slow(10)
else
if(!isyautja(living_mob)) //Not predators.
- living_mob.apply_effect(1, SUPERSLOW)
- living_mob.apply_effect(2, SLOW)
+ living_mob.KnockDown(8)
+ living_mob.Stun(8)
+ living_mob.Superslow(15)
to_chat(living_mob, SPAN_HIGHDANGER("The impact knocks you off-balance!"))
living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
@@ -303,14 +364,13 @@
headshot_state = HEADSHOT_OVERLAY_MEDIUM
handful_state = "heavy_beanbag"
flags_ammo_behavior = AMMO_BALLISTIC|AMMO_IGNORE_RESIST
- sound_override = 'sound/weapons/gun_shotgun_riot.ogg'
max_range = 7
shrapnel_chance = 0
- damage = 0
+ damage = 25
stamina_damage = 100
- accuracy = HIT_ACCURACY_TIER_2
- shell_speed = AMMO_SPEED_TIER_2
+ accuracy = HIT_ACCURACY_TIER_6
+ shell_speed = 3
/datum/ammo/bullet/shotgun/heavy/beanbag/on_hit_mob(mob/M, obj/projectile/P)
if(!M || M == P.firer)
diff --git a/code/datums/ammo/bullet/sniper.dm b/code/datums/ammo/bullet/sniper.dm
index 5f888efb1d..d8d751ca40 100644
--- a/code/datums/ammo/bullet/sniper.dm
+++ b/code/datums/ammo/bullet/sniper.dm
@@ -128,7 +128,7 @@
/datum/ammo/bullet/sniper/anti_materiel/vulture
damage = 400 // Fully intended to vaporize anything smaller than a mini cooper
- accurate_range_min = 10
+ accurate_range_min = 0
handful_state = "vulture_bullet"
sound_hit = 'sound/bullets/bullet_vulture_impact.ogg'
flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SNIPER|AMMO_IGNORE_COVER|AMMO_ANTIVEHICLE
diff --git a/code/datums/components/xeno/ai_behavior_overrides/capture_override_behavior.dm b/code/datums/components/xeno/ai_behavior_overrides/capture_override_behavior.dm
index 96eaa7d8fb..1f84842e54 100644
--- a/code/datums/components/xeno/ai_behavior_overrides/capture_override_behavior.dm
+++ b/code/datums/components/xeno/ai_behavior_overrides/capture_override_behavior.dm
@@ -22,7 +22,7 @@
if(isfacehugger(checked_xeno))
return FALSE
- var/mob/parent_mob = parent
+ var/mob/living/parent_mob = parent
var/captee_stat = parent_mob.stat
var/mob/pulledby = parent_mob.pulledby
@@ -45,7 +45,7 @@
if(distance > 10)
return FALSE
- if(captee_stat == CONSCIOUS)
+ if(captee_stat == CONSCIOUS && !(locate(/datum/effects/crit) in parent_mob.effects_list))
return FALSE
if(isxeno(pulledby) && pulledby != checked_xeno)
diff --git a/code/datums/effects/mob_crit/human_crit.dm b/code/datums/effects/mob_crit/human_crit.dm
index ff4d0eeda0..8b25b2bc2a 100644
--- a/code/datums/effects/mob_crit/human_crit.dm
+++ b/code/datums/effects/mob_crit/human_crit.dm
@@ -8,7 +8,8 @@
qdel(src)
return FALSE
- affected_mob.apply_effect(3, PARALYZE)
+ affected_mob.KnockDown(3)
+ affected_mob.Stun(3)
if(!affected_mob.reagents || !affected_mob.reagents.has_reagent("inaprovaline"))
affected_mob.apply_damage(1, OXY)
diff --git a/code/datums/effects/pain/human_pain.dm b/code/datums/effects/pain/human_pain.dm
index 9c8070596b..bddd793077 100644
--- a/code/datums/effects/pain/human_pain.dm
+++ b/code/datums/effects/pain/human_pain.dm
@@ -58,7 +58,8 @@
var/mob/living/carbon/affected_mob = affected_atom
if(do_once)
- affected_mob.apply_effect(3, PARALYZE)
+ affected_mob.KnockDown(3)
+ affected_mob.Stun(3)
do_once = FALSE
affected_mob.EyeBlur(2)
@@ -83,7 +84,8 @@
affected_mob.EyeBlur(2)
if(affected_mob.pain && affected_mob.pain.feels_pain)
affected_mob.TalkStutter(2)
- affected_mob.apply_effect(2, PARALYZE)
+ affected_mob.KnockDown(2)
+ affected_mob.Stun(2)
if(!affected_mob.reagents || !affected_mob.reagents.has_reagent("inaprovaline"))
affected_mob.apply_damage(0.5, OXY)
diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm
new file mode 100644
index 0000000000..e0daaee74a
--- /dev/null
+++ b/code/datums/elements/strippable.dm
@@ -0,0 +1,536 @@
+/// An element for atoms that, when dragged and dropped onto a mob, opens a strip panel.
+/datum/element/strippable
+ element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH
+ id_arg_index = 2
+
+ /// An assoc list of keys to /datum/strippable_item
+ var/list/items
+
+ /// A proc path that returns TRUE/FALSE if we should show the strip panel for this entity.
+ /// If it does not exist, the strip menu will always show.
+ /// Will be called with (mob/user).
+ var/should_strip_proc_path
+
+ /// An existing strip menus
+ var/list/strip_menus
+
+/datum/element/strippable/Attach(datum/target, list/items, should_strip_proc_path)
+ . = ..()
+ if (!isatom(target))
+ return ELEMENT_INCOMPATIBLE
+
+ RegisterSignal(target, COMSIG_ATOM_DROP_ON, PROC_REF(mouse_drop_onto))
+
+ src.items = items
+ src.should_strip_proc_path = should_strip_proc_path
+
+/datum/element/strippable/Detach(datum/source, force)
+ . = ..()
+
+ UnregisterSignal(source, COMSIG_ATOM_DROP_ON)
+
+ if (!isnull(strip_menus))
+ QDEL_NULL(strip_menus[source])
+
+/datum/element/strippable/proc/mouse_drop_onto(datum/source, atom/over, mob/user)
+ SIGNAL_HANDLER
+ if (user == source)
+ return
+
+ if (over == source)
+ return
+
+ var/mob/overmob = over
+ if (!ishuman(overmob))
+ return
+
+ if (!overmob.Adjacent(source))
+ return
+
+ if (!overmob.client)
+ return
+
+ if (overmob.client != user)
+ return
+
+ if (!isnull(should_strip_proc_path) && !call(source, should_strip_proc_path)(overmob))
+ return
+
+ var/datum/strip_menu/strip_menu
+
+ if (isnull(strip_menu))
+ strip_menu = new(source, src)
+ LAZYSET(strip_menus, source, strip_menu)
+
+ INVOKE_ASYNC(strip_menu, PROC_REF(tgui_interact), overmob)
+
+/// A representation of an item that can be stripped down
+/datum/strippable_item
+ /// The STRIPPABLE_ITEM_* key
+ var/key
+
+ /// Should we warn about dangerous clothing?
+ var/warn_dangerous_clothing = TRUE
+
+/// Gets the item from the given source.
+/datum/strippable_item/proc/get_item(atom/source)
+
+/// Tries to equip the item onto the given source.
+/// Returns TRUE/FALSE depending on if it is allowed.
+/// This should be used for checking if an item CAN be equipped.
+/// It should not perform the equipping itself.
+/datum/strippable_item/proc/try_equip(atom/source, obj/item/equipping, mob/user)
+ if ((equipping.flags_item & ITEM_ABSTRACT))
+ return FALSE
+ if ((equipping.flags_item & NODROP))
+ to_chat(user, SPAN_WARNING("You can't put [equipping] on [source], it's stuck to your hand!"))
+ return FALSE
+ if (ishuman(source))
+ var/mob/living/carbon/human/sourcehuman = source
+ if(HAS_TRAIT(sourcehuman, TRAIT_UNSTRIPPABLE) && !sourcehuman.is_mob_incapacitated())
+ to_chat(src, SPAN_DANGER("[sourcehuman] is too strong to force [equipping] onto them!"))
+ return
+ return TRUE
+
+/// Start the equipping process. This is the proc you should yield in.
+/// Returns TRUE/FALSE depending on if it is allowed.
+/datum/strippable_item/proc/start_equip(atom/source, obj/item/equipping, mob/user)
+ source.visible_message(
+ SPAN_NOTICE("[user] tries to put [equipping] on [source]."),
+ SPAN_NOTICE("[user] tries to put [equipping] on you.")
+ )
+
+ if (ismob(source))
+ var/mob/sourcemob = source
+ sourcemob.attack_log += text("\[[time_stamp()]\] [key_name(sourcemob)] is having [equipping] put on them by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] [key_name(user)] is putting [equipping] on [key_name(sourcemob)]")
+
+ return TRUE
+
+/// The proc that places the item on the source. This should not yield.
+/datum/strippable_item/proc/finish_equip(atom/source, obj/item/equipping, mob/user)
+ SHOULD_NOT_SLEEP(TRUE)
+
+/// Tries to unequip the item from the given source.
+/// Returns TRUE/FALSE depending on if it is allowed.
+/// This should be used for checking if it CAN be unequipped.
+/// It should not perform the unequipping itself.
+/datum/strippable_item/proc/try_unequip(atom/source, mob/user)
+ SHOULD_NOT_SLEEP(TRUE)
+
+ var/obj/item/item = get_item(source)
+ if (isnull(item))
+ return FALSE
+
+ if (user.action_busy && !skillcheck(user, SKILL_POLICE, SKILL_POLICE_SKILLED))
+ to_chat(user, SPAN_WARNING("You can't do this right now."))
+ return FALSE
+
+ if ((item.flags_inventory & CANTSTRIP) || ((item.flags_item & NODROP) && !(item.flags_item & FORCEDROP_CONDITIONAL)) || (item.flags_item & ITEM_ABSTRACT))
+ return FALSE
+
+ if (ishuman(source))
+ var/mob/living/carbon/human/sourcehuman = source
+ if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (sourcehuman.stat == DEAD || sourcehuman.health < HEALTH_THRESHOLD_CRIT) && !sourcehuman.get_target_lock(user.faction_group))
+ to_chat(user, SPAN_WARNING("You can't strip items of a crit or dead member of another faction!"))
+ return FALSE
+
+ if(HAS_TRAIT(sourcehuman, TRAIT_UNSTRIPPABLE) && !sourcehuman.is_mob_incapacitated())
+ to_chat(src, SPAN_DANGER("[sourcehuman] has an unbreakable grip on their equipment!"))
+ return
+
+ return TRUE
+
+/// Start the unequipping process. This is the proc you should yield in.
+/// Returns TRUE/FALSE depending on if it is allowed.
+/datum/strippable_item/proc/start_unequip(atom/source, mob/user)
+ var/obj/item/item = get_item(source)
+ if (isnull(item))
+ return FALSE
+
+ source.visible_message(
+ SPAN_WARNING("[user] tries to remove [source]'s [item]."),
+ SPAN_DANGER("[user] tries to remove your [item].")
+ )
+
+ if (ismob(source))
+ var/mob/sourcemob = source
+ sourcemob.attack_log += text("\[[time_stamp()]\] [key_name(sourcemob)] is being stripped of [item] by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] [key_name(user)] is stripping [key_name(sourcemob)] of [item]")
+
+ item.add_fingerprint(user)
+
+ return TRUE
+
+/// The proc that unequips the item from the source. This should not yield.
+/datum/strippable_item/proc/finish_unequip(atom/source, mob/user)
+
+/// Returns a STRIPPABLE_OBSCURING_* define to report on whether or not this is obscured.
+/datum/strippable_item/proc/get_obscuring(atom/source)
+ SHOULD_NOT_SLEEP(TRUE)
+ return STRIPPABLE_OBSCURING_NONE
+
+/// Returns the ID of this item's strippable action.
+/// Return `null` if there is no alternate action.
+/// Any return value of this must be in StripMenu.
+/datum/strippable_item/proc/get_alternate_action(atom/source, mob/user)
+ return null
+
+/// Performs an alternative action on this strippable_item.
+/// `has_alternate_action` needs to be TRUE.
+/datum/strippable_item/proc/alternate_action(atom/source, mob/user)
+
+/// Returns whether or not this item should show.
+/datum/strippable_item/proc/should_show(atom/source, mob/user)
+ return TRUE
+
+/// A preset for equipping items onto mob slots
+/datum/strippable_item/mob_item_slot
+ /// The ITEM_SLOT_* to equip to.
+ var/item_slot
+
+/datum/strippable_item/proc/has_no_item_alt_action()
+ return FALSE
+
+/datum/strippable_item/mob_item_slot/get_item(atom/source)
+ if (!ismob(source))
+ return null
+
+ var/mob/mob_source = source
+ return mob_source.get_item_by_slot(key)
+
+/datum/strippable_item/mob_item_slot/try_equip(atom/source, obj/item/equipping, mob/user)
+ . = ..()
+ if (!.)
+ return
+
+ if (!ismob(source))
+ return FALSE
+ if (user.action_busy)
+ to_chat(user, SPAN_WARNING("You can't do this right now."))
+ return FALSE
+ if (!equipping.mob_can_equip(
+ source,
+ key
+ ))
+ to_chat(user, SPAN_WARNING("\The [equipping] doesn't fit in that place!"))
+ return FALSE
+ if(equipping.flags_item & WIELDED)
+ equipping.unwield(user)
+ return TRUE
+
+/datum/strippable_item/mob_item_slot/start_equip(atom/source, obj/item/equipping, mob/user)
+ . = ..()
+ if (!.)
+ return
+
+ if (!ismob(source))
+ return FALSE
+
+ var/time_to_strip = HUMAN_STRIP_DELAY
+ var/mob/sourcemob = source
+
+ if (ishuman(sourcemob) && ishuman(user))
+ var/mob/living/carbon/human/sourcehuman = sourcemob
+ var/mob/living/carbon/human/userhuman = user
+ time_to_strip = userhuman.get_strip_delay(userhuman, sourcehuman)
+
+ if (!do_after(user, time_to_strip, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, source, INTERRUPT_MOVED, BUSY_ICON_FRIENDLY))
+ return FALSE
+
+ if (!equipping.mob_can_equip(
+ sourcemob,
+ key
+ ))
+ return FALSE
+
+ if (!user.temp_drop_inv_item(equipping))
+ return FALSE
+
+ return TRUE
+
+/datum/strippable_item/mob_item_slot/finish_equip(atom/source, obj/item/equipping, mob/user)
+ if (!ismob(source))
+ return FALSE
+
+ var/mob/sourcemob = source
+ sourcemob.equip_to_slot_if_possible(equipping, key)
+
+/datum/strippable_item/mob_item_slot/get_obscuring(atom/source)
+ return FALSE
+
+/datum/strippable_item/mob_item_slot/start_unequip(atom/source, mob/user)
+ . = ..()
+ if (!.)
+ return
+
+ return start_unequip_mob(get_item(source), source, user)
+
+/datum/strippable_item/mob_item_slot/finish_unequip(atom/source, mob/user)
+ var/obj/item/item = get_item(source)
+ if (isnull(item))
+ return FALSE
+
+ if (!ismob(source))
+ return FALSE
+
+ return finish_unequip_mob(item, source, user)
+
+/// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob.
+/datum/strippable_item/mob_item_slot/proc/start_unequip_mob(obj/item/item, mob/living/carbon/human/source, mob/living/carbon/human/user)
+ var/time_to_strip = HUMAN_STRIP_DELAY
+
+ if (istype(source) && istype(user))
+ time_to_strip = user.get_strip_delay(user, source)
+
+ if (!do_after(user, time_to_strip, INTERRUPT_ALL, BUSY_ICON_HOSTILE, source, INTERRUPT_MOVED, BUSY_ICON_HOSTILE))
+ return FALSE
+
+ return TRUE
+
+/// A utility function for `/datum/strippable_item`s to finish unequipping an item from a mob.
+/datum/strippable_item/mob_item_slot/proc/finish_unequip_mob(obj/item/item, mob/source, mob/user)
+ if (!source.drop_inv_item_on_ground(item, force = (item.flags_item & FORCEDROP_CONDITIONAL))) //force if we can drop the item in this case
+ return FALSE
+
+ if (ismob(source))
+ var/mob/sourcemob = source
+ sourcemob.attack_log += text("\[[time_stamp()]\] [key_name(sourcemob)] has been stripped of [item] by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] [key_name(user)] has been stripped of [key_name(sourcemob)] of [item]")
+
+ // Updates speed in case stripped speed affecting item
+ source.recalculate_move_delay = TRUE
+
+/// A representation of the stripping UI
+/datum/strip_menu
+ /// The owner who has the element /datum/element/strippable
+ var/atom/movable/owner
+
+ /// The strippable element itself
+ var/datum/element/strippable/strippable
+
+ /// A lazy list of user mobs to a list of strip menu keys that they're interacting with
+ var/list/interactions
+
+/datum/strip_menu/New(atom/movable/owner, datum/element/strippable/strippable)
+ . = ..()
+ src.owner = owner
+ src.strippable = strippable
+
+/datum/strip_menu/Destroy()
+ owner = null
+ strippable = null
+
+ return ..()
+
+/datum/strip_menu/tgui_interact(mob/user, datum/tgui/ui)
+ . = ..()
+ ui = SStgui.try_update_ui(user, src, ui)
+ if (!ui)
+ ui = new(user, src, "StripMenu")
+ ui.open()
+
+
+/datum/strip_menu/ui_assets(mob/user)
+ return list(
+ get_asset_datum(/datum/asset/simple/inventory),
+ )
+
+/datum/strip_menu/ui_data(mob/user)
+ var/list/data = list()
+
+ var/list/items = list()
+
+ for (var/strippable_key in strippable.items)
+ var/datum/strippable_item/item_data = strippable.items[strippable_key]
+
+ if (!item_data.should_show(owner, user))
+ continue
+
+ var/list/result
+
+ if(strippable_key in LAZYACCESS(interactions, user))
+ LAZYSET(result, "interacting", TRUE)
+
+ var/obscuring = item_data.get_obscuring(owner)
+ if (obscuring != STRIPPABLE_OBSCURING_NONE)
+ LAZYSET(result, "obscured", obscuring)
+ items[strippable_key] = result
+ continue
+
+ var/obj/item/item = item_data.get_item(owner)
+ if (isnull(item))
+ if (item_data.has_no_item_alt_action())
+ LAZYINITLIST(result)
+ result["no_item_action"] = item_data.get_alternate_action(owner, user)
+ items[strippable_key] = result
+ continue
+
+ LAZYINITLIST(result)
+
+ result["icon"] = icon2base64(icon(item.icon, item.icon_state, frame = 1))
+ result["name"] = item.name
+ result["alternate"] = item_data.get_alternate_action(owner, user)
+
+ items[strippable_key] = result
+
+ data["items"] = items
+
+ // While most `\the`s are implicit, this one is not.
+ // In this case, `\The` would otherwise be used.
+ // This doesn't match with what it's used for, which is to say "Stripping the alien drone",
+ // as opposed to "Stripping The alien drone".
+ // Human names will still show without "the", as they are proper nouns.
+ data["name"] = "\the [owner]"
+
+ return data
+
+/datum/strip_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if (.)
+ return
+
+ . = TRUE
+
+ var/mob/user = ui.user
+
+ switch (action)
+ if ("equip")
+ var/key = params["key"]
+ var/datum/strippable_item/strippable_item = strippable.items[key]
+
+ if (isnull(strippable_item))
+ return
+
+ if (!strippable_item.should_show(owner, user))
+ return
+
+ if (strippable_item.get_obscuring(owner) == STRIPPABLE_OBSCURING_COMPLETELY)
+ return
+
+ var/item = strippable_item.get_item(owner)
+ if (!isnull(item))
+ return
+
+ var/obj/item/held_item = user.get_held_item()
+ if (isnull(held_item))
+ return
+
+ if (!strippable_item.try_equip(owner, held_item, user))
+ return
+
+ LAZYORASSOCLIST(interactions, user, key)
+
+ // Yielding call
+ var/should_finish = strippable_item.start_equip(owner, held_item, user)
+
+ LAZYREMOVEASSOC(interactions, user, key)
+
+ if (!should_finish)
+ return
+
+ if (QDELETED(src) || QDELETED(owner))
+ return
+
+ // They equipped an item in the meantime
+ if (!isnull(strippable_item.get_item(owner)))
+ return
+
+ if (!user.Adjacent(owner))
+ return
+
+ strippable_item.finish_equip(owner, held_item, user)
+ if ("strip")
+ var/key = params["key"]
+ var/datum/strippable_item/strippable_item = strippable.items[key]
+
+ if (isnull(strippable_item))
+ return
+
+ if (!strippable_item.should_show(owner, user))
+ return
+
+ if (strippable_item.get_obscuring(owner) == STRIPPABLE_OBSCURING_COMPLETELY)
+ return
+
+ var/item = strippable_item.get_item(owner)
+ if (isnull(item))
+ return
+
+ if (!strippable_item.try_unequip(owner, user))
+ return
+
+ LAZYORASSOCLIST(interactions, user, key)
+
+ var/should_unequip = strippable_item.start_unequip(owner, user)
+
+ LAZYREMOVEASSOC(interactions, user, key)
+
+ // Yielding call
+ if (!should_unequip)
+ return
+
+ if (QDELETED(src) || QDELETED(owner))
+ return
+
+ // They changed the item in the meantime
+ if (strippable_item.get_item(owner) != item)
+ return
+
+ if (!user.Adjacent(owner))
+ return
+
+ strippable_item.finish_unequip(owner, user)
+ if ("alt")
+ var/key = params["key"]
+ var/datum/strippable_item/strippable_item = strippable.items[key]
+
+ if (isnull(strippable_item))
+ return
+
+ if (!strippable_item.should_show(owner, user))
+ return
+
+ if (strippable_item.get_obscuring(owner) == STRIPPABLE_OBSCURING_COMPLETELY)
+ return
+
+ var/item = strippable_item.get_item(owner)
+ if (isnull(item) && !strippable_item.has_no_item_alt_action())
+ return
+
+ if (isnull(strippable_item.get_alternate_action(owner, user)))
+ return
+
+ LAZYORASSOCLIST(interactions, user, key)
+
+ // Potentially yielding
+ strippable_item.alternate_action(owner, user)
+
+ LAZYREMOVEASSOC(interactions, user, key)
+
+/datum/strip_menu/ui_host(mob/user)
+ return owner
+
+/datum/strip_menu/ui_status(mob/user, datum/ui_state/state)
+ . = ..()
+
+ if (isliving(user))
+ var/mob/living/living_user = user
+
+ if (
+ . == UI_UPDATE \
+ && user.stat == CONSCIOUS \
+ && living_user.body_position == LYING_DOWN \
+ && user.Adjacent(owner)
+ )
+ return UI_INTERACTIVE
+
+/// Creates an assoc list of keys to /datum/strippable_item
+/proc/create_strippable_list(types)
+ var/list/strippable_items = list()
+
+ for (var/strippable_type in types)
+ var/datum/strippable_item/strippable_item = new strippable_type
+ strippable_items[strippable_item.key] = strippable_item
+
+ return strippable_items
diff --git a/code/datums/factions/clf.dm b/code/datums/factions/clf.dm
index 5456084b1a..45cedf3bbc 100644
--- a/code/datums/factions/clf.dm
+++ b/code/datums/factions/clf.dm
@@ -58,19 +58,19 @@
list("MP5 Magazine (9mm)", 5, /obj/item/ammo_magazine/smg/mp5, null, VENDOR_ITEM_REGULAR),
list("SIDEARMS", 0, null, null, null),
- list("88 Mod 4 Combat Pistol", 15, /obj/item/weapon/gun/pistol/mod88, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 15, /obj/item/weapon/gun/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("Beretta 92FS Pistol", 15, /obj/item/weapon/gun/pistol/b92fs, null, VENDOR_ITEM_REGULAR),
- list("CMB Spearhead Autorevolver", 15, /obj/item/weapon/gun/revolver/cmb, null, VENDOR_ITEM_REGULAR),
+ list("CMB Spearhead revolver", 15, /obj/item/weapon/gun/revolver/spearhead, null, VENDOR_ITEM_REGULAR),
list("Holdout Pistol", 10, /obj/item/weapon/gun/pistol/holdout, null, VENDOR_ITEM_REGULAR),
list("KT-42 Automag", 15, /obj/item/weapon/gun/pistol/kt42, null, VENDOR_ITEM_REGULAR),
list("S&W .357 Revolver", 15, /obj/item/weapon/gun/revolver/small, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
- list("88M4 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/mod88/normalpoint, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("Beretta 92FS Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/b92fs, null, VENDOR_ITEM_REGULAR),
list("KT-42 Magazine (.44)", 5, /obj/item/ammo_magazine/pistol/kt42, null, VENDOR_ITEM_REGULAR),
- list("Spearhead Speed Loader (.357)", 10, /obj/item/ammo_magazine/revolver/cmb/normalpoint, VENDOR_ITEM_REGULAR),
- list("Hollowpoint Spearhead Speed Loader (.357)", 5, /obj/item/ammo_magazine/revolver/cmb, VENDOR_ITEM_REGULAR),
+ list("Spearhead Speed Loader (.357)", 10, /obj/item/ammo_magazine/revolver/spearhead, VENDOR_ITEM_REGULAR),
+ list("Hollowpoint Spearhead Speed Loader (.357)", 5, /obj/item/ammo_magazine/revolver/spearhead, VENDOR_ITEM_REGULAR),
list("S&W Speed Loader (.357)", 5, /obj/item/ammo_magazine/revolver/small, null, VENDOR_ITEM_REGULAR),
list("Tiny Pistol Magazine (.22)", 5, /obj/item/ammo_magazine/pistol/holdout, null, VENDOR_ITEM_REGULAR),
@@ -126,19 +126,19 @@
list("MP5 Magazine (9mm)", 60, /obj/item/ammo_magazine/smg/mp5, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", 20, /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 20, /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("Beretta 92FS Pistol", 20, /obj/item/weapon/gun/pistol/b92fs, VENDOR_ITEM_REGULAR),
- list("CMB Spearhead Autorevolver", 20, /obj/item/weapon/gun/revolver/cmb, VENDOR_ITEM_REGULAR),
+ list("CMB Spearhead revolver", 20, /obj/item/weapon/gun/revolver/spearhead, VENDOR_ITEM_REGULAR),
list("Holdout Pistol", 20, /obj/item/weapon/gun/pistol/holdout, VENDOR_ITEM_REGULAR),
list("KT-42 Automag", 20, /obj/item/weapon/gun/pistol/kt42, VENDOR_ITEM_REGULAR),
list("S&W .357 Revolver", 20, /obj/item/weapon/gun/revolver/small, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", 40, /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 40, /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("Beretta 92FS Magazine (9mm)", 40, /obj/item/ammo_magazine/pistol/b92fs, VENDOR_ITEM_REGULAR),
list("KT-42 Magazine (.44)", 40, /obj/item/ammo_magazine/pistol/kt42, VENDOR_ITEM_REGULAR),
- list("Spearhead Speed Loader (.357)", 40, /obj/item/ammo_magazine/revolver/cmb/normalpoint, VENDOR_ITEM_REGULAR),
- list("Hollowpoint Spearhead Speed Loader (.357)", 40, /obj/item/ammo_magazine/revolver/cmb, VENDOR_ITEM_REGULAR),
+ list("Spearhead Speed Loader (.357)", 40, /obj/item/ammo_magazine/revolver/spearhead, VENDOR_ITEM_REGULAR),
+ list("Hollowpoint Spearhead Speed Loader (.357)", 40, /obj/item/ammo_magazine/revolver/spearhead, VENDOR_ITEM_REGULAR),
list("S&W Speed Loader (.357)", 40, /obj/item/ammo_magazine/revolver/small, VENDOR_ITEM_REGULAR),
list("Tiny Pistol Magazine (.22)", 40, /obj/item/ammo_magazine/pistol/holdout, VENDOR_ITEM_REGULAR),
diff --git a/code/datums/factions/pmc.dm b/code/datums/factions/pmc.dm
index 0b48fc63eb..51747807f3 100644
--- a/code/datums/factions/pmc.dm
+++ b/code/datums/factions/pmc.dm
@@ -43,11 +43,11 @@
list("SIDEARMS", 0, null, null, null),
list("VP78 pistol", 20, /obj/item/weapon/gun/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Combat Pistol", 15, /obj/item/weapon/gun/pistol/mod88, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 15, /obj/item/weapon/gun/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
list("VP78 magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88M4 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/mod88/normalpoint, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -83,11 +83,11 @@
list("SIDEARMS", 0, null, null, null),
list("VP78 pistol", 20, /obj/item/weapon/gun/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Combat Pistol", 30, /obj/item/weapon/gun/pistol/mod88, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 30, /obj/item/weapon/gun/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
list("VP78 magazine (9mm)", 50, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88M4 Magazine (9mm)", 50, /obj/item/ammo_magazine/pistol/mod88/normalpoint, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 50, /obj/item/ammo_magazine/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("UTILITIES", 0, null, null, null),
list("M94 Marking Flare Pack", 30, /obj/item/storage/box/m94, null, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/datums/factions/royalmarinescommando.dm b/code/datums/factions/royalmarinescommando.dm
index b5605ea61f..aa9db0f5f2 100644
--- a/code/datums/factions/royalmarinescommando.dm
+++ b/code/datums/factions/royalmarinescommando.dm
@@ -40,11 +40,11 @@
list("SIDEARMS", 0, null, null, null),
list("VP78 Pistol", 20, /obj/item/weapon/gun/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Combat Pistol", 15, /obj/item/weapon/gun/pistol/mod88, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 15, /obj/item/weapon/gun/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
list("VP78 magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88M4 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/mod88/normalpoint, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -79,11 +79,11 @@
list("SIDEARMS", -1, null, null),
list("VP78 Pistol", 20, /obj/item/weapon/gun/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Combat Pistol", 15, /obj/item/weapon/gun/pistol/mod88, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 15, /obj/item/weapon/gun/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
list("VP78 magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR),
- list("88M4 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/mod88/normalpoint, null, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 5, /obj/item/ammo_magazine/pistol/vp70, null, VENDOR_ITEM_REGULAR),
list("UTILITIES", -1, null, null),
list("M94 Marking Flare Pack", 3, /obj/item/storage/box/m94, null, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/datums/supply_packs/ammo.dm b/code/datums/supply_packs/ammo.dm
index 164511c25c..6fdb2b4f09 100644
--- a/code/datums/supply_packs/ammo.dm
+++ b/code/datums/supply_packs/ammo.dm
@@ -240,16 +240,16 @@
containername = "\improper shotgun flechette crate"
group = "Ammo"
-//------------------------For 88M4 ----------------
+//------------------------For vp70 ----------------
-/datum/supply_packs/ammo_mod88_mag_box_ap
- name = "Magazine box (88 Mod 4 AP, 16x mags)"
+/datum/supply_packs/ammo_vp70_mag_box_ap
+ name = "Magazine box (VP70, 16x mags)"
contains = list(
- /obj/item/ammo_box/magazine/mod88,
+ /obj/item/ammo_box/magazine/vp70,
)
cost = 20
containertype = /obj/structure/closet/crate/ammo
- containername = "\improper 88 Mod 4 AP magazines crate"
+ containername = "\improper VP70 magazines crate"
group = "Ammo"
//------------------------Special or non common magazines----------------
diff --git a/code/datums/supply_packs/black_market.dm b/code/datums/supply_packs/black_market.dm
index e70d47c6be..16811680f2 100644
--- a/code/datums/supply_packs/black_market.dm
+++ b/code/datums/supply_packs/black_market.dm
@@ -151,7 +151,7 @@ Non-USCM items, from CLF, UPP, colonies, etc. Mostly combat-related.
new /obj/item/ammo_magazine/smg/mac15(src)
new /obj/item/ammo_magazine/smg/mac15(src)
if(4) //upp
- new /obj/item/weapon/gun/shotgun/type23/riot_control(src)
+ new /obj/item/weapon/gun/shotgun/type23/riot(src)
new /obj/item/ammo_magazine/handful/shotgun/heavy/beanbag(src)
new /obj/item/ammo_magazine/handful/shotgun/heavy/beanbag(src)
new /obj/item/ammo_magazine/handful/shotgun/heavy/flechette(src)
@@ -410,12 +410,12 @@ Additionally, weapons that are way too good to put in the basically-flavor black
/datum/supply_packs/contraband/seized/cmb
name = "CMB Spearhead revolver (x5 magazines included)"
contains = list(
- /obj/item/weapon/gun/revolver/cmb,
- /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/ammo_magazine/revolver/cmb,
+ /obj/item/weapon/gun/revolver/spearhead,
+ /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/ammo_magazine/revolver/spearhead,
)
dollar_cost = 20
containertype = /obj/structure/largecrate/black_market
@@ -683,7 +683,7 @@ USCM spare items, miscellaneous gear that's too niche and distant (or restricted
contains = list(
/obj/item/ammo_magazine/smg/m39/rubber,
/obj/item/ammo_magazine/pistol/rubber,
- /obj/item/ammo_magazine/pistol/mod88/rubber,
+ /obj/item/ammo_magazine/pistol/vp70/rubber,
/obj/item/ammo_magazine/rifle/rubber,
/obj/item/ammo_magazine/rifle/m4ra/rubber,
/obj/item/ammo_magazine/shotgun/beanbag,
@@ -694,9 +694,9 @@ USCM spare items, miscellaneous gear that's too niche and distant (or restricted
/* - Misc. USCM weaponry - */
/datum/supply_packs/contraband/surplus/mk45_automag
- name = "surplus MK-45 Automagnum case"
+ name = "surplus HG 45 case"
dollar_cost = 35
- contains = list(/obj/item/storage/box/guncase/mk45_automag)
+ contains = list(/obj/item/storage/box/guncase/hg45)
containertype = /obj/structure/largecrate/black_market
/datum/supply_packs/contraband/surplus/nsg23_marine
@@ -927,13 +927,13 @@ This is where the RO can reclaim their lost honor and purchase the M44 custom, t
/datum/supply_packs/contraband/deep_storage/cartridge_bayonet
name = "M8 Cartridge Bayonet Kit"
- contains = list(/obj/item/storage/box/co2_knife)
+ contains = list(/obj/item/storage/box/loadout/co2_knife)
dollar_cost = 10
containertype = /obj/structure/largecrate/black_market
/datum/supply_packs/contraband/deep_storage/clf_holdout
name = "D18 Holdout Pistol"
- contains = list(/obj/item/storage/box/clf)
+ contains = list(/obj/item/storage/box/loadout/clf)
dollar_cost = 10
crate_heat = 2
containertype = /obj/structure/largecrate/black_market
diff --git a/code/datums/weather/weather_events/long.dm b/code/datums/weather/weather_events/long.dm
new file mode 100644
index 0000000000..9e569dd172
--- /dev/null
+++ b/code/datums/weather/weather_events/long.dm
@@ -0,0 +1,48 @@
+// Weather events for Big Red
+/datum/weather_event/dust/infinite
+ name = "Duststorm (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/sand/infinite
+ name = "Sandstorm (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/rock/infinite
+ name = "Rockstorm (Infinite)"
+ length = INFINITY
+
+// Weather events for Chances Claim
+/datum/weather_event/light_rain/lv522/infinite
+ name = "LV522 Light Rain (Infinite)"
+ length = INFINITY
+
+// Weather events for LV624
+/datum/weather_event/light_rain/infinite
+ name = "Light Rain (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/heavy_rain/infinite
+ name = "Heavy Rain (Infinite)"
+ length = INFINITY
+
+// Weather events for New Varadero
+/datum/weather_event/light_rain/varadero/infinite
+ name = "Tropical Storm (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/monsoon/infinite
+ name = "Monsoon Warning (Infinite)"
+ length = INFINITY
+
+// Weather events for Sorokyne
+/datum/weather_event/snow/infinite
+ name = "Snow (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/snowstorm/infinite
+ name = "Snowstorm (Infinite)"
+ length = INFINITY
+
+/datum/weather_event/blizzard/infinite
+ name = "Blizzard (Infinite)"
+ length = INFINITY
diff --git a/code/datums/weather/weather_events/lv522_chances_claim.dm b/code/datums/weather/weather_events/lv522_chances_claim.dm
index 6b7b296b8c..9d1ec84d71 100644
--- a/code/datums/weather/weather_events/lv522_chances_claim.dm
+++ b/code/datums/weather/weather_events/lv522_chances_claim.dm
@@ -1,4 +1,6 @@
/datum/weather_event/light_rain/lv522
+ name = "LV522 Light Rain"
+ display_name = "Light Rain"
length = 3 MINUTES
lightning_chance = 4
diff --git a/code/datums/weather/weather_events/new_varadero.dm b/code/datums/weather/weather_events/new_varadero.dm
index f2af23c3f1..36845a2940 100644
--- a/code/datums/weather/weather_events/new_varadero.dm
+++ b/code/datums/weather/weather_events/new_varadero.dm
@@ -1,22 +1,13 @@
-/datum/weather_event/light_rain
+/datum/weather_event/light_rain/varadero
name = "Tropical Storm"
display_name = "Tropical Storm"
length = 4 MINUTES
- fullscreen_type = /atom/movable/screen/fullscreen/weather/low
- turf_overlay_icon_state = "strata_storm"
turf_overlay_alpha = 40
- effect_message = null
- damage_per_tick = 0
-
has_process = TRUE
lightning_chance = 1
- ambience = 'sound/ambience/rainforest.ogg'
-
- fire_smothering_strength = 1
-
/datum/weather_event/monsoon
name = "Monsoon Warning"
display_name = "Monsoon Warning"
diff --git a/code/datums/weather/weather_map_holders/new_varadero.dm b/code/datums/weather/weather_map_holders/new_varadero.dm
index 8222001f47..1edb2c42c8 100644
--- a/code/datums/weather/weather_map_holders/new_varadero.dm
+++ b/code/datums/weather/weather_map_holders/new_varadero.dm
@@ -5,7 +5,7 @@
no_weather_turf_icon_state = "strata_clearsky"
potential_weather_events = list(
- /datum/weather_event/light_rain,
+ /datum/weather_event/light_rain/varadero,
/datum/weather_event/monsoon,
)
diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm
index b5f2a2d5cb..775a5d3a88 100644
--- a/code/game/jobs/role_authority.dm
+++ b/code/game/jobs/role_authority.dm
@@ -206,18 +206,46 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
//PART II: Setting up our player variables and lists, to see if we have anyone to destribute.
unassigned_players = list()
- for(var/mob/new_player/M in GLOB.player_list) //Get all players who are ready.
- if(!M.ready || M.job)
+ for(var/mob/new_player/player as anything in GLOB.new_player_list)
+ if(!player.ready || player.job) //get only players who are ready and unassigned
continue
- unassigned_players += M
+ var/datum/preferences/prefs = player.client?.prefs
+ if(!prefs) //either no client to play, or no preferences
+ continue
+
+ if(prefs.alternate_option == RETURN_TO_LOBBY && !prefs.has_job_priorities()) //only try to assign players that could possibly be assigned
+ continue
+
+ unassigned_players += player
if(!length(unassigned_players)) //If we don't have any players, the round can't start.
unassigned_players = null
return
- unassigned_players = shuffle(unassigned_players, 1) //Shuffle the players.
+ var/list/player_weights = list()
+ var/debug_total_weight = 0
+ for(var/mob/new_player/cycled_unassigned as anything in unassigned_players)
+ var/base_weight = 1 //baseline weighting
+ var/new_bonus = 0
+ switch(cycled_unassigned.client.get_total_human_playtime()) //+1 for new players, +2 for really new players
+ if(0 to 2 HOURS)
+ new_bonus = 2
+ if(2 HOURS to 5 HOURS)
+ new_bonus = 1
+
+ var/streak_bonus = max(get_client_stat(cycled_unassigned.client, PLAYER_STAT_UNASSIGNED_ROUND_STREAK) - 2, 0) //+1 per missed round after 2
+
+ player_weights[cycled_unassigned] = base_weight + new_bonus + streak_bonus
+ debug_total_weight += player_weights[cycled_unassigned]
+ log_debug("ASSIGNMENT: player_weights generated with [length(player_weights)] players and [debug_total_weight] total weight.")
+
+ unassigned_players = shuffle_weight(player_weights)
+ var/list/debug_weight_order = list()
+ for(var/mob/new_player/cycled_unassigned as anything in unassigned_players)
+ debug_weight_order += player_weights[cycled_unassigned]
+ log_debug("ASSIGNMENT: unassigned_players by entry weight: ([debug_weight_order.Join(", ")])")
// How many positions do we open based on total pop
for(var/i in roles_by_name)
@@ -247,11 +275,11 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
return
log_debug("ASSIGNMENT: Starting prime priority assignments.")
- for(var/mob/new_player/cycled_unassigned in shuffle(unassigned_players))
+ for(var/mob/new_player/cycled_unassigned in unassigned_players)
assign_role_to_player_by_priority(cycled_unassigned, roles_to_assign, unassigned_players, PRIME_PRIORITY)
log_debug("ASSIGNMENT: Starting regular priority assignments.")
- for(var/mob/new_player/cycled_unassigned in shuffle(unassigned_players))
+ for(var/mob/new_player/cycled_unassigned in unassigned_players)
var/player_assigned_job = FALSE
for(var/priority in HIGH_PRIORITY to LOW_PRIORITY)
@@ -264,20 +292,17 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
break
if(!player_assigned_job)
- log_debug("ASSIGNMENT: [cycled_unassigned] was unable to be assigned a job based on preferences and roles to assign. Attempting alternate options.")
-
switch(cycled_unassigned.client.prefs.alternate_option)
if(GET_RANDOM_JOB)
- log_debug("ASSIGNMENT: [cycled_unassigned] has opted for random job alternate option. Finding random job.")
var/iterator = 0
while((cycled_unassigned in unassigned_players) || iterator >= 5)
iterator++
var/random_job_name = pick(roles_to_assign)
var/datum/job/random_job = roles_to_assign[random_job_name]
- log_debug("ASSIGNMENT: [cycled_unassigned] is attempting to be assigned to [random_job_name].")
if(assign_role(cycled_unassigned, random_job))
log_debug("ASSIGNMENT: We have randomly assigned [random_job_name] to [cycled_unassigned]")
+ cycled_unassigned.client.player_data.adjust_stat(PLAYER_STAT_UNASSIGNED_ROUND_STREAK, STAT_CATEGORY_MISC, 0, TRUE)
unassigned_players -= cycled_unassigned
if(random_job.spawn_positions != -1 && random_job.current_positions >= random_job.spawn_positions)
@@ -288,10 +313,10 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
log_debug("ASSIGNMENT: [cycled_unassigned] was unable to be randomly assigned a job. Something has gone wrong.")
if(BE_MARINE)
- log_debug("ASSIGNMENT: [cycled_unassigned] has opted for marine alternate option. Checking if slot is available.")
var/datum/job/marine_job = GET_MAPPED_ROLE(JOB_SQUAD_MARINE)
if(assign_role(cycled_unassigned, marine_job))
log_debug("ASSIGNMENT: We have assigned [marine_job.title] to [cycled_unassigned] via alternate option.")
+ cycled_unassigned.client.player_data.adjust_stat(PLAYER_STAT_UNASSIGNED_ROUND_STREAK, STAT_CATEGORY_MISC, 0, TRUE)
unassigned_players -= cycled_unassigned
if(marine_job.spawn_positions != -1 && marine_job.current_positions >= marine_job.spawn_positions)
@@ -305,22 +330,22 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
cycled_unassigned.ready = 0
log_debug("ASSIGNMENT: Assignment complete. Players unassigned: [length(unassigned_players)] Jobs unassigned: [length(roles_to_assign)]")
+ for(var/mob/new_player/cycled_unassigned in unassigned_players)
+ cycled_unassigned.client.player_data.adjust_stat(PLAYER_STAT_UNASSIGNED_ROUND_STREAK, STAT_CATEGORY_MISC, 1)
return roles_to_assign
/datum/authority/branch/role/proc/assign_role_to_player_by_priority(mob/new_player/cycled_unassigned, list/roles_to_assign, list/unassigned_players, priority)
- log_debug("ASSIGNMENT: We have started cycled through priority [priority] for [cycled_unassigned].")
- var/wanted_jobs_by_name = shuffle(cycled_unassigned.client?.prefs?.get_jobs_by_priority(priority))
+ var/wanted_jobs_by_name = shuffle(cycled_unassigned.client.prefs.get_jobs_by_priority(priority))
var/player_assigned_job = FALSE
for(var/job_name in wanted_jobs_by_name)
- log_debug("ASSIGNMENT: We are cycling through wanted jobs and are at [job_name] for [cycled_unassigned].")
if(job_name in roles_to_assign)
- log_debug("ASSIGNMENT: We have found [job_name] in roles to assign for [cycled_unassigned].")
var/datum/job/actual_job = roles_to_assign[job_name]
if(assign_role(cycled_unassigned, actual_job))
- log_debug("ASSIGNMENT: We have assigned [job_name] to [cycled_unassigned].")
+ log_debug("ASSIGNMENT: We have assigned [job_name] to [cycled_unassigned] at priority [priority].")
+ cycled_unassigned.client.player_data?.adjust_stat(PLAYER_STAT_UNASSIGNED_ROUND_STREAK, STAT_CATEGORY_MISC, 0, TRUE)
unassigned_players -= cycled_unassigned
if(actual_job.spawn_positions != -1 && actual_job.current_positions >= actual_job.spawn_positions)
@@ -331,10 +356,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
break
if(player_assigned_job)
- log_debug("ASSIGNMENT: [cycled_unassigned] has been assigned a job.")
return player_assigned_job
- log_debug("ASSIGNMENT: [cycled_unassigned] did not get a job at priority [priority].")
return player_assigned_job
/**
diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm
index ab77f35d26..b5022b4a75 100644
--- a/code/game/machinery/computer/dropship_weapons.dm
+++ b/code/game/machinery/computer/dropship_weapons.dm
@@ -694,10 +694,10 @@
if(CEILING_GLASS)
is_outside = TRUE
if(!is_outside && !cavebreaker) //cavebreaker doesn't care
- to_chat(weapon_operator, SPAN_WARNING("INVALID TARGET: target must be visible from high altitude."))
+ to_chat(weapon_operator, SPAN_WARNING("WARNING: Target obstructed by terrain features."))
return FALSE
if (protected_by_pylon(TURF_PROTECTION_CAS, TU))
- to_chat(weapon_operator, SPAN_WARNING("INVALID TARGET: biological-pattern interference with signal."))
+ to_chat(weapon_operator, SPAN_WARNING("WARNING: Signal garbled, launch aborted."))
return FALSE
if(!DEW.ammo_equipped.can_fire_at(TU, weapon_operator))
return FALSE
@@ -807,10 +807,10 @@
if (!istype(dropship))
return FALSE
if (!dropship.in_flyby || dropship.mode != SHUTTLE_CALL)
- to_chat(user, SPAN_WARNING("Has to be in Fly By mode"))
+ to_chat(user, SPAN_WARNING("You must be making a flyby!"))
return FALSE
if (dropship.timer && dropship.timeLeft(1) < firemission_envelope.flyoff_period)
- to_chat(user, SPAN_WARNING("Not enough time to complete the Fire Mission"))
+ to_chat(user, SPAN_WARNING("Not enough time on station to complete the firemission."))
return FALSE
var/datum/cas_signal/recorded_loc = firemission_envelope.recorded_loc
var/obj/source = recorded_loc.signal_loc
@@ -846,7 +846,7 @@
return
if(firemission_envelope.recorded_loc.obstructed_signal())
if(firemission_envelope.user_is_guided(user))
- to_chat(user, SPAN_WARNING("Signal Obstructed. You have to go in blind."))
+ to_chat(user, SPAN_WARNING("Signal obstructed. You have to go in blind."))
return
var/sx = 0
var/sy = 0
@@ -872,7 +872,7 @@
var/area/laser_area = get_area(shootloc)
if(!istype(laser_area) || CEILING_IS_PROTECTED(laser_area.ceiling, CEILING_PROTECTION_TIER_1))
if(firemission_envelope.user_is_guided(user))
- to_chat(user, SPAN_WARNING("Vision Obstructed. You have to go in blind."))
+ to_chat(user, SPAN_WARNING("Vision obstructed. You have to go in blind."))
firemission_envelope.change_current_loc()
else
firemission_envelope.change_current_loc(shootloc)
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index fee6f9a53c..9fd775b64f 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -1012,7 +1012,7 @@ GLOBAL_LIST_EMPTY(vending_products)
//---helper glob data
GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list(
- /obj/item/ammo_box/magazine/mod88/empty = /obj/item/ammo_box/magazine/mod88,
+ /obj/item/ammo_box/magazine/vp70/empty = /obj/item/ammo_box/magazine/vp70,
/obj/item/ammo_box/magazine/m4a3/empty = /obj/item/ammo_box/magazine/m4a3,
/obj/item/ammo_box/magazine/m4a3/ap/empty = /obj/item/ammo_box/magazine/m4a3/ap,
/obj/item/ammo_box/magazine/m4a3/hp/empty = /obj/item/ammo_box/magazine/m4a3/hp,
diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm
index 445a5c5b9f..8daba6187a 100644
--- a/code/game/machinery/vending/vending_types.dm
+++ b/code/game/machinery/vending/vending_types.dm
@@ -258,6 +258,20 @@
/obj/item/tape/regulation = 5,
)
+/obj/structure/machinery/vending/security/upp
+ name = "\improper People's Police Equipment Vendor"
+ desc = "A standard security vendor used by security forces of the UPP."
+ req_access = list(ACCESS_CIVILIAN_BRIG)
+ products = list(
+ /obj/item/handcuffs = 8,
+ /obj/item/reagent_container/spray/pepper = 4,
+ /obj/item/device/flashlight = 4,
+ /obj/item/storage/belt/security/MP/UPP = 4,
+ /obj/item/device/flash = 5,
+ /obj/item/storage/box/evidence = 6,
+ /obj/item/tape/regulation = 5,
+ )
+
/obj/structure/machinery/vending/sea
name = "\improper SeaTech"
desc = "An equipment vendor designed to save lives"
@@ -270,7 +284,7 @@
products = list(
/obj/item/ammo_magazine/smg/m39/rubber = 20,
/obj/item/ammo_magazine/pistol/rubber = 20,
- /obj/item/ammo_magazine/pistol/mod88/rubber = 20,
+ /obj/item/ammo_magazine/pistol/vp70/rubber = 20,
/obj/item/ammo_magazine/rifle/rubber = 20,
/obj/item/ammo_magazine/rifle/m4ra/rubber = 20,
/obj/item/ammo_magazine/shotgun/beanbag = 20,
diff --git a/code/game/machinery/vending/vendor_types/crew/mp.dm b/code/game/machinery/vending/vendor_types/crew/mp.dm
index b63a022481..f9dc3d45f2 100644
--- a/code/game/machinery/vending/vendor_types/crew/mp.dm
+++ b/code/game/machinery/vending/vendor_types/crew/mp.dm
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police, list(
list("MP Beret", 0, /obj/item/clothing/head/beret/marine/mp, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("HANDGUN CASE (CHOOSE 1)", 0, null, null, null),
- list("88 mod 4 Combat Pistol Case", 0, /obj/item/storage/box/guncase/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
+ list("VP70 Combat Pistol Case", 0, /obj/item/storage/box/guncase/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M44 Combat Revolver Case", 0, /obj/item/storage/box/guncase/m44, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M4A3 Service Pistol Case", 0, /obj/item/storage/box/guncase/m4a3, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
@@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_warden, list(
list("Warden Peaked Cap", 0, /obj/item/clothing/head/beret/marine/mp/warden, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("HANDGUN CASE (CHOOSE 1)", 0, null, null, null),
- list("88 mod 4 Combat Pistol Case", 0, /obj/item/storage/box/guncase/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
+ list("VP70 Combat Pistol Case", 0, /obj/item/storage/box/guncase/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M44 Combat Revolver Case", 0, /obj/item/storage/box/guncase/m44, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M4A3 Service Pistol Case", 0, /obj/item/storage/box/guncase/m4a3, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
diff --git a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
index 14691dbe27..d3935a3bcc 100644
--- a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
@@ -24,13 +24,13 @@
list("M41A Magazine (10x24mm)", 24, /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", 4, /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 4, /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", 4, /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", 4, /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", 4, /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", 20, /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 20, /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Speedloader (.44)", 20, /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", 20, /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
list("M4A3 AP Magazine (9mm)", 12, /obj/item/ammo_magazine/pistol/ap, VENDOR_ITEM_REGULAR),
@@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_pilot_officer, list(
list("M3-VL Pattern Flak Vest", 0, /obj/item/clothing/suit/storage/marine/light/vest/dcc, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
- list("88 Mod 4 Combat Pistol", 0, /obj/item/weapon/gun/pistol/mod88, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 0, /obj/item/weapon/gun/pistol/vp70, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("VP78 Pistol", 0, /obj/item/weapon/gun/pistol/vp78, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("BELT (CHOOSE 1)", 0, null, null, null),
@@ -160,7 +160,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_dropship_crew_chief, list(
list("M3-VL Pattern Flak Vest", 0, /obj/item/clothing/suit/storage/marine/light/vest/dcc, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
- list("88 Mod 4 Combat Pistol", 0, /obj/item/weapon/gun/pistol/mod88, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 0, /obj/item/weapon/gun/pistol/vp70, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("VP78 Pistol", 0, /obj/item/weapon/gun/pistol/vp78, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("BELT (CHOOSE 1)", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
index b5bc42eabb..a0d37fb154 100644
--- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
+++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
@@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_chief, list(
list("CMP Beret", 0, /obj/item/clothing/head/beret/marine/mp/cmp, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("HANDGUN CASE (CHOOSE 1)", 0, null, null, null),
- list("88 mod 4 Combat Pistol Case", 0, /obj/item/storage/box/guncase/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
+ list("VP70 Combat Pistol Case", 0, /obj/item/storage/box/guncase/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M44 Combat Revolver Case", 0, /obj/item/storage/box/guncase/m44, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
list("M4A3 Service Pistol Case", 0, /obj/item/storage/box/guncase/m4a3, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_MANDATORY),
@@ -132,7 +132,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_chief_engineer, list(
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
- list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("VP70 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
@@ -158,7 +158,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_chief_engineer, list(
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("PRIMARY FIREARMS (CHOOSE 1)", 0, null, null, null),
- list("M37A2 Pump Shotgun", 0, /obj/item/storage/box/guncase/pumpshotgun, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
+ list("M120 Tactical Shotgun", 0, /obj/item/storage/box/guncase/shotguncombat, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("M41A Pulse Rifle MK2", 0, /obj/item/storage/box/guncase/m41a, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("M240 Incinerator Unit", 0, /obj/item/storage/box/guncase/flamer, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
@@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_req_officer, list(
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
- list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("VP70 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M44 Custom Revolver", 0, /obj/item/storage/belt/gun/m44/custom, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
@@ -234,7 +234,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_cmo, list(
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
- list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("VP70 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
@@ -283,7 +283,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
list("PERSONAL WEAPON (CHOOSE 1)", 0, null, null, null),
list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
- list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
+ list("VP70 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
@@ -342,7 +342,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_auxiliary_officer, list(
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
- list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("VP70 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp70, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M44 Custom Revolver", 0, /obj/item/storage/belt/gun/m44/custom, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
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 55046eaa2b..76b8eb6301 100644
--- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
+++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
@@ -272,13 +272,13 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_apc_spare, list(
list("M41A Magazine (10x24mm)", 12, /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", 2, /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 2, /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", 2, /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", 2, /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", 2, /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", 10, /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", 10, /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Speedloader (.44)", 10, /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", 10, /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
list("M4A3 AP Magazine (9mm)", 6, /obj/item/ammo_magazine/pistol/ap, VENDOR_ITEM_REGULAR),
@@ -313,7 +313,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
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("88 Mod 4 Combat Pistol", 0, /obj/item/weapon/gun/pistol/mod88, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", 0, /obj/item/weapon/gun/pistol/vp70, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("VP78 Pistol", 0, /obj/item/weapon/gun/pistol/vp78, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("BELT (CHOOSE 1)", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index f3c4973c3f..1717d1e9de 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -30,7 +30,7 @@
list("M4RA Battle Rifle", round(scale * 20), /obj/item/weapon/gun/rifle/m4ra, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 50), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 50), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", round(scale * 50), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 50), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", round(scale * 20), /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
@@ -224,7 +224,7 @@
list("M39 HV Magazine (10x20mm)", round(scale * 50), /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR),
list("M44 Speed Loader (.44)", round(scale * 40), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", round(scale * 50), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Magazine (9mm)", round(scale * 50), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", round(scale * 50), /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("ARMOR-PIERCING AMMUNITION", -1, null, null),
list("M4RA AP Magazine (10x24mm)", round(scale * 15.7), /obj/item/ammo_magazine/rifle/m4ra/ap, VENDOR_ITEM_REGULAR),
@@ -497,11 +497,11 @@
list("M41A Rubber Magazine (10x24mm)", round(scale * 25), /obj/item/ammo_magazine/rifle/rubber, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("SIDEARM NONLETHAL AMMUNITION", -1, null, null),
- list("88M4 Rubber Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/mod88/rubber, VENDOR_ITEM_REGULAR),
+ list("VP70 Rubber Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/vp70/rubber, VENDOR_ITEM_REGULAR),
list("M4A3 Rubber Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/rubber, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", -1, null, null),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
index 7ba67133b5..8ec93ab581 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
@@ -31,13 +31,13 @@
list("M41A Magazine (10x24mm)", round(scale * 25), /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", round(scale * 25), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", round(scale * 10), /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Speedloader (.44)", round(scale * 20), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
@@ -98,7 +98,6 @@
list("USCM Technician Backpack", round(scale * 15), /obj/item/storage/backpack/marine/tech, VENDOR_ITEM_REGULAR),
list("USCM Satchel", round(scale * 15), /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR),
list("Technician Chestrig", round(scale * 15), /obj/item/storage/backpack/marine/satchel/tech, VENDOR_ITEM_REGULAR),
- list("Shotgun Scabbard", round(scale * 5), /obj/item/storage/large_holster/m37, VENDOR_ITEM_REGULAR),
list("RESTRICTED BACKPACKS", -1, null, null),
list("Radio Telephone Backpack", round(max(1,(scale * 0.5))), /obj/item/storage/backpack/marine/satchel/rto, VENDOR_ITEM_REGULAR),
@@ -117,7 +116,6 @@
list("First-Aid Pouch (Injectors)", round(scale * 15), /obj/item/storage/pouch/firstaid/full, VENDOR_ITEM_REGULAR),
list("Flare Pouch (Full)", round(scale * 15), /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR),
list("Magazine Pouch", round(scale * 15), /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR),
- list("Shotgun Shell Pouch", round(scale * 15), /obj/item/storage/pouch/shotgun, VENDOR_ITEM_REGULAR),
list("Medium General Pouch", round(scale * 15), /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", round(scale * 15), /obj/item/storage/pouch/magazine/pistol, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", round(scale * 15), /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR),
@@ -131,7 +129,9 @@
list("Sling Pouch", round(scale * 1.25), /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR),
list("MASK", -1, null, null, null),
- list("Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
+ list("M5 Standalone Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas/m5, VENDOR_ITEM_REGULAR),
+ list("M5 Integrated Gas Mask", round(scale * 10), /obj/item/prop/helmetgarb/helmet_gasmask, VENDOR_ITEM_REGULAR),
+ list("Tactical Wrap", round(scale * 10), /obj/item/clothing/mask/rebreather/scarf/tacticalmask, VENDOR_ITEM_REGULAR),
list("Heat Absorbent Coif", round(scale * 10), /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR),
list("Rebreather", round(scale * 10), /obj/item/clothing/mask/rebreather, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
@@ -140,7 +140,7 @@
list("M1A1 Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/v2, VENDOR_ITEM_REGULAR),
list("Prescription ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/prescription, VENDOR_ITEM_REGULAR),
list("Marine RPG glasses", round(scale * 10), /obj/item/clothing/glasses/regular, VENDOR_ITEM_REGULAR),
- list("M5 Integrated Gas Mask", round(scale * 10), /obj/item/prop/helmetgarb/helmet_gasmask, VENDOR_ITEM_REGULAR),
+ list("M10 Helmet Camouflage Wrap", round(scale * 10), /obj/item/prop/helmetgarb/camocover, VENDOR_ITEM_REGULAR),
list("M10 Helmet Netting", round(scale * 10), /obj/item/prop/helmetgarb/netting, VENDOR_ITEM_REGULAR),
list("M10 Helmet Rain Cover", round(scale * 10), /obj/item/prop/helmetgarb/raincover, VENDOR_ITEM_REGULAR),
list("Firearm Lubricant", round(scale * 15), /obj/item/prop/helmetgarb/gunoil, VENDOR_ITEM_REGULAR),
@@ -215,18 +215,14 @@
list("Sling Pouch", round(scale * 1.25), /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR),
list("MASK", -1, null, null, null),
- list("Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
+ list("PMK-63 Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas/upp, VENDOR_ITEM_REGULAR),
+ list("PMK-63N Integrated Gas Mask", round(scale * 10), /obj/item/prop/helmetgarb/helmet_gasmask/upp, VENDOR_ITEM_REGULAR),
list("Heat Absorbent Coif", round(scale * 10), /obj/item/clothing/mask/rebreather/scarf/tan, VENDOR_ITEM_REGULAR),
list("Rebreather", round(scale * 10), /obj/item/clothing/mask/rebreather, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("MISCELLANEOUS", -1, null, null, null),
list("Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles, VENDOR_ITEM_REGULAR),
- list("M1A1 Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/v2, VENDOR_ITEM_REGULAR),
list("Prescription ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/prescription, VENDOR_ITEM_REGULAR),
- list("Marine RPG glasses", round(scale * 10), /obj/item/clothing/glasses/regular, VENDOR_ITEM_REGULAR),
- list("M5 Integrated Gas Mask", round(scale * 10), /obj/item/prop/helmetgarb/helmet_gasmask, VENDOR_ITEM_REGULAR),
- list("M10 Helmet Netting", round(scale * 10), /obj/item/prop/helmetgarb/netting, VENDOR_ITEM_REGULAR),
- list("M10 Helmet Rain Cover", round(scale * 10), /obj/item/prop/helmetgarb/raincover, VENDOR_ITEM_REGULAR),
list("Firearm Lubricant", round(scale * 15), /obj/item/prop/helmetgarb/gunoil, VENDOR_ITEM_REGULAR),
list("UPP Airborne Reconnaissance Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/upp/platoon, VENDOR_ITEM_REGULAR),
list("UPPA Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/upp, VENDOR_ITEM_REGULAR),
@@ -259,7 +255,6 @@
list("BACKPACK", -1, null, null, null),
list("Lightweight IMP Backpack", round(scale * 15), /obj/item/storage/backpack/marine/standard, VENDOR_ITEM_REGULAR),
list("USCM Satchel", round(scale * 15), /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR),
- list("Shotgun Scabbard", round(scale * 5), /obj/item/storage/large_holster/m37/standard, VENDOR_ITEM_REGULAR),
list("BELTS", -1, null, null),
list("M276 Pattern Ammo Load Rig", round(scale * 15), /obj/item/storage/belt/marine/standard, VENDOR_ITEM_REGULAR),
@@ -275,7 +270,6 @@
list("First-Aid Pouch (Injectors)", round(scale * 15), /obj/item/storage/pouch/firstaid/full, VENDOR_ITEM_REGULAR),
list("Flare Pouch (Full)", round(scale * 15), /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR),
list("Magazine Pouch", round(scale * 15), /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR),
- list("Shotgun Shell Pouch", round(scale * 15), /obj/item/storage/pouch/shotgun, VENDOR_ITEM_REGULAR),
list("Medium General Pouch", round(scale * 15), /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", round(scale * 15), /obj/item/storage/pouch/magazine/pistol, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", round(scale * 15), /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR),
@@ -289,7 +283,7 @@
list("Sling Pouch", round(scale * 1.25), /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR),
list("MASK", -1, null, null, null),
- list("Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
+ list("M5 Standalone Gas Mask", round(scale * 15), /obj/item/clothing/mask/gas/m5, VENDOR_ITEM_REGULAR),
list("Heat Absorbent Coif", round(scale * 10), /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR),
list("Rebreather", round(scale * 10), /obj/item/clothing/mask/rebreather, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
@@ -298,8 +292,6 @@
list("M1A1 Ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/v2, VENDOR_ITEM_REGULAR),
list("Prescription ballistic goggles", round(scale * 10), /obj/item/clothing/glasses/mgoggles/prescription, VENDOR_ITEM_REGULAR),
list("Marine RPG glasses", round(scale * 10), /obj/item/clothing/glasses/regular, VENDOR_ITEM_REGULAR),
- list("M10 Helmet Netting", round(scale * 10), /obj/item/prop/helmetgarb/netting, VENDOR_ITEM_REGULAR),
- list("M10 Helmet Rain Cover", round(scale * 10), /obj/item/prop/helmetgarb/raincover, VENDOR_ITEM_REGULAR),
list("Firearm Lubricant", round(scale * 15), /obj/item/prop/helmetgarb/gunoil, VENDOR_ITEM_REGULAR),
list("USCM Flair", round(scale * 15), /obj/item/prop/helmetgarb/flair_uscm, VENDOR_ITEM_REGULAR),
list("FORECON Shoulder Patch", round(scale * 15), /obj/item/clothing/accessory/patch/forecon, VENDOR_ITEM_REGULAR),
@@ -433,18 +425,10 @@
list("M89-S Signal Flare Pack", round(scale * 1), /obj/item/storage/box/m94/signal, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 2), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
- list("M44 Combat Revolver", round(scale * 2), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 2), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 2), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
- list("VP78 pistol", round(scale * 2), /obj/item/weapon/gun/pistol/vp78, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", round(scale * 1), /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
- list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
- list("M44 Speedloader (.44)", round(scale * 20), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
- list("M4A3 Magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
- list("VP78 magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol/vp78, VENDOR_ITEM_REGULAR),
-
list("MISCELLANEOUS", -1, null, null),
list("Extinguisher", round(scale * 5), /obj/item/tool/extinguisher, VENDOR_ITEM_REGULAR),
list("Fire Extinguisher (Portable)", round(scale * 1), /obj/item/tool/extinguisher/mini, VENDOR_ITEM_REGULAR),
@@ -452,8 +436,9 @@
list("Machete Scabbard (Full)", round(scale * 5), /obj/item/storage/large_holster/machete/full, VENDOR_ITEM_REGULAR),
list("Binoculars", round(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR),
list("AN/PSQ-55 Sentry Console", round(scale * 1), /obj/item/device/sentry_computer, VENDOR_ITEM_REGULAR),
- list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
+ list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit/advanced, VENDOR_ITEM_REGULAR),
list("Rail Flashlight", round(scale * 5), /obj/item/attachable/flashlight, VENDOR_ITEM_REGULAR),
+ list("M5 'Night Raider' bayonet", round(scale * 5), /obj/item/attachable/bayonet, VENDOR_ITEM_REGULAR),
)
/obj/structure/machinery/cm_vending/sorted/cargo_guns/squad/upp
@@ -510,8 +495,9 @@
list("Roller Bed", round(scale * 2), /obj/item/roller, VENDOR_ITEM_REGULAR),
list("Machete Scabbard (Full)", round(scale * 5), /obj/item/storage/large_holster/machete/full, VENDOR_ITEM_REGULAR),
list("Binoculars", round(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR),
- list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
+ list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit/advanced, VENDOR_ITEM_REGULAR),
list("Rail Flashlight", round(scale * 5), /obj/item/attachable/flashlight, VENDOR_ITEM_REGULAR),
+ list("Type 80 Bayonet", round(scale * 5), /obj/item/attachable/bayonet/upp, null, VENDOR_ITEM_REGULAR),
list("CLOTHING", -1, null, null),
list("Cap", round(scale * 5), /obj/item/clothing/head/uppcap, VENDOR_ITEM_REGULAR),
@@ -552,7 +538,7 @@
list("SIDEARMS", -1, null, null), //forecon loves their pistols
list("M48A4 Service Pistol", round(scale * 5), /obj/item/weapon/gun/pistol/m1911/socom, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Combat Pistol", round(scale * 5), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 5), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", round(scale * 5), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 5), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("VP78 pistol", round(scale * 5), /obj/item/weapon/gun/pistol/vp78, VENDOR_ITEM_REGULAR),
@@ -560,7 +546,7 @@
list("SIDEARM AMMUNITION", -1, null, null),
list("M1911 Magazine (.45)", round(scale * 20), /obj/item/ammo_magazine/pistol/m1911, VENDOR_ITEM_REGULAR),
- list("88M4 Magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Speedloader (.44)", round(scale * 20), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
list("VP78 magazine (9mm)", round(scale * 20), /obj/item/ammo_magazine/pistol/vp78, VENDOR_ITEM_REGULAR),
@@ -571,8 +557,9 @@
list("Roller Bed", round(scale * 2), /obj/item/roller, VENDOR_ITEM_REGULAR),
list("Machete Scabbard (Full)", round(scale * 5), /obj/item/storage/large_holster/machete/full, VENDOR_ITEM_REGULAR),
list("Binoculars", round(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR),
- list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
+ list("Spare PDT/L Battle Buddy Kit", round(scale * 3), /obj/item/storage/box/pdt_kit/advanced, VENDOR_ITEM_REGULAR),
list("Rail Flashlight", round(scale * 5), /obj/item/attachable/flashlight, VENDOR_ITEM_REGULAR),
+ list("M5 'Night Raider' bayonet", round(scale * 5), /obj/item/attachable/bayonet, VENDOR_ITEM_REGULAR),
list("CLOTHING", -1, null, null),
list("Poncho (green)", round(scale * 10), /obj/item/clothing/accessory/poncho/green, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/wo_vendors.dm b/code/game/machinery/vending/vendor_types/wo_vendors.dm
index 37e5aa1c27..f12d787024 100644
--- a/code/game/machinery/vending/vendor_types/wo_vendors.dm
+++ b/code/game/machinery/vending/vendor_types/wo_vendors.dm
@@ -87,13 +87,13 @@
list("M41A MK2 Magazine (10x24mm)", round(scale * 25), /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", round(scale * 25), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 25), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
list("M82F Flare Gun", round(scale * 5), /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", -1, null, null),
- list("88M4 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Speedloader (.44)", round(scale * 20), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", round(scale * 25), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/effects/landmarks/item_pool.dm b/code/game/objects/effects/landmarks/item_pool.dm
index e01a6bbc3f..9a39a5cf59 100644
--- a/code/game/objects/effects/landmarks/item_pool.dm
+++ b/code/game/objects/effects/landmarks/item_pool.dm
@@ -41,3 +41,7 @@
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot
icon_state = "ipool_bubshot"
type_to_spawn = /obj/item/ammo_magazine/shotgun/buckshot
+
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp
+ icon_state = "ipool_bubshot"
+ type_to_spawn = /obj/item/ammo_magazine/handful/shotgun/heavy/buckshot
diff --git a/code/game/objects/effects/spawners/faction_spawners.dm b/code/game/objects/effects/spawners/faction_spawners.dm
index eb634e383d..6c80260d44 100644
--- a/code/game/objects/effects/spawners/faction_spawners.dm
+++ b/code/game/objects/effects/spawners/faction_spawners.dm
@@ -134,7 +134,7 @@
mags_min = 1
guns = list(
/obj/item/weapon/gun/pistol/vp78 = /obj/item/ammo_magazine/pistol/vp78,
- /obj/item/weapon/gun/pistol/mod88 = /obj/item/ammo_magazine/pistol/mod88/normalpoint
+ /obj/item/weapon/gun/pistol/vp70 = /obj/item/ammo_magazine/pistol/vp70
)
/obj/effect/spawner/random/gun/pmc_secondary/lowchance
diff --git a/code/game/objects/effects/spawners/random.dm b/code/game/objects/effects/spawners/random.dm
index d302e7794f..82192a9ca3 100644
--- a/code/game/objects/effects/spawners/random.dm
+++ b/code/game/objects/effects/spawners/random.dm
@@ -329,7 +329,7 @@
var/mags_min = 1
var/list/guns = list(
/obj/item/weapon/gun/pistol/b92fs = /obj/item/ammo_magazine/pistol/b92fs,
- /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb,
+ /obj/item/weapon/gun/revolver/spearhead = /obj/item/ammo_magazine/revolver/spearhead,
/obj/item/weapon/gun/pistol/highpower = /obj/item/ammo_magazine/pistol/highpower,
/obj/item/weapon/gun/pistol/m1911 = /obj/item/ammo_magazine/pistol/m1911,
/obj/item/weapon/gun/revolver/small = /obj/item/ammo_magazine/revolver/small,
@@ -388,9 +388,9 @@
/obj/item/weapon/gun/pistol/b92fs = /obj/item/ammo_magazine/pistol/b92fs,
/obj/item/weapon/gun/pistol/b92fs = /obj/item/ammo_magazine/pistol/b92fs,
/obj/item/weapon/gun/pistol/b92fs = /obj/item/ammo_magazine/pistol/b92fs,
- /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb,
- /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb,
+ /obj/item/weapon/gun/revolver/spearhead = /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/weapon/gun/revolver/spearhead = /obj/item/ammo_magazine/revolver/spearhead,
+ /obj/item/weapon/gun/revolver/spearhead = /obj/item/ammo_magazine/revolver/spearhead,
/obj/item/weapon/gun/pistol/highpower = /obj/item/ammo_magazine/pistol/highpower,
/obj/item/weapon/gun/pistol/highpower = /obj/item/ammo_magazine/pistol/highpower,
/obj/item/weapon/gun/pistol/highpower = /obj/item/ammo_magazine/pistol/highpower,
diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm
index 60cf62b4e2..4e72795510 100644
--- a/code/game/objects/items/devices/motion_detector.dm
+++ b/code/game/objects/items/devices/motion_detector.dm
@@ -217,6 +217,10 @@
range_bounds.set_shape(cur_turf.x, cur_turf.y, detector_range * 2)
+ var/list/ping_receivers = list()
+ for(var/mob/living/carbon/human/humans in range(1, human_user))
+ ping_receivers += humans
+
var/list/ping_candidates = SSquadtree.players_in_range(range_bounds, cur_turf.z, QTREE_EXCLUDE_OBSERVER | QTREE_SCAN_MOBS)
for(var/A in ping_candidates)
@@ -230,7 +234,8 @@
apply_debuff(M)
ping_count++
if(human_user)
- show_blip(human_user, M)
+ for(var/mob/living/carbon/human/show_ping_to as anything in ping_receivers)
+ show_blip(show_ping_to, M)
for(var/mob/hologram/holo as anything in GLOB.hologram_list)
if(!holo.motion_sensed)
diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm
index ea0168453c..d4c9c13b58 100644
--- a/code/game/objects/items/misc.dm
+++ b/code/game/objects/items/misc.dm
@@ -56,13 +56,13 @@
..()
if(!gripped)
user.visible_message(SPAN_NOTICE("[user] grips [src] tightly."), SPAN_NOTICE("You grip [src] tightly."))
- flags_item |= NODROP
+ flags_item |= NODROP|FORCEDROP_CONDITIONAL
ADD_TRAIT(user, TRAIT_HOLDS_CANE, TRAIT_SOURCE_ITEM)
user.AddComponent(/datum/component/footstep, 6, 35, 4, 1, "cane_step")
gripped = TRUE
else
user.visible_message(SPAN_NOTICE("[user] loosens \his grip on [src]."), SPAN_NOTICE("You loosen your grip on [src]."))
- flags_item &= ~NODROP
+ flags_item &= ~(NODROP|FORCEDROP_CONDITIONAL)
REMOVE_TRAIT(user, TRAIT_HOLDS_CANE, TRAIT_SOURCE_ITEM)
// Ideally, this would be something like a component added onto every mob that prioritizes certain sounds, such as stomping over canes.
var/component = user.GetComponent(/datum/component/footstep)
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index ce63aaa13a..558c8b235c 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -52,6 +52,15 @@
desc = "The standard M10 combat helmet is already water-resistant at depths of up to 10 meters. This makes the top potentially water-proof. At least it's something."
icon_state = "raincover"
+/obj/item/prop/helmetgarb/camocover
+ name = "camocover"
+ desc = "A cover that goes over the top of an M10 pattern helmet to camoflauge it without needing the use of paints."
+ icon_state = "camocover"
+
+/obj/item/prop/helmetgarb/camocover/Initialize(mapload, ...)
+ . = ..()
+ select_gamemode_skin(/obj/item/prop/helmetgarb/camocover)
+
/obj/item/prop/helmetgarb/rabbitsfoot
name = "Rabbit's Foot"
desc = "Lucky for you, but not the rabbit, didn't really do it much good."
@@ -493,7 +502,7 @@
/obj/item/prop/helmetgarb/helmet_gasmask
name = "\improper M5 integrated gasmask"
- desc = "The USCM had its funding pulled for these when it became apparent that not every deployed enlisted was wearing a helmet 24/7; much to the bafflement of UA High Command."
+ desc = "The standard service gas mask of the USCM as part of a modernization program meant to replace the need for MOPP gear. While the program failed, these rarely do."
icon_state = "helmet_gasmask"
/obj/item/prop/helmetgarb/helmet_gasmask/on_enter_storage(obj/item/storage/internal/helmet_internal_inventory)
@@ -520,6 +529,11 @@
helmet_item.flags_inventory &= ~(BLOCKGASEFFECT)
helmet_item.flags_inv_hide &= ~(HIDEFACE)
+/obj/item/prop/helmetgarb/helmet_gasmask/upp
+ name = "\improper PMK-63N integrated gasmask"
+ desc = "The frontline variant of the PMK-63 produced to be compatible with in service helmets."
+ icon_state = "helmet_uppgasmask"
+
/obj/item/prop/helmetgarb/trimmed_wire
name = "trimmed barbed wire"
desc = "It is a length of barbed wire that's had most of the sharp points filed down so that it is safe to handle."
diff --git a/code/game/objects/items/reagent_containers/food/condiment.dm b/code/game/objects/items/reagent_containers/food/condiment.dm
index a13489f0af..e676b310f1 100644
--- a/code/game/objects/items/reagent_containers/food/condiment.dm
+++ b/code/game/objects/items/reagent_containers/food/condiment.dm
@@ -86,7 +86,7 @@
to_chat(user, SPAN_NOTICE(" You transfer [trans] units of the condiment to [target]."))
/obj/item/reagent_container/food/condiment/on_reagent_change()
- if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall" || icon_state == "hotsauce_cholula" || icon_state == "hotsauce_franks" || icon_state == "hotsauce_sriracha" || icon_state == "hotsauce_tabasco" || icon_state == "coldsauce_cole")
+ if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall" || icon_state == "hotsauce_cholula" || icon_state == "hotsauce_franks" || icon_state == "hotsauce_sriracha" || icon_state == "hotsauce_tabasco" || icon_state == "coldsauce_cole" || icon_state == "eggpowder" || icon_state == "milkpowder" || icon_state == "bjpowder" || icon_state == "ojpowder" || icon_state == "ajpowder" || icon_state == "wjpowder" || icon_state == "gjpowder" || icon_state == "pjpowder")
return
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
@@ -236,3 +236,79 @@
/obj/item/reagent_container/food/condiment/coldsauce/Initialize()
. = ..()
reagents.add_reagent("frostoil", 60)
+
+/obj/item/reagent_container/food/condiment/juice
+ name = "Juice Packet"
+ desc = "A small packet of dehydrated fruit-juice powder. Mix with water for a 'tasty' beverage. This one appears to be missing the label indicating what flavor it is however."
+ w_class = SIZE_TINY
+ icon_state = "bjpowder"
+ amount_per_transfer_from_this = 1
+ volume = 6
+
+/obj/item/reagent_container/food/condiment/juice/orange
+ name = "Orange Juice Packet"
+ desc = "A small packet of dehydrated orange-juice powder. Mix with water for a 'tasty' beverage."
+ icon_state = "ojpowder"
+
+/obj/item/reagent_container/food/condiment/juice/orange/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_orange_juice", 6)
+
+/obj/item/reagent_container/food/condiment/juice/apple
+ name = "Apple Juice Packet"
+ desc = "A small packet of dehydrated apple-juice powder. Mix with water for a 'tasty' beverage."
+ icon_state = "ajpowder"
+
+/obj/item/reagent_container/food/condiment/juice/apple/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_apple_juice", 6)
+
+/obj/item/reagent_container/food/condiment/juice/watermelon
+ name = "Watermelon Juice Packet"
+ desc = "A small packet of dehydrated watermelon-juice powder. Mix with water for a 'tasty' beverage."
+ icon_state = "wjpowder"
+
+/obj/item/reagent_container/food/condiment/juice/watermelon/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_watermelon_juice", 6)
+
+/obj/item/reagent_container/food/condiment/juice/grape
+ name = "Grape Juice Packet"
+ desc = "A small packet of dehydrated grape-juice powder. Mix with water for a 'tasty' beverage."
+ icon_state = "gjpowder"
+
+/obj/item/reagent_container/food/condiment/juice/grape/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_grape_juice", 6)
+
+/obj/item/reagent_container/food/condiment/juice/pineapple
+ name = "Pineapple Juice Packet"
+ desc = "A small packet of dehydrated pineapple-juice powder. Mix with water for a 'tasty' beverage."
+ icon_state = "pjpowder"
+
+/obj/item/reagent_container/food/condiment/juice/pineapple/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_pineapple_juice", 6)
+
+/obj/item/reagent_container/food/condiment/juice/egg
+ name = "Powdered Egg Packet"
+ desc = "A small packet of dehydrated egg-whites and egg-yolk powder. Mix with water for a passable alternative to the real deal."
+ icon_state = "eggpowder"
+ volume = 12
+ w_class = SIZE_SMALL
+
+/obj/item/reagent_container/food/condiment/juice/egg/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_egg_powder", 12)
+
+/obj/item/reagent_container/food/condiment/juice/milk
+ name = "Dehydrated Milk Packet"
+ desc = "A small packet of dehydrated milk powder. Mix with water for a passable alternative to actual milk."
+ icon_state = "milkpowder"
+ amount_per_transfer_from_this = 1
+ volume = 12
+ w_class = SIZE_SMALL
+
+/obj/item/reagent_container/food/condiment/juice/milk/Initialize()
+ . = ..()
+ reagents.add_reagent("dehydrated_milk_powder", 12)
diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm
index d27d6adb09..35f34d9d80 100644
--- a/code/game/objects/items/reagent_containers/food/snacks.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks.dm
@@ -567,6 +567,16 @@
new newegg(loc)
qdel(src)
+/obj/item/reagent_container/food/snacks/egg/dried
+ name = "reconstituted egg"
+ desc = "An egg! Or it was in another life, at least. Now it's just a sad pile of goop that might work in recipes."
+ icon_state = "honeycomb"
+ filling_color = "#FDFFD1"
+
+/obj/item/reagent_container/food/snacks/egg/dried/Initialize()
+ . = ..()
+ reagents.add_reagent("egg", 1)
+
/obj/item/reagent_container/food/snacks/friedegg
name = "Fried egg"
desc = "A fried egg, with a touch of salt and pepper."
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 0ed2894150..cefdee4c93 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -222,7 +222,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
)), \
null, \
new/datum/stack_recipe_list("empty ammo boxes",list( \
- new/datum/stack_recipe("empty magazine box (88 Mod 4 AP)", /obj/item/ammo_box/magazine/mod88/empty), \
+ new/datum/stack_recipe("empty magazine box (VP70)", /obj/item/ammo_box/magazine/vp70/empty), \
new/datum/stack_recipe("empty magazine box (M4A3)", /obj/item/ammo_box/magazine/m4a3/empty), \
new/datum/stack_recipe("empty magazine box (M4A3 AP)", /obj/item/ammo_box/magazine/m4a3/ap/empty), \
new/datum/stack_recipe("empty magazine box (M4A3 HP)", /obj/item/ammo_box/magazine/m4a3/hp/empty), \
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 81e838b30b..619c50b90c 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -1027,7 +1027,7 @@
/obj/item/weapon/gun/rifle/m4ra/training,
/obj/item/weapon/gun/smg/m39/training,
/obj/item/weapon/gun/pistol/m4a3/training,
- /obj/item/weapon/gun/pistol/mod88/training) //Ivan doesn't carry toys.
+ /obj/item/weapon/gun/pistol/vp70/training) //Ivan doesn't carry toys.
var/list/picklist = subtypesof(/obj/item/weapon/gun) - (template_guns + bad_guns + emplacements + yautja_guns + smartguns + training_guns)
var/random_gun = pick(picklist)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 2c17f447f1..fe8f55e3f7 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -88,6 +88,7 @@
desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version lacks any combat functionality, and is commonly used by engineers to transport important tools."
icon_state = "utilitybelt"
item_state = "utility"
+ max_w_class = SIZE_MEDIUM
can_hold = list(
/obj/item/tool/crowbar,
/obj/item/tool/screwdriver,
@@ -418,8 +419,8 @@
new /obj/item/handcuffs(src)
new /obj/item/handcuffs(src)
new /obj/item/reagent_container/spray/pepper(src)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
/obj/item/storage/belt/security/MP/UPP
@@ -448,8 +449,8 @@
new /obj/item/handcuffs(src)
new /obj/item/handcuffs(src)
new /obj/item/handcuffs(src)
- new /obj/item/ammo_magazine/revolver/cmb/normalpoint(src)
- new /obj/item/ammo_magazine/revolver/cmb/normalpoint(src)
+ new /obj/item/ammo_magazine/revolver/spearhead(src)
+ new /obj/item/ammo_magazine/revolver/spearhead(src)
/obj/item/storage/belt/security/MP/CMB/full/highpower/fill_preset_inventory()
new /obj/item/weapon/gun/energy/taser(src)
@@ -1184,15 +1185,15 @@
new /obj/item/ammo_magazine/pistol(src)
new /obj/item/ammo_magazine/pistol(src)
-/obj/item/storage/belt/gun/m4a3/mod88/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/mod88())
+/obj/item/storage/belt/gun/m4a3/vp70/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/vp70())
for(var/i = 1 to storage_slots - 1)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
-/obj/item/storage/belt/gun/m4a3/mod88_near_empty/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/mod88())
+/obj/item/storage/belt/gun/m4a3/vp70_near_empty/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/vp70())
for(var/i = 1 to 3)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
/obj/item/storage/belt/gun/m4a3/vp78/fill_preset_inventory()
handle_item_insertion(new /obj/item/weapon/gun/pistol/vp78())
@@ -1254,10 +1255,15 @@
for(var/i = 1 to storage_slots - 1)
new /obj/item/ammo_magazine/pistol/highpower/black(src)
-/obj/item/storage/belt/gun/m4a3/highpower/tactical/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower/tactical())
+/obj/item/storage/belt/gun/m4a3/highpower/automag/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower/automag())
for(var/i = 1 to storage_slots - 1)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
+ new /obj/item/ammo_magazine/pistol/highpower/automag(src)
+
+/obj/item/storage/belt/gun/m4a3/highpower/automag/tactical/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower/automag/tactical())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/highpower/automag(src)
/obj/item/storage/belt/gun/m39
name = "\improper M276 pattern M39 holster rig"
@@ -1582,11 +1588,11 @@
/obj/item/ammo_magazine/rifle/m4ra/rubber,
/obj/item/ammo_magazine/smg/m39/rubber,
/obj/item/ammo_magazine/pistol/rubber,
- /obj/item/ammo_magazine/pistol/mod88/rubber) //Ivan doesn't bring children's ammo.
+ /obj/item/ammo_magazine/pistol/vp70/rubber) //Ivan doesn't bring children's ammo.
var/list/picklist = subtypesof(/obj/item/ammo_magazine) - (internal_mags + bad_mags + sentry_mags + training_mags)
var/random_mag = pick(picklist)
- var/guntype = pick(subtypesof(/obj/item/weapon/gun/revolver) + subtypesof(/obj/item/weapon/gun/pistol) - list(/obj/item/weapon/gun/pistol/m4a3/training, /obj/item/weapon/gun/pistol/mod88/training))
+ var/guntype = pick(subtypesof(/obj/item/weapon/gun/revolver) + subtypesof(/obj/item/weapon/gun/pistol) - list(/obj/item/weapon/gun/pistol/m4a3/training, /obj/item/weapon/gun/pistol/vp70/training))
handle_item_insertion(new guntype())
for(var/total_storage_slots in 2 to storage_slots) //minus templates
new random_mag(src)
@@ -1872,7 +1878,7 @@
/obj/item/storage/belt/gun/utility/full/fill_preset_inventory()
- handle_item_insertion(new /obj/item/weapon/gun/pistol/mod88())
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/vp70())
new /obj/item/tool/screwdriver(src)
new /obj/item/tool/wrench(src)
new /obj/item/tool/weldingtool(src)
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index d544b5b281..bcfa7ba1fa 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -711,7 +711,7 @@
icon_state = "mealpack"
w_class = SIZE_SMALL
can_hold = list()
- storage_slots = 7
+ storage_slots = 8
max_w_class = 0
use_sound = "rip"
var/isopened = 0
@@ -728,8 +728,9 @@
//1 in 3 chance of getting a fortune cookie
var/cookie = rand(1,3)
var/matches_type = rand(1, 5)
+ var/juice_type = rand(1, 5)
if(cookie == 1)
- storage_slots = 8
+ storage_slots = 9
new /obj/item/reagent_container/food/snacks/packaged_meal(src, main)
new /obj/item/reagent_container/food/snacks/packaged_meal(src, second)
new /obj/item/reagent_container/food/snacks/packaged_meal(src, side)
@@ -749,6 +750,17 @@
new /obj/item/storage/fancy/cigar/matchbook/wy_gold(src)
if(5)
new /obj/item/storage/fancy/cigar/matchbook/brown(src)
+ switch(juice_type)
+ if(1)
+ new /obj/item/reagent_container/food/condiment/juice/orange(src)
+ if(2)
+ new /obj/item/reagent_container/food/condiment/juice/apple(src)
+ if(3)
+ new /obj/item/reagent_container/food/condiment/juice/watermelon(src)
+ if(4)
+ new /obj/item/reagent_container/food/condiment/juice/grape(src)
+ if(5)
+ new /obj/item/reagent_container/food/condiment/juice/pineapple(src)
/obj/item/storage/box/MRE/Initialize()
. = ..()
@@ -761,3 +773,14 @@
else if(!isopened)
isopened = 1
icon_state = "mealpackopened"
+
+/obj/item/storage/box/powderedmilk
+ name = "box of powdered milk packets"
+ desc = "It has a weird stain on it."
+
+/obj/item/storage/box/powderedmilk/fill_preset_inventory()
+ new /obj/item/reagent_container/food/condiment/juice/milk(src)
+ new /obj/item/reagent_container/food/condiment/juice/milk(src)
+ new /obj/item/reagent_container/food/condiment/juice/milk(src)
+ new /obj/item/reagent_container/food/condiment/juice/milk(src)
+ new /obj/item/reagent_container/food/condiment/juice/milk(src)
diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm
index 19e680a197..33b2b5f778 100644
--- a/code/game/objects/items/storage/misc.dm
+++ b/code/game/objects/items/storage/misc.dm
@@ -111,48 +111,117 @@
else
icon_state = "6_pack_[contents.len]"
-/obj/item/storage/box/clf
- name = "D18-storing box"
- desc = "A fairly decorated and ceremonial box containing a CLF D18 and a single additional magazine for it. I guess those CLF folk really care about their craftsmanship and prose rather than practicality, eh?"
- icon = 'icons/obj/items/storage.dmi'
- icon_state = "m43case"
- w_class = SIZE_SMALL
- max_w_class = SIZE_TINY
- storage_slots = 2
-
-/obj/item/storage/box/clf/fill_preset_inventory()
- 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."
+/obj/item/storage/box/loadout
+ name = "storage case"
+ desc = "A wooden case that fits a pistol and a number of magazines."
icon = 'icons/obj/items/storage.dmi'
icon_state = "matebacase"
w_class = SIZE_LARGE
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)
+ storage_slots = 7
-/obj/item/storage/box/M1911_loadout
+/obj/item/storage/box/loadout/upp
+ name = "Type 73 storing case"
+ desc = "A small case containing a loaded Type 73, and additional magazines."
+/obj/item/storage/box/loadout/upp/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/box/loadout/M4A3_custom_loadout
+ name = "M4A3 storage case"
+ desc = "A relatively large storage case containing a loaded M4A3 and additional magazines."
+
+/obj/item/storage/box/loadout/M4A3_custom_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/m4a3/custom())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol(src)
+
+/obj/item/storage/box/loadout/HG45_civilian_loadout
+ name = "HG 45 'Aguila' storage case"
+ desc = "A relatively large storage case containing a loaded HG 45 'Aguila' and additional magazines."
+
+/obj/item/storage/box/loadout/HG45_civilian_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/highpower(src)
+
+/obj/item/storage/box/loadout/HG45_marine_loadout
+ name = "HG 45 'Marina' storage case"
+ desc = "A relatively large storage case containing a loaded HG 45 'Marina' and additional magazines."
+
+/obj/item/storage/box/loadout/HG45_marine_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower/black())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/highpower/black(src)
+
+/obj/item/storage/box/loadout/HG44_loadout
+ name = "HG 44 'Automag' storage case"
+ desc = "A relatively large storage case containing a loaded HG 44 'Automag' and additional magazines."
+
+/obj/item/storage/box/loadout/HG44_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/highpower/automag())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/highpower/automag(src)
+
+/obj/item/storage/box/loadout/Spearhead_loadout
+ name = "Spearhead Armoury storage case"
+ desc = "A relatively large storage case containing a loaded Spearhead Armoury revolver and additional speedloaders."
+
+/obj/item/storage/box/loadout/Spearhead_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/spearhead())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/revolver/spearhead(src)
+
+/obj/item/storage/box/loadout/Spearhead_loadout/custom
+ name = "Spearhead Armoury storage case"
+ desc = "A relatively large storage case containing a loaded Spearhead Armoury revolver and additional speedloaders."
+
+/obj/item/storage/box/loadout/Spearhead_loadout/custom/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/spearhead/black())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/revolver/spearhead(src)
+
+/obj/item/storage/box/loadout/M1911_loadout
name = "M1911 storage case"
- desc = "A relatively large storage case containing the 1911 and additional magazines. Purchased by enlisted or aspiring PMCs looking to carry a timeless classic"
- icon = 'icons/obj/items/storage.dmi'
- icon_state = "matebacase"
- w_class = SIZE_LARGE
- max_w_class = SIZE_MEDIUM
- storage_slots = 3
+ desc = "A relatively large storage case containing a loaded M1911 and additional magazines."
+
+/obj/item/storage/box/loadout/M1911_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/m1911())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/m1911(src)
+
+/obj/item/storage/box/loadout/M44_loadout
+ name = "M44 storage case"
+ desc = "A relatively large storage case containing a loaded M44 revolver and additional speedloaders."
+
+/obj/item/storage/box/loadout/M44_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/m44())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/revolver(src)
+
+/obj/item/storage/box/loadout/M44_custom_loadout
+ name = "M44 storage case"
+ desc = "A relatively large storage case containing a loaded M44 revolver and additional speedloaders."
+
+/obj/item/storage/box/loadout/M44_custom_loadout/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/revolver/m44/custom())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/revolver(src)
+
+/obj/item/storage/box/loadout/clf
+ name = "Hummingbird storage box"
+ desc = "A slim storage case containing a loaded Hummingbird pistol and additional magazines."
+ w_class = SIZE_SMALL
+ max_w_class = SIZE_TINY
+ storage_slots = 4
-/obj/item/storage/box/M1911_loadout/fill_preset_inventory()
- new /obj/item/weapon/gun/pistol/m1911(src)
- new /obj/item/ammo_magazine/pistol/m1911(src)
- new /obj/item/ammo_magazine/pistol/m1911(src)
+/obj/item/storage/box/loadout/clf/fill_preset_inventory()
+ handle_item_insertion(new /obj/item/weapon/gun/pistol/clfpistol())
+ for(var/i = 1 to storage_slots - 1)
+ new /obj/item/ammo_magazine/pistol/clfpistol(src)
-/obj/item/storage/box/co2_knife
+/obj/item/storage/box/loadout/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!"
icon_state = "co2_box"
@@ -162,7 +231,7 @@
w_class = SIZE_SMALL
max_w_class = SIZE_SMALL
-/obj/item/storage/box/co2_knife/fill_preset_inventory()
+/obj/item/storage/box/loadout/co2_knife/fill_preset_inventory()
new /obj/item/attachable/bayonet/co2(src)
new /obj/item/co2_cartridge(src)
new /obj/item/co2_cartridge(src)
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index e1f4a17204..6ab25f0b73 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -461,7 +461,7 @@
/obj/item/storage/pouch/magazine/pistol/pmc_mod88/fill_preset_inventory()
for(var/i = 1 to storage_slots)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
/obj/item/storage/pouch/magazine/pistol/pmc_vp78/fill_preset_inventory()
for(var/i = 1 to storage_slots)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index be7571fa84..36e0ea702a 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -101,7 +101,7 @@
w_class = SIZE_HUGE
icon_state = "offhand"
name = "offhand"
- flags_item = DELONDROP|TWOHANDED|WIELDED
+ flags_item = DELONDROP|TWOHANDED|WIELDED|CANTSTRIP
/obj/item/weapon/twohanded/offhand/unwield(mob/user)
if(flags_item & WIELDED)
diff --git a/code/game/objects/prop.dm b/code/game/objects/prop.dm
index ac94e8ab03..f24fec66a6 100644
--- a/code/game/objects/prop.dm
+++ b/code/game/objects/prop.dm
@@ -291,3 +291,22 @@
/obj/item/prop/magazine/boots/n055
name = "Boots!: Issue No.55"
desc = "The only official USCM magazine, the headline reads 'TEN tips to keep your UD4 cockpit both safer and more relaxing.'"
+
+/obj/item/prop/scrap
+ name = "scrap metal"
+ icon = 'icons/obj/items/fishing_atoms.dmi'
+ icon_state = "sheet-scrap"
+ item_state = ""
+ desc = "A rusty piece of scrap metal."
+ w_class = SIZE_MEDIUM
+
+/obj/item/prop/rock
+ name = "rock"
+ icon = 'icons/obj/items/plush.dmi'
+ icon_state = "rock"
+ item_state = ""
+ force = 30
+ throwforce = 25
+ desc = "The most ancient of tools."
+ w_class = SIZE_TINY
+ hitsound = 'sound/weapons/genhit3.ogg'
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 2379837c97..f5fee64f1a 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -82,12 +82,6 @@
/obj/structure/closet/secure_closet/platoon_sergeant/Initialize()
. = ..()
- new /obj/item/weapon/gun/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
new /obj/item/clothing/head/helmet/marine/leader(src)
new /obj/item/device/binoculars/range/designator(src)
new /obj/item/device/whistle(src)
@@ -99,12 +93,6 @@
/obj/structure/closet/secure_closet/platoon_sergeant_forecon/Initialize()
. = ..()
- new /obj/item/weapon/gun/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
- new /obj/item/ammo_magazine/rifle/m41aMK1(src)
new /obj/item/device/binoculars/range/designator(src)
new /obj/item/device/whistle(src)
@@ -115,7 +103,6 @@
/obj/structure/closet/secure_closet/squad_sergeant/Initialize()
. = ..()
- new /obj/item/clothing/head/helmet/marine/rto(src)
new /obj/item/device/binoculars/range/designator(src)
new /obj/item/device/whistle(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/guncabinet.dm
index 4531a68c42..30b8ccb025 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/guncabinet.dm
@@ -80,10 +80,10 @@
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
new /obj/item/weapon/gun/launcher/grenade/m81/riot(src, TRUE)
new /obj/item/storage/box/nade_box/tear_gas(src)
new /obj/item/clothing/mask/gas(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/level_blue.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/level_blue.dm
index acc43c302e..a208a61a95 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/level_blue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet/level_blue.dm
@@ -18,10 +18,10 @@
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/shield/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
- new /obj/item/ammo_magazine/shotgun/beanbag/riot(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
+ new /obj/item/ammo_magazine/shotgun/beanbag(src)
new /obj/item/weapon/gun/launcher/grenade/m81/riot(src, TRUE)
new /obj/item/storage/box/nade_box/tear_gas(src)
new /obj/item/clothing/mask/gas(src)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 119615ab7a..9d9aaeb0f3 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -411,11 +411,11 @@
weapon_type = /obj/item/weapon/gun/pistol/m4a3/training
ammo_type = /obj/item/ammo_magazine/pistol/rubber
-/obj/structure/closet/crate/weapon/training/mod88
- name = "training 88 mod 4 crate"
- desc = "A crate with an 88 mod 4 pistol and nonlethal ammunition for it. Intended for use in combat exercises."
- weapon_type = /obj/item/weapon/gun/pistol/mod88/training
- ammo_type = /obj/item/ammo_magazine/pistol/mod88/rubber
+/obj/structure/closet/crate/weapon/training/vp70
+ name = "training VP70 crate"
+ desc = "A crate with an VP70 pistol and nonlethal ammunition for it. Intended for use in combat exercises."
+ weapon_type = /obj/item/weapon/gun/pistol/vp70/training
+ ammo_type = /obj/item/ammo_magazine/pistol/vp70/rubber
/obj/structure/closet/crate/weapon/training/grenade
name = "rubber pellet M15 grenades crate"
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index cfe7531f5f..9b19fb5b4e 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -377,7 +377,7 @@
/obj/item/weapon/gun/pistol/m1911 = /obj/item/ammo_magazine/pistol/m1911,
/obj/item/weapon/gun/pistol/heavy = /obj/item/ammo_magazine/pistol/heavy,
/obj/item/weapon/gun/revolver/small = /obj/item/ammo_magazine/revolver/small,
- /obj/item/weapon/gun/revolver/cmb = /obj/item/ammo_magazine/revolver/cmb,
+ /obj/item/weapon/gun/revolver/spearhead = /obj/item/ammo_magazine/revolver/spearhead,
/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,
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 6bee74ba01..b9c9636093 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -433,8 +433,8 @@
S = pick('sound/weapons/gun_shotgun_tactical_1.ogg','sound/weapons/gun_shotgun_tactical_2.ogg','sound/weapons/gun_shotgun_tactical_3.ogg','sound/weapons/gun_shotgun_tactical_4.ogg')
if("m4a3")
S = pick('sound/weapons/gun_m4a3_1.ogg','sound/weapons/gun_m4a3_2.ogg','sound/weapons/gun_m4a3_3.ogg','sound/weapons/gun_m4a3_4.ogg','sound/weapons/gun_m4a3_5.ogg')
- if("88m4")
- S = pick('sound/weapons/gun_88m4_v7.ogg')
+ if("vp70")
+ S = pick('sound/weapons/gun_vp70_v7.ogg')
if("gun_casing_shotgun")
S = pick ('sound/bullets/bulletcasing_shotgun_fall1.ogg')
if("gun_nsg23")
diff --git a/code/game/turfs/transit.dm b/code/game/turfs/transit.dm
index 11f3d50ce4..2e5396d0b1 100644
--- a/code/game/turfs/transit.dm
+++ b/code/game/turfs/transit.dm
@@ -261,6 +261,10 @@
shuttle_tag = DROPSHIP_TRIPOLI
dir = SOUTH
+/turf/open/space/transit/dropship/upp
+ shuttle_tag = DROPSHIP_UPP
+ dir = SOUTH
+
/turf/open/space/transit/south
dir = SOUTH
diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm
index 8e19a19053..b887cff60c 100644
--- a/code/modules/asset_cache/asset_list.dm
+++ b/code/modules/asset_cache/asset_list.dm
@@ -341,3 +341,24 @@ GLOBAL_LIST_EMPTY(asset_datums)
if (!item_filename)
return
. = list("[item_filename]" = SSassets.transport.get_asset_url(item_filename))
+
+/datum/asset/simple/inventory
+ assets = list(
+ "inventory-glasses.png" = 'icons/ui_Icons/inventory/glasses.png',
+ "inventory-head.png" = 'icons/ui_Icons/inventory/head.png',
+ "inventory-neck.png" = 'icons/ui_Icons/inventory/neck.png',
+ "inventory-mask.png" = 'icons/ui_Icons/inventory/mask.png',
+ "inventory-ears.png" = 'icons/ui_Icons/inventory/ears.png',
+ "inventory-uniform.png" = 'icons/ui_Icons/inventory/uniform.png',
+ "inventory-suit.png" = 'icons/ui_Icons/inventory/suit.png',
+ "inventory-gloves.png" = 'icons/ui_Icons/inventory/gloves.png',
+ "inventory-hand_l.png" = 'icons/ui_Icons/inventory/hand_l.png',
+ "inventory-hand_r.png" = 'icons/ui_Icons/inventory/hand_r.png',
+ "inventory-shoes.png" = 'icons/ui_Icons/inventory/shoes.png',
+ "inventory-suit_storage.png" = 'icons/ui_Icons/inventory/suit_storage.png',
+ "inventory-id.png" = 'icons/ui_Icons/inventory/id.png',
+ "inventory-belt.png" = 'icons/ui_Icons/inventory/belt.png',
+ "inventory-back.png" = 'icons/ui_Icons/inventory/back.png',
+ "inventory-pocket.png" = 'icons/ui_Icons/inventory/pocket.png',
+ "inventory-collar.png" = 'icons/ui_Icons/inventory/collar.png',
+ )
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 59dfda9833..a0428133fd 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
"whitefull"
))
-var/const/MAX_SAVE_SLOTS = 10
+var/const/MAX_SAVE_SLOTS = 20
/datum/preferences
var/client/owner
@@ -941,6 +941,18 @@ var/const/MAX_SAVE_SLOTS = 10
return jobs_to_return
+/// Returns TRUE if any job has a priority other than NEVER, FALSE otherwise.
+/datum/preferences/proc/has_job_priorities()
+ if(!length(job_preference_list))
+ ResetJobs()
+ return FALSE
+
+ for(var/job in job_preference_list)
+ if(job_preference_list[job] != NEVER_PRIORITY)
+ return TRUE
+
+ return FALSE
+
/datum/preferences/proc/SetJobDepartment(datum/job/J, priority)
if(!J || priority < 0 || priority > 4)
return FALSE
@@ -1621,7 +1633,7 @@ var/const/MAX_SAVE_SLOTS = 10
if("underwear")
var/list/underwear_options = gender == MALE ? GLOB.underwear_m : GLOB.underwear_f
var/old_gender = gender
- var/new_underwear = tgui_input_list(user, "Choose your character's underwear:", "Character Preference", underwear_options)
+ var/new_underwear = tgui_input_list(user, "Choose your character's underwear:", "Character Preference", underwear_options-GLOB.underwear_restricted)
if(old_gender != gender)
return
if(new_underwear)
@@ -1631,7 +1643,7 @@ var/const/MAX_SAVE_SLOTS = 10
if("undershirt")
var/list/undershirt_options = gender == MALE ? GLOB.undershirt_m : GLOB.undershirt_f
var/old_gender = gender
- var/new_undershirt = tgui_input_list(user, "Choose your character's undershirt:", "Character Preference", undershirt_options)
+ var/new_undershirt = tgui_input_list(user, "Choose your character's undershirt:", "Character Preference", undershirt_options-GLOB.undershirt_restricted)
if(old_gender != gender)
return
if(new_undershirt)
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 2c9b5ba243..34c7c9b4a6 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -138,6 +138,7 @@ var/global/list/gear_datums_by_name = list()
/datum/gear/mask/gas
display_name = "Gas mask"
path = /obj/item/clothing/mask/gas
+ cost = 1
/datum/gear/mask/scarf_black
display_name = "Scarf, black"
@@ -719,31 +720,58 @@ var/global/list/gear_datums_by_name = list()
/datum/gear/weapon/m8_cartridge_bayonet
display_name = "M8 Cartridge Bayonet"
- path = /obj/item/storage/box/co2_knife
+ path = /obj/item/storage/box/loadout/co2_knife
/datum/gear/weapon/clfpistol
- display_name = "D18 Holdout Pistol"
- path = /obj/item/storage/box/clf
+ display_name = "Hummingbird Pistol"
+ path = /obj/item/storage/box/loadout/clf
-/datum/gear/weapon/upppistol //ww2 war trophy luger
+/datum/gear/weapon/upppistol
display_name = "Type 73 Pistol"
- path = /obj/item/storage/box/upp
- slot = WEAR_IN_BACK
- cost = 4
+ path = /obj/item/storage/box/loadout/upp
/datum/gear/weapon/m4a3_custom
- display_name = "M4A3 Custom Pistol"
- path = /obj/item/weapon/gun/pistol/m4a3/custom
+ display_name = "Custom M4A3 Pistol"
+ path = /obj/item/storage/box/loadout/M4A3_custom_loadout
+ allowed_origins = USCM_ORIGINS
+
+/datum/gear/weapon/m1911
+ display_name = "M1911 Pistol"
+ path = /obj/item/storage/box/loadout/M1911_loadout
+ allowed_origins = USCM_ORIGINS
+
+/datum/gear/weapon/m44
+ display_name = "M44 Revolver"
+ path = /obj/item/storage/box/loadout/M44_loadout
allowed_origins = USCM_ORIGINS
/datum/gear/weapon/m44_custom_revolver
- display_name = "M44 Custom Revolver"
- path = /obj/item/weapon/gun/revolver/m44/custom
+ display_name = "Custom M44 Revolver"
+ path = /obj/item/storage/box/loadout/M44_custom_loadout
allowed_origins = USCM_ORIGINS
-/datum/gear/weapon/m1911
- display_name = "M1911 Service Pistol"
- path = /obj/item/storage/box/M1911_loadout
+/datum/gear/weapon/hg45_civilian
+ display_name = "HG 45 'Aguila' Pistol"
+ path = /obj/item/storage/box/loadout/HG45_civilian_loadout
+
+/datum/gear/weapon/hg45_marine
+ display_name = "HG 45 'Marina' Pistol"
+ path = /obj/item/storage/box/loadout/HG45_marine_loadout
+ allowed_origins = USCM_ORIGINS
+
+/datum/gear/weapon/hg44
+ display_name = "HG 44 'Automag' Pistol"
+ path = /obj/item/storage/box/loadout/HG45_marine_loadout
+ allowed_origins = USCM_ORIGINS
+
+/datum/gear/weapon/spearhead
+ display_name = "Spearhead Armoury Revolver"
+ path = /obj/item/storage/box/loadout/Spearhead_loadout
+ allowed_origins = USCM_ORIGINS
+
+/datum/gear/weapon/spearhead_custom
+ display_name = "Custom Spearhead Armoury Revolver"
+ path = /obj/item/storage/box/loadout/Spearhead_loadout/custom
allowed_origins = USCM_ORIGINS
/datum/gear/weapon/m2100_machete
@@ -1096,10 +1124,6 @@ var/global/list/gear_datums_by_name = list()
display_name = "Solar Devils shoulder patch"
path = /obj/item/clothing/accessory/patch/devils
-/datum/gear/misc/patch_uscm/falcon
- display_name = "Falling Falcons shoulder patch"
- path = /obj/item/clothing/accessory/patch/falcon
-
/datum/gear/misc/family_photo
display_name = "Family photo"
path = /obj/item/prop/helmetgarb/family_photo
diff --git a/code/modules/clothing/glasses/night.dm b/code/modules/clothing/glasses/night.dm
index fbb6fcab27..8b3a1551cd 100644
--- a/code/modules/clothing/glasses/night.dm
+++ b/code/modules/clothing/glasses/night.dm
@@ -89,7 +89,7 @@
/obj/item/clothing/glasses/night/m56_goggles
name = "\improper M56 head mounted sight"
gender = NEUTER
- desc = "A headset and goggles system for the M56 Smartgun. Has a low-res short-range imager, allowing for view of terrain."
+ desc = "A headset and goggles system for the M56 Smartgun weapon system. Has a low-res short-range imager, allowing for view of terrain."
icon = 'icons/obj/items/clothing/glasses.dmi'
icon_state = "m56_goggles"
deactive_state = "m56_goggles_0"
diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm
index f6a3297148..e5398bab46 100644
--- a/code/modules/clothing/head/head.dm
+++ b/code/modules/clothing/head/head.dm
@@ -375,7 +375,7 @@
/obj/item/clothing/head/cmcap/flap
name = "\improper USCM expedition cap"
- desc = "It's a cap, with flaps. A patch stitched across the front reads \"USS ALMAYER\"."
+ desc = "A casual cap issued as part of the non-combat uniform. While it only protects from the sun, it's much more comfortable than a helmet. This one comes with flaps to keep the sun off your neck."
icon = 'icons/obj/items/clothing/cm_hats.dmi'
icon_state = "flapcap"
flags_marine_hat = HAT_GARB_OVERLAY
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index a2366692f9..5c063514b4 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -283,6 +283,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/prop/helmetgarb/cartridge = "cartridge",
/obj/item/prop/helmetgarb/prescription_bottle = "prescription_bottle",
/obj/item/prop/helmetgarb/raincover = "raincover",
+ /obj/item/prop/helmetgarb/camocover = "camocover",
/obj/item/prop/helmetgarb/rabbitsfoot = "rabbitsfoot",
/obj/item/prop/helmetgarb/rosary = "helmet_rosary", // This one was already in the game for some reason, but never had an object
/obj/item/prop/helmetgarb/lucky_feather = "lucky_feather",
@@ -294,6 +295,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/prop/helmetgarb/helmet_nvg/cosmetic = HELMET_GARB_RELAY_ICON_STATE,
/obj/item/prop/helmetgarb/helmet_nvg/marsoc = HELMET_GARB_RELAY_ICON_STATE,
/obj/item/prop/helmetgarb/helmet_gasmask = "helmet_gasmask",
+ /obj/item/prop/helmetgarb/helmet_gasmask/upp = "helmet_uppgasmask",
/obj/item/prop/helmetgarb/flair_initech = "flair_initech",
/obj/item/prop/helmetgarb/flair_io = "flair_io",
/obj/item/prop/helmetgarb/flair_peace ="flair_peace_smiley",
@@ -901,8 +903,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
flags_inventory = BLOCKSHARPOBJ
flags_inv_hide = HIDEEARS|HIDETOPHAIR
flags_marine_helmet = HELMET_GARB_OVERLAY
- flags_item = MOB_LOCK_ON_EQUIP
- specialty = "M45 ghillie"
+ specialty = "M10 ghillie"
/obj/item/clothing/head/helmet/marine/CO
name = "\improper M10 pattern commanding officer helmet"
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 1b1ff8d606..a0a39f136e 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -1,7 +1,7 @@
/obj/item/clothing/mask/gas
name = "gas mask"
- desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
+ desc = "A civilian grade, face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
icon_state = "gas_alt"
flags_inventory = COVERMOUTH | COVEREYES | ALLOWINTERNALS | BLOCKGASEFFECT | ALLOWREBREATH | ALLOWCPR
flags_inv_hide = HIDEEARS|HIDEFACE|HIDELOWHAIR
@@ -31,6 +31,18 @@
icon_state = "kutjevo_respirator"
item_state = "kutjevo_respirator"
+/obj/item/clothing/mask/gas/m5
+ name = "\improper M5 standalone gasmask"
+ desc = "The standard service gas mask of the USCM as part of a modernization program meant to replace the need for MOPP gear. This one is the alternative variant meant for Marines not in combat kit."
+ icon_state = "m5_gasmask"
+ item_state = "m5_gasmask"
+
+/obj/item/clothing/mask/gas/upp
+ name = "\improper PMK-63 gasmask"
+ desc = "The Union service mask issued to backline troops not prepared for combat."
+ icon_state = "upp_gasmask"
+ item_state = "upp_gasmask"
+
/obj/item/clothing/mask/gas/pve_mopp
name = "\improper M2 MOPP mask"
desc = "The M2 MOPP mask includes a full covering cowl that securely attaches to the MOPP suit. It is capable of protecting of a variety of radiological and biological threats."
diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm
index 6c5701c1a3..e3a1a3fe8d 100644
--- a/code/modules/clothing/suits/marine_armor.dm
+++ b/code/modules/clothing/suits/marine_armor.dm
@@ -376,7 +376,7 @@
/obj/item/clothing/suit/storage/marine/smartgunner
name = "\improper M56 combat harness"
- desc = "Lightweight vest composed of ballistic micromesh and a ceramic composite chestplate. Also contains the computers, straps, and bracing required for operating the M56 Smartgun itself."
+ desc = "Lightweight vest composed of ballistic micromesh and a ceramic composite chestplate for practical protection, as well as the computers, straps, and armature required for operating the M56 Smartgun itself."
icon_state = "8"
item_state = "armor"
armor_laser = CLOTHING_ARMOR_LOW
@@ -514,6 +514,16 @@
/obj/item/clothing/suit/storage/marine/medium
armor_variation = 6
+/obj/item/clothing/suit/storage/marine/medium/non_spec_ghillie //doesnt have sniper spec shit associated with it
+ name = "\improper M40 pattern ghillie armor"
+ desc = "An older variant of camouflage suit used by snipers and scouts. While cheap to produce and easy to use, this suit of armor doesn't offer same level of stealth as newer M45 with integrated heatsink."
+ icon_state = "ghillie_armor"
+ armor_bio = CLOTHING_ARMOR_MEDIUMHIGH
+ flags_marine_armor = ARMOR_LAMP_OVERLAY
+ specialty = "M40 pattern ghillie"
+ valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_DECOR, ACCESSORY_SLOT_MEDAL)
+ restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND)
+
/obj/item/clothing/suit/storage/marine/light
name = "\improper M3-L pattern light armor"
desc = "A lighter, cut down version of the standard M3 pattern armor. It sacrifices durability for more speed."
diff --git a/code/modules/cm_marines/equipment/guncases.dm b/code/modules/cm_marines/equipment/guncases.dm
index b5c29ef21b..3162cc32e8 100644
--- a/code/modules/cm_marines/equipment/guncases.dm
+++ b/code/modules/cm_marines/equipment/guncases.dm
@@ -24,7 +24,7 @@
//------------
/obj/item/storage/box/guncase/vp78
name = "\improper VP78 pistol case"
- desc = "A gun case containing the VP78. Comes with two magazines."
+ desc = "A gun case containing a VP78. Comes with two magazines."
can_hold = list(/obj/item/weapon/gun/pistol/vp78, /obj/item/ammo_magazine/pistol/vp78)
storage_slots = 3
@@ -36,7 +36,7 @@
//------------
/obj/item/storage/box/guncase/smartpistol
name = "\improper SU-6 pistol case"
- desc = "A gun case containing the SU-6 smart pistol. Comes with a full belt holster."
+ desc = "A gun case containing a SU-6 smart pistol. Comes with a full belt holster."
can_hold = list(/obj/item/storage/belt/gun/smartpistol, /obj/item/weapon/gun/pistol/smart, /obj/item/ammo_magazine/pistol/smart)
storage_slots = 2
@@ -47,7 +47,7 @@
//------------
/obj/item/storage/box/guncase/mou53
name = "\improper MOU53 shotgun case"
- desc = "A gun case containing the MOU53 shotgun. It does come loaded, but you'll still have to find ammunition as you go."
+ desc = "A gun case containing a MOU53 shotgun. It does come loaded, but you'll still have to find ammunition as you go."
storage_slots = 2
can_hold = list(/obj/item/weapon/gun/shotgun/double/mou53, /obj/item/attachable/stock/mou53)
@@ -58,7 +58,7 @@
//------------
/obj/item/storage/box/guncase/lmg
name = "\improper M41AE2 heavy pulse rifle case"
- desc = "A gun case containing the M41AE2 heavy pulse rifle. You can get additional ammunition at requisitions."
+ desc = "A gun case containing a M41AE2 heavy pulse rifle. You can get additional ammunition at requisitions."
storage_slots = 5
can_hold = list(/obj/item/weapon/gun/rifle/lmg, /obj/item/ammo_magazine/rifle/lmg)
@@ -72,7 +72,7 @@
//------------
/obj/item/storage/box/guncase/m41aMK1
name = "\improper M41A pulse rifle MK1 case"
- desc = "A gun case containing the M41A pulse rifle MK1. It can only use proprietary MK1 magazines."
+ desc = "A gun case containing a loaded M41A pulse rifle MK1 and two additional magazines."
storage_slots = 3
can_hold = list(/obj/item/weapon/gun/rifle/m41aMK1, /obj/item/ammo_magazine/rifle/m41aMK1)
@@ -84,7 +84,7 @@
/obj/item/storage/box/guncase/m41aMK1AP
name = "\improper M41A pulse rifle MK1 AP case"
- desc = "A gun case containing the M41A pulse rifle MK1 loaded with AP rounds. It can only use proprietary MK1 magazines."
+ desc = "A gun case containing a M41A pulse rifle MK1 loaded with AP rounds and two additional magazines."
storage_slots = 3
can_hold = list(/obj/item/weapon/gun/rifle/m41aMK1, /obj/item/ammo_magazine/rifle/m41aMK1)
@@ -97,7 +97,7 @@
//M79 grenade launcher
/obj/item/storage/box/guncase/m79
name = "\improper M79 grenade launcher case"
- desc = "A gun case containing the modernized M79 grenade launcher. Comes with 3 baton slugs, 3 hornet shells and 3 star shell grenades."
+ desc = "A gun case containing a modernized M79 grenade launcher. Comes with 3 baton slugs, 3 hornet shells and 3 star shell grenades."
storage_slots = 4
can_hold = list(/obj/item/weapon/gun/launcher/grenade/m81/m79, /obj/item/storage/box/packet)
@@ -111,7 +111,7 @@
//R4T lever action rifle
/obj/item/storage/box/guncase/r4t_scout
name = "\improper R4T lever action rifle case"
- desc = "A gun case containing the R4T lever action rifle, intended for scouting. Comes with an ammunition belt, the optional revolver attachment for it, two boxes of ammunition, a sling, and a stock for the rifle."
+ desc = "A gun case containing a R4T lever action rifle, intended for scouting. Comes with an ammunition belt, the optional revolver attachment for it, two boxes of ammunition, a sling, and a stock for the rifle."
storage_slots = 7
can_hold = list(/obj/item/weapon/gun/lever_action/r4t, /obj/item/attachable/stock/r4t, /obj/item/attachable/magnetic_harness/lever_sling, /obj/item/ammo_magazine/lever_action, /obj/item/ammo_magazine/lever_action/training, /obj/item/storage/belt/shotgun/lever_action, /obj/item/storage/belt/gun/m44/lever_action/attach_holster, /obj/item/device/motiondetector/m717)
@@ -126,7 +126,7 @@
/obj/item/storage/box/guncase/xm88
name = "\improper XM88 heavy rifle case"
- desc = "A gun case containing the XM88 Heavy Rifle, a prototype weapon designed for use against heavily armored infantry targets and light vehicles. Contains an ammunition belt, two boxes of ammunition, the XS-9 Targeting Relay attachment, and the stock for the rifle."
+ desc = "A gun case containing a XM88 Heavy Rifle, a prototype weapon designed for use against heavily armored infantry targets and light vehicles. Contains an ammunition belt, two boxes of ammunition, the XS-9 Targeting Relay attachment, and the stock for the rifle."
storage_slots = 6
can_hold = list(/obj/item/weapon/gun/lever_action/xm88, /obj/item/attachable/stock/xm88, /obj/item/attachable/scope/mini/xm88, /obj/item/ammo_magazine/lever_action/xm88, /obj/item/storage/belt/shotgun/xm88)
@@ -141,7 +141,7 @@
//------------
/obj/item/storage/box/guncase/flamer
name = "\improper M240 incinerator case"
- desc = "A gun case containing the M240A1 incinerator unit. It does come loaded, but you'll still have to find extra tanks as you go."
+ desc = "A gun case containing a M240A1 incinerator unit. It does come loaded, but you'll still have to find extra tanks as you go."
storage_slots = 4
can_hold = list(/obj/item/weapon/gun/flamer, /obj/item/ammo_magazine/flamer_tank, /obj/item/attachable/attached_gun/extinguisher)
@@ -162,7 +162,7 @@
//------------
/obj/item/storage/box/guncase/m56d
name = "\improper M56D heavy machine gun case"
- desc = "A gun case containing the M56D heavy machine gun. You'll need to order resupplies from requisitions or scavenge them on the field. How do they fit all this into a case? Wouldn't you need a crate."
+ desc = "A gun case containing a M56D heavy machine gun. You'll need to order resupplies from requisitions or scavenge them on the field. How do they fit all this into a case? Wouldn't you need a crate."
storage_slots = 8
can_hold = list(/obj/item/device/m56d_gun, /obj/item/ammo_magazine/m56d, /obj/item/device/m56d_post, /obj/item/tool/wrench, /obj/item/tool/screwdriver, /obj/item/ammo_magazine/m56d, /obj/item/pamphlet/skill/machinegunner, /obj/item/storage/belt/marine/m2c)
@@ -179,7 +179,7 @@
//------------
/obj/item/storage/box/guncase/m2c
name = "\improper M2C heavy machine gun case"
- desc = "A gun case containing the M2C heavy machine gun. It doesn't come loaded, but it does have spare ammunition. You'll have to order extras from requisitions."
+ desc = "A gun case containing a M2C heavy machine gun. It doesn't come loaded, but it does have spare ammunition. You'll have to order extras from requisitions."
storage_slots = 7
can_hold = list(/obj/item/pamphlet/skill/machinegunner, /obj/item/device/m2c_gun, /obj/item/ammo_magazine/m2c, /obj/item/storage/belt/marine/m2c, /obj/item/pamphlet/skill/machinegunner)
@@ -195,7 +195,7 @@
//------------
/obj/item/storage/box/guncase/m41a
name = "\improper M41A pulse rifle MK2 case"
- desc = "A gun case containing the M41A pulse rifle MK2."
+ desc = "A gun case containing a M41A pulse rifle MK2."
storage_slots = 5
can_hold = list(/obj/item/weapon/gun/rifle/m41a, /obj/item/ammo_magazine/rifle)
@@ -206,39 +206,50 @@
//------------
-/obj/item/storage/box/guncase/pumpshotgun
- name = "\improper M37A2 Pump Shotgun case"
- desc = "A gun case containing the M37A2 Pump Shotgun."
- icon_state = "guncase_red"
- storage_slots = 4
- can_hold = list(/obj/item/weapon/gun/shotgun/pump, /obj/item/ammo_magazine/shotgun/buckshot, /obj/item/ammo_magazine/shotgun/flechette, /obj/item/ammo_magazine/shotgun/slugs)
+/obj/item/storage/box/guncase/shotguncombat
+ name = "\improper M120 tactical shotgun case"
+ desc = "A gun case containing an unloaded M120 tactical shotgun, two boxes of 12 gauge buckshot, and one box of 12 gauge slug."
+ icon_state = "guncase"
+ storage_slots = 3
+ can_hold = list(/obj/item/weapon/gun/shotgun/combat, /obj/item/ammo_magazine/shotgun/buckshot, /obj/item/ammo_magazine/shotgun/slugs)
+
+/obj/item/storage/box/guncase/shotguncombat/fill_preset_inventory()
+ new /obj/item/weapon/gun/shotgun/combat(src)
+ new /obj/item/ammo_magazine/shotgun/buckshot(src)
+ new /obj/item/ammo_magazine/shotgun/slugs(src)
+
+/obj/item/storage/box/guncase/shotgunpump
+ name = "\improper Ithaca 37 pump-action shotgun case"
+ desc = "A gun case containing an unloaded Ithaca 37 pump-action shotgun, a box of 12 gauge buckshot, and a box of 12 gauge slugs."
+ icon_state = "matebacase"
+ storage_slots = 3
+ can_hold = list(/obj/item/weapon/gun/shotgun/pump, /obj/item/ammo_magazine/shotgun/buckshot, /obj/item/ammo_magazine/shotgun/slugs)
-/obj/item/storage/box/guncase/pumpshotgun/fill_preset_inventory()
+/obj/item/storage/box/guncase/shotgunpump/fill_preset_inventory()
new /obj/item/weapon/gun/shotgun/pump(src)
- for(var/i = 1 to 3)
- var/random_pick = rand(1, 3)
- switch(random_pick)
- if(1)
- new /obj/item/ammo_magazine/shotgun/buckshot(src)
- if(2)
- new /obj/item/ammo_magazine/shotgun/flechette(src)
- if(3)
- new /obj/item/ammo_magazine/shotgun/slugs(src)
-
-/obj/item/storage/box/guncase/pumpshotgun/special
+ new /obj/item/ammo_magazine/shotgun/buckshot(src)
+ new /obj/item/ammo_magazine/shotgun/slugs(src)
+
+
+/obj/item/storage/box/guncase/shotgunpump/special
+ name = "\improper Ithaca 37 pump-action shotgun case"
+ desc = "A gun case containing an unloaded Ithaca 37 pump-action shotgun and one box of 12 gauge USCM Special buckshot."
+ icon_state = "matebacase"
storage_slots = 2
-/obj/item/storage/box/guncase/pumpshotgun/special/fill_preset_inventory()
- new /obj/item/weapon/gun/shotgun/pump/special(src)
+/obj/item/storage/box/guncase/shotgunpump/special/fill_preset_inventory()
+ new /obj/item/weapon/gun/shotgun/pump(src)
new /obj/item/ammo_magazine/shotgun/buckshot/special(src)
+ new /obj/item/storage/pouch/shotgun(src)
+ new /obj/item/storage/large_holster/m37(src)
-/obj/item/storage/box/guncase/mk45_automag
- name = "\improper MK-45 Automagnum case"
- desc = "A gun case containing the MK-45 'High-Power' Automagnum sidearm. While this weapon was rejected as a replacement for the M44 Combat Revolver, it is often back-issued to troops who prefer its powerful bullets over more common sidearms."
+/obj/item/storage/box/guncase/hg45
+ name = "\improper HG 45 pistol case"
+ desc = "A gun case containing a HG 45 pistol."
storage_slots = 6
can_hold = list(/obj/item/weapon/gun/pistol/highpower, /obj/item/ammo_magazine/pistol/highpower)
-/obj/item/storage/box/guncase/mk45_automag/fill_preset_inventory()
+/obj/item/storage/box/guncase/hg45/fill_preset_inventory()
if(prob(30))
new /obj/item/weapon/gun/pistol/highpower(src)
new /obj/item/ammo_magazine/pistol/highpower(src)
@@ -247,19 +258,11 @@
new /obj/item/ammo_magazine/pistol/highpower(src)
new /obj/item/ammo_magazine/pistol/highpower(src)
new /obj/item/ammo_magazine/pistol/highpower(src)
- else
- new /obj/item/weapon/gun/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
- new /obj/item/ammo_magazine/pistol/highpower/black(src)
/obj/item/storage/box/guncase/nsg23_marine
name = "\improper NSG-23 assault rifle case"
- desc = "A gun case containing the NSG 23 assault rifle. While usually seen in the hands of PMCs, this weapon is sometimes issued to USCM personnel."
+ desc = "A gun case containing a NSG 23 assault rifle. While usually seen in the hands of PMCs, this weapon is sometimes issued to USCM personnel."
storage_slots = 6
can_hold = list(/obj/item/weapon/gun/rifle/nsg23/no_lock, /obj/item/ammo_magazine/rifle/nsg23)
@@ -273,7 +276,7 @@
/obj/item/storage/box/guncase/m3717
name = "\improper M37-17 pump shotgun case"
- desc = "A gun case containing the M37-17 pump shotgun. Rarely seen issued to USCM vessels on the edges of inhabited space who need the extra bang for their buck (literally) the M37-17 has. Like this one! Well, if it had the budget for it."
+ desc = "A gun case containing a M37-17 pump shotgun. Rarely seen issued to USCM vessels on the edges of inhabited space who need the extra bang for their buck (literally) the M37-17 has. Like this one! Well, if it had the budget for it."
storage_slots = 4
can_hold = list(/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717, /obj/item/ammo_magazine/shotgun/buckshot)
@@ -285,7 +288,7 @@
/obj/item/storage/box/guncase/m1911
name = "\improper M1911 service pistol case"
- desc = "A gun case containing the M1911 service pistol. It might be three centuries old but it's still a damn good pistol. Back-issue only, though."
+ desc = "A gun case containing a M1911 service pistol. It might be three centuries old but it's still a damn good pistol. Back-issue only, though."
storage_slots = 7
can_hold = list(/obj/item/weapon/gun/pistol/m1911, /obj/item/ammo_magazine/pistol/m1911)
@@ -327,7 +330,7 @@
/obj/item/storage/box/guncase/vulture
name = "\improper M707 anti-materiel rifle case"
- desc = "A gun case containing the M707 \"Vulture\" anti-materiel rifle and its requisite spotting tools."
+ desc = "A gun case containing a M707 \"Vulture\" anti-materiel rifle and its requisite spotting tools."
icon_state = "guncase_blue"
storage_slots = 7
can_hold = list(
@@ -360,24 +363,24 @@
//Handgun case for Military police vendor three mag , a railflashligh and the handgun.
-//88 Mod 4 Combat Pistol
-/obj/item/storage/box/guncase/mod88
- name = "\improper 88 Mod 4 Combat Pistol case"
- desc = "A gun case containing an 88 Mod 4 Combat Pistol."
+//VP70 Combat Pistol
+/obj/item/storage/box/guncase/vp70
+ name = "\improper VP70 Combat Pistol case"
+ desc = "A gun case containing a VP70 Combat Pistol."
storage_slots = 5
- can_hold = list(/obj/item/attachable/flashlight, /obj/item/weapon/gun/pistol/mod88, /obj/item/ammo_magazine/pistol/mod88)
+ can_hold = list(/obj/item/attachable/flashlight, /obj/item/weapon/gun/pistol/vp70, /obj/item/ammo_magazine/pistol/vp70)
-/obj/item/storage/box/guncase/mod88/fill_preset_inventory()
+/obj/item/storage/box/guncase/vp70/fill_preset_inventory()
new /obj/item/attachable/flashlight(src)
- new /obj/item/weapon/gun/pistol/mod88(src)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
- new /obj/item/ammo_magazine/pistol/mod88/normalpoint(src)
+ new /obj/item/weapon/gun/pistol/vp70(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
+ new /obj/item/ammo_magazine/pistol/vp70(src)
//M44 Combat Revolver
/obj/item/storage/box/guncase/m44
name = "\improper M44 Combat Revolver case"
- desc = "A gun case containing an M44 Combat Revolver loaded with marksman ammo."
+ desc = "A gun case containing a M44 Combat Revolver loaded with marksman ammo."
storage_slots = 5
can_hold = list(/obj/item/attachable/flashlight, /obj/item/weapon/gun/revolver/m44, /obj/item/ammo_magazine/revolver)
@@ -391,7 +394,7 @@
//M4A3 Service Pistol
/obj/item/storage/box/guncase/m4a3
name = "\improper M4A3 Service Pistol case"
- desc = "A gun case containing an M4A3 Service Pistol."
+ desc = "A gun case containing a M4A3 Service Pistol."
storage_slots = 5
can_hold = list(/obj/item/attachable/flashlight, /obj/item/weapon/gun/pistol/m4a3, /obj/item/ammo_magazine/pistol)
diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm
index 6058ae93ec..f0172a2858 100644
--- a/code/modules/cm_marines/equipment/kit_boxes.dm
+++ b/code/modules/cm_marines/equipment/kit_boxes.dm
@@ -491,7 +491,7 @@
icon_state = "[initial(icon_state)]_e"
/obj/item/storage/box/kit/cryo_self_defense/fill_preset_inventory()
- new /obj/item/weapon/gun/pistol/mod88/flashlight(src)
+ new /obj/item/weapon/gun/pistol/vp70/flashlight(src)
new /obj/item/attachable/bayonet(src)
new /obj/item/reagent_container/food/snacks/packaged_meal(src, pick("boneless pork ribs", "grilled chicken", "pizza square", "spaghetti chunks", "chicken tender"))
diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm
index c29b4ad5b5..8fcf1a4020 100644
--- a/code/modules/cm_marines/overwatch.dm
+++ b/code/modules/cm_marines/overwatch.dm
@@ -218,6 +218,9 @@
if(DEAD)
mob_state = "Dead"
+ if(mob_state == "Conscious" && (locate(/datum/effects/crit) in marine_human.effects_list))
+ mob_state = "Incapacitated"
+
if(!istype(marine_human.head, /obj/item/clothing/head/helmet/marine))
has_helmet = FALSE
diff --git a/code/modules/cm_tech/implements/ammo_kits.dm b/code/modules/cm_tech/implements/ammo_kits.dm
index bcf267a54c..8cce3da199 100644
--- a/code/modules/cm_tech/implements/ammo_kits.dm
+++ b/code/modules/cm_tech/implements/ammo_kits.dm
@@ -62,7 +62,7 @@
.[/obj/item/ammo_magazine/rifle/m41aMK1] = /obj/item/ammo_magazine/rifle/m41aMK1/incendiary
.[/obj/item/ammo_magazine/pistol] = /obj/item/ammo_magazine/pistol/incendiary
.[/obj/item/ammo_magazine/pistol/vp78] = /obj/item/ammo_magazine/pistol/vp78/incendiary
- .[/obj/item/ammo_magazine/pistol/mod88] = /obj/item/ammo_magazine/pistol/mod88/incendiary
+ .[/obj/item/ammo_magazine/pistol/vp70] = /obj/item/ammo_magazine/pistol/vp70/incendiary
.[/obj/item/ammo_magazine/revolver] = /obj/item/ammo_magazine/revolver/incendiary
/obj/item/storage/box/shotgun
@@ -110,7 +110,7 @@
.[/obj/item/ammo_magazine/rifle/m41aMK1] = /obj/item/ammo_magazine/rifle/m41aMK1/penetrating
.[/obj/item/ammo_magazine/pistol] = /obj/item/ammo_magazine/pistol/penetrating
.[/obj/item/ammo_magazine/pistol/vp78] = /obj/item/ammo_magazine/pistol/vp78/penetrating
- .[/obj/item/ammo_magazine/pistol/mod88] = /obj/item/ammo_magazine/pistol/mod88/penetrating
+ .[/obj/item/ammo_magazine/pistol/vp70] = /obj/item/ammo_magazine/pistol/vp70/penetrating
.[/obj/item/ammo_magazine/revolver] = /obj/item/ammo_magazine/revolver/penetrating
/obj/item/ammo_kit/toxin
@@ -126,5 +126,5 @@
.[/obj/item/ammo_magazine/rifle/m41aMK1] = /obj/item/ammo_magazine/rifle/m41aMK1/toxin
.[/obj/item/ammo_magazine/pistol] = /obj/item/ammo_magazine/pistol/toxin
.[/obj/item/ammo_magazine/pistol/vp78] = /obj/item/ammo_magazine/pistol/vp78/toxin
- .[/obj/item/ammo_magazine/pistol/mod88] = /obj/item/ammo_magazine/pistol/mod88/toxin
+ .[/obj/item/ammo_magazine/pistol/vp70] = /obj/item/ammo_magazine/pistol/vp70/toxin
.[/obj/item/ammo_magazine/revolver] = /obj/item/ammo_magazine/revolver/marksman/toxin
diff --git a/code/modules/fishing/bait/generic.dm b/code/modules/fishing/bait/generic.dm
index 8a8c8698d7..21716406a2 100644
--- a/code/modules/fishing/bait/generic.dm
+++ b/code/modules/fishing/bait/generic.dm
@@ -1,5 +1,7 @@
/obj/item/fish_bait
name = "fish bait"
+ icon = 'icons/obj/items/fishing_atoms.dmi'
+ icon_state = "other_meat"
desc = "A tasty piece of... meat? Whatever it is, fish love this."
var/common_mod = -10
diff --git a/code/modules/fishing/datums/generic.dm b/code/modules/fishing/datums/generic.dm
index 3d2766efba..94a1684513 100644
--- a/code/modules/fishing/datums/generic.dm
+++ b/code/modules/fishing/datums/generic.dm
@@ -2,20 +2,21 @@ GLOBAL_LIST_EMPTY(fishing_loot_tables)
/datum/fish_loot_table
var/list/common_fishable_atoms = list(
- /obj/item/clothing/shoes/leather,
- /obj/item/clothing/shoes/marine,
+ /obj/item/prop/scrap,
+ /obj/item/trash/crushed_cup,
+ /obj/item/trash/c_tube,
+ /obj/item/trash/cigbutt/bcigbutt,
+ /obj/item/trash/cigbutt/cigarbutt
)
var/list/uncommon_fishable_atoms = list(
- /obj/item/cell/high,
- /obj/item/device/multitool
+ /obj/item/reagent_container/food/snacks/fishable/squid/whorl,
+ /obj/item/reagent_container/food/snacks/fishable/crab
)
var/list/rare_fishable_atoms = list(
- /obj/item/reagent_container/food/snacks/packaged_burrito
+ /obj/item/coin/silver
)
var/list/ultra_rare_fishable_atoms = list(
- /obj/item/card/data/clown,
- /obj/item/reagent_container/food/snacks/clownburger,
- /obj/item/reagent_container/pill/ultrazine/unmarked
+ /obj/item/reagent_container/food/snacks/fishable/quadtopus
)
/datum/fish_loot_table/proc/return_caught_fish(common_weight, uncommon_weight, rare_weight, ultra_rare_weight)
diff --git a/code/modules/fishing/props/fishing_pole.dm b/code/modules/fishing/props/fishing_pole.dm
index 3d87a171e3..3782012514 100644
--- a/code/modules/fishing/props/fishing_pole.dm
+++ b/code/modules/fishing/props/fishing_pole.dm
@@ -9,7 +9,7 @@
/obj/structure/prop/fishing/pole_interactive
var/time_to_fish = 30 SECONDS
- var/fishing_success = 'sound/items/bikehorn.ogg'//to-do get a sound effect(s)
+ var/fishing_success = 'sound/items/fulton.ogg'//to-do get a sound effect(s)
var/fishing_start = 'sound/items/fulton.ogg'
var/fishing_failure = 'sound/items/jetpack_beep.ogg'
var/fishing_event = 'sound/items/component_pickup.ogg'
diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm
index 9e2f860228..68cd563f6e 100644
--- a/code/modules/gear_presets/_select_equipment.dm
+++ b/code/modules/gear_presets/_select_equipment.dm
@@ -898,8 +898,8 @@ var/list/rebel_rifles = list(
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/b92fs(new_human), WEAR_IN_BACK)
if(1)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/spearhead(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead(new_human), WEAR_IN_BACK)
if(2)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/highpower(new_human), WEAR_IN_BACK)
@@ -1055,20 +1055,11 @@ var/list/rebel_rifles = list(
)
/datum/equipment_preset/proc/load_upp_shotgun(mob/living/carbon/human/new_human)
- var/random_shotgun = rand(1,3)
- switch(random_shotgun)
- if(1)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23/breacher, WEAR_J_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_R_STORE)
- if(2)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23/breacher/slug, WEAR_J_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavyslug, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavyslug, WEAR_R_STORE)
- if(3)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23/breacher/flechette, WEAR_J_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavyflechette, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavyflechette, WEAR_R_STORE)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_R_STORE)
+
/datum/equipment_preset/proc/add_upp_weapon(mob/living/carbon/human/new_human)
var/random_gun = rand(1,5)
diff --git a/code/modules/gear_presets/cbrn.dm b/code/modules/gear_presets/cbrn.dm
index 98a6b0665e..bcc24c101f 100644
--- a/code/modules/gear_presets/cbrn.dm
+++ b/code/modules/gear_presets/cbrn.dm
@@ -44,7 +44,7 @@
if("flamethrower")
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/flamer/underextinguisher(new_human), WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
@@ -91,7 +91,7 @@
if("flamethrower")
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/flamer/underextinguisher(new_human), WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/flamer_tank(new_human), WEAR_IN_BACK)
@@ -122,7 +122,7 @@
. = ..()
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/medic(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medkit/full_advanced(new_human), WEAR_L_STORE)
diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm
index 91a44328e4..277c21036b 100644
--- a/code/modules/gear_presets/clf.dm
+++ b/code/modules/gear_presets/clf.dm
@@ -455,7 +455,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(new_human), WEAR_EYES)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CLF/cct(new_human), WEAR_L_EAR)
diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm
index 0f5f67e071..c348f63fae 100644
--- a/code/modules/gear_presets/cmb.dm
+++ b/code/modules/gear_presets/cmb.dm
@@ -77,9 +77,9 @@
switch(choice)
if(1 to 6)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/CMB/full/revolver, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/handcuffs/zip, WEAR_IN_BACK)
@@ -111,9 +111,9 @@
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_R_STORE)
if(10)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/CMB/full/revolver, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/handcuffs/zip, WEAR_IN_BACK)
@@ -147,9 +147,9 @@
new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB/marshal, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717, WEAR_J_STORE)
@@ -227,9 +227,9 @@
load_name(new_human)
//backpack
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/security, WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/spearhead, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/autopsy_scanner, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK)
@@ -296,9 +296,9 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/ICC, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/corporate_formal, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/mod88, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/health/ceramic_plate, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/hazardvest/yellow, WEAR_JACKET)
diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm
index 450758c691..16d1b960e0 100644
--- a/code/modules/gear_presets/corpses.dm
+++ b/code/modules/gear_presets/corpses.dm
@@ -356,7 +356,7 @@
else
new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(new_human), WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK)
@@ -786,7 +786,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf, WEAR_FACE)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/full(new_human), WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_L_STORE)
add_random_survivor_equipment(new_human)
@@ -814,7 +814,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88_near_empty, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70_near_empty, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
/datum/equipment_preset/corpse/pmc/goon/lead
@@ -835,7 +835,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88_near_empty, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70_near_empty, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
// Freelancer
diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm
index 1dcb5fa95c..1f4a9d40df 100644
--- a/code/modules/gear_presets/pmc.dm
+++ b/code/modules/gear_presets/pmc.dm
@@ -90,7 +90,7 @@
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
switch(choice)
@@ -229,7 +229,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/taser, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
@@ -1368,7 +1368,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m39/ap, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m39/ap, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large/pmc_m39, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm
index b79df671af..f55ea6f30d 100644
--- a/code/modules/gear_presets/survivors/misc.dm
+++ b/code/modules/gear_presets/survivors/misc.dm
@@ -199,7 +199,7 @@ everything bellow isn't used or out of place.
new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88_near_empty, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70_near_empty, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/corporate/no_lock, WEAR_J_STORE)
diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm
index 5488403e72..ada9398189 100644
--- a/code/modules/gear_presets/upp.dm
+++ b/code/modules/gear_presets/upp.dm
@@ -127,7 +127,10 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/box/m94, WEAR_IN_BACK) //4.25
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
- load_upp_shotgun(new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/shotgun/heavybuck, WEAR_R_STORE)
+
/datum/equipment_preset/upp/soldier/proc/load_upp_double(mob/living/carbon/human/new_human, obj/item/clothing/under/marine/veteran/UPP/UPP)
@@ -135,7 +138,7 @@
var/rifle = prob(50) ? /obj/item/weapon/gun/rifle/type71/dual : /obj/item/weapon/gun/rifle/type71/carbine/dual
new_human.equip_to_slot_or_del(new rifle, WEAR_BACK)
//body
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23/dual, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23, WEAR_J_STORE)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp/full, WEAR_WAIST)
//pockets
@@ -567,7 +570,7 @@
UPP.attach_accessory(new_human, W)
for(var/i in 1 to W.hold.storage_slots)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/dragonsbreath, WEAR_IN_ACCESSORY)
- 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/weapon/gun/shotgun/type23, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/heavy/dragonsbreath, WEAR_IN_JACKET)
//waist
var/uppvetsidearm = prob(50) ? /obj/item/storage/belt/gun/type47/t73 : /obj/item/storage/belt/gun/type47/np92
@@ -2572,7 +2575,7 @@
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, 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/shotgun/type23/dual, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/type23, WEAR_J_STORE)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/shotgun/upp/heavybuck(new_human), WEAR_WAIST)
//limb
diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm
index 82ba128bcd..5e86f81086 100644
--- a/code/modules/gear_presets/uscm.dm
+++ b/code/modules/gear_presets/uscm.dm
@@ -26,7 +26,7 @@
var/ert_squad = FALSE
/datum/equipment_preset/uscm/load_status(mob/living/carbon/human/new_human)
- new_human.nutrition = rand(NUTRITION_VERYLOW, NUTRITION_LOW)
+ new_human.nutrition = NUTRITION_VERYLOW
/datum/equipment_preset/uscm/load_preset(mob/living/carbon/human/new_human, randomise, count_participant)
. = ..()
@@ -108,13 +108,6 @@
minimap_icon = "private"
-/datum/equipment_preset/uscm/pfc/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/pfc/lesser_rank
paygrade = "ME1"
@@ -126,13 +119,6 @@
faction_group = list(FACTION_UPP)
faction = FACTION_UPP
-/datum/equipment_preset/uscm/pfc/upp/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/lightpack/upp
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/pfc/upp/lesser_rank
paygrade = "UE1"
@@ -141,14 +127,6 @@
paygrade = "ME3"
skills = /datum/skills/pfc/recon
-/datum/equipment_preset/uscm/pfc/forecon/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/standard
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/standard
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
-
/datum/equipment_preset/uscm/pfc/forecon/lesser_rank
paygrade = "ME2"
@@ -167,14 +145,6 @@
minimap_icon = "smartgunner"
-/datum/equipment_preset/uscm/sg/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
-
/datum/equipment_preset/uscm/sg/lesser_rank
paygrade = "ME3"
@@ -188,13 +158,6 @@
faction_group = list(FACTION_UPP)
faction = FACTION_UPP
-/datum/equipment_preset/uscm/sg/upp/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/lightpack/upp
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/sg/upp/lesser_rank
paygrade = "UE3"
@@ -203,35 +166,11 @@
paygrade = "ME5"
skills = /datum/skills/smartgunner/recon
-/datum/equipment_preset/uscm/sg/forecon/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/standard
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/standard
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/sg/forecon/lesser_rank
paygrade = "ME4"
//*****************************************************************************************************/
-/datum/equipment_preset/uscm/sg/full
- name = "USCM Squad Smartgunner"
- flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
-
-/datum/equipment_preset/uscm/sg/full/load_gear(mob/living/carbon/human/new_human)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/specrag(new_human), WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles/no_nightvision(new_human), WEAR_EYES)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/full(new_human), WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
-
-/datum/equipment_preset/uscm/sg/full/load_status(mob/living/carbon/human/new_human)
- return //No cryo munchies
-
/datum/equipment_preset/uscm/rto
name = "USCM Radio Telephone Operator"
flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE
@@ -245,13 +184,6 @@
minimap_icon = "rto"
-/datum/equipment_preset/uscm/rto/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/rto/lesser_rank
paygrade = "ME3"
@@ -305,7 +237,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/tanker(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
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/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/tanker(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/tools/tank(new_human), WEAR_R_STORE)
@@ -377,14 +309,6 @@
minimap_icon = "spec"
-/datum/equipment_preset/uscm/spec/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/specrag(new_human), WEAR_HEAD)
-
/datum/equipment_preset/uscm/spec/cryo
name = "USCM Cryo Squad Weapons Specialist"
auto_squad_name = SQUAD_MARINE_CRYO
@@ -435,13 +359,6 @@
utility_under = list(/obj/item/clothing/under/marine/medic)
-/datum/equipment_preset/uscm/medic/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/medic
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/medic
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/medic/lesser_rank
paygrade = "ME3"
@@ -454,13 +371,6 @@
faction_group = list(FACTION_UPP)
faction = FACTION_UPP
-/datum/equipment_preset/uscm/medic/upp/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/lightpack/upp
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/medic/upp
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/medic/upp/lesser_rank
paygrade = "UE3"
@@ -470,13 +380,6 @@
paygrade = "ME5"
skills = /datum/skills/combat_medic/recon
-/datum/equipment_preset/uscm/medic/forecon/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/medic/standard
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/medic/standard
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/medic/forecon/lesser_rank
paygrade = "ME4"
@@ -494,13 +397,6 @@
skills = /datum/skills/tl
minimap_icon = "tl"
-/datum/equipment_preset/uscm/tl/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/tl/upp
name = "UPP Squad Sergeant"
paygrade = "UE5"
@@ -509,13 +405,6 @@
faction_group = list(FACTION_UPP)
faction = FACTION_UPP
-/datum/equipment_preset/uscm/tl/upp/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/lightpack/upp
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/tl/forecon
name = "FORECON Assistant Squad Leader"
assignment = "Assistant Squad Leader"
@@ -523,13 +412,6 @@
role_comm_title = "aSL"
skills = /datum/skills/tl/recon
-/datum/equipment_preset/uscm/tl/forecon/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/standard
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/standard
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/*****************************************************************************************************/
/datum/equipment_preset/uscm/engineer
@@ -577,13 +459,6 @@
minimap_icon = "leader"
-/datum/equipment_preset/uscm/leader/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/leader/lesser_rank
paygrade = "ME6"
@@ -595,13 +470,6 @@
faction_group = list(FACTION_UPP)
faction = FACTION_UPP
-/datum/equipment_preset/uscm/leader/upp/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/lightpack/upp
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/leader/upp/lesser_rank
paygrade = "UE6"
@@ -611,13 +479,6 @@
paygrade = "ME8"
role_comm_title = "SL"
-/datum/equipment_preset/uscm/leader/forecon/load_gear(mob/living/carbon/human/new_human)
- var/back_item = /obj/item/storage/backpack/marine/satchel/standard
- if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
- back_item = /obj/item/storage/backpack/marine/standard
-
- new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-
/datum/equipment_preset/uscm/leader/forecon/lesser_rank
paygrade = "ME7"
@@ -794,20 +655,16 @@
new_human.equip_to_slot_or_del(new new_mask, WEAR_FACE)
/datum/equipment_preset/uscm/smartgunner_equipped/random/spawn_marine_sidearm(mob/living/carbon/human/new_human)
- var/sidearm = pick("m4a3", "mod88", "vp78", "m44")
+ var/sidearm = pick("m4a3", "vp70", "m44")
switch(sidearm)
if("m4a3")
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m4a3(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol(new_human), WEAR_IN_ACCESSORY)
- if("mod88")
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- if("vp78")
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp78(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp78(new_human), WEAR_IN_ACCESSORY)
+ if("vp70")
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
if("m44")
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/m44(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver(new_human), WEAR_IN_ACCESSORY)
diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm
index 5f7c40c016..690400ee48 100644
--- a/code/modules/gear_presets/uscm_event.dm
+++ b/code/modules/gear_presets/uscm_event.dm
@@ -293,7 +293,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/mp/provost/senior(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/provost(new_human), WEAR_JACKET)
if(new_human.disabilities & NEARSIGHTED)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES)
diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm
index 108aca26d9..619b88a1b6 100644
--- a/code/modules/gear_presets/uscm_police.dm
+++ b/code/modules/gear_presets/uscm_police.dm
@@ -48,9 +48,9 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/mpsec(new_human), WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster(new_human), WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/full(new_human), WEAR_WAIST)
@@ -110,9 +110,9 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/mpsec(new_human), WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster(new_human), WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/full(new_human), WEAR_WAIST)
@@ -172,9 +172,9 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/mpsec(new_human), WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster(new_human), WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/mod88(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/mod88/normalpoint(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/vp70(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/full(new_human), WEAR_WAIST)
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 4a4fb757b1..e6c37a7bbd 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -564,7 +564,7 @@
name = "USCM Platoon Commander (PltCo)"
flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE
- idtype = /obj/item/card/id/silver
+ idtype = /obj/item/card/id/dogtag
assignment = JOB_SO
rank = JOB_SO
paygrade = "MO2"
@@ -579,15 +579,33 @@
. = ..()
access = get_access(access_list)
-/datum/equipment_preset/uscm_ship/so/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/uscm_ship/so/load_status(mob/living/carbon/human/new_human, client/mob_client)
+ . = ..()
+ new_human.nutrition = NUTRITION_VERYLOW
+ if(!new_human.client)
+ return
+
+ add_verb(new_human.client, /client/proc/commander_rename_platoon)
+
+/datum/equipment_preset/uscm_ship/so/lesser_rank
+ paygrade = "MO1"
+
+/datum/equipment_preset/uscm_ship/so/equipped
+ name = "USCM Platoon Commander (Equipped)"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+/datum/equipment_preset/uscm_ship/so/equipped/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_NORMAL
+
+/datum/equipment_preset/uscm_ship/so/equipped/load_gear(mob/living/carbon/human/new_human)
var/back_item = /obj/item/storage/backpack/satchel
if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
back_item = /obj/item/storage/backpack/marine
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/bridge(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_L_STORE)
@@ -614,10 +632,20 @@
faction = FACTION_UPP
access_list = ACCESS_LIST_UPP_PLATOON
-/datum/equipment_preset/uscm_ship/so/upp/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/uscm_ship/so/upp/lesser_rank
+ paygrade = "UO1"
+
+/datum/equipment_preset/uscm_ship/so/upp/equipped
+ name = "UPP Platoon Commander (Equipped)"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+/datum/equipment_preset/uscm_ship/so/upp/equipped/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_NORMAL
+
+/datum/equipment_preset/uscm_ship/so/upp/equipped/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/officer(new_human), WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/peaked(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp(new_human), WEAR_BACK)
@@ -778,7 +806,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/pilot(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
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/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/pilot(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
@@ -871,7 +899,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/pilot/dcc(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
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/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/vest/dcc(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_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/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm
index 81ea9b8f6a..29b2be28ce 100644
--- a/code/modules/gear_presets/wo.dm
+++ b/code/modules/gear_presets/wo.dm
@@ -309,7 +309,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/engineer, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black, WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new back_item, WEAR_BACK)
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/device/binoculars/range, WEAR_IN_R_STORE)
diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm
index 5160f0bf31..53bdaa4041 100644
--- a/code/modules/gear_presets/wy_goons.dm
+++ b/code/modules/gear_presets/wy_goons.dm
@@ -79,7 +79,7 @@
new_human.equip_to_slot_or_del(new /obj/item/handcuffs/zip, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/corporate, WEAR_J_STORE)
@@ -116,7 +116,7 @@
new_human.equip_to_slot_or_del(new /obj/item/handcuffs/zip, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/nsg23, WEAR_J_STORE)
@@ -150,7 +150,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full, WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/vp70, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/surgical_line, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_R_STORE)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 4ea2f35aa6..2a419eddf1 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -399,23 +399,6 @@
bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10)
recalculate_move_delay = TRUE
-
-/mob/living/carbon/show_inv(mob/living/carbon/user as mob)
- user.set_interaction(src)
- var/dat = {"
-
[name]
-
-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
-
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank) && !( internal )) ? " Set Internal" : "")]
-
[(handcuffed ? "Handcuffed" : "Not Handcuffed")]
-
[(internal ? "Remove Internal" : "")]
-
Refresh
-
Close
-
"}
- show_browser(user, dat, name, "mob[name]")
-
/**
* Called by [/mob/dead/observer/proc/do_observe] when a carbon mob is observed by a ghost with [/datum/preferences/var/auto_observe] enabled.
*
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 350bcec3e8..1496ce2595 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -13,7 +13,7 @@
create_reagents(1000)
if(!real_name || !name)
change_real_name(src, "unknown")
-
+ AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human, should_strip))
. = ..()
prev_gender = gender // Debug for plural genders
@@ -270,49 +270,6 @@
return TRUE
return FALSE
-
-
-/mob/living/carbon/human/show_inv(mob/living/user)
- if(ismaintdrone(user))
- return
- var/obj/item/clothing/under/suit = null
- if(istype(w_uniform, /obj/item/clothing/under))
- suit = w_uniform
-
- user.set_interaction(src)
- var/dat = {"
-
[name]
-
-
(Exo)Suit: [(wear_suit ? wear_suit : "Nothing")]
-
Suit Storage: [(s_store ? s_store : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(s_store, /obj/item/tank) && !( internal )) ? " Set Internal" : "")]
-
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank) && !( internal )) ? " Set Internal" : "")]
-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
-
Gloves: [(gloves ? gloves : "Nothing")]
-
Eyes: [(glasses ? glasses : "Nothing")]
-
Left Ear: [(wear_l_ear ? wear_l_ear : "Nothing")]
-
Right Ear: [(wear_r_ear ? wear_r_ear : "Nothing")]
-
Head: [(head ? head : "Nothing")]
-
Shoes: [(shoes ? shoes : "Nothing")]
-
Belt: [(belt ? belt : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/tank) && !internal) ? " Set Internal" : "")]
-
Uniform: [(w_uniform ? w_uniform : "Nothing")] [(suit) ? ((suit.has_sensor == UNIFORM_HAS_SENSORS) ? " Sensors" : "") : null]
-
ID: [(wear_id ? wear_id : "Nothing")]
-
Left Pocket: [(l_store ? l_store : "Nothing")]
-
Right Pocket: [(r_store ? r_store : "Nothing")]
-
- [handcuffed ? "
Handcuffed" : ""]
- [legcuffed ? "
Legcuffed" : ""]
- [suit && LAZYLEN(suit.accessories) ? "
Remove Accessory" : ""]
- [internal ? "
Remove Internal" : ""]
- [istype(wear_id, /obj/item/card/id/dogtag) ? "
Retrieve Info Tag" : ""]
-
Remove Splints
-
-
Refresh
-
Close
-
"}
- show_browser(user, dat, name, "mob[name]")
-
/**
* Handles any storage containers that the human is looking inside when auto-observed.
*/
@@ -428,9 +385,6 @@
/mob/living/carbon/human/Topic(href, href_list)
- if(href_list["refresh"])
- if(interactee&&(in_range(src, usr)))
- show_inv(interactee)
if(href_list["mach_close"])
var/t1 = text("window=[]", href_list["mach_close"])
@@ -475,76 +429,6 @@
what = usr.get_active_hand()
usr.stripPanelEquip(what,src,slot)
- if(href_list["internal"])
-
- if(!usr.action_busy && !usr.is_mob_incapacitated() && Adjacent(usr))
- attack_log += text("\[[time_stamp()]\] Has had their internals toggled by [key_name(usr)]")
- usr.attack_log += text("\[[time_stamp()]\] Attempted to toggle [key_name(src)]'s' internals")
- if(internal)
- usr.visible_message(SPAN_DANGER("[usr] is trying to disable [src]'s internals"), null, null, 3)
- else
- usr.visible_message(SPAN_DANGER("[usr] is trying to enable [src]'s internals."), null, null, 3)
-
- if(do_after(usr, POCKET_STRIP_DELAY, INTERRUPT_ALL, BUSY_ICON_GENERIC, src, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
- if(internal)
- internal.add_fingerprint(usr)
- internal = null
- visible_message("[src] is no longer running on internals.", null, null, 1)
- else
- if(istype(wear_mask, /obj/item/clothing/mask))
- if(istype(back, /obj/item/tank))
- internal = back
- else if(istype(s_store, /obj/item/tank))
- internal = s_store
- else if(istype(belt, /obj/item/tank))
- internal = belt
- if(internal)
- visible_message(SPAN_NOTICE("[src] is now running on internals."), null, null, 1)
- internal.add_fingerprint(usr)
-
- // Update strip window
- if(usr.interactee == src && Adjacent(usr))
- show_inv(usr)
-
-
- if(href_list["splints"])
- if(!usr.action_busy && !usr.is_mob_incapacitated() && Adjacent(usr))
- if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (stat == DEAD || health < HEALTH_THRESHOLD_CRIT) && !get_target_lock(usr.faction_group))
- to_chat(usr, SPAN_WARNING("You can't strip a crit or dead member of another faction!"))
- return
- attack_log += text("\[[time_stamp()]\] Has had their splints removed by [key_name(usr)]")
- usr.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(src)]'s' splints ")
- remove_splints(usr)
-
- if(href_list["tie"])
- if(!usr.action_busy && !usr.is_mob_incapacitated() && Adjacent(usr))
- if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (stat == DEAD || health < HEALTH_THRESHOLD_CRIT) && !get_target_lock(usr.faction_group))
- to_chat(usr, SPAN_WARNING("You can't strip a crit or dead member of another faction!"))
- return
- if(w_uniform && istype(w_uniform, /obj/item/clothing))
- var/obj/item/clothing/under/U = w_uniform
- if(!LAZYLEN(U.accessories))
- return FALSE
- var/obj/item/clothing/accessory/A = LAZYACCESS(U.accessories, 1)
- if(LAZYLEN(U.accessories) > 1)
- A = tgui_input_list(usr, "Select an accessory to remove from [U]", "Remove accessory", U.accessories)
- if(!istype(A))
- return
- attack_log += text("\[[time_stamp()]\] Has had their accessory ([A]) removed by [key_name(usr)]")
- usr.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(src)]'s' accessory ([A])")
- if(istype(A, /obj/item/clothing/accessory/holobadge) || istype(A, /obj/item/clothing/accessory/medal))
- visible_message(SPAN_DANGER("[usr] tears off \the [A] from [src]'s [U]!"), null, null, 5)
- if(U == w_uniform)
- U.remove_accessory(usr, A)
- else
- if(HAS_TRAIT(src, TRAIT_UNSTRIPPABLE) && !is_mob_incapacitated()) //Can't strip the unstrippable!
- to_chat(usr, SPAN_DANGER("[src] has an unbreakable grip on their equipment!"))
- return
- visible_message(SPAN_DANGER("[usr] is trying to take off \a [A] from [src]'s [U]!"), null, null, 5)
- if(do_after(usr, get_strip_delay(usr, src), INTERRUPT_ALL, BUSY_ICON_GENERIC, src, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
- if(U == w_uniform)
- U.remove_accessory(usr, A)
-
if(href_list["sensor"])
if(!usr.action_busy && !usr.is_mob_incapacitated() && Adjacent(usr))
if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (stat == DEAD || health < HEALTH_THRESHOLD_CRIT) && !get_target_lock(usr.faction_group))
@@ -978,6 +862,7 @@
nutrition -= 40
apply_damage(-3, TOX)
addtimer(VARSET_CALLBACK(src, lastpuke, FALSE), 35 SECONDS)
+ reagents.remove_any(rand(15, 30))
/mob/living/carbon/human/proc/get_visible_gender()
if(wear_suit && wear_suit.flags_inv_hide & HIDEJUMPSUIT && ((head && head.flags_inv_hide & HIDEMASK) || wear_mask))
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index fa35cb1fe9..a1c3b5a4d0 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -22,7 +22,7 @@
return 1
// If unconcious with oxygen damage, do CPR. If dead, we do CPR
- if(!(stat == UNCONSCIOUS && getOxyLoss() > 0) && !(stat == DEAD))
+ if(!((stat == UNCONSCIOUS || (locate(/datum/effects/crit) in effects_list)) && getOxyLoss() > 0) && !(stat == DEAD))
help_shake_act(attacking_mob)
return 1
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
new file mode 100644
index 0000000000..fbf6fb5ce4
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -0,0 +1,272 @@
+GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
+ /datum/strippable_item/mob_item_slot/head,
+ /datum/strippable_item/mob_item_slot/back,
+ /datum/strippable_item/mob_item_slot/mask,
+ /datum/strippable_item/mob_item_slot/eyes,
+ /datum/strippable_item/mob_item_slot/r_ear,
+ /datum/strippable_item/mob_item_slot/l_ear,
+ /datum/strippable_item/mob_item_slot/jumpsuit,
+ /datum/strippable_item/mob_item_slot/suit,
+ /datum/strippable_item/mob_item_slot/gloves,
+ /datum/strippable_item/mob_item_slot/feet,
+ /datum/strippable_item/mob_item_slot/suit_storage,
+ /datum/strippable_item/mob_item_slot/id,
+ /datum/strippable_item/mob_item_slot/belt,
+ /datum/strippable_item/mob_item_slot/pocket/left,
+ /datum/strippable_item/mob_item_slot/pocket/right,
+ /datum/strippable_item/mob_item_slot/hand/left,
+ /datum/strippable_item/mob_item_slot/hand/right,
+ /datum/strippable_item/mob_item_slot/cuffs/handcuffs,
+ /datum/strippable_item/mob_item_slot/cuffs/legcuffs,
+)))
+
+/mob/living/carbon/human/proc/should_strip(mob/user)
+ if (user.pulling == src && user.grab_level == GRAB_AGGRESSIVE && (user.a_intent & INTENT_GRAB))
+ return FALSE //to not interfere with fireman carry
+ return TRUE
+
+/datum/strippable_item/mob_item_slot/head
+ key = STRIPPABLE_ITEM_HEAD
+ item_slot = SLOT_HEAD
+
+/datum/strippable_item/mob_item_slot/back
+ key = STRIPPABLE_ITEM_BACK
+ item_slot = SLOT_BACK
+
+/datum/strippable_item/mob_item_slot/mask
+ key = STRIPPABLE_ITEM_MASK
+ item_slot = SLOT_FACE
+
+/datum/strippable_item/mob_item_slot/mask/get_alternate_action(atom/source, mob/user)
+ var/obj/item/clothing/mask = get_item(source)
+ if (!istype(mask))
+ return
+ if (!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcehuman = source
+ if (istype(sourcehuman.s_store, /obj/item/tank))
+ return "toggle_internals"
+ if (istype(sourcehuman.back, /obj/item/tank))
+ return "toggle_internals"
+ if (istype(sourcehuman.belt, /obj/item/tank))
+ return "toggle_internals"
+ return
+
+/datum/strippable_item/mob_item_slot/mask/alternate_action(atom/source, mob/user)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcehuman = source
+ if(user.action_busy || user.is_mob_incapacitated() || !source.Adjacent(user))
+ return
+ if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (sourcehuman.stat == DEAD || sourcehuman.health < HEALTH_THRESHOLD_CRIT) && !sourcehuman.get_target_lock(user.faction_group))
+ to_chat(user, SPAN_WARNING("You can't toggle internals of a crit or dead member of another faction!"))
+ return
+
+ sourcehuman.attack_log += text("\[[time_stamp()]\] Has had their internals toggled by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] Attempted to toggle [key_name(src)]'s' internals")
+ if(sourcehuman.internal)
+ user.visible_message(SPAN_DANGER("[user] is trying to disable [sourcehuman]'s internals"), null, null, 3)
+ else
+ user.visible_message(SPAN_DANGER("[user] is trying to enable [sourcehuman]'s internals."), null, null, 3)
+
+ if(!do_after(user, POCKET_STRIP_DELAY, INTERRUPT_ALL, BUSY_ICON_GENERIC, sourcehuman, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
+ return
+
+ if(sourcehuman.internal)
+ sourcehuman.internal.add_fingerprint(user)
+ sourcehuman.internal = null
+ sourcehuman.visible_message("[sourcehuman] is no longer running on internals.", max_distance = 1)
+ return
+
+ if(!istype(sourcehuman.wear_mask, /obj/item/clothing/mask))
+ return
+
+ if(istype(sourcehuman.back, /obj/item/tank))
+ sourcehuman.internal = sourcehuman.back
+ else if(istype(sourcehuman.s_store, /obj/item/tank))
+ sourcehuman.internal = sourcehuman.s_store
+ else if(istype(sourcehuman.belt, /obj/item/tank))
+ sourcehuman.internal = sourcehuman.belt
+
+ if(!sourcehuman.internal)
+ return
+
+ sourcehuman.visible_message(SPAN_NOTICE("[sourcehuman] is now running on internals."), max_distance = 1)
+ sourcehuman.internal.add_fingerprint(user)
+
+/datum/strippable_item/mob_item_slot/eyes
+ key = STRIPPABLE_ITEM_EYES
+ item_slot = SLOT_EYES
+
+/datum/strippable_item/mob_item_slot/r_ear
+ key = STRIPPABLE_ITEM_R_EAR
+ item_slot = SLOT_EAR
+
+/datum/strippable_item/mob_item_slot/l_ear
+ key = STRIPPABLE_ITEM_L_EAR
+ item_slot = SLOT_EAR
+
+/datum/strippable_item/mob_item_slot/jumpsuit
+ key = STRIPPABLE_ITEM_JUMPSUIT
+ item_slot = SLOT_ICLOTHING
+
+/datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user)
+ var/obj/item/clothing/under/uniform = get_item(source)
+ if (!istype(uniform))
+ return null
+ return uniform?.accessories ? "remove_accessory" : null
+
+/datum/strippable_item/mob_item_slot/jumpsuit/alternate_action(atom/source, mob/user)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcemob = source
+ if(user.action_busy || user.is_mob_incapacitated() || !source.Adjacent(user))
+ return
+ if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (sourcemob.stat == DEAD || sourcemob.health < HEALTH_THRESHOLD_CRIT) && !sourcemob.get_target_lock(user.faction_group))
+ to_chat(user, SPAN_WARNING("You can't strip a crit or dead member of another faction!"))
+ return
+ if(!sourcemob.w_uniform || !istype(sourcemob.w_uniform, /obj/item/clothing))
+ return
+
+ var/obj/item/clothing/under/uniform = sourcemob.w_uniform
+ if(!LAZYLEN(uniform.accessories))
+ return FALSE
+ var/obj/item/clothing/accessory/accessory = LAZYACCESS(uniform.accessories, 1)
+ if(LAZYLEN(uniform.accessories) > 1)
+ accessory = tgui_input_list(user, "Select an accessory to remove from [uniform]", "Remove accessory", uniform.accessories)
+ if(!istype(accessory))
+ return
+ sourcemob.attack_log += text("\[[time_stamp()]\] Has had their accessory ([accessory]) removed by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(sourcemob)]'s' accessory ([accessory])")
+ if(istype(accessory, /obj/item/clothing/accessory/holobadge) || istype(accessory, /obj/item/clothing/accessory/medal))
+ sourcemob.visible_message(SPAN_DANGER("[user] tears off [accessory] from [sourcemob]'s [uniform]!"), null, null, 5)
+ if(uniform == sourcemob.w_uniform)
+ uniform.remove_accessory(user, accessory)
+ return
+
+ if(HAS_TRAIT(sourcemob, TRAIT_UNSTRIPPABLE) && !sourcemob.is_mob_incapacitated()) //Can't strip the unstrippable!
+ to_chat(user, SPAN_DANGER("[sourcemob] has an unbreakable grip on their equipment!"))
+ return
+ sourcemob.visible_message(SPAN_DANGER("[user] is trying to take off \a [accessory] from [source]'s [uniform]!"), null, null, 5)
+
+ if(!do_after(user, sourcemob.get_strip_delay(user, sourcemob), INTERRUPT_ALL, BUSY_ICON_GENERIC, sourcemob, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
+ return
+
+ if(uniform != sourcemob.w_uniform)
+ return
+
+ uniform.remove_accessory(user, accessory)
+
+/datum/strippable_item/mob_item_slot/suit
+ key = STRIPPABLE_ITEM_SUIT
+ item_slot = SLOT_OCLOTHING
+
+/datum/strippable_item/mob_item_slot/suit/has_no_item_alt_action()
+ return TRUE
+
+/datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcemob = source
+ for(var/bodypart in list("l_leg","r_leg","l_arm","r_arm","r_hand","l_hand","r_foot","l_foot","chest","head","groin"))
+ var/obj/limb/limb = sourcemob.get_limb(bodypart)
+ if(limb && (limb.status & LIMB_SPLINTED))
+ return "remove_splints"
+ return
+
+/datum/strippable_item/mob_item_slot/suit/alternate_action(atom/source, mob/user)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcemob = source
+ if(user.action_busy || user.is_mob_incapacitated() || !source.Adjacent(user))
+ return
+ if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (sourcemob.stat == DEAD || sourcemob.health < HEALTH_THRESHOLD_CRIT) && !sourcemob.get_target_lock(user.faction_group))
+ to_chat(user, SPAN_WARNING("You can't remove splints of a crit or dead member of another faction!"))
+ return
+ sourcemob.attack_log += text("\[[time_stamp()]\] Has had their splints removed by [key_name(user)]")
+ user.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(sourcemob)]'s' splints ")
+ sourcemob.remove_splints(user)
+
+/datum/strippable_item/mob_item_slot/gloves
+ key = STRIPPABLE_ITEM_GLOVES
+ item_slot = SLOT_HANDS
+
+/datum/strippable_item/mob_item_slot/feet
+ key = STRIPPABLE_ITEM_FEET
+ item_slot = SLOT_FEET
+
+/datum/strippable_item/mob_item_slot/suit_storage
+ key = STRIPPABLE_ITEM_SUIT_STORAGE
+ item_slot = SLOT_SUIT_STORE
+
+/datum/strippable_item/mob_item_slot/id
+ key = STRIPPABLE_ITEM_ID
+ item_slot = SLOT_ID
+
+/datum/strippable_item/mob_item_slot/id/get_alternate_action(atom/source, mob/user)
+ var/obj/item/card/id/dogtag/tag = get_item(source)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcemob = source
+ if (!istype(tag))
+ return
+ if (!sourcemob.undefibbable && (!skillcheck(user, SKILL_POLICE, SKILL_POLICE_SKILLED) || sourcemob.stat != DEAD))
+ return
+ return tag.dogtag_taken ? null : "retrieve_tag"
+
+/datum/strippable_item/mob_item_slot/id/alternate_action(atom/source, mob/user)
+ if(!ishuman(source))
+ return
+ var/mob/living/carbon/human/sourcemob = source
+ if(user.action_busy || user.is_mob_incapacitated() || !source.Adjacent(user))
+ return
+ if(MODE_HAS_TOGGLEABLE_FLAG(MODE_NO_STRIPDRAG_ENEMY) && (sourcemob.stat == DEAD || sourcemob.health < HEALTH_THRESHOLD_CRIT) && !sourcemob.get_target_lock(user.faction_group))
+ to_chat(user, SPAN_WARNING("You can't strip a crit or dead member of another faction!"))
+ return
+ if(!istype(sourcemob.wear_id, /obj/item/card/id/dogtag))
+ return
+ if (!sourcemob.undefibbable && !skillcheck(user, SKILL_POLICE, SKILL_POLICE_SKILLED))
+ return
+ var/obj/item/card/id/dogtag/tag = sourcemob.wear_id
+ if(tag.dogtag_taken)
+ to_chat(user, SPAN_WARNING("Someone's already taken [sourcemob]'s information tag."))
+ return
+
+ if(sourcemob.stat != DEAD)
+ to_chat(user, SPAN_WARNING("You can't take a dogtag's information tag while its owner is alive."))
+ return
+
+ to_chat(user, SPAN_NOTICE("You take [sourcemob]'s information tag, leaving the ID tag"))
+ tag.dogtag_taken = TRUE
+ tag.icon_state = "dogtag_taken"
+ var/obj/item/dogtag/newtag = new(sourcemob.loc)
+ newtag.fallen_names = list(tag.registered_name)
+ newtag.fallen_assgns = list(tag.assignment)
+ newtag.fallen_blood_types = list(tag.blood_type)
+ user.put_in_hands(newtag)
+
+
+
+/datum/strippable_item/mob_item_slot/belt
+ key = STRIPPABLE_ITEM_BELT
+ item_slot = SLOT_WAIST
+
+/datum/strippable_item/mob_item_slot/pocket/left
+ key = STRIPPABLE_ITEM_LPOCKET
+ item_slot = SLOT_STORE
+
+/datum/strippable_item/mob_item_slot/pocket/right
+ key = STRIPPABLE_ITEM_RPOCKET
+ item_slot = SLOT_STORE
+
+/datum/strippable_item/mob_item_slot/hand/left
+ key = STRIPPABLE_ITEM_LHAND
+
+/datum/strippable_item/mob_item_slot/hand/right
+ key = STRIPPABLE_ITEM_RHAND
+
+/datum/strippable_item/mob_item_slot/cuffs/handcuffs
+ key = STRIPPABLE_ITEM_HANDCUFFS
+
+/datum/strippable_item/mob_item_slot/cuffs/legcuffs
+ key = STRIPPABLE_ITEM_LEGCUFFS
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 22deabce45..871a2cd376 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -504,68 +504,6 @@
/// Final result is overall delay * speed multiplier
return target_delay * user_speed
-/mob/living/carbon/human/stripPanelUnequip(obj/item/interact_item, mob/target_mob, slot_to_process)
- if(HAS_TRAIT(target_mob, TRAIT_UNSTRIPPABLE) && !target_mob.is_mob_incapacitated()) //Can't strip the unstrippable!
- to_chat(src, SPAN_DANGER("[target_mob] has an unbreakable grip on their equipment!"))
- return
- if(interact_item.flags_item & ITEM_ABSTRACT)
- return
- if(interact_item.flags_item & NODROP)
- to_chat(src, SPAN_WARNING("You can't remove \the [interact_item.name], it appears to be stuck!"))
- return
- if(interact_item.flags_inventory & CANTSTRIP)
- to_chat(src, SPAN_WARNING("You're having difficulty removing \the [interact_item.name]."))
- return
- target_mob.attack_log += "\[[time_stamp()]\] Has had their [interact_item.name] ([slot_to_process]) attempted to be removed by [key_name(src)]"
- attack_log += "\[[time_stamp()]\] Attempted to remove [key_name(target_mob)]'s [interact_item.name] ([slot_to_process])"
- log_interact(src, target_mob, "[key_name(src)] tried to remove [key_name(target_mob)]'s [interact_item.name] ([slot_to_process]).")
-
- src.visible_message(SPAN_DANGER("[src] tries to remove [target_mob]'s [interact_item.name]."), \
- SPAN_DANGER("You are trying to remove [target_mob]'s [interact_item.name]."), null, 5)
- interact_item.add_fingerprint(src)
- if(do_after(src, get_strip_delay(src, target_mob), INTERRUPT_ALL, BUSY_ICON_GENERIC, target_mob, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
- if(interact_item && Adjacent(target_mob) && interact_item == target_mob.get_item_by_slot(slot_to_process))
- target_mob.drop_inv_item_on_ground(interact_item)
- log_interact(src, target_mob, "[key_name(src)] removed [key_name(target_mob)]'s [interact_item.name] ([slot_to_process]) successfully.")
-
- if(target_mob)
- if(interactee == target_mob && Adjacent(target_mob))
- target_mob.show_inv(src)
-
-
-/mob/living/carbon/human/stripPanelEquip(obj/item/interact_item, mob/target_mob, slot_to_process)
- if(HAS_TRAIT(target_mob, TRAIT_UNSTRIPPABLE) && !target_mob.is_mob_incapacitated())
- to_chat(src, SPAN_DANGER("[target_mob] is too strong to force [interact_item.name] onto them!"))
- return
- if(interact_item && !(interact_item.flags_item & ITEM_ABSTRACT))
- if(interact_item.flags_item & NODROP)
- to_chat(src, SPAN_WARNING("You can't put \the [interact_item.name] on [target_mob], it's stuck to your hand!"))
- return
- if(interact_item.flags_inventory & CANTSTRIP)
- to_chat(src, SPAN_WARNING("You're having difficulty putting \the [interact_item.name] on [target_mob]."))
- return
- if(interact_item.flags_item & WIELDED)
- interact_item.unwield(src)
- if(!interact_item.mob_can_equip(target_mob, slot_to_process, TRUE))
- to_chat(src, SPAN_WARNING("You can't put \the [interact_item.name] on [target_mob]!"))
- return
- visible_message(SPAN_NOTICE("[src] tries to put \the [interact_item.name] on [target_mob]."), null, null, 5)
- if(do_after(src, get_strip_delay(src, target_mob), INTERRUPT_ALL, BUSY_ICON_GENERIC, target_mob, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
- if(interact_item == get_active_hand() && !target_mob.get_item_by_slot(slot_to_process) && Adjacent(target_mob))
- if(interact_item.flags_item & WIELDED) //to prevent re-wielding it during the do_after
- interact_item.unwield(src)
- if(interact_item.mob_can_equip(target_mob, slot_to_process, TRUE))//Placing an item on the mob
- drop_inv_item_on_ground(interact_item)
- if(interact_item && !QDELETED(interact_item)) //Might be self-deleted?
- target_mob.equip_to_slot_if_possible(interact_item, slot_to_process, 1, 0, 1, 1)
- if(ishuman(target_mob) && target_mob.stat == DEAD)
- var/mob/living/carbon/human/human_target = target_mob
- human_target.disable_lights() // take that powergamers -spookydonut
-
- if(target_mob)
- if(interactee == target_mob && Adjacent(target_mob))
- target_mob.show_inv(src)
-
/mob/living/carbon/human/drop_inv_item_on_ground(obj/item/I, nomoveupdate, force)
remember_dropped_object(I)
return ..()
diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
index b84c8e9d24..32dd9ddef8 100644
--- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
@@ -7,7 +7,7 @@
if(stat != DEAD) //the dead get zero fullscreens
- if(stat == UNCONSCIOUS)
+ if(stat == UNCONSCIOUS || (locate(/datum/effects/crit) in effects_list))
var/severity = 0
switch(health)
if(-20 to -10) severity = 1
diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm
index 5b37238d28..65f98d928e 100644
--- a/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_regular_status_updates.dm
@@ -42,7 +42,8 @@
//UNCONSCIOUS. NO-ONE IS HOME
if(regular_update && ((getOxyLoss() > 50)))
- apply_effect(3, PARALYZE)
+ KnockDown(3)
+ Stun(3)
if((src.species.flags & HAS_HARDCRIT) && HEALTH_THRESHOLD_CRIT > health)
var/already_in_crit = FALSE
diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
index 8d3367ee68..d00b08f183 100644
--- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
@@ -261,10 +261,6 @@
move_delay = .
-
-/mob/living/carbon/xenomorph/show_inv(mob/user)
- return
-
/mob/living/carbon/xenomorph/proc/pounced_mob(mob/living/L)
// This should only be called back by a mob that has pounce, so no need to check
var/datum/action/xeno_action/activable/pounce/pounceAction = get_xeno_action_by_type(src, /datum/action/xeno_action/activable/pounce)
diff --git a/code/modules/mob/living/carbon/xenomorph/ai/xeno_ai.dm b/code/modules/mob/living/carbon/xenomorph/ai/xeno_ai.dm
index 6e5ca5f2c1..7ccd4cde55 100644
--- a/code/modules/mob/living/carbon/xenomorph/ai/xeno_ai.dm
+++ b/code/modules/mob/living/carbon/xenomorph/ai/xeno_ai.dm
@@ -235,16 +235,12 @@
var/atom/movable/closest_target
var/smallest_distance = INFINITY
- for(var/mob/living/carbon/potential_target as anything in GLOB.alive_mob_list)
- if(!istype(potential_target))
- continue
+ var/list/valid_targets = SSxeno_ai.get_valid_targets(src)
+ for(var/atom/movable/potential_target as anything in valid_targets)
if(z != potential_target.z)
continue
- if(!potential_target.ai_can_target(src))
- continue
-
var/distance = get_dist(src, potential_target)
if(distance > ai_range)
@@ -258,59 +254,6 @@
closest_target = potential_target
smallest_distance = distance
- for(var/obj/vehicle/multitile/potential_vehicle_target as anything in GLOB.all_multi_vehicles)
- if(z != potential_vehicle_target.z)
- continue
-
- var/distance = get_dist(src, potential_vehicle_target)
-
- if(distance > ai_range)
- continue
-
- if(potential_vehicle_target.health <= 0)
- continue
-
- var/multitile_faction = potential_vehicle_target.vehicle_faction
- if(hive.faction_is_ally(multitile_faction))
- continue
-
- var/skip_vehicle
- var/list/interior_living_mobs = potential_vehicle_target.interior.get_passengers()
- for(var/mob/living/carbon/human/human_mob in interior_living_mobs)
- if(!human_mob.ai_can_target(src))
- continue
-
- skip_vehicle = FALSE
- break
-
- if(skip_vehicle)
- continue
-
- viable_targets += potential_vehicle_target
-
- if(smallest_distance <= distance)
- continue
-
- closest_target = potential_vehicle_target
- smallest_distance = distance
-
- for(var/obj/structure/machinery/defenses/potential_defense_target as anything in GLOB.all_active_defenses)
- if(z != potential_defense_target.z)
- continue
-
- var/distance = get_dist(src, potential_defense_target)
-
- if(distance > ai_range)
- continue
-
- viable_targets += potential_defense_target
-
- if(smallest_distance <= distance)
- continue
-
- closest_target = potential_defense_target
- smallest_distance = distance
-
var/extra_check_distance = round(smallest_distance * EXTRA_CHECK_DISTANCE_MULTIPLIER)
if(extra_check_distance < 1)
diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm
index 40e20fc06f..9627ac60c0 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_ai_interaction.dm
@@ -138,7 +138,7 @@ At bare minimum, make sure the relevant checks from parent types gets copied in
// MOBS //
/////////////////////////////
/mob/living/ai_check_stat(mob/living/carbon/xenomorph/X)
- return stat == CONSCIOUS
+ return stat == CONSCIOUS && !(locate(/datum/effects/crit) in effects_list)
/////////////////////////////
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index f1452d95c2..78c96bbbb7 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -110,19 +110,6 @@
/*
* Inventory
*/
-/mob/living/simple_animal/parrot/show_inv(mob/user as mob)
- user.set_interaction(src)
- if(user.stat) return
-
- var/dat = "Inventory of [name]
"
- if(ears)
- dat += "
Headset: [ears] (Remove)"
- else
- dat += "
Headset: Nothing"
-
- user << browse(dat, text("window=mob[];size=325x500", name))
- onclose(user, "mob[real_name]")
- return
/mob/living/simple_animal/parrot/Topic(href, href_list)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c2cf6402ed..13c47719a7 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -372,25 +372,6 @@
SIGNAL_HANDLER
reset_view(null)
-/mob/proc/show_inv(mob/user)
- user.set_interaction(src)
- var/dat = {"
-
[name]
-
-
Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
-
Left Hand: [(l_hand ? l_hand : "Nothing")]
-
Right Hand: [(r_hand ? r_hand : "Nothing")]
-
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank) && !( internal )) ? text(" Set Internal", src) : "")]
-
[(internal ? text("Remove Internal") : "")]
-
Empty Pockets
-
Refresh
-
Close
-
"}
- show_browser(user, dat, name, "mob[name]")
- return
-
-
-
/mob/proc/point_to_atom(atom/A, turf/T)
//Squad Leaders and above have reduced cooldown and get a bigger arrow
if(check_improved_pointing())
@@ -448,21 +429,6 @@
update_flavor_text()
return
-
-/mob/MouseDrop(mob/M)
- ..()
- if(M != usr) return
- if(usr == src) return
- if(!Adjacent(usr)) return
- if(!ishuman(M) && !ismonkey(M)) return
- if(!ishuman(src) && !ismonkey(src)) return
- if(M.is_mob_incapacitated())
- return
- if(M.pulling == src && (M.a_intent & INTENT_GRAB) && M.grab_level == GRAB_AGGRESSIVE)
- return
-
- show_inv(M)
-
/mob/proc/swap_hand()
hand = !hand
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index b76f980480..bbc70fdf1f 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -16,8 +16,10 @@
randomize_hair_color("facial")
randomize_eyes_color()
randomize_skin_color()
- underwear = gender == MALE ? pick(GLOB.underwear_m) : pick(GLOB.underwear_f)
- undershirt = gender == MALE ? pick(GLOB.undershirt_m) : pick(GLOB.undershirt_f)
+ var/list/undershirt_options = gender == MALE ? GLOB.undershirt_m : GLOB.undershirt_f
+ undershirt = pick(undershirt_options-GLOB.undershirt_restricted)
+ var/list/underwear_options = gender == MALE ? GLOB.underwear_m : GLOB.underwear_f
+ underwear = pick(underwear_options-GLOB.underwear_restricted)
backbag = 2
age = rand(AGE_MIN,AGE_MAX)
if(H)
@@ -249,7 +251,7 @@
return J.gear_preset_whitelist["[JOB_CO][J.get_whitelist_status(RoleAuthority.roles_whitelist, owner)]"]
return /datum/equipment_preset/uscm_ship/commander
if(JOB_SO)
- return /datum/equipment_preset/uscm_ship/so
+ return /datum/equipment_preset/uscm_ship/so/equipped
if(JOB_XO)
return /datum/equipment_preset/uscm_ship/xo
if(JOB_AUXILIARY_OFFICER)
diff --git a/code/modules/mob/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/new_player/sprite_accessories/undershirt.dm
index 5919b75636..5fb59cf261 100644
--- a/code/modules/mob/new_player/sprite_accessories/undershirt.dm
+++ b/code/modules/mob/new_player/sprite_accessories/undershirt.dm
@@ -1,12 +1,15 @@
GLOBAL_LIST_INIT_TYPED(undershirt_m, /datum/sprite_accessory/undershirt, setup_undershirt(MALE))
GLOBAL_LIST_INIT_TYPED(undershirt_f, /datum/sprite_accessory/undershirt, setup_undershirt(FEMALE))
+GLOBAL_LIST_INIT_TYPED(undershirt_restricted, /datum/sprite_accessory/undershirt, setup_undershirt(null, TRUE))
-/proc/setup_undershirt(restricted_gender)
+/proc/setup_undershirt(restricted_gender, restricted)
var/list/undershirt_list = list()
for(var/undershirt_type in subtypesof(/datum/sprite_accessory/undershirt))
var/datum/sprite_accessory/undershirt/undershirt_datum = new undershirt_type
if(restricted_gender && undershirt_datum.gender != restricted_gender && (undershirt_datum.gender == MALE || undershirt_datum.gender == FEMALE))
continue
+ if(restricted && !undershirt_datum.restricted)
+ continue
if(undershirt_datum.camo_conforming)
undershirt_list["[undershirt_datum.name] (Camo Conforming)"] = undershirt_datum
var/datum/sprite_accessory/undershirt/classic_datum = new undershirt_type
@@ -28,6 +31,7 @@ GLOBAL_LIST_INIT_TYPED(undershirt_f, /datum/sprite_accessory/undershirt, setup_u
/datum/sprite_accessory/undershirt
icon = 'icons/mob/humans/undershirt.dmi'
var/camo_conforming = FALSE
+ var/restricted = FALSE
/datum/sprite_accessory/undershirt/proc/get_image(mob_gender)
var/selected_icon_state = icon_state
@@ -117,3 +121,10 @@ GLOBAL_LIST_INIT_TYPED(undershirt_f, /datum/sprite_accessory/undershirt, setup_u
icon_state = "strapless"
gender = FEMALE
camo_conforming = TRUE
+
+// Restricted
+/datum/sprite_accessory/undershirt/telnyashka
+ name = "Telnyashka"
+ icon_state = "telnyashka"
+ gender = NEUTER
+ restricted = TRUE
diff --git a/code/modules/mob/new_player/sprite_accessories/underwear.dm b/code/modules/mob/new_player/sprite_accessories/underwear.dm
index 869179619e..9c98abccb2 100644
--- a/code/modules/mob/new_player/sprite_accessories/underwear.dm
+++ b/code/modules/mob/new_player/sprite_accessories/underwear.dm
@@ -1,12 +1,15 @@
GLOBAL_LIST_INIT_TYPED(underwear_m, /datum/sprite_accessory/underwear, setup_underwear(MALE))
GLOBAL_LIST_INIT_TYPED(underwear_f, /datum/sprite_accessory/underwear, setup_underwear(FEMALE))
+GLOBAL_LIST_INIT_TYPED(underwear_restricted, /datum/sprite_accessory/underwear, setup_underwear(null, TRUE))
-/proc/setup_underwear(restricted_gender)
+/proc/setup_underwear(restricted_gender, restricted)
var/list/underwear_list = list()
for(var/underwear_type in subtypesof(/datum/sprite_accessory/underwear))
var/datum/sprite_accessory/underwear/underwear_datum = new underwear_type
if(restricted_gender && underwear_datum.gender != restricted_gender && (underwear_datum.gender == MALE || underwear_datum.gender == FEMALE))
continue
+ if(restricted && !underwear_datum.restricted)
+ continue
if(underwear_datum.camo_conforming)
underwear_list["[underwear_datum.name] (Camo Conforming)"] = underwear_datum
var/datum/sprite_accessory/underwear/classic_datum = new underwear_type
@@ -28,6 +31,7 @@ GLOBAL_LIST_INIT_TYPED(underwear_f, /datum/sprite_accessory/underwear, setup_und
/datum/sprite_accessory/underwear
icon = 'icons/mob/humans/underwear.dmi'
var/camo_conforming = FALSE
+ var/restricted = FALSE
/datum/sprite_accessory/underwear/proc/get_image(mob_gender)
var/selected_icon_state = icon_state
diff --git a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm
index 4f09acbf11..fa0112641c 100644
--- a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm
+++ b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm
@@ -351,19 +351,19 @@
/obj/item/ammo_box/magazine/su6/empty
empty = TRUE
-//-----------------------88M4 Pistol Mag Box-----------------------
+//-----------------------VP70 Pistol Mag Box-----------------------
-/obj/item/ammo_box/magazine/mod88
- name = "\improper magazine box (88 Mod 4 x 16)"
+/obj/item/ammo_box/magazine/vp70
+ name = "\improper magazine box (VP70 x 16)"
icon_state = "base_mod88"
flags_equip_slot = SLOT_BACK
overlay_ammo_type = "_reg"
overlay_gun_type = "_mod88"
overlay_content = "_reg"
num_of_magazines = 16
- magazine_type = /obj/item/ammo_magazine/pistol/mod88
+ magazine_type = /obj/item/ammo_magazine/pistol/vp70
-/obj/item/ammo_box/magazine/mod88/empty
+/obj/item/ammo_box/magazine/vp70/empty
empty = TRUE
//-----------------------VP78 Pistol Mag Box-----------------------
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 7dc0a56943..32a0850443 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -1443,7 +1443,7 @@ and you're good to go.
if(projectile_to_fire.ammo.bonus_projectiles_amount)
var/obj/projectile/BP
for(var/i in 1 to projectile_to_fire.ammo.bonus_projectiles_amount)
- BP = new /obj/projectile(attacked_mob.loc, create_cause_data(initial(name), user))
+ BP = new /obj/projectile(null, create_cause_data(initial(name), user))
BP.generate_bullet(GLOB.ammo_list[projectile_to_fire.ammo.bonus_projectiles_type], 0, NO_FLAGS)
BP.accuracy = round(BP.accuracy * projectile_to_fire.accuracy/initial(projectile_to_fire.accuracy)) //Modifies accuracy of pellets per fire_bonus_projectiles.
BP.damage *= damage_buff
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index 0c6da6f973..4941606a4b 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -1727,8 +1727,8 @@ Defined in conflicts.dm of the #defines folder.
icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
/obj/item/attachable/stock/shotgun
- name = "\improper M37 wooden stock"
- desc = "A non-standard heavy wooden stock for the M37 Shotgun. More cumbersome than the standard issue stakeout, but reduces recoil and improves accuracy. Allegedly makes a pretty good club in a fight too."
+ name = "\improper Ithaca 37 wooden stock"
+ desc = "A standard wooden stock for the Ithaca pump-action shotgun. More cumbersome than the standard issue stakeout, but reduces recoil and improves accuracy. Allegedly makes a pretty good club in a fight too."
slot = "stock"
icon_state = "stock"
wield_delay_mod = WIELD_DELAY_FAST
@@ -1824,8 +1824,8 @@ Defined in conflicts.dm of the #defines folder.
// Doesn't give any stat additions due to the gun already having really good ones, and this is unremovable from the gun itself
/obj/item/attachable/stock/tactical
- name = "\improper MK221 tactical stock"
- desc = "A metal stock made for the MK221 tactical shotgun."
+ name = "\improper M120 tactical stock"
+ desc = "A metal stock made for the M120 tactical shotgun."
icon_state = "tactical_stock"
hud_offset_mod = 6
@@ -1859,6 +1859,33 @@ Defined in conflicts.dm of the #defines folder.
recoil_unwielded_mod = -RECOIL_AMOUNT_TIER_5
scatter_unwielded_mod = -SCATTER_AMOUNT_TIER_10
+/obj/item/attachable/stock/type23/wood
+ name = "\improper KS-29 wooden stock"
+ desc = "A standard heavy wooden stock for the KS-29 riot shotgun. Allegedly makes a pretty good club in a fight too."
+ slot = "stock"
+ icon_state = "type23_wood"
+ wield_delay_mod = WIELD_DELAY_FAST
+ pixel_shift_x = 32
+ pixel_shift_y = 15
+ hud_offset_mod = 6 //*Very* long sprite.
+ flags_attach_features = NO_FLAGS
+
+/obj/item/attachable/stock/type23/wood/New()
+ ..()
+ //it makes stuff much better when two-handed
+ accuracy_mod = HIT_ACCURACY_MULT_TIER_4
+ recoil_mod = -RECOIL_AMOUNT_TIER_4
+ scatter_mod = -SCATTER_AMOUNT_TIER_8
+ movement_onehanded_acc_penalty_mod = -MOVEMENT_ACCURACY_PENALTY_MULT_TIER_5
+ //it makes stuff much worse when one handed
+ accuracy_unwielded_mod = -HIT_ACCURACY_MULT_TIER_3
+ recoil_unwielded_mod = RECOIL_AMOUNT_TIER_4
+ scatter_unwielded_mod = SCATTER_AMOUNT_TIER_8
+ //but at the same time you are slow when 2 handed
+ aim_speed_mod = CONFIG_GET(number/slowdown_med)
+
+ matter = list("wood" = 2000)
+
/obj/item/attachable/stock/slavic
name = "wooden stock"
desc = "A non-standard heavy wooden stock for Slavic firearms."
@@ -2107,9 +2134,9 @@ Defined in conflicts.dm of the #defines folder.
flags_attach_features = NO_FLAGS
hud_offset_mod = 2
-/obj/item/attachable/stock/mod88
- name = "\improper Mod 88 burst stock"
- desc = "Increases the fire rate and burst amount on the Mod 88. Some versions act as a holster for the weapon when un-attached. This is a test item and should not be used in normal gameplay (yet)."
+/obj/item/attachable/stock/vp70
+ name = "\improper VP70 burst stock"
+ desc = "Increases the fire rate and burst amount on the VP70. Some versions act as a holster for the weapon when un-attached. This is a test item and should not be used in normal gameplay (yet)."
icon_state = "mod88_stock"
attach_icon = "mod88_stock_a"
wield_delay_mod = WIELD_DELAY_FAST
@@ -2118,7 +2145,7 @@ Defined in conflicts.dm of the #defines folder.
size_mod = 2
melee_mod = 5
-/obj/item/attachable/stock/mod88/New()
+/obj/item/attachable/stock/vp70/New()
..()
//2h
accuracy_mod = HIT_ACCURACY_MULT_TIER_3
@@ -2445,7 +2472,7 @@ Defined in conflicts.dm of the #defines folder.
/obj/item/attachable/stock/smg/collapsible/brace/apply_on_weapon(obj/item/weapon/gun/G)
if(stock_activated)
- G.flags_item |= NODROP
+ G.flags_item |= NODROP|FORCEDROP_CONDITIONAL
accuracy_mod = -HIT_ACCURACY_MULT_TIER_3
scatter_mod = SCATTER_AMOUNT_TIER_8
recoil_mod = RECOIL_AMOUNT_TIER_2 //Hurts pretty bad if it's wielded.
@@ -2456,7 +2483,7 @@ Defined in conflicts.dm of the #defines folder.
icon_state = "smg_brace_on"
attach_icon = "smg_brace_a_on"
else
- G.flags_item &= ~NODROP
+ G.flags_item &= ~(NODROP|FORCEDROP_CONDITIONAL)
accuracy_mod = 0
scatter_mod = 0
recoil_mod = 0
@@ -2665,7 +2692,7 @@ Defined in conflicts.dm of the #defines folder.
name = "U1 grenade launcher"
desc = "A weapon-mounted, reloadable grenade launcher."
icon_state = "grenade"
- attach_icon = "grenade_a"
+ attach_icon = "grenade"
w_class = SIZE_MEDIUM
current_rounds = 0
max_rounds = 3
@@ -2834,12 +2861,22 @@ Defined in conflicts.dm of the #defines folder.
current_rounds = 0
max_rounds = 5
max_range = 10
- attachment_firing_delay = 30
+ attachment_firing_delay = 15
/obj/item/attachable/attached_gun/grenade/mk1/recon
icon_state = "green_grenade-mk1"
attach_icon = "green_grenade-mk1_a"
+/obj/item/attachable/attached_gun/grenade/m120
+ name = "\improper PN/c 30mm underslung grenade launcher"
+ desc = "Compact variant of the PN pump action underslung grenade launcher. Fits the M120 shotgun, three round tube, chambers one."
+ icon_state = "grenade-mk1"
+ attach_icon = "grenade-mk1_a"
+ current_rounds = 0
+ max_rounds = 3
+ max_range = 10
+ attachment_firing_delay = 15
+
/obj/item/attachable/attached_gun/grenade/m203 //M16 GL, only DD have it.
name = "\improper M203 Grenade Launcher"
desc = "An antique underbarrel grenade launcher. Adopted in 1969 for the M16, it was made obsolete centuries ago; how its ended up here is a mystery to you. Holds only one propriatary 40mm grenade, does not have modern IFF systems, it won't pass through your friends."
diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm
index 9eed4553f1..d3fff0e05d 100644
--- a/code/modules/projectiles/guns/pistols.dm
+++ b/code/modules/projectiles/guns/pistols.dm
@@ -6,6 +6,7 @@
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
reload_sound = 'sound/weapons/flipblade.ogg'
cocked_sound = 'sound/weapons/gun_pistol_cocked.ogg'
+ empty_sound = 'sound/weapons/gun_empty.ogg'
matter = list("metal" = 2000)
flags_equip_slot = SLOT_WAIST
@@ -48,12 +49,13 @@
/obj/item/weapon/gun/pistol/m4a3
name = "\improper M4A3 service pistol"
- desc = "An M4A3 Service Pistol, once the standard issue sidearm of the Colonial Marines but has recently been replaced with the Weyland Yutani 88 Mod 4 combat pistol. Fires 9mm pistol rounds."
+ desc = "The recently replaced semi-automatic 9mm service pistol of the USCM. It remains popular among marines due to its light trigger and familiarity."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m4a3"
item_state = "m4a3"
+ fire_sound = "vp70"
current_mag = /obj/item/ammo_magazine/pistol
- flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
attachable_allowed = list(
/obj/item/attachable/suppressor,
/obj/item/attachable/reddot,
@@ -87,7 +89,7 @@
/obj/item/weapon/gun/pistol/m4a3/custom
name = "\improper M4A3 custom pistol"
- desc = "This M4A3 sports a nickel finish and faux ivory grips. This one is a slightly customized variant produced by a well known gunsmith on Gateway Station. These are commonly purchased by low level enlisted men and junior officers who have nothing better to spend their salary on. Chambered in 9mm."
+ desc = "Sporting a nickel finish and possibly faux ivory grips, this 9mm pistol has been customized by a well known gunsmith on Gateway Station. It offers no tactical advantages."
icon_state = "m4a3c"
item_state = "m4a3c"
@@ -102,37 +104,89 @@
damage_mult = BASE_BULLET_DAMAGE_MULT
+//VP70 - Counterpart to M1911, offers burst and capacity ine exchange of low accuracy and damage.
+
+/obj/item/weapon/gun/pistol/vp70
+ name = "\improper VP70 M5 service pistol"
+ desc = "Standard issue semi-automatic USCM service pistol. Recently replacing the M4A3, it retains its predecessor's 9mm chambering but offers both a higher magazine capacity and a 3-round burst selector."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
+ icon_state = "vp70"
+ item_state = "vp70"
+ fire_sound = "vp70"
+ firesound_volume = 20
+ reload_sound = 'sound/weapons/gun_vp70_reload.ogg'
+ unload_sound = 'sound/weapons/gun_vp70_unload.ogg'
+ current_mag = /obj/item/ammo_magazine/pistol/vp70
+ force = 8
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
+ attachable_allowed = list(
+ /obj/item/attachable/suppressor,
+ /obj/item/attachable/extended_barrel,
+ /obj/item/attachable/heavy_barrel,
+ /obj/item/attachable/compensator,
+ /obj/item/attachable/flashlight,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/burstfire_assembly,
+ /obj/item/attachable/lasersight,
+ /obj/item/attachable/flashlight/grip,
+ /obj/item/attachable/magnetic_harness,
+ /obj/item/attachable/stock/vp70,
+ )
+
+/obj/item/weapon/gun/pistol/vp70/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 27, "muzzle_y" = 21,"rail_x" = 8, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 18, "stock_y" = 15)
+
+
+/obj/item/weapon/gun/pistol/vp70/set_gun_config_values()
+ ..()
+ set_fire_delay(FIRE_DELAY_TIER_11)
+ set_burst_amount(BURST_AMOUNT_TIER_3)
+ set_burst_delay(FIRE_DELAY_TIER_11)
+ accuracy_mult = BASE_ACCURACY_MULT
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT
+ scatter = SCATTER_AMOUNT_TIER_7
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_7
+ scatter_unwielded = SCATTER_AMOUNT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT
+
+
+/obj/item/weapon/gun/pistol/vp70/training
+ current_mag = /obj/item/ammo_magazine/pistol/vp70/rubber
+
+
+/obj/item/weapon/gun/pistol/vp70/flashlight/handle_starting_attachment()
+ ..()
+ var/obj/item/attachable/flashlight/flashlight = new(src)
+ flashlight.Attach(src)
+ update_attachable(flashlight.slot)
+
//-------------------------------------------------------
-//M4A3 45 //Inspired by the 1911
-//deprecated
/obj/item/weapon/gun/pistol/m1911
- name = "\improper M1911 service pistol"
- desc = "A timeless classic since the first World War. Once standard issue for the USCM, now back order only. Chambered in .45 ACP. Unfortunately, due to the progression of IFF technology, M1911 .45 ACP is NOT compatible with the SU-6."
+ name = "\improper M1911 pistol"
+ desc = "Despite never being an official service pistol of the USCM, its .45 ACP chambering and cultural connection to the Corps's predecessor keeps it a popular pistol, enough so that a large quantity are kept on backorder."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m4a345"
item_state = "m4a3"
-
+ fire_sound = 'sound/weapons/gun_vp78_v2.ogg'
current_mag = /obj/item/ammo_magazine/pistol/m1911
-
/obj/item/weapon/gun/pistol/m1911/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 17, "stock_x" = 21, "stock_y" = 17)
-
/obj/item/weapon/gun/pistol/m1911/set_gun_config_values()
..()
set_fire_delay(FIRE_DELAY_TIER_9)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
accuracy_mult_unwielded = BASE_ACCURACY_MULT
scatter = SCATTER_AMOUNT_TIER_6
- burst_scatter_mult = SCATTER_AMOUNT_TIER_6
- scatter_unwielded = SCATTER_AMOUNT_TIER_6
+ scatter_unwielded = SCATTER_AMOUNT_TIER_4
damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_5
-
+ recoil_unwielded = RECOIL_AMOUNT_TIER_4
/obj/item/weapon/gun/pistol/m1911/socom
- name = "\improper M48A4 service pistol"
+ name = "\improper M48A4 pistol"
desc = "A timeless classic since the first World War, the M1911A1 has limited use with the USCM, and is often used as a sidearm by non-governmental bodies due to its reliability. This is a modernized version with an ammo counter and a polymer grip, designated M48A4. Chambered in .45 ACP."
icon_state = "m4a345_s"
item_state = "m4a3"
@@ -146,116 +200,83 @@
scatter = SCATTER_AMOUNT_TIER_8
burst_scatter_mult = SCATTER_AMOUNT_TIER_6
scatter_unwielded = SCATTER_AMOUNT_TIER_6
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_5
/obj/item/weapon/gun/pistol/m1911/socom/equipped
starting_attachment_types = list(/obj/item/attachable/suppressor, /obj/item/attachable/lasersight, /obj/item/attachable/reflex)
-//-------------------------------------------------------
-//Beretta 92FS, the gun McClane carries around in Die Hard. Very similar to the service pistol, all around.
-
-/obj/item/weapon/gun/pistol/b92fs
- name = "\improper Beretta 92FS pistol"
- desc = "A popular police firearm in the 20th century, often employed by hardboiled cops while confronting terrorists. A classic of its time, chambered in 9mm."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
- icon_state = "b92fs"
- item_state = "b92fs"
- current_mag = /obj/item/ammo_magazine/pistol/b92fs
-
-/obj/item/weapon/gun/pistol/b92fs/Initialize(mapload, spawn_empty)
- . = ..()
- if(prob(10))
- name = "\improper Beretta 93FR burst pistol"
- desc += " This specific pistol is a burst-fire, limited availability, police-issue 93FR type Beretta. Not too accurate, aftermarket modififcations are recommended."
- var/obj/item/attachable/burstfire_assembly/BFA = new(src)
- BFA.flags_attach_features &= ~ATTACH_REMOVABLE
- BFA.Attach(src)
- update_attachable(BFA.slot)
- add_firemode(GUN_FIREMODE_BURSTFIRE)
-
-/obj/item/weapon/gun/pistol/b92fs/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 17, "stock_x" = 21, "stock_y" = 17)
-
-/obj/item/weapon/gun/pistol/b92fs/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
- scatter = SCATTER_AMOUNT_TIER_7
- burst_scatter_mult = SCATTER_AMOUNT_TIER_5
- scatter_unwielded = SCATTER_AMOUNT_TIER_7
- damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_2
-
-
-//-------------------------------------------------------
-//DEAGLE //This one is obvious.
+//.45 MARSHALS PISTOL //Inspired by the Browning Hipower
+// rebalanced - singlefire, very strong bullets but slow to fire and heavy recoil
+// redesigned - now rejected USCM sidearm model, utilized by Colonial Marshals and other stray groups.
-/obj/item/weapon/gun/pistol/heavy
- name = "vintage Desert Eagle"
- desc = "A bulky 50 caliber pistol with a serious kick, probably taken from some museum somewhere. This one is engraved, 'Peace through superior firepower.'"
+/obj/item/weapon/gun/pistol/highpower
+ name = "\improper HG 45 'Aguila' pistol"
+ desc = "A semi-automatic Henjin-Garcia design chambered in .45 ACP that is slowly replacing the Office of the Colonial Marshals's Spearhead revolver."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
- icon_state = "deagle"
- item_state = "deagle"
- fire_sound = 'sound/weapons/gun_DE50.ogg'
- firesound_volume = 40
- current_mag = /obj/item/ammo_magazine/pistol/heavy
- force = 13
-
+ icon_state = "highpower"
+ item_state = "highpower"
+ fire_sound = 'sound/weapons/gun_vp78_v2.ogg'
+ current_mag = /obj/item/ammo_magazine/pistol/highpower
+ force = 15
attachable_allowed = list(
- /obj/item/attachable/reddot,
- /obj/item/attachable/reflex,
- /obj/item/attachable/flashlight,
+ /obj/item/attachable/suppressor, // Barrel
+ /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,
- /obj/item/attachable/lasersight,
/obj/item/attachable/compensator,
+ /obj/item/attachable/reddot, // Rail
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight,
+ /obj/item/attachable/magnetic_harness,
+ /obj/item/attachable/scope,
+ /obj/item/attachable/scope/mini,
+ /obj/item/attachable/gyro, // Under
+ /obj/item/attachable/lasersight,
+ /obj/item/attachable/burstfire_assembly,
)
+/obj/item/weapon/gun/pistol/highpower/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 20,"rail_x" = 6, "rail_y" = 22, "under_x" = 20, "under_y" = 15, "stock_x" = 0, "stock_y" = 0)
-/obj/item/weapon/gun/pistol/heavy/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 20,"rail_x" = 17, "rail_y" = 21, "under_x" = 20, "under_y" = 17, "stock_x" = 20, "stock_y" = 17)
-
-
-/obj/item/weapon/gun/pistol/heavy/set_gun_config_values()
+/obj/item/weapon/gun/pistol/highpower/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_5)
- set_burst_amount(BURST_AMOUNT_TIER_2)
- set_burst_delay(FIRE_DELAY_TIER_8)
- accuracy_mult = BASE_ACCURACY_MULT
- accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_5
+ set_fire_delay(FIRE_DELAY_TIER_7)
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT
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_1
- recoil = RECOIL_AMOUNT_TIER_5
- recoil_unwielded = RECOIL_AMOUNT_TIER_3
+ scatter_unwielded = SCATTER_AMOUNT_TIER_4
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_5
+ recoil_unwielded = RECOIL_AMOUNT_TIER_4
-/obj/item/weapon/gun/pistol/heavy/co
- name = "polished vintage Desert Eagle"
- desc = "The handcannon that needs no introduction, the .50-caliber Desert Eagle is expensive, unwieldy, and extremely heavy for a pistol. However, it makes up for it with its powerful shots capable of stopping a bear dead in its tracks. Iconic, glamorous, and above all, extremely deadly."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
- icon_state = "c_deagle"
- item_state = "c_deagle"
- current_mag = /obj/item/ammo_magazine/pistol/heavy/super/highimpact
- black_market_value = 100
+/obj/item/weapon/gun/pistol/highpower/black
+ name = "\improper HG 45 'Marina' pistol"
+ current_mag = /obj/item/ammo_magazine/pistol/highpower/black
+ icon_state = "highpower_b"
+ item_state = "highpower_b"
+ desc = "A semi-automatic Henjin-Garcia design chambered in .45 ACP that is slowly replacing the Office of the Colonial Marshals's Spearhead revolver. Unlike its more common siblings, this variant was marketed and successfully sold in small quantities to the USCM."
-/obj/item/weapon/gun/pistol/heavy/co/set_gun_config_values()
+/obj/item/weapon/gun/pistol/highpower/automag
+ name = "\improper HG 44 'Automag' pistol"
+ desc = "A semi-automatic Henjin-Garcia design chambered in .44 Magnum that was largely discontinued in favour of the HG 45 configuration chambered in .45 ACP."
+ current_mag = /obj/item/ammo_magazine/pistol/highpower/automag
+ icon_state = "highpower_tac"
+ item_state = "highpower_tac"
+ fire_sound = 'sound/weapons/gun_kt42.ogg'
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
+
+/obj/item/weapon/gun/pistol/highpower/automag/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_5)
- accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
- accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_7
- scatter = SCATTER_AMOUNT_TIER_6
- burst_scatter_mult = SCATTER_AMOUNT_TIER_4
- scatter_unwielded = SCATTER_AMOUNT_TIER_3
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_8
- recoil = RECOIL_AMOUNT_TIER_3
- recoil_unwielded = RECOIL_AMOUNT_TIER_2
+ set_fire_delay(FIRE_DELAY_TIER_6)
+ recoil = RECOIL_AMOUNT_TIER_5
+ recoil_unwielded = RECOIL_AMOUNT_TIER_3
-/obj/item/weapon/gun/pistol/heavy/co/gold
- name = "golden vintage Desert Eagle"
- desc = "A Desert Eagle anodized in gold and adorned with rosewood grips. The living definition of ostentatious, it's flashy, unwieldy, tremendously heavy, and kicks like a mule. But as a symbol of power, there's nothing like it."
- icon_state = "g_deagle"
- item_state = "g_deagle"
+/obj/item/weapon/gun/pistol/highpower/automag/tactical
+ name = "\improper HG 44 'Automag' pistol"
+ desc = "A semi-automatic Henjin-Garcia design chambered in .44 Magnum that was largely discontinued in favour of the HG 45 configuration chambered in .45 ACP."
+ starting_attachment_types = list(/obj/item/attachable/suppressor, /obj/item/attachable/lasersight, /obj/item/attachable/reflex)
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
//-------------------------------------------------------
//NP92 pistol
@@ -263,13 +284,13 @@
/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."
+ desc = "The standard issue sidearm of the UPP. Chambered in 9x18mm Makarov, The NP92 is a small versatile pistol."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
icon_state = "np92"
item_state = "np92"
- fire_sound = "88m4"
+ fire_sound = "vp70"
current_mag = /obj/item/ammo_magazine/pistol/np92
- flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
attachable_allowed = list(
/obj/item/attachable/suppressor,
/obj/item/attachable/reddot,
@@ -299,7 +320,7 @@
inherent_traits = list(TRAIT_GUN_SILENCED)
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
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
attachable_allowed = list(
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
@@ -315,13 +336,14 @@
/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."
+ desc = "Once the standard issue sidearm of the UPP it has since been replaced by the smaller NP92. Chambered with 7.62x25mm Tokarev, it remains popular with veterans due to its extra firepower."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
icon_state = "tt"
item_state = "tt"
- fire_sound = 'sound/weapons/gun_tt.ogg'
+ fire_sound = 'sound/weapons/gun_vp78_v2.ogg'
+// 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
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
attachable_allowed = list(
/obj/item/attachable/reddot,
/obj/item/attachable/reflex,
@@ -351,7 +373,7 @@
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
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
accepted_ammo = list(
/obj/item/ammo_magazine/pistol/t73,
/obj/item/ammo_magazine/pistol/t73_impact,
@@ -410,7 +432,6 @@
//-------------------------------------------------------
-//PIZZACHIMP PROTECTION
/obj/item/weapon/gun/pistol/holdout
name = "holdout pistol"
@@ -454,20 +475,17 @@
//-------------------------------------------------------
//CLF HOLDOUT PISTOL
/obj/item/weapon/gun/pistol/clfpistol
- name = "D18 Hummingbird Pistol"
- desc = "The D18 Hummingbird Pistol was produced in the mid-2170s as a cheap and concealable firearm for CLF Sleeper Cell agents for assassinations and ambushes, and is able to be concealed in shoes and workboots."
+ name = "Hummingbird pistol"
+ desc = "Chambering .50 AE catridges this gun is as compact as it could possibly be. Rumored to be designed and produced by the UPP before being distributed into UA space for arming sleeper cells with throwaway weapons capable of penetrating standard M3 pattern armor."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
icon_state = "m43"
item_state = "m43"
- flags_gun_features = GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
fire_sound = 'sound/weapons/gun_m43.ogg'
current_mag = /obj/item/ammo_magazine/pistol/clfpistol
w_class = SIZE_TINY
force = 5
- attachable_allowed = list(
- /obj/item/attachable/suppressor,
- /obj/item/attachable/flashlight,
- )
+ attachable_allowed = null
/obj/item/weapon/gun/pistol/clfpistol/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 10, "rail_y" = 21, "under_x" = 21, "under_y" = 17, "stock_x" = 21, "stock_y" = 17)
@@ -481,163 +499,12 @@
burst_scatter_mult = SCATTER_AMOUNT_TIER_5
scatter_unwielded = SCATTER_AMOUNT_TIER_8
scatter = SCATTER_AMOUNT_TIER_9
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_4
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_10
+ recoil = RECOIL_AMOUNT_TIER_2
+ recoil_unwielded = RECOIL_AMOUNT_TIER_1
//-------------------------------------------------------
-//.45 MARSHALS PISTOL //Inspired by the Browning Hipower
-// rebalanced - singlefire, very strong bullets but slow to fire and heavy recoil
-// redesigned - now rejected USCM sidearm model, utilized by Colonial Marshals and other stray groups.
-
-/obj/item/weapon/gun/pistol/highpower
- name = "\improper MK-45 'High-Power' Automagnum"
- desc = "Originally designed as a replacement for the USCM's M44 combat revolver, it was rejected at the last minute by a committee, citing its need to be cocked after every loaded magazine to be too cumbersone and antiquated. The design has recently been purchased by the Henjin-Garcia company, refitted for .45 ACP, and sold to the Colonial Marshals and other various unscrupulous armed groups."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
- icon_state = "highpower"
- item_state = "highpower"
- fire_sound = 'sound/weapons/gun_kt42.ogg'
- current_mag = /obj/item/ammo_magazine/pistol/highpower
- force = 15
- attachable_allowed = list(
- /obj/item/attachable/suppressor, // Barrel
- /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,
- /obj/item/attachable/compensator,
- /obj/item/attachable/reddot, // Rail
- /obj/item/attachable/reflex,
- /obj/item/attachable/flashlight,
- /obj/item/attachable/magnetic_harness,
- /obj/item/attachable/scope,
- /obj/item/attachable/scope/mini,
- /obj/item/attachable/gyro, // Under
- /obj/item/attachable/lasersight,
- /obj/item/attachable/burstfire_assembly,
- )
- /// This weapon needs to be manually racked every time a new magazine is loaded. I tried and failed to touch gun shitcode so this will do.
- var/manually_slided = FALSE
-
-/obj/item/weapon/gun/pistol/highpower/Initialize(mapload, spawn_empty)
- . = ..()
- manually_slided = TRUE
-
-/obj/item/weapon/gun/pistol/highpower/Fire(atom/target, mob/living/user, params, reflex = 0, dual_wield)
- if(!manually_slided)
- click_empty()
- to_chat(user, SPAN_DANGER("\The [src] makes a clicking noise! You need to manually rack the slide after loading in a new magazine!"))
- return NONE
- return ..()
-
-/obj/item/weapon/gun/pistol/highpower/unique_action(mob/user)
- if(!manually_slided)
- user.visible_message(SPAN_NOTICE("[user] racks \the [src]'s slide."), SPAN_NOTICE("You rack \the [src]'s slide, loading the next bullet in."))
- manually_slided = TRUE
- cock_gun(user, TRUE)
- return
- ..()
-
-/obj/item/weapon/gun/pistol/highpower/cock_gun(mob/user, manual = FALSE)
- if(manual)
- ..()
- else return
-
-/obj/item/weapon/gun/pistol/highpower/reload(mob/user, obj/item/ammo_magazine/magazine)
- //reset every time its reloaded
- manually_slided = FALSE
- ..()
-
-/obj/item/weapon/gun/pistol/highpower/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 20,"rail_x" = 6, "rail_y" = 22, "under_x" = 20, "under_y" = 15, "stock_x" = 0, "stock_y" = 0)
-
-/obj/item/weapon/gun/pistol/highpower/set_gun_config_values()
- ..()
- set_fire_delay(FIRE_DELAY_TIER_5)
- accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
- accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_3
- scatter = SCATTER_AMOUNT_TIER_6
- scatter_unwielded = SCATTER_AMOUNT_TIER_4
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_8
- recoil = RECOIL_AMOUNT_TIER_4
- recoil_unwielded = RECOIL_AMOUNT_TIER_4
-//also comes in.... BLAPCK
-//the parent has a blueish tint, making it look best for civilian usage (colonies, marshals). this one has a black tint on its metal, making it best for military groups like VAIPO, elite mercs, etc.
-// black tinted magazines also included
-/obj/item/weapon/gun/pistol/highpower/black
- current_mag = /obj/item/ammo_magazine/pistol/highpower/black
- icon_state = "highpower_b"
- item_state = "highpower_b"
-
-//unimplemented
-/obj/item/weapon/gun/pistol/highpower/tactical
- name = "\improper MK-44 SOCOM Automagnum"
- desc = "Originally designed as a replacement for the USCM's M44 combat revolver, it was rejected at the last minute by a committee, citing its need to be cocked after every loaded magazine to be too cumbersone and antiquated. The design has recently been purchased by the Henjin-Garcia company and sold to the Colonial Marshals and other various unscrupulous armed groups. This one has a sleek, dark design."
- current_mag = /obj/item/ammo_magazine/pistol/highpower/black
- icon_state = "highpower_tac"
- item_state = "highpower_tac"
- starting_attachment_types = list(/obj/item/attachable/suppressor, /obj/item/attachable/lasersight, /obj/item/attachable/reflex)
- flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
-
-//-------------------------------------------------------
-//mod88 based off VP70 - Counterpart to M1911, offers burst and capacity ine exchange of low accuracy and damage.
-
-/obj/item/weapon/gun/pistol/mod88
- name = "\improper 88 Mod 4 combat pistol"
- desc = "Standard issue USCM firearm. Also found in the hands of Weyland-Yutani PMC teams. Fires 9mm armor shredding rounds and is capable of 3-round burst."
- icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
- icon_state = "_88m4" // to comply with css standards
- item_state = "_88m4"
- fire_sound = "88m4"
- firesound_volume = 20
- reload_sound = 'sound/weapons/gun_88m4_reload.ogg'
- unload_sound = 'sound/weapons/gun_88m4_unload.ogg'
- current_mag = /obj/item/ammo_magazine/pistol/mod88/normalpoint
- force = 8
- 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/extended_barrel,
- /obj/item/attachable/heavy_barrel,
- /obj/item/attachable/compensator,
- /obj/item/attachable/flashlight,
- /obj/item/attachable/reflex,
- /obj/item/attachable/reddot,
- /obj/item/attachable/burstfire_assembly,
- /obj/item/attachable/lasersight,
- /obj/item/attachable/flashlight/grip,
- /obj/item/attachable/magnetic_harness,
- /obj/item/attachable/stock/mod88,
- )
-
-/obj/item/weapon/gun/pistol/mod88/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 27, "muzzle_y" = 21,"rail_x" = 8, "rail_y" = 22, "under_x" = 21, "under_y" = 18, "stock_x" = 18, "stock_y" = 15)
-
-
-/obj/item/weapon/gun/pistol/mod88/set_gun_config_values()
- ..()
- set_fire_delay(FIRE_DELAY_TIER_11)
- set_burst_amount(BURST_AMOUNT_TIER_3)
- set_burst_delay(FIRE_DELAY_TIER_11)
- accuracy_mult = BASE_ACCURACY_MULT
- accuracy_mult_unwielded = BASE_ACCURACY_MULT
- scatter = SCATTER_AMOUNT_TIER_7
- burst_scatter_mult = SCATTER_AMOUNT_TIER_7
- scatter_unwielded = SCATTER_AMOUNT_TIER_7
- damage_mult = BASE_BULLET_DAMAGE_MULT
-
-
-/obj/item/weapon/gun/pistol/mod88/training
- current_mag = /obj/item/ammo_magazine/pistol/mod88/rubber
-
-
-/obj/item/weapon/gun/pistol/mod88/flashlight/handle_starting_attachment()
- ..()
- var/obj/item/attachable/flashlight/flashlight = new(src)
- flashlight.Attach(src)
- update_attachable(flashlight.slot)
-
-//-------------------------------------------------------
// ES-4 - Basically a CL-exclusive reskin of the 88 mod 4 that only uses less-lethal ammo.
/obj/item/weapon/gun/pistol/es4
@@ -648,8 +515,8 @@
item_state = "es4"
fire_sound = 'sound/weapons/gun_es4.ogg'
firesound_volume = 20
- reload_sound = 'sound/weapons/gun_88m4_reload.ogg'
- unload_sound = 'sound/weapons/gun_88m4_unload.ogg'
+ reload_sound = 'sound/weapons/gun_vp70_reload.ogg'
+ unload_sound = 'sound/weapons/gun_vp70_unload.ogg'
current_mag = /obj/item/ammo_magazine/pistol/es4
force = 8
muzzle_flash = "muzzle_flash_blue"
@@ -683,7 +550,6 @@
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "vp78"
item_state = "vp78"
-
fire_sound = 'sound/weapons/gun_vp78_v2.ogg'
reload_sound = 'sound/weapons/gun_vp78_reload.ogg'
unload_sound = 'sound/weapons/gun_vp78_unload.ogg'
@@ -760,6 +626,113 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
recoil_unwielded = RECOIL_AMOUNT_TIER_3
+//-------------------------------------------------------
+//Beretta 92FS, the gun McClane carries around in Die Hard. Very similar to the service pistol, all around.
+
+/obj/item/weapon/gun/pistol/b92fs
+ name = "\improper Beretta 92FS pistol"
+ desc = "A popular police firearm in the 20th century, often employed by hardboiled cops while confronting terrorists. A classic of its time, chambered in 9mm."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
+ icon_state = "b92fs"
+ item_state = "b92fs"
+ current_mag = /obj/item/ammo_magazine/pistol/b92fs
+
+/obj/item/weapon/gun/pistol/b92fs/Initialize(mapload, spawn_empty)
+ . = ..()
+ if(prob(10))
+ name = "\improper Beretta 93FR burst pistol"
+ desc += " This specific pistol is a burst-fire, limited availability, police-issue 93FR type Beretta. Not too accurate, aftermarket modififcations are recommended."
+ var/obj/item/attachable/burstfire_assembly/BFA = new(src)
+ BFA.flags_attach_features &= ~ATTACH_REMOVABLE
+ BFA.Attach(src)
+ update_attachable(BFA.slot)
+ add_firemode(GUN_FIREMODE_BURSTFIRE)
+
+/obj/item/weapon/gun/pistol/b92fs/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 28, "muzzle_y" = 20,"rail_x" = 10, "rail_y" = 22, "under_x" = 21, "under_y" = 17, "stock_x" = 21, "stock_y" = 17)
+
+/obj/item/weapon/gun/pistol/b92fs/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
+ scatter = SCATTER_AMOUNT_TIER_7
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_5
+ scatter_unwielded = SCATTER_AMOUNT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_2
+
+
+//-------------------------------------------------------
+//DEAGLE //This one is obvious.
+
+/obj/item/weapon/gun/pistol/heavy
+ name = "vintage Desert Eagle"
+ desc = "A bulky 50 caliber pistol with a serious kick, probably taken from some museum somewhere. This one is engraved, 'Peace through superior firepower.'"
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
+ icon_state = "deagle"
+ item_state = "deagle"
+ fire_sound = 'sound/weapons/gun_DE50.ogg'
+ firesound_volume = 40
+ current_mag = /obj/item/ammo_magazine/pistol/heavy
+ force = 13
+
+ attachable_allowed = list(
+ /obj/item/attachable/reddot,
+ /obj/item/attachable/reflex,
+ /obj/item/attachable/flashlight,
+ /obj/item/attachable/extended_barrel,
+ /obj/item/attachable/heavy_barrel,
+ /obj/item/attachable/lasersight,
+ /obj/item/attachable/compensator,
+ )
+
+
+/obj/item/weapon/gun/pistol/heavy/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 20,"rail_x" = 17, "rail_y" = 21, "under_x" = 20, "under_y" = 17, "stock_x" = 20, "stock_y" = 17)
+
+
+/obj/item/weapon/gun/pistol/heavy/set_gun_config_values()
+ ..()
+ set_fire_delay(FIRE_DELAY_TIER_5)
+ set_burst_amount(BURST_AMOUNT_TIER_2)
+ set_burst_delay(FIRE_DELAY_TIER_8)
+ accuracy_mult = BASE_ACCURACY_MULT
+ 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_1
+ recoil = RECOIL_AMOUNT_TIER_5
+ recoil_unwielded = RECOIL_AMOUNT_TIER_3
+
+/obj/item/weapon/gun/pistol/heavy/co
+ name = "polished vintage Desert Eagle"
+ desc = "The handcannon that needs no introduction, the .50-caliber Desert Eagle is expensive, unwieldy, and extremely heavy for a pistol. However, it makes up for it with its powerful shots capable of stopping a bear dead in its tracks. Iconic, glamorous, and above all, extremely deadly."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
+ icon_state = "c_deagle"
+ item_state = "c_deagle"
+ base_gun_icon = "c_deagle"
+ current_mag = /obj/item/ammo_magazine/pistol/heavy/super/highimpact
+ black_market_value = 100
+
+/obj/item/weapon/gun/pistol/heavy/co/set_gun_config_values()
+ ..()
+ set_fire_delay(FIRE_DELAY_TIER_5)
+ accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_7
+ scatter = SCATTER_AMOUNT_TIER_6
+ burst_scatter_mult = SCATTER_AMOUNT_TIER_4
+ scatter_unwielded = SCATTER_AMOUNT_TIER_3
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_8
+ recoil = RECOIL_AMOUNT_TIER_3
+ recoil_unwielded = RECOIL_AMOUNT_TIER_2
+
+/obj/item/weapon/gun/pistol/heavy/co/gold
+ name = "golden vintage Desert Eagle"
+ desc = "A Desert Eagle anodized in gold and adorned with rosewood grips. The living definition of ostentatious, it's flashy, unwieldy, tremendously heavy, and kicks like a mule. But as a symbol of power, there's nothing like it."
+ icon_state = "g_deagle"
+ item_state = "g_deagle"
+ base_gun_icon = "g_deagle"
//-------------------------------------------------------
//The first rule of monkey pistol is we don't talk about monkey pistol.
diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm
index 76e3e07106..6fd17ef1a7 100644
--- a/code/modules/projectiles/guns/revolvers.dm
+++ b/code/modules/projectiles/guns/revolvers.dm
@@ -293,14 +293,14 @@
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m44r"
item_state = "m44r"
-
+ fire_sounds = list('sound/weapons/gun_cmb_1.ogg', 'sound/weapons/gun_cmb_2.ogg')
cocked_sound = 'sound/weapons/gun_revolver_spun.ogg'
unload_sound = 'sound/weapons/handling/pkd_open_chamber.ogg'
chamber_close_sound = 'sound/weapons/handling/pkd_close_chamber.ogg'
current_mag = /obj/item/ammo_magazine/internal/revolver/m44
force = 8
- flags_gun_features = GUN_INTERNAL_MAG|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
+ flags_gun_features = GUN_INTERNAL_MAG|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED
attachable_allowed = list(
/obj/item/attachable/bayonet,
/obj/item/attachable/bayonet/upp,
@@ -405,7 +405,7 @@
name = "\improper PKL 'Double' Blaster"
desc = "Sold to civilians and private corporations, the Pflager Katsumata Series-L Blaster is a premium double barrel sidearm that can fire two rounds at the same time. Usually found in the hands of combat synths and replicants, this hand cannon is worth more than the combined price of three Emanators. Originally commissioned by the Wallace Corporation, it has since been released onto public market as a luxury firearm."
icon_state = "pkd_double"
- item_state = "88m4" //placeholder
+ item_state = "vp70" //placeholder
attachable_allowed = list(
/obj/item/attachable/flashlight,
@@ -699,18 +699,20 @@
//-------------------------------------------------------
//MARSHALS REVOLVER //Spearhead exists in Alien cannon.
-/obj/item/weapon/gun/revolver/cmb
- name = "\improper CMB Spearhead autorevolver"
- desc = "An automatic revolver chambered in .357, often loaded with hollowpoint on spaceships to prevent hull damage. Commonly issued to Colonial Marshals."
+/obj/item/weapon/gun/revolver/spearhead
+ name = "\improper Spearhead Armoury revolver"
+ desc = "A sleek high-quality revolver designed by Spearhead Armoury chambered in .357 commonly issued to Colonial Marshals."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
icon_state = "spearhead"
item_state = "spearhead"
fire_sound = null
fire_sounds = list('sound/weapons/gun_cmb_1.ogg', 'sound/weapons/gun_cmb_2.ogg')
fire_rattle = 'sound/weapons/gun_cmb_rattle.ogg'
- cylinder_click = list('sound/weapons/handling/gun_cmb_click1.ogg', 'sound/weapons/handling/gun_cmb_click2.ogg')
- current_mag = /obj/item/ammo_magazine/internal/revolver/cmb/hollowpoint
- force = 12
+ //cylinder_click = list('sound/weapons/handling/gun_cmb_click1.ogg', 'sound/weapons/handling/gun_cmb_click2.ogg')
+ unload_sound = 'sound/weapons/handling/pkd_open_chamber.ogg'
+ chamber_close_sound = 'sound/weapons/handling/pkd_close_chamber.ogg'
+ current_mag = /obj/item/ammo_magazine/internal/revolver/spearhead
+ force = 15
attachable_allowed = list(
/obj/item/attachable/suppressor, // Muzzle
/obj/item/attachable/extended_barrel,
@@ -724,21 +726,21 @@
/obj/item/attachable/lasersight,
)
-/obj/item/weapon/gun/revolver/cmb/click_empty(mob/user)
+/obj/item/weapon/gun/revolver/spearhead/click_empty(mob/user)
if(user)
to_chat(user, SPAN_WARNING("*click*"))
playsound(user, pick('sound/weapons/handling/gun_cmb_click1.ogg', 'sound/weapons/handling/gun_cmb_click2.ogg'), 25, 1, 5) //5 tile range
else
playsound(src, pick('sound/weapons/handling/gun_cmb_click1.ogg', 'sound/weapons/handling/gun_cmb_click2.ogg'), 25, 1, 5)
-/obj/item/weapon/gun/revolver/cmb/Fire(atom/target, mob/living/user, params, reflex = 0, dual_wield)
+/obj/item/weapon/gun/revolver/spearhead/Fire(atom/target, mob/living/user, params, reflex = 0, dual_wield)
playsound('sound/weapons/gun_cmb_bass.ogg') // badass shooting bass
return ..()
-/obj/item/weapon/gun/revolver/cmb/set_gun_attachment_offsets()
+/obj/item/weapon/gun/revolver/spearhead/set_gun_attachment_offsets()
attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 22,"rail_x" = 11, "rail_y" = 25, "under_x" = 20, "under_y" = 18, "stock_x" = 20, "stock_y" = 18)
-/obj/item/weapon/gun/revolver/cmb/set_gun_config_values()
+/obj/item/weapon/gun/revolver/spearhead/set_gun_config_values()
..()
set_fire_delay(FIRE_DELAY_TIER_6)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_4
@@ -749,5 +751,12 @@
recoil = RECOIL_AMOUNT_TIER_5
recoil_unwielded = RECOIL_AMOUNT_TIER_3
-/obj/item/weapon/gun/revolver/cmb/normalpoint
- current_mag = /obj/item/ammo_magazine/internal/revolver/cmb
+/obj/item/weapon/gun/revolver/spearhead/hollowpoint
+ current_mag = /obj/item/ammo_magazine/internal/revolver/spearhead/hollowpoint
+
+/obj/item/weapon/gun/revolver/spearhead/black
+ name = "\improper Spearhead Armoury revolver"
+ desc = "A sleek high-quality revolver designed by Spearhead Armoury chambered in .357 commonly issued to Colonial Marshals, though this version has been customized with a black metal finish indicating it is unlikely to be a service weapon."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
+ icon_state = "spearhead_black"
+ item_state = "spearhead_black"
diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm
index a705861f98..6035aaf612 100644
--- a/code/modules/projectiles/guns/shotguns.dm
+++ b/code/modules/projectiles/guns/shotguns.dm
@@ -20,6 +20,7 @@ can cause issues with ammo types getting mixed up during the burst.
has_empty_icon = FALSE
has_open_icon = FALSE
fire_delay_group = list(FIRE_DELAY_GROUP_SHOTGUN)
+ map_specific_decoration = FALSE
var/gauge = "12g"
/obj/item/weapon/gun/shotgun/Initialize(mapload, spawn_empty)
@@ -153,7 +154,6 @@ can cause issues with ammo types getting mixed up during the burst.
current_mag.chamber_position--
return in_chamber
-
/obj/item/weapon/gun/shotgun/ready_in_chamber()
return ready_shotgun_tube()
@@ -229,7 +229,7 @@ can cause issues with ammo types getting mixed up during the burst.
scatter = SCATTER_AMOUNT_TIER_5
burst_scatter_mult = SCATTER_AMOUNT_TIER_3
scatter_unwielded = SCATTER_AMOUNT_TIER_1
- damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_2
+ damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_3
recoil_unwielded = RECOIL_AMOUNT_TIER_1
@@ -237,15 +237,17 @@ can cause issues with ammo types getting mixed up during the burst.
//TACTICAL SHOTGUN
/obj/item/weapon/gun/shotgun/combat
- name = "\improper MK221 tactical shotgun"
- desc = "The Weyland-Yutani MK221 Shotgun, a semi-automatic shotgun with a quick fire rate."
+ name = "\improper M120 tactical shotgun"
+ desc = "A successor to the Benelli M4 Super 90, the M120 tactical shotgun is in service with the USCM due its easy maneuverability in close quarters, 12 gauge chambering, high firerate and integrated U1 underslung grenade launcher. While not part of the standard doctrine, they are common none the less. The internal tube magazine stores 6 shells and the U1 grenade launcher stores three grenades."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "mk221"
item_state = "mk221"
fire_sound = "gun_shotgun_tactical"
firesound_volume = 20
- current_mag = /obj/item/ammo_magazine/internal/shotgun
+
+ flags_equip_slot = SLOT_BACK
+ current_mag = /obj/item/ammo_magazine/internal/shotgun/combat
attachable_allowed = list(
/obj/item/attachable/bayonet,
/obj/item/attachable/bayonet/upp,
@@ -264,26 +266,12 @@ can cause issues with ammo types getting mixed up during the burst.
if(current_mag && current_mag.current_rounds > 0)
load_into_chamber()
-/obj/item/weapon/gun/shotgun/combat/handle_starting_attachment()
- ..()
- var/obj/item/attachable/attached_gun/grenade/ugl = new(src)
- var/obj/item/attachable/stock/tactical/stock = new(src)
- ugl.flags_attach_features &= ~ATTACH_REMOVABLE
- ugl.hidden = TRUE
- ugl.Attach(src)
- update_attachable(ugl.slot)
- stock.hidden = FALSE
- stock.Attach(src)
- update_attachable(stock.slot)
-
/obj/item/weapon/gun/shotgun/combat/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 21, "under_x" = 14, "under_y" = 16, "stock_x" = 11, "stock_y" = 13.)
-
-
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 10, "rail_y" = 21, "under_x" = 22, "under_y" = 14, "stock_x" = 11, "stock_y" = 13.)
/obj/item/weapon/gun/shotgun/combat/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_5*2)
+ set_fire_delay(FIRE_DELAY_TIER_9)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10
scatter = SCATTER_AMOUNT_TIER_6
@@ -292,7 +280,7 @@ can cause issues with ammo types getting mixed up during the burst.
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_4
recoil_unwielded = RECOIL_AMOUNT_TIER_2
-
+ starting_attachment_types = list(/obj/item/attachable/attached_gun/grenade/m120, /obj/item/attachable/stock/tactical)
/obj/item/weapon/gun/shotgun/combat/get_examine_text(mob/user)
. = ..()
@@ -300,32 +288,31 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/weapon/gun/shotgun/combat/riot
- name = "\improper MK221 riot shotgun"
+ name = "\improper M120/R tactical shotgun"
icon_state = "mp220"
item_state = "mp220"
- desc = "The Weyland-Yutani MK221 Shotgun, a semi-automatic shotgun with a quick fire rate. Equipped with a steel blue finish to signify use in riot control. It has been modified to only fire 20G beanbags."
+ desc = "A successor to the Benelli M4 Super 90, the M120 tactical shotgun is in service with the USCM due its easy maneuverability in close quarters, 12 gauge chambering, high firerate and integrated U1 underslung grenade launcher. While not part of the standard doctrine, they are common none the less. This one comes with a blue steel finish to denote its function as a riot shotgun. The internal tube magazine stores 6 shells and the U1 grenade launcher stores three grenades."
current_mag = /obj/item/ammo_magazine/internal/shotgun/combat/riot
- gauge = "20g"
/obj/item/weapon/gun/shotgun/combat/guard
- desc = "The Weyland-Yutani MK221 Shotgun, a semi-automatic shotgun with a quick fire rate. Equipped with a red handle to signify its use with Military Police Honor Guards."
+ desc = "The Weyland-Yutani M120 Shotgun, a semi-automatic shotgun with a quick fire rate. Equipped with a red handle to signify its use with Military Police Honor Guards."
icon_state = "mp221"
item_state = "mp221"
starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/bayonet)
- current_mag = /obj/item/ammo_magazine/internal/shotgun/buckshot
+ current_mag = /obj/item/ammo_magazine/internal/shotgun/combat
/obj/item/weapon/gun/shotgun/combat/covert
starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/extended_barrel)
- current_mag = /obj/item/ammo_magazine/internal/shotgun/buckshot
+ current_mag = /obj/item/ammo_magazine/internal/shotgun/combat
//SOF MK210, an earlier developmental variant of the MK211 tactical used by USCM SOF.
/obj/item/weapon/gun/shotgun/combat/marsoc
name = "\improper XM38 tactical shotgun"
- desc = "Way back in 2168, Wey-Yu began testing the MK221. The USCM picked up an early prototype, and later adopted it with a limited military contract. But the USCM Special Operations Forces wasn't satisfied, and iterated on the early prototypes they had access to; eventually, their internal armorers and tinkerers produced the MK210, designated XM38, a lightweight folding shotgun that snaps to the belt. And to boot, it's fully automatic, made of stamped medal, and keeps the UGL. Truly an engineering marvel."
+ desc = "An ARMAT design adopted for testing by the Marine Raiders due to it's compact size, high firerate and integrated magnetic harness system. You might think the size would leave its magazine tube wanting, but through engineering magic, the XM38 is capable of holding six shells with its internal tube magazine."
icon_state = "mk210"
item_state = "mk210"
- current_mag = /obj/item/ammo_magazine/internal/shotgun/buckshot
+ current_mag = /obj/item/ammo_magazine/internal/shotgun/marsoc
flags_equip_slot = SLOT_WAIST|SLOT_BACK
flags_gun_features = GUN_CAN_POINTBLANK|GUN_INTERNAL_MAG
@@ -353,7 +340,7 @@ can cause issues with ammo types getting mixed up during the burst.
..()
set_fire_delay(FIRE_DELAY_TIER_6)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
- accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3 - HIT_ACCURACY_MULT_TIER_5
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
scatter = SCATTER_AMOUNT_TIER_6
burst_scatter_mult = SCATTER_AMOUNT_TIER_6
scatter_unwielded = SCATTER_AMOUNT_TIER_2
@@ -365,18 +352,19 @@ can cause issues with ammo types getting mixed up during the burst.
//TYPE 23. SEMI-AUTO UPP SHOTGUN, BASED ON KS-23
/obj/item/weapon/gun/shotgun/type23
- name = "\improper Type 23 riot shotgun"
- desc = "As UPP soldiers frequently reported being outmatched by enemy combatants, UPP High Command commissioned a large amount of Type 23 shotguns, originally used for quelling defector colony riots. This slow semi-automatic shotgun chambers 8 gauge, and packs a mean punch."
+ name = "\improper KS-29/4 combat shotgun"
+ desc = "A contemporary semi-automatic design based off of the KS-23, a Soviet-era pump-action riot shotgun chambered in 6 gauge shells. Updated for the UPP's Naval Infantry as a boarding gun, it was downgraded to 8 gauge chambering in order to make it more controllable without much loss to overall firepower and allow for easier storage of large quantities of shells on the individual user. Its internal tube magazine can store 4 shells."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
- icon_state = "type23"
- item_state = "type23"
- fire_sound = 'sound/weapons/gun_type23.ogg' //not perfect, too small
+ icon_state = "type23_tactical"
+ item_state = "type23_tactical"
+ fire_sound = 'sound/weapons/gun_type23.ogg'
current_mag = /obj/item/ammo_magazine/internal/shotgun/type23
attachable_allowed = list(
/obj/item/attachable/reddot, // Rail
/obj/item/attachable/reddot/upp,
/obj/item/attachable/reflex,
/obj/item/attachable/reflex/upp,
+ /obj/item/attachable/scope/upp,
/obj/item/attachable/flashlight,
/obj/item/attachable/magnetic_harness,
/obj/item/attachable/bayonet, // Muzzle
@@ -392,9 +380,8 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/attachable/burstfire_assembly,
/obj/item/attachable/stock/type23, // Stock
)
- flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_INTERNAL_MAG
+ flags_gun_features = GUN_CAN_POINTBLANK|GUN_INTERNAL_MAG
flags_equip_slot = SLOT_BACK
- map_specific_decoration = FALSE
gauge = "8g"
starting_attachment_types = list(/obj/item/attachable/stock/type23)
@@ -403,101 +390,26 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/weapon/gun/shotgun/type23/set_gun_config_values()
..()
- set_fire_delay(2.5 SECONDS)
+ set_fire_delay(FIRE_DELAY_TIER_8)
accuracy_mult = BASE_ACCURACY_MULT
- accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10
+ accuracy_mult_unwielded = BASE_ACCURACY_MULT
scatter = SCATTER_AMOUNT_TIER_4
scatter_unwielded = SCATTER_AMOUNT_TIER_1
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_1
recoil_unwielded = RECOIL_AMOUNT_TIER_1
-/obj/item/weapon/gun/shotgun/type23/breacher
- random_spawn_chance = 100
- random_rail_chance = 100
- random_spawn_rail = list(
- /obj/item/attachable/magnetic_harness,
- /obj/item/attachable/flashlight,
- )
- random_muzzle_chance = 100
- random_spawn_muzzle = list(
- /obj/item/attachable/bayonet/upp,
- )
- random_under_chance = 40
- random_spawn_under = list(
- /obj/item/attachable/verticalgrip/upp,
- )
-
-/obj/item/weapon/gun/shotgun/type23/breacher/slug
- current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/slug
-
-/obj/item/weapon/gun/shotgun/type23/breacher/flechette
- current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/flechette
-
-/obj/item/weapon/gun/shotgun/type23/dual
- random_spawn_chance = 100
- random_rail_chance = 100
- random_spawn_rail = list(
- /obj/item/attachable/magnetic_harness,
- )
- random_muzzle_chance = 80
- random_spawn_muzzle = list(
- /obj/item/attachable/bayonet/upp,
- /obj/item/attachable/heavy_barrel,
- )
- random_under_chance = 100
- random_spawn_under = list(
- /obj/item/attachable/flashlight/grip,
- /obj/item/attachable/verticalgrip/upp,
- )
-
-/obj/item/weapon/gun/shotgun/type23/dragon
- current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/dragonsbreath
- random_spawn_chance = 100
- random_rail_chance = 100
- random_spawn_rail = list(
- /obj/item/attachable/magnetic_harness,
- )
- random_muzzle_chance = 70
- random_spawn_muzzle = list(
- /obj/item/attachable/bayonet/upp,
- /obj/item/attachable/heavy_barrel,
- )
- random_under_chance = 100
- random_spawn_under = list(
- /obj/item/attachable/attached_gun/extinguisher,
- )
-
-/obj/item/weapon/gun/shotgun/type23/riot_control
- name = "\improper Type 23-R riot control shotgun"
- desc = "This slow semi-automatic shotgun chambers 8 gauge, and packs a mean punch. The -R version is designed for UPP colony security personnel and handling colony rioting, sporting an integrated vertical grip but lacking in attachment choices."
- current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/beanbag
- attachable_allowed = list(
- /obj/item/attachable/reddot, //Rail
- /obj/item/attachable/reddot/upp,
- /obj/item/attachable/reflex,
- /obj/item/attachable/reflex/upp,
- /obj/item/attachable/flashlight,
- /obj/item/attachable/magnetic_harness,
- /obj/item/attachable/verticalgrip, //Underbarrel
- /obj/item/attachable/verticalgrip/upp,
- /obj/item/attachable/stock/type23, //Stock
- )
- flags_gun_features = GUN_CAN_POINTBLANK|GUN_AMMO_COUNTER|GUN_INTERNAL_MAG
- flags_equip_slot = SLOT_BACK
- map_specific_decoration = FALSE
- gauge = "8g"
- starting_attachment_types = list(/obj/item/attachable/stock/type23)
-/obj/item/weapon/gun/shotgun/type23/riot_control/handle_starting_attachment()
- . = ..()
- var/obj/item/attachable/verticalgrip/integrated_grip = new(src)
- integrated_grip.flags_attach_features &= ~ATTACH_REMOVABLE
- integrated_grip.Attach(src)
- update_attachable(integrated_grip.slot)
+/obj/item/weapon/gun/shotgun/type23/riot
+ name = "\improper KS-29 riot shotgun"
+ desc = "A contemporary semi-automatic design based off of the KS-23, a Soviet-era riot shotgun chambered in 6 gauge shells. Like its Naval Infantry sibling, it is downgraded to 8 gauge chambering in order to make it more controllable without much loss to overall firepower and allow for easier storage of large quantities of shells on the individual user. Its internal tube magazine can store 4 shells."
+ icon = 'icons/obj/items/weapons/guns/guns_by_faction/upp.dmi'
+ icon_state = "type23_wood"
+ item_state = "type23_wood"
+ starting_attachment_types = list(/obj/item/attachable/stock/type23/wood)
-/obj/item/weapon/gun/shotgun/type23/pve
- current_mag = /obj/item/ammo_magazine/internal/shotgun/type23/special
+/obj/item/weapon/gun/shotgun/type23/riot/set_gun_attachment_offsets()
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 19,"rail_x" = 13, "rail_y" = 21, "under_x" = 24, "under_y" = 15, "stock_x" = 16, "stock_y" = 15)
//-------------------------------------------------------
//DOUBLE SHOTTY
@@ -653,7 +565,7 @@ can cause issues with ammo types getting mixed up during the burst.
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10
scatter = SCATTER_AMOUNT_TIER_7
scatter_unwielded = SCATTER_AMOUNT_TIER_1
- damage_mult = BASE_BULLET_DAMAGE_MULT - BULLET_DAMAGE_MULT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_3
recoil_unwielded = RECOIL_AMOUNT_TIER_1
@@ -676,7 +588,7 @@ can cause issues with ammo types getting mixed up during the burst.
scatter = SCATTER_AMOUNT_TIER_6
burst_scatter_mult = SCATTER_AMOUNT_TIER_10
scatter_unwielded = SCATTER_AMOUNT_TIER_2
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_7
+ damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_3
recoil_unwielded = RECOIL_AMOUNT_TIER_1
@@ -720,7 +632,7 @@ can cause issues with ammo types getting mixed up during the burst.
set_fire_delay(FIRE_DELAY_TIER_7)
accuracy_mult_unwielded = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_10
scatter_unwielded = SCATTER_AMOUNT_TIER_7
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_5
+ damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_2
recoil_unwielded = RECOIL_AMOUNT_TIER_3
@@ -793,7 +705,6 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/attachable/lasersight,
/obj/item/attachable/stock/mou53,
)
- map_specific_decoration = TRUE
civilian_usable_override = FALSE
/obj/item/weapon/gun/shotgun/double/mou53/set_gun_attachment_offsets()
@@ -1076,8 +987,8 @@ can cause issues with ammo types getting mixed up during the burst.
//Shotguns in this category will need to be pumped each shot.
/obj/item/weapon/gun/shotgun/pump
- name = "\improper M37A2 pump shotgun"
- desc = "An Armat Battlefield Systems classic design, the M37A2 combines close-range firepower with long term reliability. Requires a pump, which is a Unique Action."
+ name = "Ithaca 37 pump-action shotgun"
+ desc = "A customized Ithaca 37 hunting shotgun. Its wooden stock has been replaced with a bakelite pistol grip, and its barrel and magazine tube have been cut down to half their lengths for easier handling in close quarters at the cost of magazine size, only fitting four shells and one chambered."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m37"
item_state = "m37"
@@ -1111,11 +1022,10 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/attachable/attached_gun/flamer/advanced,
/obj/item/attachable/stock/shotgun,
)
- map_specific_decoration = TRUE
/obj/item/weapon/gun/shotgun/pump/Initialize(mapload, spawn_empty)
. = ..()
- pump_delay = FIRE_DELAY_TIER_5*2
+ pump_delay = FIRE_DELAY_TIER_8
additional_fire_group_delay += pump_delay
@@ -1126,7 +1036,7 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/weapon/gun/shotgun/pump/set_gun_config_values()
..()
set_burst_amount(BURST_AMOUNT_TIER_1)
- set_fire_delay(FIRE_DELAY_TIER_7 * 4)
+ set_fire_delay(FIRE_DELAY_TIER_7)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10
scatter = SCATTER_AMOUNT_TIER_6
@@ -1135,7 +1045,7 @@ can cause issues with ammo types getting mixed up during the burst.
damage_mult = BASE_BULLET_DAMAGE_MULT
recoil = RECOIL_AMOUNT_TIER_4
recoil_unwielded = RECOIL_AMOUNT_TIER_2
- wield_delay = WIELD_DELAY_MIN
+ //wield_delay = WIELD_DELAY_MIN
/obj/item/weapon/gun/shotgun/pump/unique_action(mob/user)
pump_shotgun(user)
@@ -1199,9 +1109,6 @@ can cause issues with ammo types getting mixed up during the burst.
//-------------------------------------------------------
-/obj/item/weapon/gun/shotgun/pump/special
- current_mag = /obj/item/ammo_magazine/internal/shotgun/special
-
/obj/item/weapon/gun/shotgun/pump/dual_tube
name = "generic dual-tube pump shotgun"
desc = "A twenty-round pump action shotgun with dual internal tube magazines. You can switch the active internal magazine by toggling the shotgun tube."
@@ -1252,7 +1159,7 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb
name = "\improper HG 37-12 pump shotgun"
- desc = "A eight-round pump action shotgun with four-round capacity dual internal tube magazines allowing for quick reloading and highly accurate fire. Used exclusively by Colonial Marshals. You can switch the active internal magazine by toggling the shotgun tube."
+ desc = "An eight-round pump action shotgun with four-round capacity dual internal tube magazines allowing for quick reloading and highly accurate fire. Standard issue shotgun of the Colonial Marshals Bureau. By toggling the shotgun tube, you can swap between the internal magazines."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
icon_state = "hg3712"
item_state = "hg3712"
@@ -1270,7 +1177,6 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/attachable/attached_gun/flamer/advanced,
)
starting_attachment_types = list(/obj/item/attachable/stock/hg3712)
- map_specific_decoration = FALSE
civilian_usable_override = TRUE // Come on. It's THE, er, other, survivor shotgun.
@@ -1280,7 +1186,7 @@ can cause issues with ammo types getting mixed up during the burst.
/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/set_gun_config_values()
..()
- set_fire_delay(1.6 SECONDS)
+ set_fire_delay(FIRE_DELAY_TIER_7)
accuracy_mult = BASE_ACCURACY_MULT + HIT_ACCURACY_MULT_TIER_3
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_10
scatter = SCATTER_AMOUNT_TIER_6
@@ -1299,8 +1205,4 @@ can cause issues with ammo types getting mixed up during the burst.
current_mag = /obj/item/ammo_magazine/internal/shotgun/cmb/m3717
starting_attachment_types = list(/obj/item/attachable/stock/hg3712/m3717)
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717/set_gun_config_values()
- ..()
- damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_3
-
//-------------------------------------------------------
diff --git a/code/modules/projectiles/guns/smartgun.dm b/code/modules/projectiles/guns/smartgun.dm
index dca1410900..b19195127e 100644
--- a/code/modules/projectiles/guns/smartgun.dm
+++ b/code/modules/projectiles/guns/smartgun.dm
@@ -3,7 +3,7 @@
//Come get some.
/obj/item/weapon/gun/smartgun
- name = "\improper M56B smartgun"
+ name = "\improper M56A2 smartgun"
desc = "The actual firearm in the 4-piece M56 Smartgun System. Essentially a heavy, mobile machinegun.\nYou may toggle firing restrictions by using a special action.\nAlt-click it to open the feed cover and allow for reloading."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m56"
diff --git a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
index 0f767d679d..9148062d0c 100644
--- a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
@@ -330,7 +330,7 @@
icon_state = "m79"
item_state = "m79"
flags_equip_slot = SLOT_BACK
- preload = /obj/item/explosive/grenade/slug/baton
+ preload = null
is_lobbing = TRUE
actions_types = list(/datum/action/item_action/toggle_firing_level)
diff --git a/code/modules/projectiles/magazines/pistols.dm b/code/modules/projectiles/magazines/pistols.dm
index 3ae221fd42..ddcbefcb63 100644
--- a/code/modules/projectiles/magazines/pistols.dm
+++ b/code/modules/projectiles/magazines/pistols.dm
@@ -60,48 +60,52 @@
//-------------------------------------------------------
-//88M4 based off VP70
+//vp70 based off VP70
-/obj/item/ammo_magazine/pistol/mod88
- name = "\improper 88M4 AP magazine (9mm)"
- default_ammo = /datum/ammo/bullet/pistol/ap
- caliber = "9mm"
- icon_state = "88m4"
- max_rounds = 19
- gun_type = /obj/item/weapon/gun/pistol/mod88
- ammo_band_icon = "+88m4_band"
- ammo_band_icon_empty = "+88m4_band_e"
- ammo_band_color = AMMO_BAND_COLOR_AP
-/obj/item/ammo_magazine/pistol/mod88/normalpoint // Unused
- name = "\improper 88M4 magazine (9mm)"
+/obj/item/ammo_magazine/pistol/vp70
+ name = "\improper VP70 Magazine (9mm)"
default_ammo = /datum/ammo/bullet/pistol
caliber = "9mm"
+ icon_state = "vp70"
+ max_rounds = 19
+ gun_type = /obj/item/weapon/gun/pistol/vp70
+ ammo_band_icon = "+vp70_band"
+ ammo_band_icon_empty = "+vp70_band_e"
ammo_band_color = null
-/obj/item/ammo_magazine/pistol/mod88/normalpoint/extended // Unused
- name = "\improper 88M4 extended magazine (9mm)"
- icon_state = "88m4_mag_ex"
+/obj/item/ammo_magazine/pistol/vp70/ap
+ name = "\improper VP70 AP magazine (9mm)"
+ default_ammo = /datum/ammo/bullet/pistol/ap
+ caliber = "9mm"
+ icon_state = "vp70"
+ max_rounds = 19
+ gun_type = /obj/item/weapon/gun/pistol/vp70
+ ammo_band_color = AMMO_BAND_COLOR_AP
+
+/obj/item/ammo_magazine/pistol/vp70/extended // Unused
+ name = "\improper vp70 extended magazine (9mm)"
+ icon_state = "vp70_mag_ex"
default_ammo = /datum/ammo/bullet/pistol
caliber = "9mm"
-/obj/item/ammo_magazine/pistol/mod88/toxin
- name = "\improper 88M4 toxic magazine (9mm)"
+/obj/item/ammo_magazine/pistol/vp70/toxin
+ name = "\improper vp70 toxic magazine (9mm)"
default_ammo = /datum/ammo/bullet/pistol/ap/toxin
ammo_band_color = AMMO_BAND_COLOR_TOXIN
-/obj/item/ammo_magazine/pistol/mod88/penetrating
- name = "\improper 88M4 wall-penetrating magazine (9mm)"
+/obj/item/ammo_magazine/pistol/vp70/penetrating
+ name = "\improper vp70 wall-penetrating magazine (9mm)"
default_ammo = /datum/ammo/bullet/pistol/ap/penetrating
ammo_band_color = AMMO_BAND_COLOR_PENETRATING
-/obj/item/ammo_magazine/pistol/mod88/incendiary
- name = "\improper 88M4 incendiary magazine (9mm)"
+/obj/item/ammo_magazine/pistol/vp70/incendiary
+ name = "\improper vp70 incendiary magazine (9mm)"
default_ammo = /datum/ammo/bullet/pistol/incendiary
ammo_band_color = AMMO_BAND_COLOR_INCENDIARY
-/obj/item/ammo_magazine/pistol/mod88/rubber
- name = "\improper 88M4 rubber magazine (9mm)"
+/obj/item/ammo_magazine/pistol/vp70/rubber
+ name = "\improper vp70 rubber magazine (9mm)"
default_ammo = /datum/ammo/bullet/pistol/rubber
ammo_band_color = AMMO_BAND_COLOR_RUBBER
@@ -269,36 +273,41 @@
//-------------------------------------------------------
//CLF HOLDOUT PISTOL
/obj/item/ammo_magazine/pistol/clfpistol
- name = "D18 magazine (9mm)"
- desc = "A small D18 magazine storing 7 9mm bullets. How is it even this small?"
- default_ammo = /datum/ammo/bullet/pistol
- caliber = "9mm"
+ name = "Type 18 magazine (.50)"
+ default_ammo = /datum/ammo/bullet/pistol/heavy/super
+ caliber = ".50"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi'
icon_state = "m4a3" // placeholder
- max_rounds = 7
+ max_rounds = 3
w_class = SIZE_TINY
gun_type = /obj/item/weapon/gun/pistol/clfpistol
-
//-------------------------------------------------------
//.45 MARSHALS PISTOL //Inspired by the Browning Hipower
// rebalanced - singlefire, very strong bullets but slow to fire and heavy recoil
// redesigned - now rejected USCM sidearm model, utilized by Colonial Marshals and other stray groups.
/obj/item/ammo_magazine/pistol/highpower
- name = "\improper MK-45 Automagnum magazine (.45)"
- default_ammo = /datum/ammo/bullet/pistol/highpower
+ name = "\improper HG-45 'Aguila' magazine (.45)"
+ default_ammo = /datum/ammo/bullet/pistol/heavy
caliber = ".45"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi'
icon_state = "highpower"
- max_rounds = 13
+ max_rounds = 11
gun_type = /obj/item/weapon/gun/pistol/highpower
//comes in black, for the black variant of the highpower, better for military usage
/obj/item/ammo_magazine/pistol/highpower/black
+ name = "\improper HG 45 'Marina' magazine (.45)"
icon_state = "highpower_b"
+/obj/item/ammo_magazine/pistol/highpower/automag
+ name = "\improper HG 44 'Automag' magazine (.44)"
+ icon_state = "highpower_b"
+ max_rounds = 13
+ default_ammo = /datum/ammo/bullet/revolver
+
//-------------------------------------------------------
/*
Auto 9 The gun RoboCop uses. A better version of the VP78, with more rounds per magazine. Probably the best pistol around, but takes no attachments.
@@ -310,7 +319,7 @@ It is a modified Beretta 93R, and can fire three-round burst or single fire. Whe
default_ammo = /datum/ammo/bullet/pistol/squash
caliber = "9mm"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi'
- icon_state = "88m4" //PLACEHOLDER
+ icon_state = "vp70" //PLACEHOLDER
max_rounds = 50
gun_type = /obj/item/weapon/gun/pistol/auto9
diff --git a/code/modules/projectiles/magazines/revolvers.dm b/code/modules/projectiles/magazines/revolvers.dm
index 7d56612530..8b32587c7a 100644
--- a/code/modules/projectiles/magazines/revolvers.dm
+++ b/code/modules/projectiles/magazines/revolvers.dm
@@ -78,21 +78,21 @@
max_rounds = 6
gun_type = /obj/item/weapon/gun/revolver/small
-/obj/item/ammo_magazine/revolver/cmb
- name = "\improper Spearhead hollowpoint speed loader (.357)"
- desc = "A speedloader of 6 hollowpoint .357 bullets, issued to Colonial Marshals to both prevent overpenetration and improve performance against unarmored criminals or wildlife. Less effective against hard targets, but what're the chances of encountering those?"
- default_ammo = /datum/ammo/bullet/revolver/small/hollowpoint
+/obj/item/ammo_magazine/revolver/spearhead
+ name = "\improper Spearhead speed loader (.357)"
+ desc = "A speedloader of 6 FMJ .357 bullets, uncommonly issued to Colonial Marshals due to overpenetration risks."
+ default_ammo = /datum/ammo/bullet/revolver/small
caliber = ".357"
icon = 'icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi'
- icon_state = "cmb_hp"
+ icon_state = "cmb"
max_rounds = 6
- gun_type = /obj/item/weapon/gun/revolver/cmb
+ gun_type = /obj/item/weapon/gun/revolver/spearhead
-/obj/item/ammo_magazine/revolver/cmb/normalpoint //put these in the marshal ert - ok sure :)
+/obj/item/ammo_magazine/revolver/spearhead/hollowpoint
name = "\improper Spearhead speed loader (.357)"
- desc = "A speedloader of 6 FMJ .357 bullets, uncommonly issued to Colonial Marshals due to overpenetration risks."
- default_ammo = /datum/ammo/bullet/revolver/small
- icon_state = "cmb"
+ desc = "A speedloader of 6 hollowpoint .357 bullets, commonly issued to Colonial Marshals to both prevent overpenetration and improve performance against unarmored criminals or wildlife."
+ default_ammo = /datum/ammo/bullet/revolver/small/hollowpoint
+ icon_state = "cmb_hp"
/**
* MATEBA REVOLVER
@@ -205,15 +205,15 @@
//-------------------------------------------------------
//MARSHALS REVOLVER //Spearhead exists in Alien cannon.
-/obj/item/ammo_magazine/internal/revolver/cmb
+/obj/item/ammo_magazine/internal/revolver/spearhead
default_ammo = /datum/ammo/bullet/revolver/small
caliber = ".357"
- gun_type = /obj/item/weapon/gun/revolver/cmb
+ gun_type = /obj/item/weapon/gun/revolver/spearhead
-/obj/item/ammo_magazine/internal/revolver/cmb/hollowpoint
+/obj/item/ammo_magazine/internal/revolver/spearhead/hollowpoint
default_ammo = /datum/ammo/bullet/revolver/small/hollowpoint
caliber = ".357"
- gun_type = /obj/item/weapon/gun/revolver/cmb
+ gun_type = /obj/item/weapon/gun/revolver/spearhead
//-------------------------------------------------------
//BIG GAME HUNTER'S REVOLVER
diff --git a/code/modules/projectiles/magazines/shotguns.dm b/code/modules/projectiles/magazines/shotguns.dm
index 3c26685a55..e378aed3c4 100644
--- a/code/modules/projectiles/magazines/shotguns.dm
+++ b/code/modules/projectiles/magazines/shotguns.dm
@@ -24,7 +24,7 @@ var/list/shotgun_boxes_12g = list(
caliber = "12g"
gun_type = /obj/item/weapon/gun/shotgun
max_rounds = 25 // Real shotgun boxes are usually 5 or 25 rounds. This works with the new system, five handfuls.
- w_class = SIZE_LARGE // Can't throw it in your pocket, friend.
+ w_class = SIZE_MEDIUM // Can't throw it in your pocket, friend.
flags_magazine = AMMUNITION_REFILLABLE|AMMUNITION_HANDFUL_BOX
handful_state = "slug_shell"
transfer_handful_amount = 5
@@ -70,15 +70,6 @@ var/list/shotgun_boxes_12g = list(
default_ammo = /datum/ammo/bullet/shotgun/beanbag
handful_state = "beanbag_slug"
-/obj/item/ammo_magazine/shotgun/beanbag/riot
- name = "box of RC beanbag slugs"
- desc = "A box filled with beanbag shotgun shells used for non-lethal crowd control. Riot Control use only."
- icon_state = "beanbag"
- item_state = "beanbag"
- default_ammo = /datum/ammo/bullet/shotgun/beanbag
- handful_state = "beanbag_slug"
- caliber = "20g"
-
/obj/item/ammo_magazine/shotgun/buckshot/special
name = "box of buckshot shells, USCM special type"
desc = "A box filled with buckshot spread shotgun shells, USCM special type. 12 Gauge."
@@ -91,12 +82,14 @@ Generic internal magazine. All shotguns will use this or a variation with differ
Since all shotguns share ammo types, the gun path is going to be the same for all of them. And it
also doesn't really matter. You can only reload them with handfuls.
*/
+
/obj/item/ammo_magazine/internal/shotgun
name = "shotgun tube"
desc = "An internal magazine. It is not supposed to be seen or removed."
default_ammo = /datum/ammo/bullet/shotgun/buckshot
caliber = "12g"
- max_rounds = 9
+ max_rounds = 4
+ current_rounds = 0
chamber_closed = 0
/obj/item/ammo_magazine/internal/shotgun/double //For a double barrel.
@@ -117,36 +110,26 @@ also doesn't really matter. You can only reload them with handfuls.
caliber = "2 bore"
default_ammo = /datum/ammo/bullet/shotgun/twobore
+/obj/item/ammo_magazine/internal/shotgun/combat
+ caliber = "12g"
+ max_rounds = 6
+
/obj/item/ammo_magazine/internal/shotgun/combat/riot
- caliber = "20g"
default_ammo = /datum/ammo/bullet/shotgun/beanbag
+ current_rounds = 6
+
+/obj/item/ammo_magazine/internal/shotgun/marsoc
+ caliber = "12g"
+ max_rounds = 7
+ current_rounds = 7
/obj/item/ammo_magazine/internal/shotgun/merc
max_rounds = 5
-/obj/item/ammo_magazine/internal/shotgun/buckshot
- default_ammo = /datum/ammo/bullet/shotgun/buckshot
-
/obj/item/ammo_magazine/internal/shotgun/type23
- default_ammo = /datum/ammo/bullet/shotgun/heavy/buckshot
caliber = "8g"
max_rounds = 4
-/obj/item/ammo_magazine/internal/shotgun/type23/slug
- default_ammo = /datum/ammo/bullet/shotgun/heavy/slug
-
-/obj/item/ammo_magazine/internal/shotgun/type23/flechette
- default_ammo = /datum/ammo/bullet/shotgun/heavy/flechette
-
-/obj/item/ammo_magazine/internal/shotgun/type23/dragonsbreath
- default_ammo = /datum/ammo/bullet/shotgun/heavy/buckshot/dragonsbreath
-
-/obj/item/ammo_magazine/internal/shotgun/type23/beanbag
- default_ammo = /datum/ammo/bullet/shotgun/heavy/beanbag
-
-/obj/item/ammo_magazine/internal/shotgun/type23/special
- default_ammo = /datum/ammo/bullet/shotgun/heavy/buckshot/special
-
/obj/item/ammo_magazine/internal/shotgun/cmb
default_ammo = /datum/ammo/bullet/shotgun/buckshot
max_rounds = 4
@@ -154,9 +137,6 @@ also doesn't really matter. You can only reload them with handfuls.
/obj/item/ammo_magazine/internal/shotgun/cmb/m3717
max_rounds = 5
-/obj/item/ammo_magazine/internal/shotgun/special
- default_ammo = /datum/ammo/bullet/shotgun/buckshot/special
-
//-------------------------------------------------------
/*
diff --git a/code/modules/reagents/chemistry_reactions/food_drink.dm b/code/modules/reagents/chemistry_reactions/food_drink.dm
index 7e3fdac324..63c79ea577 100644
--- a/code/modules/reagents/chemistry_reactions/food_drink.dm
+++ b/code/modules/reagents/chemistry_reactions/food_drink.dm
@@ -186,6 +186,66 @@
required_reagents = list("hot_ramen" = 6, "hotsauce" = 1)
result_amount = 6
+/datum/chemical_reaction/banana //WHO DIDN'T MAKE ALL THE JUICES SUBTYPES OF A PARENT ONE AAAAAA
+ name = "Banana Juice"
+ id = "banana"
+ result = "banana"
+ required_reagents = list("dehydrated_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/orangejuice
+ name = "Orange Juice"
+ id = "orangejuice"
+ result = "orangejuice"
+ required_reagents = list("dehydrated_orange_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/applejuice
+ name = "Apple Juice"
+ id = "applejuice"
+ result = "applejuice"
+ required_reagents = list("dehydrated_apple_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/watermelonjuice
+ name = "Watermelon Juice"
+ id = "watermelonjuice"
+ result = "watermelonjuice"
+ required_reagents = list("dehydrated_watermelon_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/grapejuice
+ name = "Grape Juice"
+ id = "grapejuice"
+ result = "grapejuice"
+ required_reagents = list("dehydrated_grape_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/pineapplejuice
+ name = "Pineapple Juice"
+ id = "pineapplejuice"
+ result = "pineapplejuice"
+ required_reagents = list("dehydrated_pineapple_juice" = 1, "water" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/egg
+ name = "Rehydrated Egg Product"
+ id = "egg"
+ result = "egg"
+ required_reagents = list("dehydrated_egg_powder" = 1, "water" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/egg/on_reaction(datum/reagents/holder, created_volume)
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/reagent_container/food/snacks/egg/dried(location)
+
+/datum/chemical_reaction/milk
+ name = "Rehydrated Milk"
+ id = "milk"
+ result = "milk"
+ required_reagents = list("dehydrated_milk_powder" = 1, "water" = 5)
+ result_amount = 5
+
//*****************************************************************************************************/
//******************************************Cocktails**************************************************/
diff --git a/code/modules/reagents/chemistry_reagents/drink.dm b/code/modules/reagents/chemistry_reagents/drink.dm
index 9739687dec..e06f898be4 100644
--- a/code/modules/reagents/chemistry_reagents/drink.dm
+++ b/code/modules/reagents/chemistry_reagents/drink.dm
@@ -151,6 +151,17 @@
description = "Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways?"
color = "#FF004F" // rgb: 255, 0, 79
+/datum/reagent/drink/pineapplejuice
+ name = "Pineapple Juice"
+ id = "pineapplejuice"
+ description = "Refreshingly citric, with a pleasant flavor."
+ color = "#FFC000" // rgb: 255, 192, 0
+
+/datum/reagent/drink/applejuice
+ name = "Apple Juice"
+ id = "applejuice"
+ description = "The pleasantly sweet taste of apples, now in liquid form."
+ color = "#f59a40" // rgb: 245, 154, 64
//MILK//
diff --git a/code/modules/reagents/chemistry_reagents/food.dm b/code/modules/reagents/chemistry_reagents/food.dm
index 0ec3a22502..8e167908b2 100644
--- a/code/modules/reagents/chemistry_reagents/food.dm
+++ b/code/modules/reagents/chemistry_reagents/food.dm
@@ -307,3 +307,83 @@
color = "#FFFF00"
chemclass = CHEM_CLASS_RARE
flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_juice
+ name = "Mystery Juice Powder"
+ id = "dehydrated_juice"
+ description = "Powderized fruit-juice ready to be mixed with water. Smells of artificial bananas."
+ reagent_state = SOLID
+ color = "#863333" // rgb: 175, 175, 0
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_orange_juice
+ name = "Orange Juice Powder"
+ id = "dehydrated_orange_juice"
+ description = "Powderized orange-juice ready to be mixed with water. Smells of, surprise surprise, oranges."
+ reagent_state = SOLID
+ color = "#E78108" // rgb: 231, 129, 8
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_apple_juice
+ name = "Apple Juice Powder"
+ id = "dehydrated_apple_juice"
+ description = "Powderized apple-juice ready to be mixed with water. Smells of, surprise surprise, apples."
+ reagent_state = SOLID
+ color = "#365E30" // rgb: 54, 94, 48
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_watermelon_juice
+ name = "Watermelon Juice Powder"
+ id = "dehydrated_watermelon_juice"
+ description = "Powderized watermelon-juice ready to be mixed with water. Smells of, surprise surprise, watermelons."
+ reagent_state = SOLID
+ color = "#863333" // rgb: 134, 51, 51
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_grape_juice
+ name = "Grape Juice Powder"
+ id = "dehydrated_grape_juice"
+ description = "Powderized grape-juice ready to be mixed with water. Smells of, surprise surprise, grapes."
+ reagent_state = SOLID
+ color = "#863333" // rgb: 134, 51, 51
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_pineapple_juice
+ name = "Pineapple Juice Powder"
+ id = "dehydrated_pineapple_juice"
+ description = "Powderized pineapple-juice ready to be mixed with water. Smells of, surprise surprise, pineapples."
+ reagent_state = SOLID
+ color = "#FFC000" // rgb: 255, 192, 0
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_egg_powder
+ name = "Powdered Egg"
+ id = "dehydrated_egg_powder"
+ description = "Powderized egg-whites and egg-yolk ready to be mixed with water."
+ reagent_state = SOLID
+ color = "#FFFFFF" // rgb: 255,255,255
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
+
+/datum/reagent/dehydrated_milk_powder
+ name = "Dehydrated Milk Powder"
+ id = "dehydrated_milk_powder"
+ description = "Dehydrated milk-product powder waiting to be mixed with water."
+ reagent_state = SOLID
+ color = "#DFDFDF" // rgb: 223, 223, 223
+ chemclass = CHEM_CLASS_COMMON
+ properties = list(PROPERTY_NUTRITIOUS = 2)
+ flags = REAGENT_NO_GENERATION
diff --git a/code/modules/reagents/chemistry_reagents/other.dm b/code/modules/reagents/chemistry_reagents/other.dm
index bbeeca2e3c..557e977929 100644
--- a/code/modules/reagents/chemistry_reagents/other.dm
+++ b/code/modules/reagents/chemistry_reagents/other.dm
@@ -109,10 +109,10 @@
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen. It is a vital component to all known forms of organic life, even though it provides no calories or organic nutrients. It is also an effective solvent and can be used for cleaning."
reagent_state = LIQUID
color = "#0064C8" // rgb: 0, 100, 200
- custom_metabolism = AMOUNT_PER_TIME(1, 200 SECONDS)
chemclass = CHEM_CLASS_BASIC
chemfiresupp = TRUE
intensitymod = -3
+ properties = list(PROPERTY_HEMOGENIC = 1)
/datum/reagent/water/reaction_turf(turf/T, volume)
if(!istype(T)) return
@@ -132,6 +132,12 @@
if(M.fire_stacks <= 0)
M.ExtinguishMob()
+/datum/reagent/water/on_mob_life(mob/living/M)
+ . = ..()
+ if(ishuman(M) && volume >= 100 && prob(25))
+ var/mob/living/carbon/human/human = M
+ human.vomit()
+
/datum/reagent/water/holywater
name = "Holy Water"
id = "holywater"
diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm
index 0024958c8e..ccc7c891e5 100644
--- a/code/modules/shuttle/computers/dropship_computer.dm
+++ b/code/modules/shuttle/computers/dropship_computer.dm
@@ -259,8 +259,8 @@
hijack.fire()
GLOB.alt_ctrl_disabled = TRUE
- marine_announcement("Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.", "Dropship Alert", 'sound/AI/hijack.ogg', logging = ARES_LOG_SECURITY)
- log_ares_flight("Unknown", "Unscheduled dropship departure detected from operational area. Hijack likely. Shutting down autopilot.")
+ marine_announcement("Unknown fault in remote flight control. Resolving as possible hijack. Marking dropship as possibly hostile and disconnecting from sensor matrix.", "Dropship Alert", 'sound/misc/notice2.ogg', logging = ARES_LOG_SECURITY)
+ log_ares_flight("Unknown", "Unknown fault in remote flight control. Resolving as possible hijack. Marking dropship as possibly hostile and disconnecting from sensor matrix.")
var/mob/living/carbon/xenomorph/xeno = user
var/hivenumber = XENO_HIVE_NORMAL
@@ -306,7 +306,7 @@
.["target_destination"] = shuttle.in_flyby? "Flyby" : shuttle.destination.name
.["door_status"] = is_remote ? list() : shuttle.get_door_data()
- .["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT)
+ .["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED)
// Launch Alarm Variables
.["playing_launch_announcement_alarm"] = shuttle.playing_launch_announcement_alarm
@@ -363,7 +363,7 @@
var/dock_id = params["target"]
if(dock_id == DROPSHIP_FLYBY_ID)
- if(!skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT))
+ if(!skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
to_chat(user, SPAN_WARNING("You don't have the skill to perform a flyby."))
return FALSE
update_equipment(is_optimised, TRUE)
@@ -465,7 +465,7 @@
shuttle.setTimer(DROPSHIP_WARMUP_TIME)
if("play_launch_announcement_alarm")
if (shuttle.mode != SHUTTLE_IDLE && shuttle.mode != SHUTTLE_RECHARGING)
- to_chat(usr, SPAN_WARNING("The Launch Announcement Alarm is designed to tell people that you're going to take off soon."))
+ to_chat(usr, SPAN_WARNING("The launch warning alarm is only for alerting people to a takeoff."))
return
shuttle.alarm_sound_loop.start()
shuttle.playing_launch_announcement_alarm = TRUE
@@ -503,7 +503,7 @@
/obj/structure/machinery/computer/shuttle/dropship/flight/toc
name = "dropship control screen"
- desc = "A screen on the TOC computer for controlling the dropship linked to it."
+ desc = "A screen on the TOC computer for controlling the dropship linked to it. Has an abbreviated version of the flight controls and data."
icon = 'icons/obj/structures/machinery/computer.dmi'
icon_state = "toc_shuttle"
shuttleId = DROPSHIP_MIDWAY
diff --git a/code/modules/shuttle/dropship.dm b/code/modules/shuttle/dropship.dm
index bf38f9fa3b..02b225d917 100644
--- a/code/modules/shuttle/dropship.dm
+++ b/code/modules/shuttle/dropship.dm
@@ -222,8 +222,19 @@
opacity = TRUE
/obj/structure/shuttle/part/midway/transparent
+ desc = "The cockpit canopy transparency of a UD-4 gunship. Composed of a composite material that matches the hull's radar absorbency while providing protection against glare and sniping lasers."
opacity = FALSE
+/obj/structure/shuttle/part/midway/transparent/nosecone
+ desc = "Part of the nose assembly of the UD-4 Cheyenne. Contains the forward sensor complex."
+
+/obj/structure/shuttle/part/midway/gunpod_prop
+ name = "\improper Midway"
+ desc = "The nose of a UD-4 Cheyenne dropship. Contains the AESA radar system and the chin-mounted powered gunpod containing the GAU-113/B 25mm rotary autocannon with a 900 round drum."
+ icon = 'icons/turf/dropship4.dmi'
+ icon_state = "101a"
+ opacity = TRUE
+
/obj/structure/shuttle/part/cyclone
name = "\improper Cyclone"
icon = 'icons/turf/dropship2.dmi'
@@ -231,8 +242,19 @@
opacity = TRUE
/obj/structure/shuttle/part/cyclone/transparent
+ desc = "The cockpit canopy transparency of a UD-4 gunship. Composed of a composite material that matches the hull's radar absorbency while providing protection against glare and sniping lasers."
opacity = FALSE
+/obj/structure/shuttle/part/cyclone/transparent/nosecone
+ desc = "Part of the nose assembly of the UD-4 Cheyenne. Contains the forward sensor complex."
+
+/obj/structure/shuttle/part/cyclone/gunpod_prop
+ name = "\improper Cyclone"
+ desc = "The nose of a UD-4 Cheyenne dropship. Contains the AESA radar system and the chin-mounted powered gunpod containing the GAU-113/B 25mm rotary autocannon with a 900 round drum."
+ icon = 'icons/turf/dropship2.dmi'
+ icon_state = "101a"
+ opacity = TRUE
+
/obj/structure/shuttle/part/tornado
name = "\improper Tornado"
icon = 'icons/turf/dropship3.dmi'
@@ -240,8 +262,19 @@
opacity = TRUE
/obj/structure/shuttle/part/tornado/transparent
+ desc = "The cockpit canopy transparency of a UD-4 gunship. Composed of a composite material that matches the hull's radar absorbency while providing protection against glare and sniping lasers."
opacity = FALSE
+/obj/structure/shuttle/part/tornado/transparent/nosecone
+ desc = "Part of the nose assembly of the UD-4 Cheyenne. Contains the forward sensor complex."
+
+/obj/structure/shuttle/part/tornado/gunpod_prop
+ name = "\improper Tornado"
+ desc = "The nose of a UD-4 Cheyenne dropship. Contains the AESA radar system and the chin-mounted powered gunpod containing the GAU-113/B 25mm rotary autocannon with a 900 round drum."
+ icon = 'icons/turf/dropship3.dmi'
+ icon_state = "101a"
+ opacity = TRUE
+
/obj/structure/shuttle/part/typhoon
name = "\improper Typhoon"
icon = 'icons/turf/dropship3.dmi'
@@ -249,8 +282,19 @@
opacity = TRUE
/obj/structure/shuttle/part/typhoon/transparent
+ desc = "The cockpit canopy transparency of a UD-4 gunship. Composed of a composite material that matches the hull's radar absorbency while providing protection against glare and sniping lasers."
opacity = FALSE
+/obj/structure/shuttle/part/typhoon/transparent/nosecone
+ desc = "Part of the nose assembly of the UD-4 Cheyenne. Contains the forward sensor complex."
+
+/obj/structure/shuttle/part/typhoon/gunpod_prop
+ name = "\improper Typhoon"
+ desc = "The nose of a UD-4 Cheyenne dropship. Contains the AESA radar system and the chin-mounted powered gunpod containing the GAU-113/B 25mm rotary autocannon with a 900 round drum."
+ icon = 'icons/turf/dropship3.dmi'
+ icon_state = "101a"
+ opacity = TRUE
+
/obj/structure/shuttle/part/tripoli
name = "\improper Tripoli"
icon = 'icons/turf/dropship.dmi'
@@ -258,4 +302,15 @@
opacity = TRUE
/obj/structure/shuttle/part/tripoli/transparent
+ desc = "The cockpit canopy transparency of a UD-4 gunship. Composed of a composite material that matches the hull's radar absorbency while providing protection against glare and sniping lasers."
opacity = FALSE
+
+/obj/structure/shuttle/part/tripoli/transparent/nosecone
+ desc = "Part of the nose assembly of the UD-4 Cheyenne. Contains the forward sensor complex."
+
+/obj/structure/shuttle/part/tripoli/gunpod_prop
+ name = "\improper Tripoli"
+ desc = "The nose of a UD-4 Cheyenne dropship. Contains the AESA radar system and the chin-mounted powered gunpod containing the GAU-113/B 25mm rotary autocannon with a 900 round drum."
+ icon = 'icons/turf/dropship.dmi'
+ icon_state = "101a"
+ opacity = TRUE
diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm
index 5819ede980..23bb364e85 100644
--- a/code/modules/shuttle/shuttles/dropship.dm
+++ b/code/modules/shuttle/shuttles/dropship.dm
@@ -142,6 +142,9 @@
dwidth = 4
dheight = 8
+/obj/docking_port/mobile/marine_dropship/upp/get_transit_path_type()
+ return /turf/open/space/transit/dropship/upp
+
/obj/docking_port/mobile/marine_dropship/cyclone
name = "Cyclone"
id = DROPSHIP_CYCLONE
@@ -151,6 +154,9 @@
dwidth = 4
dheight = 8
+/obj/docking_port/mobile/marine_dropship/cyclone/get_transit_path_type()
+ return /turf/open/space/transit/dropship/cyclone
+
/obj/docking_port/mobile/marine_dropship/tornado
name = "HLD-Tornado"
id = DROPSHIP_TORNADO
@@ -160,6 +166,9 @@
dwidth = 5
dheight = 9
+/obj/docking_port/mobile/marine_dropship/tornado/get_transit_path_type()
+ return /turf/open/space/transit/dropship/tornado
+
/obj/docking_port/mobile/marine_dropship/typhoon
name = "CMD-Typhoon"
id = DROPSHIP_TYPHOON
@@ -169,6 +178,9 @@
dwidth = 5
dheight = 9
+/obj/docking_port/mobile/marine_dropship/typhoon/get_transit_path_type()
+ return /turf/open/space/transit/dropship/typhoon
+
/obj/docking_port/mobile/marine_dropship/tripoli
name = "Tripoli"
id = DROPSHIP_TRIPOLI
@@ -178,6 +190,9 @@
dwidth = 4
dheight = 8
+/obj/docking_port/mobile/marine_dropship/tripoli/get_transit_path_type()
+ return /turf/open/space/transit/dropship/tripoli
+
/obj/docking_port/mobile/marine_dropship/alamo
name = "Alamo"
id = DROPSHIP_ALAMO
diff --git a/code/modules/vehicles/interior/interactable/vendors.dm b/code/modules/vehicles/interior/interactable/vendors.dm
index aa2411f89f..fc77d4d0d5 100644
--- a/code/modules/vehicles/interior/interactable/vendors.dm
+++ b/code/modules/vehicles/interior/interactable/vendors.dm
@@ -185,7 +185,7 @@
list("M4RA Battle Rifle", round(scale * 2), /obj/item/weapon/gun/rifle/m4ra, VENDOR_ITEM_REGULAR),
list("SIDEARMS", -1, null, null),
- list("88 Mod 4 Combat Pistol", round(scale * 2), /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR),
+ list("VP70 Combat Pistol", round(scale * 2), /obj/item/weapon/gun/pistol/vp70, VENDOR_ITEM_REGULAR),
list("M44 Combat Revolver", round(scale * 1.5), /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR),
list("M4A3 Service Pistol", round(scale * 2.5), /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_REGULAR),
@@ -215,7 +215,7 @@
list("M39 HV Magazine (10x20mm)", round(scale * 6), /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR),
list("M44 Speed Loader (.44)", round(scale * 4), /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR),
list("M4A3 Magazine (9mm)", round(scale * 10), /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR),
- list("88 Mod 4 Magazine (9mm)", round(scale * 8), /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR),
+ list("VP70 Magazine (9mm)", round(scale * 8), /obj/item/ammo_magazine/pistol/vp70, VENDOR_ITEM_REGULAR),
list("ARMOR-PIERCING AMMUNITION", -1, null, null),
list("M4RA AP Magazine (10x24mm)", 0, /obj/item/ammo_magazine/rifle/m4ra/ap, VENDOR_ITEM_REGULAR),
diff --git a/colonialmarines.dme b/colonialmarines.dme
index d5e035d6d2..cadce2ac68 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -101,6 +101,7 @@
#include "code\__DEFINES\stamina.dm"
#include "code\__DEFINES\stats.dm"
#include "code\__DEFINES\status_effects.dm"
+#include "code\__DEFINES\strippable.dm"
#include "code\__DEFINES\STUI.dm"
#include "code\__DEFINES\subsystems.dm"
#include "code\__DEFINES\surgery.dm"
@@ -481,6 +482,7 @@
#include "code\datums\elements\light_blocking.dm"
#include "code\datums\elements\mouth_drop_item.dm"
#include "code\datums\elements\poor_eyesight_correction.dm"
+#include "code\datums\elements\strippable.dm"
#include "code\datums\elements\suturing.dm"
#include "code\datums\elements\yautja_tracked_item.dm"
#include "code\datums\elements\bullet_trait\damage_boost.dm"
@@ -675,6 +677,7 @@
#include "code\datums\weather\weather_map_holder.dm"
#include "code\datums\weather\weather_events\big_red.dm"
#include "code\datums\weather\weather_events\faction_clash.dm"
+#include "code\datums\weather\weather_events\long.dm"
#include "code\datums\weather\weather_events\lv522_chances_claim.dm"
#include "code\datums\weather\weather_events\lv624.dm"
#include "code\datums\weather\weather_events\new_varadero.dm"
@@ -1911,6 +1914,7 @@
#include "code\modules\mob\living\carbon\human\human_dummy.dm"
#include "code\modules\mob\living\carbon\human\human_helpers.dm"
#include "code\modules\mob\living\carbon\human\human_movement.dm"
+#include "code\modules\mob\living\carbon\human\human_stripping.dm"
#include "code\modules\mob\living\carbon\human\inventory.dm"
#include "code\modules\mob\living\carbon\human\life.dm"
#include "code\modules\mob\living\carbon\human\login.dm"
diff --git a/html/changelogs/AutoChangeLog-pr-431.yml b/html/changelogs/AutoChangeLog-pr-431.yml
new file mode 100644
index 0000000000..1b9bfd7a90
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-431.yml
@@ -0,0 +1,4 @@
+author: "BonniePandora"
+delete-after: True
+changes:
+ - qol: "Toolbelts can now carry the high-capacity blowtorch"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml
index eec1de5ffe..65fe0ef0b8 100644
--- a/html/changelogs/archive/2024-08.yml
+++ b/html/changelogs/archive/2024-08.yml
@@ -84,3 +84,49 @@
- bugfix: Fixed the 88 Mod 4 pistol's holster sprite.
- admin: bitfields for MODE_NO_XENO_EVOLVE, MODE_HARDCORE_PERMA, and MODE_NO_JOIN_AS_XENO
now work
+2024-08-21:
+ DexterDude:
+ - rscadd: Added something
+2024-08-22:
+ BonniePandora:
+ - maptweak: Expanded the galley of the Golden Arrow.
+2024-08-24:
+ BonniePandora:
+ - rscadd: Added various condiment packets of powedered juices, milk & egg to the
+ code
+ - rscadd: Added corresponding reactions for the new powdered substances where needed
+ - rscadd: Sprites for the condiment packets, some taken from Bay, others edited
+ by me from Bay sprites
+ - qol: MRE's now contain a juice packet alongside their typical contents
+ - maptweak: Replaces the magic freezer and it's perishable contents with a locker
+ full of the non-perishable replacements
+ DexterDude:
+ - rscadd: Added something
+ private-tristan:
+ - rscadd: ports TG strip menu
+2024-08-26:
+ sunofang:
+ - admin: Added infinite weather options.
+2024-08-27:
+ Max-023:
+ - rscadd: Helmet cover item, added to the squad prep vendor
+ - imageadd: Helmet cover sprites
+ Meatstuff882:
+ - rscadd: 'The utility vendor now has knives in it.
+
+ :cl:'
+2024-08-29:
+ AndroBetel:
+ - rscadd: Water now helps you regen blood.
+ - rscadd: Vomiting now removes some reagents, helping negate OD effects.
+ - balance: Vulture no longer has minimum range requirements to hit bugs.
+ - rscadd: Adds restricted underwear.
+ Doubleumc:
+ - code_imp: changed slotting - new players and players that got skipped previous
+ rounds have a higher chance to get a slot
+ - code_imp: AI caches valid targets for better performance
+ Merrgear:
+ - qol: made crit less boring
+ - code_imp: 'changed the crit code to not knock you unconcious
+
+ :cl:'
diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml
new file mode 100644
index 0000000000..4a7d473306
--- /dev/null
+++ b/html/changelogs/archive/2024-09.yml
@@ -0,0 +1,7 @@
+2024-09-04:
+ AndroBetel:
+ - rscadd: MD blips now show up for humans in 1 tile radius from MD user.
+ Max-023:
+ - rscadd: on Sorokyne, UPP 'Territorial Guard' vendor to replace USCM MP Vendors
+ - rscdel: on Sorokyne, removed USCM Galley Vendors
+ - bugfix: on Sorokyne, Replaces USCM/CMB guns, ammunition, and belts with UPP counterparts
diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi
index 24840d6348..d237128b24 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/belt.dmi b/icons/mob/humans/onmob/belt.dmi
index 9079bda5e7..5c3e8a6dc6 100644
Binary files a/icons/mob/humans/onmob/belt.dmi and b/icons/mob/humans/onmob/belt.dmi differ
diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi
index 169aa524d2..f228b4fa72 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 9ed93efa34..062400725a 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 a872ddcc8a..46bc771b52 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 c0b150a2d7..8a0fbd85c6 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/mask.dmi b/icons/mob/humans/onmob/mask.dmi
index 0c4ac97807..82a5885c87 100644
Binary files a/icons/mob/humans/onmob/mask.dmi and b/icons/mob/humans/onmob/mask.dmi differ
diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi
index a316ccf8c4..c9727790e0 100644
Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ
diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi
index 555b5a0e7a..4790ee7af6 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/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi
index 8656f89278..cfe9cd70bb 100644
Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ
diff --git a/icons/mob/humans/undershirt.dmi b/icons/mob/humans/undershirt.dmi
index 468778851c..928dc332e6 100644
Binary files a/icons/mob/humans/undershirt.dmi and b/icons/mob/humans/undershirt.dmi differ
diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi
index 4e9a85cc90..90aacb3563 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/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi
index 1411de23fb..f6061c5dbd 100644
Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ
diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi
index 2b3b3a091c..e5c2820849 100644
Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ
diff --git a/icons/obj/items/clothing/masks.dmi b/icons/obj/items/clothing/masks.dmi
index 037ee8aba1..f2a3b4ee6d 100644
Binary files a/icons/obj/items/clothing/masks.dmi and b/icons/obj/items/clothing/masks.dmi differ
diff --git a/icons/obj/items/clothing/ties.dmi b/icons/obj/items/clothing/ties.dmi
index a505b419d7..e509f8f2fa 100644
Binary files a/icons/obj/items/clothing/ties.dmi and b/icons/obj/items/clothing/ties.dmi differ
diff --git a/icons/obj/items/clothing/ties_overlay.dmi b/icons/obj/items/clothing/ties_overlay.dmi
index fd6c4204ed..66279502f7 100644
Binary files a/icons/obj/items/clothing/ties_overlay.dmi and b/icons/obj/items/clothing/ties_overlay.dmi differ
diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi
index 4442a8049d..1e852ba5d5 100644
Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ
diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi
index 3c2e963e38..5872b7e852 100644
Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ
diff --git a/icons/obj/items/helmet_garb.dmi b/icons/obj/items/helmet_garb.dmi
index bbebf822c9..5403ae28b7 100644
Binary files a/icons/obj/items/helmet_garb.dmi and b/icons/obj/items/helmet_garb.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi
index 0d50208cc8..0ea04eeb2a 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments.dmi b/icons/obj/items/weapons/guns/attachments.dmi
index 332217fe1c..96038c374a 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/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi
index d3a95284a2..506148cedf 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/attachments/under.dmi b/icons/obj/items/weapons/guns/attachments/under.dmi
index 8947ecd174..b98e185f02 100644
Binary files a/icons/obj/items/weapons/guns/attachments/under.dmi and b/icons/obj/items/weapons/guns/attachments/under.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 04c1fd5468..feca8443db 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/upp.dmi b/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi
index 669efcfc59..16e37d5f4e 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/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi
index e57c625158..b107511d67 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ
diff --git a/icons/obj/items/weapons/guns/lineart.dmi b/icons/obj/items/weapons/guns/lineart.dmi
index 6920290c7e..7e8537cca5 100644
Binary files a/icons/obj/items/weapons/guns/lineart.dmi and b/icons/obj/items/weapons/guns/lineart.dmi differ
diff --git a/icons/turf/dropship.dmi b/icons/turf/dropship.dmi
index ba08ecf600..0b5cebe9e2 100644
Binary files a/icons/turf/dropship.dmi and b/icons/turf/dropship.dmi differ
diff --git a/icons/turf/dropship2.dmi b/icons/turf/dropship2.dmi
index 787d72e04f..f1ba788021 100644
Binary files a/icons/turf/dropship2.dmi and b/icons/turf/dropship2.dmi differ
diff --git a/icons/turf/dropship3.dmi b/icons/turf/dropship3.dmi
index bd13e33fbb..937b20a182 100644
Binary files a/icons/turf/dropship3.dmi and b/icons/turf/dropship3.dmi differ
diff --git a/icons/turf/dropship4.dmi b/icons/turf/dropship4.dmi
index db0f58dcee..4452412254 100644
Binary files a/icons/turf/dropship4.dmi and b/icons/turf/dropship4.dmi differ
diff --git a/icons/ui_icons/inventory/back.png b/icons/ui_icons/inventory/back.png
new file mode 100644
index 0000000000..736b9d64bf
Binary files /dev/null and b/icons/ui_icons/inventory/back.png differ
diff --git a/icons/ui_icons/inventory/belt.png b/icons/ui_icons/inventory/belt.png
new file mode 100644
index 0000000000..1be89d450a
Binary files /dev/null and b/icons/ui_icons/inventory/belt.png differ
diff --git a/icons/ui_icons/inventory/collar.png b/icons/ui_icons/inventory/collar.png
new file mode 100644
index 0000000000..71803b1b6c
Binary files /dev/null and b/icons/ui_icons/inventory/collar.png differ
diff --git a/icons/ui_icons/inventory/ears.png b/icons/ui_icons/inventory/ears.png
new file mode 100644
index 0000000000..e9a8f3c23c
Binary files /dev/null and b/icons/ui_icons/inventory/ears.png differ
diff --git a/icons/ui_icons/inventory/glasses.png b/icons/ui_icons/inventory/glasses.png
new file mode 100644
index 0000000000..6e6f1ad098
Binary files /dev/null and b/icons/ui_icons/inventory/glasses.png differ
diff --git a/icons/ui_icons/inventory/gloves.png b/icons/ui_icons/inventory/gloves.png
new file mode 100644
index 0000000000..2c8a16cbdb
Binary files /dev/null and b/icons/ui_icons/inventory/gloves.png differ
diff --git a/icons/ui_icons/inventory/hand_l.png b/icons/ui_icons/inventory/hand_l.png
new file mode 100644
index 0000000000..b09228d65f
Binary files /dev/null and b/icons/ui_icons/inventory/hand_l.png differ
diff --git a/icons/ui_icons/inventory/hand_r.png b/icons/ui_icons/inventory/hand_r.png
new file mode 100644
index 0000000000..0e05a487e0
Binary files /dev/null and b/icons/ui_icons/inventory/hand_r.png differ
diff --git a/icons/ui_icons/inventory/head.png b/icons/ui_icons/inventory/head.png
new file mode 100644
index 0000000000..11e2d2254c
Binary files /dev/null and b/icons/ui_icons/inventory/head.png differ
diff --git a/icons/ui_icons/inventory/id.png b/icons/ui_icons/inventory/id.png
new file mode 100644
index 0000000000..4469591d36
Binary files /dev/null and b/icons/ui_icons/inventory/id.png differ
diff --git a/icons/ui_icons/inventory/mask.png b/icons/ui_icons/inventory/mask.png
new file mode 100644
index 0000000000..82e5108937
Binary files /dev/null and b/icons/ui_icons/inventory/mask.png differ
diff --git a/icons/ui_icons/inventory/neck.png b/icons/ui_icons/inventory/neck.png
new file mode 100644
index 0000000000..78ad3ce3b1
Binary files /dev/null and b/icons/ui_icons/inventory/neck.png differ
diff --git a/icons/ui_icons/inventory/pocket.png b/icons/ui_icons/inventory/pocket.png
new file mode 100644
index 0000000000..f42399dca0
Binary files /dev/null and b/icons/ui_icons/inventory/pocket.png differ
diff --git a/icons/ui_icons/inventory/shoes.png b/icons/ui_icons/inventory/shoes.png
new file mode 100644
index 0000000000..d20f7ef4d1
Binary files /dev/null and b/icons/ui_icons/inventory/shoes.png differ
diff --git a/icons/ui_icons/inventory/suit.png b/icons/ui_icons/inventory/suit.png
new file mode 100644
index 0000000000..e9c48e8069
Binary files /dev/null and b/icons/ui_icons/inventory/suit.png differ
diff --git a/icons/ui_icons/inventory/suit_storage.png b/icons/ui_icons/inventory/suit_storage.png
new file mode 100644
index 0000000000..9722eb1029
Binary files /dev/null and b/icons/ui_icons/inventory/suit_storage.png differ
diff --git a/icons/ui_icons/inventory/uniform.png b/icons/ui_icons/inventory/uniform.png
new file mode 100644
index 0000000000..292b3324b5
Binary files /dev/null and b/icons/ui_icons/inventory/uniform.png differ
diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm
index c1ff18c9fa..0eb6024a5a 100644
--- a/maps/map_files/BigRed/BigRed.dmm
+++ b/maps/map_files/BigRed/BigRed.dmm
@@ -1662,7 +1662,7 @@
/area/bigredv2/outside/marshal_office)
"afo" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
@@ -1670,7 +1670,7 @@
/area/bigredv2/outside/marshal_office)
"afp" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
@@ -1681,7 +1681,7 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
@@ -24149,7 +24149,7 @@
},
/obj/structure/closet/cabinet,
/obj/item/disk/nuclear,
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
/obj/structure/pipes/vents/pump/on,
/turf/open/floor{
icon_state = "wood"
@@ -24760,8 +24760,8 @@
/area/bigredv2/caves_se)
"bMa" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70,
/turf/open/floor{
dir = 8;
icon_state = "redcorner"
@@ -31566,7 +31566,7 @@
"miD" = (
/obj/effect/decal/cleanable/blood,
/obj/effect/landmark/corpsespawner/security/marshal,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/mars_cave{
icon_state = "mars_cave_2"
},
@@ -38204,7 +38204,7 @@
},
/area/bigredv2/caves_north)
"vBy" = (
-/obj/item/ammo_magazine/shotgun/beanbag/riot,
+/obj/item/ammo_magazine/shotgun/beanbag,
/turf/open/mars_cave{
icon_state = "mars_cave_17"
},
diff --git a/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm b/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
index e2e995af42..744ef04af7 100644
--- a/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
+++ b/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
@@ -223,7 +223,7 @@
/area/bigredv2/outside/marshal_office)
"aF" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
@@ -231,7 +231,7 @@
/area/bigredv2/outside/marshal_office)
"aG" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
@@ -242,7 +242,7 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 8;
icon_state = "vault"
diff --git a/maps/map_files/BigRed/sprinkles/20.etatunnel_open.dmm b/maps/map_files/BigRed/sprinkles/20.etatunnel_open.dmm
index 633a79f6ac..9666ca41a4 100644
--- a/maps/map_files/BigRed/sprinkles/20.etatunnel_open.dmm
+++ b/maps/map_files/BigRed/sprinkles/20.etatunnel_open.dmm
@@ -374,7 +374,7 @@
/area/bigredv2/outside/lz2_south_cas)
"Jy" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/obj/item/device/flashlight/lamp/on{
pixel_x = -5;
pixel_y = 17
diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm
index a87db5ef1e..a0a3bb64d9 100644
--- a/maps/map_files/CORSAT/Corsat.dmm
+++ b/maps/map_files/CORSAT/Corsat.dmm
@@ -371,12 +371,12 @@
/area/corsat/gamma/hangar)
"abn" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/turf/open/floor/corsat{
dir = 9;
icon_state = "red"
@@ -1005,12 +1005,12 @@
/area/corsat/gamma/hangar/checkpoint)
"adc" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/turf/open/floor/corsat{
dir = 1;
icon_state = "red"
@@ -9023,9 +9023,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -11307,16 +11307,16 @@
/turf/open/floor/wood,
/area/corsat/gamma/residential/researcher)
"aGc" = (
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70,
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/turf/open/floor/corsat{
dir = 9;
icon_state = "red"
@@ -13781,9 +13781,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -19090,9 +19090,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -19111,9 +19111,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -28907,9 +28907,9 @@
"bDd" = (
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/obj/structure/closet/secure_closet/security,
@@ -28944,9 +28944,9 @@
"bDk" = (
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/obj/structure/closet/secure_closet/security,
@@ -41809,7 +41809,7 @@
/area/corsat/sigma/southeast/datalab)
"gys" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/corsat{
icon_state = "red"
},
@@ -43618,9 +43618,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -56944,10 +56944,10 @@
/area/corsat/sigma/hangar/security)
"rRh" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/corsat{
dir = 6;
icon_state = "red"
@@ -58917,9 +58917,9 @@
/obj/structure/closet/secure_closet/security_empty,
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/accessory/storage/holster/armpit,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/item/storage/pouch/general/medium,
/obj/item/storage/pouch/pistol,
/turf/open/floor/corsat{
@@ -59390,7 +59390,7 @@
/area/corsat/gamma/hallwaysouth)
"tFs" = (
/obj/structure/surface/table/almayer,
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
/turf/open/floor/corsat{
dir = 8;
icon_state = "red"
diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm
index 6325533e9b..cc04cfc015 100644
--- a/maps/map_files/DesertDam/Desert_Dam.dmm
+++ b/maps/map_files/DesertDam/Desert_Dam.dmm
@@ -4609,14 +4609,14 @@
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"anS" = (
/obj/structure/surface/table/reinforced,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"anT" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -19966,7 +19966,7 @@
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_wilderness)
"bkG" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/obj/structure/surface/table/woodentable/fancy,
/turf/open/floor/interior/wood/alt,
/area/desert_dam/building/security/marshals_office)
@@ -31817,13 +31817,13 @@
/area/desert_dam/building/security/armory)
"bYq" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -43409,7 +43409,7 @@
/area/desert_dam/building/security/armory)
"cJv" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
index fa4a9b8b7b..eb34c85224 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
@@ -112,7 +112,7 @@
pixel_y = 21
},
/obj/structure/surface/table/woodentable/fancy,
-/obj/item/weapon/gun/pistol/highpower/tactical,
+/obj/item/weapon/gun/pistol/highpower/automag/tactical,
/turf/open/floor/plating,
/area/template_noop)
"W" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
index 63fb17b8f8..5ba86e60f7 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
@@ -1357,7 +1357,7 @@
pixel_y = -2
},
/obj/item/weapon/gun/pistol/heavy,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/wood,
/area/template_noop)
"We" = (
diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
index e406258040..7b1a34d0ec 100644
--- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
+++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
@@ -10309,7 +10309,7 @@
},
/area/ice_colony/surface/command/control/office)
"aDb" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor{
icon_state = "dark2"
@@ -26765,8 +26765,8 @@
/area/ice_colony/underground/security/detective)
"bCc" = (
/obj/structure/surface/table/woodentable,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/wood,
/area/ice_colony/underground/security/marshal)
"bCd" = (
@@ -32159,8 +32159,8 @@
/area/ice_colony/underground/maintenance/security)
"bRx" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/weapon/gun/revolver/cmb{
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/weapon/gun/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -32365,13 +32365,13 @@
/obj/structure/machinery/light{
dir = 8
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index 0332274d42..3b48073ec6 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -1734,8 +1734,8 @@
/area/shiva/interior/colony/medseceng)
"ahP" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/weapon/gun/revolver/cmb{
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/weapon/gun/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -1847,8 +1847,8 @@
/area/shiva/interior/aerodrome)
"aim" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/weapon/gun/revolver/cmb{
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/weapon/gun/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -2383,13 +2383,13 @@
dir = 8;
pixel_y = -5
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -2831,8 +2831,8 @@
/area/shiva/interior/warehouse)
"anP" = (
/obj/structure/surface/table/woodentable,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/wood,
/area/shiva/interior/colony/medseceng)
"anR" = (
@@ -17922,13 +17922,13 @@
/area/shiva/interior/colony/central)
"nfg" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -20274,7 +20274,7 @@
},
/area/shiva/interior/colony/deck)
"pME" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "floor3"
},
@@ -21558,7 +21558,7 @@
/area/shiva/interior/colony/s_admin)
"reV" = (
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/shiva{
dir = 8;
icon_state = "purplefull"
@@ -24239,7 +24239,7 @@
},
/area/shiva/interior/colony/research_hab)
"uee" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/auto_turf/snow/layer0,
/area/shiva/exterior/cp_lz2)
"ueu" = (
@@ -24540,7 +24540,7 @@
/turf/open/auto_turf/snow/layer3,
/area/shiva/exterior/junkyard/fortbiceps)
"upp" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
dir = 8;
icon_state = "purplefull"
diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm
index 558f1a637d..42a46a0d9e 100644
--- a/maps/map_files/Kutjevo/Kutjevo.dmm
+++ b/maps/map_files/Kutjevo/Kutjevo.dmm
@@ -1324,7 +1324,7 @@
/area/kutjevo/interior/oob)
"bRa" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/colors/orange/edge{
dir = 1
},
@@ -3197,7 +3197,7 @@
/turf/open/floor/kutjevo/plate,
/area/kutjevo/interior/colony_central)
"emn" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany)
"emU" = (
@@ -5278,7 +5278,7 @@
/turf/closed/wall/kutjevo/rock,
/area/kutjevo/interior/complex/botany)
"hkY" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/gm/river/desert/deep/covered,
/area/kutjevo/interior/power/comms)
"hmi" = (
@@ -6684,7 +6684,7 @@
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/interior/colony_S_East)
"jtu" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/power/comms)
"jtJ" = (
@@ -7554,7 +7554,7 @@
/obj/structure/barricade/deployable{
dir = 1
},
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/Northwest_Flight_Control)
"kIn" = (
@@ -11306,7 +11306,7 @@
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/exterior/Northwest_Colony)
"pKO" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/power/comms)
"pKP" = (
@@ -12682,7 +12682,7 @@
},
/area/kutjevo/exterior/runoff_river)
"rNG" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/botany)
"rOd" = (
@@ -13389,7 +13389,7 @@
/turf/open/auto_turf/sand/layer2,
/area/kutjevo/interior/colony_N_East)
"sOc" = (
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -13649,7 +13649,7 @@
/turf/open/floor/kutjevo/grey/plate,
/area/kutjevo/interior/complex/botany/east_tech)
"tgl" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/Northwest_Flight_Control)
"tgO" = (
@@ -13659,7 +13659,7 @@
/area/kutjevo/interior/colony_S_East)
"tgZ" = (
/obj/structure/surface/table/almayer,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/colors/purple,
/area/kutjevo/interior/construction)
"tha" = (
@@ -13908,7 +13908,7 @@
/turf/open/floor/kutjevo/grey/plate,
/area/kutjevo/interior/complex/botany/east_tech)
"tyW" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/botany)
"tzJ" = (
@@ -13927,7 +13927,7 @@
/turf/open/floor/kutjevo/grey/plate,
/area/kutjevo/interior/construction)
"tBB" = (
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 7;
pixel_y = 6
},
@@ -15048,15 +15048,15 @@
/area/kutjevo/interior/complex/botany)
"vaG" = (
/obj/structure/surface/table/almayer,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 7;
pixel_y = 6
},
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = -7;
pixel_y = -6
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/kutjevo/colors/purple,
/area/kutjevo/interior/construction)
"vbl" = (
@@ -15959,7 +15959,7 @@
/turf/open/gm/river/desert/shallow,
/area/kutjevo/interior/oob/dev_room)
"wpY" = (
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 6;
pixel_y = -4
},
@@ -16532,7 +16532,7 @@
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany/east)
"xkE" = (
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = 7;
pixel_y = 6
},
diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
index a92e396785..99c77f860a 100644
--- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
+++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
@@ -3511,7 +3511,7 @@
/area/lv522/indoors/a_block/security)
"bSa" = (
/obj/effect/decal/cleanable/blood,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
},
@@ -3542,7 +3542,7 @@
},
/obj/effect/decal/cleanable/blood/gibs,
/obj/effect/decal/cleanable/blood,
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "radiator_tile2"
},
@@ -4306,7 +4306,7 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/w_rockies)
"ckT" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/obj/structure/pipes/standard/simple/hidden/green{
dir = 6
},
@@ -22691,8 +22691,8 @@
"jmd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -38900,7 +38900,7 @@
},
/area/lv522/landing_zone_1)
"pni" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/prison,
/area/lv522/indoors/a_block/kitchen/glass)
"pnj" = (
@@ -43194,7 +43194,7 @@
},
/area/lv522/atmos/command_centre)
"qPu" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/obj/item/clothing/head/soft/sec,
/obj/structure/curtain/medical,
/turf/open/floor/strata{
@@ -60611,8 +60611,8 @@
/area/lv522/indoors/c_block/mining)
"xbj" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison{
icon_state = "darkredfull2"
diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm
index c9c82635d8..d512590d7d 100644
--- a/maps/map_files/LV624/LV624.dmm
+++ b/maps/map_files/LV624/LV624.dmm
@@ -8865,10 +8865,10 @@
dir = 4
},
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 5;
icon_state = "red"
@@ -8880,10 +8880,10 @@
},
/obj/structure/surface/table,
/obj/item/clothing/ears/earmuffs,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 9;
icon_state = "red"
diff --git a/maps/map_files/LV624/armory/10.cheese.dmm b/maps/map_files/LV624/armory/10.cheese.dmm
index 96b4ef5942..347e392787 100644
--- a/maps/map_files/LV624/armory/10.cheese.dmm
+++ b/maps/map_files/LV624/armory/10.cheese.dmm
@@ -159,10 +159,10 @@
dir = 4
},
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 5;
icon_state = "red"
diff --git a/maps/map_files/LV624/armory/10.extra.dmm b/maps/map_files/LV624/armory/10.extra.dmm
index cf1aaaa538..53a94ef204 100644
--- a/maps/map_files/LV624/armory/10.extra.dmm
+++ b/maps/map_files/LV624/armory/10.extra.dmm
@@ -164,10 +164,10 @@
dir = 4
},
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 5;
icon_state = "red"
diff --git a/maps/map_files/LV624/armory/10.looted.dmm b/maps/map_files/LV624/armory/10.looted.dmm
index cf2d4a9e02..ae5bbef21b 100644
--- a/maps/map_files/LV624/armory/10.looted.dmm
+++ b/maps/map_files/LV624/armory/10.looted.dmm
@@ -137,10 +137,10 @@
dir = 4
},
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 5;
icon_state = "red"
diff --git a/maps/map_files/LV624_Fixed/LV624_repaired.dmm b/maps/map_files/LV624_Fixed/LV624_repaired.dmm
index 0054709887..5334b7a123 100644
--- a/maps/map_files/LV624_Fixed/LV624_repaired.dmm
+++ b/maps/map_files/LV624_Fixed/LV624_repaired.dmm
@@ -14919,7 +14919,7 @@
/area/lv624/lazarus/landing_zones/lz1)
"qwG" = (
/obj/structure/surface/rack,
-/obj/item/storage/box/clf,
+/obj/item/storage/box/loadout/clf,
/turf/open/shuttle{
icon_state = "floor4"
},
@@ -17585,10 +17585,10 @@
dir = 4
},
/obj/structure/surface/table,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 5;
icon_state = "red"
@@ -19048,10 +19048,10 @@
},
/obj/structure/surface/table,
/obj/item/clothing/ears/earmuffs,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor{
dir = 9;
icon_state = "red"
diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm
index be2e218d2f..0b29155026 100644
--- a/maps/map_files/New_Varadero/New_Varadero.dmm
+++ b/maps/map_files/New_Varadero/New_Varadero.dmm
@@ -1381,7 +1381,7 @@
dir = 1;
pixel_y = 17
},
-/obj/item/weapon/gun/revolver/cmb{
+/obj/item/weapon/gun/revolver/spearhead{
pixel_y = 2
},
/obj/item/clothing/ears/earmuffs{
@@ -3754,8 +3754,8 @@
/area/varadero/interior/hall_SE)
"cur" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88{
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70{
pixel_y = -2
},
/obj/structure/machinery/storm_siren{
@@ -4748,7 +4748,7 @@
},
/area/varadero/interior/hall_NW)
"dcM" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior/caves/north_research)
"dda" = (
@@ -14358,7 +14358,7 @@
},
/area/varadero/interior/records)
"jvF" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "multi_tiles"
},
@@ -14369,7 +14369,7 @@
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior_protected/caves/digsite)
"jwy" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "purple"
},
@@ -24832,16 +24832,16 @@
/area/varadero/interior/hall_SE)
"qfb" = (
/obj/structure/closet/crate/ammo/alt,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = -4;
pixel_y = -5
},
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = -4;
pixel_y = -5
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "floor3"
},
@@ -26627,7 +26627,7 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "purple"
},
@@ -28679,15 +28679,15 @@
/area/varadero/interior/maintenance/security)
"syb" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/structure/machinery/light{
dir = 4
},
@@ -32044,7 +32044,7 @@
icon_state = "cartridge_1_1"
},
/obj/effect/decal/cleanable/blood,
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
/turf/open/floor/plating/icefloor{
icon_state = "asteroidplating"
},
@@ -37068,8 +37068,8 @@
/area/varadero/interior/electrical)
"xRx" = (
/obj/structure/surface/table/woodentable,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/wood,
/area/varadero/interior/security)
"xRF" = (
diff --git a/maps/map_files/New_Varadero_Fixed/New_Varadero_Repaired.dmm b/maps/map_files/New_Varadero_Fixed/New_Varadero_Repaired.dmm
index 1413a053bc..7a81776beb 100644
--- a/maps/map_files/New_Varadero_Fixed/New_Varadero_Repaired.dmm
+++ b/maps/map_files/New_Varadero_Fixed/New_Varadero_Repaired.dmm
@@ -1273,7 +1273,7 @@
dir = 1;
pixel_y = 17
},
-/obj/item/weapon/gun/revolver/cmb{
+/obj/item/weapon/gun/revolver/spearhead{
pixel_y = 2
},
/obj/item/clothing/ears/earmuffs{
@@ -3523,8 +3523,8 @@
/area/varadero/interior/hall_SE)
"cur" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/pistol/mod88,
-/obj/item/weapon/gun/pistol/mod88{
+/obj/item/weapon/gun/pistol/vp70,
+/obj/item/weapon/gun/pistol/vp70{
pixel_y = -2
},
/obj/structure/machinery/storm_siren{
@@ -23255,16 +23255,16 @@
/area/varadero/interior/bunks)
"qfb" = (
/obj/structure/closet/crate/ammo/alt,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = -4;
pixel_y = -5
},
-/obj/item/ammo_magazine/revolver/cmb{
+/obj/item/ammo_magazine/revolver/spearhead{
pixel_x = -4;
pixel_y = -5
},
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/shiva{
icon_state = "floor3"
},
@@ -26894,15 +26894,15 @@
/area/varadero/interior/maintenance/security)
"syb" = (
/obj/structure/surface/rack,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/obj/structure/machinery/light{
dir = 4
},
@@ -30093,7 +30093,7 @@
},
/area/varadero/interior/technical_storage)
"uMQ" = (
-/obj/item/weapon/gun/pistol/mod88,
+/obj/item/weapon/gun/pistol/vp70,
/turf/open/floor/plating/icefloor{
icon_state = "asteroidplating"
},
@@ -34783,8 +34783,8 @@
/area/varadero/interior/electrical)
"xRx" = (
/obj/structure/surface/table/woodentable,
-/obj/item/weapon/gun/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/weapon/gun/revolver/spearhead,
+/obj/item/ammo_magazine/revolver/spearhead,
/turf/open/floor/wood,
/area/varadero/interior/security)
"xRF" = (
diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
index 9cc753e4bd..421df0856e 100644
--- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
+++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
@@ -2191,13 +2191,10 @@
/area/strata/ag/interior/dorms/hive)
"agD" = (
/obj/effect/decal/cleanable/blood,
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -2238,11 +2235,8 @@
/area/strata/ag/exterior/paths/cabin_area)
"agI" = (
/obj/structure/bed/nest,
-/obj/item/weapon/gun/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/effect/decal/cleanable/blood/gibs/core,
+/obj/item/weapon/gun/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -2447,12 +2441,9 @@
/area/strata/ag/interior/dorms/hive)
"aht" = (
/obj/structure/bed/nest,
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/effect/decal/cleanable/blood/gibs/core,
/obj/effect/landmark/corpsespawner/russian,
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -2824,21 +2815,15 @@
/obj/effect/decal/cleanable/blood{
icon_state = "xgib2"
},
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
/area/strata/ag/interior/dorms/hive)
"aiC" = (
/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/structure/pipes/standard/simple/hidden/cyan,
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -3043,13 +3028,10 @@
},
/area/strata/ag/interior/dorms/hive)
"ajk" = (
-/obj/item/weapon/gun/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/structure/pipes/standard/manifold/hidden/cyan{
dir = 4
},
+/obj/item/weapon/gun/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -3062,7 +3044,6 @@
/obj/effect/decal/strata_decals/catwalk/prison,
/obj/structure/largecrate/random,
/obj/item/storage/backpack/lightpack,
-/obj/item/storage/belt/shotgun,
/turf/open/floor/greengrid,
/area/strata/ag/interior/dorms/hive)
"ajn" = (
@@ -3419,17 +3400,15 @@
/area/strata/ug/interior/jungle/deep/structures/res)
"ako" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
/turf/open/floor/strata{
icon_state = "red1"
},
/area/strata/ag/interior/dorms/flight_control)
"akq" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -3645,7 +3624,7 @@
"akY" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/reagent_container/food/snacks/cubancarp,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "cyan1"
@@ -3654,7 +3633,7 @@
"ala" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/reagent_container/food/snacks/fishfingers,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "cyan1"
@@ -4342,15 +4321,11 @@
/area/strata/ag/interior/dorms/canteen)
"anr" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
-/obj/item/ammo_magazine/shotgun/slugs{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/slug,
+/obj/item/ammo_magazine/handful/shotgun/heavy/slug,
+/obj/item/weapon/gun/shotgun/type23/riot,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -4901,7 +4876,7 @@
/obj/structure/surface/rack,
/obj/item/storage/box/m94,
/obj/item/storage/box/m94,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5215,7 +5190,7 @@
/obj/structure/surface/rack,
/obj/item/storage/box/cups,
/obj/item/storage/box/cups,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5404,7 +5379,7 @@
},
/area/strata/ug/interior/jungle/deep/structures/res)
"arb" = (
-/obj/item/storage/belt/security,
+/obj/item/storage/belt/security/MP/UPP,
/turf/open/floor/strata{
icon_state = "floor2"
},
@@ -5496,7 +5471,7 @@
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/donkpockets,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5507,7 +5482,7 @@
/obj/item/storage/box/handcuffs,
/obj/item/storage/box/holobadge,
/obj/item/storage/box/evidence,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5517,7 +5492,7 @@
/obj/item/storage/box/lightstick/red,
/obj/item/storage/box/lightstick/red,
/obj/item/storage/box/lightstick/red,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5847,7 +5822,7 @@
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/donkpockets,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -5880,7 +5855,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -6251,7 +6226,6 @@
/obj/item/clothing/suit/storage/hazardvest,
/obj/item/clothing/suit/storage/hazardvest,
/obj/structure/surface/rack,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/dorms)
"atz" = (
@@ -7019,7 +6993,7 @@
/area/strata/ag/interior/outpost/engi)
"avX" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 10;
icon_state = "multi_tiles"
@@ -8526,13 +8500,6 @@
/obj/structure/pipes/standard/simple/hidden/cyan,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/canteen/lower_cafeteria)
-"aAM" = (
-/obj/structure/machinery/cm_vending/sorted/marine_food,
-/turf/open/floor/strata{
- dir = 10;
- icon_state = "multi_tiles"
- },
-/area/strata/ag/interior/outpost/canteen)
"aAO" = (
/obj/effect/decal/cleanable/blood{
layer = 3
@@ -8754,7 +8721,7 @@
/obj/effect/decal/strata_decals/catwalk/prison,
/obj/item/prop/almayer/box,
/obj/item/coin/marine/engineer,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/greengrid,
/area/strata/ag/interior/dorms)
"aBw" = (
@@ -10178,10 +10145,10 @@
/area/strata/ag/interior/dorms)
"aFR" = (
/obj/effect/decal/cleanable/blood,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
+/obj/item/weapon/gun/shotgun/type23/riot,
/turf/open/floor/strata{
icon_state = "white_cyan1"
},
@@ -10925,13 +10892,11 @@
},
/area/strata/ag/interior/dorms)
"aIm" = (
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/effect/decal/strata_decals/grime/grime4{
dir = 8
},
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
/turf/open/floor/strata{
icon_state = "white_cyan1"
},
@@ -13024,7 +12989,7 @@
"aPy" = (
/obj/structure/closet/bombcloset,
/obj/item/clothing/suit/armor/bulletproof,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 10;
icon_state = "multi_tiles"
@@ -13557,7 +13522,6 @@
"aQZ" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/storage/box/pizza,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
icon_state = "fake_wood"
},
@@ -13583,7 +13547,6 @@
/obj/structure/surface/table/reinforced/prison,
/obj/item/tool/crowbar,
/obj/effect/spawner/random/toolbox,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/engi)
"aRd" = (
@@ -15462,7 +15425,7 @@
/turf/closed/wall/strata_outpost/reinforced,
/area/strata/ug/interior/jungle/deep/structures/res)
"aYA" = (
-/obj/structure/machinery/vending/security,
+/obj/structure/machinery/vending/security/upp,
/turf/open/floor/strata{
dir = 10;
icon_state = "multi_tiles"
@@ -17814,14 +17777,6 @@
},
/turf/open/auto_turf/snow/brown_base/layer1,
/area/strata/ag/exterior/marsh/river)
-"bgR" = (
-/obj/structure/surface/rack,
-/obj/item/tool/shovel/snow,
-/obj/item/device/flashlight/flare,
-/obj/item/device/flashlight,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/turf/open/auto_turf/snow/brown_base/layer1,
-/area/strata/ag/exterior/marsh/river)
"bgS" = (
/turf/open/auto_turf/snow/brown_base/layer1,
/area/strata/ag/exterior/marsh/crash)
@@ -18061,19 +18016,6 @@
},
/turf/open/gm/river,
/area/strata/ag/exterior/marsh/river)
-"bhL" = (
-/obj/item/clothing/shoes/snow,
-/obj/structure/surface/rack,
-/obj/item/clothing/shoes/snow,
-/obj/item/clothing/suit/storage/snow_suit,
-/obj/item/clothing/suit/storage/snow_suit,
-/obj/item/tank/emergency_oxygen/engi,
-/obj/effect/decal/strata_decals/grime/grime3{
- dir = 8
- },
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/turf/open/auto_turf/snow/brown_base/layer1,
-/area/strata/ag/exterior/marsh/river)
"bhM" = (
/obj/structure/surface/rack,
/obj/item/tool/shovel/snow,
@@ -19712,7 +19654,7 @@
/area/strata/ag/interior/administration)
"bot" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "blue1"
},
@@ -19775,7 +19717,6 @@
/obj/structure/machinery/camera/autoname{
dir = 8
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
icon_state = "blue1"
},
@@ -20102,7 +20043,6 @@
/obj/structure/surface/rack,
/obj/item/tank/emergency_oxygen/engi,
/obj/item/tank/emergency_oxygen/engi,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
dir = 10;
icon_state = "multi_tiles"
@@ -21015,7 +20955,7 @@
/turf/open/auto_turf/snow/brown_base/layer1,
/area/strata/ag/exterior/paths/southresearch)
"bth" = (
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/auto_turf/snow/brown_base/layer4,
/area/strata/ag/exterior/paths/southresearch)
"bti" = (
@@ -21191,7 +21131,6 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"btW" = (
@@ -21204,7 +21143,6 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"btX" = (
@@ -21966,7 +21904,6 @@
"bxb" = (
/obj/structure/surface/rack,
/obj/item/storage/belt/utility/full,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"bxc" = (
@@ -22648,7 +22585,6 @@
"bAw" = (
/obj/structure/surface/rack,
/obj/item/storage/briefcase,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"bAx" = (
@@ -22667,6 +22603,7 @@
/obj/structure/machinery/camera/autoname{
dir = 8
},
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"bAB" = (
@@ -23219,12 +23156,12 @@
/area/strata/ag/interior/disposals)
"bEY" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
/obj/effect/landmark/good_item,
/obj/structure/surface/rack,
/obj/structure/machinery/light/small{
dir = 4
},
+/obj/item/weapon/gun/shotgun/type23,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"bFf" = (
@@ -23474,7 +23411,6 @@
/area/strata/ag/interior/outpost/med)
"bHr" = (
/obj/structure/surface/table/reinforced/prison,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
icon_state = "floor2"
},
@@ -24150,7 +24086,7 @@
"bMZ" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/reagent_container/food/snacks/meatballsoup,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "cyan1"
@@ -24305,7 +24241,7 @@
pixel_x = 8;
pixel_y = 6
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "blue1"
},
@@ -24963,15 +24899,11 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
-/obj/item/ammo_magazine/shotgun/slugs{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/slug,
+/obj/item/ammo_magazine/handful/shotgun/heavy/slug,
+/obj/item/weapon/gun/shotgun/type23/riot,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -24994,7 +24926,7 @@
/obj/structure/surface/rack,
/obj/item/storage/firstaid/adv,
/obj/item/reagent_container/spray/pepper,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -25093,7 +25025,7 @@
"bVL" = (
/obj/structure/surface/rack,
/obj/item/storage/box/condimentbottles,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -25169,7 +25101,6 @@
/area/strata/ug/interior/jungle/deep/minehead)
"bWi" = (
/obj/structure/largecrate/random,
-/obj/item/storage/belt/shotgun,
/obj/item/storage/backpack/lightpack,
/turf/open/floor/strata{
icon_state = "orange_cover"
@@ -25192,7 +25123,7 @@
/obj/item/storage/box/lightstick,
/obj/item/storage/box/lightstick,
/obj/item/storage/box/lightstick,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -26419,7 +26350,7 @@
/area/strata/ag/interior/administration)
"cfX" = (
/obj/structure/largecrate/random,
-/obj/item/storage/belt/grenade/large/full,
+/obj/item/storage/belt/marine/upp/sapper,
/turf/open/asphalt/cement,
/area/strata/ag/exterior/research_decks)
"cfY" = (
@@ -27742,21 +27673,15 @@
},
/area/strata/ag/interior/nearlz1)
"coY" = (
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
/area/strata/ag/interior/dorms/hive)
"coZ" = (
/obj/effect/decal/cleanable/blood,
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
/obj/structure/pipes/standard/simple/hidden/cyan,
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -29320,7 +29245,7 @@
/turf/closed/wall/strata_ice/jungle,
/area/strata/ug/interior/jungle/deep/tearlake)
"dMw" = (
-/obj/structure/cargo_container/wy/left,
+/obj/structure/cargo_container/ferret/left,
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/marsh)
"dNq" = (
@@ -29593,7 +29518,6 @@
/turf/closed/wall/strata_ice/jungle,
/area/strata/ug/interior/jungle/deep/south_engi)
"ekZ" = (
-/obj/item/storage/belt/knifepouch,
/obj/structure/surface/rack,
/turf/open/floor/strata{
dir = 4;
@@ -30307,7 +30231,7 @@
/obj/structure/barricade/handrail/strata{
dir = 4
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "floor3"
@@ -30658,7 +30582,7 @@
"fWV" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/reagent_container/food/drinks/bottle/sake,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "orange_tile"
},
@@ -31384,7 +31308,7 @@
"haN" = (
/obj/structure/largecrate/random,
/obj/item/trash/pistachios,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/prison{
icon_state = "darkyellowfull2"
},
@@ -32031,7 +31955,7 @@
/area/strata/ag/interior/dorms/hive)
"ioM" = (
/obj/structure/surface/table/almayer,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata,
/area/strata/ag/interior/landingzone_checkpoint)
"ipd" = (
@@ -33135,13 +33059,13 @@
/turf/closed/wall/strata_outpost,
/area/strata/ug/interior/outpost/jung/dorms/med2)
"jXD" = (
-/obj/item/weapon/gun/revolver/cmb,
/obj/structure/surface/rack{
layer = 2.5
},
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/item/ammo_magazine/revolver/cmb,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/item/weapon/gun/revolver/upp,
+/obj/item/ammo_magazine/revolver/upp,
+/obj/item/ammo_magazine/revolver/upp,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "floor3"
@@ -33950,7 +33874,7 @@
/turf/open/asphalt/cement,
/area/strata/ag/interior/tcomms)
"lrO" = (
-/obj/structure/cargo_container/wy/mid,
+/obj/structure/cargo_container/ferret/mid,
/turf/open/auto_turf/ice/layer0,
/area/strata/ag/exterior/marsh)
"lsz" = (
@@ -34181,29 +34105,18 @@
/area/strata/ug/interior/jungle/deep/structures/engi)
"lNr" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb,
-/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/item/ammo_magazine/shotgun/buckshot{
- pixel_x = 6;
- pixel_y = -4
- },
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
+/obj/item/weapon/gun/shotgun/type23/riot,
+/obj/item/weapon/gun/shotgun/type23/riot,
+/obj/item/weapon/gun/shotgun/type23/riot,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -34361,10 +34274,7 @@
/obj/structure/pipes/vents/pump{
dir = 1
},
-/obj/item/ammo_magazine/revolver/cmb{
- pixel_x = 6;
- pixel_y = -4
- },
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -35212,7 +35122,7 @@
/obj/item/explosive/grenade/phosphorus,
/obj/item/explosive/grenade/phosphorus,
/obj/item/folder/red,
-/obj/item/ammo_box/magazine/shotgun/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -35441,7 +35351,7 @@
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/engi/drome)
"nPW" = (
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "orange_cover"
},
@@ -35478,7 +35388,7 @@
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/marsh/center)
"nSQ" = (
-/obj/structure/cargo_container/wy/right,
+/obj/structure/cargo_container/ferret/right,
/turf/open/auto_turf/ice/layer0,
/area/strata/ag/exterior/marsh)
"nST" = (
@@ -36915,7 +36825,7 @@
/turf/open/floor/strata,
/area/strata/ug/interior/outpost/jung/dorms/med2)
"qdI" = (
-/obj/item/ammo_magazine/revolver/cmb,
+/obj/item/ammo_magazine/revolver/upp,
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/paths/southresearch)
"qer" = (
@@ -37042,14 +36952,6 @@
/obj/structure/sign/safety/storage,
/turf/closed/wall/strata_outpost/reinforced/hull,
/area/strata/ag/exterior/tcomms/tcomms_deck)
-"qmW" = (
-/obj/structure/largecrate/random,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/turf/open/floor/strata{
- dir = 4;
- icon_state = "floor3"
- },
-/area/strata/ag/exterior/research_decks)
"qns" = (
/obj/structure/machinery/light/small{
dir = 1;
@@ -37687,7 +37589,7 @@
/area/strata/ag/exterior/tcomms/tcomms_deck)
"rkb" = (
/obj/item/clothing/glasses/thermal/syndi,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 8;
icon_state = "multi_tiles"
@@ -38535,14 +38437,14 @@
/turf/open/auto_turf/strata_grass/layer1,
/area/strata/ug/interior/jungle/deep/tearlake)
"sMj" = (
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata,
/area/strata/ag/exterior/research_decks)
"sMX" = (
/obj/structure/bed/chair/dropship/passenger{
dir = 4
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/almayer{
icon_state = "test_floor5"
},
@@ -38834,7 +38736,7 @@
/obj/item/storage/box/beakers,
/obj/item/storage/box/gloves,
/obj/item/storage/box/pillbottles,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -39160,7 +39062,7 @@
/obj/structure/barricade/wooden{
dir = 8
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/paths/southresearch)
"tLI" = (
@@ -39388,7 +39290,6 @@
pixel_x = 8;
pixel_y = 6
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/strata{
icon_state = "floor3"
},
@@ -39446,7 +39347,7 @@
/obj/item/tool/shovel/etool/folded,
/obj/item/weapon/gun/pistol/t73,
/obj/item/attachable/bayonet/upp,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/prison{
icon_state = "darkredfull2"
},
@@ -39951,7 +39852,7 @@
/obj/item/tool/shovel/etool/folded,
/obj/item/weapon/gun/pistol/t73,
/obj/item/attachable/bayonet/upp,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -40157,7 +40058,6 @@
/area/strata/ag/exterior/research_decks)
"vhv" = (
/obj/structure/surface/rack,
-/obj/item/storage/belt/knifepouch,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/engi/drome)
"vhG" = (
@@ -40221,7 +40121,7 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "orange_cover"
},
@@ -40370,7 +40270,7 @@
/area/strata/ag/interior/outpost/med)
"vth" = (
/obj/structure/closet/lawcloset,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "floor3"
@@ -40802,7 +40702,7 @@
},
/area/strata/ag/interior/research_decks/security)
"wgu" = (
-/obj/item/weapon/gun/revolver/cmb,
+/obj/item/weapon/gun/revolver/upp,
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/paths/southresearch)
"wgB" = (
@@ -41156,7 +41056,7 @@
/obj/item/tool/stamp,
/obj/item/paper_bin,
/obj/structure/pipes/standard/manifold/hidden/cyan,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "red1"
},
@@ -41375,7 +41275,7 @@
/area/strata/ag/interior/outpost/med)
"xnZ" = (
/obj/structure/surface/rack,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
dir = 4;
icon_state = "floor3"
@@ -41594,7 +41494,7 @@
"xDX" = (
/obj/structure/bed/nest,
/obj/effect/decal/cleanable/blood/gibs/core,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "multi_tiles"
},
@@ -41817,7 +41717,7 @@
dir = 8
},
/obj/effect/decal/cleanable/blood,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/almayer{
icon_state = "test_floor5"
},
@@ -42019,7 +41919,7 @@
/obj/structure/surface/table/reinforced/prison,
/obj/item/storage/pouch/flare/full,
/obj/item/weapon/gun/pistol/t73,
-/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
+/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot/upp,
/turf/open/floor/strata{
icon_state = "orange_tile"
},
@@ -43148,7 +43048,7 @@ nTS
crN
aZv
bgQ
-bhL
+bgQ
aZv
aZv
bia
@@ -43537,7 +43437,7 @@ bjN
aVq
bjN
aVq
-bgR
+bhM
bhM
bgS
bgS
@@ -58538,7 +58438,7 @@ aRR
aRR
aZe
iLJ
-qmW
+bGk
aac
ccd
cmX
@@ -72549,10 +72449,10 @@ ccp
ccp
ckM
cjn
-aAM
-aAM
-aAM
-aAM
+cgu
+cgu
+cgu
+cgu
cjn
aGM
cgp
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index 128256587e..1f3bf36f78 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -23563,7 +23563,7 @@
dir = 4
},
/obj/structure/surface/table/reinforced/almayer_B,
-/obj/item/storage/box/co2_knife{
+/obj/item/storage/box/loadout/co2_knife{
pixel_x = 8;
pixel_y = 9
},
diff --git a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
index 36c8e9abe7..e5461db06c 100644
--- a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
+++ b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
@@ -6689,7 +6689,7 @@
/obj/structure/surface/rack,
/obj/item/ammo_box/magazine/m4a3,
/obj/item/ammo_box/magazine/m44,
-/obj/item/ammo_box/magazine/mod88,
+/obj/item/ammo_box/magazine/vp70,
/turf/open/floor/prison{
icon_state = "floor_plate"
},
diff --git a/maps/map_files/chapaev/chapaev.dmm b/maps/map_files/chapaev/chapaev.dmm
index ec03e22945..61f68cb840 100644
--- a/maps/map_files/chapaev/chapaev.dmm
+++ b/maps/map_files/chapaev/chapaev.dmm
@@ -2686,7 +2686,7 @@
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
-/obj/item/weapon/gun/shotgun/type23/pve,
+/obj/item/weapon/gun/shotgun/type23,
/turf/open/floor/strata{
icon_state = "floor2"
},
@@ -4342,6 +4342,7 @@
job = "Platoon Commander"
},
/obj/item/clothing/under/marine/veteran/UPP/boiler,
+/obj/item/clothing/under/marine/veteran/UPP/officer,
/turf/open/floor/strata{
dir = 6;
icon_state = "multi_tiles"
@@ -4735,7 +4736,7 @@
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
/obj/item/ammo_magazine/handful/shotgun/heavy/buckshot/special,
-/obj/item/weapon/gun/shotgun/type23/pve,
+/obj/item/weapon/gun/shotgun/type23,
/turf/open/floor/strata{
icon_state = "floor2"
},
diff --git a/maps/map_files/derelict_almayer/derelict_almayer.dmm b/maps/map_files/derelict_almayer/derelict_almayer.dmm
index aeab7ffa35..5b9cb948c1 100644
--- a/maps/map_files/derelict_almayer/derelict_almayer.dmm
+++ b/maps/map_files/derelict_almayer/derelict_almayer.dmm
@@ -60103,7 +60103,7 @@
dir = 4
},
/obj/structure/surface/table/reinforced/almayer_B,
-/obj/item/storage/box/co2_knife{
+/obj/item/storage/box/loadout/co2_knife{
pixel_x = 8;
pixel_y = 9
},
diff --git a/maps/map_files/golden_arrow/golden_arrow.dmm b/maps/map_files/golden_arrow/golden_arrow.dmm
index 37c6f5290e..3c70bcd776 100644
--- a/maps/map_files/golden_arrow/golden_arrow.dmm
+++ b/maps/map_files/golden_arrow/golden_arrow.dmm
@@ -541,7 +541,6 @@
},
/obj/item/defenses/handheld/sentry,
/obj/structure/largecrate/supply/explosives/grenades/less{
- icon_state = "case";
layer = 3.1;
pixel_x = 20;
pixel_y = 10
@@ -1285,6 +1284,19 @@
},
/turf/open/floor/almayer,
/area/golden_arrow/hangar)
+"eM" = (
+/obj/structure/surface/table/almayer,
+/obj/item/tool/kitchen/rollingpin{
+ pixel_y = 4;
+ pixel_x = -6
+ },
+/obj/item/tool/kitchen/knife{
+ pixel_x = 9
+ },
+/turf/open/floor/almayer{
+ icon_state = "dark_sterile"
+ },
+/area/golden_arrow/cryo_cells)
"eN" = (
/obj/structure/machinery/gear{
id = "supply_elevator_gear"
@@ -2281,7 +2293,6 @@
"iF" = (
/obj/structure/largecrate/supply/motiondetectors,
/obj/structure/largecrate/supply/explosives/grenades/less{
- icon_state = "case";
pixel_y = 10
},
/obj/item/ammo_box/magazine/mk1{
@@ -3595,6 +3606,9 @@
/obj/item/ammo_magazine/rifle/m4ra/pve,
/obj/item/ammo_magazine/rifle/m4ra/pve,
/obj/effect/decal/cleanable/dirt,
+/obj/item/weapon/gun/rifle/m4ra/pve{
+ pixel_y = 8
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -3644,11 +3658,27 @@
},
/area/golden_arrow/hangar)
"nD" = (
+/obj/structure/surface/rack{
+ pixel_y = 14;
+ pixel_x = 4
+ },
/obj/structure/reagent_dispensers/water_cooler/stacks{
density = 0;
pixel_x = -10;
pixel_y = 6
},
+/obj/item/reagent_container/food/condiment/peppermill{
+ pixel_y = 26;
+ pixel_x = 1
+ },
+/obj/item/reagent_container/food/condiment/saltshaker{
+ pixel_y = 26;
+ pixel_x = -3
+ },
+/obj/item/storage/box/drinkingglasses{
+ pixel_x = 10;
+ pixel_y = 28
+ },
/turf/open/floor/almayer{
icon_state = "dark_sterile"
},
@@ -3908,17 +3938,6 @@
},
/turf/open/floor/plating,
/area/golden_arrow/hangar)
-"oK" = (
-/obj/item/storage/box/guncase/pumpshotgun/special{
- pixel_y = 4
- },
-/obj/item/storage/box/guncase/flamer/special{
- layer = 3.1;
- pixel_y = 10
- },
-/obj/structure/surface/rack,
-/turf/open/floor/almayer,
-/area/golden_arrow/platoonarmory)
"oM" = (
/obj/structure/filingcabinet{
density = 0;
@@ -5206,7 +5225,7 @@
/area/golden_arrow/engineering)
"tP" = (
/obj/structure/surface/table/almayer,
-/obj/item/storage/box/co2_knife{
+/obj/item/storage/box/loadout/co2_knife{
pixel_x = 3;
pixel_y = 13
},
@@ -6992,23 +7011,22 @@
},
/area/golden_arrow/cryo_cells)
"AV" = (
-/obj/structure/surface/table/almayer,
-/obj/item/tool/kitchen/tray{
- pixel_x = -5;
- pixel_y = 6
- },
-/obj/item/trash/plate{
- pixel_x = -5;
- pixel_y = 5
- },
-/obj/item/trash/plate{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/trash/plate{
- pixel_x = -4;
- pixel_y = 9
- },
+/obj/item/reagent_container/food/condiment/sugar,
+/obj/item/reagent_container/food/condiment/enzyme,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/structure/closet{
+ desc = "It's a fancy storage unit for long-life foodstuffs.";
+ name = "long-life foodstuff storage"
+ },
+/obj/item/storage/box/powderedmilk,
+/obj/item/reagent_container/food/condiment/juice/egg,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
+/obj/item/reagent_container/food/snacks/flour,
/turf/open/floor/almayer{
icon_state = "dark_sterile"
},
@@ -7535,9 +7553,6 @@
/turf/open/floor/plating,
/area/golden_arrow/hangar)
"Dn" = (
-/obj/structure/surface/rack{
- pixel_y = 19
- },
/obj/effect/decal/cleanable/dirt,
/obj/item/stack/medical/ointment{
pixel_x = 2;
@@ -7982,8 +7997,16 @@
"Fe" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/surface/table/almayer,
-/obj/item/weapon/gun/rifle/m4ra/pve{
- pixel_y = 8
+/obj/item/storage/box/guncase/shotgunpump{
+ pixel_y = 17
+ },
+/obj/item/ammo_magazine/shotgun/buckshot{
+ pixel_y = 6;
+ pixel_x = -4
+ },
+/obj/item/ammo_magazine/shotgun/buckshot{
+ pixel_y = 6;
+ pixel_x = 6
},
/turf/open/floor/almayer{
icon_state = "plate"
@@ -8018,17 +8041,29 @@
/area/golden_arrow/prep_hallway)
"Fl" = (
/obj/structure/surface/table/almayer,
+/obj/item/tool/kitchen/tray{
+ pixel_x = -3;
+ pixel_y = 3
+ },
/obj/item/reagent_container/food/condiment/hotsauce/tabasco{
- pixel_x = 7;
- pixel_y = 14
+ pixel_x = 12;
+ pixel_y = 18
},
-/obj/item/paper_bin{
- pixel_x = -7;
+/obj/item/trash/plate{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/trash/plate{
+ pixel_x = -3;
pixel_y = 5
},
/obj/item/reagent_container/food/condiment/hotsauce/tabasco{
- pixel_x = 6;
- pixel_y = 6
+ pixel_y = 18;
+ pixel_x = 2
+ },
+/obj/item/trash/plate{
+ pixel_x = -4;
+ pixel_y = 7
},
/turf/open/floor/almayer{
icon_state = "dark_sterile"
@@ -8055,6 +8090,7 @@
/obj/item/clothing/under/marine/officer/boiler,
/obj/item/clothing/suit/storage/jacket/marine/service,
/obj/item/clothing/suit/storage/jacket/marine/dress/officer/bomber,
+/obj/item/clothing/under/marine/officer/bridge,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -9785,6 +9821,23 @@
},
/turf/open/floor/almayer,
/area/golden_arrow/hangar)
+"LP" = (
+/obj/item/storage/box/guncase/flamer/special{
+ layer = 3.1;
+ pixel_y = 10
+ },
+/obj/structure/surface/rack,
+/obj/item/storage/box/guncase/shotguncombat,
+/obj/item/ammo_box/magazine/m4a3{
+ layer = 3;
+ pixel_y = -5;
+ pixel_x = -2
+ },
+/obj/item/ammo_box/magazine/vp70{
+ layer = 3
+ },
+/turf/open/floor/almayer,
+/area/golden_arrow/platoonarmory)
"LQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -21955,12 +22008,12 @@ EG
EG
EG
Wh
-Nz
+nD
HF
rQ
HF
Fl
-og
+AV
og
CM
Bf
@@ -22111,8 +22164,8 @@ fl
HF
rQ
HF
-AV
-og
+HF
+HF
og
Va
TB
@@ -22263,8 +22316,8 @@ zG
aA
vN
nW
-nD
-og
+Nz
+eM
og
Dq
Ms
@@ -22417,7 +22470,7 @@ Ir
Ir
Ir
Ir
-Vi
+og
og
Hv
Iz
@@ -24226,7 +24279,7 @@ EG
EG
EG
HZ
-oK
+LP
NU
pI
Ot
@@ -25138,7 +25191,7 @@ EG
EG
EG
HZ
-oK
+LP
pd
Jx
Ot
diff --git a/maps/map_files/golden_arrow_classic/golden_arrow_classic.dmm b/maps/map_files/golden_arrow_classic/golden_arrow_classic.dmm
index ab5d87ee73..8b6ad0c427 100644
--- a/maps/map_files/golden_arrow_classic/golden_arrow_classic.dmm
+++ b/maps/map_files/golden_arrow_classic/golden_arrow_classic.dmm
@@ -533,7 +533,7 @@
pixel_x = 5;
pixel_y = 7
},
-/obj/item/storage/box/co2_knife{
+/obj/item/storage/box/loadout/co2_knife{
pixel_x = 3;
pixel_y = 13
},
@@ -613,7 +613,7 @@
/area/golden_arrow/prep_hallway)
"cV" = (
/obj/structure/surface/table/almayer,
-/obj/item/storage/box/guncase/pumpshotgun/special,
+/obj/item/storage/box/guncase/shotguncombat,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -4989,7 +4989,7 @@
name = "spent snailshot";
layer = 2.7
},
-/obj/item/storage/box/guncase/pumpshotgun/special,
+/obj/item/storage/box/guncase/shotguncombat,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -6236,7 +6236,6 @@
"Kp" = (
/obj/structure/largecrate/supply/motiondetectors,
/obj/structure/largecrate/supply/explosives/grenades/less{
- icon_state = "case";
pixel_y = 10;
pixel_x = 3
},
@@ -7126,9 +7125,7 @@
},
/area/golden_arrow/cryo_cells)
"Pm" = (
-/obj/structure/largecrate/supply/explosives/grenades/less{
- icon_state = "case"
- },
+/obj/structure/largecrate/supply/explosives/grenades/less,
/obj/structure/largecrate/supply/motiondetectors{
pixel_y = 10
},
diff --git a/maps/map_files/rover/rover.dmm b/maps/map_files/rover/rover.dmm
index e672e1b887..fcd21b1f3a 100644
--- a/maps/map_files/rover/rover.dmm
+++ b/maps/map_files/rover/rover.dmm
@@ -485,13 +485,13 @@
/area/golden_arrow/hangar)
"en" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/shotgun/pump/special{
- pixel_y = 10
- },
/obj/structure/machinery/light{
dir = 8
},
-/obj/item/ammo_magazine/shotgun/buckshot/special,
+/obj/item/storage/box/guncase/shotguncombat,
+/obj/item/storage/box/guncase/shotguncombat{
+ pixel_y = 6
+ },
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -1136,6 +1136,7 @@
/obj/structure/machinery/light{
dir = 8
},
+/obj/item/weapon/gun/rifle/m4ra/pve,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -4707,7 +4708,6 @@
/area/golden_arrow/dorms)
"Uc" = (
/obj/structure/surface/rack,
-/obj/item/weapon/gun/rifle/m4ra/pve,
/turf/open/floor/almayer{
icon_state = "plate"
},
diff --git a/maps/shuttles/dropship_cherokee.dmm b/maps/shuttles/dropship_cherokee.dmm
deleted file mode 100644
index 56a4f62239..0000000000
--- a/maps/shuttles/dropship_cherokee.dmm
+++ /dev/null
@@ -1,258 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/area/space,
-/turf/open/space/basic)
-
-(1,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(2,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(3,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(4,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(5,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(6,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(7,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(8,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(9,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(10,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(11,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
diff --git a/maps/shuttles/dropship_cyclone.dmm b/maps/shuttles/dropship_cyclone.dmm
index 2a5ac47a67..2976d18827 100644
--- a/maps/shuttles/dropship_cyclone.dmm
+++ b/maps/shuttles/dropship_cyclone.dmm
@@ -334,9 +334,7 @@
/turf/template_noop,
/area/shuttle/cyclone)
"yA" = (
-/obj/structure/shuttle/part/cyclone/transparent{
- icon_state = "101"
- },
+/obj/structure/shuttle/part/cyclone/gunpod_prop,
/turf/template_noop,
/area/shuttle/cyclone)
"yP" = (
@@ -364,7 +362,7 @@
},
/area/shuttle/cyclone)
"zL" = (
-/obj/structure/shuttle/part/cyclone/transparent{
+/obj/structure/shuttle/part/cyclone/transparent/nosecone{
icon_state = "102"
},
/turf/template_noop,
@@ -578,7 +576,7 @@
/turf/template_noop,
/area/shuttle/cyclone)
"RR" = (
-/obj/structure/shuttle/part/cyclone/transparent{
+/obj/structure/shuttle/part/cyclone/transparent/nosecone{
icon_state = "100"
},
/turf/template_noop,
diff --git a/maps/shuttles/dropship_midway.dmm b/maps/shuttles/dropship_midway.dmm
index d5b269fe39..19582a7611 100644
--- a/maps/shuttles/dropship_midway.dmm
+++ b/maps/shuttles/dropship_midway.dmm
@@ -39,7 +39,7 @@
/area/shuttle/midway)
"dE" = (
/turf/closed/shuttle/midway{
- icon_state = "42"
+ icon_state = "36"
},
/area/shuttle/midway)
"eu" = (
@@ -49,7 +49,7 @@
/turf/template_noop,
/area/shuttle/midway)
"go" = (
-/obj/structure/shuttle/part/midway/transparent{
+/obj/structure/shuttle/part/midway/transparent/nosecone{
icon_state = "102"
},
/turf/template_noop,
@@ -215,10 +215,6 @@
},
/area/shuttle/midway)
"tf" = (
-/obj/structure/machinery/cm_vending/sorted/medical/wall_med{
- pixel_y = 26;
- pixel_x = -10
- },
/turf/closed/shuttle/midway/transparent{
icon_state = "97a"
},
@@ -350,7 +346,7 @@
},
/area/shuttle/midway)
"Cr" = (
-/obj/structure/shuttle/part/midway/transparent{
+/obj/structure/shuttle/part/midway/transparent/nosecone{
icon_state = "100"
},
/turf/template_noop,
@@ -528,9 +524,7 @@
},
/area/shuttle/midway)
"LY" = (
-/obj/structure/shuttle/part/midway/transparent{
- icon_state = "101"
- },
+/obj/structure/shuttle/part/midway/gunpod_prop,
/turf/template_noop,
/area/shuttle/midway)
"LZ" = (
diff --git a/maps/shuttles/dropship_tornado.dmm b/maps/shuttles/dropship_tornado.dmm
index 240420ff0d..4586189c82 100644
--- a/maps/shuttles/dropship_tornado.dmm
+++ b/maps/shuttles/dropship_tornado.dmm
@@ -174,9 +174,7 @@
},
/area/shuttle/tornado)
"hE" = (
-/obj/structure/shuttle/part/tornado/transparent{
- icon_state = "101"
- },
+/obj/structure/shuttle/part/tornado/gunpod_prop,
/turf/template_noop,
/area/shuttle/tornado)
"jP" = (
@@ -259,7 +257,7 @@
},
/area/shuttle/tornado)
"sx" = (
-/obj/structure/shuttle/part/tornado/transparent{
+/obj/structure/shuttle/part/tornado/transparent/nosecone{
icon_state = "100"
},
/turf/template_noop,
@@ -536,7 +534,7 @@
},
/area/shuttle/tornado)
"Pi" = (
-/obj/structure/shuttle/part/tornado/transparent{
+/obj/structure/shuttle/part/tornado/transparent/nosecone{
icon_state = "102"
},
/turf/template_noop,
diff --git a/maps/shuttles/dropship_tripoli.dmm b/maps/shuttles/dropship_tripoli.dmm
index 9caea2f03a..f068b75d85 100644
--- a/maps/shuttles/dropship_tripoli.dmm
+++ b/maps/shuttles/dropship_tripoli.dmm
@@ -320,7 +320,7 @@
/turf/template_noop,
/area/shuttle/tripoli)
"wL" = (
-/obj/structure/shuttle/part/tripoli{
+/obj/structure/shuttle/part/tripoli/transparent/nosecone{
icon_state = "100"
},
/turf/template_noop,
@@ -347,9 +347,7 @@
/turf/template_noop,
/area/shuttle/tripoli)
"yF" = (
-/obj/structure/shuttle/part/tripoli{
- icon_state = "101"
- },
+/obj/structure/shuttle/part/tripoli/gunpod_prop,
/turf/template_noop,
/area/shuttle/tripoli)
"zt" = (
@@ -461,7 +459,7 @@
/turf/template_noop,
/area/shuttle/tripoli)
"Fq" = (
-/obj/structure/shuttle/part/tripoli{
+/obj/structure/shuttle/part/tripoli/transparent/nosecone{
icon_state = "102"
},
/turf/template_noop,
diff --git a/maps/shuttles/dropship_typhoon.dmm b/maps/shuttles/dropship_typhoon.dmm
index 331bb09506..9e184dd846 100644
--- a/maps/shuttles/dropship_typhoon.dmm
+++ b/maps/shuttles/dropship_typhoon.dmm
@@ -105,7 +105,7 @@
},
/area/shuttle/tornado)
"jt" = (
-/obj/structure/shuttle/part/typhoon/transparent{
+/obj/structure/shuttle/part/typhoon/transparent/nosecone{
icon_state = "102"
},
/turf/template_noop,
@@ -172,9 +172,7 @@
/turf/template_noop,
/area/shuttle/tornado)
"qa" = (
-/obj/structure/shuttle/part/typhoon/transparent{
- icon_state = "101"
- },
+/obj/structure/shuttle/part/typhoon/gunpod_prop,
/turf/template_noop,
/area/shuttle/tornado)
"rb" = (
@@ -354,7 +352,7 @@
},
/area/shuttle/tornado)
"FO" = (
-/obj/structure/shuttle/part/typhoon/transparent{
+/obj/structure/shuttle/part/typhoon/transparent/nosecone{
icon_state = "100"
},
/turf/template_noop,
diff --git a/maps/shuttles/ert_shuttle_big.dmm b/maps/shuttles/ert_shuttle_big.dmm
index 96fb88a3ea..dcb88ddd2d 100644
--- a/maps/shuttles/ert_shuttle_big.dmm
+++ b/maps/shuttles/ert_shuttle_big.dmm
@@ -22,11 +22,11 @@
/area/shuttle/ert)
"cx" = (
/obj/structure/surface/table/almayer,
-/obj/item/weapon/gun/pistol/mod88{
+/obj/item/weapon/gun/pistol/vp70{
pixel_y = 4
},
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
-/obj/item/ammo_magazine/pistol/mod88/normalpoint,
+/obj/item/ammo_magazine/pistol/vp70,
+/obj/item/ammo_magazine/pistol/vp70,
/turf/open/floor/almayer{
icon_state = "plate"
},
diff --git a/maps/shuttles/shuttle_size.dmm b/maps/shuttles/shuttle_size.dmm
deleted file mode 100644
index 56a4f62239..0000000000
--- a/maps/shuttles/shuttle_size.dmm
+++ /dev/null
@@ -1,258 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/area/space,
-/turf/open/space/basic)
-
-(1,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(2,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(3,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(4,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(5,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(6,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(7,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(8,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(9,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(10,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
-(11,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-"}
diff --git a/sound/weapons/gun_88m4_reload.ogg b/sound/weapons/gun_vp70_reload.ogg
similarity index 100%
rename from sound/weapons/gun_88m4_reload.ogg
rename to sound/weapons/gun_vp70_reload.ogg
diff --git a/sound/weapons/gun_88m4_unload.ogg b/sound/weapons/gun_vp70_unload.ogg
similarity index 100%
rename from sound/weapons/gun_88m4_unload.ogg
rename to sound/weapons/gun_vp70_unload.ogg
diff --git a/sound/weapons/gun_88m4_v7.ogg b/sound/weapons/gun_vp70_v7.ogg
similarity index 100%
rename from sound/weapons/gun_88m4_v7.ogg
rename to sound/weapons/gun_vp70_v7.ogg
diff --git a/tgui/packages/tgui/interfaces/OverwatchConsole.jsx b/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
index 0c2c4e801c..db9987529e 100644
--- a/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
+++ b/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
@@ -370,12 +370,13 @@ const SquadMonitor = (props) => {
let determine_status_color = (status) => {
let conscious = status.includes('Conscious');
+ let incapacitated = status.includes('Incapacitated');
let unconscious = status.includes('Unconscious');
let state_color = 'red';
if (conscious) {
state_color = 'green';
- } else if (unconscious) {
+ } else if (incapacitated || unconscious) {
state_color = 'yellow';
}
return state_color;
diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx
new file mode 100644
index 0000000000..6790d17a29
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/StripMenu.tsx
@@ -0,0 +1,380 @@
+import { range } from 'common/collections';
+import { BooleanLike } from 'common/react';
+
+import { resolveAsset } from '../assets';
+import { useBackend } from '../backend';
+import { Box, Button, Icon, Image, Stack } from '../components';
+import { Window } from '../layouts';
+
+const ROWS = 5;
+const COLUMNS = 6;
+
+const BUTTON_DIMENSIONS = '64px';
+
+type GridSpotKey = string;
+
+const getGridSpotKey = (spot: [number, number]): GridSpotKey => {
+ return `${spot[0]}/${spot[1]}`;
+};
+
+const CornerText = (props: {
+ readonly align: 'left' | 'right';
+ readonly children: string;
+}): JSX.Element => {
+ const { align, children } = props;
+
+ return (
+
+ {children}
+
+ );
+};
+
+type AlternateAction = {
+ icon: string;
+ text: string;
+};
+
+const ALTERNATE_ACTIONS: Record = {
+ remove_splints: {
+ icon: 'crutch',
+ text: 'Remove splints',
+ },
+
+ remove_accessory: {
+ icon: 'tshirt',
+ text: 'Remove accessory',
+ },
+
+ retrieve_tag: {
+ icon: 'tags',
+ text: 'Retrieve info tag',
+ },
+
+ toggle_internals: {
+ icon: 'mask-face',
+ text: 'Toggle internals',
+ },
+};
+
+type Slot = {
+ displayName: string;
+ gridSpot: GridSpotKey;
+ image?: string;
+ additionalComponent?: JSX.Element;
+ hideEmpty?: boolean;
+};
+
+const SLOTS: Record = {
+ glasses: {
+ displayName: 'glasses',
+ gridSpot: getGridSpotKey([0, 1]),
+ image: 'inventory-glasses.png',
+ },
+
+ head: {
+ displayName: 'headwear',
+ gridSpot: getGridSpotKey([0, 2]),
+ image: 'inventory-head.png',
+ },
+
+ wear_mask: {
+ displayName: 'mask',
+ gridSpot: getGridSpotKey([1, 2]),
+ image: 'inventory-mask.png',
+ },
+
+ wear_r_ear: {
+ displayName: 'right earwear',
+ gridSpot: getGridSpotKey([0, 3]),
+ image: 'inventory-ears.png',
+ },
+
+ wear_l_ear: {
+ displayName: 'left earwear',
+ gridSpot: getGridSpotKey([1, 3]),
+ image: 'inventory-ears.png',
+ },
+
+ handcuffs: {
+ displayName: 'handcuffs',
+ gridSpot: getGridSpotKey([1, 4]),
+ hideEmpty: true,
+ },
+
+ legcuffs: {
+ displayName: 'legcuffs',
+ gridSpot: getGridSpotKey([1, 5]),
+ hideEmpty: true,
+ },
+
+ w_uniform: {
+ displayName: 'uniform',
+ gridSpot: getGridSpotKey([2, 1]),
+ image: 'inventory-uniform.png',
+ },
+
+ wear_suit: {
+ displayName: 'suit',
+ gridSpot: getGridSpotKey([2, 2]),
+ image: 'inventory-suit.png',
+ },
+
+ gloves: {
+ displayName: 'gloves',
+ gridSpot: getGridSpotKey([2, 3]),
+ image: 'inventory-gloves.png',
+ },
+
+ r_hand: {
+ displayName: 'right hand',
+ gridSpot: getGridSpotKey([2, 4]),
+ image: 'inventory-hand_r.png',
+ additionalComponent: R,
+ },
+
+ l_hand: {
+ displayName: 'left hand',
+ gridSpot: getGridSpotKey([2, 5]),
+ image: 'inventory-hand_l.png',
+ additionalComponent: L,
+ },
+
+ shoes: {
+ displayName: 'shoes',
+ gridSpot: getGridSpotKey([3, 2]),
+ image: 'inventory-shoes.png',
+ },
+
+ j_store: {
+ displayName: 'suit storage item',
+ gridSpot: getGridSpotKey([4, 0]),
+ image: 'inventory-suit_storage.png',
+ },
+
+ id: {
+ displayName: 'ID',
+ gridSpot: getGridSpotKey([4, 1]),
+ image: 'inventory-id.png',
+ },
+
+ belt: {
+ displayName: 'belt',
+ gridSpot: getGridSpotKey([4, 2]),
+ image: 'inventory-belt.png',
+ },
+
+ back: {
+ displayName: 'backpack',
+ gridSpot: getGridSpotKey([4, 3]),
+ image: 'inventory-back.png',
+ },
+
+ l_store: {
+ displayName: 'left pocket',
+ gridSpot: getGridSpotKey([4, 4]),
+ image: 'inventory-pocket.png',
+ },
+
+ r_store: {
+ displayName: 'right pocket',
+ gridSpot: getGridSpotKey([4, 5]),
+ image: 'inventory-pocket.png',
+ },
+};
+
+enum ObscuringLevel {
+ Completely = 1,
+ Hidden = 2,
+}
+
+type Interactable = {
+ interacting: BooleanLike;
+};
+
+/**
+ * Some possible options:
+ *
+ * null - No interactions, no item, but is an available slot
+ * { interacting: 1 } - No item, but we're interacting with it
+ * { icon: icon, name: name } - An item with no alternate actions
+ * that we're not interacting with.
+ * { icon, name, interacting: 1 } - An item with no alternate actions
+ * that we're interacting with.
+ */
+type StripMenuItem =
+ | null
+ | Interactable
+ | ((
+ | {
+ icon: string;
+ name: string;
+ alternate: string;
+ }
+ | {
+ obscured: ObscuringLevel;
+ }
+ | {
+ no_item_action: string;
+ }
+ ) &
+ Partial);
+
+type StripMenuData = {
+ items: Record;
+ name: string;
+};
+
+const StripContent = (props: { readonly item: StripMenuItem }) => {
+ if (props.item && 'name' in props.item) {
+ return (
+
+ );
+ }
+ if (props.item && 'obscured' in props.item) {
+ return (
+
+ );
+ }
+ return <> >;
+};
+
+export const StripMenu = (props) => {
+ const { act, data } = useBackend();
+
+ const gridSpots = new Map();
+ for (const key of Object.keys(data.items)) {
+ const item = data.items[key];
+ if (item === null && SLOTS[key].hideEmpty) continue;
+ gridSpots.set(SLOTS[key].gridSpot, key);
+ }
+
+ return (
+
+
+
+ {range(0, ROWS).map((row) => (
+
+
+ {range(0, COLUMNS).map((column) => {
+ const key = getGridSpotKey([row, column]);
+ const keyAtSpot = gridSpots.get(key);
+
+ if (!keyAtSpot) {
+ return (
+
+ );
+ }
+
+ const item = data.items[keyAtSpot];
+ const slot = SLOTS[keyAtSpot];
+
+ let alternateAction: AlternateAction | undefined;
+
+ let content;
+ let tooltip;
+
+ if (item === null) {
+ tooltip = slot.displayName;
+ } else if ('name' in item) {
+ alternateAction = ALTERNATE_ACTIONS[item.alternate];
+ tooltip = item.name;
+ } else if ('obscured' in item) {
+ tooltip = `obscured ${slot.displayName}`;
+ } else if ('no_item_action' in item) {
+ tooltip = slot.displayName;
+ alternateAction = ALTERNATE_ACTIONS[item.no_item_action];
+ }
+
+ return (
+
+
+
+
+ {alternateAction !== undefined && (
+
+ )}
+
+
+ );
+ })}
+
+
+ ))}
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/styles/interfaces/StripMenu.scss b/tgui/packages/tgui/styles/interfaces/StripMenu.scss
new file mode 100644
index 0000000000..d2c867c0ac
--- /dev/null
+++ b/tgui/packages/tgui/styles/interfaces/StripMenu.scss
@@ -0,0 +1,65 @@
+@use '../base.scss';
+
+$background-color: rgba(0, 0, 0, 0.33) !default;
+
+.StripMenu__cornertext_left {
+ position: relative;
+ left: 2px;
+ text-align: left;
+ text-shadow: 1px 1px 1px #555;
+}
+
+.StripMenu__cornertext_right {
+ position: relative;
+ left: -2px;
+ text-align: right;
+ text-shadow: 1px 1px 1px #555;
+}
+
+.StripMenu__iconbox {
+ height: 100%;
+ width: 100%;
+ -ms-interpolation-mode: nearest-neighbor;
+ vertical-align: middle;
+}
+
+.StripMenu__obscured {
+ text-align: center;
+ height: 100%;
+ width: 100%;
+}
+
+.StripMenu__itembox {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+.StripMenu__contentbox {
+ position: relative;
+}
+
+.StripMenu__itembutton {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ padding: 0;
+}
+
+.StripMenu__itemslot {
+ position: absolute;
+ width: 32px;
+ height: 32px;
+ left: 50%;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%) scale(0.8);
+ opacity: 0.7;
+}
+
+.StripMenu__alternativeaction {
+ background: rgba(0, 0, 0, 0.6);
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ z-index: 2;
+}
diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss
index b51e602746..639365e0e3 100644
--- a/tgui/packages/tgui/styles/main.scss
+++ b/tgui/packages/tgui/styles/main.scss
@@ -80,6 +80,7 @@
@include meta.load-css('./interfaces/common/Dpad.scss');
@include meta.load-css('./interfaces/common/ElectricalPanel.scss');
@include meta.load-css('./interfaces/TacticalMap.scss');
+@include meta.load-css('./interfaces/StripMenu.scss');
// Layouts
@include meta.load-css('./layouts/Layout.scss');