Skip to content

3D printed guns. #4814

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Mar 16, 2025
1 change: 1 addition & 0 deletions code/_globalvars/lists/maintenance_loot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
/obj/item/tattoo_kit = 1,
/obj/item/folder/ancient_paperwork = 1,
/obj/item/seeds/tree/money = 1, //monkestation edit
/obj/item/disk/design_disk/fss = 1, //monkestation edit
) = 1,

))
Expand Down
10 changes: 8 additions & 2 deletions monkestation/code/modules/cargo/crates/imports.dm
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
access_view = ACCESS_ARMORY
crate_type = /obj/structure/closet/crate/secure/weapon

// MONKESTATION ADDITION START
/datum/supply_pack/imports/Lrevolvercrate
name = "Long Revolver Crate"
desc = "We got these old revolvers from a unnamed man, enjoy them"
Expand Down Expand Up @@ -83,4 +82,11 @@
access = ACCESS_ARMORY
access_view = ACCESS_ARMORY
crate_type = /obj/structure/closet/crate/secure/weapon
// MONKESTATION ADDITION END

/datum/supply_pack/imports/fss
name = "FSS-550 Design Disk"
desc = "Do you hate gun control? So do I! This will let any autolathe produce more guns than security can keep track of!"
cost = CARGO_CRATE_VALUE * 10
hidden = TRUE
contains = list(/obj/item/disk/design_disk/fss)
crate_name = "Emergency Crate"
20 changes: 20 additions & 0 deletions monkestation/code/modules/cargo/markets/market_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,23 @@
price_max = CARGO_CRATE_VALUE * 8
stock_max = 1
availability_prob = 20

/datum/market_item/weapon/fss_disk
name = "FSS-550 Design Disk"
desc = "I HATE security, I HATE how security doesn't let the crew own guns. So I'm going to sell this disk here so EVERYONE can have a gun!"
item = /obj/item/disk/design_disk/fss

price_min = CARGO_CRATE_VALUE * 8
price_max = CARGO_CRATE_VALUE * 10
stock_max = 1
availability_prob = 10

/datum/market_item/weapon/fss
name = "FSS-550"
desc = "A printed version of the venerable WT-550 Autorifle. This has led to the firearm being quite easy to make and distribute away from the prying eyes of security. Unfortunately the gun isn't that good."
item = /obj/item/gun/ballistic/automatic/wt550/fss

price_min = CARGO_CRATE_VALUE * 6
price_max = CARGO_CRATE_VALUE * 8
stock_max = 2
availability_prob = 20
127 changes: 127 additions & 0 deletions monkestation/code/modules/projectiles/guns/ballistic/fss.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/obj/item/gun/ballistic/automatic/wt550/fss //Slightly worse printable WT-550
name = "\improper FSS-550"
desc = "A modified printable version of the WT-550 autorifle, in order to be printed by an autolathe, some sacrifices had to be made. Not only does this gun have less stopping power, the magazine doesn't entirely fit, and it takes a bit of force to jam it in or rip it out. Used by Syndicate agents and rebels in more than 50 systems."
icon = 'monkestation/icons/obj/guns/guns.dmi'
lefthand_file = 'monkestation/icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'monkestation/icons/mob/inhands/weapons/guns_righthand.dmi'
icon_state = "fss550"
inhand_icon_state = "fss"
spread = 2
projectile_damage_multiplier = 0.9
///How long does it take to add or remove a magazine from this gun.
var/magazine_time = 4 SECONDS

///Modify proc so it takes time to add or remove the magazine.
/obj/item/gun/ballistic/automatic/wt550/fss/insert_magazine(mob/user, obj/item/ammo_box/magazine/AM, display_message = TRUE)
if(!istype(AM, accepted_magazine_type))
balloon_alert(user, "[AM.name] doesn't fit!")
return FALSE
if(!do_after(user, magazine_time, target = src))
balloon_alert(user, "interrupted!")
return FALSE
if(user.transferItemToLoc(AM, src))
magazine = AM
if (display_message)
balloon_alert(user, "[magazine_wording] loaded")
playsound(src, load_empty_sound, load_sound_volume, load_sound_vary)
if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked)
chamber_round(TRUE)
update_appearance()
return TRUE
else
to_chat(user, span_warning("You cannot seem to get [src] out of your hands!"))
return FALSE

///Modify proc so it takes time to add or remove the magazine.
/obj/item/gun/ballistic/automatic/wt550/fss/eject_magazine(mob/user, display_message = TRUE, obj/item/ammo_box/magazine/tac_load = null)
if(!do_after(user, magazine_time, target = src))
balloon_alert(user, "interrupted!")
return FALSE
if(bolt_type == BOLT_TYPE_OPEN)
chambered = null
if (magazine.ammo_count())
playsound(src, load_sound, load_sound_volume, load_sound_vary)
else
playsound(src, load_empty_sound, load_sound_volume, load_sound_vary)
magazine.forceMove(drop_location())
var/obj/item/ammo_box/magazine/old_mag = magazine
if (tac_load)
if (insert_magazine(user, tac_load, FALSE))
balloon_alert(user, "[magazine_wording] swapped")
else
to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing."))
magazine = null
else
magazine = null
user.put_in_hands(old_mag)
old_mag.update_appearance()
if (display_message)
balloon_alert(user, "[magazine_wording] unloaded")
update_appearance()

