"}
diff --git a/code/modules/factory/parts.dm b/code/modules/factory/parts.dm
index d93b1e96c2afa..09e2a62745253 100644
--- a/code/modules/factory/parts.dm
+++ b/code/modules/factory/parts.dm
@@ -83,6 +83,38 @@ GLOBAL_LIST_INIT(pizza_recipe, list(
. = ..()
recipe = GLOB.pizza_recipe
+GLOBAL_LIST_INIT(plastique_recipe, list(
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "cutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "hotplate"),
+))
+
+/obj/item/factory_part/plastique
+ name = "\improper C4 explosive assembly"
+ desc = "An unfinshed C4 plastique explosive assembly."
+ result = /obj/item/explosive/plastique
+
+/obj/item/factory_part/plastique/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.plastique_recipe
+
+/obj/item/factory_part/plastique_incendiary
+ name = "\improper EX-62 Genghis incendiary assembly"
+ desc = "An unfinshed EX-62 Genghis incendiary charge assembly."
+ result = /obj/item/explosive/plastique/genghis_charge
+
+/obj/item/factory_part/plastique_incendiary/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.plastique_recipe
+
+/obj/item/factory_part/detpack
+ name = "\improper Detpack assembly"
+ desc = "An unfinished Detpack charge assembly"
+ result = /obj/item/detpack
+
+/obj/item/factory_part/detpack/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.plastique_recipe
+
GLOBAL_LIST_INIT(sadar_ammo_recipe, list(
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"),
@@ -277,6 +309,24 @@ GLOBAL_LIST_INIT(IFF_ammo, list(
. = ..()
recipe = GLOB.IFF_ammo
+/obj/item/factory_part/sniper_flak_magazine
+ name = "\improper FLAK sniper bullet box"
+ desc = "A box with unfinished flak sniper rounds inside."
+ result = /obj/item/ammo_magazine/rifle/chamberedrifle/flak
+
+/obj/item/factory_part/sniper_flak_magazine/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.IFF_ammo
+
+/obj/item/factory_part/sniper_flak_magazine
+ name = "\improper FLAK sniper bullet box"
+ desc = "A box with unfinished flak sniper rounds inside."
+ result = /obj/item/ammo_magazine/rifle/chamberedrifle/flak
+
+/obj/item/factory_part/sniper_flak_magazine/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.IFF_ammo
+
GLOBAL_LIST_INIT(mateba_speedloader, list(
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "bulletbox"),
@@ -306,6 +356,24 @@ GLOBAL_LIST_INIT(railgun_magazine, list(
. = ..()
recipe = GLOB.railgun_magazine
+/obj/item/factory_part/railgun_hvap_magazine
+ name = "railgun round"
+ desc = "An unfinished magnetically propelled steel rod."
+ result = /obj/item/ammo_magazine/railgun/hvap
+
+/obj/item/factory_part/railgun_hvap_magazine/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.railgun_magazine
+
+/obj/item/factory_part/railgun_smart_magazine
+ name = "railgun round"
+ desc = "An unfinished magnetically propelled steel rod."
+ result = /obj/item/ammo_magazine/railgun/smart
+
+/obj/item/factory_part/railgun_smart_magazine/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.railgun_magazine
+
GLOBAL_LIST_INIT(minigun_powerpack, list(
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "cutplate"),
@@ -328,7 +396,7 @@ GLOBAL_LIST_INIT(razornade, list(
/obj/item/factory_part/razornade
name = "razorfoam grenade"
desc = "An unfinished Razorfoam grenade casing."
- result = /obj/item/explosive/grenade/chem_grenade/razorburn_smol
+ result = /obj/item/explosive/grenade/chem_grenade/razorburn_small
/obj/item/factory_part/razornade/Initialize(mapload)
. = ..()
@@ -572,7 +640,7 @@ GLOBAL_LIST_INIT(thermobaric_wp_recipe, list(
. = ..()
recipe = GLOB.thermobaric_wp_recipe
-GLOBAL_LIST_INIT(drop_pod_recipe, list(
+GLOBAL_LIST_INIT(equipment_recipe, list(
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"),
list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "hotplate"),
@@ -581,10 +649,193 @@ GLOBAL_LIST_INIT(drop_pod_recipe, list(
/obj/item/factory_part/drop_pod
name = "TGMC Zeus orbital drop pod assembly"
- desc = "An incomplete Zeus orbital drop pod assembly"
+ desc = "An incomplete Zeus orbital drop pod assembly."
result = /obj/structure/droppod
/obj/item/factory_part/drop_pod/Initialize(mapload)
. = ..()
- recipe = GLOB.drop_pod_recipe
+ recipe = GLOB.equipment_recipe
+
+/obj/item/factory_part/deployable_floodlight
+ name = "\improper deployable floodlight assembly"
+ desc = "An incomplete deployable floodlight assembly."
+ result = /obj/item/deployable_floodlight
+
+/obj/item/factory_part/deployable_floodlight/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.equipment_recipe
+
+/obj/item/factory_part/deployable_camera
+ name = "\improper deployable security camera assembly"
+ desc = "An incomplete deployable security camera assembly."
+ result = /obj/item/deployable_camera
+
+/obj/item/factory_part/deployable_camera/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.equipment_recipe
+
+GLOBAL_LIST_INIT(agls_recipe, list(
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CONSTRUCTOR, STEP_ICON_STATE = "hotplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "rockettube"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "hotplate"),
+ ))
+
+/obj/item/factory_part/agls_he
+ name = "\improper AGLS HE magazine assembly"
+ desc = "An incomplete AGLS HE magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls
+
+/obj/item/factory_part/obj/item/factory_part/agls_he/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+
+/obj/item/factory_part/agls_frag
+ name = "\improper AGLS Frag magazine assembly"
+ desc = "An incomplete AGLS Frag magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls/fragmentation
+
+/obj/item/factory_part/agls_frag/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+
+/obj/item/factory_part/agls_incendiary
+ name = "\improper AGLS HE magazine assembly"
+ desc = "An incomplete AGLS HE magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls/incendiary
+
+/obj/item/factory_part/agls_incendiary/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+/obj/item/factory_part/agls_flare
+ name = "\improper AGLS HE magazine assembly"
+ desc = "An incomplete AGLS HE magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls/flare
+
+/obj/item/factory_part/agls_flare/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+
+/obj/item/factory_part/agls_cloak
+ name = "\improper AGLS HE magazine assembly"
+ desc = "An incomplete AGLS HE magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls/cloak
+
+/obj/item/factory_part/agls_cloak/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+
+/obj/item/factory_part/agls_tanglefoot
+ name = "\improper AGLS HE magazine assembly"
+ desc = "An incomplete AGLS HE magazine assembly."
+ result = /obj/item/ammo_magazine/standard_agls/tanglefoot
+
+/obj/item/factory_part/agls_tanglefoot/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.agls_recipe
+
+GLOBAL_LIST_INIT(atgun_recipe, list(
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_CUTTER, STEP_ICON_STATE = "uncutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "cutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FLATTER, STEP_ICON_STATE = "hotplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "rockettube"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"),
+ ))
+
+/obj/item/factory_part/atgun_aphe
+ name = "\improper AT-36 APHE shell assembly"
+ desc = "An incomplete AT-36 APHE shell assembly."
+ result = /obj/item/ammo_magazine/standard_atgun
+
+/obj/item/factory_part/atgun_aphe/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.atgun_recipe
+
+/obj/item/factory_part/atgun_apcr
+ name = "\improper AT-36 APCR shell assembly"
+ desc = "An incomplete AT-36 APCR shell assembly."
+ result = /obj/item/ammo_magazine/standard_atgun/apcr
+
+/obj/item/factory_part/atgun_apcr/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.atgun_recipe
+
+/obj/item/factory_part/atgun_he
+ name = "\improper AT-36 HE shell assembly"
+ desc = "An incomplete AT-36 HE shell assembly."
+ result = /obj/item/ammo_magazine/standard_atgun/he
+
+/obj/item/factory_part/atgun_he/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.atgun_recipe
+
+/obj/item/factory_part/atgun_beehive
+ name = "\improper AT-36 Beehive shell assembly"
+ desc = "An incomplete AT-36 Beehive shell assembly."
+ result = /obj/item/ammo_magazine/standard_atgun/beehive
+
+/obj/item/factory_part/atgun_beehive/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.atgun_recipe
+
+/obj/item/factory_part/atgun_incend
+ name = "\improper AT-36 Napalm shell assembly"
+ desc = "An incomplete AT-36 Napalm shell assembly."
+ result = /obj/item/ammo_magazine/standard_atgun/incend
+
+/obj/item/factory_part/atgun_incend/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.atgun_recipe
+
+GLOBAL_LIST_INIT(heavy_isg_recipe, list(
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "uncutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "cutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_DRILLER, STEP_ICON_STATE = "hotplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "rockettube"),
+ ))
+
+/obj/item/factory_part/heavy_isg_he
+ name = "\improper FK-88 HE shell assembly"
+ desc = "An incomplete FK-88 HE shell assembly."
+ result = /obj/item/ammo_magazine/heavy_isg/he
+
+/obj/item/factory_part/heavy_isg_he/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.heavy_isg_recipe
+
+/obj/item/factory_part/heavy_isg_sabot
+ name = "\improper FK-88 HE shell assembly"
+ desc = "An incomplete FK-88 APFDS shell assembly."
+ result = /obj/item/ammo_magazine/heavy_isg/sabot
+
+/obj/item/factory_part/heavy_isg_sabot/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.heavy_isg_recipe
+
+GLOBAL_LIST_INIT(ac_recipe, list(
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_HEATER, STEP_ICON_STATE = "uncutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_COMPRESSOR, STEP_ICON_STATE = "cutplate"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_GALVANIZER, STEP_ICON_STATE = "rockettube"),
+ list(STEP_NEXT_MACHINE = FACTORY_MACHINE_FORMER, STEP_ICON_STATE = "rockettube"),
+ ))
+
+/obj/item/factory_part/ac_hv
+ name = "\improper ATR-22 high velocity magazine assembly"
+ desc = "An incomplete ATR-22 high velocity magazine assembly."
+ result = /obj/item/ammo_magazine/auto_cannon
+
+/obj/item/factory_part/ac_hv/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.ac_recipe
+
+/obj/item/factory_part/ac_flak
+ name = "\improper ATR-22 flak magazine assembly"
+ desc = "An incomplete ATR-22 flak magazine assembly."
+ result = /obj/item/ammo_magazine/auto_cannon/flak
+
+/obj/item/factory_part/ac_flak/Initialize(mapload)
+ . = ..()
+ recipe = GLOB.ac_recipe
diff --git a/code/modules/factory/unboxer.dm b/code/modules/factory/unboxer.dm
index a52b07a9e85e2..4fb021abcba7f 100644
--- a/code/modules/factory/unboxer.dm
+++ b/code/modules/factory/unboxer.dm
@@ -122,6 +122,24 @@
desc = "A box with round metal plates inside. Used to refill Unboxers."
refill_type = /obj/item/factory_part/pizza
+/obj/item/factory_refill/plastique_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/plastique
+ refill_amount = 10
+
+/obj/item/factory_refill/plastique_incendiary_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/plastique_incendiary
+ refill_amount = 5
+
+/obj/item/factory_refill/detpack_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/detpack
+ refill_amount = 10
+
/obj/item/factory_refill/sadar_wp_refill
name = "box of rounded metal plates"
desc = "A box with round metal plates inside. Used to refill Unboxers."
@@ -227,6 +245,18 @@
refill_type = /obj/item/factory_part/railgun_magazine
refill_amount = 20
+/obj/item/factory_refill/railgun_hvap_magazine_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/railgun_magazine
+ refill_amount = 20
+
+/obj/item/factory_refill/railgun_smart_magazine_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/railgun_magazine
+ refill_amount = 20
+
/obj/item/factory_refill/minigun_powerpack_refill
name = "box of rounded metal plates"
desc = "A box with round metal plates inside. Used to refill Unboxers."
@@ -239,6 +269,18 @@
refill_type = /obj/item/factory_part/razornade
refill_amount = 30
+/obj/item/factory_refill/sniper_flak_magazine_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/sniper_flak_magazine
+ refill_amount = 20
+
+/obj/item/factory_refill/sniper_flak_magazine_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/sniper_flak_magazine
+ refill_amount = 20
+
/obj/item/factory_refill/amr_magazine_refill
name = "box of rounded metal plates"
desc = "A box with round metal plates inside. Used to refill Unboxers."
@@ -359,6 +401,96 @@
refill_type = /obj/item/factory_part/mlrs_rocket
refill_amount = 6
+/obj/item/factory_refill/agls_he_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_he
+ refill_amount = 10
+
+/obj/item/factory_refill/agls_frag_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_frag
+ refill_amount = 10
+
+/obj/item/factory_refill/agls_incendiary_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_incendiary
+ refill_amount = 10
+
+/obj/item/factory_refill/agls_flare_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_he
+ refill_amount = 10
+
+/obj/item/factory_refill/agls_cloak_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_cloak
+ refill_amount = 10
+
+/obj/item/factory_refill/agls_tanglefoot_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/agls_tanglefoot
+ refill_amount = 10
+
+/obj/item/factory_refill/atgun_aphe_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/atgun_aphe
+ refill_amount = 30
+
+/obj/item/factory_refill/atgun_apcr_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/atgun_apcr
+ refill_amount = 30
+
+/obj/item/factory_refill/atgun_he_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/atgun_he
+ refill_amount = 30
+
+/obj/item/factory_refill/atgun_beehive_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/atgun_beehive
+ refill_amount = 30
+
+/obj/item/factory_refill/atgun_incend_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/atgun_incend
+ refill_amount = 30
+
+/obj/item/factory_refill/heavy_isg_he_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/heavy_isg_he
+ refill_amount = 5
+
+/obj/item/factory_refill/heavy_isg_sabot_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/heavy_isg_sabot
+ refill_amount = 5
+
+/obj/item/factory_refill/ac_hv_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/ac_hv
+ refill_amount = 10
+
+/obj/item/factory_refill/ac_flak_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/ac_flak
+ refill_amount = 10
+
/obj/item/factory_refill/thermobaric_wp_refill
name = "box of rounded metal plates"
desc = "A box with round metal plates inside. Used to refill Unboxers."
@@ -370,3 +502,27 @@
desc = "A box with round metal plates inside. Used to refill Unboxers."
refill_type = /obj/item/factory_part/drop_pod
refill_amount = 6
+
+/obj/item/factory_refill/deployable_floodlight_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/deployable_floodlight
+ refill_amount = 10
+
+/obj/item/factory_refill/deployable_camera_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/deployable_camera
+ refill_amount = 30
+
+/obj/item/factory_refill/deployable_floodlight_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/deployable_floodlight
+ refill_amount = 10
+
+/obj/item/factory_refill/deployable_camera_refill
+ name = "box of rounded metal plates"
+ desc = "A box with round metal plates inside. Used to refill Unboxers."
+ refill_type = /obj/item/factory_part/deployable_camera
+ refill_amount = 30
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index f45badbb8f67b..47796afa97083 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -6,28 +6,28 @@
if(!ishuman(user))
return
- var/mob/living/carbon/human/H = user
+ var/mob/living/carbon/human/human_user = user
- if(user != src && !check_shields(COMBAT_TOUCH_ATTACK, H.melee_damage, "melee"))
+ if(user != src && !check_shields(COMBAT_TOUCH_ATTACK, human_user.melee_damage, "melee"))
visible_message(span_danger("[user] attempted to touch [src]!"), null, null, 5)
return FALSE
- H.changeNext_move(7)
- switch(H.a_intent)
+ human_user.changeNext_move(7)
+ switch(human_user.a_intent)
if(INTENT_HELP)
- if(on_fire && H != src)
+ if(on_fire && human_user != src)
fire_stacks = max(fire_stacks - 1, 0)
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
- H.visible_message(span_danger("[H] tries to put out the fire on [src]!"), \
+ human_user.visible_message(span_danger("[human_user] tries to put out the fire on [src]!"), \
span_warning("You try to put out the fire on [src]!"), null, 5)
if(fire_stacks <= 0)
- H.visible_message(span_danger("[H] has successfully extinguished the fire on [src]!"), \
+ human_user.visible_message(span_danger("[human_user] has successfully extinguished the fire on [src]!"), \
span_notice("You extinguished the fire on [src]."), null, 5)
ExtinguishMob()
return TRUE
- if(istype(wear_mask, /obj/item/clothing/mask/facehugger) && H != src)
- H.stripPanelUnequip(wear_mask, src, SLOT_WEAR_MASK)
+ if(istype(wear_mask, /obj/item/clothing/mask/facehugger) && human_user != src)
+ human_user.stripPanelUnequip(wear_mask, src, SLOT_WEAR_MASK)
return TRUE
if(health >= get_crit_threshold())
@@ -35,93 +35,97 @@
if(interaction_emote(src))
return TRUE
- help_shake_act(H)
+ help_shake_act(human_user)
return TRUE
if(HAS_TRAIT(src, TRAIT_UNDEFIBBABLE))
- to_chat(H, span_boldnotice("Can't help this one. Body has gone cold."))
+ to_chat(human_user, span_boldnotice("Can't help this one. Body has gone cold."))
return FALSE
if(species?.species_flags & ROBOTIC_LIMBS)
- to_chat(H, span_boldnotice("You can't help this one, [p_they()] [p_have()] no lungs!"))
+ to_chat(human_user, span_boldnotice("You can't help this one, [p_they()] [p_have()] no lungs!"))
return FALSE
if((head && (head.flags_inventory & COVERMOUTH)) || (wear_mask && (wear_mask.flags_inventory & COVERMOUTH)))
- to_chat(H, span_boldnotice("Remove [p_their()] mask!"))
+ to_chat(human_user, span_boldnotice("Remove [p_their()] mask!"))
return FALSE
- if((H.head && (H.head.flags_inventory & COVERMOUTH)) || (H.wear_mask && (H.wear_mask.flags_inventory & COVERMOUTH)))
- to_chat(H, span_boldnotice("Remove your mask!"))
+ if((human_user.head && (human_user.head.flags_inventory & COVERMOUTH)) || (human_user.wear_mask && (human_user.wear_mask.flags_inventory & COVERMOUTH)))
+ to_chat(human_user, span_boldnotice("Remove your mask!"))
return FALSE
//CPR
- if(H.do_actions)
+ if(human_user.do_actions)
return TRUE
- H.visible_message(span_danger("[H] is trying perform CPR on [src]!"), null, null, 4)
+ human_user.visible_message(span_danger("[human_user] is trying perform CPR on [src]!"), null, null, 4)
- if(!do_after(H, HUMAN_STRIP_DELAY, NONE, src, BUSY_ICON_FRIENDLY, BUSY_ICON_MEDICAL))
+ if(!do_after(human_user, HUMAN_STRIP_DELAY, NONE, src, BUSY_ICON_FRIENDLY, BUSY_ICON_MEDICAL))
return TRUE
if(health > get_death_threshold() && health < get_crit_threshold())
var/suff = min(getOxyLoss(), 5) //Pre-merge level, less healing, more prevention of dieing.
adjustOxyLoss(-suff)
updatehealth()
- visible_message(span_warning(" [H] performs CPR on [src]!"),
+ visible_message(span_warning(" [human_user] performs CPR on [src]!"),
span_boldnotice("You feel a breath of fresh air enter your lungs. It feels good."),
vision_distance = 3)
- to_chat(H, span_warning("Repeat at least every 7 seconds."))
+ to_chat(human_user, span_warning("Repeat at least every 7 seconds."))
else if(!HAS_TRAIT(src, TRAIT_UNDEFIBBABLE) && !TIMER_COOLDOWN_CHECK(src, COOLDOWN_CPR))
TIMER_COOLDOWN_START(src, COOLDOWN_CPR, 7 SECONDS)
dead_ticks -= 5
- visible_message(span_warning(" [H] performs CPR on [src]!"), vision_distance = 3)
- to_chat(H, span_warning("The patient gains a little more time. Repeat every 7 seconds."))
+ visible_message(span_warning(" [human_user] performs CPR on [src]!"), vision_distance = 3)
+ to_chat(human_user, span_warning("The patient gains a little more time. Repeat every 7 seconds."))
else
- to_chat(H, span_warning("You fail to aid [src]."))
+ to_chat(human_user, span_warning("You fail to aid [src]."))
return TRUE
if(INTENT_GRAB)
- if(H == src || anchored)
+ if(human_user == src || anchored)
return FALSE
- H.start_pulling(src)
+ human_user.start_pulling(src)
return TRUE
if(INTENT_HARM)
// See if they can attack, and which attacks to use.
- if(H == src && !H.do_self_harm)
+ if(human_user == src && !human_user.do_self_harm)
return FALSE
- var/datum/unarmed_attack/attack = H.species.unarmed
- if(!attack.is_usable(H))
- attack = H.species.secondary_unarmed
- if(!attack.is_usable(H))
+ var/datum/unarmed_attack/attack = human_user.species.unarmed
+ if(!attack.is_usable(human_user))
+ attack = human_user.species.secondary_unarmed
+ if(!attack.is_usable(human_user))
return FALSE
- if(!H.melee_damage)
- H.do_attack_animation(src)
+ var/attack_verb = pick(attack.attack_verb)
+ //if you're lying/buckled, the miss chance is ignored anyway
+ var/target_zone = get_zone_with_miss_chance(human_user.zone_selected, src, 10 - (human_user.skills.getRating(SKILL_CQC) - skills.getRating(SKILL_CQC)) * 5)
+
+ if(!human_user.melee_damage || !target_zone)
+ human_user.do_attack_animation(src)
playsound(loc, attack.miss_sound, 25, TRUE)
- visible_message(span_danger("[H] tried to [pick(attack.attack_verb)] [src]!"), null, null, 5)
- log_combat(H, src, "[pick(attack.attack_verb)]ed", "(missed)")
- if(!H.mind?.bypass_ff && !mind?.bypass_ff && H.faction == faction)
+ visible_message(span_danger("[human_user] tried to [attack_verb] [src]!"), null, null, 5)
+ log_combat(human_user, src, "[attack_verb]ed", "(missed)")
+ if(!human_user.mind?.bypass_ff && !mind?.bypass_ff && human_user.faction == faction)
var/turf/T = get_turf(src)
- log_ffattack("[key_name(H)] missed a punch against [key_name(src)] in [AREACOORD(T)].")
- msg_admin_ff("[ADMIN_TPMONTY(H)] missed a punch against [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)].")
+ log_ffattack("[key_name(human_user)] missed a [attack_verb] against [key_name(src)] in [AREACOORD(T)].")
+ msg_admin_ff("[ADMIN_TPMONTY(human_user)] missed a [attack_verb] against [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)].")
return FALSE
- H.do_attack_animation(src, ATTACK_EFFECT_YELLOWPUNCH)
- var/max_dmg = max(H.melee_damage + (H.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD), 3)
- var/damage = rand(1, max_dmg)
-
- var/target_zone = ran_zone(H.zone_selected)
+ human_user.do_attack_animation(src, ATTACK_EFFECT_YELLOWPUNCH)
+ var/max_dmg = max(human_user.melee_damage + (human_user.skills.getRating(SKILL_CQC) * CQC_SKILL_DAMAGE_MOD), 3)
+ var/damage = max_dmg
+ if(!lying_angle)
+ damage = rand(1, max_dmg)
playsound(loc, attack.attack_sound, 25, TRUE)
- visible_message(span_danger("[H] [pick(attack.attack_verb)]ed [src]!"), null, null, 5)
+ visible_message(span_danger("[human_user] [attack_verb]ed [src]!"), null, null, 5)
var/list/hit_report = list()
if(damage >= 4 && prob(25))
- visible_message(span_danger("[H] has weakened [src]!"), null, null, 5)
+ visible_message(span_danger("[human_user] has weakened [src]!"), null, null, 5)
apply_effect(modify_by_armor(6 SECONDS, MELEE, def_zone = target_zone), WEAKEN)
hit_report += "(KO)"
@@ -130,21 +134,21 @@
hit_report += "(RAW DMG: [damage])"
- log_combat(H, src, "[pick(attack.attack_verb)]ed", "[hit_report.Join(" ")]")
- if(!H.mind?.bypass_ff && !mind?.bypass_ff && H.faction == faction)
+ log_combat(human_user, src, "[attack_verb]ed", "[hit_report.Join(" ")]")
+ if(!human_user.mind?.bypass_ff && !mind?.bypass_ff && human_user.faction == faction)
var/turf/T = get_turf(src)
- H.ff_check(damage, src)
- log_ffattack("[key_name(H)] punched [key_name(src)] in [AREACOORD(T)] [hit_report.Join(" ")].")
- msg_admin_ff("[ADMIN_TPMONTY(H)] punched [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)] [hit_report.Join(" ")].")
+ human_user.ff_check(damage, src)
+ log_ffattack("[key_name(human_user)] punched [key_name(src)] in [AREACOORD(T)] [hit_report.Join(" ")].")
+ msg_admin_ff("[ADMIN_TPMONTY(human_user)] punched [ADMIN_TPMONTY(src)] in [ADMIN_VERBOSEJMP(T)] [hit_report.Join(" ")].")
if(INTENT_DISARM)
- H.do_attack_animation(src, ATTACK_EFFECT_DISARM)
+ human_user.do_attack_animation(src, ATTACK_EFFECT_DISARM)
- var/target_zone = ran_zone(H.zone_selected)
+ var/target_zone = ran_zone(human_user.zone_selected)
//Accidental gun discharge
- if(user.skills.getRating(SKILL_CQC) < SKILL_CQC_MP)
+ if(human_user.skills.getRating(SKILL_CQC) < SKILL_CQC_MP)
if (istype(r_hand,/obj/item/weapon/gun) || istype(l_hand,/obj/item/weapon/gun))
var/obj/item/weapon/gun/W = null
var/chance = 0
@@ -159,39 +163,38 @@
if(prob(chance))
visible_message("[src]'s [W] goes off during struggle!", null, null, 5)
- log_combat(H, src, "disarmed", "making their [W] go off")
+ log_combat(human_user, src, "disarmed", "making their [W] go off")
var/list/turfs = list()
for(var/turf/T in view())
turfs += T
var/turf/target = pick(turfs)
return W.afterattack(target,src)
- var/randn = rand(1, 100) + skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD - H.skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD
+ var/randn = rand(1, 100) + skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD - human_user.skills.getRating(SKILL_CQC) * CQC_SKILL_DISARM_MOD
if (randn <= 25)
apply_effect(modify_by_armor(6 SECONDS, MELEE, def_zone = target_zone), WEAKEN)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
- visible_message(span_danger("[H] has pushed [src]!"), null, null, 5)
- log_combat(user, src, "pushed")
+ visible_message(span_danger("[human_user] has pushed [src]!"), null, null, 5)
+ log_combat(human_user, src, "pushed")
return
if(randn <= 60)
//BubbleWrap: Disarming breaks a pull
if(pulling)
- visible_message(span_danger("[H] has broken [src]'s grip on [pulling]!"), null, null, 5)
+ visible_message(span_danger("[human_user] has broken [src]'s grip on [pulling]!"), null, null, 5)
stop_pulling()
else
drop_held_item()
- visible_message(span_danger("[H] has disarmed [src]!"), null, null, 5)
+ visible_message(span_danger("[human_user] has disarmed [src]!"), null, null, 5)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
log_combat(user, src, "disarmed")
return
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, 7)
- visible_message(span_danger("[H] attempted to disarm [src]!"), null, null, 5)
- log_combat(user, src, "missed a disarm")
- return
+ visible_message(span_danger("[human_user] attempted to disarm [src]!"), null, null, 5)
+ log_combat(human_user, src, "missed a disarm")
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 0b46dbb579d0b..bca1b3e113bdc 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -106,6 +106,19 @@ Contains most of the procs that are called when a mob is attacked by something
else
target_zone = def_zone ? check_zone(def_zone) : get_zone_with_miss_chance(user.zone_selected, src)
+ var/attack_verb = LAZYLEN(I.attack_verb) ? pick(I.attack_verb) : "attacked"
+
+ if(!target_zone)
+ user.do_attack_animation(src)
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE)
+ visible_message(span_danger("[user] tried to hit [src] with [I]!"), null, null, 5)
+ log_combat(user, src, "[attack_verb]", "(missed)")
+ if(!user.mind?.bypass_ff && !mind?.bypass_ff && user.faction == faction)
+ var/turf/T = get_turf(src)
+ log_ffattack("[key_name(user)] missed a attack against [key_name(src)] with [I] in [AREACOORD(T)].")
+ msg_admin_ff("[ADMIN_TPMONTY(user)] missed an against [ADMIN_TPMONTY(src)] with [I] in [ADMIN_VERBOSEJMP(T)].")
+ return FALSE
+
var/datum/limb/affecting = get_limb(target_zone)
if(affecting.limb_status & LIMB_DESTROYED)
to_chat(user, "What [affecting.display_name]?")
@@ -122,7 +135,6 @@ Contains most of the procs that are called when a mob is attacked by something
var/applied_damage = modify_by_armor(damage, MELEE, I.penetration, target_zone)
var/percentage_penetration = applied_damage / damage * 100
- var/attack_verb = LAZYLEN(I.attack_verb) ? pick(I.attack_verb) : "attacked"
var/armor_verb
switch(percentage_penetration)
if(-INFINITY to 0)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index c61b5491c87af..0b28ca5237c1c 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -75,10 +75,13 @@
if(species.species_flags & NO_BREATHE)
return
- if(losebreath <= 10)
- adjust_Losebreath(-1) //Since this happens before checking to take/heal oxyloss, a losebreath of 1 or less won't do anything.
- else
+ if(pulledby?.grab_state >= GRAB_KILL)
+ Losebreath(1)
+ adjustOxyLoss(4)
+ else if(losebreath > 10)
set_Losebreath(10) //Any single hit is functionally capped - to keep someone suffocating, you need continued losebreath applications.
+ else if(losebreath > 0)
+ adjust_Losebreath(-1) //Since this happens before checking to take/heal oxyloss, a losebreath of 1 or less won't do anything.
if(health < get_crit_threshold() || losebreath)
if(HAS_TRAIT(src, TRAIT_IGNORE_SUFFOCATION)) //Prevent losing health from asphyxiation, but natural recovery can still happen.
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index a52abcfe70284..0d424021c92c2 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -621,7 +621,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
client.screen += r_hand
r_hand.screen_loc = ui_rhand
- overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = R_HAND_LAYER)
+ overlays_standing[R_HAND_LAYER] = r_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/inhands/items/items_right.dmi', default_layer = R_HAND_LAYER)
apply_overlay(R_HAND_LAYER)
@@ -635,7 +635,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
client.screen += l_hand
l_hand.screen_loc = ui_lhand
- overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = L_HAND_LAYER)
+ overlays_standing[L_HAND_LAYER] = l_hand.make_worn_icon(species_type = species.name, inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/inhands/items/items_left.dmi', default_layer = L_HAND_LAYER)
apply_overlay(L_HAND_LAYER)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/baneling/baneling.dm b/code/modules/mob/living/carbon/xenomorph/castes/baneling/baneling.dm
index e4e46a9f2cd2a..689a6f7448aeb 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/baneling/baneling.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/baneling/baneling.dm
@@ -32,7 +32,7 @@
/mob/living/carbon/xenomorph/baneling/handle_special_wound_states(severity)
. = ..()
if(m_intent == MOVE_INTENT_RUN)
- return "baneling_wounded_running_[severity]"
+ return "wounded_running_[severity]"
/obj/structure/xeno/baneling_pod
name = "Baneling pod"
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm
index 7e607b6561e27..6c9363ba67f66 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/behemoth/behemoth.dm
@@ -35,7 +35,7 @@
. = ..()
var/datum/action/ability/xeno_action/ready_charge/behemoth_roll/behemoth_roll_action = actions_by_path[/datum/action/ability/xeno_action/ready_charge/behemoth_roll]
if(behemoth_roll_action?.charge_ability_on)
- return "behemoth_wounded_charging_[severity]"
+ return "wounded_charging_[severity]"
/mob/living/carbon/xenomorph/behemoth/get_status_tab_items()
. = ..()
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm b/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm
index 15cb5f3b98a8b..329dd2101d41d 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/bull/bull.dm
@@ -27,4 +27,4 @@
/mob/living/carbon/xenomorph/bull/handle_special_wound_states(severity)
. = ..()
if(is_charging >= CHARGE_ON)
- return "bull_wounded_charging_[severity]"
+ return "wounded_charging_[severity]"
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm
index 5b4f5cdb6da5f..f92b62b98ebaa 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/crusher/crusher.dm
@@ -30,7 +30,7 @@
/mob/living/carbon/xenomorph/crusher/handle_special_wound_states(severity)
. = ..()
if(is_charging >= CHARGE_ON)
- return "crusher_wounded_charging_[severity]"
+ return "wounded_charging_[severity]"
/mob/living/carbon/xenomorph/crusher/buckle_mob(mob/living/buckling_mob, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, silent)
if(!force)//crushers should be overriden by runners
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm b/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm
index 0e52b04c5fcaa..2b680430601a8 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/defender/defender.dm
@@ -29,9 +29,9 @@
/mob/living/carbon/xenomorph/defender/handle_special_wound_states(severity)
. = ..()
if(fortify)
- return "defender_wounded_fortify"
+ return "wounded_fortify_[severity]" // we don't have the icons, but still
if(crest_defense)
- return "defender_wounded_crest_[severity]"
+ return "wounded_crest_[severity]"
// ***************************************
// *********** Life overrides
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm
index c4d0edce5035d..3b4303d2e88f7 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/king/abilities_king.dm
@@ -478,6 +478,8 @@
owner.balloon_alert(owner, "noone to call")
return FALSE
+GLOBAL_LIST_EMPTY(active_summons)
+
/datum/action/ability/xeno_action/psychic_summon/action_activate()
var/mob/living/carbon/xenomorph/X = owner
@@ -489,7 +491,9 @@
continue
sister.add_filter("summonoutline", 2, outline_filter(1, COLOR_VIOLET))
- if(!do_after(X, 10 SECONDS, IGNORE_HELD_ITEM, X, BUSY_ICON_HOSTILE))
+ GLOB.active_summons += X
+ request_admins()
+ if(!do_after(X, 10 SECONDS, IGNORE_HELD_ITEM, X, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(src, PROC_REF(is_active_summon))))
add_cooldown(5 SECONDS)
for(var/mob/living/carbon/xenomorph/sister AS in allxenos)
sister.remove_filter("summonoutline")
@@ -508,3 +512,23 @@
add_cooldown()
succeed_activate()
+
+///Sends a message to admins, prompting them if they want to cancel a psychic summon
+/datum/action/ability/xeno_action/psychic_summon/proc/request_admins()
+ var/mob/living/carbon/xenomorph/caster = owner
+ var/canceltext = "[caster] is using [name] at [AREACOORD(caster)] [ADMIN_TPMONTY(caster)] \[CANCEL SUMMON\]"
+ message_admins("[span_prefix("PSYCHIC SUMMON:")] [canceltext]")
+ log_game("psychic summon started by [caster] at [AREACOORD(caster)], timerid to cancel: [10 SECONDS]")
+ notify_ghosts("[caster] has begun to summon at [AREACOORD(caster)]!", action = NOTIFY_JUMP)
+
+///Checks if our summon was cancelled
+/datum/action/ability/xeno_action/psychic_summon/proc/is_active_summon()
+ var/mob/living/carbon/xenomorph/caster = owner
+ if(!(caster in GLOB.active_summons))
+ return FALSE
+ return TRUE
+
+/datum/action/ability/xeno_action/psychic_summon/succeed_activate()
+ . = ..()
+ var/mob/living/carbon/xenomorph/caster = owner
+ GLOB.active_summons -= caster //Remove ourselves from the list once we have completed our summon
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm
index f3dd259359f17..623e185697a64 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/queen/abilities_queen.dm
@@ -39,17 +39,17 @@
var/sound/queen_sound = sound(get_sfx("queen"), channel = CHANNEL_ANNOUNCEMENTS)
var/sound/king_sound = sound('sound/voice/xenos_roaring.ogg', channel = CHANNEL_ANNOUNCEMENTS)
for(var/mob/living/carbon/xenomorph/X AS in Q.hive.get_all_xenos())
+ to_chat(X, assemble_alert(
+ title = "Hive Announcement",
+ subtitle = "From [Q.name]",
+ message = input,
+ color_override = "purple"
+ ))
switch(Q.caste_base_type)
- if(/mob/living/carbon/xenomorph/queen)
+ if(/mob/living/carbon/xenomorph/queen, /mob/living/carbon/xenomorph/shrike)
SEND_SOUND(X, queen_sound)
- //In case in combat, couldn't read fast enough, or needs to copy paste into a translator. Here's the old hive message.
- to_chat(X, "[span_faction_alert("[span_faction_alert_title("The words of the Queen reverberate in your head...")] [span_faction_alert_text("[html_encode(input)]")]")]")
if(/mob/living/carbon/xenomorph/king)
SEND_SOUND(X, king_sound)
- to_chat(X, "[span_faction_alert("[span_faction_alert_title("The words of the King reverberate in your head...")] [span_faction_alert_text("[html_encode(input)]")]")]")
- if(/mob/living/carbon/xenomorph/shrike)
- SEND_SOUND(X, queen_sound)
- to_chat(X, "[span_faction_alert("[span_faction_alert_title("The words of the Shrike reverberate in your head...")] [span_faction_alert_text("[html_encode(input)]")]")]")
//Display the ruler's hive message at the top of the game screen.
X.play_screen_text(queens_word, /atom/movable/screen/text/screen_text/queen_order)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm b/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm
index bf8549b666651..67871b940c1ef 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/warrior/warrior.dm
@@ -27,14 +27,14 @@
// ***************************************
/mob/living/carbon/xenomorph/warrior/handle_special_state()
if(agility)
- icon_state = "Warrior Agility"
+ icon_state = "[xeno_caste.caste_name][is_a_rouny ? " rouny" : ""] Agility"
return TRUE
return FALSE
/mob/living/carbon/xenomorph/warrior/handle_special_wound_states(severity)
. = ..()
if(agility)
- return "warrior_wounded_agility_[severity]"
+ return "wounded_agility_[severity]"
// ***************************************
// *********** Mob overrides
diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm
index 8d1fbbab7477c..690a9e52cb920 100644
--- a/code/modules/mob/living/carbon/xenomorph/death.dm
+++ b/code/modules/mob/living/carbon/xenomorph/death.dm
@@ -23,8 +23,10 @@
if(is_zoomed)
zoom_out()
- if(tier != XENO_TIER_MINION)
- GLOB.key_to_time_of_xeno_death[key] = world.time
+ if(GLOB.xeno_stat_multiplicator_buff == 1) //if autobalance is on, it won't equal 1, so xeno respawn timer is not set
+ switch(tier)
+ if(XENO_TIER_ZERO, XENO_TIER_ONE, XENO_TIER_TWO, XENO_TIER_THREE) //minions and tier fours have no respawn timer
+ GLOB.key_to_time_of_xeno_death[key] = world.time
SSminimaps.remove_marker(src)
set_light_on(FALSE)
diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm
index f26c088b270e9..3eeee58510640 100644
--- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm
+++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm
@@ -70,7 +70,7 @@
r_hand.screen_loc = ui_rhand
client.screen += r_hand
- overlays_standing[X_R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/items_righthand_1.dmi', default_layer = X_R_HAND_LAYER)
+ overlays_standing[X_R_HAND_LAYER] = r_hand.make_worn_icon(inhands = TRUE, slot_name = slot_r_hand_str, default_icon = 'icons/mob/inhands/items/items_right.dmi', default_layer = X_R_HAND_LAYER)
apply_overlay(X_R_HAND_LAYER)
/mob/living/carbon/xenomorph/update_inv_l_hand()
@@ -80,7 +80,7 @@
l_hand.screen_loc = ui_lhand
client.screen += l_hand
- overlays_standing[X_L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/items_lefthand_1.dmi', default_layer = X_L_HAND_LAYER)
+ overlays_standing[X_L_HAND_LAYER] = l_hand.make_worn_icon(inhands = TRUE, slot_name = slot_l_hand_str, default_icon = 'icons/mob/inhands/items/items_left.dmi', default_layer = X_L_HAND_LAYER)
apply_overlay(X_L_HAND_LAYER)
/mob/living/carbon/xenomorph/proc/create_shriekwave()
diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
index cb3cc6db9b618..17cca6e085a1b 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
@@ -424,3 +424,5 @@
///The resting cooldown
COOLDOWN_DECLARE(xeno_resting_cooldown)
+ ///The unresting cooldown
+ COOLDOWN_DECLARE(xeno_unresting_cooldown)
diff --git a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm
index ce7fca88486cb..99198510d0593 100644
--- a/code/modules/mob/living/carbon/xenomorph/xenomorph.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xenomorph.dm
@@ -471,9 +471,13 @@ Returns TRUE when loc_weeds_type changes. Returns FALSE when it doesn’t change
var/datum/action/ability/xeno_action/xeno_resting/resting_action = actions_by_path[/datum/action/ability/xeno_action/xeno_resting]
if(!resting_action || !resting_action.can_use_action())
return
+ if(resting)
+ if(!COOLDOWN_CHECK(src, xeno_resting_cooldown))
+ balloon_alert(src, "Cannot get up so soon after resting!")
+ return
- if(!COOLDOWN_CHECK(src, xeno_resting_cooldown))
- balloon_alert(src, "Cannot get up so soon after resting!")
+ if(!COOLDOWN_CHECK(src, xeno_unresting_cooldown))
+ balloon_alert(src, "Cannot rest so soon after getting up!")
return
return ..()
@@ -481,6 +485,8 @@ Returns TRUE when loc_weeds_type changes. Returns FALSE when it doesn’t change
. = ..()
if(resting)
COOLDOWN_START(src, xeno_resting_cooldown, XENO_RESTING_COOLDOWN)
+ else
+ COOLDOWN_START(src, xeno_unresting_cooldown, XENO_UNRESTING_COOLDOWN)
/mob/living/carbon/xenomorph/set_jump_component(duration = 0.5 SECONDS, cooldown = 2 SECONDS, cost = 0, height = 16, sound = null, flags = JUMP_SHADOW, flags_pass = PASS_LOW_STRUCTURE|PASS_FIRE)
var/gravity = get_gravity()
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index b416799643b3c..52fc820e11b44 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -61,7 +61,7 @@
if(user.grab_state > GRAB_KILL)
return
user.changeNext_move(CLICK_CD_GRABBING)
- if(!do_after(user, 2 SECONDS, NONE, victim, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(user, TYPE_PROC_REF(/datum, Adjacent), victim)) || !user.pulling)
+ if(!do_after(user, max(2 SECONDS - (user.skills.getRating(SKILL_CQC) * 0.5 SECONDS), 1 SECONDS), NONE, victim, BUSY_ICON_HOSTILE, extra_checks = CALLBACK(user, TYPE_PROC_REF(/datum, Adjacent), victim)) || !user.pulling)
return
user.advance_grab_state()
if(user.grab_state == GRAB_NECK)
diff --git a/code/modules/paperwork/beginner_tutorials.dm b/code/modules/paperwork/beginner_tutorials.dm
index 16c1ba82560c8..6a88dd674aef9 100644
--- a/code/modules/paperwork/beginner_tutorials.dm
+++ b/code/modules/paperwork/beginner_tutorials.dm
@@ -2,13 +2,13 @@
/obj/item/paper/tutorial/beginner_rifleman
name = "Rifleman Tutorial"
- info = {"As a rifleman, you are suited for virtually all theatres of combat. Your AR-12 assault rifle is accurate and effective at all ranges, and its powerful underbarrel grenade launcher poses even further danger to mid-range threats. Inside your backpack is a box of flares to refill your flare pouch, gauze and ointment for brute (slashes) and burn (acid) wounds respectively, and backup magazines for your AR 12. Your belt contains backup magazines for your AR-12, while your body armor contains additional grenades to reload your underbarrel grenade launcher with. Your left pocket contains a flare gun holster and several flares. Your right pocket contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your helmet contains two protein bars, in case you get hungry, and your boots contain a standard issue combat knife for clearing weeds or breaking things.
+ info = {"As a rifleman, you are suited for virtually all theatres of combat. Your AR-12 assault rifle is accurate and effective at all ranges, and its powerful underbarrel grenade launcher poses even further danger to mid-range threats. Inside your backpack is a box of flares to refill your flare pouch, gauze and ointment for brute (slashes) and burn (acid) wounds respectively, and backup magazines for your AR 12. Your belt contains backup magazines for your AR-12, while your body armor contains additional grenades to reload your underbarrel grenade launcher with. Your left pocket contains a flare gun holster and several flares. Your right pocket contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your helmet contains two protein bars, in case you get hungry, and your boots contain a standard issue combat knife for clearing weeds or breaking things.
Try to spend as much time as possible near other marines - being alone is very dangerous. Your versatility is an immense strength and makes you the ideal battle buddy for virtually any other marine. You can easily work with a shotgunner to clear close quarters areas, or perhaps with a machine gunner to hold a fortified position, or even take point in front of a marksman. When not in immediate danger, use your flare gun to keep your surroundings lit, as your and your fellow marines' lives may very well depend on it.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your AR-12, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil. In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines. (Note that your grenades will NOT go through marines!) The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic. Automatic modes will keep firing as long as you hold down the mouse button. The third option enables your underbarrel grenade launcher. Once enabled, you can use right click to launch a grenade out!
@@ -22,13 +22,13 @@
/obj/item/paper/tutorial/beginner_machinegunner
name = "Machinergunner Tutorial"
- info = {"As a machinegunner, you are the backbone of a marine force. While you possess heavy armor reinforced with Tyr-pattern plating (strengthening its defense even further against melee attacks), your slow move speed and the unwieldy nature of your MG-60 machine gun means you should not be spearheading any pushes. Aim mode is your best friend - combined with your red dot sight and bipod, you are very apt at sitting just behind the front line, eliminating threats and keeping the marines in front of you safe. Your backpack contains several additional box magazines, allowing you to carry almost two THOUSAND rounds on your person at any time. Your left pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your right pocket contains a flare gun holster and several flares. Your suit storage contains two plasma pistols, which are low in damage but can start fires. Your webbing contains an MRE to eat and both gauze and ointment, your helmet contains two protein bars for further eating, and your boots contain a standard issue combat knife for clearing weeds or breaking things.
+ info = {"As a machinegunner, you are the backbone of a marine force. While you possess heavy armor reinforced with Tyr-pattern plating (strengthening its defense even further against melee attacks), your slow move speed and the unwieldy nature of your MG-60 machine gun means you should not be spearheading any pushes. Aim mode is your best friend - combined with your red dot sight and bipod, you are very apt at sitting just behind the front line, eliminating threats and keeping the marines in front of you safe. Your backpack contains several additional box magazines, allowing you to carry almost two THOUSAND rounds on your person at any time. Your left pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your right pocket contains a flare gun holster and several flares. Your suit storage contains two plasma pistols, which are low in damage but can start fires. Your webbing contains an MRE to eat and both gauze and ointment, your helmet contains two protein bars for further eating, and your boots contain a standard issue combat knife for clearing weeds or breaking things.
Your full strength is hard to utilize on your own or in the very front of battle. Your ideal positions are either safely behind a barricade guarding a front or flank from assault, or behind your fellow marines, shooting over them with aim mode to protect them from enemies. Keep in mind that your heavy armor and weapon means you move rather slowly - so if you get the order to leave a position, get moving early to avoid being left behind.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your MG-60, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil. In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines. The bipod button will deploy your bipod, increasing fire rate and accuracy significantly for as long as you remain stationary.
@@ -46,13 +46,13 @@
/obj/item/paper/tutorial/beginner_marksman
name = "Marksman Tutorial"
- info = {"As a marksman, you are a master of precision and range, and should utilize both of these advantages as much as possible. Your DMR-37 is incredibly accurate at long ranges and packs a devastating punch. Due to your ability to engage at long range - and conversely, your inability to engage properly at short range - you should be staying as far from conflict as possible while still remaining in your rifle's effective range. Your backpack and both of your pouches contain spare magazines for your DMR. Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries. Your armor contains Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and an inaprovaline injector for helping other marines in critical condition. Your webbing contains the MK88 Mod 4, a fully automatic handgun for self-defense, as well as spare magazines for it. Your helmet contains protein bars to eat, and your boots contain a survival knife for clearing weeds and breaking things.
+ info = {"As a marksman, you are a master of precision and range, and should utilize both of these advantages as much as possible. Your DMR-37 is incredibly accurate at long ranges and packs a devastating punch. Due to your ability to engage at long range - and conversely, your inability to engage properly at short range - you should be staying as far from conflict as possible while still remaining in your rifle's effective range. Your backpack and both of your pouches contain spare magazines for your DMR. Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries. Your armor contains Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and an inaprovaline injector for helping other marines in critical condition. Your webbing contains the MK88 Mod 4, a fully automatic handgun for self-defense, as well as spare magazines for it. Your helmet contains protein bars to eat, and your boots contain a survival knife for clearing weeds and breaking things.
With your DMR, aim to support other marines from afar using your scope and aim mode. Your range means that many xenomorphs might not realize you're watching over an area until you're already shooting at them - use this to your advantage. Your rate of fire is relatively slow compared to automatic weapons, so make each of your shots count.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
On running out of ammo, the empty magazine will automatically eject from the DMR. To reload, simply grab a new magazine with an empty hand and click your gun with it. Alternatively, you can perform a tactical reload by click-dragging the magazine from its storage directly onto the DMR, which can be done without an empty hand and with a different magazine still in the gun.
@@ -66,13 +66,13 @@
/obj/item/paper/tutorial/beginner_shotgunner
name = "Shotgunner Tutorial"
- info = {"As a shotgunner, you are the spearhead of the marine force. Your semiautomatic SH-39 fires slugs that will devastate any target at short to medium range, dealing heavy damage as well as leaving them stunned and staggered. Your role is to be at the front of any marine push, side by side with your fellow marines as you charge into danger. Your shotgun shell rig on your belt, as well as your backpack, hold many additional slugs to reload your shotgun with. Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries, as well as inaprovaline. Your left pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your right pocket contains a flare gun holster and several flares. Your webbing contains a plasma pistol, a low damage sidearm that starts fires wherever it hits. Your suit storage contains boxes of additional flares. Your helmet contains protein bars to eat, and your boot contains a combat knife for clearing weeds and breaking things.
+ info = {"As a shotgunner, you are the spearhead of the marine force. Your semiautomatic SH-39 fires slugs that will devastate any target at short to medium range, dealing heavy damage as well as leaving them stunned and staggered. Your role is to be at the front of any marine push, side by side with your fellow marines as you charge into danger. Your shotgun shell rig on your belt, as well as your backpack, hold many additional slugs to reload your shotgun with. Your backpack also contains an MRE to eat, and both gauze and ointment for treating injuries, as well as inaprovaline. Your left pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your right pocket contains a flare gun holster and several flares. Your webbing contains a plasma pistol, a low damage sidearm that starts fires wherever it hits. Your suit storage contains boxes of additional flares. Your helmet contains protein bars to eat, and your boot contains a combat knife for clearing weeds and breaking things.
You should be close to the enemy constantly to take full advantage of your shotgun. This does not mean you should run off alone, as this is a good way to get yourself killed; rather, be in front of other marines, clearing away enemies to allow them to safely advance and cover you.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your SH-39, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil.
@@ -94,13 +94,13 @@
/obj/item/paper/tutorial/beginner_shocktrooper
name = "Shocktrooper Tutorial"
- info = {"As a shock trooper, you are a versatile yet powerful frontliner, and aim to change up tactics often to gain the advantage. You use the multimodal laser rifle, an experimental battery-powered weapon with an underbarrel flamethrower. Your belt contains spare energy cells for your laser rifle. Your right pocket and body armor contain a powerpack each- effectively bulkier versions of energy cells. Your body armor also contains a box of flares. Your left pocket contains a flare gun holster and several flares. Your backpack contains a large amount of miniature fuel tanks for use with your underbarrel flamethrower, as well as an inaprovaline autoinjector. Your webbing contains Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and gauze and ointment, which also heal brute and burn damage respectively. Your helmet contains protein bars and your boots contain an MRE, in case you get hungry.
+ info = {"As a shock trooper, you are a versatile yet powerful frontliner, and aim to change up tactics often to gain the advantage. You use the multimodal laser rifle, an experimental battery-powered weapon with an underbarrel flamethrower. Your belt contains spare energy cells for your laser rifle. Your right pocket and body armor contain a powerpack each- effectively bulkier versions of energy cells. Your body armor also contains a box of flares. Your left pocket contains a flare gun holster and several flares. Your backpack contains a large amount of miniature fuel tanks for use with your underbarrel flamethrower, as well as an inaprovaline autoinjector. Your webbing contains Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and gauze and ointment, which also heal brute and burn damage respectively. Your helmet contains protein bars and your boots contain an MRE, in case you get hungry.
Switching between the different modes of your laser rifle is key to mastery on the battlefield. Like other frontliners, you aim to lead the push into enemy territory, clearing the path forward and facing xenomorphs head-on.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
On running out of ammo, the empty battery will automatically eject from the rifle. To reload, simply grab a new battery with an empty hand and click your gun with it. Alternatively, you can perform a tactical reload by click-dragging the battery from its storage directly onto the rifle, which can be done without an empty hand and with a different battery still in the gun. The powerpacks are a bit different - they have to be click-dragged while in one of your pockets to attach to the gun, and once attached remain in your pocket. However, they have four times the energy of a normal magazine. To refuel your underbarrel flamethrower, right click the gun with an empty hand to remove the old tank, then right click the gun again with a fresh tank.
@@ -114,13 +114,13 @@
/obj/item/paper/tutorial/beginner_hazmat
name = "Hazmat Tutorial"
- info = {"As a HAZMAT, you excel in situations too dangerous for other marines. Your Mimir type armor grants you complete immunity to toxic gas, from acid to neurotoxin. It also provides an increased resistance against acid in general, for dealing with ranged xenomorphs. Your AR-11 is somewhat unwieldy and inaccurate, but packs both potent bursts and an impressive 70-round magazine. Your backpack, left pouch, and suit storage are all filled with spare magazines for your AR-11. Your right pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for lighting areas, gauze and ointment for treating wounds, and a miniature fire extinguisher. Your helmet contains protein bars and your boots contain an MRE, for if you get hungry.
+ info = {"As a HAZMAT, you excel in situations too dangerous for other marines. Your Mimir type armor grants you complete immunity to toxic gas, from acid to neurotoxin. It also provides an increased resistance against acid in general, for dealing with ranged xenomorphs. Your AR-11 is somewhat unwieldy and inaccurate, but packs both potent bursts and an impressive 70-round magazine. Your backpack, left pouch, and suit storage are all filled with spare magazines for your AR-11. Your right pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for lighting areas, gauze and ointment for treating wounds, and a miniature fire extinguisher. Your helmet contains protein bars and your boots contain an MRE, for if you get hungry.
Unlike other marines, you have no reason to fear toxic gas - and thanks to your tactical sensor, you pose quite a threat to xenomorphs while in it. Hide in smoke and use your sensor to fire at xenomorphs that can't see you back. In the absence of smoke, your AR-11 is still quite powerful, and can be used in many situations, though its inaccuracy makes it somewhat less potent at longer ranges.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your AR-11, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil. In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines. The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic. Automatic modes will keep firing as long as you hold down the mouse button. The tactical sensor option toggles your tactical sensor - you should keep this on always.
@@ -136,13 +136,13 @@
/obj/item/paper/tutorial/beginner_cqc
name = "CQC Tutorial"
- info = {"As a CQC marine, you are incredibly mobile, and should be using and abusing your speed to dart in and out of danger. You are effective both spearheading the assault and pushing into flanks. Your AR-18 carbine isn't the most dangerous rifle, nor does it have a particularly high magazine size, but it's incredibly lightweight compared to almost any other weapon, and its relative accuracy and stability even while moving and high fire rate allow it to pose a surprise threat to almost any xenomorphs. Your belt, body armor, and backpack all contain spare magazines for your AR-18. Your backpack also contains an MRE (in case you get hungry) as well as gauze and ointment to treat injuries with. Your left pocket contains a flare gun and several flares. Your right pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains gauze and ointment for healing, an MRE for eating, and two boxes of flares. Your helmet contains protein bars for eating, and your boots contain a combat knife for clearing weeds and breaking things.
+ info = {"As a CQC marine, you are incredibly mobile, and should be using and abusing your speed to dart in and out of danger. You are effective both spearheading the assault and pushing into flanks. Your AR-18 carbine isn't the most dangerous rifle, nor does it have a particularly high magazine size, but it's incredibly lightweight compared to almost any other weapon, and its relative accuracy and stability even while moving and high fire rate allow it to pose a surprise threat to almost any xenomorphs. Your belt, body armor, and backpack all contain spare magazines for your AR-18. Your backpack also contains an MRE (in case you get hungry) as well as gauze and ointment to treat injuries with. Your left pocket contains a flare gun and several flares. Your right pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains gauze and ointment for healing, an MRE for eating, and two boxes of flares. Your helmet contains protein bars for eating, and your boots contain a combat knife for clearing weeds and breaking things.
Your speed is your greatest strength. You should be using it to rush into combat and chase after already injured enemies, only to rapidly retreat before things turn south. You're ideal at scouting locations, quickly reinforcing threatened positions, and overall being everywhere at once.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your AR-18, use Z to wield your weapon with both hands, increasing accuracy and stability and reducing recoil. In the top left of your screen are several weapon-specific buttons. The "Take Aim" button toggles aim mode, a feature that slows your rate of fire in exchange for allowing you to shoot through allied marines. The second option changes the firing mode, between Single Automatic, Burst, and Burst Automatic. Automatic modes will keep firing as long as you hold down the mouse button. The tactical sensor option toggles your tactical sensor - you should keep this on always.
@@ -156,13 +156,13 @@
/obj/item/paper/tutorial/beginner_chad
name = "Grenadier Tutorial"
- info = {"As a grenadier, you are the master of area denial. Your six-chamber GL-70 grenade launcher boasts unparalleled roomclearing potential, and impressive lethality - just take care to avoid harming your fellow marines. Your belt, backpack, both pockets, and body armor are all filled with HEDP grenades to reload your grenade launcher with. Your webbing contains Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and gauze and ointment, which also heal brute and burn damage respectively. Your backpack also contains an inaprovaline injector, which can be used to help other critically injured marines. Your helmet contains two protein bars, in case you get hungry, and your boots contain a derringer, a two-shot sidearm for when the first six grenades didn't kill the bug.
+ info = {"As a grenadier, you are the master of area denial. Your six-chamber GL-70 grenade launcher boasts unparalleled roomclearing potential, and impressive lethality - just take care to avoid harming your fellow marines. Your belt, backpack, both pockets, and body armor are all filled with HEDP grenades to reload your grenade launcher with. Your webbing contains Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and gauze and ointment, which also heal brute and burn damage respectively. Your backpack also contains an inaprovaline injector, which can be used to help other critically injured marines. Your helmet contains two protein bars, in case you get hungry, and your boots contain a derringer, a two-shot sidearm for when the first six grenades didn't kill the bug.
Your power is as much of a liability as it is a utility if you aren't careful. Before you get happy on the trigger, make SURE there aren't going to be marines in the blast radius, unless you want to end up filled with bullet holes (which your Hod accident prevention plating will partially block!) With that warning out of the way, you can kill even the beefiest of xenomorphs with good aim.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
While holding your grenade launcher, press Z to wield it. You MUST wield your grenade launcher to use it!
@@ -188,7 +188,7 @@
All metal barricades can be upgraded, the basic upgrade is of course barbed wire. This damages xenos when they attack the barricade and prevents them (and marines!) from climbing over the barricade.
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
/obj/item/paper/tutorial/flamer
name = "Flamer Tutorial"
@@ -202,7 +202,7 @@
Your claymore mines are useful for denying an area from being easily flanked and can cause serious disruption (or even kill!) backlining xenomorphs from causing you a bad day.
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
/obj/item/paper/tutorial/plasmacutter
name = "PlasmaCutter Tutorial"
@@ -216,7 +216,7 @@
Your plasma cutter can be used as a melee weapon in emergency situations, while not the best by any means it can work in a pinch and if you manage to smack a xeno you'll get rewarded with draining them of a small amount of plasma and a bit of charge for your plasma cutter. Use this to destroy mazes and punish xenos for trying to attack you by refilling your battery. A recommended combo when frontlining us combining it with a defensive shield!
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage."}
/obj/item/paper/tutorial/lifesaver
name = "Lifesaver Tutorial"
@@ -242,7 +242,7 @@
Accidentally overdose a marine? They're full of deadly neurotoxin? Don't panic - use hypervene. While uncomfortable for the marine, this medication (located in your medical belt) will rapidly purge their system.
- You can use meralyne and dermaline at the same time as bicardine and kelotane, for an accelerated healing rate."}
+ You can use meralyne and dermaline at the same time as Bicaridine and kelotane, for an accelerated healing rate."}
/obj/item/paper/tutorial/hypobelt
name = "Hypobelt Tutorial"
@@ -262,7 +262,7 @@
Accidentally overdose a marine? They're full of deadly neurotoxin? Don't panic - use hypervene. While uncomfortable for the marine, this medication (located in your medical belt) will rapidly purge their system.
- You can use meralyne and dermaline at the same time as bicardine and kelotane, for an accelerated healing rate.
+ You can use meralyne and dermaline at the same time as Bicaridine and kelotane, for an accelerated healing rate.
As your shotgun is pump-action, you'll need to pump it after every shot by pressing Unique Action (default space.)
@@ -270,13 +270,13 @@
/obj/item/paper/tutorial/smartmachinegunner
name = "Smartmachinegunner Tutorial"
- info = {"As the smartmachinegunner, you are the very backbone of your squad, and should be behind another marine or three at all times. Your SG-29 is capable of firing directly through your teammates without risk of harm, so staying safe and behind your allies is essential to gaining full value out of it. Your backpack and body armor contain both fire extinguishers and spare ammo, with your backpack also containing a plasma pistol to start fires with. Your left pouch contains a flare gun holster and several flares. Your right pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for creating lights and gauze and ointment for treating injuries. Your helmet and boots contain food, in case you get hungry.
+ info = {"As the smartmachinegunner, you are the very backbone of your squad, and should be behind another marine or three at all times. Your SG-29 is capable of firing directly through your teammates without risk of harm, so staying safe and behind your allies is essential to gaining full value out of it. Your backpack and body armor contain both fire extinguishers and spare ammo, with your backpack also containing a plasma pistol to start fires with. Your left pouch contains a flare gun holster and several flares. Your right pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for creating lights and gauze and ointment for treating injuries. Your helmet and boots contain food, in case you get hungry.
You should NEVER be at the front of a group of marines. Aim to provide covering fire for those who are in front, and let them protect you in turn by, well, being in front of you. Remember that your SG-29 fires through marines, so you don't need to worry about friendly fire.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
Your flare gun can be rapidly reloaded by just right clicking the flare pouch with it in hand. Your flare pouch can be refilled by left clicking on it while holding a flare box. Flare any dark area you can see to reduce the risk of a xenomorph ambushing you from the dark. On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
@@ -302,12 +302,12 @@
/obj/item/paper/tutorial/smartminigunner
name = "Smartminigunner Tutorial"
- info = {"As the smartminigunner, you are the very embodiment of BRRT. With your huge SG-85 smart minigun, you can fire ten rounds per second for one hundred straight seconds, providing powerful covering fire for other marines. No enemy wants to get stuck in your line of fire. Instead of a backpack you carry a back mounted powerpack that feeds and powers your SG-85. In your body armor are two bins to refill your powerpack with. Your left pouch contains a flare gun holster and several flares. Your right pouch contains a first aid kit, complete with Bicardine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for creating lights and gauze and ointment for treating injuries. Your helmet and boots contain food, in case you get hungry.
+ info = {"As the smartminigunner, you are the very embodiment of BRRT. With your huge SG-85 smart minigun, you can fire ten rounds per second for one hundred straight seconds, providing powerful covering fire for other marines. No enemy wants to get stuck in your line of fire. Instead of a backpack you carry a back mounted powerpack that feeds and powers your SG-85. In your body armor are two bins to refill your powerpack with. Your left pouch contains a flare gun holster and several flares. Your right pouch contains a first aid kit, complete with Bicaridine (which heals brute damage), Kelotane (which heals burn damage), Tramadol (which is a painkiller), Tricordrazine (which heals all damage, but slowly), and Dylovene (which heals toxin, or poison damage), as well as splints and inaprovaline. Your webbing contains flares for creating lights and gauze and ointment for treating injuries. Your helmet and boots contain food, in case you get hungry.
Your minigun boasts both high levels of armor piercing and the ability to shoot through allies - use both to your advantage. Note that the heavy nature of your minigun and your brief windup before you can fire means you're best positioned defensively, firing at the toughest targets within range.
TIPS
- BKTT is an acronym that is used to describe the combination of Bicardine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
+ BKTT is an acronym that is used to describe the combination of Bicaridine, Kelotane, Tricordizine, and Tramadol used as an all-rounder combat medicine mix for any situation that heals all different types of damage. Make sure not to take more than two of each pill at a time - medicine takes a while to process through your system, and too many at once risks a dangerous overdose. Your gauze and ointment are body-part specific, unlike medication, but once you start applying one, you will keep applying it to all body parts that require treatment as long as you hold still. Your splints are used to alleviate the effects of bone fractures, by applying them to a fractured limb. Your inaprovaline autoinjector is not to be applied to yourself - rather, it should be applied to an alive marine that is so heavily injured they are unconscious on the ground (referred to as "critical condition") to rescue them from that state. You can remove pills from their packets directly by right clicking on the packet, even while it's in storage.
Your flare gun can be rapidly reloaded by just right clicking the flare pouch with it in hand. Your flare pouch can be refilled by left clicking on it while holding a flare box. Flare any dark area you can see to reduce the risk of a xenomorph ambushing you from the dark. On a similar note, your suit's light can be toggled in the top left - you should almost always keep this on to help your visibility.
diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm
index a0695740a434f..42daa598476db 100644
--- a/code/modules/projectiles/ammo_datums.dm
+++ b/code/modules/projectiles/ammo_datums.dm
@@ -630,6 +630,28 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh
damage_falloff = 3
shrapnel_chance = 45
+/datum/ammo/bullet/smg/squash
+ name = "squash-head submachinegun bullet"
+ hud_state = "pistol_squash"
+ flags_ammo_behavior = AMMO_BALLISTIC|AMMO_SUNDERING
+ damage = 15
+ penetration = 15
+ armor_type = BOMB
+ sundering = 1
+ damage_falloff = 2
+ shrapnel_chance = 0
+ ///shatter effection duration when hitting mobs
+ var/shatter_duration = 3 SECONDS
+
+/datum/ammo/bullet/smg/squash/on_hit_mob(mob/M, obj/projectile/proj)
+ if(!isliving(M))
+ return
+
+ var/mob/living/living_victim = M
+ living_victim.apply_status_effect(STATUS_EFFECT_SHATTER, shatter_duration)
+
+
+
/datum/ammo/bullet/smg/incendiary
name = "incendiary submachinegun bullet"
hud_state = "smg_fire"
@@ -2693,6 +2715,11 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh
/datum/ammo/mortar/rocket/mlrs/drop_nade(turf/T)
explosion(T, 0, 0, 4, 0, 2)
+/datum/ammo/mortar/rocket/mlrs/incendiary/drop_nade(turf/T)
+ explosion(T, 0, 0, 2, 0, 2)
+ flame_radius(3, T)
+ playsound(T, 'sound/weapons/guns/fire/flamethrower2.ogg', 35, 1, 4)
+
/datum/ammo/mortar/rocket/smoke/mlrs
shell_speed = 2.5
smoketype = /datum/effect_system/smoke_spread/mustard
@@ -2704,6 +2731,9 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh
smoke.set_up(5, T, 6)
smoke.start()
+/datum/ammo/mortar/rocket/smoke/mlrs
+ smoketype = /datum/effect_system/smoke_spread/tactical
+
/*
//================================================
Energy Ammo
@@ -2744,6 +2774,7 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh
max_range = 15
accurate_range = 10
bullet_color = COLOR_VIVID_YELLOW
+
/datum/ammo/energy/taser/on_hit_mob(mob/M,obj/projectile/P)
staggerstun(M, P, stun = 20 SECONDS)
@@ -2777,6 +2808,16 @@ GLOBAL_LIST_INIT(no_sticky_resin, typecacheof(list(/obj/item/clothing/mask/faceh
var/mob/living/carbon/xenomorph/X = M
X.use_plasma(0.3 * X.xeno_caste.plasma_max * X.xeno_caste.plasma_regen_limit) //Drains 30% of max plasma on hit
+/datum/ammo/energy/lasburster
+ name = "lasburster bolt"
+ flags_ammo_behavior = AMMO_ENERGY|AMMO_HITSCAN
+ hud_state = "laser_overcharge"
+ armor_type = LASER
+ damage = 40
+ penetration = 5
+ max_range = 7
+ hitscan_effect_icon = "beam_heavy"
+
/datum/ammo/energy/lasgun
name = "laser bolt"
icon_state = "laser"
diff --git a/code/modules/projectiles/gun_system.dm b/code/modules/projectiles/gun_system.dm
index 8c9c7c1477646..478b504f450c7 100644
--- a/code/modules/projectiles/gun_system.dm
+++ b/code/modules/projectiles/gun_system.dm
@@ -17,14 +17,13 @@
/obj/item/weapon/gun
name = "Guns"
desc = "Its a gun. It's pretty terrible, though."
- icon = 'icons/obj/items/gun.dmi'
icon_state = ""
item_state = "gun"
item_state_worn = TRUE
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_1.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_1.dmi',
- )
+ slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_1.dmi',
+ )
max_integrity = 250
w_class = WEIGHT_CLASS_NORMAL
throwforce = 5
@@ -509,7 +508,6 @@
COMSIG_MOB_SKILLS_CHANGED,
COMSIG_MOB_SHOCK_STAGE_CHANGED,
COMSIG_HUMAN_MARKSMAN_AURA_CHANGED), PROC_REF(setup_bullet_accuracy))
- SEND_SIGNAL(gun_user, COMSIG_GUN_USER_SET, src)
if(flags_gun_features & GUN_AMMO_COUNTER)
gun_user.hud_used.add_ammo_hud(src, get_ammo_list(), get_display_ammo_count())
if(heat_per_fire)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index c4efa05757b42..f322f479e4129 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -3,6 +3,11 @@
//ENERGY GUNS/ETC
/obj/item/weapon/gun/energy
+ icon = 'icons/obj/items/guns/energy.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi',
+ )
attachable_allowed = list()
rounds_per_shot = 10 //100 shots.
flags_gun_features = GUN_AMMO_COUNTER|GUN_AMMO_COUNT_BY_SHOTS_REMAINING|GUN_NO_PITCH_SHIFT_NEAR_EMPTY
@@ -244,7 +249,7 @@
/obj/item/weapon/gun/energy/lasgun/lasrifle
name = "\improper LR-73 lasrifle MK2"
desc = "A multifunctional laser based rifle with an integrated mode selector. Ideal for any situation. Uses power cells instead of ballistic magazines."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/energy64.dmi'
icon_state = "tx73"
item_state = "tx73"
max_shots = 50 //codex stuff
@@ -1155,14 +1160,13 @@
/obj/item/weapon/gun/energy/lasgun/lasrifle/volkite/caliver
name = "\improper VX-33 Caliver"
desc = "Volkite weapons are the pride of Martian weapons manufacturing, their construction being a tightly guarded secret. Infamous for its ability to deflagrate organic targets with its tremendous thermal energy, explosively burning flesh in a fiery blast that can be deadly to anyone unfortunate enough to be nearby. The caliver is the primary rifle of the volkite family, and effective at most ranges and situations. Drag click the powerpack to the gun to use that instead of magazines."
- icon = 'icons/Marine/gun64.dmi'
icon_state = "caliver"
item_state = "caliver"
inhand_x_dimension = 64
inhand_y_dimension = 32
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_64.dmi',
)
fire_sound = 'sound/weapons/guns/fire/volkite_3.ogg'
max_shots = 40
@@ -1212,8 +1216,8 @@
inhand_x_dimension = 64
inhand_y_dimension = 32
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_64.dmi',
)
ammo_level_icon = null
gun_skill_category = SKILL_HEAVY_WEAPONS
diff --git a/code/modules/projectiles/guns/flamer.dm b/code/modules/projectiles/guns/flamer.dm
index 12ea0cbcb054b..0ba7999819730 100644
--- a/code/modules/projectiles/guns/flamer.dm
+++ b/code/modules/projectiles/guns/flamer.dm
@@ -8,6 +8,10 @@
flags_equip_slot = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
force = 15
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
fire_sound = "gun_flamethrower"
dry_fire_sound = 'sound/weapons/guns/fire/flamethrower_empty.ogg'
unload_sound = 'sound/weapons/guns/interact/flamethrower_unload.ogg'
@@ -286,21 +290,22 @@
/obj/item/weapon/gun/flamer/big_flamer
name = "\improper FL-240 incinerator unit"
desc = "The FL-240 has proven to be one of the most effective weapons at clearing out soft-targets. This is a weapon to be feared and respected as it is quite deadly."
+ icon = 'icons/obj/items/guns/special.dmi'
icon_state = "m240"
item_state = "m240"
/obj/item/weapon/gun/flamer/som
name = "\improper V-62 incinerator"
desc = "The V-62 is a deadly weapon employed in close quarter combat, favoured as much for the terror it inspires as the actual damage it inflicts. It has good range for a flamer, but lacks the integrated extinguisher of its TGMC equivalent."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "v62"
item_state = "v62"
flags_gun_features = GUN_AMMO_COUNTER|GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_SHOWS_LOADED
inhand_x_dimension = 64
inhand_y_dimension = 32
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi',
)
lit_overlay_icon_state = "v62_lit"
lit_overlay_offset_x = 0
diff --git a/code/modules/projectiles/guns/grenade_launchers.dm b/code/modules/projectiles/guns/grenade_launchers.dm
index 2b4c0c1c65763..32d25cf947ec3 100644
--- a/code/modules/projectiles/guns/grenade_launchers.dm
+++ b/code/modules/projectiles/guns/grenade_launchers.dm
@@ -15,6 +15,11 @@ The Grenade Launchers
force = 5
caliber = CALIBER_40MM //codex
load_method = SINGLE_CASING //codex
+ icon = 'icons/obj/items/guns/special.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/grenadelauncher.ogg'
fire_rattle = 'sound/weapons/guns/fire/grenadelauncher.ogg'
cocked_sound = 'sound/weapons/guns/interact/m92_cocked.ogg'
@@ -50,11 +55,12 @@ The Grenade Launchers
/obj/item/explosive/grenade/chem_grenade,
/obj/item/explosive/grenade/chem_grenade/large,
/obj/item/explosive/grenade/chem_grenade/metalfoam,
- /obj/item/explosive/grenade/chem_grenade/razorburn_smol,
+ /obj/item/explosive/grenade/chem_grenade/razorburn_small,
/obj/item/explosive/grenade/chem_grenade/razorburn_large,
/obj/item/explosive/grenade/chem_grenade/incendiary,
/obj/item/explosive/grenade/chem_grenade/teargas,
/obj/item/explosive/grenade/flashbang/stun,
+ /obj/item/explosive/grenade/bullet/laser,
)
reciever_flags = NONE
@@ -109,7 +115,7 @@ The Grenade Launchers
/obj/item/weapon/gun/grenade_launcher/multinade_launcher
name = "\improper GL-70 grenade launcher"
desc = "The GL-70 is the standard grenade launcher used by the TerraGov Marine Corps for area denial and big explosions."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "t70"
item_state = "t70"
fire_animation = "t70_fire"
diff --git a/code/modules/projectiles/guns/mounted.dm b/code/modules/projectiles/guns/mounted.dm
index 15ebaddd77422..79f9376b41d80 100644
--- a/code/modules/projectiles/guns/mounted.dm
+++ b/code/modules/projectiles/guns/mounted.dm
@@ -25,6 +25,10 @@
flags_equip_slot = ITEM_SLOT_BACK
icon = 'icons/Marine/marine-hmg.dmi'
icon_state = "turret"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/hmg2.ogg'
reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg'
@@ -158,6 +162,10 @@
flags_equip_slot = ITEM_SLOT_BACK
icon = 'icons/Marine/marine-ac.dmi'
icon_state = "autocannon"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi',
+ )
fire_sound = "ac_fire"
reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg'
@@ -355,6 +363,10 @@
flags_equip_slot = ITEM_SLOT_BACK
icon = 'icons/Marine/marine-hmg.dmi'
icon_state = "mg08"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/mg08.ogg'
reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg'
@@ -402,6 +414,10 @@
icon = 'icons/Marine/marine-mmg.dmi'
icon_state = "t27"
item_state = "t27"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
caliber = CALIBER_10x27_CASELESS // codex
max_shells = 150 //codex
force = 40
@@ -466,8 +482,8 @@
icon_state = "ptrs"
item_state = "ptrs"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -672,6 +688,10 @@
desc = "The KRD-61ES machinegun is the export variant of the ML-91 HMG. It's too heavy to be wielded or operated without the tripod. No extra work required, just deploy it with Ctrl-Click. Can be repaired with a blowtorch once deployed."
icon = 'icons/Marine/marine-mmg.dmi'
icon_state = "kord"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/hmg2.ogg'
reload_sound = 'sound/weapons/guns/interact/minigun_cocked.ogg'
diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm
index 82c6fe095feb7..bcca46ed53d3e 100644
--- a/code/modules/projectiles/guns/pistols.dm
+++ b/code/modules/projectiles/guns/pistols.dm
@@ -2,7 +2,12 @@
//--------------------------------------------------
/obj/item/weapon/gun/pistol
+ icon = 'icons/obj/items/guns/pistols.dmi'
icon_state = "" //Defaults to revolver pistol when there's no sprite.
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/pistols_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/pistols_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/pistol.ogg'
unload_sound = 'sound/weapons/guns/interact/pistol_unload.ogg'
reload_sound = 'sound/weapons/guns/interact/pistol_reload.ogg'
@@ -74,8 +79,13 @@
desc = "An experimental weapon designed to set the terrain and targets on fire. It hums with power as magnetic fields coil round each other."
icon_state = "tx7"
item_state = "tx7"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi',
+ )
caliber = CALIBER_PLASMA
max_shots = 10
+ icon = 'icons/obj/items/guns/energy.dmi'
reload_sound = 'sound/weapons/guns/interact/tp14_reload.ogg'
fire_sound = 'sound/weapons/guns/fire/laser3.ogg'
default_ammo_type = /obj/item/ammo_magazine/pistol/plasma_pistol
@@ -656,7 +666,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe
desc = "The PL-5 is a true and tested ICCAF handgun, used for a very long time with minimal changes to the core design, best used at close quarters with its higher than usual magazine size for its caliber. It is chambered in .45 ACP."
icon_state = "pl5"
item_state = "pl5"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/pistols64.dmi'
caliber = CALIBER_45ACP //codex
max_shells = 18 //codex
fire_sound = 'sound/weapons/guns/fire/colt.ogg'
@@ -745,7 +755,7 @@ It is a modified Beretta 93R, and can fire three round burst or single fire. Whe
/obj/item/weapon/gun/pistol/smart_pistol
name = "\improper SP-13 smart pistol"
desc = "The SP-13 is a IFF-capable sidearm used by the TerraGov Marine Corps. A cutting-edge miniaturization technology allows mounting of a KTLD IFF system on the pistol, albeit at high manufactoring cost and the usual specialized training required to use such a pistol. Unique design feature high-capacity mag on top of the barrel, with integrated sight."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/pistols64.dmi'
icon_state = "sp13"
item_state = "sp13"
caliber = CALIBER_9X19 //codex
diff --git a/code/modules/projectiles/guns/plasma.dm b/code/modules/projectiles/guns/plasma.dm
index b807c4be14c82..adaae967bc6b3 100644
--- a/code/modules/projectiles/guns/plasma.dm
+++ b/code/modules/projectiles/guns/plasma.dm
@@ -1,6 +1,10 @@
/obj/item/weapon/gun/energy/lasgun/lasrifle/plasma
name = "generic plasma weapon"
- icon = 'icons/Marine/marine-plasmaguns.dmi'
+ icon = 'icons/obj/items/guns/plasma64.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/plasma_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/plasma_right_1.dmi',
+ )
default_ammo_type = /obj/item/cell/lasgun/plasma_powerpack
allowed_ammo_types = list(/obj/item/cell/lasgun/plasma_powerpack)
heat_per_fire = 5
diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm
index c1ea688f0f295..9a5d50112bbc1 100644
--- a/code/modules/projectiles/guns/revolvers.dm
+++ b/code/modules/projectiles/guns/revolvers.dm
@@ -4,10 +4,15 @@
/obj/item/weapon/gun/revolver
flags_equip_slot = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/pistols_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/pistols_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/44mag.ogg'
reload_sound = 'sound/weapons/guns/interact/revolver_spun.ogg'
cocked_sound = 'sound/weapons/guns/interact/revolver_cocked.ogg'
unload_sound = 'sound/weapons/guns/interact/revolver_unload.ogg'
+ icon = 'icons/obj/items/guns/pistols.dmi'
muzzleflash_iconstate = "muzzle_flash_medium"
hand_reload_sound = 'sound/weapons/guns/interact/revolver_load.ogg'
type_of_casings = "bullet"
@@ -275,7 +280,7 @@
/obj/item/weapon/gun/revolver/standard_magnum
name = "\improper R-76 KC magnum"
desc = "The R-76 magnum is an absolute beast of a handgun used by the TGMC, rumors say it was created as a money laundering scheme by some general due to the sheer inpracticality of this firearm. Hits hard, recommended to be used with its stock attachment. Chambered in 12.7mm."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/pistols64.dmi'
icon_state = "t76"
item_state = "t76"
fire_animation = "t76_fire"
diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm
index ebcdcd220777f..2b5845ed165db 100644
--- a/code/modules/projectiles/guns/rifles.dm
+++ b/code/modules/projectiles/guns/rifles.dm
@@ -1,6 +1,7 @@
//-------------------------------------------------------
/obj/item/weapon/gun/rifle
+ icon = 'icons/obj/items/guns/rifles.dmi'
reload_sound = 'sound/weapons/guns/interact/rifle_reload.ogg'
cocked_sound = 'sound/weapons/guns/interact/cocked.ogg'
flags_equip_slot = ITEM_SLOT_BACK
@@ -194,12 +195,12 @@
/obj/item/weapon/gun/rifle/standard_dmr
name = "\improper DMR-37 SCA designated marksman rifle"
desc = "The San Cristo Arms DMR-37 is the TerraGov Marine Corps designated marksman rifle. It is rather well-known for it's very consistent target placement at longer than usual range, it however lacks a burst fire mode or an automatic mode. It is mostly used by people who prefer to do more careful shooting than most. Uses 10x27mm caseless caliber."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "t37"
item_state = "t37"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -276,10 +277,10 @@
desc = "The San Cristo Arms BR-64 is the TerraGov Marine Corps main battle rifle. It is known for its consistent ability to perform well at most ranges, and medium range stopping power with bursts. It is mostly used by people who prefer a bigger round than the average. Uses 10x26.5smm caseless caliber."
icon_state = "t64"
item_state = "t64"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -350,7 +351,7 @@
/obj/item/weapon/gun/rifle/m412
name = "\improper PR-412 pulse rifle"
desc = "The PR-412 rifle is a Pulse Industries rifle, billed as a pulse rifle due to its use of electronic firing for faster velocity. A rather common sight in most systems. Uses 10x24mm caseless ammunition."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "m412"
item_state = "m412"
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -466,9 +467,13 @@
/obj/item/weapon/gun/rifle/m41a
name = "\improper PR-11 pulse rifle"
desc = "A strange failed electronically fired rifle, a rather unknown weapon of its time. It caused a surge in the use of electronic firing in the modern era though. Uses 10x24mm caseless ammunition. Has a irremoveable grenade launcher."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "m41a"
item_state = "m41a"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
fire_sound = "gun_pulse"
dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg'
unload_sound = 'sound/weapons/guns/interact/m41a_unload.ogg'
@@ -527,7 +532,7 @@
/obj/item/weapon/gun/rifle/mpi_km
name = "\improper MPi-KM assault rifle"
desc = "A cheap and robust rifle, sometimes better known as an 'AK'. Chambers 7.62x39mm. Despite lacking attachment points beyond its underbarrel, remains a popular product on the black market with its cheap cost and higher than usual caliber rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "ak47"
item_state = "ak47"
caliber = CALIBER_762X39 //codex
@@ -642,9 +647,13 @@
/obj/item/weapon/gun/rifle/lmg_d
name = "\improper lMG-D light machinegun"
desc = "A cheap and robust machinegun, sometimes better known as an 'RPD'. Chambers 7.62x39mm. Despite lacking attachment points beyond its underbarrel, remains a popular product on the black market with its cheap cost, high capacity and higher than usual caliber rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "rpd"
item_state = "rpd"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
fire_animation = "rpd_fire"
caliber = CALIBER_762X39 //codex
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -704,9 +713,13 @@
/obj/item/weapon/gun/rifle/dpm
name = "\improper Degtyaryov 'RP' machine gun"
desc = "A cheap and robust machine gun seen commonly in the fringes of the bubble. Fires high caliber rounds to accommodate for its sluggish rate of fire, it is generally found being called 'The Record Player' due to the resemblance. Fires 7.62x39mm AP rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "dp27"
item_state = "dp27"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
max_shells = 47 //codex
caliber = CALIBER_762X39 //codex
fire_sound = "svd_fire"
@@ -746,7 +759,7 @@
/obj/item/weapon/gun/rifle/m16
name = "\improper FN M16A4 assault rifle"
desc = "A light, versatile assault rifle with a 30 round magazine, chambered to fire the 5.56x45mm NATO cartridge. The 4th generation in the M16 platform, this FN variant has added automatic fire selection and retains relevance among mercenaries and militias thanks to its high customizability. It is incredibly good at rapid burst fire, but must be paced correctly."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "m16a4"
item_state = "m16a4"
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -817,7 +830,7 @@
/obj/item/weapon/gun/rifle/famas
name = "\improper FAMAS assault rifle"
desc = "A light, versatile fast firing assault rifle with a 24 round magazine and short range scope, chambered to fire the 5.56x45mm NATO cartridge within a short amount of time."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "famas"
item_state = "famas"
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -878,8 +891,8 @@
icon_state = "t42"
item_state = "t42"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -954,13 +967,13 @@
/obj/item/weapon/gun/rifle/standard_gpmg
name = "\improper MG-60 Raummetall general purpose machine gun"
desc = "The Raummetall MG-60 general purpose machinegun is the TGMC's current standard GPMG. Though usually seen mounted on vehicles, it is sometimes used by infantry to hold chokepoints or suppress enemies, or in rare cases for marching fire. It uses 10x26mm boxes."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "t60"
item_state = "t60"
fire_animation = "t60_fire"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -1027,9 +1040,13 @@
/obj/item/weapon/gun/rifle/m412l1_hpr
name = "\improper PR-412L1 heavy pulse rifle"
desc = "A large weapon capable of laying down supressing fire, based on the PR-412 pulse rifle platform. Effective in burst fire. Uses 10x24mm caseless ammunition."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "m412l1"
item_state = "m412l1"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
caliber = CALIBER_10X24_CASELESS //codex
max_shells = 200 //codex
aim_slowdown = 0.8
@@ -1094,7 +1111,7 @@
/obj/item/weapon/gun/rifle/type71
name = "\improper Type 71 pulse rifle"
desc = "The primary rifle of the USL pirates, the Type 71 is a reliable rifle chambered in 7.62x39mm, firing in three round bursts to conserve ammunition. A newer model for surpression roles to comply with overmatch doctrines is in progress and only issued to a limited number of privates in the USL."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "type71"
item_state = "type71"
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -1207,6 +1224,11 @@
desc = "The Zauer SH-15 Automatic Assault Shotgun, this is a Terran Armories variant. Another iteration of the ZX series of firearms though it has been since regulated as part of the TGMC arsenal, hence the SH designation. It took over the various shotgun models as the semi-automatic shotgun provided to the TGMC. It is rifled, and loads primarily longer ranged munitions, being incompatible with buckshot shells. Takes 12-round 16 gauge magazines."
icon_state = "tx15"
item_state = "tx15"
+ icon = 'icons/obj/items/guns/shotguns.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_sh15.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg'
caliber = CALIBER_16G //codex
@@ -1268,6 +1290,11 @@
desc = "The Raummetall-KT SG-29 is the TGMC's current standard IFF-capable medium machine gun. It's known for its ability to lay down heavy fire support very well. It is generally used when someone wants to hold a position or provide fire support. Requires special training and it cannot turn off IFF. It uses 10x26mm ammunition."
icon_state = "sg29"
item_state = "sg29"
+ icon = 'icons/obj/items/guns/machineguns.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
caliber = CALIBER_10x26_CASELESS //codex
max_shells = 300 //codex
force = 30
@@ -1324,9 +1351,13 @@
/obj/item/weapon/gun/rifle/standard_smarttargetrifle
name = "\improper SG-62 Kauser-KT smart target rifle"
desc = "The Kauser-KT SG-62 is a IFF-capable rifle used by the TerraGov Marine Corps, coupled with a spotting rifle that is also IFF capable of applying various bullets with specialized ordnance, this is a gun with many answers to many situations... if you have the right ammo loaded. Requires special training and it cannot turn off IFF. It uses high velocity 10x27mm for the rifle and 12x66mm ammunition for the underslung rifle."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "sg62"
item_state = "sg62"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
caliber = CALIBER_10x27_CASELESS //codex
max_shells = 40 //codex
aim_slowdown = 0.85
@@ -1373,7 +1404,7 @@
name = "SG-153 spotting rifle"
desc = "An underslung spotting rifle, generally found ontop of another gun."
icon_state = "sg153"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
fire_sound = 'sound/weapons/guns/fire/spottingrifle.ogg'
caliber = CALIBER_12x7
slot = ATTACHMENT_SLOT_UNDER
@@ -1407,6 +1438,10 @@
desc = "An unusual gun of alien origin. It is lacking a trigger or any obvious way to fire it."
icon_state = "alien_rifle"
item_state = "alien_rifle"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/energy_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/energy_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/alienplasma.ogg'
fire_rattle = 'sound/weapons/guns/fire/alienplasma.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/vp70_empty.ogg'
@@ -1454,12 +1489,12 @@
/obj/item/weapon/gun/rifle/chambered
name = "\improper SR-127 Bauer bolt action rifle"
desc = "The Bauer SR-127 is the standard issue bolt action rifle used by the TGMC. Known for its long range accuracy and use by marksmen despite its age and lack of IFF, though careful aim allows fire support from behind. It has an irremoveable scope. Uses 8.6×70mm box magazines."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "tl127"
item_state = "tl127"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
@@ -1637,12 +1672,12 @@
/obj/item/weapon/gun/rifle/standard_skirmishrifle
name = "\improper AR-21 Kauser skirmish rifle"
desc = "The Kauser AR-21 is a versatile rifle is developed to bridge a gap between higher caliber weaponry and a normal rifle. It fires a strong 10x25mm round, which has decent stopping power. It however suffers in magazine size and movement capablity compared to smaller peers."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "t21"
item_state = "t21"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_64.dmi',
)
inhand_x_dimension = 64
@@ -1713,8 +1748,13 @@
/obj/item/weapon/gun/rifle/alf_machinecarbine
name = "\improper ALF-51B Kauser machinecarbine"
desc = "The Kauser ALF-51B is an unoffical modification of a ALF-51, or better known as the AR-18 carbine, modified to SMG length of barrel, rechambered for a stronger round, and belt based. Truly the peak of CQC. Useless past that. Aiming is impossible. Uses 10x25mm caseless ammunition."
+ icon = 'icons/obj/items/guns/machineguns.dmi'
icon_state = "alf51b"
item_state = "alf51b"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_1.dmi',
+ )
fire_animation = "alf51b_fire"
fire_sound = 'sound/weapons/guns/fire/t18b.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg'
@@ -1771,7 +1811,7 @@
/obj/item/weapon/gun/rifle/mkh
name = "\improper MKH-98 storm rifle"
desc = "A certified classic, this reproduction design was hailed as the first successful assault rifle concept, generally termed a 'storm rifle'. Has a higher than usual firerate for its class, but suffers in capacity. This version of it chambers 7.62x39mm."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "mkh98"
item_state = "mkh98"
caliber = CALIBER_762X39 //codex
@@ -1813,9 +1853,13 @@
/obj/item/weapon/gun/rifle/tx54
name = "\improper GL-54 grenade launcher"
desc = "A magazine fed, semi-automatic grenade launcher designed to shoot airbursting smart grenades. Requires a T49 scope for precision aiming."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "tx54"
item_state = "tx54" ///todo
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
max_shells = 5 //codex
max_chamber_items = 1
fire_delay = 1.2 SECONDS
@@ -1967,16 +2011,15 @@
/obj/item/weapon/gun/rifle/garand
name = "\improper CAU C1 Garand self loading rifle"
desc = "The Carlford-1 is a remastered classic made by Carlford Armories, made to fit in the modern day. Most of the noticeable differences are minor rail modifications. Other than that, it is a faithful recreation with the trademark ping sound and all. Uses .30-06 enbloc clips."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "garand"
item_state = "garand"
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
- )
-
inhand_x_dimension = 64
inhand_y_dimension = 32
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/garand.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg'
unload_sound = 'sound/weapons/guns/interact/garand_ping.ogg'
@@ -2032,7 +2075,7 @@
name = "\improper V-31 assault rifle"
desc = "The V-31 was the primary rifle of the Sons of Mars until the introduction of more advanced energy weapons. Nevertheless, the V-31 continues to see common use due to its comparative ease of production and maintenance, and due to the inbuilt low velocity railgun designed for so called 'micro' grenades. Has good handling due to its compact bullpup design, and is generally effective at all ranges. Uses 10x25mm caseless ammunition."
icon_state = "v31"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
item_state = "v31"
fire_sound = 'sound/weapons/guns/fire/som_rifle.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/m41a_empty.ogg'
@@ -2129,7 +2172,7 @@
/obj/item/weapon/gun/rifle/som_carbine
name = "\improper V-34 carbine"
desc = "An old but robust weapon that saw extensive use in the Martian uprising. A comparatively light and compact weapon, it still packs a considerable punch thanks to a good rate of fire and high calibre, although at range its effective drops off considerably. It is chambered in 7.62x39mm."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "v34"
item_state = "v34"
caliber = CALIBER_762X39
@@ -2201,13 +2244,13 @@
/obj/item/weapon/gun/rifle/som_mg
name = "\improper V-41 machine gun"
desc = "The V-41 is a large man portable machine used by the SOM, allowing for sustained, accurate suppressive firepower at the cost of mobility and handling. Commonly seen where their preferred tactics of fast, mobile aggression is ill suited. Takes 10x26mm Caseless."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "v41"
item_state = "v41"
fire_animation = "v41_fire"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi',
)
inhand_x_dimension = 64
@@ -2269,12 +2312,12 @@
/obj/item/weapon/gun/rifle/icc_sharpshooter
name = "\improper L-11 sharpshooter rifle"
desc = "The L-11 is a venerable and battle-tested rifle used by the ICCAF. Although rather heavy, long and unwieldy compared to most ICCAF rifles, which focus on getting up close and personal, it easily makes up with excellent long-range potential when compared to most of its peers, mostly seen in use by reserve troops who expect to fight at distance, rather than up close. Uses 10x27mm magazines."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "l11"
item_state = "l11"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
@@ -2342,12 +2385,12 @@
/obj/item/weapon/gun/rifle/icc_battlecarbine
name = "\improper L-15 battlecarbine"
desc = "The L-15 battlecarbine is the standard rifle of the ICCAF, boasting a high caliber round and a menacing profile, it presents an excellent CQC firearm. However it struggles at range due to high dropoff from the short barrel, units that use it say that you need to close the gap at any cost to see the true efficacy of this weapon. Uses 10x25mm caseless ammunition."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "l15"
item_state = "l15"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/rifles_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/rifles_right_64.dmi',
)
inhand_x_dimension = 64
@@ -2414,12 +2457,12 @@
/obj/item/weapon/gun/rifle/icc_confrontationrifle
name = "\improper ML-12 confrontation rifle"
desc = "The ML-12 confrontation rifle is an absolute beast of a weapon used by the ICCAF. Featuring a high caliber round in a short package, it will absolutely shred enemy targets at close quarters, a operator must mind the incredible recoil while making followup shots, however. Uses 10x28mm caseless ammunition."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "ml12"
item_state = "ml12"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
@@ -2481,9 +2524,13 @@
/obj/item/weapon/gun/rifle/icc_autoshotgun
name = "\improper ML-41 autoshotgun"
desc = "The ML-41 Automatic Shotgun is used by the ICCAF in fast paced boarding assaults, fielding a wide variety of ammo for all situations. Takes 16-round 12 gauge drums."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "ml41"
item_state = "ml41"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/shotgun.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg'
caliber = CALIBER_12G //codex
@@ -2534,7 +2581,7 @@
/obj/item/weapon/gun/rifle/icc_assaultcarbine
name = "\improper L-88 assault carbine"
desc = "An aged, reliable but outdated bullpup rifle used by ICCAF reserve personnel it is best used in close quarters when you need to quickly clear corners at rapid pace, has an integral foregrip and unmagnified scope to increase accuracy and reduce drag. Chambered in 5.56x45mm NATO."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/rifles64.dmi'
icon_state = "l88"
item_state = "l88"
muzzleflash_iconstate = "muzzle_flash_medium"
@@ -2586,12 +2633,12 @@
/obj/item/weapon/gun/rifle/icc_mg
name = "\improper ML-41 assault machine gun"
desc = "The ML-41 is an incredibly lightweight machinegun used by ICCAF forces, being incredibly light for its class allows it to be used in rapid manuevers, at the cost of damage at range and generally high scatter. It uses 10x26mm boxes."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/machineguns64.dmi'
icon_state = "minimi"
item_state = "minimi"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/machineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/machineguns_right_64.dmi',
)
inhand_x_dimension = 64
inhand_y_dimension = 32
diff --git a/code/modules/projectiles/guns/sentries.dm b/code/modules/projectiles/guns/sentries.dm
index 6e89e632bffb8..772cc15a38a9e 100644
--- a/code/modules/projectiles/guns/sentries.dm
+++ b/code/modules/projectiles/guns/sentries.dm
@@ -101,6 +101,10 @@
desc = "The Centurion Omnidirectional Point-defense Energy sentry is a man portable, automated weapon system utilised by the SOM. It is activated in hand then thrown into place before it deploys, where it's ground hugging profile makes it a difficult target to accurately hit. Equipped with a compact volkite weapon system, and a recharging battery to allow for prolonged use, but can take normal volkite cells in a pinch."
icon_state = "cope"
icon = 'icons/Marine/sentry.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/misc_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/misc_right_1.dmi',
+ )
max_integrity = 225
integrity_failure = 50
deploy_time = 1 SECONDS
diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm
index a2601c43b4771..fd9e5a501e3c3 100644
--- a/code/modules/projectiles/guns/shotguns.dm
+++ b/code/modules/projectiles/guns/shotguns.dm
@@ -4,6 +4,11 @@
caliber = CALIBER_12G //codex
max_chamber_items = 8 //codex
load_method = SINGLE_CASING //codex
+ icon = 'icons/obj/items/guns/shotguns.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/shotguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/shotguns_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/shotgun.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/shotgun_empty.ogg'
reload_sound = 'sound/weapons/guns/interact/shotgun_shell_insert.ogg'
@@ -75,7 +80,7 @@
desc = "The Terran Armories SH-39 combat shotgun is a semi automatic shotgun used by breachers and pointmen within the TGMC squads. Uses 12 gauge shells."
force = 20 //Has a stock already
flags_equip_slot = ITEM_SLOT_BACK
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "t39"
item_state = "t39"
fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_sh39.ogg'
@@ -285,7 +290,7 @@
/obj/item/weapon/gun/shotgun/pump/cmb
name = "\improper SH-12 Paladin pump shotgun"
desc = "A nine-round pump action shotgun. A shotgun used for hunting, home defence and police work, many versions of it exist and are used by just about anyone."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "pal12"
item_state = "pal12"
fire_sound = 'sound/weapons/guns/fire/shotgun_cmb.ogg'
@@ -330,7 +335,7 @@
/obj/item/weapon/gun/shotgun/pump/trenchgun
name = "\improper L-4034 trenchgun"
desc = "A six-round pump action shotgun. A shotgun used for hunting, home defence and police work, many versions of it exist and are used by just about anyone."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "trenchgun"
item_state = "trenchgun"
fire_sound = 'sound/weapons/guns/fire/trenchgun.ogg'
@@ -384,9 +389,13 @@
/obj/item/weapon/gun/shotgun/pump/bolt
name = "\improper Mosin Nagant rifle"
desc = "A mosin nagant rifle, even just looking at it you can feel the cosmoline already. Commonly known by its slang, \"Moist Nugget\", by downbrained colonists and outlaws."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "mosin"
item_state = "mosin"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mosin.ogg'
fire_rattle = 'sound/weapons/guns/fire/tgmc/kinetic/gun_mosin_low.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg'
@@ -451,9 +460,13 @@
name = "\improper Martini Henry lever action rifle"
desc = "A lever action with room for a single round of .557/440 ball. Perfect for any kind of hunt, be it elephant or xeno with how quick to the draw it is."
flags_equip_slot = ITEM_SLOT_BACK
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "martini"
item_state = "martini"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
shell_eject_animation = "martini_flick"
caliber = CALIBER_557 //codex
muzzle_flash_lum = 7
@@ -510,6 +523,7 @@
desc = "The R-2395 Derringer has been a classic for centuries. This latest iteration combines plasma propulsion powder with the classic design to make an assasination weapon that will leave little to chance."
icon_state = "derringer"
item_state = "tp17"
+ icon = 'icons/obj/items/guns/pistols.dmi'
gun_skill_category = SKILL_PISTOLS
w_class = WEIGHT_CLASS_TINY
caliber = CALIBER_41RIM //codex
@@ -546,7 +560,7 @@
/obj/item/weapon/gun/shotgun/pump/lever
name = "lever action rifle"
desc = "A .44 magnum lever action rifle with side loading port. It has a low fire rate, but it packs quite a punch in hunting."
- icon = 'icons/obj/items/gun.dmi'
+ icon = 'icons/obj/items/guns/shotguns.dmi'
icon_state = "mares_leg"
item_state = "mares_leg"
fire_sound = 'sound/weapons/guns/fire/leveraction.ogg'//I like how this one sounds.
@@ -587,9 +601,13 @@
/obj/item/weapon/gun/shotgun/pump/lever/repeater
name = "\improper Leicester Repeater"
desc = "The gun that won the west or so they say. But space is a very different kind of frontier all together, chambered for .45-70 Governemnt."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "leicrepeater"
item_state = "leicrepeater"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/tgmc/kinetic/gun_repeater.ogg'
dry_fire_sound = 'sound/weapons/guns/fire/sniper_empty.ogg'
reload_sound = 'sound/weapons/guns/interact/mosin_reload.ogg'
@@ -682,7 +700,7 @@
name = "\improper SH-35 pump shotgun"
desc = "The Terran Armories SH-35 is the shotgun used by the TerraGov Marine Corps. It's used as a close quarters tool when someone wants something more suited for close range than most people, or as an odd sidearm on your back for emergencies. Uses 12 gauge shells.\nRequires a pump, which is the Unique Action key."
flags_equip_slot = ITEM_SLOT_BACK
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "t35"
item_state = "t35"
cock_animation = "t35_pump"
@@ -745,7 +763,7 @@
/obj/item/weapon/gun/shotgun/zx76
name = "\improper ZX-76 assault shotgun"
desc = "The ZX-76 Assault Shotgun, a incredibly rare, double barreled semi-automatic combat shotgun with a twin shot mode. Possibly the unrivaled master of CQC. Has a 9 round internal magazine."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
icon_state = "zx-76"
item_state = "zx-76"
flags_equip_slot = ITEM_SLOT_BACK
@@ -793,7 +811,7 @@
desc = "The V-51 is the main shotgun utilised by the Sons of Mars. Slower firing than some other semi automatic shotguns, but packs more of a kick."
flags_equip_slot = ITEM_SLOT_BACK
icon_state = "v51"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/shotguns64.dmi'
item_state = "v51"
fire_sound = "shotgun_som"
dry_fire_sound = 'sound/weapons/guns/fire/v51_empty.ogg'
diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm
index f660bcae9d632..9c660fd2d9bb1 100644
--- a/code/modules/projectiles/guns/smgs.dm
+++ b/code/modules/projectiles/guns/smgs.dm
@@ -1,4 +1,9 @@
/obj/item/weapon/gun/smg
+ icon = 'icons/obj/items/guns/submachineguns.dmi'
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_1.dmi',
+ )
fire_sound = 'sound/weapons/guns/fire/smg_light.ogg'
unload_sound = 'sound/weapons/guns/interact/smg_unload.ogg'
reload_sound = 'sound/weapons/guns/interact/smg_reload.ogg'
@@ -156,10 +161,10 @@
/obj/item/weapon/gun/smg/standard_heavysmg
name = "\improper SMG-45 heavy submachinegun"
desc = "The SMG-45 is a heavier than usual subgun used by the TerraGov Marine Corps. Best known for carrying a punch within a small package. It's usually carried by troops who want a lightweight firearm to rush with while beating a mean punch, however it struggles at range. It uses 10x20mm caseless rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "t45"
item_state = "t45"
- caliber = CALIBER_10X20_CASELESS //codex
+ caliber = CALIBER_45ACP //codex
max_shells = 40 //codex
fire_sound = 'sound/weapons/guns/fire/skorpevo.ogg'
unload_sound = 'sound/weapons/guns/interact/mp5_unload.ogg'
@@ -169,7 +174,7 @@
default_ammo_type = /obj/item/ammo_magazine/smg/standard_heavysmg
allowed_ammo_types = list(
/obj/item/ammo_magazine/smg/standard_heavysmg,
- /obj/item/ammo_magazine/smg/standard_heavysmg/hollowpoint,
+ /obj/item/ammo_magazine/smg/standard_heavysmg/squashhead,
)
attachable_allowed = list(
/obj/item/attachable/suppressor,
@@ -214,7 +219,7 @@
/obj/item/weapon/gun/smg/m25
name = "\improper SMG-25 submachinegun"
desc = "The RivArms SMG-25 submachinegun, an update to a classic design. A light firearm capable of effective one-handed use that is ideal for close to medium range engagements. Uses 10x20mm rounds in a high capacity magazine."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "m25"
item_state = "m25"
caliber = CALIBER_10X20_CASELESS //codex
@@ -348,7 +353,7 @@
/obj/item/weapon/gun/smg/skorpion
name = "\improper CZ-81 submachinegun"
desc = "A robust, 20th century firearm that's a combination of pistol and submachinegun. Fires .32ACP caliber rounds from a 20 round magazine."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "skorpion"
item_state = "skorpion"
caliber = CALIBER_32ACP //codex
@@ -389,7 +394,7 @@
/obj/item/weapon/gun/smg/ppsh
name = "\improper PPSh-17b submachinegun"
desc = "The PPSh-17b or \"Papasha\" is replica of a 20th century USSR model submachinegun that many terrorist organizations had copied all over the years. Despite its small-hitting firepower, its reliablity, extreme longevity and high firepower rate proves useful for the hands of the user."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "ppsh"
item_state = "ppsh"
caliber = CALIBER_762X25 //codex
@@ -483,7 +488,7 @@
name = "\improper V-21 submachinegun"
desc = "The V-21 is the principal submachinegun used by the Sons of Mars, designed to be used effectively one or two handed with a variable rate of fire. When fired at full speed it's performance is severely degraded unless used properly wielded, while the lower rate of fire can still be effectively used one handed when necessary. It uses 10x20mm caseless rounds."
icon_state = "v21"
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
item_state = "v21"
caliber = CALIBER_10X20_CASELESS
max_shells = 50
@@ -581,12 +586,12 @@
/obj/item/weapon/gun/smg/icc_machinepistol
name = "\improper PL-38 machinepistol"
desc = "The PL-38 is a machinepistol used by rearline ICCAF personnel, it presents solid performance at longer ranges in a compact package, although suffers due to a slow rate of fire for its class. It uses 10x20mm caseless rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "pl38"
item_state = "pl38"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_64.dmi',
)
inhand_x_dimension = 64
@@ -648,12 +653,12 @@
/obj/item/weapon/gun/smg/icc_pdw
name = "\improper L-40 personal defense weapon"
desc = "The L-40 is the primer ICCAF submachinegun, generally termed as a 'PDW' due to its armor-piercing high velocity round, while it has adequate ranged performance, it is mostly tuned for at close quarters combat. It uses 4.6mm high velocity caseless rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/submachineguns64.dmi'
icon_state = "l40"
item_state = "l40"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/submachineguns_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/submachineguns_right_64.dmi',
)
inhand_x_dimension = 64
diff --git a/code/modules/projectiles/guns/specialist.dm b/code/modules/projectiles/guns/specialist.dm
index 088522d1a0040..2ef78ce07b7b9 100644
--- a/code/modules/projectiles/guns/specialist.dm
+++ b/code/modules/projectiles/guns/specialist.dm
@@ -17,6 +17,7 @@ Because this parent type did not exist
Note that this means that snipers will have a slowdown of 3, due to the scope
*/
/obj/item/weapon/gun/rifle/sniper
+ icon = 'icons/obj/items/guns/marksman.dmi'
aim_slowdown = 1
gun_skill_category = SKILL_RIFLES
wield_delay = 1 SECONDS
@@ -26,9 +27,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/sniper/antimaterial
name = "\improper SR-26 scoped rifle"
desc = "The SR-26 is an IFF capable sniper rifle which is mostly used by long range marksmen. It excels in long-range combat situations and support sniping. It has a laser designator installed, and the scope itself has IFF integrated into it. Uses specialized 10x28 caseless rounds made to work with the guns odd IFF-scope system. \nIt has an integrated Target Marker and a Laser Targeting system.\n\"Peace Through Superior Firepower\"."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "t26"
item_state = "t26"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
max_shells = 15 //codex
caliber = CALIBER_10X28
fire_sound = 'sound/weapons/guns/fire/sniper.ogg'
@@ -243,6 +248,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
desc = "A high end mag-rail heavy sniper rifle from Nanotrasen chambered in the heaviest ammo available, 10x99mm Caseless."
icon_state = "m42c"
item_state = "m42c"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
max_shells = 6 //codex
caliber = CALIBER_10X99
fire_sound = 'sound/weapons/guns/fire/sniper_heavy.ogg'
@@ -278,10 +287,10 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/sniper/svd
name = "\improper SR-33 Dragunov sniper rifle"
desc = "A semiautomatic sniper rifle, famed for it's marksmanship, and is built from the ground up for it. Fires 7.62x54mmR rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_64.dmi',
)
inhand_x_dimension = 64
@@ -329,9 +338,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/tx8
name = "\improper BR-8 scout rifle"
desc ="The BR-8 is a light specialized scout rifle, mostly used by light infantry and scouts. It's designed to be useable at all ranges by being very adaptable to different situations due to the ability to use different ammo types. Has IFF. Takes specialized overpressured 10x28mm rounds."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/marksman64.dmi'
icon_state = "tx8"
item_state = "tx8"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/marksman_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/marksman_right_1.dmi',
+ )
max_shells = 25 //codex
muzzleflash_iconstate = "muzzle_flash_medium"
caliber = CALIBER_10X28_CASELESS //codex
@@ -396,9 +409,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/minigun
name = "\improper MG-100 Vindicator Minigun"
desc = "A six barreled rotary machine gun, The ultimate in man-portable firepower, capable of laying down high velocity armor piercing rounds this thing will no doubt pack a punch.. If you don't kill all your friends with it, you can use the stablizing system of the Powerpack to fire aimed fire, but you'll move incredibly slowly."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "minigun"
item_state = "minigun"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
fire_animation = "minigun_fire"
max_shells = 500 //codex
caliber = CALIBER_762X51 //codex
@@ -510,9 +527,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/pepperball
name = "\improper PB-12 pepperball gun"
desc = "The PB-12 is ostensibly riot control device used by the TGMC in spiffy colors, working through a SAN ball that sends a short acting neutralizing chemical to knock out it's target, or weaken them. Guranteed to work on just about everything. Uses SAN Ball Holders as magazines."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "pepperball"
item_state = "pepperball"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
flags_equip_slot = ITEM_SLOT_BACK|ITEM_SLOT_BELT
max_shells = 100 //codex
caliber = CALIBER_PEPPERBALL
@@ -599,8 +620,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket
name = "\improper RL-5 rocket launcher"
desc = "The RL-5 is the primary anti-armor used around the galaxy. Used to take out light-tanks and enemy structures, the RL-5 rocket launcher is a dangerous weapon with a variety of combat uses. Uses a variety of 84mm rockets."
+ icon = 'icons/obj/items/guns/special.dmi'
icon_state = "m5"
item_state = "m5"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
max_shells = 1 //codex
caliber = CALIBER_84MM //codex
load_method = SINGLE_CASING //codex
@@ -667,12 +693,12 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket/sadar
name = "\improper RL-152 sadar rocket launcher"
desc = "The RL-152 is the primary anti-armor weapon of the TGMC. Used to take out light-tanks and enemy structures, the RL-152 rocket launcher is a dangerous weapon with a variety of combat uses. Uses a variety of 84mm rockets."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "sadar"
item_state = "sadar"
item_icons = list(
- slot_l_hand_str = 'icons/mob/items_lefthand_64.dmi',
- slot_r_hand_str = 'icons/mob/items_righthand_64.dmi',
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_64.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_64.dmi',
slot_s_store_str = 'icons/mob/items_suit_slot_64.dmi',
)
inhand_x_dimension = 64
@@ -791,7 +817,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket/recoillessrifle
name = "\improper RL-160 recoilless rifle"
desc = "The RL-160 recoilless rifle is a long range explosive ordanance device used by the TGMC used to fire explosive shells at far distances. Uses a variety of 67mm shells designed for various purposes."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "t160"
item_state = "t160"
max_shells = 1 //codex
@@ -839,7 +865,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket/oneuse
name = "\improper RL-72 disposable rocket launcher"
desc = "This is the premier disposable rocket launcher used throughout the galaxy, it cannot be reloaded or unloaded on the field. This one fires an 84mm explosive rocket. Spacebar to shorten or extend it to make it storeable or fireable, respectively."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "t72"
item_state = "t72"
max_shells = 1 //codex
@@ -902,7 +928,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket/som
name = "\improper V-71 rocket launcher"
desc = "The V-71 is a man portable rocket propelled grenade launcher employed by the SOM. It's design has changed little over centuries and is light weight and cheap to manufacture, while capable of firing a wide variety of 84mm rockets to provide excellent tactical flexibility."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "rpg"
item_state = "rpg"
flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES
@@ -947,7 +973,7 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/launcher/rocket/icc
name = "\improper MP-IRL rocket launcher"
desc = "The Man Portable-Infantry Rocket Launcher is a man portable warhead launcher employed by the ICC. Being capable of firing a wide variety of 83m rear-mounted rockets to provide excellent tactical flexibility in a compact package."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "iccrpg"
item_state = "iccrpg"
flags_gun_features = GUN_WIELDED_FIRING_ONLY|GUN_WIELDED_STABLE_FIRING_ONLY|GUN_AMMO_COUNTER|GUN_SHOWS_LOADED|GUN_SMOKE_PARTICLES
@@ -986,9 +1012,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/railgun
name = "\improper RG-220 railgun"
desc = "The RG-220 is a specialized heavy duty railgun made to shred through hard armor to allow for follow up attacks. Uses specialized canisters to reload."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "railgun"
item_state = "railgun"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
max_shells = 3 //codex
caliber = CALIBER_RAILGUN
fire_sound = 'sound/weapons/guns/fire/railgun.ogg'
@@ -1029,9 +1059,13 @@ Note that this means that snipers will have a slowdown of 3, due to the scope
/obj/item/weapon/gun/rifle/icc_coilgun
name = "\improper ML-120 coilgun"
desc = "The ML-120 coilgun is the most commonly seen coilgun in ICCAF use, firing magnetic projecitles at a incredibly high velocity. It requires some windup but will penetrate walls, your foes, and your friendlies too. So watch out... Uses specialized canisters to reload."
- icon = 'icons/Marine/gun64.dmi'
+ icon = 'icons/obj/items/guns/special64.dmi'
icon_state = "ml120"
item_state = "ml120"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/inhands/guns/special_left_1.dmi',
+ slot_r_hand_str = 'icons/mob/inhands/guns/special_right_1.dmi',
+ )
max_shells = 5 //codex
caliber = CALIBER_RAILGUN
fire_sound = 'sound/weapons/guns/fire/railgun.ogg'
diff --git a/code/modules/projectiles/magazines/smgs.dm b/code/modules/projectiles/magazines/smgs.dm
index 1dce4d33a872d..54a0ddad339fd 100644
--- a/code/modules/projectiles/magazines/smgs.dm
+++ b/code/modules/projectiles/magazines/smgs.dm
@@ -68,11 +68,12 @@
icon_state_mini = "mag_heavy_smg"
bonus_overlay = "t45_mag"
-/obj/item/ammo_magazine/smg/standard_heavysmg/hollowpoint
- name = "\improper SMG-45 hollowpoint magazine (.45 ACP)"
- default_ammo = /datum/ammo/bullet/smg/hollow
- icon_state = "t45_hp"
- bonus_overlay = "t45_mag_hp"
+/obj/item/ammo_magazine/smg/standard_heavysmg/squashhead
+ name = "\improper SMG-45 squash-head magazine (.45 ACP)"
+ desc = "A .45 ACP caseless submachinegun magazine that does a minituare explosion upon contact, will shred the armor off of basically anything."
+ default_ammo = /datum/ammo/bullet/smg/squash
+ icon_state = "t45_sh"
+ bonus_overlay = "t45_mag_sh"
//-------------------------------------------------------
//SMG-27, based on the SMG-27, based on the M7.
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index e47f5d134949c..3476dd56f3041 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -1318,6 +1318,50 @@ So if we are on the 32th absolute pixel coordinate we are on tile 1, but if we a
/mob/living/proc/get_sunder()
return 0
+
+/**
+ * Fires a list of projectile objects in a circle around an atom
+ * Arguments:
+ * * source: [mandatory] atom the bullets are emitting from
+ * * bullets: [mandatory] list of bullets (in order, clockwise) to fire
+ * * firer: atom that "shot" these bullets
+ * * fire_sound: sound to play while the bullets are firing
+ * * range: bullet range
+ * * speed: bullet speed
+ * * randomized: bool, if true we randomly pick where we're firing instead of evenly seperated
+ * * rotations: how many times to "spin" the rotation. if 0 or less, instead bursts all the bullets at once
+ */
+/proc/bullet_burst(atom/source, list/obj/projectile/bullets, atom/firer, fire_sound, range, speed, randomized = FALSE, rotations = -1)
+ var/angle_between_bullets = 0
+ var/current_angle = 0
+
+ //fire in an instant burst, no shrapnel
+ if(rotations < 1)
+ angle_between_bullets = 360 / length(bullets)
+ for(var/obj/projectile/proj in bullets)
+ if(randomized)
+ current_angle = rand(1, 360)
+ else
+ current_angle += angle_between_bullets
+
+ proj.fire_at(null, firer, source, range, speed, current_angle, loc_override=source)
+ if(fire_sound)
+ playsound(source, fire_sound, 60, TRUE)
+ return
+
+ angle_between_bullets = 360 / (length(bullets) / rotations)
+ var/play_sound
+ for(var/obj/projectile/proj in bullets)
+ if(randomized)
+ current_angle = rand(1, 360)
+ else
+ current_angle += angle_between_bullets
+
+ proj.fire_at(null, firer, source, range, speed, current_angle, loc_override=source)
+ if(play_sound % 3 && fire_sound)
+ playsound(source, fire_sound, 60, FALSE)
+ stoplag(1)
+
#undef BULLET_FEEDBACK_PEN
#undef BULLET_FEEDBACK_SOAK
#undef BULLET_FEEDBACK_FIRE
diff --git a/code/modules/reqs/supplypacks.dm b/code/modules/reqs/supplypacks.dm
index 021929b9c37cd..5d7da6c11225b 100644
--- a/code/modules/reqs/supplypacks.dm
+++ b/code/modules/reqs/supplypacks.dm
@@ -588,13 +588,13 @@ WEAPONS
/datum/supply_packs/weapons/antimaterial_incend_ammo
name = "SR-26 AMR incendiary magazine"
contains = list(/obj/item/ammo_magazine/sniper/incendiary)
- cost = 50
+ cost = 30
available_against_xeno_only = TRUE
/datum/supply_packs/weapons/antimaterial_flak_ammo
name = "SR-26 AMR flak magazine"
contains = list(/obj/item/ammo_magazine/sniper/flak)
- cost = 40
+ cost = 30
available_against_xeno_only = TRUE
/datum/supply_packs/weapons/specminigun
@@ -846,10 +846,16 @@ EXPLOSIVES
/datum/supply_packs/explosives/explosives_cloak
name = "M40-2 SCDP grenade box crate"
- notes = "contains 25 grenades"
+ notes = "Contains 25 grenades"
contains = list(/obj/item/storage/box/visual/grenade/cloak)
cost = 310
+/datum/supply_packs/explosives/explosives_lasburster
+ name = "M80 lasburster grenade box crate"
+ notes = "Contains 25 grenades"
+ contains = list(/obj/item/storage/box/visual/grenade/lasburster)
+ cost = 310
+
/datum/supply_packs/explosives/explosives_hidp
name = "M40 HIDP incendiary explosive grenade box crate"
notes = "Contains 25 grenades"
@@ -932,11 +938,21 @@ EXPLOSIVES
contains = list(/obj/item/storage/box/mlrs_rockets)
cost = 60
+/datum/supply_packs/explosives/mlrs_rockets_incendiary
+ name = "TA-40L MLRS Incendiary Rocket Pack (x16)"
+ contains = list(/obj/item/storage/box/mlrs_rocket_incendiary)
+ cost = 60
+
/datum/supply_packs/explosives/mlrs_rockets_gas
name = "TA-40L X-50 MLRS Rocket Pack (x16)"
contains = list(/obj/item/storage/box/mlrs_rockets_gas)
cost = 60
+/datum/supply_packs/explosives/mlrs_rockets_cloak
+ name = "TA-40L S-2 MLRS Cloak Rocket Pack (x16)"
+ contains = list(/obj/item/storage/box/mlrs_rocket_gas_cloak)
+ cost = 50
+
/datum/supply_packs/explosives/howitzer
name = "MG-100Y howitzer"
contains = list(/obj/item/mortar_kit/howitzer)
@@ -2138,6 +2154,16 @@ FACTORY
contains = list(/obj/item/factory_refill/railgun_magazine_refill)
cost = 200
+/datum/supply_packs/factory/railgun_hvap_magazine_refill
+ name = "Railgun HVAP magazine assembly refill"
+ contains = list(/obj/item/factory_refill/railgun_magazine_refill)
+ cost = 200
+
+/datum/supply_packs/factory/railgun_smart_magazine_refill
+ name = "Railgun magazine assembly refill"
+ contains = list(/obj/item/factory_refill/railgun_magazine_refill)
+ cost = 200
+
/datum/supply_packs/factory/minigun_powerpack_refill
name = "Minigun powerpack assembly refill"
contains = list(/obj/item/factory_refill/minigun_powerpack_refill)
@@ -2148,6 +2174,11 @@ FACTORY
contains = list(/obj/item/factory_refill/razornade_refill)
cost = 500
+/datum/supply_packs/factory/flak_sniper_refill
+ name = "SR-127 flak magazine assembly refill"
+ contains = list(/obj/item/factory_refill/sniper_flak_magazine_refill)
+ cost = 600
+
/datum/supply_packs/factory/amr_magazine_refill
name = "T-26 AMR magazine assembly refill"
contains = list(/obj/item/factory_refill/amr_magazine_refill)
@@ -2218,6 +2249,21 @@ FACTORY
contains = list(/obj/item/factory_refill/module_surt_refill)
cost = 600
+/datum/supply_packs/factory/plastique_refill
+ name = "C4 assembly refill"
+ contains = list(/obj/item/factory_refill/plastique_refill)
+ cost = 150
+
+/datum/supply_packs/factory/plastique_incendiary_refill
+ name = "EX-62 Genghis incendiary assembly refill"
+ contains = list(/obj/item/factory_refill/plastique_incendiary_refill)
+ cost = 500
+
+/datum/supply_packs/factory/detpack_refill
+ name = "Detpack assembly refill"
+ contains = list(/obj/item/factory_refill/detpack_refill)
+ cost = 250
+
/datum/supply_packs/factory/mortar_shell_he_refill
name = "Mortar High Explosive shell assembly refill"
contains = list(/obj/item/factory_refill/mortar_shell_he_refill)
@@ -2248,6 +2294,81 @@ FACTORY
contains = list(/obj/item/factory_refill/mlrs_rocket_refill)
cost = 240
+/datum/supply_packs/factory/agls_he_refill
+ name = "AGLS HE magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_he_refill)
+ cost = 300
+
+/datum/supply_packs/factory/agls_frag_refill
+ name = "AGLS FRAG magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_frag_refill)
+ cost = 300
+
+/datum/supply_packs/factory/agls_incendiary_refill
+ name = "AGLS Incendiary magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_incendiary_refill)
+ cost = 300
+
+/datum/supply_packs/factory/agls_flare_refill
+ name = "AGLS Flare magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_flare_refill)
+ cost = 200
+
+/datum/supply_packs/factory/agls_cloak_refill
+ name = "AGLS Cloak magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_cloak_refill)
+ cost = 200
+
+/datum/supply_packs/factory/agls_tanglefoot_refill
+ name = "AGLS Tanglefoot magazine assembly refill"
+ contains = list(/obj/item/factory_refill/agls_tanglefoot_refill)
+ cost = 400
+
+/datum/supply_packs/factory/atgun_aphe_refill
+ name = "AT-36 AP-HE shell assembly refill"
+ contains = list(/obj/item/factory_refill/atgun_aphe_refill)
+ cost = 100
+
+/datum/supply_packs/factory/atgun_apcr_refill
+ name = "AT-36 APCR shell assembly refill"
+ contains = list(/obj/item/factory_refill/atgun_apcr_refill)
+ cost = 100
+
+/datum/supply_packs/factory/atgun_he_refill
+ name = "AT-36 HE shell assembly refill"
+ contains = list(/obj/item/factory_refill/atgun_he_refill)
+ cost = 100
+
+/datum/supply_packs/factory/atgun_beehive_refill
+ name = "AT-36 Beehive shell assembly refill"
+ contains = list(/obj/item/factory_refill/atgun_beehive_refill)
+ cost = 100
+
+/datum/supply_packs/factory/atgun_incend_refill
+ name = "AT-36 Napalm shell assembly refill"
+ contains = list(/obj/item/factory_refill/atgun_incend_refill)
+ cost = 100
+
+/datum/supply_packs/factory/heavy_isg_he_refill
+ name = "FK-88 HE shell assembly refill"
+ contains = list(/obj/item/factory_refill/heavy_isg_he_refill)
+ cost = 300
+
+/datum/supply_packs/factory/heavy_isg_sabot_refill
+ name = "FK-88 APFDS shell assembly refill"
+ contains = list(/obj/item/factory_refill/heavy_isg_sabot_refill)
+ cost = 400
+
+/datum/supply_packs/factory/ac_hv_refill
+ name = "ATR-22 High Velocity magazine assembly refill"
+ contains = list(/obj/item/factory_refill/ac_hv_refill)
+ cost = 300
+
+/datum/supply_packs/factory/ac_flak_refill
+ name = "ATR-22 Flak magazine assembly refill"
+ contains = list(/obj/item/factory_refill/ac_flak_refill)
+ cost = 300
+
/datum/supply_packs/factory/thermobaric_wp_refill
name = "RL-57 Thermobaric WP rocket array assembly refill"
contains = list(/obj/item/factory_refill/thermobaric_wp_refill)
@@ -2257,3 +2378,13 @@ FACTORY
name = "Zeus orbital drop pod assembly refill"
contains = list(/obj/item/factory_refill/drop_pod_refill)
cost = 250
+
+/datum/supply_packs/factory/deployable_floodlight_refill
+ name = "Deployable floodlight assembly refill"
+ contains = list(/obj/item/factory_refill/deployable_floodlight_refill)
+ cost = 150
+
+/datum/supply_packs/factory/deployable_camera_refill
+ name = "Deplyable security camera refill"
+ contains = list(/obj/item/factory_refill/deployable_camera_refill)
+ cost = 100
diff --git a/code/modules/screen_alert/command_alert.dm b/code/modules/screen_alert/command_alert.dm
index 02ee3810eaf6a..089ccec2f1823 100644
--- a/code/modules/screen_alert/command_alert.dm
+++ b/code/modules/screen_alert/command_alert.dm
@@ -53,15 +53,34 @@
S.channel = CHANNEL_ANNOUNCEMENTS
TIMER_COOLDOWN_START(owner, COOLDOWN_HUD_ORDER, ORDER_COOLDOWN)
log_game("[key_name(human_owner)] has broadcasted the hud message [text] at [AREACOORD(human_owner)]")
+ var/override_color // for squad colors
+ var/list/alert_receivers = (GLOB.alive_human_list + GLOB.ai_list + GLOB.observer_list) // for full faction alerts, do this so that faction's AI and ghosts can hear aswell
if(human_owner.assigned_squad)
- deadchat_broadcast(" has sent a Squad Announcement:
Sent by [human_owner.real_name], the [human_owner.job.title]")]")]")
+ to_chat(marine, assemble_alert(
+ title = "Squad [human_owner.assigned_squad.name] Announcement",
+ subtitle = "Sent by [human_owner.real_name]",
+ message = text,
+ color_override = override_color,
+ minor = TRUE
+ ))
return
- deadchat_broadcast(" has sent a Command Announcement:
Sent by [human_owner.real_name], the [human_owner.job.title]")]")]")
- SEND_SOUND(human, S)
+ for(var/mob/faction_receiver in alert_receivers)
+ if(faction_receiver.faction == human_owner.faction || isdead(faction_receiver))
+ faction_receiver.play_screen_text("COMMAND ANNOUNCEMENT: " + text, /atom/movable/screen/text/screen_text/command_order)
+ to_chat(faction_receiver, assemble_alert(
+ title = "Command Announcement",
+ subtitle = "Sent by [human_owner.real_name]",
+ message = text
+ ))
+ SEND_SOUND(faction_receiver, S)
diff --git a/code/modules/shuttle/marine_dropship.dm b/code/modules/shuttle/marine_dropship.dm
index ce5982e8cbe1d..56a6d44505e72 100644
--- a/code/modules/shuttle/marine_dropship.dm
+++ b/code/modules/shuttle/marine_dropship.dm
@@ -255,7 +255,7 @@
if(hijack_state != HIJACK_STATE_NORMAL)
return
cycle_timer = addtimer(CALLBACK(src, PROC_REF(go_to_previous_destination)), 20 SECONDS, TIMER_STOPPABLE)
- priority_announce("Dropship taking off in 20 seconds towards [previous.name]", "Dropship Automatic Departure")
+ priority_announce("The Alamo will depart towards [previous.name] in 20 seconds.", "Dropship Automatic Departure", color_override = "grey")
///Send the dropship to its previous dock
/obj/docking_port/mobile/marine_dropship/proc/go_to_previous_destination()
@@ -320,7 +320,7 @@
/obj/docking_port/mobile/marine_dropship/on_prearrival()
. = ..()
if(hijack_state == HIJACK_STATE_CRASHING)
- priority_announce("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT.", "EMERGENCY", sound = 'sound/AI/dropship_emergency.ogg')
+ priority_announce("DROPSHIP ON COLLISION COURSE. CRASH IMMINENT.", "EMERGENCY", sound = 'sound/AI/dropship_emergency.ogg', color_override = "red")
for(var/obj/machinery/landinglight/light AS in GLOB.landing_lights)
if(light.linked_port == destination)
light.turn_on()
@@ -375,7 +375,7 @@
message_admins("[ADMIN_TPMONTY(src)] has summoned the dropship")
log_admin("[key_name(src)] has summoned the dropship")
hive?.xeno_message("[src] has summoned down the metal bird to [port], gather to her now!")
- priority_announce("Unknown interference with dropship control. Shutting down autopilot", "Dropship malfunction")
+ priority_announce("Unknown external interference with dropship control. Shutting down autopilot.", "Critical Dropship Alert", type = ANNOUNCEMENT_PRIORITY, color_override = "red")
#define ALIVE_HUMANS_FOR_CALLDOWN 0.1
@@ -436,7 +436,7 @@
D.silicon_lock_airlocks(TRUE)
to_chat(user, span_warning("We have overriden the shuttle lockdown!"))
playsound(user, "alien_roar", 50)
- priority_announce("Alamo lockdown protocol compromised. Interference preventing remote control", "Dropship Lock Alert")
+ priority_announce("Alamo lockdown protocol compromised. Interference preventing remote control.", "Dropship Lock Alert", type = ANNOUNCEMENT_PRIORITY, color_override = "red")
return FALSE
if(D.mode != SHUTTLE_IDLE && D.mode != SHUTTLE_RECHARGING)
to_chat(user, span_warning("The bird's mind is currently active. We need to wait until it's more vulnerable..."))
@@ -502,37 +502,10 @@
to_chat(X, span_xenowarning("It's too early to do this!"))
return
#endif
- var/obj/docking_port/mobile/marine_dropship/M = SSshuttle.getShuttle(shuttleId)
- var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]
"
- if(M)
- dat += "Launch to [SSmapping.configs[SHIP_MAP].map_name] "
- dat += "Capture the [M] "
- M.unlock_all()
- M.silicon_lock_airlocks(TRUE)
- if(M.hijack_state != HIJACK_STATE_CALLED_DOWN)
- to_chat(X, span_xenowarning("We corrupt the bird's controls, unlocking the doors[(M.mode != SHUTTLE_IGNITING) ? "and preventing it from flying." : ", but we are unable to prevent it from flying as it is already taking off!"]"))
- SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPSHIP_CONTROLS_CORRUPTED, src)
- if(M.mode != SHUTTLE_IGNITING)
- M.set_hijack_state(HIJACK_STATE_CALLED_DOWN)
- M.do_start_hijack_timer()
-
- var/datum/browser/popup = new(X, "computer", M ? M.name : "shuttle", 300, 200)
- popup.set_content("
[dat]
")
- popup.open()
-
+ interact(X)
-/obj/machinery/computer/shuttle/marine_dropship/can_interact(mob/user)
- . = ..()
-
- if(isxeno(user))
- var/mob/living/carbon/xenomorph/X = user
- if(!(X.xeno_caste.caste_flags & CASTE_IS_INTELLIGENT))
- return FALSE
-
- else if(!allowed(user))
- return FALSE
-
- return TRUE
+/obj/machinery/computer/shuttle/marine_dropship/ui_state(mob/user)
+ return GLOB.alamo_state
/obj/machinery/computer/shuttle/marine_dropship/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -541,19 +514,28 @@
ui = new(user, src, "MarineDropship", name)
ui.open()
+/obj/machinery/computer/shuttle/marine_dropship/ui_static_data(mob/user)
+ var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
+ var/list/static_data = list()
+ static_data["current_map"] = SSmapping.configs[SHIP_MAP].map_name
+ static_data["ship_name"] = shuttle
+
+ return static_data
+
/obj/machinery/computer/shuttle/marine_dropship/ui_data(mob/user)
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
if(!shuttle)
WARNING("[src] could not find shuttle [shuttleId] from SSshuttle")
return
- . = list()
- .["on_flyby"] = shuttle.mode == SHUTTLE_CALL
- .["dest_select"] = !(shuttle.mode == SHUTTLE_CALL || shuttle.mode == SHUTTLE_IDLE)
- .["hijack_state"] = shuttle.hijack_state != HIJACK_STATE_CALLED_DOWN
- .["ship_status"] = shuttle.getStatusText()
- .["automatic_cycle_on"] = shuttle.automatic_cycle_on
- .["time_between_cycle"] = shuttle.time_between_cycle
+ var/list/data = list()
+ data["is_human"] = ishuman(user)
+ data["on_flyby"] = shuttle.mode == SHUTTLE_CALL
+ data["dest_select"] = !(shuttle.mode == SHUTTLE_CALL || shuttle.mode == SHUTTLE_IDLE)
+ data["hijack_state"] = shuttle.hijack_state != HIJACK_STATE_CALLED_DOWN
+ data["ship_status"] = shuttle.getStatusText()
+ data["automatic_cycle_on"] = shuttle.automatic_cycle_on
+ data["time_between_cycle"] = shuttle.time_between_cycle
var/locked = 0
var/reardoor = 0
@@ -562,12 +544,12 @@
if(A.locked && A.density)
reardoor++
if(!reardoor)
- .["rear"] = 0
+ data["rear"] = 0
else if(reardoor==length(shuttle.rear_airlocks))
- .["rear"] = 2
+ data["rear"] = 2
locked++
else
- .["rear"] = 1
+ data["rear"] = 1
var/leftdoor = 0
for(var/i in shuttle.left_airlocks)
@@ -575,12 +557,12 @@
if(A.locked && A.density)
leftdoor++
if(!leftdoor)
- .["left"] = 0
+ data["left"] = 0
else if(leftdoor==length(shuttle.left_airlocks))
- .["left"] = 2
+ data["left"] = 2
locked++
else
- .["left"] = 1
+ data["left"] = 1
var/rightdoor = 0
for(var/i in shuttle.right_airlocks)
@@ -588,19 +570,19 @@
if(A.locked && A.density)
rightdoor++
if(!rightdoor)
- .["right"] = 0
+ data["right"] = 0
else if(rightdoor==length(shuttle.right_airlocks))
- .["right"] = 2
+ data["right"] = 2
locked++
else
- .["right"] = 1
+ data["right"] = 1
if(locked == 3)
- .["lockdown"] = 2
+ data["lockdown"] = 2
else if(!locked)
- .["lockdown"] = 0
+ data["lockdown"] = 0
else
- .["lockdown"] = 1
+ data["lockdown"] = 1
var/list/options = valid_destinations()
var/list/valid_destinations = list()
@@ -610,9 +592,11 @@
if(!shuttle.check_dock(S, silent=TRUE))
continue
valid_destinations += list(list("name" = S.name, "id" = S.id))
- .["destinations"] = valid_destinations
+ data["destinations"] = valid_destinations
-/obj/machinery/computer/shuttle/marine_dropship/ui_act(action, list/params)
+ return data
+
+/obj/machinery/computer/shuttle/marine_dropship/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
@@ -645,83 +629,42 @@
deltimer(M.cycle_timer)
if("cycle_time_change")
M.time_between_cycle = params["cycle_time_change"]
-
-/obj/machinery/computer/shuttle/marine_dropship/Topic(href, href_list)
- var/obj/docking_port/mobile/marine_dropship/M = SSshuttle.getShuttle(shuttleId)
- if(!M)
- return
- if(!isxeno(usr) && M.hijack_state == HIJACK_STATE_CALLED_DOWN)
- to_chat(usr, span_warning("The shuttle isn't responding to commands."))
- return
- . = ..()
- if(.)
- return
- if(M.hijack_state == HIJACK_STATE_CRASHING)
- return
-
- if(ishuman(usr) || isAI(usr))
- if(!allowed(usr))
- return
- if(href_list["lockdown"])
-
- else if(href_list["release"])
-
- else if(href_list["lock"])
- M.lockdown_airlocks(href_list["lock"])
- else if(href_list["unlock"])
- M.unlock_airlocks(href_list["unlock"])
- return
-
- if(!is_ground_level(M.z))
- return
-
- if(!isxeno(usr))
- return
-
- var/mob/living/carbon/xenomorph/X = usr
-
- if(href_list["hijack"])
- if(!(X.hive.hive_flags & HIVE_CAN_HIJACK))
- to_chat(X, span_warning("Our hive lacks the psychic prowess to hijack the bird."))
- return
- switch(M.mode)
- if(SHUTTLE_RECHARGING)
- to_chat(X, span_xenowarning("The bird is still cooling down."))
+ //These are actions for the Xeno dropship UI
+ if("hijack")
+ var/mob/living/carbon/xenomorph/xeno = usr
+ if(!(xeno.hive.hive_flags & HIVE_CAN_HIJACK))
+ to_chat(xeno, span_warning("Our hive lacks the psychic prowess to hijack the bird."))
return
- if(SHUTTLE_IDLE) //Continue.
- else
- to_chat(X, span_xenowarning("We can't do that right now."))
+ if(M.mode == SHUTTLE_RECHARGING)
+ to_chat(xeno, span_xenowarning("The bird is still cooling down."))
+ return
+ if(M.mode != SHUTTLE_IDLE)
+ to_chat(xeno, span_xenowarning("We can't do that right now."))
+ return
+ var/confirm = tgui_alert(usr, "Would you like to hijack the metal bird?", "Hijack the bird?", list("Yes", "No"))
+ if(confirm != "Yes")
+ return
+ var/obj/docking_port/stationary/marine_dropship/crash_target/CT = pick(SSshuttle.crash_targets)
+ if(!CT)
+ return
+ do_hijack(M, CT, xeno)
+ if("abduct")
+ var/groundside_humans = length(GLOB.humans_by_zlevel["[z]"])
+ if(groundside_humans > 5)
+ to_chat(usr, span_xenowarning("There is still prey left to hunt!"))
+ return
+ var/confirm = tgui_alert(usr, "Would you like to capture the metal bird?\n THIS WILL END THE ROUND", "Capture the ship?", list( "Yes", "No"))
+ if(confirm != "Yes")
+ return
+ if(groundside_humans > 5)
+ to_chat(usr, span_xenowarning("There is still prey left to hunt!"))
return
- var/confirm = tgui_alert(usr, "Would you like to hijack the metal bird?", "Hijack the bird?", list("Yes", "No"))
- if(confirm != "Yes")
- return
- var/obj/docking_port/stationary/marine_dropship/crash_target/CT = pick(SSshuttle.crash_targets)
- if(!CT)
- return
- do_hijack(M, CT, X)
-
- if(href_list["abduct"])
- var/confirm = tgui_alert(usr, "Would you like to capture the metal bird?\n THIS WILL END THE ROUND", "Capture the ship?", list( "Yes", "No"))
- if(confirm != "Yes")
- return
- var/groundside_humans = length(GLOB.humans_by_zlevel["[z]"])
- if(groundside_humans > 5)
- to_chat(X, span_xenowarning("There is still prey left to hunt!"))
- return
- //these are all stinky checks, someone make this tgui
- if(X != usr)
- return
- if(X.stat)
- return
- if(!Adjacent(X))
+ priority_announce("The Alamo has been captured! Losing their main mean of accessing the ground, the marines have no choice but to retreat.", title = "Alamo Captured", color_override = "orange")
+ var/datum/game_mode/infestation/infestation_mode = SSticker.mode
+ infestation_mode.round_stage = INFESTATION_DROPSHIP_CAPTURED_XENOS
return
- priority_announce("The Alamo has been captured! Losing their main mean of accessing the ground, the marines have no choice but to retreat.", title = "ALAMO CAPTURED")
- var/datum/game_mode/infestation/infestation_mode = SSticker.mode
- infestation_mode.round_stage = INFESTATION_DROPSHIP_CAPTURED_XENOS
- return
-
/obj/machinery/computer/shuttle/marine_dropship/proc/do_hijack(obj/docking_port/mobile/marine_dropship/crashing_dropship, obj/docking_port/stationary/marine_dropship/crash_target/crash_target, mob/living/carbon/xenomorph/user)
crashing_dropship.set_hijack_state(HIJACK_STATE_CRASHING)
if(SSticker.mode?.flags_round_type & MODE_HIJACK_POSSIBLE)
@@ -731,7 +674,7 @@
crashing_dropship.crashing = TRUE
crashing_dropship.unlock_all()
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_DROPSHIP_HIJACKED)
- priority_announce("Unscheduled dropship departure detected from operational area. Hijack likely.", "Dropship Alert", sound = 'sound/AI/hijack.ogg')
+ priority_announce("Unscheduled dropship departure detected from operational area. Hijack likely.", title = "Critical Dropship Alert", type = ANNOUNCEMENT_PRIORITY, sound = 'sound/AI/hijack.ogg', color_override = "red")
to_chat(user, span_danger("A loud alarm erupts from [src]! The fleshy hosts must know that you can access it!"))
user.hive.on_shuttle_hijack(crashing_dropship)
playsound(src, 'sound/misc/queen_alarm.ogg')
diff --git a/code/modules/tgui/states/alamo.dm b/code/modules/tgui/states/alamo.dm
new file mode 100644
index 0000000000000..9f284923cd191
--- /dev/null
+++ b/code/modules/tgui/states/alamo.dm
@@ -0,0 +1,32 @@
+/**
+ * tgui state: access_state
+ *
+ * Humans need to have access and be adjacent to use it.
+ * Silicons and other lifeforms get their default ui_state pass.
+ * Xenomorphs need to be intelligent
+ */
+
+GLOBAL_DATUM_INIT(alamo_state, /datum/ui_state/alamo_state, new)
+
+/datum/ui_state/alamo_state/can_use_topic(src_object, mob/user)
+ return user.alamo_can_use_topic(src_object)
+
+/mob/proc/alamo_can_use_topic(src_object)
+ return default_can_use_topic(src_object)
+
+/mob/living/alamo_can_use_topic(src_object)
+ . = human_adjacent_can_use_topic(src_object)
+
+ var/obj/O = src_object
+ if(!O?.allowed(src)) //No access? No ui!
+ to_chat(src, span_warning("Access Denied!"))
+ return UI_CLOSE
+ . = min(., UI_INTERACTIVE)
+
+/mob/living/silicon/alamo_can_use_topic(src_object)
+ return default_can_use_topic(src_object)
+
+/mob/living/carbon/xenomorph/alamo_can_use_topic(src_object)
+ if(!(xeno_caste.caste_flags & CASTE_IS_INTELLIGENT))
+ return default_can_use_topic(src_object)
+ return GLOB.xeno_state.can_use_topic(src_object, src)
diff --git a/code/modules/xenomorph/pherotower.dm b/code/modules/xenomorph/pherotower.dm
index 5e73b14f09f95..30d1154a38e39 100644
--- a/code/modules/xenomorph/pherotower.dm
+++ b/code/modules/xenomorph/pherotower.dm
@@ -8,7 +8,7 @@
bound_height = 32
obj_integrity = 400
max_integrity = 400
- xeno_structure_flags = CRITICAL_STRUCTURE
+ xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL
///The type of pheromone currently being emitted.
var/datum/aura_bearer/current_aura
///Strength of pheromones given by this tower.
diff --git a/code/modules/xenomorph/xenotowers.dm b/code/modules/xenomorph/xenotowers.dm
index ffb9cf74bb3e6..6247b3d6dd08a 100644
--- a/code/modules/xenomorph/xenotowers.dm
+++ b/code/modules/xenomorph/xenotowers.dm
@@ -8,7 +8,7 @@
bound_height = 64
obj_integrity = 600
max_integrity = 600
- xeno_structure_flags = CRITICAL_STRUCTURE
+ xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL
///boost amt to be added per tower per cycle
var/boost_amount = 0.2
///maturity boost amt to be added per tower per cycle
@@ -43,7 +43,7 @@
bound_height = 64
obj_integrity = 400
max_integrity = 400
- xeno_structure_flags = CRITICAL_STRUCTURE
+ xeno_structure_flags = CRITICAL_STRUCTURE|IGNORE_WEED_REMOVAL
/obj/structure/xeno/psychictower/Initialize(mapload, _hivenumber)
. = ..()
diff --git a/config/config.txt b/config/config.txt
index 540a84e917d0c..9a9a1588ac7c4 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -230,9 +230,9 @@ DEFAULT_VIEW_SQUARE 15x15
AI_ANTI_STUCK_LAG_TIME_DILATION_THRESHOLD 20
-## Assets can opt-in to caching their results into `tmp`.
+## Assets can opt-in to caching their results into `cache/`.
## This is important, as preferences assets take upwards of 30 seconds (without sleeps) to collect.
-## The cache is assumed to be cleared by TGS recompiling, which deletes `tmp`.
+## The cache is assumed to be cleared by TGS recompiling, which deletes `cache/`.
## This should be disabled (through `CACHE_ASSETS 0`) on development,
## but enabled on production (the default).
CACHE_ASSETS 0
diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml
index 3f03ef0100c67..14b4dd4fbf530 100644
--- a/html/changelogs/archive/2024-02.yml
+++ b/html/changelogs/archive/2024-02.yml
@@ -186,3 +186,80 @@
- bugfix: Chicken protein bars no longer runtime
ivanmixo:
- balance: Stagger doesn't stack in duration anymore
+2024-02-11:
+ Dikozda:
+ - bugfix: SG prep on cantabury no longer has its only door blocked
+ Helg2:
+ - bugfix: '[Big Red] fixed pipes in medbay variants 4 and 5.'
+ Neocloudy:
+ - rscadd: new announcement design- announcements can be recolored, have a subtitle,
+ and pop out easier.
+ - code_imp: priority announcements can now have a color override and subtitle
+ - admin: added subtitle and color option to command reports
+ novaepee:
+ - imageadd: port TG surgery tool sprites
+2024-02-12:
+ AzonStarfall:
+ - bugfix: Fixed Arachne's Medbay Disposal.
+ Helg2:
+ - bugfix: Xenos now show their wound in their special states.
+ Lumipharon:
+ - balance: Unarmed damage against humans is no longer rng if your victim is prone
+ - balance: CQC skill lowers grab upgrade time
+ - balance: Unarmed attacks against humans uses the same zone targeting as melee
+ weapons
+ - bugfix: Choking someone to death once again actually causes oxyloss
+ - bugfix: Melee attack can now actually miss some times as intended (only for humans
+ attacking humans)
+ Naaanii:
+ - rscadd: Added HVAP and smart railgun rounds to reqtorio.
+ - rscadd: Added SR-127 flak ammo to reqtorio.
+ - rscadd: Added deployable floodlights to reqtorio.
+ - rscadd: Added both plastiques to reqtorio.
+ - rscadd: Added detpacks to reqtorio.
+ - spellcheck: Added a missing period to drop pod factory description.
+ - balance: All AMR mags cost the same.
+ Pariah919:
+ - rscadd: Added new cloak and incendiary rockets for MLRS.
+ TiviPlus:
+ - code_imp: razorburns have been removed from loadouts due to an internal code change
+ Xander3359:
+ - refactor: Alamo console for xenos is TGUI now
+ Xander3359 Naaanii:
+ - admin: Admins can cancel king summon
+2024-02-13:
+ Barnet2:
+ - balance: If autobalance is on or if you are a tier four, the xeno respawn timer
+ is not applied
+ - balance: Sentinel gas nade is now transparent (you can see through it)
+ Lumipharon:
+ - bugfix: fixed a couple of minor edge case bugs with jumping
+ - code_imp: connect_loc now works properly for multitile atoms
+2024-02-14:
+ Cpol-CzHa:
+ - rscadd: Adds a number of missing items to valhalla.
+ Naaanii:
+ - rscadd: Added all AGLS ammo to reqtorio.
+ - rscadd: Added all TAT ammo to reqtorio.
+ - rscadd: Added all FK-88 ammo to reqtorio.
+ - rscadd: Added all ATR-22 ammo to reqtorio.
+ - bugfix: Actually adds the camera refill to req.
+ TiviPlus:
+ - rscadd: Added new "lasburster" grenade
+ - code_imp: added the ability to shoot bullets in a circle
+ Xander3359:
+ - bugfix: fix typo in martini belt causing broken sprite
+ efzapa:
+ - spellcheck: Bicaridine is now universally spelt correctly.
+2024-02-15:
+ Helg2:
+ - balance: Psychic Relays, Evolution Towers and Pheromonone Towers now ignore weed
+ removal.
+ Pariah919:
+ - rscadd: New squashhead bullets for SMG-45
+ - rscdel: SMG-45 HP
+ - soundadd: New firesound for SMG-45
+ Xander3359:
+ - bugfix: Fix not being able to click martini belt
+ yyzsong:
+ - qol: Adds a cooldown between unresting and then resting again for xenomorphs
diff --git a/icons/Marine/gun64.dmi b/icons/Marine/gun64.dmi
deleted file mode 100644
index 921f4935fb6ec..0000000000000
Binary files a/icons/Marine/gun64.dmi and /dev/null differ
diff --git a/icons/Marine/mortar.dmi b/icons/Marine/mortar.dmi
index a24983bc90ce5..887876c3b2a02 100644
Binary files a/icons/Marine/mortar.dmi and b/icons/Marine/mortar.dmi differ
diff --git a/icons/Marine/spear.dmi b/icons/Marine/spear.dmi
new file mode 100644
index 0000000000000..0b1c0f5d41df7
Binary files /dev/null and b/icons/Marine/spear.dmi differ
diff --git a/icons/mob/ammoHUD.dmi b/icons/mob/ammoHUD.dmi
index 2357f09203393..68c7ad9d35627 100644
Binary files a/icons/mob/ammoHUD.dmi and b/icons/mob/ammoHUD.dmi differ
diff --git a/icons/mob/inhands/equipment/surgery_left.dmi b/icons/mob/inhands/equipment/surgery_left.dmi
index 09f78f9a86813..53845029b5649 100644
Binary files a/icons/mob/inhands/equipment/surgery_left.dmi and b/icons/mob/inhands/equipment/surgery_left.dmi differ
diff --git a/icons/mob/inhands/equipment/surgery_right.dmi b/icons/mob/inhands/equipment/surgery_right.dmi
index e1a101d434918..ea1be3efbcfd0 100644
Binary files a/icons/mob/inhands/equipment/surgery_right.dmi and b/icons/mob/inhands/equipment/surgery_right.dmi differ
diff --git a/icons/mob/inhands/guns/energy_left_1.dmi b/icons/mob/inhands/guns/energy_left_1.dmi
new file mode 100644
index 0000000000000..34fbd36f2dbe9
Binary files /dev/null and b/icons/mob/inhands/guns/energy_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/energy_left_64.dmi b/icons/mob/inhands/guns/energy_left_64.dmi
new file mode 100644
index 0000000000000..a831da4c82eb4
Binary files /dev/null and b/icons/mob/inhands/guns/energy_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/energy_right_1.dmi b/icons/mob/inhands/guns/energy_right_1.dmi
new file mode 100644
index 0000000000000..80bc462d2ee0b
Binary files /dev/null and b/icons/mob/inhands/guns/energy_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/energy_right_64.dmi b/icons/mob/inhands/guns/energy_right_64.dmi
new file mode 100644
index 0000000000000..9aa5ce4523336
Binary files /dev/null and b/icons/mob/inhands/guns/energy_right_64.dmi differ
diff --git a/icons/mob/inhands/guns/machineguns_left_1.dmi b/icons/mob/inhands/guns/machineguns_left_1.dmi
new file mode 100644
index 0000000000000..e7bff9b2f654b
Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/machineguns_left_64.dmi b/icons/mob/inhands/guns/machineguns_left_64.dmi
new file mode 100644
index 0000000000000..f1d65bc0f4190
Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/machineguns_right_1.dmi b/icons/mob/inhands/guns/machineguns_right_1.dmi
new file mode 100644
index 0000000000000..3b9529351dfc7
Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/machineguns_right_64.dmi b/icons/mob/inhands/guns/machineguns_right_64.dmi
new file mode 100644
index 0000000000000..b9f9148ba6cc0
Binary files /dev/null and b/icons/mob/inhands/guns/machineguns_right_64.dmi differ
diff --git a/icons/mob/inhands/guns/marksman_left_1.dmi b/icons/mob/inhands/guns/marksman_left_1.dmi
new file mode 100644
index 0000000000000..68ec057a0f0e1
Binary files /dev/null and b/icons/mob/inhands/guns/marksman_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/marksman_left_64.dmi b/icons/mob/inhands/guns/marksman_left_64.dmi
new file mode 100644
index 0000000000000..101221e26a73f
Binary files /dev/null and b/icons/mob/inhands/guns/marksman_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/marksman_right_1.dmi b/icons/mob/inhands/guns/marksman_right_1.dmi
new file mode 100644
index 0000000000000..71352003e6c39
Binary files /dev/null and b/icons/mob/inhands/guns/marksman_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/marksman_right_64.dmi b/icons/mob/inhands/guns/marksman_right_64.dmi
new file mode 100644
index 0000000000000..7df069eee7a30
Binary files /dev/null and b/icons/mob/inhands/guns/marksman_right_64.dmi differ
diff --git a/icons/mob/inhands/guns/misc_left_1.dmi b/icons/mob/inhands/guns/misc_left_1.dmi
new file mode 100644
index 0000000000000..732c221feeca9
Binary files /dev/null and b/icons/mob/inhands/guns/misc_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/misc_right_1.dmi b/icons/mob/inhands/guns/misc_right_1.dmi
new file mode 100644
index 0000000000000..0b59749f80baa
Binary files /dev/null and b/icons/mob/inhands/guns/misc_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/pistols_left_1.dmi b/icons/mob/inhands/guns/pistols_left_1.dmi
new file mode 100644
index 0000000000000..287d47636a96b
Binary files /dev/null and b/icons/mob/inhands/guns/pistols_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/pistols_right_1.dmi b/icons/mob/inhands/guns/pistols_right_1.dmi
new file mode 100644
index 0000000000000..861a569973ca4
Binary files /dev/null and b/icons/mob/inhands/guns/pistols_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/plasma_left_1.dmi b/icons/mob/inhands/guns/plasma_left_1.dmi
new file mode 100644
index 0000000000000..61912e6f42515
Binary files /dev/null and b/icons/mob/inhands/guns/plasma_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/plasma_right_1.dmi b/icons/mob/inhands/guns/plasma_right_1.dmi
new file mode 100644
index 0000000000000..86d866798daa3
Binary files /dev/null and b/icons/mob/inhands/guns/plasma_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/rifles_left_1.dmi b/icons/mob/inhands/guns/rifles_left_1.dmi
new file mode 100644
index 0000000000000..26d5d5832dd3d
Binary files /dev/null and b/icons/mob/inhands/guns/rifles_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/rifles_left_64.dmi b/icons/mob/inhands/guns/rifles_left_64.dmi
new file mode 100644
index 0000000000000..6ab248480cf64
Binary files /dev/null and b/icons/mob/inhands/guns/rifles_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/rifles_right_1.dmi b/icons/mob/inhands/guns/rifles_right_1.dmi
new file mode 100644
index 0000000000000..45a36ddda3ac1
Binary files /dev/null and b/icons/mob/inhands/guns/rifles_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/rifles_right_64.dmi b/icons/mob/inhands/guns/rifles_right_64.dmi
new file mode 100644
index 0000000000000..69c8f8fd025cc
Binary files /dev/null and b/icons/mob/inhands/guns/rifles_right_64.dmi differ
diff --git a/icons/mob/inhands/guns/shotguns_left_1.dmi b/icons/mob/inhands/guns/shotguns_left_1.dmi
new file mode 100644
index 0000000000000..5bd6a38abef1c
Binary files /dev/null and b/icons/mob/inhands/guns/shotguns_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/shotguns_right_1.dmi b/icons/mob/inhands/guns/shotguns_right_1.dmi
new file mode 100644
index 0000000000000..061566b15e233
Binary files /dev/null and b/icons/mob/inhands/guns/shotguns_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/special_left_1.dmi b/icons/mob/inhands/guns/special_left_1.dmi
new file mode 100644
index 0000000000000..af6a5c97f8571
Binary files /dev/null and b/icons/mob/inhands/guns/special_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/special_left_64.dmi b/icons/mob/inhands/guns/special_left_64.dmi
new file mode 100644
index 0000000000000..1338e360d6514
Binary files /dev/null and b/icons/mob/inhands/guns/special_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/special_right_1.dmi b/icons/mob/inhands/guns/special_right_1.dmi
new file mode 100644
index 0000000000000..2d9e4ac81c970
Binary files /dev/null and b/icons/mob/inhands/guns/special_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/special_right_64.dmi b/icons/mob/inhands/guns/special_right_64.dmi
new file mode 100644
index 0000000000000..54d8ad8ffe54f
Binary files /dev/null and b/icons/mob/inhands/guns/special_right_64.dmi differ
diff --git a/icons/mob/inhands/guns/submachineguns_left_1.dmi b/icons/mob/inhands/guns/submachineguns_left_1.dmi
new file mode 100644
index 0000000000000..404426f847eb2
Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_left_1.dmi differ
diff --git a/icons/mob/inhands/guns/submachineguns_left_64.dmi b/icons/mob/inhands/guns/submachineguns_left_64.dmi
new file mode 100644
index 0000000000000..e76ab7df6db70
Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_left_64.dmi differ
diff --git a/icons/mob/inhands/guns/submachineguns_right_1.dmi b/icons/mob/inhands/guns/submachineguns_right_1.dmi
new file mode 100644
index 0000000000000..e0f21d2326878
Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_right_1.dmi differ
diff --git a/icons/mob/inhands/guns/submachineguns_right_64.dmi b/icons/mob/inhands/guns/submachineguns_right_64.dmi
new file mode 100644
index 0000000000000..69d8bdbe2d44a
Binary files /dev/null and b/icons/mob/inhands/guns/submachineguns_right_64.dmi differ
diff --git a/icons/mob/inhands/items/items_left.dmi b/icons/mob/inhands/items/items_left.dmi
new file mode 100644
index 0000000000000..5f50ac05e6d67
Binary files /dev/null and b/icons/mob/inhands/items/items_left.dmi differ
diff --git a/icons/mob/inhands/items/items_right.dmi b/icons/mob/inhands/items/items_right.dmi
new file mode 100644
index 0000000000000..d12197ddde0eb
Binary files /dev/null and b/icons/mob/inhands/items/items_right.dmi differ
diff --git a/icons/mob/inhands/weapons/grenades_left.dmi b/icons/mob/inhands/weapons/grenades_left.dmi
index 74da406e9da36..718198460bc74 100644
Binary files a/icons/mob/inhands/weapons/grenades_left.dmi and b/icons/mob/inhands/weapons/grenades_left.dmi differ
diff --git a/icons/mob/inhands/weapons/grenades_right.dmi b/icons/mob/inhands/weapons/grenades_right.dmi
index ad2fc4be6c8d7..1ba094f47015b 100644
Binary files a/icons/mob/inhands/weapons/grenades_right.dmi and b/icons/mob/inhands/weapons/grenades_right.dmi differ
diff --git a/icons/mob/items_lefthand_1.dmi b/icons/mob/items_lefthand_1.dmi
deleted file mode 100644
index 09aa15cb4cfe1..0000000000000
Binary files a/icons/mob/items_lefthand_1.dmi and /dev/null differ
diff --git a/icons/mob/items_lefthand_64.dmi b/icons/mob/items_lefthand_64.dmi
deleted file mode 100644
index 6d5b89565552c..0000000000000
Binary files a/icons/mob/items_lefthand_64.dmi and /dev/null differ
diff --git a/icons/mob/items_righthand_1.dmi b/icons/mob/items_righthand_1.dmi
deleted file mode 100644
index 7bf38beb3b9c6..0000000000000
Binary files a/icons/mob/items_righthand_1.dmi and /dev/null differ
diff --git a/icons/mob/items_righthand_64.dmi b/icons/mob/items_righthand_64.dmi
deleted file mode 100644
index 9bef53ff1d220..0000000000000
Binary files a/icons/mob/items_righthand_64.dmi and /dev/null differ
diff --git a/icons/obj/items/ammo.dmi b/icons/obj/items/ammo.dmi
index a6bf58e096678..a50220b5cd85b 100644
Binary files a/icons/obj/items/ammo.dmi and b/icons/obj/items/ammo.dmi differ
diff --git a/icons/obj/items/grenade.dmi b/icons/obj/items/grenade.dmi
index 44fb86f30fa9b..107deed1f3ab1 100644
Binary files a/icons/obj/items/grenade.dmi and b/icons/obj/items/grenade.dmi differ
diff --git a/icons/obj/items/gun.dmi b/icons/obj/items/gun.dmi
deleted file mode 100644
index c5b041053a51e..0000000000000
Binary files a/icons/obj/items/gun.dmi and /dev/null differ
diff --git a/icons/obj/items/guns/energy.dmi b/icons/obj/items/guns/energy.dmi
new file mode 100644
index 0000000000000..10febbe140d1c
Binary files /dev/null and b/icons/obj/items/guns/energy.dmi differ
diff --git a/icons/obj/items/guns/energy64.dmi b/icons/obj/items/guns/energy64.dmi
new file mode 100644
index 0000000000000..b052ae3b8f735
Binary files /dev/null and b/icons/obj/items/guns/energy64.dmi differ
diff --git a/icons/obj/items/guns/machineguns.dmi b/icons/obj/items/guns/machineguns.dmi
new file mode 100644
index 0000000000000..cb9148e15dc33
Binary files /dev/null and b/icons/obj/items/guns/machineguns.dmi differ
diff --git a/icons/obj/items/guns/machineguns64.dmi b/icons/obj/items/guns/machineguns64.dmi
new file mode 100644
index 0000000000000..535c5e664d45a
Binary files /dev/null and b/icons/obj/items/guns/machineguns64.dmi differ
diff --git a/icons/obj/items/guns/marksman.dmi b/icons/obj/items/guns/marksman.dmi
new file mode 100644
index 0000000000000..27c83f42ef00d
Binary files /dev/null and b/icons/obj/items/guns/marksman.dmi differ
diff --git a/icons/obj/items/guns/marksman64.dmi b/icons/obj/items/guns/marksman64.dmi
new file mode 100644
index 0000000000000..adffac40d8f38
Binary files /dev/null and b/icons/obj/items/guns/marksman64.dmi differ
diff --git a/icons/obj/items/guns/pistols.dmi b/icons/obj/items/guns/pistols.dmi
new file mode 100644
index 0000000000000..ddba100602eee
Binary files /dev/null and b/icons/obj/items/guns/pistols.dmi differ
diff --git a/icons/obj/items/guns/pistols64.dmi b/icons/obj/items/guns/pistols64.dmi
new file mode 100644
index 0000000000000..e5d5a9db5a744
Binary files /dev/null and b/icons/obj/items/guns/pistols64.dmi differ
diff --git a/icons/Marine/marine-plasmaguns.dmi b/icons/obj/items/guns/plasma64.dmi
similarity index 100%
rename from icons/Marine/marine-plasmaguns.dmi
rename to icons/obj/items/guns/plasma64.dmi
diff --git a/icons/obj/items/guns/rifles.dmi b/icons/obj/items/guns/rifles.dmi
new file mode 100644
index 0000000000000..cfc00a744f66d
Binary files /dev/null and b/icons/obj/items/guns/rifles.dmi differ
diff --git a/icons/obj/items/guns/rifles64.dmi b/icons/obj/items/guns/rifles64.dmi
new file mode 100644
index 0000000000000..b6aac4b6be09d
Binary files /dev/null and b/icons/obj/items/guns/rifles64.dmi differ
diff --git a/icons/obj/items/guns/shotguns.dmi b/icons/obj/items/guns/shotguns.dmi
new file mode 100644
index 0000000000000..9de51ea635e12
Binary files /dev/null and b/icons/obj/items/guns/shotguns.dmi differ
diff --git a/icons/obj/items/guns/shotguns64.dmi b/icons/obj/items/guns/shotguns64.dmi
new file mode 100644
index 0000000000000..d228de1d60a94
Binary files /dev/null and b/icons/obj/items/guns/shotguns64.dmi differ
diff --git a/icons/obj/items/guns/special.dmi b/icons/obj/items/guns/special.dmi
new file mode 100644
index 0000000000000..e20f5d9fd6310
Binary files /dev/null and b/icons/obj/items/guns/special.dmi differ
diff --git a/icons/obj/items/guns/special64.dmi b/icons/obj/items/guns/special64.dmi
new file mode 100644
index 0000000000000..673eb55dd7d52
Binary files /dev/null and b/icons/obj/items/guns/special64.dmi differ
diff --git a/icons/obj/items/guns/submachineguns.dmi b/icons/obj/items/guns/submachineguns.dmi
new file mode 100644
index 0000000000000..f979017517383
Binary files /dev/null and b/icons/obj/items/guns/submachineguns.dmi differ
diff --git a/icons/obj/items/guns/submachineguns64.dmi b/icons/obj/items/guns/submachineguns64.dmi
new file mode 100644
index 0000000000000..ef968b168b979
Binary files /dev/null and b/icons/obj/items/guns/submachineguns64.dmi differ
diff --git a/icons/obj/items/items_mini.dmi b/icons/obj/items/items_mini.dmi
index d68597ac21f2a..582a8719be71a 100644
Binary files a/icons/obj/items/items_mini.dmi and b/icons/obj/items/items_mini.dmi differ
diff --git a/icons/obj/items/storage/storage_boxes.dmi b/icons/obj/items/storage/storage_boxes.dmi
index 602abbcd7a721..5abdb53ffd6ce 100644
Binary files a/icons/obj/items/storage/storage_boxes.dmi and b/icons/obj/items/storage/storage_boxes.dmi differ
diff --git a/icons/obj/items/surgery_tools.dmi b/icons/obj/items/surgery_tools.dmi
index 7256322e703ae..ed66a84eb4b52 100644
Binary files a/icons/obj/items/surgery_tools.dmi and b/icons/obj/items/surgery_tools.dmi differ
diff --git a/sound/weapons/burst_phaser2.ogg b/sound/weapons/burst_phaser2.ogg
new file mode 100644
index 0000000000000..53758c025adaa
Binary files /dev/null and b/sound/weapons/burst_phaser2.ogg differ
diff --git a/sound/weapons/guns/fire/skorpevo.ogg b/sound/weapons/guns/fire/skorpevo.ogg
index feaa709b05122..5a9ad10c1019d 100644
Binary files a/sound/weapons/guns/fire/skorpevo.ogg and b/sound/weapons/guns/fire/skorpevo.ogg differ
diff --git a/tgmc.dme b/tgmc.dme
index c12b2198937a0..defbb042e9d2d 100644
--- a/tgmc.dme
+++ b/tgmc.dme
@@ -814,6 +814,7 @@
#include "code\game\objects\items\explosives\explosive.dm"
#include "code\game\objects\items\explosives\mine.dm"
#include "code\game\objects\items\explosives\plastique.dm"
+#include "code\game\objects\items\explosives\grenades\bullet_grenade.dm"
#include "code\game\objects\items\explosives\grenades\chem_grenade.dm"
#include "code\game\objects\items\explosives\grenades\emgrenade.dm"
#include "code\game\objects\items\explosives\grenades\flashbang.dm"
@@ -1976,6 +1977,7 @@
#include "code\modules\tgui\tgui_window.dm"
#include "code\modules\tgui\states\access.dm"
#include "code\modules\tgui\states\admin.dm"
+#include "code\modules\tgui\states\alamo.dm"
#include "code\modules\tgui\states\always.dm"
#include "code\modules\tgui\states\conscious.dm"
#include "code\modules\tgui\states\contained.dm"
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index dbc7b67d8f7bb..020f3c23077d5 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -3,6 +3,9 @@
* SPDX-License-Identifier: MIT
*/
+@use 'sass:map';
+@use 'sass:color';
+
em {
font-style: normal;
font-weight: bold;
@@ -1022,38 +1025,118 @@ h2.alert {
border-bottom: 1px dashed #fff;
}
-.faction_alert {
- background: #4d0000;
- margin: 0.5em;
- padding: 0.5em 0.5em 0.5em 0.5em;
- color: #ffffff;
- font-weight: bold;
- display: flex;
- flex-direction: column;
- background-image: repeating-linear-gradient(
- -45deg,
- transparent,
- transparent 10px,
- #420000 10px,
- #420000 20px
- );
-}
+$alert-stripe-colors: (
+ 'default': #00283a,
+ 'green': #003d00,
+ 'blue': #00283a,
+ 'pink': #30001b,
+ 'yellow': #574a00,
+ 'orange': #593400,
+ 'red': #420000,
+ 'purple': #2c0030,
+ 'grey': #252525,
+);
+
+$alert-stripe-alternate-colors: (
+ 'default': #003045,
+ 'green': #004700,
+ 'blue': #003045,
+ 'pink': #400025,
+ 'yellow': #4d4100,
+ 'orange': #6b4200,
+ 'red': #520000,
+ 'purple': #38003d,
+ 'grey': #292929,
+);
+
+$alert-major-header-colors: (
+ 'default': #33d5ff,
+ 'green': #00ff80,
+ 'blue': #33d5ff,
+ 'pink': #ff5297,
+ 'yellow': #fff4e0,
+ 'orange': #feefe7,
+ 'red': #ff5297,
+ 'purple': #c7a1f7,
+ 'grey': #ff5297,
+);
+
+$alert-subheader-header-colors: (
+ 'default': #ff5297,
+ 'green': #ff85b5,
+ 'blue': #ff5297,
+ 'pink': #33d5ff,
+ 'yellow': #33d5ff,
+ 'orange': #33d5ff,
+ 'red': #33d5ff,
+ 'purple': #33d5ff,
+ 'grey': #33d5ff,
+);
+
+$border-width: 4;
+
+$border-width-px: $border-width * 1px;
+
.faction_alert_text {
- color: #ffffff;
- background: #240000;
- padding: 1em 1em 1em 1em;
+ background: #202020;
+ padding: 0.5rem 0.5rem;
}
.faction_alert_subtitle {
- color: #ffffff;
- padding: 0.5em 0.5em 0.5em 0.5em;
+ padding: 0 0.5rem;
+ padding-top: 0.25rem;
+ font-size: 125%;
}
.faction_alert_title {
- color: #ffffff;
- padding: 0.35em 0.35em 0 0.35em;
+ padding: 0 0.5rem;
font-size: 185%;
}
.faction_alert_minortitle {
- color: #ffffff;
- padding: 0.35em 0.35em 0.35em 0.35em;
- font-size: 135%;
+ padding: 0 0.5rem;
+ font-size: 150%;
+}
+.alert_header {
+ padding: 0.5rem 0;
+ display: flex;
+ flex-direction: column;
+}
+
+@each $color-name, $color-value in $alert-stripe-colors {
+ .faction_alert_#{$color-name} {
+ color: #ffffff;
+ box-shadow: none;
+ font-weight: bold;
+ margin: 1rem 0 1rem 0;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ border-image: repeating-linear-gradient(
+ -45deg,
+ map.get($alert-stripe-alternate-colors, $color-name),
+ map.get($alert-stripe-alternate-colors, $color-name) 10px,
+ $color-value 10px,
+ $color-value 20px
+ );
+ border-image-slice: $border-width fill;
+ border-width: $border-width-px;
+ border-image-width: $border-width-px;
+ border-image-outset: 0 0 0 0;
+ border-image-repeat: repeat repeat;
+ border-style: solid;
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_title {
+ color: map.get($alert-major-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_minortitle {
+ color: map.get($alert-major-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_subtitle {
+ color: map.get($alert-subheader-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_text {
+ background-color: darken(map.get($alert-stripe-colors, $color-name), 5);
+ }
}
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index cfe9e35a5c22f..6ec78262c511d 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -3,6 +3,9 @@
* SPDX-License-Identifier: MIT
*/
+@use 'sass:map';
+@use 'sass:color';
+
html,
body {
padding: 0;
@@ -1055,38 +1058,122 @@ h2.alert {
border-bottom: 1px dashed #000;
}
-.faction_alert {
- background: #ffadad;
- margin: 0.5em;
- padding: 0.5em 0.5em 0.5em 0.5em;
- color: #cecece;
- font-weight: bold;
- display: flex;
- flex-direction: column;
- background-image: repeating-linear-gradient(
- -45deg,
- transparent,
- transparent 10px,
- #ff9999 10px,
- #ff9999 20px
- );
-}
+$alert-stripe-colors: (
+ 'default': #b3bfff,
+ 'green': #adffad,
+ 'blue': #b3bfff,
+ 'pink': #ffb3df,
+ 'yellow': #fff3b3,
+ 'orange': #ffe2b3,
+ 'red': #ffb3b3,
+ 'purple': #fac2ff,
+ 'grey': #e3e3e3,
+);
+
+$alert-stripe-alternate-colors: (
+ 'default': #bdc8ff,
+ 'green': #bdffbd,
+ 'blue': #bdc8ff,
+ 'pink': #ffc2e5,
+ 'yellow': #fff5c2,
+ 'orange': #ffe8c2,
+ 'red': #ffc2c2,
+ 'purple': #fbd1ff,
+ 'grey': #ebebeb,
+);
+
+$alert-major-header-colors: (
+ 'default': #003061,
+ 'green': #005229,
+ 'blue': #003061,
+ 'pink': #800033,
+ 'yellow': #754900,
+ 'orange': #823208,
+ 'red': #800029,
+ 'purple': #450d8c,
+ 'grey': #800033,
+);
+
+$alert-subheader-header-colors: (
+ 'default': #6b0020,
+ 'green': #6b0020,
+ 'blue': #6b0020,
+ 'pink': #002c85,
+ 'yellow': #002c85,
+ 'orange': #002c85,
+ 'red': #002c85,
+ 'purple': #002c85,
+ 'grey': #002c85,
+);
+
+$border-width: 4;
+
+$border-width-px: $border-width * 1px;
+
.faction_alert_text {
- color: #0e0e0e;
- background: #fcc3c3;
- padding: 1em 1em 1em 1em;
+ color: #202020;
+ background: #eaeaea;
+ padding: 0.5rem 0.5rem;
}
.faction_alert_subtitle {
- color: #000000;
- padding: 0.5em 0.5em 0.5em 0.5em;
+ padding: 0 0.5rem;
+ padding-top: 0.25rem;
+ font-size: 125%;
}
.faction_alert_title {
- color: #000000;
- padding: 0.35em 0.35em 0 0.35em;
+ padding: 0 0.5rem;
font-size: 185%;
}
.faction_alert_minortitle {
- color: #000000;
- padding: 0.35em 0.35em 0.35em 0.35em;
- font-size: 135%;
+ padding: 0 0.5rem;
+ font-size: 150%;
+}
+.alert_header {
+ padding: 0.5rem 0;
+ display: flex;
+ flex-direction: column;
+}
+
+@each $color-name, $color-value in $alert-stripe-colors {
+ .faction_alert_#{$color-name} {
+ color: #ffffff;
+ box-shadow: none;
+ font-weight: bold;
+ margin: 1rem 0 1rem 0;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ border-image: repeating-linear-gradient(
+ -45deg,
+ map.get($alert-stripe-alternate-colors, $color-name),
+ map.get($alert-stripe-alternate-colors, $color-name) 10px,
+ $color-value 10px,
+ $color-value 20px
+ );
+ border-image-slice: $border-width fill;
+ border-width: $border-width-px;
+ border-image-width: $border-width-px;
+ border-image-outset: 0 0 0 0;
+ border-image-repeat: repeat repeat;
+ border-style: solid;
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_title {
+ color: map.get($alert-major-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_minortitle {
+ color: map.get($alert-major-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_subtitle {
+ color: map.get($alert-subheader-header-colors, $color-name);
+ }
+
+ .faction_alert_#{$color-name} .faction_alert_text {
+ background-color: lighten(
+ map.get($alert-stripe-alternate-colors, $color-name),
+ 5
+ );
+ }
}
diff --git a/tgui/packages/tgui/interfaces/MarineDropship.jsx b/tgui/packages/tgui/interfaces/MarineDropship.jsx
index 7aeff6a4acd7d..1c6592ee021d7 100644
--- a/tgui/packages/tgui/interfaces/MarineDropship.jsx
+++ b/tgui/packages/tgui/interfaces/MarineDropship.jsx
@@ -13,18 +13,27 @@ export const MarineDropship = (props) => {
const { act, data } = useBackend();
return (
-
-
- {!data.hijack_state ? (
-
- POSSIBLE HIJACK
- SYSTEMS REBOOTING...
-
- ) : (
-
- )}
-
-
+ <>
+ {data.is_human ? (
+
+
+ {!data.hijack_state ? (
+
+ POSSIBLE HIJACK
+ SYSTEMS REBOOTING...
+
+ ) : (
+
+ )}
+
+
+ ) : (
+
+
+
+ )}
+ ;
+ >
);
};
@@ -136,3 +145,26 @@ const NormalOperation = (props) => {
>
);
};
+
+const CorruptedOperation = (props) => {
+ const { act, data } = useBackend();
+ return (
+
+
+
+ Status: {data.ship_status}
+
+
+
+
+
+
+
+
+
+ );
+};