diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 26e7b4ec2f7..f95d8029c08 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -44,9 +44,12 @@
#define ANTAG_HUD "23"
// for fans to identify pins
#define FAN_HUD "24"
-//SKYRAT EDIT ADDITION - GUNHUD
-// ammo of guns
+//SKYRAT EDIT START
+/// ammo of guns
#define AMMO_HUD "25"
+/// if they have a gun permit
+#define PERMIT_HUD "26"
+//SKYRAT EDIT END
//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
@@ -64,6 +67,7 @@
#define DATA_HUD_SENTIENT_DISEASE 8
#define DATA_HUD_AI_DETECT 9
#define DATA_HUD_FAN 10
+#define DATA_HUD_PERMIT 11 //SKYRAT EDIT
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/__DEFINES/~skyrat_defines/armaments.dm b/code/__DEFINES/~skyrat_defines/armaments.dm
index 198e7931446..e73bc8664a7 100644
--- a/code/__DEFINES/~skyrat_defines/armaments.dm
+++ b/code/__DEFINES/~skyrat_defines/armaments.dm
@@ -8,3 +8,36 @@
/// To identify the limit of the category type in the associative list. Techical stuff.
#define CATEGORY_LIMIT "Category Limit"
#define CATEGORY_ENTRY "Category Entry"
+
+// All the categories
+#define ARMAMENT_CATEGORY_MELEE "Melee Weapons"
+#define ARMAMENT_CATEGORY_MELEE_LIMIT 1
+#define ARMAMENT_CATEGORY_PRIMARY "Primary Weapons"
+#define ARMAMENT_CATEGORY_PRIMARY_LIMIT 1
+#define ARMAMENT_CATEGORY_SECONDARY "Secondary Weapons"
+#define ARMAMENT_CATEGORY_SECONDARY_LIMIT 1
+#define ARMAMENT_CATEGORY_ARMOR_HEAD "Headgear"
+#define ARMAMENT_CATEGORY_ARMOR_HEAD_LIMIT 1
+#define ARMAMENT_CATEGORY_MEDICAL "Medical Supplies"
+#define ARMAMENT_CATEGORY_MEDICAL_LIMIT 5
+
+
+// All the subcategories
+#define ARMAMENT_SUBCATEGORY_AMMO "Ammunition"
+#define ARMAMENT_SUBCATEGORY_MELEE_LETHAL "Lethal Weaponry"
+#define ARMAMENT_SUBCATEGORY_MELEE_NONLETHAL "Non-Lethal Weaponry"
+#define ARMAMENT_SUBCATEGORY_SUBMACHINEGUN "Submachine Guns"
+#define ARMAMENT_SUBCATEGORY_ASSAULTRIFLE "Assault Rifles"
+#define ARMAMENT_SUBCATEGORY_SPECIAL "Special Weapons"
+#define ARMAMENT_SUBCATEGORY_PISTOL "Pistols"
+#define ARMAMENT_SUBCATEGORY_HELMET "Helmets"
+#define ARMAMENT_SUBCATEGORY_BERETS "Berets"
+#define ARMAMENT_SUBCATEGORY_MEDKIT "Medkits"
+#define ARMAMENT_SUBCATEGORY_INJECTOR "Injectors"
+#define ARMAMENT_SUBCATEGORY_SHOTGUN "Shotguns"
+#define ARMAMENT_SUBCATEGORY_LASER "Laser Weaponry"
+#define ARMAMENT_SUBCATEGORY_ARMOR "Armor"
+#define ARMAMENT_SUBCATEGORY_GUNPART "Gun Parts"
+#define ARMAMENT_SUBCATEGORY_EMITTER "Phase Emitter"
+#define ARMAMENT_SUBCATEGORY_CELL_UPGRADE "Cell Upgrade"
+#define ARMAMENT_SUBCATEGORY_CHEMICAL "Chemicals"
diff --git a/code/__DEFINES/~skyrat_defines/gun.dm b/code/__DEFINES/~skyrat_defines/gun.dm
index 05ce5118a30..da453fe6525 100644
--- a/code/__DEFINES/~skyrat_defines/gun.dm
+++ b/code/__DEFINES/~skyrat_defines/gun.dm
@@ -1,3 +1,23 @@
#define SELECT_SEMI_AUTOMATIC 1
#define SELECT_BURST_SHOT 2
#define SELECT_FULLY_AUTOMATIC 3
+
+// Bitflags for what company produces the gun
+#define COMPANY_CANTALAN (1<<0)
+#define COMPANY_ARMADYNE (1<<1)
+#define COMPANY_SCARBOROUGH (1<<2)
+#define COMPANY_DONK (1<<3)
+#define COMPANY_BOLT (1<<4)
+#define COMPANY_OLDARMS (1<<5)
+#define COMPANY_IZHEVSK (1<<6)
+#define COMPANY_NANOTRASEN (1<<7)
+#define COMPANY_ALLSTAR (1<<8)
+#define COMPANY_MICRON (1<<9)
+#define COMPANY_DYNAMICS (1<<10)
+#define COMPANY_INTERDYNE (1<<12)
+
+#define COMPANY_INTEREST_GUN 10
+#define COMPANY_INTEREST_CHEMICAL 5
+#define COMPANY_INTEREST_ATTACHMENT 4
+#define COMPANY_INTEREST_AMMO_BULK 3
+#define COMPANY_INTEREST_AMMO 1
diff --git a/code/__DEFINES/~skyrat_defines/projectiles.dm b/code/__DEFINES/~skyrat_defines/projectiles.dm
index a15127a4872..96e0e61a103 100644
--- a/code/__DEFINES/~skyrat_defines/projectiles.dm
+++ b/code/__DEFINES/~skyrat_defines/projectiles.dm
@@ -15,3 +15,9 @@
#define CALIBER_14GAUGE "14 Gauge"
#define CALIBER_50BMG ".50 BMG"
+
+/// The caliber used by the CFA Lynx.
+#define CALIBER_42X30MM "4.2x30mm"
+
+/// The caliber used by the Catanheim.
+#define CALIBER_A68 "a68"
diff --git a/code/__DEFINES/~skyrat_defines/span.dm b/code/__DEFINES/~skyrat_defines/span.dm
index 50ba89e5094..df1212e462a 100644
--- a/code/__DEFINES/~skyrat_defines/span.dm
+++ b/code/__DEFINES/~skyrat_defines/span.dm
@@ -13,3 +13,7 @@
#define span_crossooc(str) ("" + str + "")
#define span_crossasay(str) ("" + str + "")
#define span_doyourjobidiot(str) ("" + str + "")
+#define span_brown(str) ("" + str + "")
+#define span_cyan(str) ("" + str + "")
+#define span_orange(str) ("" + str + "")
+#define span_yellow(str) ("" + str + "")
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index 6d67cee0f61..8651146f8cc 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -140,6 +140,10 @@ SUBSYSTEM_DEF(shuttle)
while(length(pack_processing))
var/datum/supply_pack/pack = pack_processing[length(pack_processing)]
pack_processing.len--
+ //SKYRAT EDIT START
+ if(pack == /datum/supply_pack/armament)
+ continue
+ //SKYRAT EDIT END
if(ispath(pack, /datum/supply_pack))
pack = new pack
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 003ca63c5bc..fb5ef579490 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_SENTIENT_DISEASE = new/datum/atom_hud/sentient_disease(),
DATA_HUD_AI_DETECT = new/datum/atom_hud/ai_detector(),
DATA_HUD_FAN = new/datum/atom_hud/data/human/fan_hud(),
+ DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), // SKYRAT EDIT
))
/datum/atom_hud
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index ec771a9096c..ca1b6e5e129 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -47,7 +47,7 @@
hud_icons = list(ID_HUD)
/datum/atom_hud/data/human/security/advanced
- hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD)
+ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD, PERMIT_HUD) //SKYRAT EDIT: ADD PERMIT_HUD
/datum/atom_hud/data/human/fan_hud
hud_icons = list(FAN_HUD)
@@ -252,6 +252,14 @@ Security HUDs! Basic mode shows only the job.
sechud_icon_state = "hudno_id"
holder.icon_state = sechud_icon_state
sec_hud_set_security_status()
+ //SKYRAT EDIT START
+ var/image/permit_holder = hud_list[PERMIT_HUD]
+ permit_holder.pixel_y = I.Height() - world.icon_size
+ var/permit_icon_state = wear_id?.get_gun_permit_iconstate()
+ if(!permit_icon_state)
+ permit_icon_state = "hudfan_no"
+ permit_holder.icon_state = permit_icon_state
+ //SKYRAT EDIT END
/mob/living/proc/sec_hud_set_implants()
var/image/holder
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 6bd7094b146..dd0c3c3d100 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -30,3 +30,4 @@
new /obj/item/clothing/suit/hooded/wintercoat/qm(src)
new /obj/item/gun/ballistic/rifle/boltaction/brand_new/quartermaster(src) // SKYRAT EDIT - The QM's 'special' head item. It spawns loaded, but you have to find more ammo if you run out and get ready to manually load rounds in!
new /obj/item/cargo_teleporter(src) // SKYRAT EDIT - Adds a cargo teleporter to QM locker, so they can intice others to research it
+ new /obj/item/clothing/glasses/hud/gun_permit(src) //SKYRAT EDIT - GUN CARGO
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 596e56c69c9..86727f3a8ac 100755
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -133,6 +133,8 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/melee/baton/security/loaded/departmental/cargo(src)
new /obj/item/clothing/glasses/hud/security(src)
+ new /obj/item/clothing/glasses/hud/gun_permit(src)
+ new /obj/item/storage/box/gunset/pepperball(src)
/obj/structure/closet/secure_closet/security/engine
name = "\proper engineering guard's locker"
@@ -150,6 +152,7 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/melee/baton/security/loaded/departmental/engineering(src)
new /obj/item/clothing/glasses/hud/security(src)
+ new /obj/item/storage/box/gunset/pepperball(src)
/obj/structure/closet/secure_closet/security/science
name = "\proper science guard's locker"
@@ -167,6 +170,7 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/melee/baton/security/loaded/departmental/science(src)
new /obj/item/clothing/glasses/hud/security(src)
+ new /obj/item/storage/box/gunset/pepperball(src)
/obj/structure/closet/secure_closet/security/med
name = "\proper orderly's locker"
@@ -184,6 +188,7 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/melee/baton/security/loaded/departmental/medical(src)
new /obj/item/clothing/glasses/hud/security(src)
+ new /obj/item/storage/box/gunset/pepperball(src)
// SKYRAT EDIT CHANGE END -- GOOFSEC DEP GUARDS
/obj/structure/closet/secure_closet/detective
diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm
index a9619f07f38..646ec634a9b 100644
--- a/code/modules/cargo/goodies.dm
+++ b/code/modules/cargo/goodies.dm
@@ -3,7 +3,7 @@
access = NONE
group = "Goodies"
goody = TRUE
-
+/* // SKYRAT EDIT START - CARGO GUN
/datum/supply_pack/goody/dumdum38
name = ".38 DumDum Speedloader"
desc = "Contains one speedloader of .38 DumDum ammunition, good for embedding in soft targets."
@@ -31,7 +31,7 @@
cost = PAYCHECK_HARD * 40 //they really mean a premium here
access_view = ACCESS_FORENSICS
contains = list(/obj/item/gun/ballistic/revolver/detective)
-
+*/ //SKYRAT EDIT END
/datum/supply_pack/goody/stingbang
name = "Stingbang Single-Pack"
desc = "Contains one \"stingbang\" grenade, perfect for playing meanhearted pranks."
@@ -44,7 +44,7 @@
desc = "Contains one sharpened survival knive. Guaranteed to fit snugly inside any Nanotrasen-standard boot. Weapons permit not included." //SKYRAT EDIT - CONTRABAND CLARIFICATION
cost = PAYCHECK_HARD * 1.75
contains = list(/obj/item/knife/combat/survival)
-
+/* //SKYRAT EDIT START - GUN CARGO
/datum/supply_pack/goody/ballistic_single
name = "Combat Shotgun Single-Pack"
desc = "For when the enemy absolutely needs to be replaced with lead. Contains one Aussec-designed Combat Shotgun, and one Shotgun Bandolier."
@@ -72,7 +72,7 @@
cost = PAYCHECK_HARD * 15
access_view = ACCESS_ARMORY
contains = list(/obj/item/storage/belt/holster/thermal)
-
+*/ //SKYRAT EDIT END
/datum/supply_pack/goody/sologamermitts
name = "Insulated Gloves Single-Pack"
diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm
index 31a4550dfdf..223e58aa555 100644
--- a/code/modules/cargo/orderconsole.dm
+++ b/code/modules/cargo/orderconsole.dm
@@ -282,6 +282,11 @@
if(SO.applied_coupon)
say("Coupon refunded.")
SO.applied_coupon.forceMove(get_turf(src))
+ //SKYRAT EDIT START
+ if(istype(SO, /datum/supply_order/armament))
+ var/datum/supply_order/armament/the_order = SO
+ the_order.reimburse_armament()
+ //SKYRAT EDIT END
SSshuttle.shopping_list -= SO
. = TRUE
break
@@ -312,6 +317,12 @@
if("toggleprivate")
self_paid = !self_paid
. = TRUE
+ //SKYRAT EDIT START
+ if("gun_window")
+ var/datum/component/armament/cargo_gun/gun_comp = GetComponent(/datum/component/armament/cargo_gun)
+ gun_comp.ui_interact(usr)
+ . = TRUE
+ //SKYRAT EDIT END
if(.)
post_signal(cargo_shuttle)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index dab679eef00..dd3a904e422 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -279,7 +279,7 @@
group = "Security"
access = ACCESS_SECURITY
crate_type = /obj/structure/closet/crate/secure/gear
-
+/* //SKYRAT EDIT START - CARGO ARMAMENTS
/datum/supply_pack/security/ammo
name = "Ammo Crate"
desc = "Contains three boxes of beanbag shotgun shells, three boxes of rubbershot shotgun shells and one of each special .38 speedloarders. Requires Security access to open."
@@ -295,7 +295,7 @@
/obj/item/ammo_box/c38/hotshot,
/obj/item/ammo_box/c38/iceblox)
crate_name = "ammo crate"
-
+*/ //SKYRAT EDIT END
/* SKYRAT EDIT: Moved to Bloat.dm name = "Armor Crate"
/datum/supply_pack/security/armor
name = "Armor Crate"
@@ -305,20 +305,19 @@
contains = list(/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/armor/vest)
- crate_name = "armor crate" */
-
+ crate_name = "armor crate"
+*/ //SKYRAT EDIT END
/datum/supply_pack/security/disabler
name = "Disabler Crate"
desc = "Three stamina-draining disabler weapons. Requires Security access to open."
- cost = CARGO_CRATE_VALUE * 3
+ cost = CARGO_CRATE_VALUE * 5 //SKYRAT EDIT 3 -> 5
access_view = ACCESS_SECURITY
contains = list(/obj/item/gun/energy/disabler,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/disabler)
crate_name = "disabler crate"
-
/datum/supply_pack/security/forensics
name = "Forensics Crate"
desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials(tm). Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, and of course, a fedora. Requires Security access to open."
@@ -341,7 +340,7 @@
/obj/item/clothing/head/helmet/sec)
crate_name = "helmet crate"
-
+/* //SKYRAT EDIT START - CARGO ARMAMENTS
/datum/supply_pack/security/laser
name = "Lasers Crate"
desc = "Contains three lethal, high-energy laser guns. Requires Security access to open."
@@ -351,7 +350,7 @@
/obj/item/gun/energy/laser,
/obj/item/gun/energy/laser)
crate_name = "laser crate"
-
+*/ //SKYRAT EDIT END
/datum/supply_pack/security/securitybarriers
name = "Security Barrier Grenades"
@@ -496,7 +495,7 @@
cost = CARGO_CRATE_VALUE * 3.5
contains = list(/obj/item/storage/box/chemimp)
crate_name = "chemical implant crate"
-
+/* //SKYRAT EDIT START - CARGO ARMAMENTS
/datum/supply_pack/security/armory/ballistic
name = "Combat Shotguns Crate"
desc = "For when the enemy absolutely needs to be replaced with lead. Contains three Aussec-designed Combat Shotguns, and three Shotgun Bandoliers. Requires Armory access to open."
@@ -527,7 +526,7 @@
/obj/item/gun/energy/e_gun)
crate_name = "energy gun crate"
crate_type = /obj/structure/closet/crate/secure/plasma
-
+*/ //SKYRAT EDIT END
/datum/supply_pack/security/armory/exileimp
name = "Exile Implants Crate"
@@ -651,7 +650,7 @@
/obj/item/clothing/gloves/tackler/combat,
/obj/item/clothing/gloves/tackler/combat)
crate_name = "swat crate"
-
+/* //SKYRAT EDIT START - CARGO ARMAMENTS
/datum/supply_pack/security/armory/thermal
name = "Thermal Pistol Crate"
desc = "Contains a pair of holsters each with two experimental thermal pistols, using nanites as the basis for their ammo. Requires Armory access to open."
@@ -659,7 +658,7 @@
contains = list(/obj/item/storage/belt/holster/thermal,
/obj/item/storage/belt/holster/thermal)
crate_name = "thermal pistol crate"
-
+*/ //SKYRAT EDIT END
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Engineering /////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 0ecd0665627..a4e6e5e828e 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -5,7 +5,7 @@
icon = 'icons/mob/human.dmi'
icon_state = "human_basic"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,PERMIT_HUD) //SKYRAT EDIT: ADD PERMIT_HUD
hud_type = /datum/hud/human
pressure_resistance = 25
can_buckle = TRUE
diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm
index d128399804b..b7fad7e93b7 100644
--- a/code/modules/modular_computers/file_system/programs/budgetordering.dm
+++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm
@@ -278,6 +278,16 @@
if("toggleprivate")
self_paid = !self_paid
. = TRUE
+ //SKYRAT EDIT START
+ if("gun_window")
+ var/datum/component/armament/cargo_gun/gun_comp = holder.holder.GetComponent(/datum/component/armament/cargo_gun)
+ if(!gun_comp)
+ holder.holder.AddComponent(/datum/component/armament/cargo_gun, subtypesof(/datum/armament_entry/cargo_gun), 0)
+ gun_comp = holder.holder.GetComponent(/datum/component/armament/cargo_gun)
+ gun_comp.parent_prog ||= src
+ gun_comp.ui_interact(usr)
+ . = TRUE
+ //SKYRAT EDIT END
if(.)
post_signal(cargo_shuttle)
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 411bd7f89bd..a72248ccae8 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -76,7 +76,7 @@
/obj/item/gun/ballistic/automatic/pistol/aps
name = "stechkin APS machine pistol"
- desc = "An old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors."
+ desc = "A modernized reproduction of an old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." //SKYRAT EDIT
icon_state = "aps"
w_class = WEIGHT_CLASS_NORMAL
mag_type = /obj/item/ammo_box/magazine/m9mm_aps
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 5be9ab1a82a..7c6dd6bfbf0 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -3,6 +3,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
#define KEYCARD_RED_ALERT "Red Alert"
#define KEYCARD_EMERGENCY_MAINTENANCE_ACCESS "Emergency Maintenance Access"
#define KEYCARD_BSA_UNLOCK "Bluespace Artillery Unlock"
+#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //SKYRAT EDIT
/obj/machinery/keycard_auth
name = "Keycard Authentication Device"
@@ -83,6 +84,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
if(!event_source)
sendEvent(KEYCARD_BSA_UNLOCK)
. = TRUE
+ //SKYRAT EDIT START
+ if("pin_unrestrict")
+ if(!event_source)
+ sendEvent(KEYCARD_PIN_UNRESTRICT)
+ . = TRUE
+ //SKYRAT EDIT END
/obj/machinery/keycard_auth/update_appearance(updates)
. = ..()
@@ -136,6 +143,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
make_maint_all_access()
if(KEYCARD_BSA_UNLOCK)
toggle_bluespace_artillery()
+ //SKYRAT EDIT START
+ if(KEYCARD_PIN_UNRESTRICT)
+ toggle_permit_pins()
+ //SKYRAT EDIT END
GLOBAL_VAR_INIT(emergency_access, FALSE)
/proc/make_maint_all_access()
@@ -164,3 +175,4 @@ GLOBAL_VAR_INIT(emergency_access, FALSE)
#undef KEYCARD_RED_ALERT
#undef KEYCARD_EMERGENCY_MAINTENANCE_ACCESS
#undef KEYCARD_BSA_UNLOCK
+#undef KEYCARD_PIN_UNRESTRICT //SKYRAT EDIT
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 79555339b99..9633fe49465 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -162,6 +162,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
SSshuttle.order_history += spawning_order
QDEL_NULL(spawning_order.applied_coupon)
+ spawning_order.on_spawn() //SKYRAT EDIT
if(!spawning_order.pack.goody) //we handle goody crates below
spawning_order.generate(pick_n_take(empty_turfs))
diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm
index 7ec57b8baad..51245ebeb3d 100644
--- a/code/modules/uplink/uplink_items/nukeops.dm
+++ b/code/modules/uplink/uplink_items/nukeops.dm
@@ -154,9 +154,9 @@
illegal_tech = FALSE
/datum/uplink_item/dangerous/machinegun
- name = "L6 Squad Automatic Weapon"
- desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \
- This deadly weapon has a massive 50-round magazine of devastating 7.12x82mm ammunition."
+ name = "L6 Machine Gun"
+ desc = "A fully-loaded Scarborough Arms belt-fed machine gun. \
+ This deadly weapon has a 50-round box chambered for 7.12x82mm ammunition." //SKYRAT EDIT - AUSSEC TO SCARBOROUGH
item = /obj/item/gun/ballistic/automatic/l6_saw
cost = 18
surplus = 0
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index c70adf01228..0a22f426ab1 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -216,4 +216,8 @@ h1.alert, h2.alert {color: #000000;}
.monkeyhive {color: #774704;}
.monkeylead {color: #774704; font-size: 2;}
+.brown {color: #3d2009;}
+.orange {color: #b8761a;}
+.yellow {color: #c7b72c;}
+.cyan {color: #0ea1e6;}
"}
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/automatic.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/automatic.dm
index d2ea4fc2be1..57c296f9cc3 100644
--- a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -22,13 +22,14 @@
pin = null
bolt_type = BOLT_TYPE_LOCKING
show_bolt_icon = FALSE
+ company_flag = COMPANY_NANOTRASEN
/obj/item/gun/ballistic/automatic/proto/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/automatic/c20r
name = "\improper C-20r SMG"
- desc = "A bullpup three-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
+ desc = "A bullpup three-round burst .45 SMG, designated 'C-20r'."
icon_state = "c20r"
inhand_icon_state = "c20r"
selector_switch_icon = TRUE
@@ -42,6 +43,7 @@
mag_display = TRUE
mag_display_ammo = TRUE
empty_indicator = TRUE
+ company_flag = COMPANY_SCARBOROUGH
/obj/item/gun/ballistic/automatic/c20r/update_overlays()
. = ..()
@@ -72,6 +74,7 @@
mag_display = TRUE
mag_display_ammo = TRUE
empty_indicator = TRUE
+ company_flag = COMPANY_NANOTRASEN
/obj/item/gun/ballistic/automatic/plastikov
name = "\improper PP-95 SMG"
@@ -86,6 +89,8 @@
mag_display = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
+ company_flag = COMPANY_IZHEVSK
+ dirt_modifier = 0.75
/obj/item/gun/ballistic/automatic/mini_uzi
name = "\improper type U3 uzi"
@@ -97,6 +102,7 @@
show_bolt_icon = FALSE
mag_display = TRUE
rack_sound = 'sound/weapons/gun/pistol/slide_lock.ogg'
+ company_flag = COMPANY_OLDARMS
/obj/item/gun/ballistic/automatic/m90
name = "\improper M-90gl carbine"
@@ -115,6 +121,7 @@
mag_display = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
+ company_flag = COMPANY_SCARBOROUGH
/obj/item/gun/ballistic/automatic/m90/Initialize()
. = ..()
@@ -157,9 +164,12 @@
bolt_type = BOLT_TYPE_OPEN
empty_indicator = TRUE
show_bolt_icon = FALSE
+ company_flag = COMPANY_OLDARMS
/obj/item/gun/ballistic/automatic/tommygun/therealtommy
name = "Tommy gun"
+ desc = "The classic 'Chicago Typewriter'."
+ company_flag = null //This is the real deal, you hear?
/obj/item/gun/ballistic/automatic/ar
name = "\improper NT-ARG 'Boarder'"
@@ -171,13 +181,14 @@
can_suppress = FALSE
burst_size = 3
fire_delay = 1
+ company_flag = COMPANY_NANOTRASEN
// L6 SAW //
/obj/item/gun/ballistic/automatic/l6_saw
name = "\improper L6 SAW"
- desc = "A heavily modified 7.12x82mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation."
+ desc = "A large light machine gun chambered for the 7.12x82mm cartridge."
icon_state = "l6"
inhand_icon_state = "l6"
base_icon_state = "l6"
@@ -199,6 +210,7 @@
rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
var/cover_open = FALSE
+ company_flag = COMPANY_SCARBOROUGH
/obj/item/gun/ballistic/automatic/l6_saw/unrestricted
pin = /obj/item/firing_pin
@@ -291,6 +303,7 @@
can_suppress = TRUE
can_unsuppress = TRUE
pin = /obj/item/firing_pin/implant/pindicate
+ company_flag = COMPANY_SCARBOROUGH
// Old Semi-Auto Rifle //
@@ -308,9 +321,10 @@
can_suppress = TRUE
w_class = WEIGHT_CLASS_HUGE
slot_flags = ITEM_SLOT_BACK
- //actions_types = list() SKYRAT EDIT REMOVAL
fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
mag_display = TRUE
+ company_flag = COMPANY_IZHEVSK
+ dirt_modifier = 0.75
// Laser rifle (rechargeable magazine) //
@@ -329,3 +343,4 @@
fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
fire_sound = 'sound/weapons/laser.ogg'
casing_ejector = FALSE
+ company_flag = COMPANY_NANOTRASEN
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/gun.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/gun.dm
index b33416952ce..69da7a6c0de 100644
--- a/modular_skyrat/master_files/code/modules/projectiles/guns/gun.dm
+++ b/modular_skyrat/master_files/code/modules/projectiles/guns/gun.dm
@@ -95,6 +95,8 @@
var/list/fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
///if i`1t has an icon for a selector switch indicating current firemode.
var/selector_switch_icon = FALSE
+ /// Bitflags for the company that produces the gun, do not give more than one company.
+ var/company_flag
/datum/action/item_action/toggle_safety
name = "Toggle Safety"
@@ -587,6 +589,9 @@
return remove_gun_attachment(user, tool, bayonet, "unfix")
else if(pin && user.is_holding(src))
+ if(!pin.can_remove)
+ to_chat(user, span_warning("You can't remove this firing pin!"))
+ return
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
if(tool.use_tool(src, user, FIRING_PIN_REMOVAL_DELAY, volume = 50))
@@ -601,6 +606,9 @@
. = ..()
if(.)
return
+ if(!pin.can_remove)
+ to_chat(user, span_warning("You can't remove this firing pin!"))
+ return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(pin && user.is_holding(src))
@@ -620,6 +628,9 @@
return
if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
+ if(!pin.can_remove)
+ to_chat(user, span_warning("You can't remove this firing pin!"))
+ return
if(pin && user.is_holding(src))
user.visible_message(span_warning("[user] attempts to remove [pin] from [src] with [tool]."),
span_notice("You attempt to remove [pin] from [src]. (It will take [DisplayTimeText(FIRING_PIN_REMOVAL_DELAY)].)"), null, 3)
@@ -799,6 +810,30 @@
/obj/item/gun/proc/before_firing(atom/target, mob/user)
return
+/obj/item/gun/examine_more(mob/user)
+ . = ..()
+ switch(company_flag)
+ if(COMPANY_CANTALAN)
+ . += "
It has [span_purple("Cantalan Federal Arms")] etched into the grip."
+ if(COMPANY_ARMADYNE)
+ . += "
It has [span_red("Armadyne Corporation")] etched into the barrel."
+ if(COMPANY_SCARBOROUGH)
+ . += "
It has [span_orange("Scarborough Arms")] stamped onto the grip."
+ if(COMPANY_BOLT)
+ . += "
It has [span_yellow("Bolt Fabrications")] stamped onto the reciever."
+ if(COMPANY_OLDARMS)
+ . += "
It has [span_red("Armadyne Oldarms")] etched into the barrel."
+ if(COMPANY_IZHEVSK)
+ . += "
It has [span_brown("Izhevsk Coalition")] cut in above the magwell."
+ if(COMPANY_NANOTRASEN)
+ . += "
It has [span_blue("Nanotrasen Armories")] etched into the reciever."
+ if(COMPANY_ALLSTAR)
+ . += "
It has [span_red("Allstar Lasers Inc.")] stamped on the front grip."
+ if(COMPANY_MICRON)
+ . += "
It has [span_cyan("Micron Control Sys.")] cut in above the cell slot."
+ if(COMPANY_INTERDYNE)
+ . += "
It has [span_cyan("Interdyne Pharmaceuticals")] stamped onto the barrel."
+
/////////////
// ZOOMING //
/////////////
@@ -860,5 +895,13 @@
azoom = new()
azoom.gun = src
+/obj/item/gun/emag_act(mob/user, obj/item/card/emag/emag_card)
+ . = ..()
+ if(!pin.can_remove)
+ to_chat(user, span_notice("You short out the gun's firing pin, allowing it to be removed!"))
+ pin.can_remove = TRUE
+ if(!(pin.obj_flags & EMAGGED))
+ pin.obj_flags |= EMAGGED
+
#undef FIRING_PIN_REMOVAL_DELAY
#undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER
diff --git a/modular_skyrat/master_files/icons/mob/huds/hud.dmi b/modular_skyrat/master_files/icons/mob/huds/hud.dmi
index f9a94a51ae6..0056f8d1150 100644
Binary files a/modular_skyrat/master_files/icons/mob/huds/hud.dmi and b/modular_skyrat/master_files/icons/mob/huds/hud.dmi differ
diff --git a/modular_skyrat/modules/ERT_Factions/FTU/code/items.dm b/modular_skyrat/modules/ERT_Factions/FTU/code/items.dm
index 32cd11dbfaa..94147d22130 100644
--- a/modular_skyrat/modules/ERT_Factions/FTU/code/items.dm
+++ b/modular_skyrat/modules/ERT_Factions/FTU/code/items.dm
@@ -57,10 +57,10 @@
realistic = TRUE
fire_sound = 'modular_skyrat/modules/ERT_Factions/FTU/sound/r37.ogg'
emp_damageable = FALSE
- armadyne = FALSE
can_bayonet = FALSE
can_flashlight = TRUE
mag_type = /obj/item/ammo_box/magazine/pulse/r37
+ company_flag = null
/obj/item/ammo_box/magazine/pulse/r37
name = "6.5mm XJP box magazine"
@@ -94,10 +94,10 @@
realistic = TRUE
fire_sound = 'modular_skyrat/modules/ERT_Factions/FTU/sound/r40.ogg'
emp_damageable = FALSE
- armadyne = FALSE
can_bayonet = FALSE
can_flashlight = TRUE
mag_type = /obj/item/ammo_box/magazine/pulse/r40
+ company_flag = null
/obj/item/ammo_box/magazine/pulse/r40
name = "7.2mm XJP belted box"
diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm
index d30bbfd4961..c1a80c6fee4 100644
--- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm
+++ b/modular_skyrat/modules/aesthetics/guns/code/guns.dm
@@ -49,8 +49,8 @@
ammo_x_offset = 2
/obj/item/gun/ballistic/shotgun/riot
- name = "\improper AS-1 'Peacekeeper' shotgun"
- desc = "An Aussec-made 12 gauge riot control pump shotgun fitted with an extended tube and a fixed tactical stock."
+ name = "\improper Peacekeeper shotgun"
+ desc = "A Nanotrasen-made riot control shotgun fitted with an extended tube and a fixed tactical stock."
icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
worn_icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi'
lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
@@ -65,8 +65,8 @@
fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/shotgun_light.ogg'
/obj/item/gun/ballistic/shotgun/automatic/combat
- name = "\improper PK12 Mod 2 shotgun"
- desc = "A modified Aussec Peacekeeper shotgun, this one has a pistol grip with a guard, hardlight front sight, and fitted with a heavier pin and parts for sustained fire, sadly it cannot be suppressed like its cousin. Atleast you can slamfire with it."
+ name = "\improper Peacekeeper combat shotgun"
+ desc = "A semi-automatic Nanotrasen Peacekeeper shotgun with tactical furnishing and heavier internals meant for sustained fire. Lacks a threaded barrel."
icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
worn_icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi'
lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
@@ -111,7 +111,7 @@
worn_icon_state = "gun"
worn_icon = null
-/obj/item/gun/energy/laser/thermal
+/obj/item/gun/energy/laser/thermal
icon = 'icons/obj/guns/energy.dmi'
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
@@ -212,6 +212,7 @@
can_suppress = TRUE
can_unsuppress = TRUE
weapon_weight = WEAPON_LIGHT
+ company_flag = COMPANY_SCARBOROUGH
/obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket //Normal sniper but epic
name = "SA-107 anti-materiel rifle"
@@ -274,6 +275,7 @@
name = "\improper Mosin Nagant M39"
desc = "A freshly-produced Mosin Nagant variant issued by Nanotrasen for their interns. You would rather not damage it."
icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
+ company_flag = COMPANY_NANOTRASEN
/obj/item/gun/ballistic/rifle/boltaction/brand_new/quartermaster
name = "\improper FTU 'Archangel' Mosin"
@@ -285,6 +287,7 @@
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba
can_be_sawn_off = FALSE
realistic = TRUE
+ company_flag = null //Cargonia's own
/obj/item/ammo_box/magazine/internal/boltaction/bubba
name = "mosin nagant extended internal magazine"
@@ -304,6 +307,7 @@
desc = "A bullpup three-round burst .45 PDW with an eerily familiar design. It has a foldable stock and a dot sight."
icon_state = "cmg1"
icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
+ company_flag = COMPANY_NANOTRASEN
/obj/item/gun/ballistic/automatic/ar/modular/model75
name = "\improper NT ARG-75"
@@ -314,6 +318,7 @@
fire_delay = 5
fire_sound_volume = 90
mag_type = /obj/item/ammo_box/magazine/multi_sprite/ostwind/arg75
+ company_flag = COMPANY_NANOTRASEN
/obj/item/ammo_box/magazine/multi_sprite/ostwind/arg75
name = "7.62mm straight magazine"
diff --git a/modular_skyrat/modules/armaments/code/armament_component.dm b/modular_skyrat/modules/armaments/code/armament_component.dm
index 60c7fc7f04e..8dff81ab4c3 100644
--- a/modular_skyrat/modules/armaments/code/armament_component.dm
+++ b/modular_skyrat/modules/armaments/code/armament_component.dm
@@ -23,9 +23,6 @@
stack_trace("No products specified for armament")
return COMPONENT_INCOMPATIBLE
- if(!isatom(parent))
- return COMPONENT_INCOMPATIBLE
-
parent_atom = parent
products = required_products
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm
index 16169b01e4c..7b835713d32 100644
--- a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm
+++ b/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm
@@ -1,9 +1,3 @@
-#define ARMAMENT_CATEGORY_PRIMARY "Primary Weapons"
-#define ARMAMENT_CATEGORY_PRIMARY_LIMIT 1
-#define ARMAMENT_SUBCATEGORY_SUBMACHINEGUN "Submachine Guns"
-#define ARMAMENT_SUBCATEGORY_ASSAULTRIFLE "Assault Rifles"
-#define ARMAMENT_SUBCATEGORY_SPECIAL "Special Weapons"
-
/datum/armament_entry/assault_operatives/primary
category = ARMAMENT_CATEGORY_PRIMARY
category_item_limit = ARMAMENT_CATEGORY_PRIMARY_LIMIT
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armaments_secondary.dm b/modular_skyrat/modules/assault_operatives/code/armaments/_armaments_secondary.dm
index e43fdb53256..566898a46a2 100644
--- a/modular_skyrat/modules/assault_operatives/code/armaments/_armaments_secondary.dm
+++ b/modular_skyrat/modules/assault_operatives/code/armaments/_armaments_secondary.dm
@@ -1,8 +1,3 @@
-
-#define ARMAMENT_CATEGORY_SECONDARY "Secondary Weapons"
-#define ARMAMENT_CATEGORY_SECONDARY_LIMIT 1
-#define ARMAMENT_SUBCATEGORY_PISTOL "Pistols"
-
// SECONDARY WEAPONS
/datum/armament_entry/assault_operatives/secondary
category = ARMAMENT_CATEGORY_SECONDARY
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_headgear.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_headgear.dm
index 9ed2bf93163..78d01b98789 100644
--- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_headgear.dm
+++ b/modular_skyrat/modules/assault_operatives/code/armaments/armament_headgear.dm
@@ -1,8 +1,4 @@
// HELMETS
-#define ARMAMENT_CATEGORY_ARMOR_HEAD "Headgear"
-#define ARMAMENT_CATEGORY_ARMOR_HEAD_LIMIT 1
-#define ARMAMENT_SUBCATEGORY_HELMET "Helmets"
-#define ARMAMENT_SUBCATEGORY_BERETS "Berets"
/datum/armament_entry/assault_operatives/headgear
category = ARMAMENT_CATEGORY_ARMOR_HEAD
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm
index 35070690053..46a98f47678 100644
--- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm
+++ b/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm
@@ -1,8 +1,3 @@
-#define ARMAMENT_CATEGORY_MEDICAL "Medical Supplies"
-#define ARMAMENT_CATEGORY_MEDICAL_LIMIT 5
-#define ARMAMENT_SUBCATEGORY_MEDKIT "Medkits"
-#define ARMAMENT_SUBCATEGORY_INJECTOR "Injectors"
-
/datum/armament_entry/assault_operatives/medical
category = ARMAMENT_CATEGORY_MEDICAL
category_item_limit = ARMAMENT_CATEGORY_MEDICAL_LIMIT
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_melee.dm b/modular_skyrat/modules/assault_operatives/code/armaments/armament_melee.dm
index a382d667982..71ec971833e 100644
--- a/modular_skyrat/modules/assault_operatives/code/armaments/armament_melee.dm
+++ b/modular_skyrat/modules/assault_operatives/code/armaments/armament_melee.dm
@@ -1,9 +1,5 @@
// MELEE WEAPONS
-#define ARMAMENT_CATEGORY_MELEE "Melee Weapons"
-#define ARMAMENT_CATEGORY_MELEE_LIMIT 1
-#define ARMAMENT_SUBCATEGORY_MELEE_LETHAL "Lethal Weaponry"
-#define ARMAMENT_SUBCATEGORY_MELEE_NONLETHAL "Non-Lethal Weaponry"
/datum/armament_entry/assault_operatives/melee
category = ARMAMENT_CATEGORY_MELEE
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm
index e268e677334..31098900990 100644
--- a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm
+++ b/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm
@@ -1,5 +1,3 @@
-#define ARMAMENT_SUBCATEGORY_SHOTGUN "Shotguns"
-
/datum/armament_entry/hecu/primary
category = ARMAMENT_CATEGORY_PRIMARY
category_item_limit = 4
diff --git a/modular_skyrat/modules/blueshield/code/blueshield.dm b/modular_skyrat/modules/blueshield/code/blueshield.dm
index 1db3d3ebf19..5243c5d9771 100644
--- a/modular_skyrat/modules/blueshield/code/blueshield.dm
+++ b/modular_skyrat/modules/blueshield/code/blueshield.dm
@@ -97,11 +97,11 @@
name = "\improper Allstar SC-3 PDW 'Hellfire'"
desc = "A prototype energy carbine, despite NT's ban on hellfire weaponry due to negative press. \
Allstar continued to work on it, compacting it into a small form-factor for personal defense. \
- As part of the Asset Retention Program created by Nanotrasen, Allstar's prototype began to be put into use. \
- It has the Allstar Energy Weapons logo painted next to the charge display."
+ As part of the Asset Retention Program created by Nanotrasen, Allstar's prototype began to be put into use."
icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
worn_icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi'
lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
icon_state = "hellfirepdw"
ammo_type = list(/obj/item/ammo_casing/energy/laser/hellfire/bs)
+ company_flag = COMPANY_ALLSTAR
diff --git a/modular_skyrat/modules/cargo/code/goodies.dm b/modular_skyrat/modules/cargo/code/goodies.dm
index 1f70f1bf392..0eeba4a6e45 100644
--- a/modular_skyrat/modules/cargo/code/goodies.dm
+++ b/modular_skyrat/modules/cargo/code/goodies.dm
@@ -50,48 +50,6 @@
//////////////////////////// Weapons or Ammo /////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
-/datum/supply_pack/goody/wt550_single
- name = "WT-550 Auto Rifle Single-Pack"
- desc = "Contains one high-powered, semiautomatic rifle chambered in 4.6x30mm." // "high-powered" lol yea right
- cost = PAYCHECK_HARD * 20
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/gun/ballistic/automatic/wt550)
-
-/datum/supply_pack/goody/wt550ammo_single
- name = "WT-550 Auto Rifle Ammo Single-Pack"
- desc = "Contains a 20-round magazine for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads."
- cost = PAYCHECK_HARD * 6
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/ammo_box/magazine/wt550m9)
-
-/datum/supply_pack/goody/makarov
- name = "Makarov Self Defense Pistol"
- desc = "A small, slow firing and low capacity pistol, but hey, it's better then a crowbar, right? (Does not include a weapons permit.)"
- cost = PAYCHECK_MEDIUM * 28
- contains = list(/obj/item/storage/box/gunset/makarov)
-
-/datum/supply_pack/goody/makarov_ammo
- name = "Makarov Ammo Resupply"
- desc = "An ammobox and a few spare magazines for a Makarov 10mm self defense pistol, for self defense, of course."
- cost = PAYCHECK_MEDIUM * 8
- contains = list(/obj/item/ammo_box/advanced/b10mm,
- /obj/item/ammo_box/magazine/multi_sprite/makarov,
- /obj/item/ammo_box/magazine/multi_sprite/makarov)
-
-/datum/supply_pack/goody/pepperball
- name = "PepperBall Self Defense Weapon"
- desc = "A 'state of the art' self defense weapon, firing balls of condensed pepperspray, don't aim for the face. Weapons permit not included."
- cost = PAYCHECK_MEDIUM * 17
- contains = list(/obj/item/storage/box/gunset/pepperball)
-
-/datum/supply_pack/goody/pepperball_ammo
- name = "PepperBall Ammo Resupply"
- desc = "An ammobox and a few spare magazines for a PepperBall self defense weapon, in case you run out."
- cost = PAYCHECK_MEDIUM * 6
- contains = list(/obj/item/ammo_box/advanced/pepperballs,
- /obj/item/ammo_box/magazine/pepperball,
- /obj/item/ammo_box/magazine/pepperball)
-
/datum/supply_pack/goody/gunmaint
name = "Gun Maintenance Kits"
desc = "Keep your pa's rifle in best condition, with two sets of cleaning supplies. Or your standard issue pistol if you're an itchy trigger, we're not here to judge."
@@ -99,84 +57,6 @@
contains = list(/obj/item/gun_maintenance_supplies,
/obj/item/gun_maintenance_supplies)
-/datum/supply_pack/goody/mcr_single
- name = "MCR-01 Microfusion Single-Pack"
- desc = "Contains one advanced Micron Control Systems Incorporated supplied MCR-01 Microfusion weapons platform."
- cost = PAYCHECK_HARD * 22
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/gun/microfusion/mcr01/advanced)
-
-/datum/supply_pack/goody/mcrammo_single
- name = "Microfusion Cell Single-Pack"
- desc = "Contains a box of three Microfusion cells, compatible with all MCR-01 Microfusion weapons."
- cost = PAYCHECK_HARD * 6
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/storage/box/ammo_box/microfusion/advanced)
-
-/datum/supply_pack/goody/wildcat_single
- name = "CFA Wildcat Single-Pack"
- desc = "Contains one Cantalan Federal Arms Wildcat Sub Machine Gun, chambered in .32 caliber."
- cost = PAYCHECK_HARD * 8
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/gun/ballistic/automatic/cfa_wildcat)
-
-/datum/supply_pack/goody/wildcatammo_single
- name = "CFA Wildcat Ammo Single-Pack"
- desc = "Contains a 30-round magazine for the CFA Wildcat."
- cost = PAYCHECK_HARD * 4
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat)
-
-/datum/supply_pack/goody/temp_single
- name = "Temperature Gun Kit Single-Pack"
- desc = "Contains a gunkit for a temperature gun, usable on an Allstar SC-2 Laser Carbine to convert it into firing temperature-affecting shots instead of lasers."
- cost = PAYCHECK_MEDIUM * 2
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/weaponcrafting/gunkit/temperature)
-
-/datum/supply_pack/goody/croon_single
- name = "Croon Single-Pack"
- desc = "Contains one Croon Sub Machine Gun chambered in 6.3mm, not exactly reliable... but it'll do you okay."
- cost = PAYCHECK_HARD * 10
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/gun/ballistic/automatic/croon)
- contraband = TRUE
-
-/datum/supply_pack/goody/croonammo_single
- name = "Croon Ammo Single-Pack"
- desc = "Contains a 15-round magazine for the Croon SMG."
- cost = PAYCHECK_HARD * 3
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/ammo_box/magazine/multi_sprite/croon)
- contraband = TRUE
-
-/datum/supply_pack/goody/lasergun_single
- name = "Allstar SC-1 Single-Pack"
- desc = "Contains one Allstar Lasers SC-1 laser gun."
- cost = PAYCHECK_HARD * 10
- access_view = ACCESS_ARMORY
- contains = list(/obj/item/gun/energy/laser)
-
-/datum/supply_pack/goody/cmg
- name = "NT CMG-1 Single-kit"
- desc = "Contains a single CMG-1 Weapons kit"
- cost = PAYCHECK_HARD * 10
- access_view = ACCESS_ARMORY
- contains = list(
- /obj/item/storage/box/gunset/cmg,
- )
-
-/datum/supply_pack/goody/cmg_lethal_ammo
- name = "NT CMG-1 Lethal Ammo"
- desc = "Contains 3 24-round lethal CMG-1 magazines."
- cost = PAYCHECK_HARD * 15
- access_view = ACCESS_ARMORY
- contains = list(
- /obj/item/ammo_box/magazine/cmgm45,
- /obj/item/ammo_box/magazine/cmgm45,
- /obj/item/ammo_box/magazine/cmgm45,
- )
-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Carpet Packs ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_skyrat/modules/cargo/code/packs.dm
index 13c62987711..b32039aa882 100644
--- a/modular_skyrat/modules/cargo/code/packs.dm
+++ b/modular_skyrat/modules/cargo/code/packs.dm
@@ -107,14 +107,6 @@
/obj/item/weaponcell/medical/toxin)
crate_name = "medicell replacement crate"
-/datum/supply_pack/medical/syringe_gun
- name = "Syringe Gun"
- desc = "A replacement medical syringe gun."
- cost = CARGO_CRATE_VALUE * 30
- access = ACCESS_MEDICAL
- contains = list(/obj/item/gun/syringe)
- crate_name = "replacement syringe gun crate"
-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Security ////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -127,123 +119,6 @@
contains = list(/obj/item/mod/control/pre_equipped/security)
crate_name = "security MODsuit crate"
-
-/datum/supply_pack/security/armory/wt550
- name = "WT-550 Auto Rifle Crate"
- desc = "Contains two high-powered, semiautomatic rifles chambered in 4.6x30mm. Requires Armory access to open."
- cost = CARGO_CRATE_VALUE * 7
- contains = list(/obj/item/gun/ballistic/automatic/wt550,
- /obj/item/gun/ballistic/automatic/wt550)
- crate_name = "auto rifle crate"
-
-/datum/supply_pack/security/armory/wt550ammo
- name = "WT-550 Auto Rifle Ammo Crate"
- desc = "Contains four 20-round magazine for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
- cost = CARGO_CRATE_VALUE * 3.5
- contains = list(/obj/item/ammo_box/magazine/wt550m9,
- /obj/item/ammo_box/magazine/wt550m9,
- /obj/item/ammo_box/magazine/wt550m9,
- /obj/item/ammo_box/magazine/wt550m9)
-
-/datum/supply_pack/security/croonsurplus
- name = "Croon Weapons Crate"
- desc = "Help out in a local revolt, or fund a civil war, it's not like you have a choice in supplier. (Comes with four magazines of ammo.)"
- cost = CARGO_CRATE_VALUE * 40
- contraband = TRUE
- contains = list(/obj/item/gun/ballistic/automatic/croon/nomag,
- /obj/item/gun/ballistic/automatic/croon/nomag,
- /obj/item/ammo_box/magazine/multi_sprite/croon,
- /obj/item/ammo_box/magazine/multi_sprite/croon,
- /obj/item/ammo_box/magazine/multi_sprite/croon,
- /obj/item/ammo_box/magazine/multi_sprite/croon)
- crate_name = "unmarked weapons crate"
- dangerous = TRUE
-
-/datum/supply_pack/security/pepperballplus
- name = "Pepperball Self-Defense Supply Crate"
- desc = "Uneasy times, corporate security get lost during the transfer? Protect yourself.. somewhat."
- cost = CARGO_CRATE_VALUE * 15
- contraband = TRUE
- contains = list(/obj/item/storage/box/gunset/pepperball,
- /obj/item/storage/box/gunset/pepperball)
- crate_name = "pepperball pistol crate"
- dangerous = TRUE
-
-/datum/supply_pack/security/cmg1
- name = "NT CMG-1 Value-Pack"
- desc = "Contains two CMG-1 Weapon kits, for all your automatic-fire needs."
- cost = CARGO_CRATE_VALUE * 15
- access_view = ACCESS_ARMORY
- contains = list(
- /obj/item/storage/box/gunset/cmg,
- /obj/item/storage/box/gunset/cmg,
- )
- dangerous = TRUE
-
-/datum/supply_pack/security/wildcat
- name = "CFA Wildcat Supply Crate"
- desc = "Local police running low on equipment? Neighbor particularly loud in the early morning? This should help out. (Does not include weapons permits.)"
- cost = CARGO_CRATE_VALUE * 15 // Bit cheaper then the next up, because it's not to good.
- contains = list(/obj/item/gun/ballistic/automatic/cfa_wildcat,
- /obj/item/gun/ballistic/automatic/cfa_wildcat,
- /obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat,
- /obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat,
- /obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat,
- /obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat)
- crate_name = "CFA sponsored weapons crate"
- dangerous = TRUE
-
-/datum/supply_pack/costumes_toys/randomised/improvised
- name = "Improvised Weapons Crate"
- desc = "Really hit rock bottom? Well, we've got a few things laying around from a sting-op on pirates we could lend you. (We'll expect these back.)" //they don't, actually.
- contraband = TRUE
- cost = CARGO_CRATE_VALUE * 7
- num_contained = 3
- contains = list(/obj/item/gun/ballistic/revolver/rifle/improvised,
- /obj/item/gun/ballistic/revolver/rifle, //Above, but better.
- /obj/item/gun/ballistic/rifle/irifle, //just a shittier mosin, in a much less statistically valuable crate.
- /obj/item/gun/ballistic/rifle/ishotgun,
- /obj/item/gun/ballistic/rifle/ishotgun/sawn, //Why not, helps pad the list.
- /obj/item/storage/box/beanbag,
- /obj/item/storage/box/lethalshot,
- /obj/item/ammo_box/c38, //Revolver rifle ammo.
- /obj/item/ammo_box/a762, //rifle ammo.
- /obj/item/gun/ballistic/automatic/surplus, //It's bad
- /obj/item/ammo_box/magazine/m10mm/rifle,
- /obj/item/gun/ballistic/automatic/pistol/toy) //they just hate you.
- crate_name = "dusty crate"
-/datum/supply_pack/security/armory/riotshotguns
- name = "Peacekeeper Shotgun Crate"
- desc = "For when the peace needs kept, and you're all out of gum. Contains 3 Peacekeeper shotguns and some non-lethal shells."
- cost = CARGO_CRATE_VALUE * 13.25
- contains = list(/obj/item/gun/ballistic/shotgun/riot,
- /obj/item/gun/ballistic/shotgun/riot,
- /obj/item/gun/ballistic/shotgun/riot,
- /obj/item/storage/box/beanbag,
- /obj/item/storage/box/rubbershot)
- crate_name = "peacekeeper shotgun crate"
-
-/datum/supply_pack/security/armory/woodstock
- name = "Woodstock Originals Crate"
- desc = "For when Oldschool is Cool... Or the Bartender looses their gun. again. Contains 3 woodstock shotguns"
- cost = CARGO_CRATE_VALUE * 9.5
- contains = list(/obj/item/gun/ballistic/shotgun,
- /obj/item/gun/ballistic/shotgun,
- /obj/item/gun/ballistic/shotgun)
- crate_name = "woodstock crate"
-
-/datum/supply_pack/security/armory/wt550ammovariety
- name = "WT-550 Auto Rifle Ammo Variety Crate"
- desc = "AI Gone rogue and blow the Security Lathe? Anti-Corporate scum steal it? Doesn't matter, we got you covered. Contains 2 of each magazine type for the WT550 Auto Rifle."
- cost = CARGO_CRATE_VALUE * 4.5
- contains = list(/obj/item/ammo_box/magazine/wt550m9,
- /obj/item/ammo_box/magazine/wt550m9,
- /obj/item/ammo_box/magazine/wt550m9/wtap,
- /obj/item/ammo_box/magazine/wt550m9/wtap,
- /obj/item/ammo_box/magazine/wt550m9/wtic,
- /obj/item/ammo_box/magazine/wt550m9/wtic)
- crate_name = "WT550 Ammo Variety Pack"
-
/datum/supply_pack/security/armor
name = "Armor Crate"
desc = "Three vests of well-rounded, decently-protective armor. Requires Security access to open."
diff --git a/modular_skyrat/modules/goofsec/code/department_guards.dm b/modular_skyrat/modules/goofsec/code/department_guards.dm
index 82cf6bf995e..01276a4da36 100644
--- a/modular_skyrat/modules/goofsec/code/department_guards.dm
+++ b/modular_skyrat/modules/goofsec/code/department_guards.dm
@@ -125,8 +125,8 @@
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
trim_state = "trim_orderly"
sechud_icon_state = SECHUD_ORDERLY
- extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_PHARMACY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_PHARMACY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM)
+ extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_PHARMACY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
+ minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_PHARMACY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_MECH_MEDICAL, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
config_job = "orderly"
template_access = list(ACCESS_CAPTAIN, ACCESS_CMO, ACCESS_CHANGE_IDS)
job = /datum/job/orderly
@@ -194,9 +194,9 @@
trim_state = "trim_calhoun"
sechud_icon_state = SECHUD_SCIENCE_GUARD
extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_ROBOTICS, ACCESS_RND, ACCESS_ORDNANCE, ACCESS_ORDNANCE_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY,
- ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS, ACCESS_AUX_BASE)
+ ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS, ACCESS_AUX_BASE, ACCESS_WEAPONS)
minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_ROBOTICS, ACCESS_RND, ACCESS_ORDNANCE, ACCESS_ORDNANCE_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY,
- ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS, ACCESS_AUX_BASE)
+ ACCESS_MECH_SCIENCE, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS, ACCESS_AUX_BASE, ACCESS_WEAPONS)
config_job = "science_guard"
template_access = list(ACCESS_CAPTAIN, ACCESS_RD, ACCESS_CHANGE_IDS)
job = /datum/job/science_guard
@@ -269,8 +269,8 @@
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
trim_state = "trim_bouncer"
sechud_icon_state = SECHUD_BOUNCER
- extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM, ACCESS_THEATRE)
- minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM, ACCESS_THEATRE, ACCESS_SERVICE)
+ extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM, ACCESS_THEATRE, ACCESS_WEAPONS)
+ minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM, ACCESS_THEATRE, ACCESS_SERVICE, ACCESS_WEAPONS)
config_job = "bouncer"
template_access = list(ACCESS_CAPTAIN, ACCESS_HOP, ACCESS_CHANGE_IDS)
job = /datum/job/bouncer
@@ -337,8 +337,8 @@
trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
trim_state = "trim_customs"
sechud_icon_state = SECHUD_CUSTOMS_AGENT
- extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
- minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
+ extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
+ minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MECH_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
config_job = "customs_agent"
template_access = list(ACCESS_CAPTAIN, ACCESS_QM, ACCESS_CHANGE_IDS)
job = /datum/job/customs_agent
@@ -406,9 +406,9 @@
trim_state = "trim_engiguard"
sechud_icon_state = SECHUD_ENGINEERING_GUARD
extra_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_MECH_ENGINE, ACCESS_AUX_BASE,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
minimal_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_MECH_ENGINE, ACCESS_AUX_BASE,
- ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM, ACCESS_WEAPONS)
config_job = "engineering_guard"
template_access = list(ACCESS_CAPTAIN, ACCESS_CE, ACCESS_CHANGE_IDS)
job = /datum/job/engineering_guard
diff --git a/modular_skyrat/modules/goofsec/code/projectiles.dm b/modular_skyrat/modules/goofsec/code/projectiles.dm
index 5c6ff37f26d..5cd8ab56b96 100644
--- a/modular_skyrat/modules/goofsec/code/projectiles.dm
+++ b/modular_skyrat/modules/goofsec/code/projectiles.dm
@@ -48,6 +48,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/laser/hardlight_bullet/vintorez)
shaded_charge = TRUE
cell_type = /obj/item/stock_parts/cell/super
+ company_flag = COMPANY_OLDARMS
/obj/item/ammo_casing/energy/laser/hardlight_bullet/vintorez
name = "hardlight bullet vintorez casing"
@@ -84,6 +85,7 @@
fire_delay = 10
shaded_charge = TRUE
cell_type = /obj/item/stock_parts/cell/super
+ company_flag = COMPANY_ARMADYNE
/obj/item/ammo_casing/energy/laser/hardlight_bullet/norwind
name = "hardlight bullet norwind casing"
@@ -112,6 +114,8 @@
can_bayonet = TRUE
ammo_type = list(/obj/item/ammo_casing/energy/laser/hardlight_bullet/ostwind)
cell_type = /obj/item/stock_parts/cell/super
+ company_flag = COMPANY_ARMADYNE
+
/obj/item/ammo_casing/energy/laser/hardlight_bullet/ostwind
name = "hardlight bullet norostwindwind casing"
projectile_type = /obj/projectile/beam/laser/hardlight_bullet/ostwind
@@ -142,6 +146,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/laser/hardlight_bullet/pitbull)
shaded_charge = TRUE
cell_type = /obj/item/stock_parts/cell/super
+ company_flag = COMPANY_BOLT
/obj/item/ammo_casing/energy/laser/hardlight_bullet/pitbull
name = "hardlight bullet pitbull casing"
@@ -170,6 +175,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/laser/hardlight_bullet/pcr)
shaded_charge = TRUE
cell_type = /obj/item/stock_parts/cell/super
+ company_flag = COMPANY_BOLT
/obj/item/ammo_casing/energy/laser/hardlight_bullet/pcr
name = "hardlight bullet pcr casing"
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_component.dm b/modular_skyrat/modules/gun_cargo/code/armament_component.dm
new file mode 100644
index 00000000000..4f59979a950
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_component.dm
@@ -0,0 +1,516 @@
+#define MAX_AMMO_AMOUNT 10
+#define CARGO_CONSOLE 1
+#define IRN_CONSOLE 2
+
+/datum/component/armament/cargo_gun
+ /// Selected amount of ammo to purchase
+ var/ammo_purchase_num = 1
+ /// Is this set to private order
+ var/self_paid = FALSE
+ /// Cooldown to announce a requested order
+ COOLDOWN_DECLARE(radio_cooldown)
+ /// To cut down on redundant istypes(), what this component is attached to
+ var/console_state = null
+ /// If this is a tablet, the parent budgetordering
+ var/datum/computer_file/program/budgetorders/parent_prog
+
+/datum/component/armament/cargo_gun/Initialize(list/required_products, list/needed_access)
+ . = ..()
+ if(istype(parent, /obj/machinery/computer/cargo))
+ console_state = CARGO_CONSOLE
+ else if(istype(parent, /obj/item/modular_computer))
+ console_state = IRN_CONSOLE
+
+/datum/component/armament/cargo_gun/Destroy(force, silent)
+ parent_prog = null
+ . = ..()
+
+/datum/component/armament/cargo_gun/on_attack_hand(datum/source, mob/living/user)
+ return
+
+/datum/component/armament/cargo_gun/on_attackby(atom/target, obj/item, mob/user)
+ return
+
+/datum/component/armament/cargo_gun/ui_data(mob/user)
+ var/list/data = list()
+
+ var/mob/living/carbon/human/the_person = user
+ var/obj/item/card/id/id_card
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+
+ if(console_state == IRN_CONSOLE)
+ var/obj/item/computer_hardware/card_slot/card_slot = parent_prog.computer.all_components[MC_CARD]
+ id_card = card_slot.GetID()
+ else
+ if(istype(the_person))
+ id_card = the_person.get_idcard(TRUE)
+
+ var/budget_name = "Cargo Budget"
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(id_card)
+ budget_name = self_paid ? id_card.name : buyer.account_holder
+
+ data["budget_name"] = budget_name
+
+ data["budget_points"] = self_paid ? id_card?.registered_account?.account_balance : buyer?.account_balance
+ data["ammo_amount"] = ammo_purchase_num
+ data["self_paid"] = !!self_paid
+ data["armaments_list"] = list()
+
+ for(var/armament_category as anything in GLOB.armament_entries)
+ var/illegal_failure
+
+ for(var/company as anything in SSgun_companies.companies)
+ if(company != armament_category)
+ continue
+
+ var/datum/gun_company/selected_company = SSgun_companies.companies[company]
+
+ if(!(console_state == CARGO_CONSOLE) && selected_company.illegal)
+ illegal_failure = TRUE
+ break
+
+ var/obj/machinery/computer/cargo/cargo_comp = parent
+ if(selected_company.illegal && !cargo_comp.contraband)
+ illegal_failure = TRUE
+ break
+
+ if(illegal_failure)
+ continue
+
+ var/list/armament_subcategories = list()
+
+ for(var/subcategory as anything in GLOB.armament_entries[armament_category][CATEGORY_ENTRY])
+ var/list/subcategory_items = list()
+ for(var/datum/armament_entry/armament_entry as anything in GLOB.armament_entries[armament_category][CATEGORY_ENTRY][subcategory])
+ if(products && !(armament_entry.type in products))
+ continue
+
+ var/datum/armament_entry/cargo_gun/gun_entry = armament_entry
+
+ if(gun_entry.contraband)
+ if(!(console_state == CARGO_CONSOLE))
+ continue
+ var/obj/machinery/computer/cargo/parent_console = parent
+ if(!parent_console.contraband)
+ continue
+
+ var/cant_purchase = FALSE
+
+ if(gun_entry.interest_required)
+ for(var/company_interested as anything in SSgun_companies.companies)
+ if(company_interested != armament_category)
+ continue
+ var/datum/gun_company/company_datum = SSgun_companies.companies[company_interested]
+ if(company_datum.interest < gun_entry.interest_required)
+ cant_purchase = TRUE
+
+ subcategory_items += list(list(
+ "ref" = REF(armament_entry),
+ "icon" = armament_entry.cached_base64,
+ "name" = armament_entry.name,
+ "cost" = armament_entry.cost,
+ "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE,
+ "magazine_cost" = armament_entry.magazine_cost,
+ "quantity" = gun_entry.stock,
+ "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0,
+ "description" = armament_entry.description,
+ "armament_category" = armament_entry.category,
+ "equipment_subcategory" = armament_entry.subcategory,
+ "cant_purchase" = !!cant_purchase,
+ ))
+
+ if(!LAZYLEN(subcategory_items))
+ continue
+
+ armament_subcategories += list(list(
+ "subcategory" = subcategory,
+ "items" = subcategory_items,
+ ))
+
+ if(!LAZYLEN(armament_subcategories))
+ continue
+
+ var/purchased_company = FALSE
+ var/company_cost = 0
+ var/handout_company = FALSE
+
+ for(var/company as anything in SSgun_companies.companies)
+ if(company != armament_category)
+ continue
+
+ if(company in SSgun_companies.purchased_companies)
+ purchased_company = TRUE
+
+ var/datum/gun_company/company_datum = SSgun_companies.companies[company]
+
+ if((company_datum in SSgun_companies.chosen_handouts) && !SSgun_companies.handout_picked)
+ handout_company = TRUE
+
+ company_cost = company_datum.cost
+
+
+ data["armaments_list"] += list(list(
+ "category" = armament_category,
+ "category_purchased" = !!purchased_company,
+ "category_uses" = used_categories[armament_category],
+ "subcategories" = armament_subcategories,
+ "cost" = company_cost,
+ "handout" = !!handout_company,
+ ))
+
+ return data
+
+/datum/component/armament/cargo_gun/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "CargoGunConsole")
+ ui.open()
+
+/datum/component/armament/cargo_gun/select_armament(mob/user, datum/armament_entry/cargo_gun/armament_entry)
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ var/obj/item/modular_computer/possible_downloader
+ var/obj/machinery/computer/cargo/possible_console
+
+ if(console_state == CARGO_CONSOLE)
+ possible_console = parent
+
+ else if(console_state == IRN_CONSOLE)
+ possible_downloader = parent
+
+ if(!istype(armament_entry))
+ return
+
+ var/mob/living/carbon/human/the_person = user
+
+ if(!istype(the_person))
+ return
+
+ var/obj/item/card/id/id_card
+
+ if(console_state == IRN_CONSOLE)
+ var/obj/item/computer_hardware/card_slot/card_slot = parent_prog.computer.all_components[MC_CARD]
+ id_card = card_slot.GetID()
+ else
+ id_card = the_person.get_idcard(TRUE)
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(self_paid)
+ if(!istype(id_card))
+ to_chat(user, span_warning("No ID card detected."))
+ return
+
+ if(istype(id_card, /obj/item/card/id/departmental_budget))
+ to_chat(user, span_warning("[id_card] cannot be used to make purchases."))
+ return
+
+ var/datum/bank_account/account = id_card.registered_account
+
+ if(!istype(account))
+ to_chat(user, span_warning("Invalid bank account."))
+ return
+
+ buyer = account
+
+ if(!buyer)
+ to_chat(user, span_warning("No budget found!"))
+ return
+
+ if(!armament_entry.stock)
+ to_chat(user, span_warning("No stock of this item left!"))
+ return
+
+ if(!ishuman(user))
+ return
+
+ if(!buyer.has_money(armament_entry.cost)) //so you can't "stash" guns for later merchant cycles
+ to_chat(user, span_warning("Not enough money!"))
+ return
+
+ var/name = the_person.get_authentification_name()
+ var/reason = ""
+
+ if(possible_console)
+ if(possible_console.requestonly && !self_paid)
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+ else if(possible_downloader)
+ var/datum/computer_file/program/budgetorders/parent_file = parent_prog
+ var/obj/item/computer_hardware/card_slot/card_slot = possible_downloader.all_components[MC_CARD]
+ if((parent_file.requestonly && !self_paid) || !(card_slot?.GetID()))
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+ used_categories[armament_entry.category]++
+
+ purchased_items[armament_entry]++
+ armament_entry.stock--
+
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
+
+ var/datum/supply_pack/armament/created_pack = new
+ created_pack.name = initial(armament_entry.item_type.name)
+ created_pack.cost = cost_calculate(armament_entry.cost) //Paid for seperately
+ created_pack.contains = list(armament_entry.item_type)
+ var/rank = the_person.get_assignment(hand_first = TRUE)
+ var/ckey = the_person.ckey
+ var/datum/supply_order/armament/created_order
+ if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR))
+ created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason)
+ else
+ created_order = new(created_pack, name, rank, ckey, reason = reason)
+ created_order.interest_addition = armament_entry.interest_addition
+ created_order.selected_entry = armament_entry
+ created_order.used_component = src
+ if(console_state == CARGO_CONSOLE)
+ created_order.generateRequisition(get_turf(parent))
+ if(possible_console.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+ else if(console_state == IRN_CONSOLE)
+ var/datum/computer_file/program/budgetorders/comp_file = parent_prog
+ created_order.generateRequisition(get_turf(parent))
+ if(comp_file.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+
+/datum/component/armament/cargo_gun/buy_ammo(mob/user, datum/armament_entry/cargo_gun/armament_entry)
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ var/obj/machinery/computer/cargo/possible_console
+ var/obj/item/modular_computer/possible_downloader
+
+ if(console_state == CARGO_CONSOLE)
+ possible_console = parent
+
+ else if(console_state == IRN_CONSOLE)
+ possible_downloader = parent
+
+ var/mob/living/carbon/human/the_person = user
+
+ if(!istype(the_person))
+ return
+
+ var/obj/item/card/id/id_card
+
+ if(console_state == IRN_CONSOLE)
+ var/obj/item/computer_hardware/card_slot/card_slot = parent_prog.computer.all_components[MC_CARD]
+ id_card = card_slot.GetID()
+ else
+ id_card = the_person.get_idcard(TRUE)
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(self_paid)
+ if(!istype(id_card))
+ to_chat(user, span_warning("No ID card detected."))
+ return
+
+ if(istype(id_card, /obj/item/card/id/departmental_budget))
+ to_chat(user, span_warning("[id_card] cannot be used to make purchases."))
+ return
+
+ var/datum/bank_account/account = id_card.registered_account
+
+ if(!istype(account))
+ to_chat(user, span_warning("Invalid bank account."))
+ return
+
+ buyer = account
+
+ if(!armament_entry.magazine)
+ return
+
+ if(!buyer)
+ to_chat(user, span_warning("No budget found!"))
+ return
+
+ var/quantity_cost = armament_entry.magazine_cost * ammo_purchase_num
+
+ if(!buyer.has_money(quantity_cost))
+ to_chat(user, span_warning("Not enough money!"))
+ return
+
+ var/name = the_person.get_authentification_name()
+ var/reason = ""
+
+ if(possible_console)
+ if(possible_console.requestonly && !self_paid)
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+ else if(possible_downloader)
+ var/datum/computer_file/program/budgetorders/parent_file = parent_prog
+ var/obj/item/computer_hardware/card_slot/card_slot = possible_downloader.all_components[MC_CARD]
+ if((parent_file.requestonly && !self_paid) || !(card_slot?.GetID()))
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+
+ var/datum/supply_pack/created_pack = new
+ var/assembled_name = "[initial(armament_entry.item_type.name)] Ammunition (x[ammo_purchase_num])"
+ created_pack.name = assembled_name
+ created_pack.cost = cost_calculate(quantity_cost)
+ created_pack.contains = list()
+ for(var/i in 1 to ammo_purchase_num)
+ created_pack.contains += armament_entry.magazine
+ var/rank = the_person.get_assignment(hand_first = TRUE)
+ var/ckey = the_person.ckey
+ var/datum/supply_order/armament/created_order
+ if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR))
+ created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason)
+ else
+ created_order = new(created_pack, name, rank, ckey, reason = reason)
+ created_order.interest_addition = 1 * ammo_purchase_num
+ var/datum/computer_file/program/budgetorders/file_p = parent_prog
+ if(console_state == CARGO_CONSOLE)
+ created_order.generateRequisition(get_turf(parent))
+ if(possible_console.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+ else if(console_state == IRN_CONSOLE)
+ if(file_p.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+
+/datum/component/armament/cargo_gun/proc/cost_calculate(cost)
+ . = cost
+ . *= SSeconomy.pack_price_modifier
+
+/datum/component/armament/cargo_gun/ui_act(action, list/params)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("set_ammo_amount")
+ var/target = text2num(params["chosen_amount"])
+ ammo_purchase_num = clamp(target, 1, MAX_AMMO_AMOUNT)
+
+ if("buy_company")
+ var/target = params["selected_company"]
+ var/obj/machinery/computer/cargo/possible_console
+
+ if(console_state == CARGO_CONSOLE)
+ possible_console = parent
+ if(possible_console.requestonly && !self_paid)
+ return
+ else if(console_state == IRN_CONSOLE)
+ if(parent_prog.requestonly && !self_paid)
+ return
+
+ for(var/find_company in SSgun_companies.unpurchased_companies)
+ if(find_company != target)
+ continue
+
+ var/datum/gun_company/found_company = SSgun_companies.unpurchased_companies[target]
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+
+ var/mob/living/carbon/human/user = usr
+
+ if(!istype(user))
+ return
+
+ var/obj/item/card/id/id_card = user.get_idcard(TRUE)
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_HEADS in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(self_paid)
+
+ if(!istype(id_card))
+ to_chat(user, span_warning("No ID card detected."))
+ return
+
+ if(istype(id_card, /obj/item/card/id/departmental_budget))
+ to_chat(user, span_warning("[id_card] cannot be used to make purchases."))
+ return
+
+ var/datum/bank_account/account = id_card.registered_account
+
+ if(!istype(account))
+ to_chat(user, span_warning("Invalid bank account."))
+ return
+
+ buyer = account
+
+ var/assigned_cost = -found_company.cost
+ var/do_payment = TRUE
+ if(!SSgun_companies.handout_picked && (found_company in SSgun_companies.chosen_handouts))
+ do_payment = FALSE
+ SSgun_companies.handout_picked = TRUE
+ if(do_payment)
+ if(!buyer.adjust_money(assigned_cost))
+ return
+
+ SSgun_companies.purchased_companies[find_company] = found_company
+ SSgun_companies.unpurchased_companies.Remove(find_company)
+ break
+
+ if("toggleprivate")
+ var/obj/item/card/id/id_card
+ var/mob/living/carbon/human/the_person = usr
+
+ if(!istype(the_person))
+ return
+
+ if(console_state == IRN_CONSOLE)
+ var/obj/item/computer_hardware/card_slot/card_slot = parent_prog.computer.all_components[MC_CARD]
+ id_card = card_slot.GetID()
+ else
+ id_card = the_person.get_idcard(TRUE)
+
+ if(!id_card)
+ return
+
+ self_paid = !self_paid
+
+#undef MAX_AMMO_AMOUNT
+#undef CARGO_CONSOLE
+#undef IRN_CONSOLE
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/allstar.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/allstar.dm
new file mode 100644
index 00000000000..46586792e74
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/allstar.dm
@@ -0,0 +1,62 @@
+#define ARMAMENT_CATEGORY_ALLSTAR "Allstar Lasers"
+
+/datum/armament_entry/cargo_gun/allstar
+ category = ARMAMENT_CATEGORY_ALLSTAR
+ company_bitflag = COMPANY_ALLSTAR
+
+/datum/armament_entry/cargo_gun/allstar/laser
+ subcategory = ARMAMENT_SUBCATEGORY_LASER
+
+/datum/armament_entry/cargo_gun/allstar/laser/sc1
+ item_type = /obj/item/gun/energy/laser
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/allstar/laser/sc2
+ item_type = /obj/item/gun/energy/e_gun
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 8
+
+/datum/armament_entry/cargo_gun/allstar/laser/sc3
+ item_type = /obj/item/gun/energy/laser/hellgun/blueshield
+ lower_cost = CARGO_CRATE_VALUE * 7
+ upper_cost = CARGO_CRATE_VALUE * 9
+
+/datum/armament_entry/cargo_gun/allstar/laser/mini_egun
+ item_type = /obj/item/gun/energy/e_gun/mini
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 7
+
+/datum/armament_entry/cargo_gun/allstar/laser/disabler
+ item_type = /obj/item/gun/energy/disabler
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/allstar/laser/dragnet
+ item_type = /obj/item/gun/energy/e_gun/dragnet
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/allstar/gunkit
+ subcategory = ARMAMENT_SUBCATEGORY_GUNPART
+ interest_addition = COMPANY_INTEREST_ATTACHMENT
+
+/datum/armament_entry/cargo_gun/allstar/gunkit/tempgun
+ item_type = /obj/item/weaponcrafting/gunkit/temperature
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/allstar/gunkit/adv_egun
+ item_type = /obj/item/weaponcrafting/gunkit/nuclear
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 9
+
+/datum/armament_entry/cargo_gun/allstar/gunkit/ion
+ item_type = /obj/item/weaponcrafting/gunkit/ion
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 10
+
+/datum/armament_entry/cargo_gun/allstar/gunkit/hellfire
+ item_type = /obj/item/weaponcrafting/gunkit/hellgun
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 8
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne.dm
new file mode 100644
index 00000000000..f3fc790178b
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne.dm
@@ -0,0 +1,69 @@
+#define ARMAMENT_CATEGORY_ARMADYNE "Armadyne Corporation"
+
+/datum/armament_entry/cargo_gun/armadyne
+ category = ARMAMENT_CATEGORY_ARMADYNE
+ company_bitflag = COMPANY_ARMADYNE
+
+/datum/armament_entry/cargo_gun/armadyne/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/armadyne/pistol/osprey
+ item_type = /obj/item/gun/ballistic/automatic/pistol/pdh
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 14
+
+/datum/armament_entry/cargo_gun/armadyne/pistol/ladon
+ item_type = /obj/item/gun/ballistic/automatic/pistol/ladon
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 13
+
+/datum/armament_entry/cargo_gun/armadyne/pistol/firefly
+ item_type = /obj/item/gun/ballistic/automatic/pistol/firefly
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/armadyne/pistol/pdh6b
+ item_type = /obj/item/gun/ballistic/automatic/pistol/pdh/peacekeeper
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/armadyne/pistol/mk58
+ item_type = /obj/item/gun/ballistic/automatic/pistol/mk58
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 8
+
+/datum/armament_entry/cargo_gun/armadyne/shotgun
+ subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN
+
+/datum/armament_entry/cargo_gun/armadyne/shotgun/as2
+ item_type = /obj/item/gun/ballistic/shotgun/automatic/as2
+ lower_cost = CARGO_CRATE_VALUE * 7
+ upper_cost = CARGO_CRATE_VALUE * 8
+
+/datum/armament_entry/cargo_gun/armadyne/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/armadyne/smg/dozer
+ item_type = /obj/item/gun/ballistic/automatic/dozer
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/armadyne/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/armadyne/rifle/ripper
+ item_type = /obj/item/gun/ballistic/automatic/dmr
+ lower_cost = CARGO_CRATE_VALUE * 24
+ upper_cost = CARGO_CRATE_VALUE * 28
+
+/datum/armament_entry/cargo_gun/armadyne/rifle/norwind
+ item_type = /obj/item/gun/energy/norwind
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 14
+
+/datum/armament_entry/cargo_gun/armadyne/rifle/ostwind
+ item_type = /obj/item/gun/energy/ostwind
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 14
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne_oldarms.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne_oldarms.dm
new file mode 100644
index 00000000000..eee554e41ae
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/armadyne_oldarms.dm
@@ -0,0 +1,58 @@
+#define ARMAMENT_CATEGORY_OLDARMS "Armadyne Oldarms"
+
+/datum/armament_entry/cargo_gun/oldarms
+ category = ARMAMENT_CATEGORY_OLDARMS
+ company_bitflag = COMPANY_OLDARMS
+
+/datum/armament_entry/cargo_gun/oldarms/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/oldarms/pistol/luger
+ item_type = /obj/item/gun/ballistic/automatic/pistol/luger
+ lower_cost = CARGO_CRATE_VALUE * 7
+ upper_cost = CARGO_CRATE_VALUE * 9
+
+/datum/armament_entry/cargo_gun/oldarms/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+
+/datum/armament_entry/cargo_gun/oldarms/smg/mp40
+ item_type = /obj/item/gun/ballistic/automatic/mp40
+ lower_cost = CARGO_CRATE_VALUE * 20
+ upper_cost = CARGO_CRATE_VALUE * 24
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/oldarms/smg/uzi
+ item_type = /obj/item/gun/ballistic/automatic/mini_uzi
+ lower_cost = CARGO_CRATE_VALUE * 14
+ upper_cost = CARGO_CRATE_VALUE * 18
+
+/datum/armament_entry/cargo_gun/oldarms/smg/ppsh
+ item_type = /obj/item/gun/ballistic/automatic/ppsh
+ lower_cost = CARGO_CRATE_VALUE * 32
+ upper_cost = CARGO_CRATE_VALUE * 38
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/oldarms/smg/thompson
+ item_type = /obj/item/gun/ballistic/automatic/tommygun
+ lower_cost = CARGO_CRATE_VALUE * 30
+ upper_cost = CARGO_CRATE_VALUE * 36
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/oldarms/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/oldarms/rifle/vintorez
+ item_type = /obj/item/gun/energy/vintorez
+ lower_cost = CARGO_CRATE_VALUE * 12
+ upper_cost = CARGO_CRATE_VALUE * 18
+
+/datum/armament_entry/cargo_gun/oldarms/rifle/stg
+ item_type = /obj/item/gun/ballistic/automatic/stg
+ lower_cost = CARGO_CRATE_VALUE * 24
+ upper_cost = CARGO_CRATE_VALUE * 28
+
+/datum/armament_entry/cargo_gun/oldarms/rifle/g11
+ item_type = /obj/item/gun/ballistic/automatic/g11
+ lower_cost = CARGO_CRATE_VALUE * 30
+ upper_cost = CARGO_CRATE_VALUE * 35
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/bolt.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/bolt.dm
new file mode 100644
index 00000000000..c712b5383b7
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/bolt.dm
@@ -0,0 +1,60 @@
+#define ARMAMENT_CATEGORY_BOLT "Bolt Fabrications"
+
+/datum/armament_entry/cargo_gun/bolt
+ category = ARMAMENT_CATEGORY_BOLT
+ company_bitflag = COMPANY_BOLT
+
+/datum/armament_entry/cargo_gun/bolt/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/bolt/pistol/responder
+ item_type = /obj/item/gun/energy/disabler/bolt_disabler
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/bolt/pistol/m1911
+ item_type = /obj/item/gun/ballistic/automatic/pistol/m1911
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/bolt/pistol/pepperball
+ item_type = /obj/item/gun/ballistic/automatic/pistol/pepperball
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/bolt/pistol/spurchamber
+ item_type = /obj/item/gun/ballistic/revolver/zeta
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 7
+
+/datum/armament_entry/cargo_gun/bolt/pistol/spurmaster
+ item_type = /obj/item/gun/ballistic/revolver/revolution
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 8
+
+/datum/armament_entry/cargo_gun/bolt/shotgun
+ subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN
+
+/datum/armament_entry/cargo_gun/bolt/m23
+ item_type = /obj/item/gun/ballistic/shotgun/m23
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/bolt/generic_shotgun
+ item_type = /obj/item/gun/ballistic/shotgun
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 10
+
+/datum/armament_entry/cargo_gun/bolt/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/bolt/smg/pcr
+ item_type = /obj/item/gun/energy/pcr
+ lower_cost = CARGO_CRATE_VALUE * 16
+ upper_cost = CARGO_CRATE_VALUE * 20
+
+/datum/armament_entry/cargo_gun/bolt/smg/pitbull
+ item_type = /obj/item/gun/energy/pitbull
+ lower_cost = CARGO_CRATE_VALUE * 16
+ upper_cost = CARGO_CRATE_VALUE * 20
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/cantalan.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/cantalan.dm
new file mode 100644
index 00000000000..b9597085983
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/cantalan.dm
@@ -0,0 +1,81 @@
+#define ARMAMENT_CATEGORY_CANTALAN "Cantalan Federal Arms"
+
+/datum/armament_entry/cargo_gun/cantalan
+ category = ARMAMENT_CATEGORY_CANTALAN
+ company_bitflag = COMPANY_CANTALAN
+
+/datum/armament_entry/cargo_gun/cantalan/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/cantalan/pistol/glock17
+ item_type = /obj/item/gun/ballistic/automatic/pistol/g17
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 7
+
+/datum/armament_entry/cargo_gun/cantalan/pistol/glock18
+ item_type = /obj/item/gun/ballistic/automatic/pistol/g18
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/cantalan/pistol/snub
+ item_type = /obj/item/gun/ballistic/automatic/pistol/cfa_snub
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 9
+
+/datum/armament_entry/cargo_gun/cantalan/pistol/ruby
+ item_type = /obj/item/gun/ballistic/automatic/pistol/cfa_ruby
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 9
+
+/datum/armament_entry/cargo_gun/cantalan/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+
+/datum/armament_entry/cargo_gun/cantalan/smg/lynx
+ item_type = /obj/item/gun/ballistic/automatic/cfa_lynx
+ lower_cost = CARGO_CRATE_VALUE * 12
+ upper_cost = CARGO_CRATE_VALUE * 15
+
+/datum/armament_entry/cargo_gun/cantalan/smg/wildcat
+ item_type = /obj/item/gun/ballistic/automatic/cfa_wildcat
+ lower_cost = CARGO_CRATE_VALUE * 9
+ upper_cost = CARGO_CRATE_VALUE * 11
+
+/datum/armament_entry/cargo_gun/cantalan/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/cantalan/rifle/catanheim
+ item_type = /obj/item/gun/ballistic/automatic/cfa_rifle
+ lower_cost = CARGO_CRATE_VALUE * 28
+ upper_cost = CARGO_CRATE_VALUE * 32
+
+/datum/armament_entry/cargo_gun/cantalan/ammo
+ subcategory = ARMAMENT_SUBCATEGORY_AMMO
+ stock_mult = 2
+ interest_addition = COMPANY_INTEREST_AMMO
+ lower_cost = CARGO_CRATE_VALUE * 1
+ upper_cost = CARGO_CRATE_VALUE * 2
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c34
+ item_type = /obj/item/ammo_box/c34
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c34_ap
+ item_type = /obj/item/ammo_box/c34/ap
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c34_in
+ item_type = /obj/item/ammo_box/c34/fire
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c34_rub
+ item_type = /obj/item/ammo_box/c34/rubber
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c12mm
+ item_type = /obj/item/ammo_box/c12mm
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c12mm_ap
+ item_type = /obj/item/ammo_box/c12mm/ap
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c12mm_in
+ item_type = /obj/item/ammo_box/c12mm/fire
+
+/datum/armament_entry/cargo_gun/cantalan/ammo/c12mm_hp
+ item_type = /obj/item/ammo_box/c12mm/hp
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/dynamics.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/dynamics.dm
new file mode 100644
index 00000000000..15e6fa9d462
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/dynamics.dm
@@ -0,0 +1,119 @@
+#define ARMAMENT_CATEGORY_DYNAMICS "Armament Dynamics Inc."
+
+/datum/armament_entry/cargo_gun/dynamics
+ category = ARMAMENT_CATEGORY_DYNAMICS
+ company_bitflag = COMPANY_DYNAMICS
+ stock_mult = 2 //To compensate for their interest being fairly low most of the time
+
+/datum/armament_entry/cargo_gun/dynamics/ammo
+ subcategory = ARMAMENT_SUBCATEGORY_AMMO
+ lower_cost = CARGO_CRATE_VALUE * 0.75
+ upper_cost = CARGO_CRATE_VALUE * 1.25
+ interest_addition = COMPANY_INTEREST_AMMO
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c9mm
+ item_type = /obj/item/ammo_box/c9mm
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c9mm_ap
+ item_type = /obj/item/ammo_box/c9mm/ap
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c9mm_hp
+ item_type = /obj/item/ammo_box/c9mm/hp
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c9mm_in
+ item_type = /obj/item/ammo_box/c9mm/fire
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c10mm
+ item_type = /obj/item/ammo_box/c10mm
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c10mm_ap
+ item_type = /obj/item/ammo_box/c10mm/ap
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c10mm_hp
+ item_type = /obj/item/ammo_box/c10mm/hp
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c10mm_in
+ item_type = /obj/item/ammo_box/c10mm/fire
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c12ga
+ item_type = /obj/item/storage/box/lethalshot
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c12ga_rub
+ item_type = /obj/item/storage/box/rubbershot
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c12ga_bean
+ item_type = /obj/item/storage/box/beanbag
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c12ga_tech
+ item_type = /obj/item/storage/box/techshell
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c46mm
+ item_type = /obj/item/ammo_box/c46x30mm
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c46mm_ap
+ item_type = /obj/item/ammo_box/c46x30mm/ap
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c46mm_rub
+ item_type = /obj/item/ammo_box/c46x30mm/rubber
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c32
+ item_type = /obj/item/ammo_box/c32
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c32_ap
+ item_type = /obj/item/ammo_box/c32/ap
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c32_in
+ item_type = /obj/item/ammo_box/c32/fire
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c32_rub
+ item_type = /obj/item/ammo_box/c32/rubber
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38
+ item_type = /obj/item/ammo_box/c38
+ lower_cost = CARGO_CRATE_VALUE * 0.5
+ upper_cost = CARGO_CRATE_VALUE * 1
+ stock_mult = 3
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38/dum
+ item_type = /obj/item/ammo_box/c38/dumdum
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38/hot
+ item_type = /obj/item/ammo_box/c38/hotshot
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38/ice
+ item_type = /obj/item/ammo_box/c38/iceblox
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38/mat
+ item_type = /obj/item/ammo_box/c38/match
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/c38/trc
+ item_type = /obj/item/ammo_box/c38/trac
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/b10mm
+ item_type = /obj/item/ammo_box/b10mm
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/b10mm_hp
+ item_type = /obj/item/ammo_box/b10mm/hp
+
+/datum/armament_entry/cargo_gun/dynamics/ammo/b10mm_rub
+ item_type = /obj/item/ammo_box/b10mm/rubber
+
+/datum/armament_entry/cargo_gun/dynamics/misc
+ subcategory = ARMAMENT_SUBCATEGORY_SPECIAL
+
+/datum/armament_entry/cargo_gun/dynamics/misc/bandolier
+ item_type = /obj/item/storage/belt/bandolier
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/dynamics/misc/ammo_bench
+ item_type = /obj/item/circuitboard/machine/ammo_workbench
+ lower_cost = CARGO_CRATE_VALUE * 28
+ upper_cost = CARGO_CRATE_VALUE * 33
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/dynamics/misc/lethal_disk
+ item_type = /obj/item/disk/ammo_workbench/lethal
+ lower_cost = CARGO_CRATE_VALUE * 22
+ upper_cost = CARGO_CRATE_VALUE * 27
+ interest_required = HIGH_INTEREST
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/interdyne.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/interdyne.dm
new file mode 100644
index 00000000000..f31611f5a21
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/interdyne.dm
@@ -0,0 +1,64 @@
+#define ARMAMENT_CATEGORY_INTERDYNE "Interdyne Pharmaceuticals"
+
+/datum/armament_entry/cargo_gun/interdyne
+ category = ARMAMENT_CATEGORY_INTERDYNE
+ company_bitflag = COMPANY_INTERDYNE
+
+/datum/armament_entry/cargo_gun/interdyne/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/interdyne/pistol/honeybee
+ item_type = /obj/item/gun/ballistic/automatic/pistol/firefly/smartdart
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 6
+
+/datum/armament_entry/cargo_gun/interdyne/special
+ subcategory = ARMAMENT_SUBCATEGORY_SPECIAL
+
+/datum/armament_entry/cargo_gun/interdyne/special/syringe_gun
+ item_type = /obj/item/gun/syringe
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/interdyne/special/smartdart_gun
+ item_type = /obj/item/gun/syringe/smartdart
+ lower_cost = CARGO_CRATE_VALUE * 6
+ upper_cost = CARGO_CRATE_VALUE * 8
+
+/datum/armament_entry/cargo_gun/interdyne/special/rapid_syringe_gun
+ item_type = /obj/item/gun/syringe/rapidsyringe
+ lower_cost = CARGO_CRATE_VALUE * 16
+ upper_cost = CARGO_CRATE_VALUE * 18
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/interdyne/ammo
+ subcategory = ARMAMENT_SUBCATEGORY_AMMO
+ interest_addition = COMPANY_INTEREST_AMMO
+
+/datum/armament_entry/cargo_gun/interdyne/ammo/pierce_syringe
+ item_type = /obj/item/storage/box/syringes/piercing
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 8
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/interdyne/ammo/bluespace_syringe
+ item_type = /obj/item/storage/box/syringes/bluespace
+ lower_cost = CARGO_CRATE_VALUE * 9
+ upper_cost = CARGO_CRATE_VALUE * 12
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/interdyne/chemical
+ subcategory = ARMAMENT_SUBCATEGORY_CHEMICAL
+ interest_addition = COMPANY_INTEREST_CHEMICAL
+ contraband = TRUE
+
+/datum/armament_entry/cargo_gun/interdyne/chemical/toxin
+ item_type = /obj/item/reagent_containers/glass/bottle/toxin
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/interdyne/chemical/cyanide
+ item_type = /obj/item/reagent_containers/glass/bottle/cyanide
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 6
+ interest_required = PASSED_INTEREST
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/izhevsk.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/izhevsk.dm
new file mode 100644
index 00000000000..55a22503650
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/izhevsk.dm
@@ -0,0 +1,50 @@
+#define ARMAMENT_CATEGORY_IZHEVSK "Izhevsk Coalition"
+
+/datum/armament_entry/cargo_gun/izhevsk
+ category = ARMAMENT_CATEGORY_IZHEVSK
+ company_bitflag = COMPANY_IZHEVSK
+
+/datum/armament_entry/cargo_gun/izhevsk/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/izhevsk/pistol/makarov
+ item_type = /obj/item/gun/ballistic/automatic/pistol/makarov
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/izhevsk/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+
+/datum/armament_entry/cargo_gun/izhevsk/smg/surplus
+ item_type = /obj/item/gun/ballistic/automatic/plastikov
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/izhevsk/smg/croon
+ item_type = /obj/item/gun/ballistic/automatic/croon
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 7
+
+/datum/armament_entry/cargo_gun/izhevsk/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+
+/datum/armament_entry/cargo_gun/izhevsk/rifle/akm
+ item_type = /obj/item/gun/ballistic/automatic/akm
+ lower_cost = CARGO_CRATE_VALUE * 40
+ upper_cost = CARGO_CRATE_VALUE * 45
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/izhevsk/rifle/surplus
+ item_type = /obj/item/gun/ballistic/automatic/surplus
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 6
+
+/datum/armament_entry/cargo_gun/izhevsk/rifle/mosin
+ item_type = /obj/item/gun/ballistic/rifle/boltaction
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 6
+
+/datum/armament_entry/cargo_gun/izhevsk/rifle/revrifle
+ item_type = /obj/item/gun/ballistic/revolver/rifle
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/micron.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/micron.dm
new file mode 100644
index 00000000000..e9fd838e8e2
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/micron.dm
@@ -0,0 +1,142 @@
+#define ARMAMENT_CATEGORY_MICRON "Micron Control Systems"
+
+/datum/armament_entry/cargo_gun/micron
+ category = ARMAMENT_CATEGORY_MICRON
+ company_bitflag = COMPANY_MICRON
+
+/datum/armament_entry/cargo_gun/micron/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+
+/datum/armament_entry/cargo_gun/micron/rifle/mcr
+ item_type = /obj/item/gun/microfusion/mcr01
+ lower_cost = CARGO_CRATE_VALUE * 12
+ upper_cost = CARGO_CRATE_VALUE * 16
+
+/datum/armament_entry/cargo_gun/micron/ammo
+ subcategory = ARMAMENT_SUBCATEGORY_AMMO
+ interest_addition = COMPANY_INTEREST_AMMO
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell
+ item_type = /obj/item/stock_parts/cell/microfusion
+ lower_cost = CARGO_CRATE_VALUE * 1
+ upper_cost = CARGO_CRATE_VALUE * 1
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell_bulk
+ item_type = /obj/item/storage/box/ammo_box/microfusion/bagless
+ lower_cost = CARGO_CRATE_VALUE * 1
+ upper_cost = CARGO_CRATE_VALUE * 2
+ interest_addition = COMPANY_INTEREST_AMMO_BULK
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell_adv
+ item_type = /obj/item/stock_parts/cell/microfusion/advanced
+ lower_cost = CARGO_CRATE_VALUE * 1
+ upper_cost = CARGO_CRATE_VALUE * 2
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell_adv_bulk
+ item_type = /obj/item/storage/box/ammo_box/microfusion/advanced/bagless
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+ interest_addition = COMPANY_INTEREST_AMMO_BULK
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell_blue
+ item_type = /obj/item/stock_parts/cell/microfusion/bluespace
+ interest_required = HIGH_INTEREST
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/ammo/cell_blue_bulk
+ item_type = /obj/item/storage/box/ammo_box/microfusion/bluespace/bagless
+ interest_required = HIGH_INTEREST
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+ interest_addition = COMPANY_INTEREST_AMMO_BULK
+
+/datum/armament_entry/cargo_gun/micron/part
+ subcategory = ARMAMENT_SUBCATEGORY_GUNPART
+ interest_addition = COMPANY_INTEREST_ATTACHMENT
+
+/datum/armament_entry/cargo_gun/micron/part/grip
+ item_type = /obj/item/microfusion_gun_attachment/grip
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/part/scatter
+ item_type = /obj/item/microfusion_gun_attachment/scatter
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/micron/part/scope
+ item_type = /obj/item/microfusion_gun_attachment/scope
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/part/rail
+ item_type = /obj/item/microfusion_gun_attachment/rail
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/part/heatsink
+ item_type = /obj/item/microfusion_gun_attachment/heatsink
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/micron/part/lance
+ item_type = /obj/item/microfusion_gun_attachment/lance
+ interest_required = PASSED_INTEREST
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 5
+
+/datum/armament_entry/cargo_gun/micron/emitter
+ subcategory = ARMAMENT_SUBCATEGORY_EMITTER
+ interest_addition = COMPANY_INTEREST_ATTACHMENT
+
+/datum/armament_entry/cargo_gun/micron/emitter/enh_emitter
+ item_type = /obj/item/microfusion_phase_emitter/enhanced
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/micron/emitter/adv_emitter
+ item_type = /obj/item/microfusion_phase_emitter/advanced
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 7
+
+/datum/armament_entry/cargo_gun/micron/emitter/blue_emitter
+ item_type = /obj/item/microfusion_phase_emitter/bluespace
+ interest_required = HIGH_INTEREST
+ lower_cost = CARGO_CRATE_VALUE * 7
+ upper_cost = CARGO_CRATE_VALUE * 10
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade
+ subcategory = ARMAMENT_SUBCATEGORY_CELL_UPGRADE
+ interest_addition = COMPANY_INTEREST_ATTACHMENT
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/recharge
+ item_type = /obj/item/microfusion_cell_attachment/rechargeable
+ lower_cost = CARGO_CRATE_VALUE * 4
+ upper_cost = CARGO_CRATE_VALUE * 6
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/stabilize
+ item_type = /obj/item/microfusion_cell_attachment/stabiliser
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/overcapacity
+ item_type = /obj/item/microfusion_cell_attachment/overcapacity
+ lower_cost = CARGO_CRATE_VALUE * 3
+ upper_cost = CARGO_CRATE_VALUE * 4
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/selfcharge
+ item_type = /obj/item/microfusion_cell_attachment/selfcharging
+ interest_required = HIGH_INTEREST
+ lower_cost = CARGO_CRATE_VALUE * 5
+ upper_cost = CARGO_CRATE_VALUE * 6
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/tactical
+ item_type = /obj/item/microfusion_cell_attachment/tactical
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
+
+/datum/armament_entry/cargo_gun/micron/cell_upgrade/reloader
+ item_type = /obj/item/microfusion_cell_attachment/reloader
+ lower_cost = CARGO_CRATE_VALUE * 2
+ upper_cost = CARGO_CRATE_VALUE * 3
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/nanotrasen.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/nanotrasen.dm
new file mode 100644
index 00000000000..2047e68f600
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/nanotrasen.dm
@@ -0,0 +1,55 @@
+#define ARMAMENT_CATEGORY_NANOTRASEN "Nanotrasen Armories"
+
+/datum/armament_entry/cargo_gun/nanotrasen
+ category = ARMAMENT_CATEGORY_NANOTRASEN
+ company_bitflag = COMPANY_NANOTRASEN
+
+/datum/armament_entry/cargo_gun/nanotrasen/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/nanotrasen/pistol/thermal_holster
+ item_type = /obj/item/storage/belt/holster/thermal
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/nanotrasen/shotgun
+ subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN
+
+/datum/armament_entry/cargo_gun/nanotrasen/shotgun/riot
+ item_type = /obj/item/gun/ballistic/shotgun/riot
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 12
+
+/datum/armament_entry/cargo_gun/nanotrasen/shotgun/combat
+ item_type = /obj/item/gun/ballistic/shotgun/automatic/combat
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 14
+
+/datum/armament_entry/cargo_gun/nanotrasen/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/nanotrasen/smg/saber
+ item_type = /obj/item/gun/ballistic/automatic/proto
+ lower_cost = CARGO_CRATE_VALUE * 12
+ upper_cost = CARGO_CRATE_VALUE * 18
+
+/datum/armament_entry/cargo_gun/nanotrasen/smg/cmg
+ item_type = /obj/item/gun/ballistic/automatic/cmg
+ lower_cost = CARGO_CRATE_VALUE * 8
+ upper_cost = CARGO_CRATE_VALUE * 13
+
+/datum/armament_entry/cargo_gun/nanotrasen/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/nanotrasen/rifle/wtrifle
+ item_type = /obj/item/gun/ballistic/automatic/wt550
+ lower_cost = CARGO_CRATE_VALUE * 12
+ upper_cost = CARGO_CRATE_VALUE * 16
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/nanotrasen/rifle/boarder
+ item_type = /obj/item/gun/ballistic/automatic/ar
+ lower_cost = CARGO_CRATE_VALUE * 28
+ upper_cost = CARGO_CRATE_VALUE * 32
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/parent_armament.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/parent_armament.dm
new file mode 100644
index 00000000000..e55c5b45d84
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/parent_armament.dm
@@ -0,0 +1,20 @@
+/datum/armament_entry/cargo_gun
+ max_purchase = 10
+ category_item_limit = 10
+ cost = 1
+ /// Bitflag of the company
+ var/company_bitflag
+ /// How much stock of this item is left
+ var/stock = 10
+ /// Lower bound of random pricing
+ var/lower_cost = 100
+ /// Upper bound of random pricing
+ var/upper_cost = 200
+ /// How much the stock is multiplied by
+ var/stock_mult = 1
+ /// How much will be added to a company's reputation on-buy
+ var/interest_addition = COMPANY_INTEREST_GUN
+ /// What interest level is needed to purchase the armament, set to 0 for none
+ var/interest_required = 0
+ /// If this requires a multitooled console to be visible
+ var/contraband = FALSE
diff --git a/modular_skyrat/modules/gun_cargo/code/armament_datums/scarborough.dm b/modular_skyrat/modules/gun_cargo/code/armament_datums/scarborough.dm
new file mode 100644
index 00000000000..a7eaff1b2e1
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/armament_datums/scarborough.dm
@@ -0,0 +1,64 @@
+#define ARMAMENT_CATEGORY_SCARBOROUGH "Scarborough Arms"
+
+/datum/armament_entry/cargo_gun/scarborough
+ category = ARMAMENT_CATEGORY_SCARBOROUGH
+ company_bitflag = COMPANY_SCARBOROUGH
+
+/datum/armament_entry/cargo_gun/scarborough/pistol
+ subcategory = ARMAMENT_SUBCATEGORY_PISTOL
+
+/datum/armament_entry/cargo_gun/scarborough/pistol/makarov
+ item_type = /obj/item/gun/ballistic/automatic/pistol
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 15
+
+/datum/armament_entry/cargo_gun/scarborough/pistol/aps
+ item_type = /obj/item/gun/ballistic/automatic/pistol/aps
+ lower_cost = CARGO_CRATE_VALUE * 18
+ upper_cost = CARGO_CRATE_VALUE * 22
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/scarborough/shotgun
+ subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN
+
+/datum/armament_entry/cargo_gun/scarborough/shotgun/bulldog
+ item_type = /obj/item/gun/ballistic/shotgun/bulldog/unrestricted
+ lower_cost = CARGO_CRATE_VALUE * 18
+ upper_cost = CARGO_CRATE_VALUE * 20
+ interest_required = PASSED_INTEREST
+
+/datum/armament_entry/cargo_gun/scarborough/smg
+ subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN
+
+/datum/armament_entry/cargo_gun/scarborough/smg/c20r
+ item_type = /obj/item/gun/ballistic/automatic/c20r/unrestricted
+ lower_cost = CARGO_CRATE_VALUE * 20
+ upper_cost = CARGO_CRATE_VALUE * 25
+
+/datum/armament_entry/cargo_gun/scarborough/rifle
+ subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE
+
+/datum/armament_entry/cargo_gun/scarborough/rifle/m90gl // Fucking expensive as hell.
+ item_type = /obj/item/gun/ballistic/automatic/m90/unrestricted
+ lower_cost = CARGO_CRATE_VALUE * 42
+ upper_cost = CARGO_CRATE_VALUE * 47
+ interest_required = HIGH_INTEREST
+
+/datum/armament_entry/cargo_gun/scarborough/part
+ subcategory = ARMAMENT_SUBCATEGORY_GUNPART
+ interest_addition = COMPANY_INTEREST_ATTACHMENT
+
+/datum/armament_entry/cargo_gun/scarborough/part/suppressor
+ item_type = /obj/item/suppressor
+ lower_cost = CARGO_CRATE_VALUE * 10
+ upper_cost = CARGO_CRATE_VALUE * 15
+
+/datum/armament_entry/cargo_gun/scarborough/ammo
+ subcategory = ARMAMENT_SUBCATEGORY_AMMO
+ interest_addition = COMPANY_INTEREST_AMMO
+
+/datum/armament_entry/cargo_gun/scarborough/ammo/grenade
+ item_type = /obj/item/ammo_casing/a40mm
+ lower_cost = CARGO_CRATE_VALUE * 15
+ upper_cost = CARGO_CRATE_VALUE * 24
+ interest_required = HIGH_INTEREST
diff --git a/modular_skyrat/modules/gun_cargo/code/company_datums.dm b/modular_skyrat/modules/gun_cargo/code/company_datums.dm
new file mode 100644
index 00000000000..b5e29d11b52
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/company_datums.dm
@@ -0,0 +1,113 @@
+/datum/gun_company
+ /// Name of the company
+ var/name
+ /// UNUSED, description of the company
+ var/desc
+ /// Bitflag that should match what guns the company produces
+ var/company_flag
+ /// If the company needs a multitooled console to see
+ var/illegal = FALSE
+ /// Var for internal calculations, don't touch
+ var/base_cost = 0
+ /// How much the company costs, can shift over time
+ var/cost = 0
+ /// Multiplier added to the cost before showing the final price to the user
+ var/cost_mult = 1
+ /// On a subsystem fire, will lower/raise company values by a random value between lower and upper
+ var/cost_change_lower = -100
+ /// On a subsystem fire, will lower/raise company values by a random value between lower and upper
+ var/cost_change_upper = 100
+ /// If this company can be picked to be a handout company to start
+ var/can_roundstart_pick = TRUE
+ /// The "interest" value of the company, to determine how much stock the company has, goes down passively and is raised by things being bought
+ var/interest = 0
+ /// Multiplier for magazine costs
+ var/magazine_cost_mult = 1
+
+/datum/gun_company/armadyne
+ name = "Armadyne Corporation"
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_ARMADYNE
+ cost = 7500
+ cost_change_lower = -2500
+ cost_change_upper = 8500
+
+/datum/gun_company/cantalan
+ name = "Cantalan Federal Arms"
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_CANTALAN
+ magazine_cost_mult = 3 //RIP
+ cost = 4500
+ cost_change_lower = -4000
+ cost_change_upper = 7500
+
+/datum/gun_company/scarborough
+ name = "Scarborough Arms"
+ illegal = TRUE
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_SCARBOROUGH
+ cost = 20000
+ cost_change_lower = 0 //stonks never go down
+ cost_change_upper = 20000
+ cost_mult = 1.1
+
+/datum/gun_company/bolt
+ name = "Bolt Fabrications"
+ company_flag = COMPANY_BOLT
+ cost = 4500
+ cost_change_lower = -4250
+ cost_change_upper = 8500
+
+/datum/gun_company/oldarms
+ name = "Armadyne Oldarms"
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_OLDARMS
+ cost_change_lower = -2000
+ cost_change_upper = 15000
+ cost = 10000
+ magazine_cost_mult = 2.5
+
+/datum/gun_company/izhevsk
+ name = "Izhevsk Coalition"
+ company_flag = COMPANY_IZHEVSK
+ cost_change_lower = -2500 //cheap as hell "company" is cheap as hell to buy
+ cost_change_upper = 4500
+ cost = 3000
+ cost_mult = 0.9
+
+/datum/gun_company/nanotrasen
+ name = "Nanotrasen Armories"
+ company_flag = COMPANY_NANOTRASEN
+ cost_change_lower = -2000
+ cost_change_upper = 10000
+ cost = 7500
+
+/datum/gun_company/allstar
+ name = "Allstar Lasers"
+ company_flag = COMPANY_ALLSTAR
+ cost_change_lower = -5000
+ cost_change_upper = 8750
+ cost = 6500
+
+/datum/gun_company/micron
+ name = "Micron Control Systems"
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_MICRON
+ cost_change_lower = -2250
+ cost_change_upper = 12500 //This is an alternative to R&D, so it's expensive as hell
+ cost = 10000
+
+/datum/gun_company/interdyne
+ name = "Interdyne Pharmaceuticals"
+ company_flag = COMPANY_INTERDYNE
+ cost_change_lower = -4500
+ cost_change_upper = 6500
+ cost = 7500
+
+/datum/gun_company/dynamics
+ name = "Armament Dynamics Inc."
+ can_roundstart_pick = FALSE
+ company_flag = COMPANY_DYNAMICS
+ cost_change_lower = -5000
+ cost_change_upper = 8500
+ cost = 4500 //subsidized or smth
diff --git a/modular_skyrat/modules/gun_cargo/code/datums/cargo_order.dm b/modular_skyrat/modules/gun_cargo/code/datums/cargo_order.dm
new file mode 100644
index 00000000000..23f0170bd4f
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/datums/cargo_order.dm
@@ -0,0 +1,29 @@
+/datum/supply_order/armament
+ /// The armament entry used to fill the supply order
+ var/datum/armament_entry/cargo_gun/selected_entry
+ /// The component used to create the order
+ var/datum/component/armament/cargo_gun/used_component
+ /// How much it'll add to a company's interest on-buy
+ var/interest_addition
+
+/datum/supply_order/armament/Destroy(force, ...)
+ selected_entry = null
+ used_component = null
+ . = ..()
+
+/datum/supply_order/armament/proc/reimburse_armament()
+ if(!selected_entry || !used_component)
+ return
+ used_component.purchased_items[selected_entry]--
+ selected_entry.stock++
+
+/// A proc to be overriden if you want custom code to happen when SSshuttle spawns the order
+/datum/supply_order/proc/on_spawn()
+ return
+
+/datum/supply_order/armament/on_spawn()
+ for(var/company in SSgun_companies.companies)
+ var/datum/gun_company/comp_datum = SSgun_companies.companies[company]
+ if(comp_datum.company_flag == selected_entry?.company_bitflag)
+ comp_datum.interest += interest_addition
+ break
diff --git a/modular_skyrat/modules/gun_cargo/code/datums/cargo_pack.dm b/modular_skyrat/modules/gun_cargo/code/datums/cargo_pack.dm
new file mode 100644
index 00000000000..0cd6a87c562
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/datums/cargo_pack.dm
@@ -0,0 +1,13 @@
+/datum/supply_pack/armament
+
+/datum/supply_pack/armament/generate(atom/A, datum/bank_account/paying_account)
+ . = ..()
+ /*
+ var/obj/structure/container = .
+ for(var/obj/item/gun/gun_actually in container.contents)
+ if(gun_actually.company_flag & COMPANY_SCARBOROUGH) //illegal company doesn't care about pins
+ continue
+ QDEL_NULL(gun_actually.pin)
+ var/obj/item/firing_pin/permit_pin/new_pin = new(gun_actually)
+ gun_actually.pin = new_pin
+*/
diff --git a/modular_skyrat/modules/gun_cargo/code/datums/hud.dm b/modular_skyrat/modules/gun_cargo/code/datums/hud.dm
new file mode 100644
index 00000000000..e48060a363e
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/datums/hud.dm
@@ -0,0 +1,2 @@
+/datum/atom_hud/data/human/permit
+ hud_icons = list(PERMIT_HUD)
diff --git a/modular_skyrat/modules/gun_cargo/code/gun_companies.dm b/modular_skyrat/modules/gun_cargo/code/gun_companies.dm
new file mode 100644
index 00000000000..0a7fcb0f96b
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/gun_companies.dm
@@ -0,0 +1,39 @@
+/obj/item/gun/ballistic/automatic/pistol
+ company_flag = COMPANY_SCARBOROUGH
+
+/obj/item/gun/ballistic/automatic/pistol/m1911
+ company_flag = COMPANY_BOLT
+
+/obj/item/gun/ballistic/automatic/pistol/aps
+ company_flag = COMPANY_SCARBOROUGH
+
+/obj/item/gun/ballistic/revolver
+ company_flag = COMPANY_SCARBOROUGH
+
+/obj/item/gun/ballistic/revolver/nagant
+ company_flag = COMPANY_OLDARMS
+
+/obj/item/gun/ballistic/rifle/boltaction
+ company_flag = COMPANY_IZHEVSK
+ dirt_modifier = 0.75
+
+/obj/item/gun/ballistic/shotgun/riot
+ company_flag = COMPANY_NANOTRASEN
+
+/obj/item/gun/ballistic/shotgun/bulldog
+ company_flag = COMPANY_SCARBOROUGH
+
+/obj/item/gun/energy/e_gun
+ company_flag = COMPANY_ALLSTAR
+
+/obj/item/gun/energy/laser
+ company_flag = COMPANY_ALLSTAR
+
+/obj/item/gun/energy/pulse
+ company_flag = COMPANY_NANOTRASEN
+
+/obj/item/gun/ballistic/shotgun/automatic/combat
+ company_flag = COMPANY_NANOTRASEN
+
+/obj/item/gun/syringe
+ company_flag = COMPANY_INTERDYNE
diff --git a/modular_skyrat/modules/gun_cargo/code/gun_subsystem.dm b/modular_skyrat/modules/gun_cargo/code/gun_subsystem.dm
new file mode 100644
index 00000000000..9a429a2bf4f
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/gun_subsystem.dm
@@ -0,0 +1,150 @@
+#define MAX_HANDOUT_CHOICES 3
+#define FAILED_INTEREST 1
+#define PASSED_INTEREST 2
+#define HIGH_INTEREST 3
+#define INTEREST_HIGH_MULT 10
+#define INTEREST_CAP 75
+#define INTEREST_LOWER_RAND 5
+#define INTEREST_HIGHER_RAND 25
+#define BASE_COST_MINIMUM 1000
+#define BASE_COST_MAXIMUM 75000
+#define INTEREST_LOW_MAG_COST 0.1
+#define INTEREST_MED_MAG_COST 0.11
+#define INTEREST_HIGH_MAG_COST 0.125
+
+SUBSYSTEM_DEF(gun_companies)
+ name = "Gun Companies"
+ wait = 20 MINUTES
+ runlevels = RUNLEVEL_GAME
+ /// Assoc list of companies that the subsystem has initialized, `"NAME" = datum_reference`
+ var/list/companies = list()
+ /// Assoc list of unpurchased companies
+ var/list/unpurchased_companies = list()
+ /// Assoc list of purchased companies
+ var/list/purchased_companies = list()
+ /// List of chosen handout company datums, for the user to pick 1
+ var/list/chosen_handouts = list()
+ /// Picked a free company yet?
+ var/handout_picked = FALSE
+
+/datum/controller/subsystem/gun_companies/Initialize(start_timeofday)
+ // Adds the company refs to the unchanging companies list and the changing unpurchased_companies list
+ for(var/datum/gun_company/company as anything in subtypesof(/datum/gun_company))
+ var/datum/gun_company/new_company = new company
+ companies[new_company.name] = new_company
+ unpurchased_companies[new_company.name] = new_company
+
+ // Cargo gets to pick one company from several for free
+ var/list/potential_handouts = list()
+ for(var/company_name in unpurchased_companies)
+ var/datum/gun_company/picked_company = unpurchased_companies[company_name]
+ if(!picked_company.can_roundstart_pick)
+ continue
+ potential_handouts += picked_company
+ for(var/i in 1 to MAX_HANDOUT_CHOICES)
+ chosen_handouts += pick_n_take(potential_handouts)
+ fire() //Gotta get the prices randomized to start
+ return ..()
+
+/datum/controller/subsystem/gun_companies/Destroy()
+ for(var/company in companies)
+ QDEL_NULL(company)
+ for(var/company_unbought in unpurchased_companies)
+ QDEL_NULL(unpurchased_companies)
+ for(var/company_bought in purchased_companies)
+ QDEL_NULL(purchased_companies)
+ . = ..()
+
+/datum/controller/subsystem/gun_companies/Recover()
+ companies = SSgun_companies.companies
+ unpurchased_companies = SSgun_companies.unpurchased_companies
+ purchased_companies = SSgun_companies.purchased_companies
+
+/datum/controller/subsystem/gun_companies/fire(resumed)
+ var/list/passed_interest_tier = list()
+ // Company handling
+ for(var/company in companies)
+ var/datum/gun_company/company_datum = companies[company]
+
+ // Set the prices of the companies, is intended to slowly scale up over time
+ company_datum.base_cost += max(rand(company_datum.cost_change_lower, company_datum.cost_change_upper), 0)
+ company_datum.base_cost = clamp(company_datum.base_cost, BASE_COST_MINIMUM, BASE_COST_MAXIMUM)
+ company_datum.base_cost = company_datum.base_cost <= BASE_COST_MINIMUM ? BASE_COST_MINIMUM : company_datum.base_cost
+ company_datum.cost = round(company_datum.base_cost * company_datum.cost_mult)
+ // knocking down the interest of all companies
+ var/interest_threshold = rand(INTEREST_LOWER_RAND, INTEREST_HIGHER_RAND)
+ var/interest_knockdown = 0.5 * interest_threshold
+
+ if(company_datum in unpurchased_companies)
+ interest_knockdown *= 0.5
+
+ company_datum.interest = max(company_datum.interest - interest_knockdown, 0)
+
+ // determining what heirarchy of interest the company falls in
+ if(company_datum.interest < interest_threshold)
+ passed_interest_tier[company_datum] = FAILED_INTEREST
+
+ else
+ var/non_zero_threshold = interest_threshold ? interest_threshold : 1
+ var/calc_threshold = non_zero_threshold * INTEREST_HIGH_MULT
+ if(calc_threshold > INTEREST_CAP)
+ calc_threshold = INTEREST_CAP
+ if(company_datum.interest < calc_threshold)
+ passed_interest_tier[company_datum] = PASSED_INTEREST
+
+ else
+ passed_interest_tier[company_datum] = HIGH_INTEREST
+
+
+ var/list/products = subtypesof(/datum/armament_entry/cargo_gun)
+ // Setting cost and stock of armament entries
+ for(var/armament_category as anything in GLOB.armament_entries)
+ for(var/subcategory as anything in GLOB.armament_entries[armament_category][CATEGORY_ENTRY])
+ for(var/datum/armament_entry/armament_entry as anything in GLOB.armament_entries[armament_category][CATEGORY_ENTRY][subcategory])
+ if(products && !(armament_entry.type in products))
+ continue
+
+ var/datum/armament_entry/cargo_gun/entry_typecast = armament_entry
+
+ for(var/company_gun in companies)
+ var/datum/gun_company/the_datum = companies[company_gun]
+
+ if(the_datum.company_flag != entry_typecast.company_bitflag)
+ continue
+
+ switch(passed_interest_tier[the_datum])
+
+ if(FAILED_INTEREST)
+ var/stock_failed = rand(0, 2)
+ entry_typecast.stock = max((round(stock_failed * entry_typecast.stock_mult)), 0)
+ var/gun_cost_failed = rand(entry_typecast.lower_cost, entry_typecast.upper_cost)
+ var/compound_cost = round(entry_typecast.cost * 0.1)
+ entry_typecast.cost = max((round((gun_cost_failed + (compound_cost + CARGO_CRATE_VALUE)) - (0.25 * entry_typecast.lower_cost)) ), 0)
+ entry_typecast.magazine_cost = round((entry_typecast.cost * INTEREST_LOW_MAG_COST) * the_datum.magazine_cost_mult)
+
+ if(PASSED_INTEREST)
+ var/stock_passed = rand(0, 4)
+ entry_typecast.stock = max((round(stock_passed * entry_typecast.stock_mult) + 1), 0)
+ var/gun_cost_passed = rand(entry_typecast.lower_cost, entry_typecast.upper_cost)
+ var/compound_cost = round(entry_typecast.cost * 0.1)
+ entry_typecast.cost = max((round(gun_cost_passed + compound_cost) + CARGO_CRATE_VALUE), 0)
+ entry_typecast.magazine_cost = round((entry_typecast.cost * INTEREST_MED_MAG_COST) * the_datum.magazine_cost_mult)
+
+ if(HIGH_INTEREST)
+ var/stock_interested = rand(0, 6)
+ entry_typecast.stock = max((round(stock_interested * entry_typecast.stock_mult) + 2), 0)
+ var/gun_cost_high = rand(entry_typecast.lower_cost, entry_typecast.upper_cost)
+ var/compound_cost = round(entry_typecast.cost * 0.1)
+ entry_typecast.cost = max(round(gun_cost_high + (compound_cost + CARGO_CRATE_VALUE)) , 0)
+ entry_typecast.magazine_cost = round((entry_typecast.cost * INTEREST_HIGH_MAG_COST) * the_datum.magazine_cost_mult)
+
+#undef MAX_HANDOUT_CHOICES
+#undef INTEREST_HIGH_MULT
+#undef INTEREST_CAP
+#undef INTEREST_LOWER_RAND
+#undef INTEREST_HIGHER_RAND
+#undef BASE_COST_MINIMUM
+#undef BASE_COST_MAXIMUM
+#undef INTEREST_LOW_MAG_COST
+#undef INTEREST_MED_MAG_COST
+#undef INTEREST_HIGH_MAG_COST
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/access.dm b/modular_skyrat/modules/gun_cargo/code/objects/access.dm
new file mode 100644
index 00000000000..e7e33cbafd1
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/access.dm
@@ -0,0 +1,8 @@
+/obj/item/proc/get_gun_permit_iconstate()
+ var/obj/item/card/id/id_card = GetID()
+
+ if(!id_card)
+ return "hudfan_no"
+ if(ACCESS_WEAPONS in id_card.GetAccess())
+ return "hud_permit"
+ return "hudfan_no"
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/ammo_boxes.dm b/modular_skyrat/modules/gun_cargo/code/objects/ammo_boxes.dm
new file mode 100644
index 00000000000..78de9353ebd
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/ammo_boxes.dm
@@ -0,0 +1,130 @@
+/obj/item/ammo_box/c9mm/ap
+ name = "ammo box (9mm AP)"
+ ammo_type = /obj/item/ammo_casing/c9mm/ap
+
+/obj/item/ammo_box/c9mm/hp
+ name = "ammo box (9mm HP)"
+ ammo_type = /obj/item/ammo_casing/c9mm/hp
+
+/obj/item/ammo_box/c9mm/fire
+ name = "ammo box (9mm Incen)"
+ ammo_type = /obj/item/ammo_casing/c9mm/fire
+
+/obj/item/ammo_box/c10mm/ap
+ name = "ammo box (10mm AP)"
+ ammo_type = /obj/item/ammo_casing/c10mm/ap
+ max_ammo = 20
+
+/obj/item/ammo_box/c10mm/hp
+ name = "ammo box (10mm HP)"
+ ammo_type = /obj/item/ammo_casing/c10mm/hp
+ max_ammo = 20
+
+/obj/item/ammo_box/c10mm/fire
+ name = "ammo box (10mm Incen)"
+ ammo_type = /obj/item/ammo_casing/c10mm/fire
+ max_ammo = 20
+
+/obj/item/ammo_box/c46x30mm
+ name = "ammo box (4.6x30mm)"
+ icon = 'modular_skyrat/modules/gun_cargo/icons/ammo.dmi'
+ icon_state = "ammo_46"
+ ammo_type = /obj/item/ammo_casing/c46x30mm
+ max_ammo = 20
+
+/obj/item/ammo_box/c46x30mm/ap
+ name = "ammo box (4.6x30mm AP)"
+ ammo_type = /obj/item/ammo_casing/c46x30mm/ap
+
+/obj/item/ammo_box/c46x30mm/rubber
+ name = "ammo box (4.6x30mm Rubber)"
+ ammo_type = /obj/item/ammo_casing/c46x30mm/rubber
+
+/obj/item/ammo_box/c32
+ name = "ammo box (.32)"
+ icon = 'modular_skyrat/modules/gun_cargo/icons/ammo.dmi'
+ icon_state = "ammo_32"
+ ammo_type = /obj/item/ammo_casing/c32
+ max_ammo = 20
+
+/obj/item/ammo_box/c32/ap
+ name = "ammo box (.32 AP)"
+ ammo_type = /obj/item/ammo_casing/c32/ap
+
+/obj/item/ammo_box/c32/rubber
+ name = "ammo box (.32 Rubber)"
+ ammo_type = /obj/item/ammo_casing/c32/rubber
+
+/obj/item/ammo_box/c32/fire
+ name = "ammo box (.32 Incen)"
+ ammo_type = /obj/item/ammo_casing/c32_incendiary
+
+/obj/item/ammo_box/c34
+ name = "ammo box (.34)"
+ icon = 'modular_skyrat/modules/gun_cargo/icons/ammo.dmi'
+ icon_state = "ammo_34"
+ ammo_type = /obj/item/ammo_casing/c34
+ max_ammo = 20
+
+/obj/item/ammo_box/c34/ap
+ name = "ammo box (.34 AP)"
+ ammo_type = /obj/item/ammo_casing/c34/ap
+
+/obj/item/ammo_box/c34/rubber
+ name = "ammo box (.34 Rubber)"
+ ammo_type = /obj/item/ammo_casing/c34/rubber
+
+/obj/item/ammo_box/c34/fire
+ name = "ammo box (.34 Incen)"
+ ammo_type = /obj/item/ammo_casing/c34_incendiary
+
+/obj/item/ammo_box/c12mm
+ name = "ammo box (12mm)"
+ icon = 'modular_skyrat/modules/gun_cargo/icons/ammo.dmi'
+ icon_state = "ammo_12mm"
+ ammo_type = /obj/item/ammo_casing/c12mm
+ max_ammo = 20
+
+/obj/item/ammo_box/c12mm/ap
+ name = "ammo box (12mm AP)"
+ ammo_type = /obj/item/ammo_casing/c12mm/ap
+
+/obj/item/ammo_box/c12mm/hp
+ name = "ammo box (12mm HP)"
+ ammo_type = /obj/item/ammo_casing/c12mm/hp
+
+/obj/item/ammo_box/c12mm/fire
+ name = "ammo box (12mm Incen)"
+ ammo_type = /obj/item/ammo_casing/c12mm/fire
+
+/obj/item/storage/box/ammo_box/microfusion/bluespace
+ name = "bluespace microfusion cell container"
+ desc = "A box filled with microfusion cells."
+
+/obj/item/storage/box/ammo_box/microfusion/bluespace/PopulateContents()
+ new /obj/item/storage/bag/ammo(src)
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+
+/obj/item/storage/box/ammo_box/microfusion/bluespace/bagless
+
+/obj/item/storage/box/ammo_box/microfusion/bluespace/bagless/PopulateContents()
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+ new /obj/item/stock_parts/cell/microfusion/bluespace(src)
+
+/obj/item/ammo_box/b10mm
+ name = "ammo box (10mm Auto)"
+ ammo_type = /obj/item/ammo_casing/b10mm
+ max_ammo = 20
+
+/obj/item/ammo_box/b10mm/hp
+ name = "ammo box (10mm Auto HP)"
+ ammo_type = /obj/item/ammo_casing/b10mm/hp
+ max_ammo = 20
+
+/obj/item/ammo_box/b10mm/rubber
+ name = "ammo box (10mm Auto Rubber)"
+ ammo_type = /obj/item/ammo_casing/b10mm/rubber
+ max_ammo = 20
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/box.dm b/modular_skyrat/modules/gun_cargo/code/objects/box.dm
new file mode 100644
index 00000000000..3295b47feb6
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/box.dm
@@ -0,0 +1,15 @@
+/obj/item/storage/box/syringes/piercing
+ name = "piercing syringe box"
+ desc = "A five-pack of piercing syringes."
+
+/obj/item/storage/box/syringes/piercing/PopulateContents()
+ for(var/i in 1 to 5)
+ new /obj/item/reagent_containers/syringe/piercing(src)
+
+/obj/item/storage/box/syringes/bluespace
+ name = "bluespace syringe box"
+ desc = "A three-pack of piercing syringes."
+
+/obj/item/storage/box/syringes/piercing/PopulateContents()
+ for(var/i in 1 to 3)
+ new /obj/item/reagent_containers/syringe/bluespace(src)
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/cargo_console.dm b/modular_skyrat/modules/gun_cargo/code/objects/cargo_console.dm
new file mode 100644
index 00000000000..b9f1e33e340
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/cargo_console.dm
@@ -0,0 +1,3 @@
+/obj/machinery/computer/cargo/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/armament/cargo_gun, subtypesof(/datum/armament_entry/cargo_gun), 0)
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/firing_pin.dm b/modular_skyrat/modules/gun_cargo/code/objects/firing_pin.dm
new file mode 100644
index 00000000000..3c15a754296
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/firing_pin.dm
@@ -0,0 +1,34 @@
+GLOBAL_VAR_INIT(permit_pin_unrestricted, FALSE)
+// Firing pin that can be used off station freely, and requires a permit to use on-station
+/obj/item/firing_pin/permit_pin
+ name = "permit-locked firing pin"
+ desc = "A firing pin for a station who can't trust their crew. Only allows you to fire the weapon off-station or with a firearms permit.."
+ icon_state = "firing_pin_explorer"
+ fail_message = "You must have a permit or be off-station to fire this!"
+ can_remove = TRUE
+
+// This checks that the user isn't on the station Z-level.
+/obj/item/firing_pin/permit_pin/pin_auth(mob/living/user)
+ var/turf/station_check = get_turf(user)
+
+ if(obj_flags & EMAGGED)
+ return TRUE
+
+ if(GLOB.permit_pin_unrestricted)
+ return TRUE
+
+ var/obj/item/card/id/the_id = user.get_idcard()
+
+ if(!the_id && is_station_level(station_check.z))
+ return FALSE
+
+ if(!is_station_level(station_check.z) || (ACCESS_WEAPONS in the_id.GetAccess()))
+ return TRUE
+
+
+/obj/item/firing_pin
+ var/can_remove = TRUE
+
+/obj/item/firing_pin/emag_act(mob/user)
+ . = ..()
+ can_remove = TRUE
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/guns/interdyne.dm b/modular_skyrat/modules/gun_cargo/code/objects/guns/interdyne.dm
new file mode 100644
index 00000000000..963132e0a1d
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/guns/interdyne.dm
@@ -0,0 +1,28 @@
+/obj/item/gun/ballistic/automatic/pistol/firefly/smartdart
+ name = "\improper I-94 'Honeybee'"
+ desc = "A 9mm sidearm made by Armadyne and modified by Interdyne, it features a slightly modified paint job and sports a SmartDart underbarrel attachment which can be fired with right click."
+ company_flag = COMPANY_INTERDYNE
+ icon = 'modular_skyrat/modules/gun_cargo/icons/honeybee.dmi'
+ icon_state = "honeybee"
+ company_flag = COMPANY_INTERDYNE
+ var/obj/item/gun/syringe/smartdart/underbarrel/underbarrel
+
+/obj/item/gun/ballistic/automatic/pistol/firefly/smartdart/Initialize()
+ . = ..()
+ underbarrel = new(src)
+ update_appearance()
+
+/obj/item/gun/ballistic/automatic/pistol/firefly/smartdart/afterattack_secondary(atom/target, mob/living/user, flag, params)
+ underbarrel.afterattack(target, user, flag, params)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+/obj/item/gun/ballistic/automatic/pistol/firefly/smartdart/attackby(obj/item/attacking_item, mob/user, params)
+ if(istype(attacking_item, /obj/item/reagent_containers/syringe/smartdart))
+ underbarrel.attackby(attacking_item, user, params)
+ else
+ ..()
+
+/obj/item/gun/syringe/smartdart/underbarrel
+ name = "SmartDart underbarrel device"
+ desc = "An underbarrel attachment for a pistol that fits a SmartDart."
+ has_gun_safety = FALSE
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/hud_glasses.dm b/modular_skyrat/modules/gun_cargo/code/objects/hud_glasses.dm
new file mode 100644
index 00000000000..7c9ffdaf066
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/hud_glasses.dm
@@ -0,0 +1,7 @@
+/obj/item/clothing/glasses/hud/gun_permit
+ name = "permit HUD"
+ desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not."
+ icon = 'modular_skyrat/modules/gun_cargo/icons/hud_goggles.dmi'
+ worn_icon = 'modular_skyrat/modules/gun_cargo/icons/hud_goggles_worn.dmi'
+ icon_state = "permithud"
+ hud_type = DATA_HUD_PERMIT
diff --git a/modular_skyrat/modules/gun_cargo/code/objects/keycard_auth.dm b/modular_skyrat/modules/gun_cargo/code/objects/keycard_auth.dm
new file mode 100644
index 00000000000..364d367830e
--- /dev/null
+++ b/modular_skyrat/modules/gun_cargo/code/objects/keycard_auth.dm
@@ -0,0 +1,4 @@
+/proc/toggle_permit_pins()
+ GLOB.permit_pin_unrestricted = !GLOB.permit_pin_unrestricted
+ minor_announce("Permit-locked firing pins have now had their locks [GLOB.permit_pin_unrestricted ? "removed" : "reinstated"].", "Weapons Systems Update:")
+ SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("permit-locked pins", GLOB.permit_pin_unrestricted ? "unlocked" : "locked"))
diff --git a/modular_skyrat/modules/gun_cargo/icons/ammo.dmi b/modular_skyrat/modules/gun_cargo/icons/ammo.dmi
new file mode 100644
index 00000000000..77460d0fcac
Binary files /dev/null and b/modular_skyrat/modules/gun_cargo/icons/ammo.dmi differ
diff --git a/modular_skyrat/modules/gun_cargo/icons/honeybee.dmi b/modular_skyrat/modules/gun_cargo/icons/honeybee.dmi
new file mode 100644
index 00000000000..e59ef5c0461
Binary files /dev/null and b/modular_skyrat/modules/gun_cargo/icons/honeybee.dmi differ
diff --git a/modular_skyrat/modules/gun_cargo/icons/hud_goggles.dmi b/modular_skyrat/modules/gun_cargo/icons/hud_goggles.dmi
new file mode 100644
index 00000000000..c4121b3b3b7
Binary files /dev/null and b/modular_skyrat/modules/gun_cargo/icons/hud_goggles.dmi differ
diff --git a/modular_skyrat/modules/gun_cargo/icons/hud_goggles_worn.dmi b/modular_skyrat/modules/gun_cargo/icons/hud_goggles_worn.dmi
new file mode 100644
index 00000000000..8ec8b7fe602
Binary files /dev/null and b/modular_skyrat/modules/gun_cargo/icons/hud_goggles_worn.dmi differ
diff --git a/modular_skyrat/modules/gunsgalore/code/guns/akm.dm b/modular_skyrat/modules/gunsgalore/code/guns/akm.dm
index 0beba814134..34e05065b25 100644
--- a/modular_skyrat/modules/gunsgalore/code/guns/akm.dm
+++ b/modular_skyrat/modules/gunsgalore/code/guns/akm.dm
@@ -21,7 +21,8 @@
load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg'
eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg'
alt_icons = TRUE
- realistic = TRUE
+ dirt_modifier = 0.75
+ company_flag = COMPANY_IZHEVSK
/obj/item/ammo_box/magazine/akm
name = "\improper AKM magazine"
diff --git a/modular_skyrat/modules/gunsgalore/code/guns/luger.dm b/modular_skyrat/modules/gunsgalore/code/guns/luger.dm
index 385b6863e77..c3be38587c7 100644
--- a/modular_skyrat/modules/gunsgalore/code/guns/luger.dm
+++ b/modular_skyrat/modules/gunsgalore/code/guns/luger.dm
@@ -14,3 +14,4 @@
rack_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/fire/luger_rack.ogg'
fire_sound_volume = 100
suppressor_x_offset = 14
+ company_flag = COMPANY_OLDARMS
diff --git a/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm b/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm
index bfb53248894..bfd9f1a9232 100644
--- a/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm
+++ b/modular_skyrat/modules/gunsgalore/code/guns/mp40.dm
@@ -21,6 +21,7 @@
eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg'
alt_icons = TRUE
realistic = TRUE
+ company_flag = COMPANY_OLDARMS
/obj/item/ammo_box/magazine/mp40
name = "mp40 magazine (9mmx19)"
diff --git a/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm b/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm
index e3115d87d5c..322514db307 100644
--- a/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm
+++ b/modular_skyrat/modules/gunsgalore/code/guns/ppsh.dm
@@ -24,6 +24,7 @@
load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg'
load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magin.ogg'
eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/smg_magout.ogg'
+ company_flag = COMPANY_OLDARMS
/obj/item/ammo_box/magazine/ppsh
name = "Asha 76 magazine (7.62x25mm)"
diff --git a/modular_skyrat/modules/gunsgalore/code/guns/stg.dm b/modular_skyrat/modules/gunsgalore/code/guns/stg.dm
index 192f89efbc1..c96d426e172 100644
--- a/modular_skyrat/modules/gunsgalore/code/guns/stg.dm
+++ b/modular_skyrat/modules/gunsgalore/code/guns/stg.dm
@@ -24,6 +24,7 @@
load_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg'
load_empty_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magin.ogg'
eject_sound = 'modular_skyrat/modules/gunsgalore/sound/guns/interact/ltrifle_magout.ogg'
+ company_flag = COMPANY_OLDARMS
/obj/item/ammo_box/magazine/stg
name = "stg magazine (7.92x33mm)"
diff --git a/modular_skyrat/modules/mapping/code/shuttles.dm b/modular_skyrat/modules/mapping/code/shuttles.dm
index ee947eb7963..f0f589b9053 100644
--- a/modular_skyrat/modules/mapping/code/shuttles.dm
+++ b/modular_skyrat/modules/mapping/code/shuttles.dm
@@ -118,7 +118,7 @@
implants = list(/obj/item/implant/weapons_auth)
belt = /obj/item/storage/belt/military
r_pocket = /obj/item/storage/bag/ammo
- l_pocket = /obj/item/gun/energy/disabler/cfa_disabler
+ l_pocket = /obj/item/gun/energy/disabler/bolt_disabler
id = /obj/item/card/id/advanced/chameleon
id_trim = /datum/id_trim/chameleon/operative
skillchips = list(/obj/item/skillchip/job/engineer)
@@ -148,7 +148,7 @@
implants = list(/obj/item/implant/weapons_auth)
belt = /obj/item/storage/belt/military
r_pocket = /obj/item/storage/bag/ammo
- l_pocket = /obj/item/gun/energy/disabler/cfa_disabler
+ l_pocket = /obj/item/gun/energy/disabler/bolt_disabler
id = /obj/item/card/id/advanced/chameleon
id_trim = /datum/id_trim/chameleon/operative
skillchips = list(/obj/item/skillchip/job/engineer)
diff --git a/modular_skyrat/modules/microfusion/code/cargo_stuff.dm b/modular_skyrat/modules/microfusion/code/cargo_stuff.dm
index f4d49054a98..85fc96a0895 100644
--- a/modular_skyrat/modules/microfusion/code/cargo_stuff.dm
+++ b/modular_skyrat/modules/microfusion/code/cargo_stuff.dm
@@ -34,7 +34,7 @@
)
crate_name = "Microfusion Cell Crate"
-/datum/supply_pack/security/mcr01_attachments_A
+/datum/supply_pack/security/mcr01_attachments_a
name = "MCR-01 Military Attachments Crate Type A"
desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes with two utilitarian repeater loadout."
cost = CARGO_CRATE_VALUE * 14
@@ -52,7 +52,7 @@
)
crate_name = "MCR-01 Military Attachments Crate Type A"
-/datum/supply_pack/security/mcr01_attachments_type_B
+/datum/supply_pack/security/mcr01_attachments_type_b
name = "MCR-01 Military Attachments Crate Type B"
desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes in a mixed specialist loadout."
cost = CARGO_CRATE_VALUE * 16
@@ -69,7 +69,7 @@
crate_name = "MCR-01 Military Attachments Crate Type B"
-/datum/supply_pack/security/mcr01_attachments_H
+/datum/supply_pack/security/mcr01_attachments_h
name = "HCR-01 Military Attachments Crate Type H"
desc = "Honkicron Clownery Systems Inhonkorated supplied HCR-01 Clownery spec attachments! This crate oddly smells of bananas."
cost = CARGO_CRATE_VALUE * 20
@@ -86,4 +86,3 @@
/obj/item/food/pie/cream,
)
crate_name = "MCR-01 Military Attachments Crate Type H"
-
diff --git a/modular_skyrat/modules/microfusion/code/gun_types.dm b/modular_skyrat/modules/microfusion/code/gun_types.dm
index bc59c449176..b65a84bf461 100644
--- a/modular_skyrat/modules/microfusion/code/gun_types.dm
+++ b/modular_skyrat/modules/microfusion/code/gun_types.dm
@@ -1,9 +1,10 @@
/obj/item/gun/microfusion/mcr01
name = "MCR-01"
- desc = "An advanced, modular energy weapon produced by Allstar Lasers Incorporated. These cutting edge weapons differ from traditional beam weaponry in producing individual bolts, as well as utilizing hotswapped cells rather than being tied to immobile power sources."
+ desc = "An advanced, modular energy weapon produced by Micron Control Systems. These cutting edge weapons differ from traditional beam weaponry in producing individual bolts, as well as utilizing hotswapped cells rather than being tied to immobile power sources."
icon_state = "mcr01"
inhand_icon_state = "mcr01"
shaded_charge = TRUE
+ company_flag = COMPANY_MICRON
/// Gun for cargo crates.
/obj/item/gun/microfusion/mcr01/advanced
@@ -49,6 +50,13 @@
new /obj/item/stock_parts/cell/microfusion/advanced(src)
new /obj/item/stock_parts/cell/microfusion/advanced(src)
+/obj/item/storage/box/ammo_box/microfusion/advanced/bagless
+
+/obj/item/storage/box/ammo_box/microfusion/advanced/bagless/PopulateContents()
+ new /obj/item/stock_parts/cell/microfusion/advanced(src)
+ new /obj/item/stock_parts/cell/microfusion/advanced(src)
+ new /obj/item/stock_parts/cell/microfusion/advanced(src)
+
//////////////MICROFUSION SPAWNERS
/obj/effect/spawner/armory_spawn/microfusion
icon_state = "random_rifle"
diff --git a/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm b/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm
index 657ca37590d..23d59345159 100644
--- a/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm
+++ b/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm
@@ -9,7 +9,7 @@
// .32 - 15 damage pistol round.
/datum/design/c32
- name = "4.6x30mm Bullet"
+ name = ".32 Bullet"
id = "c32"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 1000)
@@ -24,30 +24,6 @@
build_path = /obj/item/ammo_casing/c32/rubber
category = list("initial", "Security")
-/datum/design/c32/ap
- name = ".32 Armor-Piercing Bullet"
- id = "c32/ap"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = 2000)
- build_path = /obj/item/ammo_casing/c32/ap
- category = list("hacked", "Security")
-
-/datum/design/c32_incendiary
- name = ".32 Incendiary Bullet"
- id = "c32_incendiary"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = 2000)
- build_path = /obj/item/ammo_casing/c32_incendiary
- category = list("hacked", "Security")
-
-/datum/design/smg32acp
- name = "Empty .32 SMG Magazine"
- id = "smg32acp"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = 3000)
- build_path = /obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat/empty
- category = list("hacked", "Security")
-
/datum/design/a762
name = "7.62 Bullet"
id = "a762"
@@ -82,22 +58,6 @@
build_path = /obj/item/ammo_casing/c46x30mm/rubber
category = list("initial", "Security")
-/datum/design/c46x30mm_ap
- name = "4.6x30mm Armor-Piercing Bullet"
- id = "c46x30mm_ap"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = 1000)
- build_path = /obj/item/ammo_casing/c46x30mm/ap
- category = list("hacked", "Security")
-
-/datum/design/c46x30mm_incendiary
- name = "4.6x30mm Incendiary Bullet"
- id = "c46x30mm_incendiary"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = 1000)
- build_path = /obj/item/ammo_casing/c46x30mm/inc
- category = list("hacked", "Security")
-
// .45
/datum/design/c45_lethal
diff --git a/modular_skyrat/modules/modular_weapons/code/automatic.dm b/modular_skyrat/modules/modular_weapons/code/automatic.dm
index 0757dd5b60f..5599ee8ca09 100644
--- a/modular_skyrat/modules/modular_weapons/code/automatic.dm
+++ b/modular_skyrat/modules/modular_weapons/code/automatic.dm
@@ -5,26 +5,26 @@
// Magazines
/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat
- name = "CFA Wildcat magazine (.32)"
- desc = "Magazines taking .32 ammunition; it fits in the CFA Wildcat. Alt+click to reskin it."
+ name = "CFA Wildcat magazine (.34)"
+ desc = "Magazines taking .34 ammunition; it fits in the CFA Wildcat. Alt+click to reskin it."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi'
- icon_state = "smg32"
+ icon_state = "smg34"
possible_types = list(AMMO_TYPE_LETHAL, AMMO_TYPE_AP, AMMO_TYPE_RUBBER, AMMO_TYPE_INCENDIARY)
- ammo_type = /obj/item/ammo_casing/c32
- caliber = "c32acp"
+ ammo_type = /obj/item/ammo_casing/c34
+ caliber = "c34acp"
max_ammo = 30
multiple_sprites = AMMO_BOX_FULL_EMPTY_BASIC
/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat/ap
- ammo_type = /obj/item/ammo_casing/c32/ap
+ ammo_type = /obj/item/ammo_casing/c34/ap
round_type = AMMO_TYPE_AP
/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat/rubber
- ammo_type = /obj/item/ammo_casing/c32/rubber
+ ammo_type = /obj/item/ammo_casing/c34/rubber
round_type = AMMO_TYPE_RUBBER
/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat/incendiary
- ammo_type = /obj/item/ammo_casing/c32_incendiary
+ ammo_type = /obj/item/ammo_casing/c34_incendiary
round_type = AMMO_TYPE_INCENDIARY
/obj/item/ammo_box/magazine/multi_sprite/cfa_wildcat/empty
@@ -37,7 +37,7 @@
// Fills the role of a low damage, high magazine capacity magdump gun.
/obj/item/gun/ballistic/automatic/cfa_wildcat
name = "\improper CFA Wildcat"
- desc = "An old SMG, this one is chambered in .32, a very common and dirt-cheap cartridge. It has Cantalan Federal Arms etched above the magazine well."
+ desc = "A robust roller-delayed SMG chambered for .34 ammunition."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile40x32.dmi'
icon_state = "mp5"
inhand_icon_state = "arg"
@@ -52,6 +52,8 @@
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
+ company_flag = COMPANY_CANTALAN
+ dirt_modifier = 0.2
/obj/item/gun/ballistic/automatic/cfa_wildcat/no_mag
spawnwithmagazine = FALSE
@@ -62,7 +64,7 @@
/obj/item/gun/ballistic/automatic/cfa_lynx
name = "\improper CFA Lynx"
- desc = "A carbine with a high magazine capacity. Chambered in 4.6x30mm. It has Cantalan Federal Arms etched above the magazine well."
+ desc = "A carbine with a high magazine capacity. Chambered in 4.2x30mm."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi'
icon_state = "cfa-lynx"
inhand_icon_state = "arg"
@@ -77,31 +79,33 @@
fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg'
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
+ company_flag = COMPANY_CANTALAN
+ dirt_modifier = 0.2
/obj/item/gun/ballistic/automatic/cfa_lynx/no_mag
spawnwithmagazine = FALSE
/obj/item/ammo_box/magazine/multi_sprite/cfa_lynx
- name = "CFA Lynx Magazine (4.6x30mm)"
- desc = "A magazine for the CFA Lynx. It has a small inscription on the base, '4.6x30mm'. Alt+click to reskin it."
+ name = "CFA Lynx Magazine (4.2x30mm)"
+ desc = "A magazine for the CFA Lynx. It has a small inscription on the base, '4.2x30mm'. Alt+click to reskin it."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi'
icon_state = "lynx"
possible_types = list(AMMO_TYPE_LETHAL, AMMO_TYPE_AP, AMMO_TYPE_RUBBER, AMMO_TYPE_INCENDIARY)
- ammo_type = /obj/item/ammo_casing/c46x30mm
- caliber = CALIBER_46X30MM
+ ammo_type = /obj/item/ammo_casing/c42x30mm
+ caliber = CALIBER_42X30MM
max_ammo = 40
multiple_sprites = AMMO_BOX_FULL_EMPTY_BASIC
/obj/item/ammo_box/magazine/multi_sprite/cfa_lynx/ap
- ammo_type = /obj/item/ammo_casing/c46x30mm/ap
+ ammo_type = /obj/item/ammo_casing/c42x30mm/ap
round_type = AMMO_TYPE_AP
/obj/item/ammo_box/magazine/multi_sprite/cfa_lynx/rubber
- ammo_type = /obj/item/ammo_casing/c46x30mm/rubber
+ ammo_type = /obj/item/ammo_casing/c42x30mm/rubber
round_type = AMMO_TYPE_RUBBER
/obj/item/ammo_box/magazine/multi_sprite/cfa_lynx/incendiary
- ammo_type = /obj/item/ammo_casing/c46x30mm/inc
+ ammo_type = /obj/item/ammo_casing/c42x30mm/inc
round_type = AMMO_TYPE_INCENDIARY
/obj/item/ammo_box/magazine/multi_sprite/cfa_lynx/empty
diff --git a/modular_skyrat/modules/modular_weapons/code/energy.dm b/modular_skyrat/modules/modular_weapons/code/energy.dm
index a1a7a88baaf..96ec60e501a 100644
--- a/modular_skyrat/modules/modular_weapons/code/energy.dm
+++ b/modular_skyrat/modules/modular_weapons/code/energy.dm
@@ -1,11 +1,11 @@
//////////////////////
-// CFA Defender //
+// Bolt Responder //
//////////////////////
// A mini disabler with 12 shot capacity in comparison to the normal disabler's 20.
-/obj/item/gun/energy/disabler/cfa_disabler
- name = "CFA Responder"
- desc = "A pocket-sized self-defense weapon popular with law enforcement due to its safe non-lethal payload that physically exhausts organic targets and cheap pricetag. The size makes it popular with smaller species, however, gives the obvious drawback of a smaller battery. It has Cantalan Federal Arms eteched into the grip."
+/obj/item/gun/energy/disabler/bolt_disabler
+ name = "Bolt Responder"
+ desc = "A pocket-sized non-lethal energy gun with low ammo capacity."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi'
icon_state = "cfa-disabler"
inhand_icon_state = null
@@ -18,8 +18,9 @@
can_flashlight = FALSE // Can't attach or detach the flashlight, and override it's icon update
gunlight_state = "cfa-disabler-light"
has_gun_safety = FALSE
+ company_flag = COMPANY_BOLT
-/obj/item/gun/energy/disabler/cfa_disabler/Initialize()
+/obj/item/gun/energy/disabler/bolt_disabler/Initialize()
set_gun_light(new /obj/item/flashlight/seclite(src))
return ..()
diff --git a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm b/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm
index 6cd84dbf866..0cbb9a9eca3 100644
--- a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm
+++ b/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm
@@ -207,4 +207,195 @@
///// 5.56x45mm /////
////////////////////////
-////// 7.62 //////
+////// .34 ACP //////
+// Why? Blame CFA, they want their bullets to be *proprietary*
+/obj/item/ammo_casing/c34
+ name = ".34 bullet casing"
+ desc = "A .34 bullet casing."
+ caliber = "c32acp"
+ projectile_type = /obj/projectile/bullet/c34
+
+/obj/projectile/bullet/c34
+ name = ".34 bullet"
+ damage = 15
+ wound_bonus = 0
+
+/obj/item/ammo_casing/c34/rubber
+ name = ".34 rubber bullet casing"
+ desc = "A .34 rubber bullet casing."
+ caliber = "c34acp"
+ projectile_type = /obj/projectile/bullet/c34/rubber
+ harmful = FALSE
+
+/obj/projectile/bullet/c34/rubber
+ name = ".34 rubber bullet"
+ damage = 5
+ stamina = 20
+ wound_bonus = -75
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+
+/obj/item/ammo_casing/c34/ap
+ name = ".34 armor-piercing bullet"
+ desc = "A .34 armor-piercing bullet casing."
+ caliber = "c34acp"
+ projectile_type = /obj/projectile/bullet/c34/ap
+
+/obj/projectile/bullet/c34/ap
+ name = ".34 armor-piercing bullet"
+ damage = 15
+ armour_penetration = 40
+ wound_bonus = -75
+
+/obj/item/ammo_casing/c34_incendiary
+ name = ".34 incendiary bullet"
+ desc = "A .34 incendiary bullet casing."
+ caliber = "c34acp"
+ projectile_type = /obj/projectile/bullet/incendiary/c34_incendiary
+
+/obj/projectile/bullet/incendiary/c34_incendiary
+ name = ".34 incendiary bullet"
+ damage = 8
+ fire_stacks = 1
+ wound_bonus = -90
+
+////// .34 ACP //////
+////////////////////////
+////// 4.2x30mm //////
+
+/obj/item/ammo_casing/c42x30mm
+ name = "4.2x30mm bullet casing"
+ desc = "A 4.2x30mm bullet casing."
+ caliber = CALIBER_42X30MM
+ projectile_type = /obj/projectile/bullet/c42x30mm
+
+/obj/item/ammo_casing/c42x30mm/ap
+ name = "4.2x30mm armor-piercing bullet casing"
+ desc = "A 4.2x30mm armor-piercing bullet casing."
+ projectile_type = /obj/projectile/bullet/c42x30mm/ap
+
+/obj/item/ammo_casing/c42x30mm/inc
+ name = "4.2x30mm incendiary bullet casing"
+ desc = "A 4.2x30mm incendiary bullet casing."
+ projectile_type = /obj/projectile/bullet/incendiary/c42x30mm
+
+/obj/projectile/bullet/c42x30mm
+ name = "4.2x30mm bullet"
+ damage = 20
+ wound_bonus = -5
+ bare_wound_bonus = 5
+ embed_falloff_tile = -4
+
+/obj/projectile/bullet/c42x30mm/ap
+ name = "4.2x30mm armor-piercing bullet"
+ damage = 15
+ armour_penetration = 40
+ embedding = null
+
+/obj/projectile/bullet/incendiary/c42x30mm
+ name = "4.2x30mm incendiary bullet"
+ damage = 10
+ fire_stacks = 1
+
+/obj/projectile/bullet/c42x30mm_rubber
+ name = "4.2x30mm rubber bullet"
+ damage = 3
+ stamina = 17
+ ricochets_max = 6
+ ricochet_incidence_leeway = 0
+ ricochet_chance = 130
+ ricochet_decay_damage = 0.7
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+ wound_bonus = -50
+
+/obj/item/ammo_casing/c42x30mm/rubber
+ name = "4.2x30mm rubber bullet casing"
+ desc = "A 4.2x30mm rubber bullet casing."
+ projectile_type = /obj/projectile/bullet/c42x30mm_rubber
+ harmful = FALSE
+
+////// 4.2x30mm //////
+////////////////////////
+////// 12mm //////
+
+/obj/item/ammo_casing/c12mm
+ name = "12mm Magnum bullet casing"
+ desc = "A 12mm Magnum bullet casing."
+ caliber = CALIBER_12MM
+ projectile_type = /obj/projectile/bullet/c12mm
+
+/obj/item/ammo_casing/c12mm/ap
+ name = "12mm Magnum armor-piercing bullet casing"
+ desc = "A 12mm Magnum bullet casing with a tungsten core tip."
+ projectile_type = /obj/projectile/bullet/c12mm/ap
+
+/obj/item/ammo_casing/c12mm/hp
+ name = "12mm Magnum hollow-point bullet casing"
+ desc = "A 12mm Magnum bullet casing with a hollow tip that fragments on contact."
+ projectile_type = /obj/projectile/bullet/c12mm/hp
+
+/obj/item/ammo_casing/c12mm/fire
+ name = "12mm Magnum incendiary bullet casing"
+ desc = "A 12mm Magnum bullet casing with a magnesium coated tip meant for setting things on fire."
+ projectile_type = /obj/projectile/bullet/incendiary/c12mm
+
+/obj/item/ammo_casing/c12mm/rubber
+ name = "12mm Magnum rubber bullet casing"
+ desc = "A low powder load 12mm Magnum bullet casing with a flat rubber tip. Headshots heavily discouraged."
+ projectile_type = /obj/projectile/bullet/c12mm/rubber
+ harmful = FALSE
+
+/obj/projectile/bullet/c12mm
+ name = "12mm bullet"
+ damage = 40
+
+/obj/projectile/bullet/c12mm/ap
+ name = "12mm armor-piercing bullet"
+ damage = 37
+ armour_penetration = 40
+
+/obj/projectile/bullet/c12mm/hp
+ name = "12mm hollow-point bullet"
+ damage = 60
+ weak_against_armour = TRUE
+
+/obj/projectile/bullet/incendiary/c12mm
+ name = "12mm incendiary bullet"
+ damage = 20
+ fire_stacks = 2
+
+/obj/projectile/bullet/c12mm/rubber
+ name = "12mm Magnum rubber ball"
+ damage = 10
+ stamina = 40
+ ricochets_max = 6
+ ricochet_incidence_leeway = 0
+ ricochet_chance = 130
+ ricochet_decay_damage = 0.7
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+
+////// 12mm //////
+////////////////////////
+////// 6.8x43mm //////
+
+
+/obj/item/ammo_casing/a68
+ name = "6.8mm bullet casing"
+ desc = "A 6.8mm bullet casing."
+ icon_state = "762-casing"
+ caliber = CALIBER_A68
+ projectile_type = /obj/projectile/bullet/a68
+
+/obj/projectile/bullet/a68
+ name = "6.8 bullet"
+ damage = 55
+ armour_penetration = 10
+ wound_bonus = -45
+ wound_falloff_tile = 0
+
+////// 6.8x43mm //////
diff --git a/modular_skyrat/modules/modular_weapons/code/pistol.dm b/modular_skyrat/modules/modular_weapons/code/pistol.dm
index dd077e39d31..61f64db38ff 100644
--- a/modular_skyrat/modules/modular_weapons/code/pistol.dm
+++ b/modular_skyrat/modules/modular_weapons/code/pistol.dm
@@ -8,7 +8,7 @@
/obj/item/gun/ballistic/automatic/pistol/cfa_snub
name = "CFA Snub"
- desc = "A small easily-concealable modern pistol chambered in the more widely-used 4.6x30mm. It's specifically designed to be compact. It has Cantalan Federal Arms etched into the slide. "
+ desc = "An easily-concealable pistol chambered for 4.2x30mm."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi'
icon_state = "cfa-snub"
mag_type = /obj/item/ammo_box/magazine/multi_sprite/cfa_snub
@@ -16,13 +16,15 @@
fire_sound_volume = 30
w_class = WEIGHT_CLASS_SMALL
has_gun_safety = FALSE
+ company_flag = COMPANY_CANTALAN
+ dirt_modifier = 0.2
/obj/item/gun/ballistic/automatic/pistol/cfa_snub/empty
spawnwithmagazine = FALSE
/obj/item/gun/ballistic/automatic/pistol/cfa_ruby
name = "CFA Ruby"
- desc = "A large and loud modern handgun made to fit more universally used cartridges. It's chambered in .45, or 11.43x23mm. It has Cantalan Federal Arms etched into the slide."
+ desc = "A heavy-duty sidearm chambered in 12x27mm."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile.dmi'
icon_state = "cfa_ruby"
mag_type = /obj/item/ammo_box/magazine/multi_sprite/cfa_ruby
@@ -30,6 +32,8 @@
fire_sound_volume = 120
w_class = WEIGHT_CLASS_NORMAL
has_gun_safety = FALSE
+ company_flag = COMPANY_CANTALAN
+ dirt_modifier = 0.2
/obj/item/gun/ballistic/automatic/pistol/cfa_ruby/empty
spawnwithmagazine = FALSE
@@ -38,39 +42,39 @@
// AMMO //
////////////////////////
/obj/item/ammo_box/magazine/multi_sprite/cfa_snub
- name = "CFA Snub magazine (4.6x30mm)"
+ name = "CFA Snub magazine (4.2x30mm)"
desc = "An advanced magazine with smart type displays. Alt+click to reskin it."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi'
- icon_state = "m46x30"
+ icon_state = "m42x30"
possible_types = list(AMMO_TYPE_LETHAL, AMMO_TYPE_AP, AMMO_TYPE_RUBBER, AMMO_TYPE_INCENDIARY)
- ammo_type = /obj/item/ammo_casing/c46x30mm
- caliber = CALIBER_46X30MM
+ ammo_type = /obj/item/ammo_casing/c42x30mm
+ caliber = CALIBER_42X30MM
max_ammo = 16
multiple_sprites = AMMO_BOX_FULL_EMPTY_BASIC
/obj/item/ammo_box/magazine/multi_sprite/cfa_snub/ap
- ammo_type = /obj/item/ammo_casing/c46x30mm/ap
+ ammo_type = /obj/item/ammo_casing/c42x30mm/ap
round_type = AMMO_TYPE_AP
/obj/item/ammo_box/magazine/multi_sprite/cfa_snub/rubber
- ammo_type = /obj/item/ammo_casing/c46x30mm/rubber
+ ammo_type = /obj/item/ammo_casing/c42x30mm/rubber
round_type = AMMO_TYPE_RUBBER
/obj/item/ammo_box/magazine/multi_sprite/cfa_snub/incendiary
- ammo_type = /obj/item/ammo_casing/c46x30mm/inc
+ ammo_type = /obj/item/ammo_casing/c42x30mm/inc
round_type = AMMO_TYPE_INCENDIARY
/obj/item/ammo_box/magazine/multi_sprite/cfa_snub/empty
start_empty = TRUE
/obj/item/ammo_box/magazine/multi_sprite/cfa_ruby
- name = "CFA Ruby magazine (10mm Magnum)"
+ name = "CFA Ruby magazine (12mm Magnum)"
desc = "An advanced magazine with smart type displays. Alt+click to reskin it."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi'
- icon_state = "m10mm"
+ icon_state = "m12mm"
possible_types = list(AMMO_TYPE_LETHAL, AMMO_TYPE_AP, AMMO_TYPE_RUBBER, AMMO_TYPE_HOLLOWPOINT, AMMO_TYPE_INCENDIARY)
- ammo_type = /obj/item/ammo_casing/c10mm
- caliber = CALIBER_10MM
+ ammo_type = /obj/item/ammo_casing/c12mm
+ caliber = CALIBER_12MM
max_ammo = 8
multiple_sprites = AMMO_BOX_FULL_EMPTY_BASIC
@@ -78,17 +82,17 @@
start_empty = TRUE
/obj/item/ammo_box/magazine/multi_sprite/cfa_ruby/ap
- ammo_type = /obj/item/ammo_casing/c10mm/ap
+ ammo_type = /obj/item/ammo_casing/c12mm/ap
round_type = AMMO_TYPE_AP
/obj/item/ammo_box/magazine/multi_sprite/cfa_ruby/rubber
- ammo_type = /obj/item/ammo_casing/c10mm/rubber
+ ammo_type = /obj/item/ammo_casing/c12mm/rubber
round_type = AMMO_TYPE_RUBBER
/obj/item/ammo_box/magazine/multi_sprite/cfa_ruby/hp
- ammo_type = /obj/item/ammo_casing/c10mm/hp
+ ammo_type = /obj/item/ammo_casing/c12mm/hp
round_type = AMMO_TYPE_HOLLOWPOINT
/obj/item/ammo_box/magazine/multi_sprite/cfa_ruby/incendiary
- ammo_type = /obj/item/ammo_casing/c10mm/fire
+ ammo_type = /obj/item/ammo_casing/c12mm/fire
round_type = AMMO_TYPE_INCENDIARY
diff --git a/modular_skyrat/modules/modular_weapons/code/revolver.dm b/modular_skyrat/modules/modular_weapons/code/revolver.dm
index 79c9fb32c05..21515953d9b 100644
--- a/modular_skyrat/modules/modular_weapons/code/revolver.dm
+++ b/modular_skyrat/modules/modular_weapons/code/revolver.dm
@@ -25,6 +25,8 @@
righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi'
pixel_x = -8
inhand_icon_state = "revolving"
+ company_flag = COMPANY_IZHEVSK
+ dirt_modifier = 0.75
/obj/item/gun/ballistic/revolver/rifle/improvised
name = "\improper Improvised .38 Revolving Rifle"
@@ -33,6 +35,7 @@
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 //TAs far as improvised weapons go, this is fairly decent, this isn't half bad.
fire_delay = 15
recoil = 1
+ company_flag = null
/obj/item/gun/ballistic/revolver/rifle/gold
name = "\improper .45 Revolving Rifle"
diff --git a/modular_skyrat/modules/modular_weapons/code/rifle.dm b/modular_skyrat/modules/modular_weapons/code/rifle.dm
index fd160221b5e..31713b3bba3 100644
--- a/modular_skyrat/modules/modular_weapons/code/rifle.dm
+++ b/modular_skyrat/modules/modular_weapons/code/rifle.dm
@@ -118,8 +118,8 @@
////////////////////////
/obj/item/gun/ballistic/automatic/cfa_rifle
- name = "Cantanheim 7.62 rifle"
- desc = "An old semi-automatic rifle used in a war long ago. Uses 7.62 bullets in a ten round magazine."
+ name = "Cantanheim 6.8mm rifle"
+ desc = "A simple semi-automatic rifle chambered in 6.8mm. The letters 'XJP' are crossed out in the receiver." //Different 6.8mm than the FTU's propietary pulse ballistics
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/guns/projectile40x32.dmi'
icon_state = "cfa_rifle"
inhand_icon_state = "irifle"
@@ -128,11 +128,11 @@
lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi'
righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi'
worn_icon_state = null
- mag_type = /obj/item/ammo_box/magazine/cm762
+ mag_type = /obj/item/ammo_box/magazine/cm68
fire_delay = 5
can_suppress = FALSE
burst_size = 0
- fire_select_modes = list(SELECT_SEMI_AUTOMATIC) //SKYRAT EDIT CHANGE
+ fire_select_modes = list(SELECT_SEMI_AUTOMATIC)
mag_display = FALSE
mag_display_ammo = FALSE
empty_indicator = FALSE
@@ -144,16 +144,18 @@
zoom_out_amt = 2
has_gun_safety = FALSE
w_class = WEIGHT_CLASS_BULKY
+ company_flag = COMPANY_CANTALAN
+ dirt_modifier = 0.25
/obj/item/gun/ballistic/automatic/cfa_rifle/empty
spawnwithmagazine = FALSE
-/obj/item/ammo_box/magazine/cm762
- name = "rifle magazine (7.62mm)"
+/obj/item/ammo_box/magazine/cm68
+ name = "rifle magazine (6.8mm)"
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi'
- icon_state = "7.62"
- ammo_type = /obj/item/ammo_casing/a762
- caliber = CALIBER_A762
+ icon_state = "6.8"
+ ammo_type = /obj/item/ammo_casing/a68
+ caliber = CALIBER_A68
max_ammo = 10
multiple_sprites = 2
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi b/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi
index 49bac414e39..9531519b341 100644
Binary files a/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi and b/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi differ
diff --git a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm b/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm
index 586d570d347..6f78cf18e28 100644
--- a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm
+++ b/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm
@@ -78,7 +78,16 @@
/obj/item/storage/box/ammo_box/microfusion/PopulateContents()
new /obj/item/storage/bag/ammo(src)
+ new /obj/item/stock_parts/cell/microfusion(src)
+ new /obj/item/stock_parts/cell/microfusion(src)
+ new /obj/item/stock_parts/cell/microfusion(src)
+/obj/item/storage/box/ammo_box/microfusion/bagless
+
+/obj/item/storage/box/ammo_box/microfusion/bagless/PopulateContents()
+ new /obj/item/stock_parts/cell/microfusion(src)
+ new /obj/item/stock_parts/cell/microfusion(src)
+ new /obj/item/stock_parts/cell/microfusion(src)
/obj/effect/spawner/armory_spawn/centcom_rifles
icon_state = "random_rifle"
diff --git a/modular_skyrat/modules/sec_haul/code/guns/guns.dm b/modular_skyrat/modules/sec_haul/code/guns/guns.dm
index 7f008c001e1..7852d05f783 100644
--- a/modular_skyrat/modules/sec_haul/code/guns/guns.dm
+++ b/modular_skyrat/modules/sec_haul/code/guns/guns.dm
@@ -1,6 +1,5 @@
/obj/item/gun/ballistic
var/emp_damageable = FALSE
- var/armadyne = FALSE
/obj/item/gun/ballistic/automatic/emp_act(severity)
. = ..()
@@ -14,13 +13,11 @@
. = ..()
if(!emp_damageable)
. += "It has an EMP prevention system."
- if(armadyne)
- . += "It has an
Armadyne
embroidery on the grip." //////////////////GLOCK /obj/item/gun/ballistic/automatic/pistol/g17 - name = "\improper Glock-17" - desc = "A weapon from bygone times, this has been made to feel and look exactly like the 21st century version. Let's hope it's more reliable. Chambered in 9mm." + name = "\improper GK-17" + desc = "A weapon from bygone times, this has been made to look like an old, blocky firearm from the 21st century. Let's hope it's more reliable. Chambered in 9mm." icon = 'modular_skyrat/modules/sec_haul/icons/guns/glock.dmi' icon_state = "glock" w_class = WEIGHT_CLASS_NORMAL @@ -30,12 +27,11 @@ rack_sound = 'sound/weapons/gun/pistol/rack.ogg' lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' - realistic = TRUE can_flashlight = TRUE dirt_modifier = 1 emp_damageable = TRUE - armadyne = TRUE fire_delay = 1.90 + company_flag = COMPANY_CANTALAN /obj/item/ammo_box/magazine/multi_sprite/g17 name = "9x19mm double stack magazine" @@ -59,8 +55,8 @@ round_type = AMMO_TYPE_RUBBER /obj/item/gun/ballistic/automatic/pistol/g18 - name = "\improper Glock-18" - desc = "A burst-firing special anniversary edition of the Glock-18 from Armadyne. Its heavier barrel negatively affects firerate minimally." + name = "\improper GK-18" + desc = "A CFA-made burst firing cheap polymer pistol chambered in 9mm. Its heavy duty barrel affects firerate." icon = 'modular_skyrat/modules/sec_haul/icons/guns/glock.dmi' icon_state = "glock_spec" w_class = WEIGHT_CLASS_NORMAL @@ -73,10 +69,11 @@ burst_size = 3 fire_delay = 2.10 spread = 8 - realistic = TRUE mag_display = FALSE mag_display_ammo = FALSE can_flashlight = TRUE + company_flag = COMPANY_CANTALAN + dirt_modifier = 1 /obj/item/ammo_box/magazine/multi_sprite/g18 name = "extended 9x19mm magazine" @@ -115,8 +112,8 @@ can_flashlight = TRUE dirt_modifier = 0.2 emp_damageable = FALSE - armadyne = FALSE fire_delay = 0.9 + company_flag = null ////////////////PDH 40x32 /obj/item/gun/ballistic/automatic/pistol/pdh @@ -135,9 +132,9 @@ lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' realistic = TRUE - armadyne = TRUE can_flashlight = TRUE emp_damageable = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/gun/ballistic/automatic/pistol/pdh/alt name = "\improper PDH-6C 'SOCOM'" @@ -187,6 +184,7 @@ realistic = TRUE dirt_modifier = 0.1 can_flashlight = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/pdh_corpo name = ".357 pistol magazine" @@ -201,14 +199,15 @@ ///////////////////////////PDH PEACEKEEPER /obj/item/gun/ballistic/automatic/pistol/pdh/peacekeeper - name = "\improper PDH-6B 'Peacekeeper'" - desc = "A modern ballistic sidearm, used primarily by law enforcement, however this one has had a paintjob to match the peacekeeper theme." + name = "\improper PDH-6B" + desc = "A modern ballistic sidearm, used primarily by law enforcement." fire_delay = 1.95 icon_state = "pdh_peacekeeper" mag_type = /obj/item/ammo_box/magazine/multi_sprite/pdh_peacekeeper fire_sound = 'modular_skyrat/modules/sec_haul/sound/pistol_fire.ogg' realistic = TRUE can_flashlight = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/pdh_peacekeeper name = "9x19mm polymer magazine" @@ -233,8 +232,8 @@ ///////////////////////LADON 40x32 /obj/item/gun/ballistic/automatic/pistol/ladon - name = "\improper P-3 'Ladon'" - desc = "A modern ballistic sidearm based off the PDH models, chambered in 10mm and quite recent on the market. It has anArmadyne
embroidery on the grip." + name = "\improper Ladon pistol" + desc = "Modern handgun based off the PDH series, chambered in 10mm." icon = 'modular_skyrat/modules/sec_haul/icons/guns/ladon.dmi' righthand_file = 'modular_skyrat/modules/sec_haul/icons/guns/inhands/righthand40x32.dmi' lefthand_file = 'modular_skyrat/modules/sec_haul/icons/guns/inhands/lefthand40x32.dmi' @@ -251,8 +250,8 @@ can_flashlight = TRUE dirt_modifier = 0.8 emp_damageable = TRUE - armadyne = TRUE fire_delay = 4.20 + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/ladon name = "10mm Auto pistol magazine" @@ -287,9 +286,9 @@ rack_sound = 'sound/weapons/gun/pistol/rack.ogg' lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' - realistic = TRUE - dirt_modifier = 0.7 + dirt_modifier = 0.75 emp_damageable = TRUE + company_flag = COMPANY_IZHEVSK /obj/item/ammo_box/magazine/multi_sprite/makarov name = "small 10mm Auto pistol magazine" @@ -329,6 +328,7 @@ realistic = TRUE dirt_modifier = 0.4 emp_damageable = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/mk58 name = "outdated 9x19mm magazine" @@ -367,7 +367,7 @@ realistic = TRUE can_flashlight = TRUE emp_damageable = TRUE - armadyne = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/firefly name = "9x19mm special pistol magazine" @@ -417,9 +417,9 @@ mag_display_ammo = FALSE fire_select_modes = list(SELECT_SEMI_AUTOMATIC, SELECT_BURST_SHOT) realistic = TRUE - dirt_modifier = 1.7 + dirt_modifier = 1.7 //the croon is an EXTRA piece of shit emp_damageable = TRUE - armadyne = TRUE + company_flag = COMPANY_IZHEVSK /obj/item/ammo_box/magazine/multi_sprite/croon name = "6.3mm SMG magazine" @@ -462,7 +462,7 @@ bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' realistic = TRUE emp_damageable = TRUE - armadyne = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/multi_sprite/dozer name = "9x19mm small PDW magazine" @@ -507,6 +507,7 @@ realistic = TRUE fire_sound_volume = 60 fire_sound = 'modular_skyrat/modules/sec_haul/sound/sniper_fire.ogg' + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/dmr name = ".557 DMR Magazine" @@ -528,8 +529,8 @@ inhand_icon_state = "zeta" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/zeta fire_sound = 'modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg' - armadyne = TRUE fire_delay = 3 + company_flag = COMPANY_BOLT /obj/item/ammo_box/magazine/internal/cylinder/zeta name = "10mm Auto revolver cylinder" @@ -561,8 +562,8 @@ inhand_icon_state = "revolution" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/revolution fire_sound = 'modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg' - armadyne = TRUE fire_delay = 1.90 + company_flag = COMPANY_BOLT /obj/item/ammo_box/magazine/internal/cylinder/revolution name = "revolver cylinder" @@ -617,7 +618,7 @@ load_empty_sound = 'modular_skyrat/modules/sec_haul/sound/chaingun_magout.ogg' var/recharge_time = 5 SECONDS var/recharging = FALSE - armadyne = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/gun/ballistic/automatic/smartgun/process_chamber() . = ..() @@ -690,10 +691,10 @@ realistic = TRUE fire_sound = 'modular_skyrat/modules/sec_haul/sound/ltrifle_fire.ogg' emp_damageable = FALSE - armadyne = TRUE can_bayonet = TRUE can_flashlight = TRUE dirt_modifier = 0.1 + company_flag = COMPANY_OLDARMS /obj/item/ammo_box/magazine/multi_sprite/g11 name = "4.73x33mm top-loader magazine" @@ -724,6 +725,7 @@ mag_type = /obj/item/ammo_box/magazine/internal/shot/m23 w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING + company_flag = COMPANY_BOLT /obj/item/ammo_box/magazine/internal/shot/m23 name = "m23 shotgun internal magazine" @@ -751,6 +753,7 @@ mag_type = /obj/item/ammo_box/magazine/internal/shot/as2 w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/internal/shot/as2 name = "shotgun internal magazine" @@ -779,7 +782,7 @@ fire_select_modes = list(SELECT_SEMI_AUTOMATIC) semi_auto = TRUE internal_magazine = FALSE - armadyne = TRUE + company_flag = COMPANY_ARMADYNE /obj/item/ammo_box/magazine/sas14 name = "14 Gauge box magazine" diff --git a/modular_skyrat/modules/sec_haul/code/guns/pepperball_gun.dm b/modular_skyrat/modules/sec_haul/code/guns/pepperball_gun.dm index 352ca5db8cc..8bd6cb8a497 100644 --- a/modular_skyrat/modules/sec_haul/code/guns/pepperball_gun.dm +++ b/modular_skyrat/modules/sec_haul/code/guns/pepperball_gun.dm @@ -1,6 +1,6 @@ /obj/item/gun/ballistic/automatic/pistol/pepperball - name = "\improper Armadyne Pepperball AHG" - desc = "A fantastically shit weapon used for self defence and created for the sole purpose of underfunded security forces, meet the Pepperball AHG." + name = "\improper Bolt Pepperball AHG" + desc = "An incredibly mediocre 'firearm' designed to fire soft pepper balls meant to easily subdue targets." icon = 'modular_skyrat/modules/sec_haul/icons/guns/pepperball.dmi' icon_state = "peppergun" w_class = WEIGHT_CLASS_NORMAL @@ -14,8 +14,8 @@ can_flashlight = TRUE dirt_modifier = 2 emp_damageable = TRUE - armadyne = TRUE fire_sound_volume = 50 + company_flag = COMPANY_BOLT /obj/item/ammo_box/magazine/pepperball name = "pistol magazine (pepperball)" diff --git a/modular_skyrat/modules/sec_haul/code/guns/token_system/gunsets.dm b/modular_skyrat/modules/sec_haul/code/guns/token_system/gunsets.dm index f37dec93a19..cdd1087297e 100644 --- a/modular_skyrat/modules/sec_haul/code/guns/token_system/gunsets.dm +++ b/modular_skyrat/modules/sec_haul/code/guns/token_system/gunsets.dm @@ -53,7 +53,7 @@ //G-17 /obj/item/storage/box/gunset/glock17 - name = "glock-17 supply box" + name = "GK-17 supply box" /obj/item/gun/ballistic/automatic/pistol/g17/nomag spawnwithmagazine = FALSE @@ -248,9 +248,10 @@ //HOS /obj/item/storage/box/gunset/glock18_hos - name = "glock-18 supply box" - desc = "Ideally contains a fast-firing 9x19mm Pistol made out of cheap plastic." + name = "GK-18 supply box" + desc = "Ideally contains a fast-firing 9x19mm pistol made out of cheap plastic." w_class = WEIGHT_CLASS_NORMAL + /obj/item/gun/ballistic/automatic/pistol/g18/nomag spawnwithmagazine = FALSE diff --git a/modular_skyrat/modules/sec_haul/code/misc/packs.dm b/modular_skyrat/modules/sec_haul/code/misc/packs.dm index 652c7c38926..20532c63d3d 100644 --- a/modular_skyrat/modules/sec_haul/code/misc/packs.dm +++ b/modular_skyrat/modules/sec_haul/code/misc/packs.dm @@ -15,20 +15,3 @@ /obj/item/vending_refill/wardrobe/law_wardrobe) crate_name = "security department supply crate" -/datum/supply_pack/security/primary_case - name = "Primary Armory Token Crate" - desc = "Contains a box of primary armory tokens for the Armadyne weapons vendor." - cost = CARGO_CRATE_VALUE * 15 - access_view = ACCESS_ARMORY - contains = list(/obj/item/storage/box/armament_tokens_primary) - crate_name = "primary armory token crate" - -/datum/supply_pack/security/energy_case - name = "Energy Armory Token Crate" - desc = "Contains a box of energy armory tokens for the Armadyne weapons vendor." - cost = CARGO_CRATE_VALUE * 15 - access_view = ACCESS_ARMORY - contains = list(/obj/item/storage/box/armament_tokens_energy) - crate_name = "energy armory token crate" - - diff --git a/tgstation.dme b/tgstation.dme index cddb16c1656..4c415c43393 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5162,6 +5162,32 @@ #include "modular_skyrat\modules\goofsec\code\projectiles.dm" #include "modular_skyrat\modules\goofsec\code\sec_clothing_overrides.dm" #include "modular_skyrat\modules\goofsec\code\sol_fed.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_component.dm" +#include "modular_skyrat\modules\gun_cargo\code\company_datums.dm" +#include "modular_skyrat\modules\gun_cargo\code\gun_subsystem.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\allstar.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\armadyne.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\armadyne_oldarms.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\bolt.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\cantalan.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\dynamics.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\interdyne.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\izhevsk.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\micron.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\nanotrasen.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\parent_armament.dm" +#include "modular_skyrat\modules\gun_cargo\code\armament_datums\scarborough.dm" +#include "modular_skyrat\modules\gun_cargo\code\datums\cargo_order.dm" +#include "modular_skyrat\modules\gun_cargo\code\datums\cargo_pack.dm" +#include "modular_skyrat\modules\gun_cargo\code\datums\hud.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\access.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\ammo_boxes.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\box.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\cargo_console.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\firing_pin.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\hud_glasses.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\keycard_auth.dm" +#include "modular_skyrat\modules\gun_cargo\code\objects\guns\interdyne.dm" #include "modular_skyrat\modules\gunhud\code\gun_hud.dm" #include "modular_skyrat\modules\gunhud\code\gun_hud_component.dm" #include "modular_skyrat\modules\gunpoint\code\gunpoint.dm" diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 47b1d0b4d25..9fbd3db9877 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -1021,3 +1021,23 @@ em { color: #ff00ff; font-weight: bold; } + +.brown { + color: #3d2009; + font-weight: bold; +} + +.orange { + color: #b8761a; + font-weight: bold; +} + +.yellow { + color: #c7b72c; + font-weight: bold; +} + +.cyan { + color: #0ea1e6; + font-weight: bold; +} diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 6178a9f5abc..20ed07138ce 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -972,3 +972,23 @@ h1.alert, h2.alert { color: #ff00ff; font-weight: bold; } + +.brown { + color: #3d2009; + font-weight: bold; +} + +.orange { + color: #b8761a; + font-weight: bold; +} + +.yellow { + color: #c7b72c; + font-weight: bold; +} + +.cyan { + color: #0ea1e6; + font-weight: bold; +} diff --git a/tgui/packages/tgui/interfaces/Cargo.js b/tgui/packages/tgui/interfaces/Cargo.js index f1186f1dd45..cb3d2fd6c2f 100644 --- a/tgui/packages/tgui/interfaces/Cargo.js +++ b/tgui/packages/tgui/interfaces/Cargo.js @@ -45,6 +45,12 @@ export const CargoContent = (props, context) => { onClick={() => setTab('requests')}> Requests ({requests.length}) +