diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index 4242fcba0327..ff730ff082bd 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -1761,9 +1761,9 @@ pixel_y = -5 }, /obj/item/ammo_casing/a4570, -/obj/item/ammo_box/magazine/aks74u, -/obj/item/ammo_box/magazine/aks74u, -/obj/item/ammo_box/magazine/aks74u, +/obj/item/ammo_box/magazine/skm_545_39, +/obj/item/ammo_box/magazine/skm_545_39, +/obj/item/ammo_box/magazine/skm_545_39, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/illestren_a850r, /turf/open/floor/plasteel/tech, @@ -1839,7 +1839,7 @@ /obj/structure/railing/corner{ dir = 8 }, -/mob/living/simple_animal/hostile/frontier/ranged/trooper/ak47/neutured, +/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm/neutured, /turf/open/floor/plasteel/stairs{ dir = 1 }, @@ -2281,7 +2281,7 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/secure/gear, -/obj/item/gun/ballistic/automatic/smg/aks74u{ +/obj/item/gun/ballistic/automatic/smg/skm_carbine{ pixel_y = -6 }, /obj/item/gun/ballistic/automatic/zip_pistol, diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm index 720ed17fc830..bdd58e286f25 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm @@ -155,7 +155,7 @@ /obj/effect/decal/cleanable/blood/tracks, /obj/effect/decal/cleanable/blood/splatter, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/gun/ballistic/automatic/smg/aks74u, +/obj/item/gun/ballistic/automatic/smg/skm_carbine, /obj/item/ammo_casing{ dir = 10; pixel_x = -7; @@ -958,7 +958,7 @@ pixel_y = 11 }, /obj/effect/gibspawner/human, -/obj/item/ammo_box/magazine/aks74u, +/obj/item/ammo_box/magazine/skm_545_39, /turf/open/floor/plasteel/tech, /area/ship/science) "oJ" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index 379e35a7d2f9..f8b569cebdf4 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -995,8 +995,8 @@ /area/overmap_encounter/planetoid/sand/explored) "KJ" = ( /obj/structure/table, -/obj/item/gun/ballistic/automatic/smg/aks74u, -/obj/item/ammo_box/magazine/aks74u, +/obj/item/gun/ballistic/automatic/smg/skm_carbine, +/obj/item/ammo_box/magazine/skm_545_39, /turf/open/floor/concrete, /area/ruin) "Ld" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index bd415e97bae8..d4bd622b8f0e 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2207,9 +2207,6 @@ /obj/structure/table/wood/fancy, /turf/open/floor/wood, /area/wizard_station) -"axw" = ( -/turf/open/floor/engine/cult, -/area/wizard_station) "axx" = ( /obj/machinery/vending/snack, /turf/open/floor/engine/cult, @@ -12592,10 +12589,10 @@ dir = 8 }, /obj/structure/rack, -/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ +/obj/item/gun/ballistic/automatic/assault/skm/inteq{ pixel_y = 3 }, -/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ +/obj/item/gun/ballistic/automatic/assault/skm/inteq{ pixel_y = -1; pixel_x = -5 }, @@ -14665,20 +14662,6 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"sow" = ( -/obj/structure/table/wood, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/centcom/control) "spy" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 1 @@ -15212,10 +15195,10 @@ }, /obj/effect/turf_decal/corner/opaque/yellow, /obj/structure/rack, -/obj/item/gun/ballistic/automatic/smg/inteq{ +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq{ pixel_x = 2 }, -/obj/item/gun/ballistic/automatic/smg/inteq{ +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq{ pixel_x = -1; pixel_y = -6 }, @@ -23555,7 +23538,7 @@ aqZ aqZ aqZ awN -axw +aqZ aqE aqZ aqZ @@ -64657,7 +64640,7 @@ aiH mpw rzn ail -sow +gDP gTh agb aqg diff --git a/_maps/shuttles/independent/independent_halftrack.dmm b/_maps/shuttles/independent/independent_halftrack.dmm index 46e6989a124f..3b04da3c56dc 100644 --- a/_maps/shuttles/independent/independent_halftrack.dmm +++ b/_maps/shuttles/independent/independent_halftrack.dmm @@ -1502,12 +1502,12 @@ /obj/structure/closet/secure_closet/security, /obj/item/gun/ballistic/automatic/pistol/deagle, /obj/item/gun/ballistic/automatic/pistol/deagle, -/obj/item/gun/ballistic/automatic/assault/ak47, -/obj/item/gun/ballistic/automatic/assault/ak47, -/obj/item/ammo_box/magazine/ak47, -/obj/item/ammo_box/magazine/ak47, -/obj/item/ammo_box/magazine/ak47, -/obj/item/ammo_box/magazine/ak47, +/obj/item/gun/ballistic/automatic/assault/skm, +/obj/item/gun/ballistic/automatic/assault/skm, +/obj/item/ammo_box/magazine/skm_762_40, +/obj/item/ammo_box/magazine/skm_762_40, +/obj/item/ammo_box/magazine/skm_762_40, +/obj/item/ammo_box/magazine/skm_762_40, /obj/item/ammo_box/magazine/m50, /obj/item/ammo_box/magazine/m50, /obj/item/ammo_box/magazine/m50, diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm index 1ebfe3d028af..4efdcb0ba74c 100644 --- a/_maps/shuttles/inteq/inteq_colossus.dmm +++ b/_maps/shuttles/inteq/inteq_colossus.dmm @@ -718,6 +718,39 @@ }, /turf/open/floor/plasteel/dark, /area/ship/security) +"hx" = ( +/obj/item/clothing/glasses/hud/security/sunglasses/inteq, +/obj/item/clothing/mask/gas/sechailer/inteq, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/shoes/combat, +/obj/item/storage/belt/security/webbing/inteq/alt, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/under/syndicate/inteq/skirt, +/obj/item/clothing/under/syndicate/inteq, +/obj/structure/closet/secure_closet{ + anchored = 1; + can_be_unanchored = 1; + icon_state = "warden"; + name = "master at arms' locker"; + req_access_txt = "3" + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/suit/armor/vest/bulletproof, +/obj/item/megaphone/sec, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/item/storage/belt/security/webbing/inteq, +/obj/item/storage/belt/military/assault, +/obj/item/reagent_containers/spray/pepper, +/obj/item/clothing/head/warden/inteq, +/obj/item/clothing/suit/armor/vest/security/warden/inteq, +/turf/open/floor/plasteel/dark, +/area/ship/security) "hD" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/hallway/port) @@ -810,41 +843,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ship/maintenance/port) -"iS" = ( -/obj/item/clothing/glasses/hud/security/sunglasses/inteq, -/obj/item/clothing/mask/gas/sechailer/inteq, -/obj/item/clothing/gloves/tackler/combat/insulated, -/obj/item/clothing/shoes/combat, -/obj/item/storage/belt/security/webbing/inteq/alt, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/under/syndicate/inteq/skirt, -/obj/item/clothing/under/syndicate/inteq, -/obj/structure/closet/secure_closet{ - anchored = 1; - can_be_unanchored = 1; - icon_state = "warden"; - name = "master at arms' locker"; - req_access_txt = "3" - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/head/warden/drill{ - desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."; - name = "master at arms' campaign hat" - }, -/obj/item/megaphone/sec, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/item/storage/belt/security/webbing/inteq, -/obj/item/storage/belt/military/assault, -/obj/item/reagent_containers/spray/pepper, -/turf/open/floor/plasteel/dark, -/area/ship/security) "iT" = ( /obj/machinery/vending/snack/random, /obj/effect/turf_decal/trimline/opaque/yellow/line, @@ -1442,27 +1440,7 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/plating, /area/ship/engineering) -"qR" = ( -/obj/effect/turf_decal/industrial/traffic{ - dir = 4 - }, -/obj/machinery/navbeacon/wayfinding{ - codes_txt = "patrol;next_patrol=office"; - location = "port" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"qS" = ( -/obj/structure/dresser, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"qX" = ( +"qQ" = ( /obj/structure/rack, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 10; @@ -1479,12 +1457,32 @@ pixel_x = 5; pixel_y = 5 }, -/obj/item/gun/ballistic/automatic/smg/inteq{ +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq{ pixel_y = -2 }, /obj/machinery/airalarm/directional/west, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) +"qR" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/machinery/navbeacon/wayfinding{ + codes_txt = "patrol;next_patrol=office"; + location = "port" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"qS" = ( +/obj/structure/dresser, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "rb" = ( /obj/machinery/power/shieldwallgen/atmos{ anchored = 1; @@ -5084,7 +5082,7 @@ Kv EI Dq MQ -qX +qQ PV "} (23,1,1) = {" @@ -5172,7 +5170,7 @@ eM pd gX WC -iS +hx XA "} (27,1,1) = {" diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index 2fc73b689d88..fc586a5aa7b3 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -580,13 +580,13 @@ /obj/item/gun/ballistic/automatic/pistol/commander/inteq{ pixel_y = -5 }, -/obj/item/ammo_box/magazine/ak47{ +/obj/item/ammo_box/magazine/skm_762_40{ pixel_x = -7 }, -/obj/item/ammo_box/magazine/ak47{ +/obj/item/ammo_box/magazine/skm_762_40{ pixel_x = 7 }, -/obj/item/gun/ballistic/automatic/assault/ak47/inteq{ +/obj/item/gun/ballistic/automatic/assault/skm/inteq{ pixel_x = -5 }, /obj/structure/closet/secure_closet/wall{ @@ -2384,7 +2384,7 @@ pixel_x = -11; pixel_y = 5 }, -/obj/item/storage/toolbox/ammo/a762_39{ +/obj/item/ammo_box/a762_40/inteq{ pixel_x = 5; pixel_y = 12 }, diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 24e272c4d2b5..76cafb956cdd 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -1920,16 +1920,14 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/head/warden/drill{ - desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."; - name = "master at arms' campaign hat" - }, /obj/item/megaphone/sec, /obj/structure/sign/poster/contraband/eoehoma{ pixel_y = -32 }, /obj/item/storage/belt/security/webbing/inteq/alt, /obj/item/storage/belt/security/webbing/inteq, +/obj/item/clothing/head/warden/inteq, +/obj/item/clothing/suit/armor/vest/security/warden/inteq, /turf/open/floor/plasteel/dark, /area/ship/security) "ms" = ( diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index e65b103e6ebe..340eb8ec6739 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -1971,10 +1971,6 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/armor/vest/bulletproof, -/obj/item/clothing/head/warden/drill{ - desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."; - name = "master at arms' campaign hat" - }, /obj/item/megaphone/sec, /obj/effect/turf_decal/corner/opaque/brown{ dir = 4 @@ -1986,6 +1982,8 @@ }, /obj/machinery/power/apc/auto_name/directional/east, /obj/machinery/light/small/directional/south, +/obj/item/clothing/head/warden/inteq, +/obj/item/clothing/suit/armor/vest/security/warden/inteq, /turf/open/floor/plasteel/dark, /area/ship/security) "Eh" = ( diff --git a/_maps/shuttles/subshuttles/frontiersmen_gut.dmm b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm index 3b05c2224080..6044e1011891 100644 --- a/_maps/shuttles/subshuttles/frontiersmen_gut.dmm +++ b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm @@ -203,7 +203,7 @@ /obj/effect/turf_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/secure/gear, -/obj/item/gun/ballistic/automatic/smg/aks74u{ +/obj/item/gun/ballistic/automatic/smg/skm_carbine{ pixel_y = -6 }, /obj/item/gun/ballistic/automatic/zip_pistol, diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 8a25babbb010..82a8a31ba86b 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -130,6 +130,7 @@ str_val = trim(str_val) if (str_val != "") config_entry_value += str_val + return TRUE /datum/config_entry/number_list abstract_type = /datum/config_entry/number_list diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index a89e65715d6a..c00938077751 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -48,3 +48,7 @@ /obj/effect/projectile/impact/pgf name = "beam impact" icon_state = "impact_pgf" + +/obj/effect/projectile/impact/pgf/rifle + name = "beam impact" + icon_state = "impact_pgf_rifle" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index e684c2826bca..8fe5e7cf5340 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -33,8 +33,11 @@ /obj/effect/projectile/muzzle/wormhole icon_state = "wormhole_g" +/obj/effect/projectile/muzzle/kalix + icon_state = "muzzle_kalix" + /obj/effect/projectile/muzzle/pgf icon_state = "muzzle_pgf" -/obj/effect/projectile/muzzle/kalix - icon_state = "muzzle_kalix" +/obj/effect/projectile/muzzle/pgf/rifle + icon_state = "muzzle_pgf_rifle" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 776e6841d29c..d7e867ed03ac 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -71,8 +71,11 @@ /obj/effect/projectile/tracer/wormhole icon_state = "wormhole_g" +/obj/effect/projectile/tracer/kalix + icon_state = "beam_kalix" + /obj/effect/projectile/tracer/pgf icon_state = "beam_pgf" -/obj/effect/projectile/tracer/kalix - icon_state = "beam_kalix" +/obj/effect/projectile/tracer/pgf/rifle + icon_state = "beam_pgf_rifle" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 4cf963958022..10d3531b68d3 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -933,10 +933,10 @@ item_state = "inteq_webbing" supports_variations = VOX_VARIATION -/obj/item/storage/belt/security/webbing/inteq/ak47/PopulateContents() +/obj/item/storage/belt/security/webbing/inteq/skm/PopulateContents() . = ..() - for(var/i in 1 to 7) - new /obj/item/ammo_box/magazine/ak47(src) + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/skm_762_40(src) /obj/item/storage/belt/security/webbing/inteq/alt name = "inteq drop pouch harness" diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 312ce3e14d0f..c194ea84daea 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -241,11 +241,11 @@ for(var/i in 1 to 7) new /obj/item/ammo_box/magazine/illestren_a850r(src) -/obj/item/storage/toolbox/ammo/a762_39/PopulateContents() - name = "ammo can (7.62x39mm)" +/obj/item/storage/toolbox/ammo/a762_40/PopulateContents() + name = "ammo can (7.62x40mm CLIP)" icon_state = "ammobox_762" for (var/i in 1 to 4) - new /obj/item/ammo_box/a762_39(src) + new /obj/item/ammo_box/a762_40(src) /obj/item/storage/toolbox/ammo/a308/PopulateContents() name = "ammo can (.308)" diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 79b3bb780f25..ce69eb3d4b0d 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -171,11 +171,11 @@ /obj/item/ammo_box/magazine/ebr) cost = 2000 -/datum/supply_pack/ammo/ak47_ammo - name = "SVG 7.62x39mm FMJ Magazine Crate" - desc = "Contains two 7.62x39mm FMJ magazines for the SVG rifle, each containing twenty rounds." - contains = list(/obj/item/ammo_box/magazine/ak47, - /obj/item/ammo_box/magazine/ak47) +/datum/supply_pack/ammo/skm_ammo + name = "SKM 7.62x40mm CLIP Magazine Crate" + desc = "Contains two 7.62x40mm magazines for the SKM rifles, each containing twenty rounds." + contains = list(/obj/item/ammo_box/magazine/skm_762_40, + /obj/item/ammo_box/magazine/skm_762_40) cost = 2000 /datum/supply_pack/ammo/p16_ammo @@ -185,9 +185,9 @@ /obj/item/ammo_box/magazine/p16) cost = 2000 -/datum/supply_pack/ammo/a762_ammo - name = "8x50mmR Stripper Clip Crate" - desc = "Contains four 8x50mmR stripper clips for rifles like the illestren rifle, each containing five rounds." +/datum/supply_pack/ammo/a850r_ammo + name = "8x50mmR En Bloc Clip Crate" + desc = "Contains four 8x50mmR en bloc clips for rifles like the illestren rifle, each containing five rounds." contains = list(/obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/illestren_a850r, /obj/item/ammo_box/magazine/illestren_a850r, @@ -195,9 +195,9 @@ cost = 1000 /datum/supply_pack/ammo/a762_ammo_box - name = "7.62x39mm Ammo Box Crate" - desc = "Contains a sixty-round 7.62x39mm box for rifles like the SVG-67." - contains = list(/obj/item/ammo_box/a762_39) + name = "7.62x40mm CLIP Ammo Box Crate" + desc = "Contains a eighty-round 7.62x40mm CLIP box for the SKM rifles." + contains = list(/obj/item/ammo_box/a762_40) cost = 500 /datum/supply_pack/ammo/c556mmHITP_ammo_box diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index f5c617c971cb..c75e16b348cc 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -65,6 +65,14 @@ /obj/item/gun/energy/laser) crate_name = "laser crate" +/datum/supply_pack/gun/laser + name = "Mini Energy Gun Crate" + desc = "Contains two small, versatile energy guns, capable of firing both nonlethal and lethal blasts, but with a limited power cell." + cost = 1500 + contains = list(/obj/item/gun/energy/e_gun/mini, + /obj/item/gun/energy/e_gun/mini) + crate_name = "laser crate" + /datum/supply_pack/gun/energy name = "Energy Guns Crate" desc = "Contains two versatile energy guns, capable of firing both nonlethal and lethal blasts of light." @@ -148,12 +156,12 @@ /obj/item/gun/ballistic/automatic/assault/p16) crate_name = "auto rifle crate" -/datum/supply_pack/gun/ak - name = "SVG-67 Rifle Crate" - desc = "Contains two high-powered, automatic rifles chambered in 7.62x39mm." +/datum/supply_pack/gun/skm + name = "SKM-24 Rifle Crate" + desc = "Contains two high-powered, automatic rifles chambered in 7.62x40mm CLIP." cost = 6000 - contains = list(/obj/item/gun/ballistic/automatic/assault/ak47, - /obj/item/gun/ballistic/automatic/assault/ak47) + contains = list(/obj/item/gun/ballistic/automatic/assault/skm, + /obj/item/gun/ballistic/automatic/assault/skm) crate_name = "auto rifle crate" /* diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index b569faf75b10..6c068124ce55 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -170,10 +170,10 @@ colour = "#ffff66" /datum/client_colour/glass_colour/red - colour = "#ffaaaa" + colour = "#ffbfcf" /datum/client_colour/glass_colour/darkred - colour = "#bb5555" + colour = "#e5a5b5" /datum/client_colour/glass_colour/orange colour = "#ffbb99" @@ -182,7 +182,10 @@ colour = "#ffddaa" /datum/client_colour/glass_colour/purple - colour = "#ff99ff" + colour = "#ffbbff" + +/datum/client_colour/glass_colour/darkpurple + colour = "#dd99dd" /datum/client_colour/glass_colour/gray colour = "#cccccc" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 6b289f944b8b..70a9fe677263 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -39,6 +39,12 @@ . = ..() if(. && user) user.update_sight() + if(icon_state == "welding-g") + change_glass_color(user, /datum/client_colour/glass_colour/gray) + else if(icon_state == "bustin-g") + change_glass_color(user, /datum/client_colour/glass_colour/green) + else + change_glass_color(user, null) //called when thermal glasses are emped. /obj/item/clothing/glasses/proc/thermal_overload() @@ -238,6 +244,7 @@ icon_state = "sunhudbeer" desc = "A pair of sunglasses outfitted with apparatus to scan reagents, as well as providing an innate understanding of liquid viscosity while in motion." clothing_flags = SCAN_REAGENTS + glass_colour_type = /datum/client_colour/glass_colour/orange /obj/item/clothing/glasses/sunglasses/reagent/equipped(mob/user, slot) . = ..() @@ -253,6 +260,7 @@ icon_state = "sunhudsci" desc = "A pair of tacky purple sunglasses that allow the wearer to recognize various chemical compounds with only a glance." clothing_flags = SCAN_REAGENTS + glass_colour_type = /datum/client_colour/glass_colour/darkpurple /obj/item/clothing/glasses/sunglasses/garb name = "black gar glasses" diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index fd802cf55ec6..b267db209293 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -92,6 +92,7 @@ item_state = "glasses" flash_protect = FLASH_PROTECTION_FLASH tint = 1 + glass_colour_type = /datum/client_colour/glass_colour/orange /obj/item/clothing/glasses/hud/security name = "security HUD" @@ -260,6 +261,7 @@ icon_state = "inteq_goggles" item_state = "inteq_goggles" supports_variations = KEPORI_VARIATION + glass_colour_type = /datum/client_colour/glass_colour/orange /obj/item/clothing/glasses/hud/health/prescription name = "prescription health scanner HUD" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 0c61c587044f..9392425de555 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -216,6 +216,11 @@ dog_fashion = /datum/dog_fashion/head/cowboy +/obj/item/clothing/head/warden/inteq + name = "master at arms' campaign hat" + desc = "A special armored campaign hat with the IRMG insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." + icon_state = "maahat" + /obj/item/clothing/head/warden/drill name = "warden's campaign hat" desc = "A special armored campaign hat with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection." diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index 431170b5f3dc..2fa4316b6448 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -83,7 +83,7 @@ if(prob(10)) belt = /obj/item/storage/belt/grenade/full if("Ammo Carrier") - backpack_contents += list(/obj/item/ammo_box/a762_39 = 1) + backpack_contents += list(/obj/item/ammo_box/a762_40 = 1) var/weapon = pick(list("Bolt-Action", "Pistol", "Melee")) switch(weapon) diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index 5a39d3ea3da4..c5ef123a21cf 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -7,11 +7,11 @@ glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq uniform = /obj/item/clothing/under/syndicate/inteq suit = /obj/item/clothing/suit/space/hardsuit/syndi/inteq - suit_store = /obj/item/gun/ballistic/automatic/assault/ak47/inteq + suit_store = /obj/item/gun/ballistic/automatic/assault/skm/inteq gloves = /obj/item/clothing/gloves/combat ears = /obj/item/radio/headset/inteq/alt id = /obj/item/card/id - belt = /obj/item/storage/belt/security/webbing/inteq/ak47 + belt = /obj/item/storage/belt/security/webbing/inteq/skm back = /obj/item/storage/backpack/fireproof l_pocket = /obj/item/kitchen/knife/combat diff --git a/code/modules/clothing/outfits/factions/inteq.dm b/code/modules/clothing/outfits/factions/inteq.dm index 48702c064447..49512039d4c6 100644 --- a/code/modules/clothing/outfits/factions/inteq.dm +++ b/code/modules/clothing/outfits/factions/inteq.dm @@ -188,12 +188,12 @@ job_icon = "warden" ears = /obj/item/radio/headset/inteq/alt + head = /obj/item/clothing/head/warden/inteq uniform = /obj/item/clothing/under/syndicate/inteq - head = /obj/item/clothing/head/beret/sec/hos/inteq glasses = /obj/item/clothing/glasses/hud/security/sunglasses/inteq mask = /obj/item/clothing/mask/gas/sechailer/inteq belt = /obj/item/storage/belt/military/assault - suit = /obj/item/clothing/suit/armor/vest/alt + suit = /obj/item/clothing/suit/armor/vest/security/warden/inteq dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 5bd84e801382..c3787de67e83 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -112,6 +112,11 @@ resistance_flags = FLAMMABLE dog_fashion = null +/obj/item/clothing/suit/armor/vest/security/warden/inteq + name = "master at arms' armored coat" + desc = "A brown armored coat with a bulletproof vest over it, usually worn by the Master At Arms of the IRMG." + icon_state = "maacoat" + /obj/item/clothing/suit/armor/vest/security/warden/alt name = "warden's armored jacket" desc = "A white jacket with silver rank pips and body armor strapped on top." diff --git a/code/modules/interview/interview.dm b/code/modules/interview/interview.dm index c1ed4dcd87ec..27b2c83321f7 100644 --- a/code/modules/interview/interview.dm +++ b/code/modules/interview/interview.dm @@ -60,7 +60,7 @@ GLOB.interviews.approved_ckeys |= owner_ckey GLOB.interviews.close_interview(src) log_admin_private("[key_name(approved_by)] has approved interview #[id] for [owner_ckey][!owner ? "(DC)": ""].") - message_admins("[key_name(approved_by)] has approved interview #[id] for [owner_ckey][!owner ? "(DC)": ""].") + message_admins("[key_name(approved_by)] has approved [link_self()] for [owner_ckey][!owner ? "(DC)": ""].") if (owner) SEND_SOUND(owner, sound('sound/effects/adminhelp.ogg')) to_chat(owner, "-- Interview Update --" \ @@ -79,7 +79,7 @@ GLOB.interviews.close_interview(src) GLOB.interviews.cooldown_ckeys |= owner_ckey log_admin_private("[key_name(denied_by)] has denied interview #[id] for [owner_ckey][!owner ? "(DC)": ""].") - message_admins("[key_name(denied_by)] has denied interview #[id] for [owner_ckey][!owner ? "(DC)": ""].") + message_admins("[key_name(denied_by)] has denied [link_self()] for [owner_ckey][!owner ? "(DC)": ""].") addtimer(CALLBACK(GLOB.interviews, TYPE_PROC_REF(/datum/interview_manager, release_from_cooldown), owner_ckey), 180) if (owner) SEND_SOUND(owner, sound('sound/effects/adminhelp.ogg')) @@ -160,3 +160,9 @@ "response" = responses.len < i ? null : responses[i] ) .["questions"] += list(data) + +/** + * Generates a clickable link to open this interview + */ +/datum/interview/proc/link_self() + return "Interview #[id]" diff --git a/code/modules/interview/interview_manager.dm b/code/modules/interview/interview_manager.dm index 05ced3b102d8..f5a557a854de 100644 --- a/code/modules/interview/interview_manager.dm +++ b/code/modules/interview/interview_manager.dm @@ -109,7 +109,7 @@ GLOBAL_DATUM_INIT(interviews, /datum/interview_manager, new) if(X.prefs.toggles & SOUND_ADMINHELP) SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) window_flash(X, ignorepref = TRUE) - to_chat(X, "Interview for [ckey] enqueued for review. Current position in queue: [to_queue.pos_in_queue]", confidential = TRUE) + to_chat(X, "[to_queue.link_self()] for [ckey] enqueued for review. Current position in queue: [to_queue.pos_in_queue]", confidential = TRUE) /** * Removes a ckey from the cooldown list, used for enforcing cooldown after an interview is denied. diff --git a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/frontiersman.dm index 3d33bae0aca1..213cd8c2b822 100644 --- a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/frontiersman.dm @@ -68,17 +68,17 @@ /mob/living/simple_animal/hostile/frontier/ranged/trooper/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/ak47 +/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm icon_state = "frontiersmanrangedak47" icon_living = "frontiersmanrangedak47" - projectilesound = 'sound/weapons/gun/rifle/ak47.ogg' + projectilesound = 'sound/weapons/gun/rifle/skm.ogg' rapid = 4 rapid_fire_delay = 3 - casingtype = /obj/item/ammo_casing/a762_39 + casingtype = /obj/item/ammo_casing/a762_40 loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, - /obj/item/gun/ballistic/automatic/assault/ak47) + /obj/item/gun/ballistic/automatic/assault/skm) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/ak47/neutured +/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm/neutured loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) /mob/living/simple_animal/hostile/frontier/ranged/trooper/rifle diff --git a/code/modules/mob/living/simple_animal/hostile/survivors.dm b/code/modules/mob/living/simple_animal/hostile/survivors.dm index a1b52f981cec..bc7573552bc5 100644 --- a/code/modules/mob/living/simple_animal/hostile/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/survivors.dm @@ -282,7 +282,7 @@ if(survivor_type == "gunslinger") if(prob(50)) - l_pocket = /obj/item/ammo_box/magazine/aks74u + l_pocket = /obj/item/ammo_box/magazine/skm_545_39 r_pocket = /obj/item/tank/internals/emergency_oxygen/engi else @@ -330,7 +330,7 @@ suit_store = null if(survivor_type == "gunslinger") if(prob(20)) - new /obj/item/gun/ballistic/automatic/smg/aks74u(loc) + new /obj/item/gun/ballistic/automatic/smg/skm_carbine(loc) else visible_message("The gunslinger's weapon shatters as they impact the ground!") suit_store = null diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index a615fc97d2fa..685458406584 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -34,7 +34,7 @@ caliber = "5.56x45mm" projectile_type = /obj/projectile/bullet/a556_45 -// 5.45x39mm (AKS-74U) +// 5.45x39mm (SKM-24v) /obj/item/ammo_casing/a545_39 name = "5.45x39mm bullet casing" @@ -42,7 +42,6 @@ icon_state = "rifle-brass" caliber = "5.45x39mm" randomspread = TRUE - variance = 2 projectile_type = /obj/projectile/bullet/a545_39 /obj/item/ammo_casing/a545_39/recycled @@ -50,18 +49,16 @@ desc = "A recycled 5.45x39mm bullet casing." bullet_skin = "surplus" caliber = "5.45x39mm" - variance = 3.5 projectile_type = /obj/projectile/bullet/a545_39 -// 7.62x39mm (SVG-67 & SkM-24) +// 7.62x40mm CLIP (SKM Rifles) -/obj/item/ammo_casing/a762_39 - name = "7.62x39mm bullet casing" - desc = "A 7.62x39mm bullet casing." +/obj/item/ammo_casing/a762_40 + name = "7.62x40mm CLIP bullet casing" + desc = "A 7.62x40mm CLIP bullet casing." icon_state = "rifle-brass" - caliber = "7.62x39mm" - variance = 2 - projectile_type = /obj/projectile/bullet/a762_39 + caliber = "7.62x40mm" + projectile_type = /obj/projectile/bullet/a762_40 // .300 Blackout (Polymer Survivor Rifle) diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index 37218201902e..d947736d5f25 100644 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -1,4 +1,4 @@ -// 4.6x30mm (WT-550 Automatic Rifle & NT-SVG) +// 4.6x30mm (WT-550 Automatic Rifle & SKM-24v) /obj/item/ammo_casing/c46x30mm name = "4.6x30mm bullet casing" diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 401fab165957..6320cb24b0c6 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -147,6 +147,7 @@ icon_state = "omnilaser" hitscan = TRUE damage = 20 + armour_penetration = -20 damage_type = STAMINA flag = "energy" hitsound = 'sound/weapons/tap.ogg' diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index ab8e65c069bf..a1bfd5e38fec 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -40,7 +40,7 @@ name = "ammo holder (.45-70 hollow point)" desc = "A 6-round ammo holder for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." icon_state = "4570-hp" - ammo_type = /obj/item/ammo_casing/a357/hp + ammo_type = /obj/item/ammo_casing/a4570/hp /obj/item/ammo_box/a4570/explosive name = "ammo holder (.45-70 explosive)" @@ -336,11 +336,15 @@ multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_NORMAL -/obj/item/ammo_box/a762_39 - name = "ammo box (7.62x39mm)" - icon_state = "a762_39box" - ammo_type = /obj/item/ammo_casing/a762_39 - max_ammo = 60 +/obj/item/ammo_box/a762_40 + name = "ammo box (7.62x40mm CLIP)" + icon_state = "a762_40box_big" + ammo_type = /obj/item/ammo_casing/a762_40 + max_ammo = 120 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/a762_40/inteq + icon_state = "a762_40box_big_inteq" /obj/item/ammo_box/a308 name = "ammo box (.308)" diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm index 980272313c1a..60712700c314 100644 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm @@ -34,41 +34,46 @@ . = ..() icon_state = "[base_icon_state]-[round(ammo_count(),5)]" -/obj/item/ammo_box/magazine/aks74u - name = "assault rifle magazine (5.45x39mm)" - desc = "A slightly-curved, 30-round magazine for the AKS-74U. These rounds do moderate damage with good armor penetration." - icon_state = "ak47_mag" - ammo_type = /obj/item/ammo_casing/a545_39 - caliber = "5.45x39mm" - max_ammo = 30 - -/obj/item/ammo_box/magazine/aks74u/update_icon_state() - . = ..() - icon_state = "ak47_mag-[!!ammo_count()]" - -/obj/item/ammo_box/magazine/aknt +/obj/item/ammo_box/magazine/skm_545_39 name = "subcaliber assault rifle magazine (4.6x30mm)" - desc = "A cheap, 30-round polymer magazine for the NT-SVG. These rounds do okay damage with average performance against armor." - icon_state = "ak47_mag" + desc = "A slightly-curved, 30-round magazine for the SKM-24v. These rounds do okay damage with average performance against armor" ammo_type = /obj/item/ammo_casing/c46x30mm caliber = "4.6x30mm" max_ammo = 30 + base_icon_state = "skm_mag" + icon_state = "skm_mag" -/obj/item/ammo_box/magazine/aknt/update_icon_state() +/obj/item/ammo_box/magazine/skm_545_39/update_icon_state() . = ..() - icon_state = "ak47_mag-[!!ammo_count()]" - -/obj/item/ammo_box/magazine/ak47 - name = "assault rifle magazine (7.62x39mm)" - desc = "A sharply-curved, 20-round magazine for 7.62x39mm assault rifles. These rounds do good damage with good armor penetration." - icon_state = "ak47_mag" - ammo_type = /obj/item/ammo_casing/a762_39 - caliber = "7.62x39mm" + icon_state = "[base_icon_state]-[!!ammo_count()]" + +/obj/item/ammo_box/magazine/skm_762_40 + name = "assault rifle magazine (7.62x40mm CLIP)" + desc = "A slightly curved, 20-round magazine for the 7.62x40mm CLIP variants of the SKM assault rifle family. These rounds do good damage with good armor penetration." + base_icon_state = "skm_mag" + icon_state = "skm_mag" + ammo_type = /obj/item/ammo_casing/a762_40 + caliber = "7.62x40mm" max_ammo = 20 -/obj/item/ammo_box/magazine/ak47/update_icon_state() +/obj/item/ammo_box/magazine/skm_762_40/update_icon_state() . = ..() - icon_state = "ak47_mag-[!!ammo_count()]" + icon_state = "[base_icon_state]-[!!ammo_count()]" + +/obj/item/ammo_box/magazine/skm_762_40/extended + name = "extended assault rifle magazine (7.62x40mm CLIP)" + desc = "A very curved, 40-round magazine for the 7.62x40mm CLIP variants of the SKM assault rifle family. These rounds do good damage with good armor penetration." + base_icon_state = "skm_extended_mag" + icon_state = "skm_extended_mag" + max_ammo = 40 + +/obj/item/ammo_box/magazine/skm_762_40/drum + name = "assault rifle drum (7.62x40mm CLIP)" + desc = "A 75-round drum for the 7.62x40mm CLIP variants of the SKM assault rifle family. These rounds do good damage with good armor penetration." + base_icon_state = "skm_drum" + icon_state = "skm_drum" + max_ammo = 75 + w_class = WEIGHT_CLASS_NORMAL /obj/item/ammo_box/magazine/ebr name = "battle rifle magazine (.308)" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b64e76d1f075..f6470af9a846 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -16,7 +16,7 @@ #define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" #define MANUFACTURER_DONKCO "the Donk! Co. logo" #define MANUFACTURER_PGF "the Etherbor Industries emblem" - +#define MANUFACTURER_IMPORT "Lanchester Import Co." /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." @@ -450,15 +450,17 @@ to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...") return sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread)) + sprd = calculate_spread(user, sprd) + before_firing(target,user) if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src)) shoot_with_empty_chamber(user) return else if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot - shoot_live_shot(user, 1, target, message) + shoot_live_shot(user, TRUE, target, message) else - shoot_live_shot(user, 0, target, message) + shoot_live_shot(user, FALSE, target, message) else shoot_with_empty_chamber(user) return @@ -781,8 +783,16 @@ /obj/item/gun/proc/before_firing(atom/target,mob/user) return +// We do it like this in case theres some specific gun behavior for adjusting recoil, like bipods or folded stocks +/obj/item/gun/proc/calculate_recoil(mob/user, recoil_bonus = 0) + return recoil_bonus + +// We do it like this in case theres some specific gun behavior for adjusting spread, like bipods or folded stocks +/obj/item/gun/proc/calculate_spread(mob/user, bonus_spread) + return bonus_spread + /obj/item/gun/proc/simulate_recoil(mob/living/user, recoil_bonus = 0, firing_angle) - var/total_recoil = recoil_bonus + var/total_recoil = calculate_recoil(user, recoil_bonus) var/actual_angle = firing_angle + rand(-recoil_deviation, recoil_deviation) + 180 if(actual_angle > 360) diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index 576a914cce01..565a0e20a0cd 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -14,90 +14,50 @@ rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg' spread_unwielded = 20 -/obj/item/gun/ballistic/automatic/assault/ak47 - name = "\improper SVG-67" - desc = "A Frontier-built assault rifle descended from a pattern of unknown provenance. Its low cost, ease of maintenance, and powerful 7.62x39mm cartridge make it a popular choice among a wide variety of outlaws." +/obj/item/gun/ballistic/automatic/assault/skm + name = "\improper SKM-24" + desc = "An obsolete model of assault rifle once used by CLIP. Legendary for its durability and low cost, surplus rifles are commonplace on the Frontier, and the design has been widely copied. Chambered in 7.62x40mm CLIP." icon = 'icons/obj/guns/48x32guns.dmi' - fire_sound = 'sound/weapons/gun/rifle/ak47.ogg' + fire_sound = 'sound/weapons/gun/rifle/skm.ogg' - rack_sound = 'sound/weapons/gun/rifle/ak47_cocked.ogg' - load_sound = 'sound/weapons/gun/rifle/ak47_reload.ogg' - load_empty_sound = 'sound/weapons/gun/rifle/ak47_reload.ogg' - eject_sound = 'sound/weapons/gun/rifle/ak47_unload.ogg' - eject_empty_sound = 'sound/weapons/gun/rifle/ak47_unload.ogg' + rack_sound = 'sound/weapons/gun/rifle/skm_cocked.ogg' + load_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' - icon_state = "ak47" - item_state = "ak47" + icon_state = "skm" + item_state = "skm" mag_display = TRUE + special_mags = TRUE weapon_weight = WEAPON_MEDIUM w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK - mag_type = /obj/item/ammo_box/magazine/ak47 - spread = 0 + manufacturer = MANUFACTURER_IMPORT + mag_type = /obj/item/ammo_box/magazine/skm_762_40 + + spread = 1 wield_delay = 0.7 SECONDS -/obj/item/gun/ballistic/automatic/assault/ak47/ComponentInitialize() +/obj/item/gun/ballistic/automatic/assault/skm/ComponentInitialize() . = ..() AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) -/obj/item/gun/ballistic/automatic/assault/ak47/nt - name = "\improper NT-SVG" - desc = "An even cheaper version of the SVG-67, rechambered for the lightweight 4.6x30mm PDW cartridge. The flimsy folding stock and light construction make for a highly-portable rifle that lacks accuracy and power." - icon = 'icons/obj/guns/48x32guns.dmi' - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' - icon_state = "ak47_nt" - item_state = "ak47_nt" - mag_type = /obj/item/ammo_box/magazine/aknt - var/folded = FALSE - var/unfolded_spread = 2 - var/unfolded_item_state = "ak47_nt" - var/folded_spread = 20 - var/folded_item_state = "ak47_nt_stockless" - -/obj/item/gun/ballistic/automatic/assault/ak47/nt/CtrlClick(mob/user) - . = ..() - if((!ishuman(user) || user.stat)) - return - to_chat(user, "You start to [folded ? "unfold" : "fold"] the stock on the [src].") - if(do_after(user, 10, target = src)) - fold(user) - user.update_inv_back() - user.update_inv_hands() - user.update_inv_s_store() - -/obj/item/gun/ballistic/automatic/assault/ak47/nt/proc/fold(mob/user) - if(folded) - to_chat(user, "You unfold the stock on the [src].") - spread = unfolded_spread - item_state = unfolded_item_state - w_class = WEIGHT_CLASS_BULKY - else - to_chat(user, "You fold the stock on the [src].") - spread = folded_spread - item_state = folded_item_state - w_class = WEIGHT_CLASS_NORMAL +/obj/item/gun/ballistic/automatic/assault/skm/pirate + name = "\improper Chopper" + desc = "An SKM-24 in a state of shockingly poor repair: Several parts are missing and the 'grip' is improvised from scrap wood. It's a miracle it still works at all. Chambered in 7.62x40mm CLIP." - folded = !folded - playsound(src.loc, 'sound/weapons/empty.ogg', 100, 1) - update_appearance() + icon_state = "skm_pirate" + item_state = "skm_pirate" + manufacturer = MANUFACTURER_NONE -/obj/item/gun/ballistic/automatic/assault/ak47/nt/update_overlays() - . = ..() - var/mutable_appearance/stock - if(!folded) - stock = mutable_appearance(icon, "ak47_nt_stock") - else - stock = mutable_appearance(icon, null) - . += stock +/obj/item/gun/ballistic/automatic/assault/skm/inteq + name = "\improper SKM-44" + desc = "An obsolete model of assault rifle once used by CLIP. Most of these were seized from Frontiersmen armories or purchased in CLIP, then modified to IRMG standards. Chambered in 7.62x40mm CLIP." -/obj/item/gun/ballistic/automatic/assault/ak47/inteq - name = "\improper SkM-24" - desc = "An antique assault rifle seized from Frontiersmen armories then extensively modified to IRMG standards. Chambered in 7.62x39mm." - icon = 'icons/obj/guns/48x32guns.dmi' - fire_sound = 'sound/weapons/gun/rifle/akm.ogg' - icon_state = "akm" - item_state = "akm" - mob_overlay_icon = 'icons/mob/clothing/back.dmi' + icon_state = "skm_inteq" + item_state = "skm_inteq" + manufacturer = MANUFACTURER_INTEQ /obj/item/gun/ballistic/automatic/assault/p16 name = "\improper P-16" diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm index 3209513efc20..6efc37761eeb 100644 --- a/code/modules/projectiles/guns/ballistic/hmg.dm +++ b/code/modules/projectiles/guns/ballistic/hmg.dm @@ -1,18 +1,142 @@ +//TODO: rename this file to lmg.dm and: /obj/item/gun/ballistic/automatic/hmg --> /obj/item/gun/ballistic/automatic/lmg + /obj/item/gun/ballistic/automatic/hmg w_class = WEIGHT_CLASS_HUGE slot_flags = 0 weapon_weight = WEAPON_HEAVY burst_size = 1 - actions_types = list() - slowdown = 1 + actions_types = list(/datum/action/item_action/deploy_bipod) //this is on hmg, as I need the same mechanics for a future gun. ideally, this would be an attachment, but that's still pending drag_slowdown = 1.5 fire_delay = 1 - spread = 2 + spread = 4 spread_unwielded = 80 recoil = 1 recoil_unwielded = 4 - wield_slowdown = 4 + wield_slowdown = 3 + + ///does this have a bipod? + var/has_bipod = FALSE + ///is the bipod deployed? + var/bipod_deployed = FALSE + ///how long do we need to deploy the bipod? + var/deploy_time = 2 SECONDS + + ///we add these two values to recoi/spread when we have the bipod deployed + var/deploy_recoil_bonus = -1 + var/deploy_spread_bonus = -5 + + var/list/deployable_on_structures = list( + /obj/structure/table, + /obj/structure/barricade, + /obj/structure/bed, + /obj/structure/chair, + /obj/structure/railing, + /obj/structure/flippedtable + ) + + +/obj/item/gun/ballistic/automatic/hmg/Initialize() + . = ..() + for(var/datum/action/item_action/deploy_bipod/action as anything in actions_types) + if(!has_bipod) + qdel(action) + +/obj/item/gun/ballistic/automatic/hmg/ComponentInitialize() + . = ..() + RegisterSignal(src, list(COMSIG_ITEM_EQUIPPED,COMSIG_MOVABLE_MOVED), PROC_REF(retract_bipod)) + +/datum/action/item_action/deploy_bipod //TODO: Make this an accessory when that's added + name = "Deploy Bipod" + desc = "Deploy the bipod when bracing against something to increase accuracy." + +/obj/item/gun/ballistic/automatic/hmg/ui_action_click(mob/user, action) + if(!istype(action, /datum/action/item_action/deploy_bipod)) + return ..() + if(!bipod_deployed) + deploy_bipod(user) + else + retract_bipod(user=user) + +/obj/item/gun/ballistic/automatic/hmg/proc/deploy_bipod(mob/user) + //we check if we can actually deploy the thing + var/can_deploy = TRUE + var/mob/living/wielder = user + + if(!wielder) + return + + if(!wielded_fully) + to_chat(user, "You need to fully grip [src] to deploy it's bipod!") + return + + if(wielder.body_position != LYING_DOWN) //are we braced against the ground? if not, we check for objects to brace against + can_deploy = FALSE + + for(var/direction_to_check as anything in GLOB.cardinals) //help + var/turf/open/turf_to_check = get_step(get_turf(src),direction_to_check) + for(var/obj/structure/checked_struct as anything in turf_to_check.contents) //while you can fire in non-braced directions, this makes it so you have to get good positioning to fire standing up. + for(var/checking_allowed as anything in deployable_on_structures) + if(istype(checked_struct, checking_allowed)) //help if you know how to write this better + can_deploy = TRUE + break + + + if(!can_deploy) + to_chat(user, "You need to brace against something to deploy [src]'s bipod! Either lie on the floor or stand next to a waist high object like a table!") + return + if(!do_mob(user, src, deploy_time, FALSE, TRUE, CALLBACK(src, PROC_REF(is_wielded)))) + to_chat(user, "You need to hold still to deploy [src]'s bipod!") + return + playsound(src, 'sound/machines/click.ogg', 75, TRUE) + to_chat(user, "You deploy [src]'s bipod.") + bipod_deployed = TRUE + + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(retract_bipod)) + update_appearance() + +/obj/item/gun/ballistic/automatic/hmg/proc/retract_bipod(atom/source, mob/user) + SIGNAL_HANDLER + if(!bipod_deployed) + return + if(!user || !ismob(user)) + user = loc + playsound(src, 'sound/machines/click.ogg', 75, TRUE) + to_chat(user, "The bipod undeploys itself.") + bipod_deployed = FALSE + + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + update_appearance() + + +/obj/item/gun/ballistic/automatic/hmg/on_unwield(obj/item/source, mob/user) + . = ..() + retract_bipod(user=user) + +/obj/item/gun/ballistic/automatic/hmg/calculate_recoil(mob/user, recoil_bonus = 0) + var/total_recoil = recoil_bonus + if(bipod_deployed) + total_recoil += deploy_recoil_bonus + total_recoil = clamp(total_recoil,0,INFINITY) + return total_recoil + +/obj/item/gun/ballistic/automatic/hmg/calculate_spread(mob/user, bonus_spread) + var/total_spread = bonus_spread + if(bipod_deployed) + total_spread += deploy_spread_bonus + total_spread = clamp(total_spread,0,INFINITY) + return total_spread + + +/obj/item/gun/ballistic/automatic/hmg/update_icon_state() + . = ..() + item_state = "[initial(item_state)][bipod_deployed ? "_deployed" : ""]" + +/obj/item/gun/ballistic/automatic/hmg/update_overlays() + . = ..() + if(has_bipod) + . += "[base_icon_state || initial(icon_state)][bipod_deployed ? "_deployed" : "_undeployed"]" + // L6 SAW // @@ -96,3 +220,60 @@ /obj/item/gun/ballistic/automatic/hmg/solar/ComponentInitialize() . = ..() AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg + name = "\improper SKM-24u" + desc = "What appears to be a standard SKM-24 at first glance is actually a light machine gun conversion, with an extended, heavy barrel and overhauled internals. Its weight, bulk, and robust fire rate make it difficult to handle without using the bipod in a prone position or against appropriate cover such as a table. Chambered in 7.62x40mm CLIP." + + icon = 'icons/obj/guns/48x32guns.dmi' + icon_state = "skm_lmg" + item_state = "skm_lmg" + + fire_sound = 'sound/weapons/gun/rifle/skm.ogg' + rack_sound = 'sound/weapons/gun/rifle/skm_cocked.ogg' + load_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + + + mag_display = TRUE + special_mags = TRUE + weapon_weight = WEAPON_MEDIUM + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + manufacturer = MANUFACTURER_IMPORT + mag_type = /obj/item/ammo_box/magazine/skm_762_40 + + + spread = 7 //you can hipfire, but why? + spread_unwielded = 25 + + recoil = 1 //identical to other LMGS + recoil_unwielded = 4 //same as skm + + wield_slowdown = 1 //not as severe as other lmgs, but worse than the normal skm + wield_delay = 0.85 SECONDS //faster than normal lmgs, slower than stock skm + + has_bipod = TRUE + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) //slower than other lmgs but faster than skm and most smgs + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended //spawns with the proper extended magazine, for erts + spawnwithmagazine = FALSE + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended/Initialize() + . = ..() + magazine = new /obj/item/ammo_box/magazine/skm_762_40/extended(src) + chamber_round() + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg/drum_mag //spawns with a drum, maybe not for erts but admin enhanced ERTS? when things really go to shit + spawnwithmagazine = FALSE + +/obj/item/gun/ballistic/automatic/hmg/skm_lmg/drum_mag/Initialize() + . = ..() + magazine = new /obj/item/ammo_box/magazine/skm_762_40/drum(src) + chamber_round() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 6e5a8d4d42b8..815dde789f36 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -595,7 +595,7 @@ inhand_y_dimension = 32 mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester fire_sound = 'sound/weapons/gun/rifle/flamingarrow.ogg' - rack_sound = 'sound/weapons/gun/rifle/ak47_cocked.ogg' + rack_sound = 'sound/weapons/gun/rifle/skm_cocked.ogg' bolt_wording = "lever" cartridge_wording = "bullet" can_be_sawn_off = TRUE @@ -688,6 +688,7 @@ base_icon_state = "beacon" icon_state = "beacon" item_state = "beacon" + unique_reskin = null icon = 'icons/obj/guns/48x32guns.dmi' mob_overlay_icon = 'icons/mob/clothing/back.dmi' inhand_x_dimension = 32 diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 23d853753f9b..2d4e72ae8736 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -6,6 +6,9 @@ spread_unwielded = 10 wield_slowdown = 0.35 recoil_unwielded = 4 + w_class = WEIGHT_CLASS_BULKY + + wield_delay = 0.4 SECONDS load_sound = 'sound/weapons/gun/smg/smg_reload.ogg' load_empty_sound = 'sound/weapons/gun/smg/smg_reload.ogg' @@ -68,25 +71,6 @@ icon_state = "c20r_suns" item_state = "c20r_suns" -/obj/item/gun/ballistic/automatic/smg/inteq - name = "\improper SkM-44(k)" - desc = "An extreme modification of an obsolete assault rifle, converted into a compact submachine gun by IRMG. Chambered in 10mm." - icon_state = "inteqsmg" - item_state = "inteqsmg" - fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg' - mag_type = /obj/item/ammo_box/magazine/smgm10mm - can_bayonet = FALSE - can_flashlight = TRUE - flight_x_offset = 15 - flight_y_offset = 13 - can_suppress = TRUE - mag_display = TRUE - manufacturer = MANUFACTURER_INTEQ - -/obj/item/gun/ballistic/automatic/smg/inteq/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) - /obj/item/gun/ballistic/automatic/smg/wt550 name = "\improper WT-550 Automatic Rifle" desc = "An outdated PDW, used centuries ago by Nanotrasen security elements. Uses 4.6x30mm rounds." @@ -235,6 +219,7 @@ item_state = "firestorm" mag_type = /obj/item/ammo_box/magazine/c45_firestorm_mag can_suppress = FALSE + special_mags = TRUE burst_size = 1 actions_types = list() fire_delay = 1 @@ -273,18 +258,143 @@ /obj/item/gun/ballistic/automatic/smg/cm5/no_mag spawnwithmagazine = FALSE -/obj/item/gun/ballistic/automatic/smg/aks74u - name = "\improper AKS-74U" - desc = "A pre-FTL era carbine, known to be incredibly cheap. Its extreme fire rate make it perfect for bandits, pirates and colonists on a budget." - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' - icon_state = "aks74u" - lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' - righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - item_state = "aks74u" +/obj/item/gun/ballistic/automatic/smg/skm_carbine + name = "\improper SKM-24v" + desc = "The SKM-24v was a carbine modification of the SKM-24 during the Frontiersmen War. This, however, is just a shoddy imitation of that carbine, effectively an SKM-24 with a sawed down barrel and a folding wire stock. Can be fired with the stock folded, though accuracy suffers. Chambered in 4.6x30mm." + + icon = 'icons/obj/guns/48x32guns.dmi' + mob_overlay_icon = 'icons/mob/clothing/back.dmi' + icon_state = "skm_carbine" + item_state = "skm_carbine" + + fire_sound = 'sound/weapons/gun/rifle/skm_smg.ogg' + + rack_sound = 'sound/weapons/gun/rifle/skm_cocked.ogg' + load_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/skm_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/skm_unload.ogg' + weapon_weight = WEAPON_MEDIUM - w_class = WEIGHT_CLASS_NORMAL - mag_type = /obj/item/ammo_box/magazine/aks74u + w_class = WEIGHT_CLASS_BULKY + mag_type = /obj/item/ammo_box/magazine/skm_545_39 + + actions_types = list(/datum/action/item_action/fold_stock) //once again, ideally an attatchment in the future -/obj/item/gun/ballistic/automatic/smg/aks74u/ComponentInitialize() + recoil = 2 + recoil_unwielded = 6 + + spread = 8 + spread_unwielded = 14 + + wield_delay = 0.6 SECONDS + wield_slowdown = 0.35 + + ///is the bipod deployed? + var/stock_folded = FALSE + + ///we add these two values to recoi/spread when we have the bipod deployed + var/stock_recoil_bonus = -2 + var/stock_spread_bonus = -5 + + var/folded_slowdown = 0.6 + var/folded_wield_delay = 0.6 SECONDS + + var/unfolded_slowdown = 0.35 + var/unfolded_wield_delay = 0.2 SECONDS + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) //last autofire system made the fire rate REALLY fucking fast, but because of how poor it was, it was normal speed. + AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) + AddElement(/datum/element/update_icon_updates_onmob) + +/datum/action/item_action/fold_stock + name = "Fold/Unfold stock" + desc = "Fold or unfold the stock for easier storage." + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/ui_action_click(mob/user, action) + if(!istype(action, /datum/action/item_action/fold_stock)) + return ..() + fold(user) + + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/proc/fold(mob/user) + if(stock_folded) + to_chat(user, "You unfold the stock on the [src].") + w_class = WEIGHT_CLASS_BULKY + wield_delay = folded_wield_delay + wield_slowdown = folded_slowdown + else + to_chat(user, "You fold the stock on the [src].") + w_class = WEIGHT_CLASS_NORMAL + wield_delay = unfolded_wield_delay + wield_slowdown = unfolded_slowdown + + if(wielded) + user.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gun, multiplicative_slowdown = wield_slowdown) + + stock_folded = !stock_folded + playsound(src, 'sound/weapons/empty.ogg', 100, 1) + update_appearance() + + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_recoil(mob/user, recoil_bonus = 0) + var/total_recoil = recoil_bonus + if(!stock_folded) + total_recoil += stock_recoil_bonus + total_recoil = clamp(total_recoil,0,INFINITY) + return total_recoil + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_spread(mob/user, bonus_spread) + var/total_spread = bonus_spread + if(!stock_folded) + total_spread += stock_spread_bonus + total_spread = clamp(total_spread,0,INFINITY) + return total_spread + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/update_icon_state() + . = ..() + item_state = "[initial(item_state)][stock_folded ? "_nostock" : ""]" + mob_overlay_state = "[initial(item_state)][stock_folded ? "_nostock" : ""]" + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/update_overlays() + . = ..() + . += "[base_icon_state || initial(icon_state)][stock_folded ? "_nostock" : "_stock"]" + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq + name = "\improper SKM-44v Mongrel" + desc = "An SKM-44, further modified into a sub-machine gun by Inteq artificers with a new magazine well, collapsing stock, and shortened barrel. Faced with a surplus of SKM-44s and a shortage of other firearms, IRMG has made the most of their available materiel with conversions such as this. Chambered in 10mm." + icon_state = "skm_inteqsmg" + item_state = "skm_inteqsmg" + + mag_type = /obj/item/ammo_box/magazine/smgm10mm + manufacturer = MANUFACTURER_INTEQ + + fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg' + + load_sound = 'sound/weapons/gun/smg/smg_reload.ogg' + load_empty_sound = 'sound/weapons/gun/smg/smg_reload.ogg' + eject_sound = 'sound/weapons/gun/smg/smg_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg' + + spread = 7 + recoil_unwielded = 10 + + recoil = 0 + recoil_unwielded = 4 + + stock_spread_bonus = -4 + stock_recoil_bonus = -1 + + wield_delay = 0.4 SECONDS + + folded_slowdown = 0.15 + folded_wield_delay = 0.2 SECONDS + + unfolded_slowdown = 0.35 + unfolded_wield_delay = 0.4 SECONDS + + +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 5c7153727646..1423eedf81ba 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -31,6 +31,12 @@ flight_x_offset = 19 flight_y_offset = 13 + wield_delay = 0.2 SECONDS + wield_slowdown = 0.15 + + spread = 2 + spread_unwielded = 5 + /obj/item/gun/energy/e_gun/mini/Initialize() set_gun_light(new /obj/item/flashlight/seclite(src)) return ..() @@ -193,6 +199,13 @@ ammo_x_offset = 2 charge_sections = 6 small_gun = TRUE + + wield_delay = 0.2 SECONDS + wield_slowdown = 0.15 + + spread = 2 + spread_unwielded = 5 + ammo_type = list(/obj/item/ammo_casing/energy/disabler/hitscan, /obj/item/ammo_casing/energy/ion/cheap) cell_type = /obj/item/stock_parts/cell/gun/mini @@ -244,6 +257,7 @@ flight_x_offset = 20 flight_y_offset = 9 spread = 80 + spread_unwielded = 140 dual_wield_spread = 140 shaded_charge = TRUE manufacturer = MANUFACTURER_EOEHOMA diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 0c02e2ff90e8..4fb79f7d46e6 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -214,6 +214,13 @@ desc = "A very old laser weapon. Despite the extreme age of some of these weapons, they are sometimes preferred to newer, mass-produced Nanotrasen laser weapons." icon_state = "e10" w_class = WEIGHT_CLASS_SMALL + + wield_delay = 0.2 SECONDS + wield_slowdown = 0.15 + + spread = 2 + spread_unwielded = 5 + ammo_type = list(/obj/item/ammo_casing/energy/lasergun/eoehoma) manufacturer = MANUFACTURER_EOEHOMA diff --git a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm index db0149a53b04..8684fa867288 100644 --- a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm +++ b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm @@ -7,15 +7,26 @@ lefthand_file = 'icons/obj/guns/faction/gezena/lefthand.dmi' righthand_file = 'icons/obj/guns/faction/gezena/righthand.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/gezena/belt.dmi' - w_class = WEIGHT_CLASS_BULKY + w_class = WEIGHT_CLASS_NORMAL - cell_type = /obj/item/stock_parts/cell/gun/pgf - ammo_type = list(/obj/item/ammo_casing/energy/kalix) + modifystate = TRUE + + wield_delay = 0.7 SECONDS + wield_slowdown = 0.35 + + cell_type = /obj/item/stock_parts/cell/gun/kalix + ammo_type = list(/obj/item/ammo_casing/energy/kalix, /obj/item/ammo_casing/energy/disabler/hitscan) load_sound = 'sound/weapons/gun/gauss/pistol_reload.ogg' manufacturer = MANUFACTURER_PGF +/obj/item/ammo_casing/energy/kalix + projectile_type = /obj/projectile/beam/hitscan/kalix + fire_sound = 'sound/weapons/gun/energy/kalixsmg.ogg' + e_cost = 666 //30 shots per cell + delay = 1 + /obj/projectile/beam/hitscan/kalix name = "concentrated energy" tracer_type = /obj/effect/projectile/tracer/kalix @@ -25,22 +36,24 @@ muzzle_flash_color_override = LIGHT_COLOR_ELECTRIC_CYAN impact_light_color_override = LIGHT_COLOR_ELECTRIC_CYAN range = 10 - -/obj/item/ammo_casing/energy/kalix - projectile_type = /obj/projectile/beam/hitscan/kalix - fire_sound = 'sound/weapons/gun/energy/laserpistol.ogg' - e_cost = 850 + damage_constant = 0.8 + damage = 25 + armour_penetration = -10 /obj/item/gun/energy/kalix/pgf name = "Etherbor BG-16" - desc = "An advanced variant of the BG-12, the BG-16 is the military-grade beam gun designed and manufactured by Etherbor Industries as the standard-issue weapon of the PGF." + desc = "An advanced variant of the BG-12, the BG-16 is the military-grade beam gun designed and manufactured by Etherbor Industries as the standard-issue close-range weapon of the PGF." icon_state = "pgfgun" item_state = "pgfgun" cell_type = /obj/item/stock_parts/cell/gun/pgf - ammo_type = list(/obj/item/ammo_casing/energy/pgf) + ammo_type = list(/obj/item/ammo_casing/energy/pgf , /obj/item/ammo_casing/energy/disabler/hitscan) + +/obj/item/gun/energy/kalix/pgf/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.16 SECONDS) -/obj/projectile/beam/hitscan/pgf +/obj/projectile/beam/hitscan/kalix/pgf name = "concentrated energy" tracer_type = /obj/effect/projectile/tracer/pgf muzzle_type = /obj/effect/projectile/muzzle/pgf @@ -48,36 +61,107 @@ hitscan_light_color_override = LIGHT_COLOR_ELECTRIC_GREEN muzzle_flash_color_override = LIGHT_COLOR_ELECTRIC_GREEN impact_light_color_override = LIGHT_COLOR_ELECTRIC_GREEN - damage_constant = 0.9 - damage = 25 - range = 6 /obj/item/ammo_casing/energy/pgf - projectile_type = /obj/projectile/beam/hitscan/pgf - fire_sound = 'sound/weapons/gun/energy/laserpistol.ogg' - e_cost = 1000 + projectile_type = /obj/projectile/beam/hitscan/kalix/pgf + fire_sound = 'sound/weapons/gun/energy/kalixsmg.ogg' + delay = 1 + +/obj/item/gun/energy/kalix/pistol //blue //todo: fix up belt_mirror.dmi, it's incomprehensible + name = "Etherbor SG-8" + desc = "Etherbor's current and sidearm offering. While intended for marines, it's also available for civillians" + icon_state = "kalixpistol" + item_state = "kalixpistol" + w_class = WEIGHT_CLASS_SMALL + + modifystate = FALSE + + wield_delay = 0.2 SECONDS + wield_slowdown = 0.15 + + spread = 2 + spread_unwielded = 5 + + cell_type = /obj/item/stock_parts/cell/gun/kalix + ammo_type = list(/obj/item/ammo_casing/energy/kalix/pistol) + + + load_sound = 'sound/weapons/gun/gauss/pistol_reload.ogg' + +/obj/item/ammo_casing/energy/kalix/pistol + fire_sound = 'sound/weapons/gun/energy/kalixpistol.ogg' + e_cost = 1250 //10 shots per cell + delay = 0 /obj/item/gun/energy/kalix/pgf/heavy name = "Etherbor HBG-7" - desc = "For when a BG-16 doesn’t cut it, the far bulkier HBG-7, provided by your friends at Etherbor Industries, has the stopping power and fire rate to bring down any target where a smaller caliber weapon just wouldn't cut it." + desc = "The HBG-7 is the standard-issue rifle weapon of the PGF. If the stopping power and fire rate isn't enough, it comes with a DMR mode that has greater armor piercing for dealing with armored targets." icon_state = "pgfheavy" item_state = "pgfheavy" icon = 'icons/obj/guns/faction/gezena/48x32.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/gezena/back.dmi' - w_class = WEIGHT_CLASS_HUGE + w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK + modifystate = FALSE + wield_delay = 0.7 SECONDS wield_slowdown = 0.6 + + spread = 0 spread_unwielded = 20 - ammo_type = list(/obj/item/ammo_casing/energy/pgf/heavy) + ammo_type = list(/obj/item/ammo_casing/energy/pgf/assault, /obj/item/ammo_casing/energy/pgf/sniper) -/obj/projectile/beam/hitscan/pgf/heavy - damage = 35 +/obj/item/gun/energy/kalix/pgf/heavy/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + +/obj/item/ammo_casing/energy/pgf/assault + select_name = "AR" + projectile_type = /obj/projectile/beam/hitscan/kalix/pgf/assault + fire_sound = 'sound/weapons/gun/energy/kalixrifle.ogg' + e_cost = 1000 //20 shots per cell + delay = 1 + +/obj/projectile/beam/hitscan/kalix/pgf/assault + tracer_type = /obj/effect/projectile/tracer/pgf/rifle + muzzle_type = /obj/effect/projectile/muzzle/pgf/rifle + impact_type = /obj/effect/projectile/impact/pgf/rifle + damage = 25 //bar + armour_penetration = 20 range = 12 + damage_constant = 0.9 + +/obj/item/ammo_casing/energy/pgf/sniper + select_name = "DMR" + projectile_type = /obj/projectile/beam/hitscan/kalix/pgf/sniper + fire_sound = 'sound/weapons/gun/laser/heavy_laser.ogg' + e_cost = 2000 //20 shots per cell + delay = 6 + +/obj/projectile/beam/hitscan/kalix/pgf/sniper + tracer_type = /obj/effect/projectile/tracer/laser/emitter + muzzle_type = /obj/effect/projectile/muzzle/laser/emitter + impact_type = /obj/effect/projectile/impact/laser/emitter + + damage = 35 + armour_penetration = 40 + range = 20 + damage_constant = 1 + +/obj/item/gun/energy/kalix/pgf/heavy/sniper + name = "Etherbor HBG-7L" + desc = "HBG-7 with a longer barrel and scope. Intended to get the best use out of the DMR mode, it suffers if used normally from longer wield times and slowdown" + icon_state = "pgfheavy_sniper" + item_state = "pgfheavy_sniper" + + zoomable = TRUE + zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. + zoom_out_amt = 5 + + spread = -5 + spread_unwielded = 40 -/obj/item/ammo_casing/energy/pgf/heavy - projectile_type = /obj/projectile/beam/hitscan/pgf/heavy - fire_sound = 'sound/weapons/gun/energy/lasersniper.ogg' - e_cost = 2000 + wield_slowdown = 1 + wield_delay = 1.3 SECONDS diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 5849c2751728..3aada5ddcb41 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -108,6 +108,7 @@ name = "disabler beam" icon_state = "omnilaser" damage = 30 + armour_penetration = -20 damage_type = STAMINA flag = "energy" hitsound = 'sound/weapons/tap.ogg' diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm index ed9469cb668a..79a9b2feb07c 100644 --- a/code/modules/projectiles/projectile/bullets/lmg.dm +++ b/code/modules/projectiles/projectile/bullets/lmg.dm @@ -59,7 +59,7 @@ /obj/projectile/bullet/mm712x82 name = "7.12x82mm bullet" damage = 25 - armour_penetration = 40 + armour_penetration = 4076 /obj/projectile/bullet/mm712x82/ap name = "7.12x82mm armor-piercing bullet" diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 551a63cc512f..8797fbdcde32 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -43,10 +43,10 @@ damage = 30 armour_penetration = 20 -//7.62x39mm (SVG-67 & SkM-24) +//7.62x40mm CLIP (SKM Rifles) -/obj/projectile/bullet/a762_39 - name = "7.62x39mm" +/obj/projectile/bullet/a762_40 + name = "7.62x40mm CLIP" damage = 30 armour_penetration = 20 diff --git a/config/interviews.txt b/config/interviews.txt index 5bd80b815464..3406d7b89325 100644 --- a/config/interviews.txt +++ b/config/interviews.txt @@ -1,9 +1,12 @@ # Interview welcome message displayed at the top of all interview questionnaires # Should help to describe why the questionnaire is being given to the interviewee +# You can include links using markdown-style link notation, like [our rules](https://shiptest.net/wiki/Rules) INTERVIEW_WELCOME_MSG Welcome to our server. As you have not played here before, or played very little, we'll need you to answer a few questions below. After you submit your answers they will be reviewed and you may be asked further questions before being allowed to play. Please be patient as there may be others ahead of you. # Interview questions are listed here, in the order that they will be displayed in-game. +# You can include links using markdown-style link notation, like [our rules](https://shiptest.net/wiki/Rules) INTERVIEW_QUESTIONS Why have you joined the server today? INTERVIEW_QUESTIONS Have you played space-station 13 before? If so, on what servers? INTERVIEW_QUESTIONS Do you know anybody on the server today? If so, who? -INTERVIEW_QUESTIONS Do you have any additional comments? +INTERVIEW_QUESTIONS Have you read and understood our [rules](https://shiptest.net/wiki/Rules)? +INTERVIEW_QUESTIONS Do you have any additional comments or questions? diff --git a/html/changelogs/AutoChangeLog-pr-2734.yml b/html/changelogs/AutoChangeLog-pr-2734.yml new file mode 100644 index 000000000000..6b2c85a65ac1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2734.yml @@ -0,0 +1,11 @@ +author: ryerice, [Apogee-dev](https://github.com/Apogee-dev) +changes: + - {rscadd: "All the SVGs have been placed in a Illestren museum, somehow, instead + being replaced by the SKM, CLIP's former standard issue rifle!"} + - {rscadd: 7.62x39mm has been renamed to 7.62x40mm CLIP} + - {rscadd: LMGs now support bipods; this is a mystery tool that will be useful later!} + - {bugfix: 7.62x40mm no longer breaks spread on the rifles it's used in} + - {rscdel: NT-SVG and AK-74 have been merged into a single gun} + - {balance: 7.62x40mm now contains eighty rounds per ammo box} + - {bugfix: 45-70 hollow point ammo boxes now no longer contains 357 for some reason} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2745.yml b/html/changelogs/AutoChangeLog-pr-2745.yml deleted file mode 100644 index 2d6e15113e2d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2745.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: meemofcourse -changes: - - {rscdel: Removed mentorfollow} -delete-after: true diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml index a2e2ef9987d3..172527c38a4f 100644 --- a/html/changelogs/archive/2024-02.yml +++ b/html/changelogs/archive/2024-02.yml @@ -204,3 +204,29 @@ thgvr: - bugfix: Wigs no longer hide Sarathi horns - rscdel: Removes space adaptation. +2024-02-20: + meemofcourse: + - rscdel: Removed mentorfollow +2024-02-21: + PositiveEntropy: + - imageadd: Inteq has now received a visual overhaul! +2024-02-23: + Martinpachu: + - rscadd: Mini Energy Guns can now be bought at the outpost. + Sadhorizon: + - tweak: SecHud, SecHud Sunglasses and Science Hud now have less intense colors + after alt+clicking. + - tweak: Welding goggles that are not in use don't apply their effect on alt+click + anymore. + - tweak: Inteq Ballistic Hud, Science Sunglasses, Diagnostic Sunglasses and Beer + Goggles now get proper colors after alt+clicking. + bobbahbrown, Mark Suckerberg: + - admin: Links can now be embedded in interview questions to get players to read + them. + ryerice: + - rscadd: Adds a PGF sidearm + - rscadd: Adds a PGF Marksman rifle + - balance: In general, the PGF weapons have been buffed, but also re balanced somewhat + - bugfix: All the PGF weapons should be correctly sized now + thgvr: + - bugfix: SMGs are now too large to store in your bag diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 151cc5c1b2ea..8c730bf22ba3 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index 78b8033a2e35..4c6dd4f78bcf 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index b7574c4afb0e..6b27c56c8b35 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index 5f7fa454a218..12ebf87128c3 100644 Binary files a/icons/mob/clothing/eyes.dmi and b/icons/mob/clothing/eyes.dmi differ diff --git a/icons/mob/clothing/faction/gezena/belt.dmi b/icons/mob/clothing/faction/gezena/belt.dmi index cdd27bcf1e96..754c9e68f22c 100644 Binary files a/icons/mob/clothing/faction/gezena/belt.dmi and b/icons/mob/clothing/faction/gezena/belt.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index e6dd95288038..0c79696e569a 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index 43440753b4f7..c739d99d2f38 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/clothing/under/syndicate.dmi b/icons/mob/clothing/under/syndicate.dmi index b8293f7cb440..cc5e484b89c4 100644 Binary files a/icons/mob/clothing/under/syndicate.dmi and b/icons/mob/clothing/under/syndicate.dmi differ diff --git a/icons/mob/inhands/weapons/64x_guns_left.dmi b/icons/mob/inhands/weapons/64x_guns_left.dmi index 1f77b0d30545..606d8aeff2f3 100644 Binary files a/icons/mob/inhands/weapons/64x_guns_left.dmi and b/icons/mob/inhands/weapons/64x_guns_left.dmi differ diff --git a/icons/mob/inhands/weapons/64x_guns_right.dmi b/icons/mob/inhands/weapons/64x_guns_right.dmi index 9eb8c8d9f055..1cb03b31b8fa 100644 Binary files a/icons/mob/inhands/weapons/64x_guns_right.dmi and b/icons/mob/inhands/weapons/64x_guns_right.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 811173593681..ef1b09fccc53 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 4976bd2e2e00..827bd71ad50e 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/species/misc/digitigrade.dmi b/icons/mob/species/misc/digitigrade.dmi index b937694ec240..57d70696b850 100644 Binary files a/icons/mob/species/misc/digitigrade.dmi and b/icons/mob/species/misc/digitigrade.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index aaddd3b8de70..5eabb260e6f0 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 24cdcaed7839..65a951047a35 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 10e7be38f19f..0b7af59b91e4 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a96fa819bc3e..ce0924a83761 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits/armor.dmi b/icons/obj/clothing/suits/armor.dmi index 758c4836aeb0..aad247e5f7b3 100644 Binary files a/icons/obj/clothing/suits/armor.dmi and b/icons/obj/clothing/suits/armor.dmi differ diff --git a/icons/obj/clothing/under/syndicate.dmi b/icons/obj/clothing/under/syndicate.dmi index 3a0b6ff996b7..02d8e138b970 100644 Binary files a/icons/obj/clothing/under/syndicate.dmi and b/icons/obj/clothing/under/syndicate.dmi differ diff --git a/icons/obj/guns/48x32guns.dmi b/icons/obj/guns/48x32guns.dmi index fa7eba30f13a..82c81415ddcb 100644 Binary files a/icons/obj/guns/48x32guns.dmi and b/icons/obj/guns/48x32guns.dmi differ diff --git a/icons/obj/guns/faction/gezena/48x32.dmi b/icons/obj/guns/faction/gezena/48x32.dmi index 91e2ef30d785..29c89ec1edb1 100644 Binary files a/icons/obj/guns/faction/gezena/48x32.dmi and b/icons/obj/guns/faction/gezena/48x32.dmi differ diff --git a/icons/obj/guns/faction/gezena/energy.dmi b/icons/obj/guns/faction/gezena/energy.dmi index 92d88bbab4e6..be3b5b2f71d6 100644 Binary files a/icons/obj/guns/faction/gezena/energy.dmi and b/icons/obj/guns/faction/gezena/energy.dmi differ diff --git a/icons/obj/guns/faction/gezena/lefthand.dmi b/icons/obj/guns/faction/gezena/lefthand.dmi index 9bec84cd36bb..e93ee942938f 100644 Binary files a/icons/obj/guns/faction/gezena/lefthand.dmi and b/icons/obj/guns/faction/gezena/lefthand.dmi differ diff --git a/icons/obj/guns/faction/gezena/righthand.dmi b/icons/obj/guns/faction/gezena/righthand.dmi index d2d76ebb433d..05ef50b3907c 100644 Binary files a/icons/obj/guns/faction/gezena/righthand.dmi and b/icons/obj/guns/faction/gezena/righthand.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index b89094f953f3..690ed5d86d2f 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index ee2ddf8568e0..543aea109b41 100644 Binary files a/icons/obj/projectiles_impact.dmi and b/icons/obj/projectiles_impact.dmi differ diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi index 4b23b27a8f35..b8f311e2dea4 100644 Binary files a/icons/obj/projectiles_muzzle.dmi and b/icons/obj/projectiles_muzzle.dmi differ diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi index be82f0d319d2..167e456e1573 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/sound/weapons/gun/energy/kalixpistol.ogg b/sound/weapons/gun/energy/kalixpistol.ogg new file mode 100644 index 000000000000..723d1916fde9 Binary files /dev/null and b/sound/weapons/gun/energy/kalixpistol.ogg differ diff --git a/sound/weapons/gun/energy/lasersniper.ogg b/sound/weapons/gun/energy/kalixrifle.ogg similarity index 100% rename from sound/weapons/gun/energy/lasersniper.ogg rename to sound/weapons/gun/energy/kalixrifle.ogg diff --git a/sound/weapons/gun/energy/laserpistol.ogg b/sound/weapons/gun/energy/kalixsmg.ogg similarity index 100% rename from sound/weapons/gun/energy/laserpistol.ogg rename to sound/weapons/gun/energy/kalixsmg.ogg diff --git a/sound/weapons/gun/rifle/ak47.ogg b/sound/weapons/gun/rifle/skm.ogg similarity index 100% rename from sound/weapons/gun/rifle/ak47.ogg rename to sound/weapons/gun/rifle/skm.ogg diff --git a/sound/weapons/gun/rifle/ak47_cocked.ogg b/sound/weapons/gun/rifle/skm_cocked.ogg similarity index 100% rename from sound/weapons/gun/rifle/ak47_cocked.ogg rename to sound/weapons/gun/rifle/skm_cocked.ogg diff --git a/sound/weapons/gun/rifle/ak47_reload.ogg b/sound/weapons/gun/rifle/skm_reload.ogg similarity index 100% rename from sound/weapons/gun/rifle/ak47_reload.ogg rename to sound/weapons/gun/rifle/skm_reload.ogg diff --git a/sound/weapons/gun/rifle/akm.ogg b/sound/weapons/gun/rifle/skm_smg.ogg similarity index 100% rename from sound/weapons/gun/rifle/akm.ogg rename to sound/weapons/gun/rifle/skm_smg.ogg diff --git a/sound/weapons/gun/rifle/ak47_unload.ogg b/sound/weapons/gun/rifle/skm_unload.ogg similarity index 100% rename from sound/weapons/gun/rifle/ak47_unload.ogg rename to sound/weapons/gun/rifle/skm_unload.ogg diff --git a/tgui/packages/tgui/interfaces/Interview.js b/tgui/packages/tgui/interfaces/Interview.js index 66ce143ed9b2..d054e3396703 100644 --- a/tgui/packages/tgui/interfaces/Interview.js +++ b/tgui/packages/tgui/interfaces/Interview.js @@ -36,12 +36,31 @@ export const Interview = (props, context) => { } }; + // Matches a complete markdown-style link, capturing the whole [...](...) + const link_regex = /(\[[^[]+\]\([^)]+\))/; + // Decomposes a markdown-style link into the link and display text + const link_decompose_regex = /\[([^[]+)\]\(([^)]+)\)/; + + // Renders any markdown-style links within a provided body of text + const linkify_text = (text) => { + let parts = text.split(link_regex); + for (let i = 1; i < parts.length; i += 2) { + const match = link_decompose_regex.exec(parts[i]); + parts[i] = ( + + {match[1]} + + ); + } + return parts; + }; + return ( {(!read_only && (
-

{welcome_message}

+

{linkify_text(welcome_message)}

)) || rendered_status(status)} @@ -87,8 +106,8 @@ export const Interview = (props, context) => { )} {questions.map(({ qidx, question, response }) => (
-

{question}

- {(read_only && ( +

{linkify_text(question)}

+ {((read_only || is_admin) && (
{response || 'No response.'}
)) || (