/obj/item/gun/ballistic/automatic/wt550/fss/no_mag
spawnwithmagazine = FALSE

/obj/item/disk/design_disk/fss
name = "FSS-550 Design Disk"
desc = "A disk that allows an autolathe to print the FSS-550 and associated ammo."
icon_state = "datadisk1"

/obj/item/disk/design_disk/fss/Initialize(mapload)
. = ..()
blueprints += new /datum/design/fss
blueprints += new /datum/design/mag_autorifle_fss
blueprints += new /datum/design/mag_autorifle_fss/ap_mag
blueprints += new /datum/design/mag_autorifle_fss/ic_mag
blueprints += new /datum/design/mag_autorifle_fss/rub_mag
blueprints += new /datum/design/mag_autorifle_fss/salt_mag

/datum/design/fss
name = "FSS-550"
desc = "FSS-550 autorifle."
id = "fss"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 20000, /datum/material/glass = 1000)
build_path = /obj/item/gun/ballistic/automatic/wt550/fss/no_mag
category = list(RND_CATEGORY_IMPORTED)

/datum/design/mag_autorifle_fss //WT-550 ammo but printable in autolathe and you get it from a design disk.
name = "WT-550 Autorifle Magazine (4.6x30mm) (Lethal)"
desc = "A 20 round magazine for the out of date WT-550 Autorifle."
id = "mag_autorifle_fss"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 12000)
build_path = /obj/item/ammo_box/magazine/wt550m9
category = list(RND_CATEGORY_IMPORTED)

/datum/design/mag_autorifle_fss/ap_mag
name = "WT-550 Autorifle Armour Piercing Magazine (4.6x30mm AP) (Lethal)"
desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle."
id = "mag_autorifle_ap_fss"
materials = list(/datum/material/iron = 15000, /datum/material/silver = 600)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
category = list(RND_CATEGORY_IMPORTED)

/datum/design/mag_autorifle_fss/ic_mag
name = "WT-550 Autorifle Incendiary Magazine (4.6x30mm IC) (Lethal/Highly Destructive)"
desc = "A 20 round armour piercing magazine for the out of date WT-550 Autorifle."
id = "mag_autorifle_ic_fss"
materials = list(/datum/material/iron = 15000, /datum/material/silver = 600, /datum/material/glass = 1000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
category = list(RND_CATEGORY_IMPORTED)

/datum/design/mag_autorifle_fss/rub_mag
name = "WT-550 Autorifle Rubber Magazine (4.6x30mm R) (Lethal)"
desc = "A 20 round rubber magazine for the out of date WT-550 Autorifle."
id = "mag_autorifle_rub_fss"
materials = list(/datum/material/iron = 6000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtrub
category = list(RND_CATEGORY_IMPORTED)

/datum/design/mag_autorifle_fss/salt_mag
name = "WT-550 Autorifle Saltshot Magazine (4.6x30mm SALT) (Non-Lethal)"
desc = "A 20 round saltshot magazine for the out of date WT-550 Autorifle."
id = "mag_autorifle_salt_fss"
materials = list(/datum/material/iron = 6000, /datum/material/plasma = 600)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtsalt
category = list(RND_CATEGORY_IMPORTED)
9 changes: 9 additions & 0 deletions monkestation/code/modules/uplink/uplink_items/weapons.dm
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,12 @@
desc = "A single surplus Plastikov SMG and two extra magazines. A terrible weapon, perfect for henchmen."
item = /obj/item/storage/box/syndie_kit/shit_smg_bundle
cost = 4

/datum/uplink_item/dangerous/fss_disk
name = "FSS-550 disk"
desc = "A disk that allows an autolathe to print the FSS-550 and associated ammo. \
The FSS-550 is a modified version of the WT-550 autorifle, it's good for arming a large group, but is weaker compared to 'proper' guns."
item = /obj/item/disk/design_disk/fss
progression_minimum = 15 MINUTES
cost = 5
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might be able to take this down to 4, we will see

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I reduce the price?

purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //Because I don't think they get an autolathe or the resources to use the disk.
Binary file modified monkestation/icons/mob/inhands/weapons/guns_lefthand.dmi
Binary file not shown.
Binary file modified monkestation/icons/mob/inhands/weapons/guns_righthand.dmi
Binary file not shown.
Binary file modified monkestation/icons/obj/guns/guns.dmi
Binary file not shown.
1 change: 1 addition & 0 deletions tgstation.dme
Original file line number Diff line number Diff line change
Expand Up @@ -7902,6 +7902,7 @@
#include "monkestation\code\modules\projectiles\pins.dm"
#include "monkestation\code\modules\projectiles\ammunition\_ammunition.dm"
#include "monkestation\code\modules\projectiles\ammunition\ballistic\shotgun.dm"
#include "monkestation\code\modules\projectiles\guns\ballistic\fss.dm"
#include "monkestation\code\modules\projectiles\guns\ballistic\revolver.dm"
#include "monkestation\code\modules\projectiles\guns\ballistic\ryanecorp_whispering_jester.dm"
#include "monkestation\code\modules\projectiles\guns\energy\stun.dm"
Expand Down
Loading