diff --git a/citadel.dme b/citadel.dme index 6475e2a4977..9071340585f 100644 --- a/citadel.dme +++ b/citadel.dme @@ -299,6 +299,7 @@ #include "code\__DEFINES\procs\update_icon.dm" #include "code\__DEFINES\projectiles\ammo_casing.dm" #include "code\__DEFINES\projectiles\ammo_magazine.dm" +#include "code\__DEFINES\projectiles\gun.dm" #include "code\__DEFINES\projectiles\guns.dm" #include "code\__DEFINES\projectiles\projectile.dm" #include "code\__DEFINES\projectiles\system.dm" @@ -902,7 +903,6 @@ #include "code\datums\recipe\stack_recipes\frame.dm" #include "code\datums\recipe\stack_recipes\misc.dm" #include "code\datums\recipe\stack_recipes\structures.dm" -#include "code\datums\repositories\ammomaterial.dm" #include "code\datums\repositories\cameras.dm" #include "code\datums\repositories\crew.dm" #include "code\datums\repositories\decls.dm" @@ -1069,9 +1069,16 @@ #include "code\game\content\factions\corporations\corporation.dm" #include "code\game\content\factions\corporations\gorlex\items\guns\phoron_spitter.dm" #include "code\game\content\factions\corporations\gorlex\items\guns\wild_hunt.dm" +#include "code\game\content\factions\corporations\hephaestus\hephaestus-faction.dm" #include "code\game\content\factions\corporations\nanotrasen\nanotrasen-faction.dm" #include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply.dm" -#include "code\game\content\factions\corporations\nanotrasen\items\guns\pulse.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary-antimaterial.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary-heavy_rifle.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary-heavy_sidearm.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary-light_rifle.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary-light_sidearm.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_expeditionary.dm" +#include "code\game\content\factions\corporations\nanotrasen\items\guns\nt_pulse.dm" #include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\animals.dm" #include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\atmospherics.dm" #include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\contraband.dm" @@ -2191,6 +2198,7 @@ #include "code\modules\admin\verbs\debug\fucky_wucky.dm" #include "code\modules\admin\verbs\debug\profiling.dm" #include "code\modules\admin\verbs\debug\reestablish_db_connection.dm" +#include "code\modules\admin\verbs\debug\spawn.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" diff --git a/code/__DEFINES/projectiles/ammo_casing.dm b/code/__DEFINES/projectiles/ammo_casing.dm index 87427678b77..c941f70e08d 100644 --- a/code/__DEFINES/projectiles/ammo_casing.dm +++ b/code/__DEFINES/projectiles/ammo_casing.dm @@ -1,5 +1,5 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// //* /obj/item/ammo_casing casing_flags *// diff --git a/code/__DEFINES/projectiles/ammo_magazine.dm b/code/__DEFINES/projectiles/ammo_magazine.dm index 325ded8564a..a7076bcb841 100644 --- a/code/__DEFINES/projectiles/ammo_magazine.dm +++ b/code/__DEFINES/projectiles/ammo_magazine.dm @@ -1,9 +1,11 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// -//* /obj/item/ammo_magazine magazine_type +//* /obj/item/ammo_magazine - magazine_type *// /// normal magazines +/// +/// * basically, straight or curved 'stick' magazines #define MAGAZINE_TYPE_NORMAL (1<<0) /// revolver-like speedloader #define MAGAZINE_TYPE_SPEEDLOADER (1<<1) @@ -12,6 +14,8 @@ /// loose pouch #define MAGAZINE_TYPE_POUCH (1<<3) /// structured box +/// +/// * this refers to LMG-like box magazine, not what we call just generally normal magazines #define MAGAZINE_TYPE_BOX (1<<3) DEFINE_BITFIELD_NEW(ammo_magazine_types, list( @@ -25,3 +29,23 @@ DEFINE_BITFIELD_NEW(ammo_magazine_types, list( BITFIELD_NEW("Ammo Pouch", MAGAZINE_TYPE_POUCH), BITFIELD_NEW("Ammo Box", MAGAZINE_TYPE_BOX), )) + +//* /obj/item/ammo_magazine - magazine_class *// + +/// renders as -mag +/// +/// * if a magazine's class isn't in a gun's render_magazine_overlay, we use this state +#define MAGAZINE_CLASS_GENERIC (1<<0) +/// renders as -mag-drum +#define MAGAZINE_CLASS_DRUM (1<<1) +/// renders as -mag-ext +#define MAGAZINE_CLASS_EXTENDED (1<<2) +/// renders as -mag-box +#define MAGAZINE_CLASS_BOX (1<<3) + +GLOBAL_REAL_LIST(magazine_class_bit_to_state) = list( + "mag", + "mag-drum", + "mag-ext", + "mag-box", +) diff --git a/code/__DEFINES/projectiles/gun.dm b/code/__DEFINES/projectiles/gun.dm new file mode 100644 index 00000000000..445ac24e243 --- /dev/null +++ b/code/__DEFINES/projectiles/gun.dm @@ -0,0 +1,28 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* rendering enums - /obj/item/gun/ballistic *// + +//? render_bolt_overlay + +/// do not render bolt state +#define BALLISTIC_RENDER_BOLT_NEVER 0 +/// render `[base state]-bolt` if open +#define BALLISTIC_RENDER_BOLT_OPEN 1 +/// render `[base state]-bolt` if closed +#define BALLISTIC_RENDER_BOLT_CLOSE 2 +/// * render `[base state]-bolt-open` if open +/// * render `[base state]-bolt-close` if closed +#define BALLISTIC_RENDER_BOLT_BOTH 3 + +//? render_break_overlay + +/// do not render break-action state +#define BALLISTIC_RENDER_BREAK_NEVER 0 +/// render `[base state]-break` if open +#define BALLISTIC_RENDER_BREAK_OPEN 1 +/// render `[base state]-break` if closed +#define BALLISTIC_RENDER_BREAK_CLOSE 2 +/// * render `[base state]-break-open` if open +/// * render `[base state]-break-close` if closed +#define BALLISTIC_RENDER_BREAK_BOTH 3 diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 1f277ea5e06..93042d3ea1a 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -1,54 +1,54 @@ +/** + * todo: rename this + * + * Reformat types to be more readable for admin interfaces. + * + * This is done because BYOND is hell and "input in list" is obnoxious. + */ /proc/make_types_fancy(list/types) if (ispath(types)) types = list(types) . = list() + var/static/list/shortcut_lookup = list( + /obj/effect/debris = "//debris", + /obj/item/radio/headset = "//headset", + /obj/item/reagent_containers/food/drinks = "//drink", + /obj/item/reagent_containers/food = "//food", + /obj/machinery/atmospherics = "//atmos", + /obj/machinery/portable_atmospherics = "//port_atmos", + /obj/item/mecha_parts/mecha_equipment/weapon = "//mech_weapon", + /obj/item/mecha_parts = "//mech_part", + /obj/item/organ = "//organ", + /obj/item/gun/ballistic = "//ballistic", + /obj/item/gun/energy = "//energy", + /obj/item/gun/magnetic = "//magnetic", + /obj/item/gun = "//gun", + /obj/item/ammo_casing = "//ammo", + /obj/item/ammo_magazine = "//magazine", + /obj/item = "//item", + /obj/machinery = "//machine", + /obj/effect = "//effect", + /atom/movable = "//movable", + /turf/simulated/floor = "//floor", + /turf/simulated = "//simulated", + /mob/living/carbon = "//carbon", + /mob/living/simple_mob = "//simple", + /mob/living = "//living", + ) for(var/type in types) - var/typename = "[type]" - var/static/list/TYPES_SHORTCUTS = list( - /obj/effect/debris/cleanable = "CLEANABLE", - /obj/item/radio/headset = "HEADSET", - /obj/item/clothing/head/helmet/space = "SPESSHELMET", - // /obj/item/book/manual = "MANUAL", - // /obj/item/reagent_containers/food/drinks = "DRINK", //longest paths comes first - // /obj/item/reagent_containers/food = "FOOD", - // /obj/item/reagent_containers = "REAGENT_CONTAINERS", - /obj/machinery/atmospherics = "ATMOS_MACH", - /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", - /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", - /obj/item/organ = "ORGAN", - /obj/item = "ITEM", - /obj/machinery = "MACHINERY", - /obj/effect = "EFFECT", - /obj = "O", - /datum = "D", - // /turf/open = "OPEN", - // /turf/closed = "CLOSED", - /turf = "T", - /mob/living/carbon = "CARBON", - /mob/living/simple_animal = "SIMPLE", - /mob/living = "LIVING", - /mob = "M", - ) - for (var/tn in TYPES_SHORTCUTS) - if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) - typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/")) + var/shortcut + for(var/prefix in shortcut_lookup) + if(ispath(type, prefix)) + shortcut = "[shortcut_lookup[prefix]][copytext("[type]", length("[prefix]") + 1)]" break - .[typename] = type + .[shortcut || "[type]"] = type /proc/get_fancy_list_of_atom_types() - var/static/list/pre_generated_list - if (!pre_generated_list) //init - pre_generated_list = make_types_fancy(typesof(/atom)) - return pre_generated_list + return make_types_fancy(typesof(/atom)) /proc/get_fancy_list_of_datum_types() - var/static/list/pre_generated_list - if (!pre_generated_list) //init - pre_generated_list = make_types_fancy(sortList(typesof(/datum) - typesof(/atom))) - return pre_generated_list - + return make_types_fancy(typesof(/datum) - typesof(/atom)) /proc/filter_fancy_list(list/L, filter as text) var/list/matches = new diff --git a/code/datums/components/items/wielding.dm b/code/datums/components/items/wielding.dm index 96fc1e4bfe7..881d8828bcf 100644 --- a/code/datums/components/items/wielding.dm +++ b/code/datums/components/items/wielding.dm @@ -108,8 +108,18 @@ //* Item Hooks *// +/** + * Called when wielded via wielding component. + * + * * This is a default hook that's always executed, even if there's a callback provided to the component. + */ /obj/item/proc/on_wield(mob/user, hands) return +/** + * Called when wielded via wielding component. + * + * * This is a default hook that's always executed, even if there's a callback provided to the component. + */ /obj/item/proc/on_unwield(mob/user, hands) return diff --git a/code/datums/outfits/spec_op.dm b/code/datums/outfits/spec_op.dm index cfd6065bb75..f9906f7968f 100644 --- a/code/datums/outfits/spec_op.dm +++ b/code/datums/outfits/spec_op.dm @@ -6,7 +6,7 @@ glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana head = /obj/item/clothing/head/beret //deathsquad - belt = /obj/item/gun/energy/pulse_carbine + belt = /obj/item/gun/energy/nt_pulse/carbine back = /obj/item/storage/backpack/satchel shoes = /obj/item/clothing/shoes/boots/combat gloves = /obj/item/clothing/gloves/combat diff --git a/code/datums/outfits/tournament.dm b/code/datums/outfits/tournament.dm index 25b64c6ebda..f6686d92720 100644 --- a/code/datums/outfits/tournament.dm +++ b/code/datums/outfits/tournament.dm @@ -4,7 +4,7 @@ head = /obj/item/clothing/head/helmet/thunderdome suit = /obj/item/clothing/suit/armor/vest l_hand = /obj/item/material/knife - r_hand = /obj/item/gun/energy/pulse_rifle + r_hand = /obj/item/gun/energy/nt_pulse/rifle r_pocket = /obj/item/grenade/smokebomb shoes = /obj/item/clothing/shoes/black diff --git a/code/datums/repositories/ammomaterial.dm b/code/datums/repositories/ammomaterial.dm deleted file mode 100644 index 30eac92515c..00000000000 --- a/code/datums/repositories/ammomaterial.dm +++ /dev/null @@ -1,18 +0,0 @@ -var/global/datum/repository/ammomaterial/ammo_repository = new() - -/datum/repository/ammomaterial - var/list/ammotypes - -/datum/repository/ammomaterial/New() - ammotypes = list() - ..() - -/datum/repository/ammomaterial/proc/get_materials_from_object(obj/item/ammo_casing/I) - - if(!(I in ammotypes)) - ammotypes += I - var/obj/item/ammo_casing/temp = new I - ammotypes[I] = temp.materials_base - qdel(temp) - - return ammotypes[I] diff --git a/code/game/antagonist/outsider/deathsquad.dm b/code/game/antagonist/outsider/deathsquad.dm index 26517f96697..1d6df3c2731 100644 --- a/code/game/antagonist/outsider/deathsquad.dm +++ b/code/game/antagonist/outsider/deathsquad.dm @@ -47,7 +47,7 @@ var/datum/antagonist/deathsquad/deathsquad else player.equip_to_slot_or_del(new /obj/item/plastique(player), SLOT_ID_LEFT_POCKET) player.equip_to_slot_or_del(new /obj/item/gun/ballistic/revolver/combat(player), SLOT_ID_BELT) - player.equip_to_slot_or_del(new /obj/item/gun/energy/pulse_rifle(player), /datum/inventory_slot/abstract/hand/right) + player.equip_to_slot_or_del(new /obj/item/gun/energy/nt_pulse/rifle(player), /datum/inventory_slot/abstract/hand/right) player.equip_to_slot_or_del(new /obj/item/hardsuit/ert/assetprotection(player), SLOT_ID_BACK) player.equip_to_slot_or_del(new /obj/item/melee/transforming/energy/sword(player), SLOT_ID_SUIT_STORAGE) // player.implant_loyalty() diff --git a/code/game/atoms/atom.dm b/code/game/atoms/atom.dm index 95403d73eb5..ef97e3bb7a1 100644 --- a/code/game/atoms/atom.dm +++ b/code/game/atoms/atom.dm @@ -25,8 +25,6 @@ var/pass_flags_self = NONE //? Unsorted / Legacy - /// Used for changing icon states for different base sprites. - var/base_icon_state /// Holder for the last time we have been bumped. var/last_bumped = 0 /// The higher the germ level, the more germ on the atom. @@ -151,7 +149,16 @@ /// contamination insulation; null defaults to rad_insulation, this is a multiplier. *never* set higher than 1!! var/rad_stickiness = 1 - //? Shieldcalls + //* Rendering *// + + /// Used for changing icon states for different base sprites. + /// + /// * Not used directly, but it's a frequent pattern to need to override this + /// and we don't want to always force usage of initial(icon_state) + var/base_icon_state + + //* Shieldcalls *// + /// sorted priority list of datums for handling shieldcalls with /// we use this instead of signals so we can enforce priorities /// this is horrifying. diff --git a/code/game/backend/world/world_faction.dm b/code/game/backend/world/world_faction.dm index 9d3ec6b06dc..0455747bfac 100644 --- a/code/game/backend/world/world_faction.dm +++ b/code/game/backend/world/world_faction.dm @@ -11,6 +11,8 @@ /// name var/name = "Unknown Faction" + /// public abbreviation; if null, it doesn't have one + var/abbreviation /// id - must be unique var/id /// short description blurb diff --git a/code/game/content/factions/corporations/corporation.dm b/code/game/content/factions/corporations/corporation.dm index 1296f039089..c52c54d6129 100644 --- a/code/game/content/factions/corporations/corporation.dm +++ b/code/game/content/factions/corporations/corporation.dm @@ -1,5 +1,5 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// /datum/world_faction/corporation abstract_type = /datum/world_faction/corporation diff --git a/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm b/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm index 59e33a3e936..066fe6512af 100644 --- a/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm +++ b/code/game/content/factions/corporations/gorlex/items/guns/phoron_spitter.dm @@ -62,7 +62,7 @@ desc = "A compressed matter container meant for the Gorlex SHRAPNEL-SPITTER SMG. Contains a phoron alloy that self-oxidzes and ignites on contact with air. \n \nThey're in good shape for the shape they're in, \nbut God, I wonder how they think they can win, \nwith phoron rolling down their skin." ammo_max = 40 ammo_caliber = /datum/ammo_caliber/phoron_shrap - ammo_type = /obj/item/ammo_casing/phoron_shrap + ammo_preload = /obj/item/ammo_casing/phoron_shrap icon = 'icons/content/factions/corporations/gorlex/items/guns/phoron_spitter.dmi' icon_state = "mag-1" diff --git a/code/game/content/factions/corporations/hephaestus/hephaestus-faction.dm b/code/game/content/factions/corporations/hephaestus/hephaestus-faction.dm new file mode 100644 index 00000000000..58137ca45fa --- /dev/null +++ b/code/game/content/factions/corporations/hephaestus/hephaestus-faction.dm @@ -0,0 +1,17 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/datum/world_faction/corporation/hephaestus + name = "Hephaestus Industries" + abbreviation = "HI" + id = "hephaestus" + desc = "Hephaestus Industries, the premiere Trans-Stellar Corporation for, as their name implies, \ + industrial and manufacturing needs - as well as their prestigious lines of synthetics often seen serving \ + on many a Frontier locale. Outside of their affinity towards Nanotrasen and Vey-Med, however, they are still at their core \ + a corporation built on cut-throat industrialism, often providing the supplies and the technologies of war utilized in many Frontier conflicts. \ + Nowadays, Hephaestus continues to be a reliable source of industrial supply, albeit tending to be rather dated at times \ + due to their relative lack of adaptation." + + location_ids = list( + /datum/world_location/frontier::id, + ) diff --git a/code/game/content/factions/corporations/hephaestus/items/guns/srp.dm b/code/game/content/factions/corporations/hephaestus/items/guns/srp.dm new file mode 100644 index 00000000000..e6a65a21bbc --- /dev/null +++ b/code/game/content/factions/corporations/hephaestus/items/guns/srp.dm @@ -0,0 +1,28 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +// todo: while this is all valid code, this file is commented out because the current weapon racking/pumping/chamber charging system is not good enough to support this. + +/** + * * Uses restricted NT-protomag antimaterial caliber. + * * Single-shot. + * * Extremely powerful. Non-acquirable by most means. + * * Synchronous Slide Charging is inbuilt and non-replaceable. + */ +/obj/item/gun/ballistic/magnetic/nt_protomag/srp + name = "anti-material rifle" + desc = "A devastating single-shot rifle. Fires ferromagnetic slugs using a bank of internal supercapacitors." + description_fluff = {" + A monstrously powerful rifle made during the peak of the Phoron War, the Hephaestus Industries + "SRP" anti-material rifle was made to counter the development of personal exosuits as well as the + looming proliferation of heavy combat synthetics. As potent as it is unwieldly, the recoil generated + by this rifle is enough to fracture bone and dent a domestic synthetic's chassis - restricting its + use to the few combat androids sturdy enough to use it in sustained fire. The line was discontinued + by treaty after the War, with few surviving prototypes able to be found here and there around the Frontier. + While technically developed in part with the 'Nanotrasen Protomag' series of prototype mag-charged + weapons, this rifle was ultimately abandoned entirely by Nanotrasen due to the existence of their + existing pulse weapons, given the similar penetration of pulse weapons despite having a fraction + of the recoil. + "} + +#warn impl all diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-antimaterial.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-antimaterial.dm new file mode 100644 index 00000000000..93e8a089596 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-antimaterial.dm @@ -0,0 +1,98 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition/antimaterial + caliber = "nt-antimaterial" + diameter = 12 + length = 92 + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition/antimaterial + name = "ammo casing (NT-12.5-antimaterial)" + desc = "A standardized 12.5x92mm cartridge for NT Expeditionary kinetics. This one seems ridiculously large, and is probably for a very powerful weapon." + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial-ammo.dmi' + icon_state = "basic" + icon_spent = TRUE + caliber = /datum/ammo_caliber/nt_expedition/antimaterial + projectile_type = /obj/projectile/bullet/nt_expedition/antimaterial + + /// specifically for /obj/item/ammo_magazine/nt_expedition/antimaterial's + /// + /// * null to default to "[base_icon_state || initial(icon_state)]" + var/magazine_state + +/obj/item/ammo_casing/nt_expedition/antimaterial/penetrator + icon_state = "penetrator" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/antimaterial/emp + icon_state = "emp" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/antimaterial/explosive + icon_state = "explosive" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/antimaterial/titanium + icon_state = "titanium" + // todo: implement casing + magazine + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition/antimaterial + name = "ammo magazine (NT-12.5-antimaterial)" + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial-ammo.dmi' + icon_state = "magazine" + base_icon_state = "magazine" + ammo_caliber = /datum/ammo_caliber/nt_expedition/antimaterial + ammo_max = 5 + ammo_preload = /obj/item/ammo_casing/nt_expedition/antimaterial + magazine_type = MAGAZINE_TYPE_NORMAL + +/obj/item/ammo_magazine/nt_expedition/antimaterial/update_icon(updates) + cut_overlays() + . = ..() + var/list/overlays_to_add = list() + for(var/i in 1 to min(5, amount_remaining())) + var/obj/item/ammo_casing/nt_expedition/antimaterial/casted_path_of_potential = peek_path_of_position(i) + var/append = "basic" + if(ispath(casted_path_of_potential, /obj/item/ammo_casing/nt_expedition/antimaterial)) + append = initial(casted_path_of_potential.magazine_state) + var/image/overlay = image(icon, "magazine-[append]") + overlay.pixel_x = (i - 1) * -2 + overlay.pixel_y = (i - 1) * 2 + overlays_to_add += overlay + add_overlay(overlays_to_add) + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition/antimaterial + name = "antimaterial sabot" + damage_force = 55 + damage_tier = LERP(BULLET_TIER_HIGH, BULLET_TIER_EXTREME, 1) + armor_penetration = 75 + +//* Antimaterial Weapons *// + +/obj/item/gun/ballistic/nt_expedition/antimaterial + abstract_type = /obj/item/gun/ballistic/nt_expedition/antimaterial + caliber = /datum/ammo_caliber/nt_expedition/antimaterial + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial.dmi' + +// todo: placeholder sprite +/obj/item/gun/ballistic/nt_expedition/antimaterial/singleshot + name = "anti-material rifle" + desc = "The XNR Mk.11 \"Immobilizer\" anti-material rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A chemical-propelled knockoff of a prototype Hephaestus Industries anti-armour rifle from the days of the Phoron Wars, + the XNR Mk.11 "Immobilizer" is an accurate, long-range weapon intended for use on lighter mecha. Unfortunately, its performance + suffers against heavier armor due to the limitations of using traditional ammunition in such a 'portable' package. + Regardless, its relative ease of handling (and noted ability to be used by an unaugmented soldier) keeps it in the armories of some + corporate militaries and emergency responders. + "} + "
" + icon_state = "rifle" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + load_method = SINGLE_CASING | MAGAZINE diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_rifle.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_rifle.dm new file mode 100644 index 00000000000..7195b5283cc --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_rifle.dm @@ -0,0 +1,161 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition/heavy_rifle + caliber = "nt-heavy-rifle" + diameter = 7.5 + length = 54 + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition/heavy_rifle + name = "ammo casing (NT-7.5-LR)" + desc = "A standardized 7.5x54mm cartridge for NT Expeditionary kinetics. This one seems to be for heavy rifles." + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi' + icon_state = "basic" + icon_spent = TRUE + caliber = /datum/ammo_caliber/nt_expedition/heavy_rifle + projectile_type = /obj/projectile/bullet/nt_expedition/heavy_rifle + + /// specifically for /obj/item/ammo_magazine/nt_expedition/heavy_rifle's + var/stripper_state = "basic" + +/obj/item/ammo_casing/nt_expedition/heavy_rifle/piercing + icon_state = "piercing" + stripper_state = "piercing" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/heavy_rifle/rubber + icon_state = "rubber" + stripper_state = "rubber" + // todo: implement casing + magazine + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle + name = "ammo magazine (NT-7.5-LR)" + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi' + ammo_caliber = /datum/ammo_caliber/nt_expedition/heavy_rifle + ammo_preload = /obj/item/ammo_casing/nt_expedition/heavy_rifle + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle/stripper_clip + name = "stripper clip (NT-7.5-LR)" + icon_state = "stripper" + base_icon_state = "stripper" + ammo_max = 6 + magazine_type = MAGAZINE_TYPE_CLIP + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle/stripper_clip/update_icon(updates) + cut_overlays() + . = ..() + var/list/overlays_to_add = list() + for(var/i in 1 to min(5, amount_remaining())) + var/obj/item/ammo_casing/nt_expedition/heavy_rifle/casted_path_of_potential = peek_path_of_position(i) + var/append = "basic" + if(ispath(casted_path_of_potential, /obj/item/ammo_casing/nt_expedition/heavy_rifle)) + append = initial(casted_path_of_potential.stripper_state) + var/image/overlay = image(icon, "stripper-[append]") + overlay.pixel_x = (i - 1) * -2 - 8 + overlay.pixel_y = (i - 1) * 2 - 8 + overlays_to_add += overlay + add_overlay(overlays_to_add) + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle/stick + name = "ammo magazine (NT-7.5-LR)" + icon_state = "mag-basic-0" + base_icon_state = "mag-basic" + magazine_type = MAGAZINE_TYPE_NORMAL + ammo_max = 16 + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle/stick/extended + name = "extended magazine (NT-7.5-LR)" + icon_state = "mag-ext-basic-0" + base_icon_state = "mag-ext-basic" + ammo_max = 24 + +/obj/item/ammo_magazine/nt_expedition/heavy_rifle/stick/drum + name = "drum magazine (NT-7.5-LR)" + icon_state = "mag-drum-basic-0" + base_icon_state = "mag-drum-basic" + ammo_max = 40 + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition/heavy_rifle + name = "heavy rifle bullet" + damage_force = 40 + damage_tier = LERP(BULLET_TIER_MEDIUM, BULLET_TIER_HIGH, 1) + armor_penetration = 50 + +//* Heavy Rifles *// + +/obj/item/gun/ballistic/nt_expedition/heavy_rifle + abstract_type = /obj/item/gun/ballistic/nt_expedition/heavy_rifle + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy.dmi' + caliber = /datum/ammo_caliber/nt_expedition/heavy_rifle + +/obj/item/gun/ballistic/nt_expedition/heavy_rifle/singleshot + name = "marksman rifle" + desc = "The XNR(S) Mk.10 \"Old Man\" marksman rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A single shot, break action rifle chambered in 7.5x54mm, and sporting a 2x magnified optic, + this is the go-to hunting rifle for long-range patrols. + Light, uncomplicated, and rugged, the “Old Man” has nothing fancy about it. + But, time and again, it works, day in, and day out. + "} + "
" + icon_state = "single" + base_icon_state = "single" + item_renderer = /datum/gun_item_renderer/empty_state + load_method = SINGLE_CASING | SPEEDLOADER + +/obj/item/gun/ballistic/nt_expedition/heavy_rifle/semirifle + name = "heavy rifle" + desc = "The XNR Mk.9 \"Ranger\" heavy rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + Using the Mk.4 “Scout” as a baseline, this semiautomatic rifle is akin to holding a monster, + disguised in the skin of a dearly beloved friend in your hands. + Using full-powered rifle rounds (7.5x54mm), this rifle is broken out when you absolutely + positively have to blow a fist-sized hole in something and don't have time to wait. + A scaled-up version of the Scout, with box magazines, this long gun is often seen issued + to hunters looking to take down game to sustain an expedition. + "} + "
" + icon_state = "semi" + base_icon_state = "semi" + item_renderer = /datum/gun_item_renderer/empty_state + load_method = MAGAZINE | SINGLE_CASING + +/obj/item/gun/ballistic/nt_expedition/heavy_rifle/autorifle + name = "heavy automatic rifle" + desc = "The XNR MK.9 Mod.1 \"Auto Ranger\" heavy rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + “What if we just.. Put a bigger magazine in it and a full auto trigger pack?” is the + question that led to the development of the “Auto Ranger”, at first. + Then, after an 'eventful' initial test, a gyroscopic stabilizer was added below + the handguard and a fixed stock was installed to handle the 'roller coaster' as one test + participant described the experience. Limiting the rifle + to burst fire keeps the rifle on target through most situations. + "} + "
" + icon_state = "auto-map" + base_icon_state = "auto" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + load_method = MAGAZINE | SINGLE_CASING + +/obj/item/gun/ballistic/nt_expedition/heavy_rifle/lmg + name = "light machine gun" + desc = "The XNR Mk.9 Mod.2 \"Hailmaker\" light machine gun; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + The tests of the Mod.2 design quickly turned development towards a + general purpose machine gun (GPMG) version of the Ranger series, the “Hailmaker.”. + Sporting a frame-mounted cryo-stabilized heavy barrel, a feed tray for quickly reloading + via an assistant gunner, a belt box for 100 rounds of 7.5x54mm, and a gyroscopic assist system, + this weapon is seen in the guard towers of base camps and atop vehicles in addition to + dedicated machine gun teams. The patter this weapon makes as it suppresses any hostile + force makes this weapon's name a logical choice. + "} + "
" + icon_state = "lmg" + load_method = MAGAZINE | SINGLE_CASING + + // todo: rendering; how are we going to render both unloaded and open? + // todo: rendering; maybe expand the render additional to allow for generation of a list? diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_sidearm.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_sidearm.dm new file mode 100644 index 00000000000..964bd72c902 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-heavy_sidearm.dm @@ -0,0 +1,135 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition/heavy_sidearm + caliber = "nt-heavy-sidearm" + diameter = 9 + length = 34 + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition/heavy_sidearm + name = "ammo casing (NT-9-magnum)" + desc = "A standardized 9mm cartridge for NT Expeditionary kinetics. This one seems to be for heavy-duty sidearms." + caliber = /datum/ammo_caliber/nt_expedition/heavy_sidearm + projectile_type = /obj/projectile/bullet/nt_expedition/heavy_sidearm + + /// specifically for /obj/item/ammo_magazine/nt_expedition/heavy_rifle's + var/speedloader_state = "basic" + +/obj/item/ammo_casing/nt_expedition/heavy_sidearm/piercing + icon_state = "piercing" + speedloader_state = "piercing" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/heavy_sidearm/rubber + icon_state = "rubber" + speedloader_state = "rubber" + // todo: implement casing + magazine + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition/heavy_sidearm + name = "ammo magazine (NT-9-LR)" + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy-ammo.dmi' + rendering_system = GUN_RENDERING_DISABLED + ammo_caliber = /datum/ammo_caliber/nt_expedition/heavy_sidearm + ammo_max = 5 + ammo_preload = /obj/item/ammo_casing/nt_expedition/heavy_sidearm + +/obj/item/ammo_magazine/nt_expedition/heavy_sidearm/speedloader + name = "speedloader (NT-9-LR)" + icon_state = "speedloader" + base_icon_state = "speedloader" + magazine_type = MAGAZINE_TYPE_SPEEDLOADER + +/obj/item/ammo_magazine/nt_expedition/heavy_sidearm/speedloader/update_icon(updates) + cut_overlays() + . = ..() + var/list/overlays_to_add = list() + for(var/i in 1 to min(4, amount_remaining())) + var/obj/item/ammo_casing/nt_expedition/heavy_sidearm/predicted_path = peek_path_of_position(i) + var/append = "basic" + if(ispath(predicted_path, /obj/item/ammo_casing/nt_expedition/heavy_sidearm)) + append = initial(predicted_path.speedloader_state) + var/image/overlay = image(icon, "speedloader-[append]") + overlay.pixel_x = (i - 1) * 2 - 1 + overlay.pixel_y = (i - 1) * -2 + 1 + overlays_to_add += overlay + add_overlay(overlays_to_add) + +/obj/item/ammo_magazine/nt_expedition/heavy_sidearm/pistol + name = "pistol magazine (NT-9-LR)" + icon_state = "magazine-5" + base_icon_state = "magazine" + rendering_static_overlay = "magazine-stripe" + magazine_type = MAGAZINE_TYPE_NORMAL + +/obj/item/ammo_magazine/nt_expedition/heavy_sidearm/smg + name = "smg magazine (NT-9-LR)" + icon_state = "smg-1" + base_icon_state = "smg" + rendering_static_overlay = "smg-stripe" + magazine_type = MAGAZINE_TYPE_NORMAL + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition/heavy_sidearm + name = "heavy bullet" + damage_force = 35 + damage_tier = LERP(BULLET_TIER_LOW, BULLET_TIER_MEDIUM, 0.95) + armor_penetration = 20 + +//* Heavy Sidearms *// + +/obj/item/gun/ballistic/nt_expedition/heavy_sidearm + abstract_type = /obj/item/gun/ballistic/nt_expedition/heavy_sidearm + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy.dmi' + caliber = /datum/ammo_caliber/nt_expedition/heavy_sidearm + +/obj/item/gun/ballistic/nt_expedition/heavy_sidearm/pistol + name = "heavy pistol" + desc = "The XNP Mk.2 \"Angry Moth\" sidearm; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + Taking the original XNP Mk.1 to the next level, this time upscaling the frame to accept a + magnum 9x34mm cartridge, the “Angry Moth” sidearm is best described + as “Shaking hands with danger”. The recoil it imparts will make it hard to forget + the experience, but the performance on target leaves little to complain about. + Feeding from medium-sized magazines, this full-sized service pistol is seen when + fighting is expected and not simply a possibility. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "pistol-map" + base_icon_state = "pistol" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + +/obj/item/gun/ballistic/nt_expedition/heavy_sidearm/revolver + name = "heavy revolver" + desc = "The XNP Mk.5 \"Roller\" revolver; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + Something of a pet project of one member of the XN design team, the “Roller” harkens back + to the revolvers of old, but chambered in the magnum 9x34mm cartridge. + Sporting a medium-capacity cylinder and an inline barrel design to reduce muzzle flip, + this weapon is seen in the hands of those who prefer style over functionality or want + the fine trigger control a triple-action revolver provides. + "} + "
" + load_method = SINGLE_CASING | SPEEDLOADER + icon_state = "revolver" + +/obj/item/gun/ballistic/nt_expedition/heavy_sidearm/smg + name = "submachine gun" + desc = "The XNMP Mk.8 \"Buzzsaw\" submachine gun; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + Taking design notes from the Mk.3 “Buzzer, the “Buzzsaw” sports a longer barrel, + a thicker receiver, and a folding stock typically seen on rifles. + Using the magnum 9x34mm round in long-form magazines, the “Buzzsaw”'s high rate of fire and + punchy ammunition makes its unique sound hard to mistake when seen clearing rooms or + in dense jungle foliage, where the high-velocity rounds batter aside light cover + with relative ease. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "smg-map" + base_icon_state = "smg" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_rifle.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_rifle.dm new file mode 100644 index 00000000000..2ae6325af48 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_rifle.dm @@ -0,0 +1,201 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition/light_rifle + caliber = "nt-light-rifle" + diameter = 7.5 + length = 39 + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition/light_rifle + name = "ammo casing (NT-7.5-SR)" + desc = "A standardized 7.5x39mm cartridge for NT Expeditionary kinetics. This one seems to be for lightweight automatics." + caliber = /datum/ammo_caliber/nt_expedition/light_rifle + projectile_type = /obj/projectile/bullet/nt_expedition/light_rifle + icon_state = "basic" + + /// specifically for /obj/item/ammo_magazine/nt_expedition/light_rifle's + var/speedloader_state = "basic" + +/obj/item/ammo_casing/nt_expedition/light_rifle/piercing + icon_state = "piercing" + speedloader_state = "piercing" + // todo: implement casing + magazine + +/obj/item/ammo_casing/nt_expedition/light_rifle/rubber + icon_state = "rubber" + speedloader_state = "rubber" + // todo: implement casing + magazine + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition/light_rifle + name = "ammo magazine (NT-7.5)" + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light-ammo.dmi' + icon_state = "magazine" + base_icon_state = "magazine" + rendering_system = GUN_RENDERING_DISABLED + ammo_caliber = /datum/ammo_caliber/nt_expedition/light_rifle + ammo_max = 5 + ammo_preload = /obj/item/ammo_casing/nt_expedition/light_rifle + +/obj/item/ammo_magazine/nt_expedition/light_rifle/speedloader + name = "speedloader (NT-7.5)" + icon_state = "speedloader" + base_icon_state = "speedloader" + +/obj/item/ammo_magazine/nt_expedition/light_rifle/speedloader/update_icon(updates) + cut_overlays() + . = ..() + var/list/overlays_to_add = list() + var/static/list/pos_x = list( + 2, + 4, + 6, + 1, + 2, + 4, + ) + var/static/list/pos_y = list( + -2, + -4, + -6, + -1, + -2, + -4 + ) + for(var/i in 1 to min(6, amount_remaining())) + var/obj/item/ammo_casing/nt_expedition/light_rifle/predicted_path = peek_path_of_position(i) + var/append = "basic" + if(ispath(predicted_path, /obj/item/ammo_casing/nt_expedition/light_rifle)) + append = initial(predicted_path.speedloader_state) + var/image/overlay = image(icon, "speedloader-[append]") + overlay.pixel_x = pos_x[i] + overlay.pixel_y = pos_y[i] + overlays_to_add += overlay + add_overlay(overlays_to_add) + +/obj/item/ammo_magazine/nt_expedition/light_rifle/stick + name = "ammo magazine (NT-7.5)" + icon_state = "rifle-1" + base_icon_state = "rifle" + rendering_system = GUN_RENDERING_STATES + rendering_count = 1 + rendering_static_overlay = "rifle-stripe" + ammo_max = 16 + +/obj/item/ammo_magazine/nt_expedition/light_rifle/stick/extended + name = "extended magazine (NT-7.5)" + icon_state = "rifle-ext-1" + base_icon_state = "rifle-ext" + rendering_system = GUN_RENDERING_STATES + rendering_count = 1 + rendering_static_overlay = "rifle-ext-stripe" + ammo_max = 24 + +/obj/item/ammo_magazine/nt_expedition/light_rifle/stick/drum + name = "drum magazine (NT-7.5)" + icon_state = "rifle-drum-1" + base_icon_state = "rifle-drum" + rendering_system = GUN_RENDERING_STATES + rendering_count = 1 + rendering_static_overlay = "rifle-drum-stripe" + ammo_max = 40 + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition/light_rifle + name = "rifle bullet" + damage_force = 35 + damage_tier = LERP(BULLET_TIER_MEDIUM, BULLET_TIER_HIGH, 0.5) + armor_penetration = 35 + +//* Light Rifles *// + +/obj/item/gun/ballistic/nt_expedition/light_rifle + abstract_type = /obj/item/gun/ballistic/nt_expedition/light_rifle + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light.dmi' + caliber = /datum/ammo_caliber/nt_expedition/light_rifle + +/obj/item/gun/ballistic/nt_expedition/light_rifle/pistol + name = "high-caliber pistol" + desc = "The XNP Mk.9 \"David\" revolver; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + An oddball of a revolver, the Mark 9 was made as little more than a proof of concept. + Chambering 7.5x39mm light rifle ammunition, the "David" sidearm is capable of consistently, + and accurately (for its uncanny size) punching above its paygrade. + Unfortunately, the downsides of using such a heavy caliber in a sidearm package limits its + practical use. This is nonetheless seen now and then in the hands of enthusiasts. + "} + "
" + load_method = SINGLE_CASING | SPEEDLOADER + icon_state = "revolver" + base_icon_state = "revolver" + render_break_overlay = BALLISTIC_RENDER_BREAK_OPEN + +/obj/item/gun/ballistic/nt_expedition/light_rifle/semirifle + name = "semi-automatic rifle" + desc = "The XNR Mk.4 \"Scout\" light rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + The basis of a new family of carbines developed to make use of 7.5x39mm ammunition, + the “Scout is a traditional pattern of semi-automatic rifle with a mid-length barrel and + adjustable stock, using a short stroke gas piston to cycle the action. + The basic design is fitted with a zero magnification optic and comes packaged with + relatively compact magazines. However, larger magazines will also work with this + workhorse of a weapon. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "semi-map" + base_icon_state = "semi" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + +/obj/item/gun/ballistic/nt_expedition/light_rifle/autorifle + name = "automatic rifle" + desc = "The XNR Mk.4 Mod.1 \"Auto Scout\" light rifle; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + The first modification of the Mk.4 carbine, the “Auto Scout” is the next logical step + of the platform by adding an automatic fire control group. Still using the same short-stroke + gas piston and featuring a compensator on the end to help control recoil, + this rifle still sports a zero-magnification optic and adds a short vertical grip as + standard to the forward handguard. Issued with larger magazines to make better use of + the automatic fire this weapon is capable of. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "auto-map" + base_icon_state = "auto" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + +/obj/item/gun/ballistic/nt_expedition/light_rifle/pdw + name = "personal defense weapon" + desc = "The XNR Mk.4 Mod.2 \"Little Scout\" personal defense weapon; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + Taking the concept of the original “Scout” and chopping the barrel, this weapon is lighter, + more handy, and easier to carry when you need something more than a pistol, + but a rifle would interfere with other duties. Sticking to the semi-automatic fire + control of the parent, but chopping the barrel and adding the compensator of the Mod.1, + this weapon's ability to fold away helps make it easy to package and + store inside cramped cockpits and into survival kits with its compact magazines. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "pdw-map" + base_icon_state = "pdw" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + +/obj/item/gun/ballistic/nt_expedition/light_rifle/lmg + name = "squad automatic weapon" + desc = "The XNR Mk.4 Mod.3 \"Machine Scout\" squad automatic weapon; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + The final entry of the “Scout” series, the “Machine Scout” makes use of a heavier barrel, + a recoil compensating gyro on the bottom of the handguard, + and the option to feed from larger box and drum magazines, this gives a heavy punch to + recon teams and security units while keeping a common set of parts + to reduce the complexities of servicing and maintaining the series as a whole. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "saw-map" + base_icon_state = "saw" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + render_bolt_overlay = BALLISTIC_RENDER_BOLT_CLOSE + render_break_overlay = BALLISTIC_RENDER_BREAK_BOTH diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_sidearm.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_sidearm.dm new file mode 100644 index 00000000000..b35e71848a3 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-light_sidearm.dm @@ -0,0 +1,135 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition/light_sidearm + caliber = "nt-light-sidearm" + diameter = 9 + length = 29 + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition/light_sidearm + name = "ammo casing (NT-9)" + desc = "A standardized 9mm cartridge for NT Expeditionary kinetics. This one seems to be for lightweight pistols and sidearms." + caliber = /datum/ammo_caliber/nt_expedition/light_sidearm + projectile_type = /obj/projectile/bullet/nt_expedition/light_sidearm + + /// specifically for /obj/item/ammo_magazine/nt_expedition/light_sidearm's + var/speedloader_state = "basic" + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition/light_sidearm + name = "ammo magazine (NT-9)" + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi' + icon_state = "magazine" + base_icon_state = "magazine" + rendering_system = GUN_RENDERING_DISABLED + ammo_caliber = /datum/ammo_caliber/nt_expedition/light_sidearm + ammo_max = 5 + ammo_preload = /obj/item/ammo_casing/nt_expedition/light_sidearm + +/obj/item/ammo_magazine/nt_expedition/light_sidearm/speedloader + icon_state = "speedloader" + base_icon_state = "speedloader" + ammo_max = 6 + +/obj/item/ammo_magazine/nt_expedition/light_sidearm/speedloader/update_icon(updates) + cut_overlays() + . = ..() + var/list/overlays_to_add = list() + // todo: make this look better, this is the lazy locations. + var/static/list/pos_x = list( + 0, + 1, + 2, + 3, + 4, + 5, + ) + var/static/list/pos_y = list( + -0, + -1, + -2, + -3, + -4, + -5, + ) + for(var/i in 1 to min(6, amount_remaining())) + var/obj/item/ammo_casing/nt_expedition/light_sidearm/predicted_path = peek_path_of_position(i) + var/append = "basic" + if(ispath(predicted_path, /obj/item/ammo_casing/nt_expedition/light_sidearm)) + append = initial(predicted_path.speedloader_state) + var/image/overlay = image(icon, "speedloader-[append]") + overlay.pixel_x = pos_x[i] + overlay.pixel_y = pos_y[i] + overlays_to_add += overlay + add_overlay(overlays_to_add) + +/obj/item/ammo_magazine/nt_expedition/light_sidearm/pistol + name = "pistol magazine (NT-9)" + icon_state = "pistol-5" + base_icon_state = "pistol" + rendering_system = GUN_RENDERING_STATES + rendering_count = 5 + rendering_static_overlay = "pistol-stripe" + ammo_max = 8 + +/obj/item/ammo_magazine/nt_expedition/light_sidearm/smg + icon_state = "smg-1" + base_icon_state = "smg" + rendering_system = GUN_RENDERING_STATES + rendering_count = 1 + rendering_static_overlay = "smg-stripe" + ammo_max = 24 + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition/light_sidearm + name = "bullet" + damage_force = 35 + damage_tier = LERP(BULLET_TIER_LOW, BULLET_TIER_MEDIUM, 0.25) + armor_penetration = 10 + +//* Light Sidearms *// + +/obj/item/gun/ballistic/nt_expedition/light_sidearm + abstract_type = /obj/item/gun/ballistic/nt_expedition/light_sidearm + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light.dmi' + caliber = /datum/ammo_caliber/nt_expedition/light_sidearm + +//* Pistol *// + +/obj/item/gun/ballistic/nt_expedition/light_sidearm/pistol + name = "light pistol" + desc = "The XNP Mk.1 \"Noisy Moth\" pistol; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A hold-out semiautomatic pistol designed to fit in the pocket and with an easy-to-use + system of controls, the “Noisy Moth” is chambered in a lengthened version of the classic 9mm, + packing a little more punch than traditional sidearms in this caliber. + A small compensator and internal recoil dampeners make the increase in felt recoil negligible, + while its magazine gives it enough ammunition for those in a pinch to take chance shots. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "pistol-map" + base_icon_state = "pistol" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC + +//* SMG *// + +/obj/item/gun/ballistic/nt_expedition/light_sidearm/smg + name = "machine pistol" + desc = "The XNMP Mk.3 \"Buzzer\" machine pistol; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A personal defense weapon with collapsing stock, the “Buzzer” is chambered in 9x29mm. + A short-barreled weapon easily hung on a belt, and feeding from medium-sized magazines to + keep it handy, the simple “Buzzer” does tend to make more sound and fury than an effective + combat weapon, but it will certainly raise the alarm when its shrill report sounds in + the dead of night. + "} + "
" + load_method = SINGLE_CASING | MAGAZINE + icon_state = "smg-map" + base_icon_state = "smg" + render_magazine_overlay = MAGAZINE_CLASS_GENERIC | MAGAZINE_CLASS_EXTENDED diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-shotgun.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-shotgun.dm new file mode 100644 index 00000000000..2c978f00598 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary-shotgun.dm @@ -0,0 +1,67 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +// todo: while this is all valid code, this file is commented out because the current weapon racking/pumping/chamber charging system is not good enough to support this. + +//* Ammo *// + +/obj/item/ammo_magazine/a12g/nt_expedition + icon = 'icons/content/factions/corporations/nanotrasen/items/gun/expeditionary/shotgun-ammo.dmi' + + #warn restrict to NT-expeditionary + +/obj/item/ammo_magazine/a12g/nt_expedition/slide + name = "XNS slide magazine (a12g)" + +/obj/item/ammo_magazine/a12g/nt_expedition/box + name = "XNS box magazine (12g)" + + #warn slide-mag 0 to 5, box-mag 0 to 1 + +//* Shotguns *// + +/obj/item/gun/ballistic/nt_expedition/shotgun + icon = 'icons/content/factions/corporations/nanotrasen/items/gun/expeditionary/shotgun.dmi' + caliber = /datum/ammo_caliber/a12g + +//* Pump Shotgun *// + +/** + * * Requires pumping. + * * Break action magazine load or single load. + */ +/obj/item/gun/ballistic/nt_expedition/shotgun/pump + name = "pump shotgun" + desc = "The XNS Mk.6 \"Standby\" pump-action shotgun; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A pump-action design based on the proven pump-action mechanism developed centuries ago, + the XNS Mk.6 or “Standby” is designed around a tube magazine using 12-gauge ammunition. + Rugged, if not fancy, this weapon is a good fallback option for anyone + requiring access to a long arm when out on their own or in small groups. + "} + "
" + icon_state = "pump" + #warn pump-open + +#warn impl + +//* Semi-Automatic Shotgun *// + +/** + * * Magazine loaded. + * * Semi-automatic. + */ +/obj/item/gun/ballistic/nt_expedition/shotgun/semiauto + name = "semi-automatic shotgun" + desc = "The XNS Mk.7 \"Peacemaker\" semi-automatic shotgun; a refined design output by the Nanotrasen Research Division in conjunction with Hephaestus Industries." + description_fluff = {" + A semiautomatic evolution of the XNS Mk.6, using an internal inertial locking system and + muzzle brake. Big, blocky, and using detachable box magazines of 12-gauge ammunition, + the barrel tends to get quite warm if fired without pause. A common sight seen with + specialist security personnel supporting work crews, the somewhat bulky weapon + lives up to its name in helping deter both hostile animals and bandits from + thinking they can make an easy score. + "} + "
" + icon_state = "semiauto" + #warn semiauto-empty (magout) + +#warn impl diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary.dm new file mode 100644 index 00000000000..2d523d40072 --- /dev/null +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_expeditionary.dm @@ -0,0 +1,51 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +//* Caliber *// + +/datum/ammo_caliber/nt_expedition + abstract_type = /datum/ammo_caliber/nt_expedition + +//* Ammo Casings *// + +/obj/item/ammo_casing/nt_expedition + description_fluff = {" + A casing for the experimental lineage of chemical-primed kinetic weaponry developed as part of a joint effort + between Hephaestus Industries and the Nanotrasen Research Division. Created both to enhance compatibility as well + as well as to improve security on installations operated by the Triumvirate, the 'NT Expeditionary' line boasts an + above-average reliability rating, as well as being easy to restock out on the Frontier. + "} + caliber = /datum/ammo_caliber/nt_expedition + +//* Magazines *// + +/obj/item/ammo_magazine/nt_expedition + description_fluff = {" + A casing for the experimental lineage of chemical-primed kinetic weaponry developed as part of a joint effort + between Hephaestus Industries and the Nanotrasen Research Division. Created both to enhance compatibility as well + as well as to improve security on installations operated by the Triumvirate, the 'NT Expeditionary' line boasts an + above-average reliability rating, as well as being easy to restock out on the Frontier. + "} + ammo_caliber = /datum/ammo_caliber/nt_expedition + +//* Projectiles *// + +/obj/projectile/bullet/nt_expedition + +//* Weapons *// + +/** + * Naming scheme: + * + * XN Mk. + * + * Where 'T' is type, and 'V' is some version. + * + * e.g. XNS Mk.6 -> T = S for shotgun, prototype 6. + */ +/obj/item/gun/ballistic/nt_expedition + description_fluff_categorizer = {" + This weapon is part of the experimental lineage of chemical-primed kinetic weaponry developed as part of a joint effort between Hephaestus Industries and the Nanotrasen Research Division. Created both to enhance compatibility as well as to improve security on installations operated by the Triumvirate, the 'NT Expeditionary' line boasts an above-average reliability rating + in addition to being rather simple to restock out on the Frontier. + "} + render_use_legacy_by_default = FALSE diff --git a/code/game/content/factions/corporations/nanotrasen/items/guns/pulse.dm b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dm similarity index 82% rename from code/game/content/factions/corporations/nanotrasen/items/guns/pulse.dm rename to code/game/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dm index 05e2ddf2848..94ce7205f12 100644 --- a/code/game/content/factions/corporations/nanotrasen/items/guns/pulse.dm +++ b/code/game/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dm @@ -1,31 +1,34 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// -/datum/firemode/energy/pulse_rifle +/datum/firemode/energy/nt_pulse/rifle -/datum/firemode/energy/pulse_rifle/laser +/datum/firemode/energy/nt_pulse/rifle/laser name = "laser" render_key = "kill" settings = list(mode_name = "lethal", projectile_type = /obj/projectile/beam, charge_cost = 80) -/datum/firemode/energy/pulse_rifle/pulse +/datum/firemode/energy/nt_pulse/rifle/pulse name = "pulse" render_key = "destroy" settings = list(mode_name = "destroy", projectile_type = /obj/projectile/beam/pulse, charge_cost = 180) -/datum/firemode/energy/pulse_carbine +/datum/firemode/energy/nt_pulse/carbine -/datum/firemode/energy/pulse_carbine/laser +/datum/firemode/energy/nt_pulse/carbine/laser name = "laser" render_key = "kill" settings = list(mode_name = "lethal", projectile_type = /obj/projectile/beam, charge_cost = 120) -/datum/firemode/energy/pulse_carbine/pulse +/datum/firemode/energy/nt_pulse/carbine/pulse name = "pulse" render_key = "destroy" settings = list(mode_name = "destroy", projectile_type = /obj/projectile/beam/pulse, charge_cost = 240) -/obj/item/gun/energy/pulse_rifle +/obj/item/gun/energy/nt_pulse + icon = 'icons/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dmi' + +/obj/item/gun/energy/nt_pulse/rifle name = "pulse rifle" desc = "A powerful energy rifle with multiple intensity selectors." // intentionally the same as all pulse weapons to save memory @@ -34,10 +37,9 @@ allowing for a more laminar and cohesive beam than prior thought possible. Closely guarded designs to this day, pulse weapons are some of the only energy-based armaments able to consistently outperform any kinetic alternative. "} - icon = 'icons/content/factions/corporations/nanotrasen/items/guns/pulse.dmi' icon_state = "rifle" base_icon_state = "rifle" - render_mob_base = "pulse" + base_mob_state = "pulse" slot_flags = SLOT_BACK // todo: firemode this one_handed_penalty = 10 @@ -47,8 +49,8 @@ fire_delay = 5 // might need to nerf this to 8 later, this is a very powerful weapon. firemodes = list( - /datum/firemode/energy/pulse_rifle/laser, - /datum/firemode/energy/pulse_rifle/pulse, + /datum/firemode/energy/nt_pulse/rifle/laser, + /datum/firemode/energy/nt_pulse/rifle/pulse, ) item_renderer = /datum/gun_item_renderer/segments{ @@ -64,7 +66,7 @@ empty_state = TRUE; } -/obj/item/gun/energy/pulse_carbine +/obj/item/gun/energy/nt_pulse/carbine name = "pulse carbine" desc = "A powerful energy carbine with multiple intensity selectors." // intentionally the same as all pulse weapons to save memory @@ -73,17 +75,16 @@ allowing for a more laminar and cohesive beam than prior thought possible. Closely guarded designs to this day, pulse weapons are some of the only energy-based armaments able to consistently outperform any kinetic alternative. "} - icon = 'icons/content/factions/corporations/nanotrasen/items/guns/pulse.dmi' icon_state = "carbine" base_icon_state = "carbine" - render_mob_base = "pulse" + base_mob_state = "pulse" slot_flags = SLOT_BELT // todo: firemode this fire_delay = 5 // might need to nerf this to 8 later, this is a very powerful weapon. firemodes = list( - /datum/firemode/energy/pulse_carbine/laser, - /datum/firemode/energy/pulse_carbine/pulse, + /datum/firemode/energy/nt_pulse/carbine/laser, + /datum/firemode/energy/nt_pulse/carbine/pulse, ) item_renderer = /datum/gun_item_renderer/segments{ diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm index c239008843c..654cf6551be 100644 --- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm +++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm @@ -1,8 +1,9 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// /datum/world_faction/corporation/nanotrasen name = "Nanotrasen" + abbreviation = "NT" id = "nanotrasen" desc = "Nanotrasen - one of the great Trans-Stellar Corporations from the 2300s. A logistics and prototyping giant whose \ claim to fame was the industrial synthesis of the Artificial Bluespace Crystal, they are one of the most prestigious \ diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm index a7b7800463e..0153cfa4a82 100644 --- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm +++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm @@ -1,5 +1,5 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2024 silicons *// +//* Copyright (c) 2024 Citadel Station Developers *// // todo: supply system /datum/supply_pack/nanotrasen diff --git a/code/game/machinery/_machinery_power.dm b/code/game/machinery/_machinery_power.dm index c3d0c8b4809..efc4cc9b56f 100644 --- a/code/game/machinery/_machinery_power.dm +++ b/code/game/machinery/_machinery_power.dm @@ -165,5 +165,7 @@ if(power_init_complete && use_power == USE_POWER_ACTIVE) // If this is the channel in use REPORT_POWER_CONSUMPTION_CHANGE(old_power, new_power_usage) + pass() // macro used immediately before being undefined; BYOND bug 2072419 + #undef REPORT_POWER_CONSUMPTION_CHANGE #undef POWER_CONSUMPTION diff --git a/code/game/machinery/colormate.dm b/code/game/machinery/colormate.dm index f27729550e8..725a1d8f763 100644 --- a/code/game/machinery/colormate.dm +++ b/code/game/machinery/colormate.dm @@ -299,6 +299,7 @@ COLORTEST("00FF00", cm) COLORTEST("0000FF", cm) COLORTEST("FFFFFF", cm) + pass() // macro used immediately before being undefined; BYOND bug 2072419 #undef COLORTEST if(passed < minimum_matrix_tests) temp = "Matrix is too dark. (passed [passed] out of [minimum_matrix_tests] required tests. Minimum lightness: [minimum_matrix_lightness])." diff --git a/code/game/machinery/holopad.dm b/code/game/machinery/holopad.dm index 7428f6a2b4a..ab12b2c4607 100644 --- a/code/game/machinery/holopad.dm +++ b/code/game/machinery/holopad.dm @@ -1299,6 +1299,8 @@ GLOBAL_VAR_INIT(holopad_connectivity_rebuild_queued, FALSE) color = HOLO_NORMAL_COLOR alpha = HOLO_NORMAL_ALPHA + pass() // macro used immediately before being undefined; BYOND bug 2072419 + #undef HOLO_NORMAL_COLOR #undef HOLO_VORE_COLOR #undef HOLO_NORMAL_ALPHA diff --git a/code/game/machinery/telecomms/blackbox.dm b/code/game/machinery/telecomms/blackbox.dm index 4c17bae3307..61e83517e4c 100644 --- a/code/game/machinery/telecomms/blackbox.dm +++ b/code/game/machinery/telecomms/blackbox.dm @@ -1,3 +1,5 @@ +// todo: we need a new feedback system + /datum/feedback_variable var/variable var/value diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 2e9fea68495..bbfa11ec62d 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -571,7 +571,7 @@ /obj/item/gun/energy/lasertag, /obj/item/gun/energy/netgun, /obj/item/gun/energy/phasegun/pistol, - /obj/item/gun/energy/pulse_carbine, + /obj/item/gun/energy/nt_pulse/carbine, /obj/item/gun/energy/retro, /obj/item/gun/energy/service, /obj/item/gun/energy/stunrevolver, diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index a7ec6ec77a9..5c059aacb9b 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -846,7 +846,7 @@ prob(3);/obj/item/gun/energy/lasercannon, prob(3);/obj/item/gun/ballistic/shotgun/pump/rifle/lever, prob(3);/obj/item/gun/ballistic/automatic/bullpup, - prob(2);/obj/item/gun/energy/pulse_rifle, + prob(2);/obj/item/gun/energy/nt_pulse/rifle, prob(2);/obj/item/gun/energy/gun/nuclear, prob(2);/obj/item/gun/ballistic/automatic/lmg, prob(2);/obj/item/gun/energy/gun/burst, diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ba9fde122e5..1a13ff02456 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1087,47 +1087,6 @@ var/datum/legacy_announcement/minor/admin_min_announcer = new new /obj/effect/plant(get_turf(usr), SSplants.seeds[seedtype]) log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])") -/datum/admins/proc/spawn_atom(var/object as text) - set category = "Debug" - set desc = "(atom path) Spawn an atom" - set name = "Spawn" - - if(!check_rights(R_SPAWN)) return - - if(!object) - var/choice = alert(src, "You haven't specified anything to match -- this will lock your game up and take a while! \ - It will also return the entire spawn list.", "WARNING!", "Cancel", "Continue") - if(choice == "Cancel") - return - - var/list/types = typesof(/atom) - var/list/matches = new() - - for(var/path in types) - if(findtext("[path]", object)) - CHECK_TICK - matches += path - - if(matches.len==0) - return - - var/chosen - if(matches.len==1) - chosen = matches[1] - else - chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches - if(!chosen) - return - if(ispath(chosen,/turf)) - var/turf/T = get_turf(usr.loc) - T.ChangeTurf(chosen) - else - new chosen(usr.loc) - - log_and_message_admins("spawned [chosen] at ([usr.x],[usr.y],[usr.z])") - feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - /datum/admins/proc/show_traitor_panel(var/mob/M in GLOB.mob_list) set category = "Admin" set desc = "Edit mobs's memory and role" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a131ef22fcc..1d9bb69cafb 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -150,7 +150,7 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_custom_item, /datum/admins/proc/check_custom_items, /datum/admins/proc/spawn_plant, - /datum/admins/proc/spawn_atom, // Allows us to spawn instances, + /client/proc/spawn_atom, // Allows us to spawn instances, /client/proc/respawn_character, /client/proc/spawn_character_mob, /client/proc/virus2_editor, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 1ad138f9fae..940978d0e11 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1655,7 +1655,7 @@ else if(!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob)) removed_paths += dirty_path continue - else if(ispath(path, /obj/item/gun/energy/pulse_rifle)) + else if(ispath(path, /obj/item/gun/energy/nt_pulse/rifle)) if(!check_rights(R_FUN,0)) removed_paths += dirty_path continue diff --git a/code/modules/admin/verbs/README.md b/code/modules/admin/verbs/README.md new file mode 100644 index 00000000000..7b8820e4c2f --- /dev/null +++ b/code/modules/admin/verbs/README.md @@ -0,0 +1,13 @@ +# Admin Verbs + +Admin verbs should only be made for absolute necessity. + +BYOND verbs are bad. Secrets panel entries, and verbs that open full panels are much more preferred. + +Verbs are justified for; + +- right click context menu needs (rejuvenate, select equipment, view variables) +- very common actions (delete, spawn) +- low-level debug backends (sdql, restart controller) + +If in doubt, it shouldn't be a verb. diff --git a/code/modules/admin/verbs/debug/spawn.dm b/code/modules/admin/verbs/debug/spawn.dm new file mode 100644 index 00000000000..e51312de7d8 --- /dev/null +++ b/code/modules/admin/verbs/debug/spawn.dm @@ -0,0 +1,50 @@ +/client/proc/spawn_atom(query as text) + set category = "Debug" + set desc = "(atom path) Spawn an atom" + set name = "Spawn" + + if(!check_rights(R_SPAWN)) + return + + if(length(query) < 5) + var/confirm = alert( + src, + "You haven't specified a long enough filter; this will take a while. Are you sure?", + "Mass Query Confirmation", + "No", + "Yes" + ) + if(confirm != "Yes") + return + + var/list/matches = list() + for(var/path in typesof(/atom)) + if(findtext("[path]", query)) + matches += path + CHECK_TICK + + if(!length(matches)) + to_chat(src, SPAN_WARNING("Type query for '[query]' returned nothing.")) + return + + // todo: special prefix handling like # / ! / similar for fast-pathing? + var/path_to_spawn + if(length(matches) == 1) + path_to_spawn = matches[1] + else + var/list/processed_types = make_types_fancy(matches) + var/picked_name = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in processed_types + if(!picked_name) + return + path_to_spawn = processed_types[picked_name] + + if(!path_to_spawn) + return + + if(ispath(path_to_spawn, /turf)) + var/turf/T = get_turf(mob) + T.ChangeTurf(path_to_spawn) + else + new path_to_spawn(mob.loc) + + log_and_message_admins("spawned [path_to_spawn] at ([usr.x],[usr.y],[usr.z])") diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index 870815cdae8..95610c0cd7e 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -161,7 +161,7 @@ prob(6);/obj/item/gun/ballistic/automatic/lmg,\ prob(6);/obj/item/gun/energy/lasercannon,\ prob(5);/obj/item/gun/ballistic/automatic/bullpup,\ - prob(5);/obj/item/gun/energy/pulse_rifle,\ + prob(5);/obj/item/gun/energy/nt_pulse/rifle,\ /* prob(4);/obj/item/gun/ballistic/automatic/battlerifle,\ */ prob(3);/obj/item/gun/ballistic/deagle/camo,\ prob(3);/obj/item/gun/energy/gun/nuclear,\ diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index 1b85b08014f..72868544f8b 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -9,7 +9,24 @@ /atom/ var/description_info = null //Helpful blue text. - var/description_fluff = null //Green text about the atom's fluff, if any exists. + + /** + * Lore fluff. + * + * todo: rename this maybe, rework examines + * + * * "This snowflake weapon made for my Mary Sue was made by the Nanotrasen Department of Deniable Operations and fires 75x400mm artillery shells out of the barrel with the power of bluespace." + */ + var/description_fluff + /** + * Lore fluff, part 2. + * + * todo: rename this maybe, rework examines + * + * * This is appended at the end of [description_fluff]. Useful for things like "this is part of a group of similar blah blah blah's". + */ + var/description_fluff_categorizer + var/description_antag = null //Malicious red text, for the antags. //Override these if you need special behaviour for a specific type. @@ -19,9 +36,13 @@ return /atom/proc/get_description_fluff() - if(description_fluff) - return description_fluff - return + . = description_fluff + if(description_fluff_categorizer) + if(.) + . += "
" + . += description_fluff_categorizer + else + . = description_fluff_categorizer /atom/proc/get_description_antag() if(description_antag) diff --git a/code/modules/jobs/job_types/station/admin/centcom_officer.dm b/code/modules/jobs/job_types/station/admin/centcom_officer.dm index 188a9bdbd35..77a6e64ec02 100644 --- a/code/modules/jobs/job_types/station/admin/centcom_officer.dm +++ b/code/modules/jobs/job_types/station/admin/centcom_officer.dm @@ -34,6 +34,6 @@ uniform = /obj/item/clothing/under/rank/centcom l_ear = /obj/item/radio/headset/centcom shoes = /obj/item/clothing/shoes/laceup - belt = /obj/item/gun/energy/pulse_carbine + belt = /obj/item/gun/energy/nt_pulse/carbine gloves = /obj/item/clothing/gloves/white head = /obj/item/clothing/head/beret/centcom/officer diff --git a/code/modules/jobs/job_types/station/admin/emergency_responder.dm b/code/modules/jobs/job_types/station/admin/emergency_responder.dm index c3cb7e03bd1..934fdd4e448 100644 --- a/code/modules/jobs/job_types/station/admin/emergency_responder.dm +++ b/code/modules/jobs/job_types/station/admin/emergency_responder.dm @@ -36,7 +36,7 @@ glasses = /obj/item/clothing/glasses/sunglasses back = /obj/item/storage/backpack/satchel - belt = /obj/item/gun/energy/pulse_carbine + belt = /obj/item/gun/energy/nt_pulse/carbine flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL /datum/outfit/job/station/emergency_responder/post_equip(var/mob/living/carbon/human/H) diff --git a/code/modules/mapping/map_level.dm b/code/modules/mapping/map_level.dm index 9c8436799c1..13f5cac5c0b 100644 --- a/code/modules/mapping/map_level.dm +++ b/code/modules/mapping/map_level.dm @@ -337,6 +337,8 @@ return RESOLVE(link_above) if(DOWN) return RESOLVE(link_below) + else + pass() // macro used immediately before being undefined; BYOND bug 2072419 #undef RESOLVE /** diff --git a/code/modules/projectiles/ammunition/ammo_casing.dm b/code/modules/projectiles/ammunition/ammo_casing.dm index 05876988e72..2504a9d0503 100644 --- a/code/modules/projectiles/ammunition/ammo_casing.dm +++ b/code/modules/projectiles/ammunition/ammo_casing.dm @@ -148,6 +148,15 @@ RETURN_TYPE(/datum/ammo_caliber) return resolve_caliber(caliber) +//* Render *// + +/** + * makes us look messier, basically + */ +/obj/item/ammo_casing/proc/randomize_offsets_after_eject() + pixel_x = rand(-8, 8) + pixel_y = rand(-8, 8) + //* Generic - Spent Subtype *// /obj/item/ammo_casing/spent diff --git a/code/modules/projectiles/ammunition/ammo_magazine.dm b/code/modules/projectiles/ammunition/ammo_magazine.dm index 9157726edaa..4b6b15da13c 100644 --- a/code/modules/projectiles/ammunition/ammo_magazine.dm +++ b/code/modules/projectiles/ammunition/ammo_magazine.dm @@ -28,6 +28,11 @@ /// /// * this is a bitfield var/magazine_type = MAGAZINE_TYPE_NORMAL + /// the class we ask the gun to render us as + /// + /// * uses MAGAZINE_CLASS_* flags + /// * if our requested class isn't on a gun, the gun reserves the right to render us as the default class ('-mag') + var/magazine_class = MAGAZINE_CLASS_GENERIC //* for magazines /// magazine type - must match gun's to be fitted into it, if gun's is @@ -56,7 +61,7 @@ /// sound for loading a piece of ammo var/load_sound = 'sound/weapons/flipblade.ogg' - //* ammo storage *// + //* Ammo *// /// max ammo in us var/ammo_max = 7 /// currently stored ammo; defaults to ammo_max if unset @@ -76,25 +81,30 @@ /// index 1 is the bottom, index ammo_internal.len is the top of the magazine. /// peek/draw will peek/draw the last index first all the way to the first, and after that, /// ammo_current is considered the 'reserve' pool (as just a number). - var/list/ammo_internal + var/list/obj/item/ammo_casing/ammo_internal /// caliber - set to typepath to init var/ammo_caliber /// preloaded ammo type var/ammo_preload - /// if set, only loads ammo of this type - var/ammo_type + /// if set, only loads ammo matching this restrict value + /// + /// * ammo by default has their typepath as the restrict value + /// * ammo can set strings / enums to this too; make sure to #define them. + var/ammo_restrict /// if set, doesn't allow subtypes - var/ammo_picky = FALSE + var/ammo_restrict_no_subtypes = FALSE /// init all contents on initialize instead of lazy-drawing /// /// * used for things like microbatteries / legacy content var/ammo_legacy_init_everything = FALSE - //* Rendering + //* Rendering *// /// use default rendering system /// in state mode, we will be "[base_icon_state]-[count]", from 0 to count (0 for empty) - /// in segements mode, we will repeatedly add "[base_icon_state]-ammo" with given offsets. - /// overlay mode is not supported + /// in segments mode, we will repeatedly add "[base_icon_state]-ammo" with given offsets. + /// + /// * overlays moade is not supported; + /// todo: in overlays mode, we should be "[base_icon_state]-[count]" from 0 to count, overlaid, while we have ammo var/rendering_system = GUN_RENDERING_DISABLED /// number of states var/rendering_count = 0 @@ -110,9 +120,11 @@ var/rendering_segment_y_offset = 0 /// display special "[base_icon_state]-empty" if count == 0 var/rendering_segment_use_empty = FALSE - /// add a specific overlay as "[base_icon_state]-[state]", useful for denoting different magazines + /// add a specific overlay, useful for denoting different magazines /// that look similar with a stripe var/rendering_static_overlay + /// color the static overlay this way + var/rendering_static_overlay_color /obj/item/ammo_magazine/Initialize(mapload) . = ..() @@ -121,7 +133,10 @@ pixel_y = rand(-5, 5) if(!isnull(rendering_static_overlay)) - add_overlay(rendering_static_overlay, TRUE) + var/image/static_overlay = image(icon, rendering_static_overlay) + if(rendering_static_overlay_color) + static_overlay.color = rendering_static_overlay_color + add_overlay(static_overlay, TRUE) if(ammo_legacy_init_everything) instantiate_internal_list() @@ -132,17 +147,17 @@ /obj/item/ammo_magazine/get_containing_worth(flags) . = ..() - var/obj/item/ammo_casing/ammo_casted = ammo_type + var/obj/item/ammo_casing/ammo_casted = ammo_restrict . += (isnull(ammo_current)? ammo_max : ammo_current) * initial(ammo_casted.worth_intrinsic) /obj/item/ammo_magazine/detect_material_base_costs() . = ..() - if(isnull(ammo_type)) + if(isnull(ammo_restrict)) return var/shell_amount = isnull(ammo_current)? ammo_max : ammo_current if(!shell_amount) return - var/obj/item/ammo_casing/casing = new ammo_type + var/obj/item/ammo_casing/casing = new ammo_restrict if(!istype(casing)) qdel(casing) return @@ -214,7 +229,7 @@ /obj/item/ammo_magazine/proc/why_cant_load_casing(obj/item/ammo_casing/casing) if(!loads_caliber(casing.caliber)) return "mismatched caliber" - if(ammo_type && (ammo_picky ? casing.type != ammo_type : !istype(casing, ammo_type))) + if(ammo_restrict && (ammo_restrict_no_subtypes ? casing.type != ammo_restrict : !istype(casing, ammo_restrict))) return "mismatched ammo" /obj/item/ammo_magazine/on_attack_self(datum/event_args/actor/e_args) @@ -430,6 +445,18 @@ /obj/item/ammo_magazine/proc/amount_missing(live_only) return ammo_max - amount_remaining(live_only) +/** + * Gets the predicted typepath of a casing a given index from the top, where 1 is the top. + * + * * Real casings are read. + * * Fake casings are predicted from the type that would have been lazy-generated. + * * Null if something isn't there / left + */ +/obj/item/ammo_magazine/proc/peek_path_of_position(index) + if(index > length(ammo_internal)) + return (index - length(ammo_internal)) >= ammo_current ? ammo_preload : null + return ammo_internal[length(ammo_internal) - index]?.type + //* Caliber *// /obj/item/ammo_magazine/proc/loads_caliber(datum/ammo_caliber/caliberlike) diff --git a/code/modules/projectiles/ammunition/calibers/normal/a12g.dm b/code/modules/projectiles/ammunition/calibers/normal/a12g.dm index beee4fb9faa..6abe19b937c 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a12g.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a12g.dm @@ -201,8 +201,6 @@ ammo_max = 2 rendering_system = GUN_RENDERING_STATES rendering_count = 2 - ammo_picky = TRUE - ammo_type = /obj/item/ammo_casing/a12g magazine_type = MAGAZINE_TYPE_CLIP /obj/item/ammo_magazine/a12g/clip/pellet @@ -211,7 +209,6 @@ base_icon_state = "a12-buck" desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot." ammo_preload = /obj/item/ammo_casing/a12g/pellet - ammo_type = /obj/item/ammo_casing/a12g/pellet /obj/item/ammo_magazine/a12g/clip/beanbag name = "ammo clip (12g beanbag)" @@ -219,7 +216,6 @@ base_icon_state = "a12-bean" desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags." ammo_preload = /obj/item/ammo_casing/a12g/beanbag - ammo_type = /obj/item/ammo_casing/a12g/beanbag /obj/item/ammo_magazine/a12g/clip/silver name = "ammo clip (12g buckshot)" @@ -227,7 +223,6 @@ base_icon_state = "a12-silver" desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with silver buckshot." ammo_preload = /obj/item/ammo_casing/a12g/silver - ammo_type = /obj/item/ammo_casing/a12g/silver //* Magazines - Pouches @@ -262,28 +257,23 @@ name = "shotgun slug holder (slug)" marking_color = PIPE_COLOR_BLACK ammo_preload = /obj/item/ammo_casing/a12g - ammo_type = /obj/item/ammo_casing/a12g /obj/item/ammo_magazine/a12g/pouch/full/flare name = "shotgun slug holder (flare)" marking_color = COLOR_RED_GRAY ammo_preload = /obj/item/ammo_casing/a12g/flare - ammo_type = /obj/item/ammo_casing/a12g/flare /obj/item/ammo_magazine/a12g/pouch/full/buckshot name = "shotgun slug holder (buckshot)" marking_color = COLOR_RED ammo_preload = /obj/item/ammo_casing/a12g/pellet - ammo_type = /obj/item/ammo_casing/a12g/pellet /obj/item/ammo_magazine/a12g/pouch/full/beanbag name = "shotgun slug holder (beanbag)" marking_color = COLOR_GREEN ammo_preload = /obj/item/ammo_casing/a12g/beanbag - ammo_type = /obj/item/ammo_casing/a12g/beanbag /obj/item/ammo_magazine/a12g/pouch/full/stun name = "shotgun slug holder (stun)" marking_color = PIPE_COLOR_YELLOW ammo_preload = /obj/item/ammo_casing/a12g/stunshell - ammo_type = /obj/item/ammo_casing/a12g/stunshell diff --git a/code/modules/projectiles/ammunition/calibers/normal/a357.dm b/code/modules/projectiles/ammunition/calibers/normal/a357.dm index 220bee919dc..d5d28f7e651 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a357.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a357.dm @@ -49,7 +49,6 @@ base_icon_state = "normal" ammo_caliber = /datum/ammo_caliber/a357 ammo_preload = /obj/item/ammo_casing/a357 - ammo_type = /obj/item/ammo_casing/a357 magazine_type = MAGAZINE_TYPE_SPEEDLOADER ammo_max = 6 materials_base = list(MAT_STEEL = 500) @@ -59,7 +58,6 @@ icon_state = "holy-6" base_icon_state = "holy" ammo_preload = /obj/item/ammo_casing/a357/silver - ammo_type = /obj/item/ammo_casing/a357/silver /obj/item/ammo_magazine/a357/speedloader/stun name = "speedloader (.357 stun)" @@ -67,7 +65,6 @@ icon_state = "redtip-6" base_icon_state = "redtip" ammo_preload = /obj/item/ammo_casing/a357/stun - ammo_type = /obj/item/ammo_casing/a357/stun /obj/item/ammo_magazine/a357/speedloader/rubber name = "speedloader (.357 rubber)" @@ -75,7 +72,6 @@ icon_state = "bluetip-6" base_icon_state = "bluetip" ammo_preload = /obj/item/ammo_casing/a357/rubber - ammo_type = /obj/item/ammo_casing/a357/rubber /obj/item/ammo_magazine/a357/speedloader/flash name = "speedloader (.357 flash)" @@ -83,4 +79,3 @@ icon_state = "white-6" base_icon_state = "white" ammo_preload = /obj/item/ammo_casing/a357/flash - ammo_type = /obj/item/ammo_casing/a357/flash diff --git a/code/modules/projectiles/ammunition/calibers/normal/a44.dm b/code/modules/projectiles/ammunition/calibers/normal/a44.dm index d39ac8c73fa..f5e67cb5204 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a44.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a44.dm @@ -46,7 +46,7 @@ /obj/item/ammo_magazine/a44/rubber desc = "A magazine for .44 less-than-lethal ammo." - ammo_type = /obj/item/ammo_casing/a44/rubber + ammo_preload = /obj/item/ammo_casing/a44/rubber /obj/item/ammo_magazine/a44/clip name = "ammo clip (.44)" diff --git a/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm index ad7e3d66914..035935c2c86 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a5_7mm.dm @@ -47,17 +47,17 @@ /obj/item/ammo_magazine/a5_7mm/nt_les/ap name = "magazine (5.7x28mm armor piercing)" - rendering_static_overlay = "ap" + rendering_static_overlay = "ntles-ap" ammo_preload = /obj/item/ammo_casing/a5_7mm/ap /obj/item/ammo_magazine/a5_7mm/nt_les/hp name = "magazine (5.7x28mm hollow-point)" - rendering_static_overlay = "hp" + rendering_static_overlay = "ntles-hp" ammo_preload = /obj/item/ammo_casing/a5_7mm/hp /obj/item/ammo_magazine/a5_7mm/nt_les/hunter name = "magazine (5.7x28mm hunter)" - rendering_static_overlay = "hunter" + rendering_static_overlay = "ntles-hunter" ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter /obj/item/ammo_magazine/a5_7mm/nt_les/empty @@ -71,16 +71,16 @@ /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/ap name = "high capacity magazine (5.7x28mm armor piercing)" - rendering_static_overlay = "ap" + rendering_static_overlay = "ntles-high-ap" ammo_preload = /obj/item/ammo_casing/a5_7mm/ap /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hp name = "high capacity magazine (5.7x28mm hollow-point)" - rendering_static_overlay = "hp" + rendering_static_overlay = "ntles-high-hp" ammo_preload = /obj/item/ammo_casing/a5_7mm/hp /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/hunter name = "high capacity magazine (5.7x28mm hunter)" - rendering_static_overlay = "hunter" + rendering_static_overlay = "ntles-high-hunter" ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter /obj/item/ammo_magazine/a5_7mm/nt_les/highcap/empty @@ -99,7 +99,7 @@ /obj/item/ammo_magazine/a5_7mm/harpy_smg/ap name = "NT-SMG-8 magazine (5.7x28mm armor piercing)" - rendering_static_overlay = "ap" + rendering_static_overlay = "harpy-ap" ammo_preload = /obj/item/ammo_casing/a5_7mm/ap //Fiveseven mags @@ -118,17 +118,17 @@ /obj/item/ammo_magazine/a5_7mm/five_seven/ap name = "magazine (5.7x28mm armor piercing)" - rendering_static_overlay = "ap" + rendering_static_overlay = "fiveseven-ap" ammo_preload = /obj/item/ammo_casing/a5_7mm/ap /obj/item/ammo_magazine/a5_7mm/five_seven/hp name = "magazine (5.7x28mm hollow-point)" - rendering_static_overlay = "hp" + rendering_static_overlay = "fiveseven-hp" ammo_preload = /obj/item/ammo_casing/a5_7mm/hp /obj/item/ammo_magazine/a5_7mm/five_seven/hunter name = "magazine (5.7x28mm hunter)" - rendering_static_overlay = "hunter" + rendering_static_overlay = "fiveseven-hunter" ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter /obj/item/ammo_magazine/a5_7mm/five_seven/empty @@ -143,16 +143,16 @@ /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/ap name = "high capacity magazine (5.7x28mm armor piercing)" - rendering_static_overlay = "ap" + rendering_static_overlay = "fiveseven-high-ap" ammo_preload = /obj/item/ammo_casing/a5_7mm/ap /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hp name = "high capacity magazine (5.7x28mm hollow-point)" - rendering_static_overlay = "hp" + rendering_static_overlay = "fiveseven-high-hp" ammo_preload = /obj/item/ammo_casing/a5_7mm/hp /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/hunter name = "high capacity magazine (5.7x28mm hunter)" - rendering_static_overlay = "hunter" + rendering_static_overlay = "fiveseven-high-hunter" ammo_preload = /obj/item/ammo_casing/a5_7mm/hunter /obj/item/ammo_magazine/a5_7mm/five_seven/highcap/empty diff --git a/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm index cea1f86a8c8..b51c935c13b 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a5mm.dm @@ -8,7 +8,7 @@ name = "prototype rifle magazine (5mm caseless)" icon_state = "caseless-mag-0" base_icon_state = "caseless-mag" - ammo_type = /obj/item/ammo_casing/a5mmcaseless + ammo_preload = /obj/item/ammo_casing/a5mmcaseless ammo_caliber = /datum/ammo_caliber/a5mm ammo_max = 30 rendering_system = GUN_RENDERING_STATES @@ -17,7 +17,7 @@ /obj/item/ammo_magazine/m5mmcaseless/stun icon_state = "caseless-mag-alt-0" base_icon_state = "caseless-mag-alt" - ammo_type = /obj/item/ammo_casing/a5mmcaseless/stun + ammo_preload = /obj/item/ammo_casing/a5mmcaseless/stun //* Ammunition *// diff --git a/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm b/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm index 5852f37ff6e..eac3c579cbe 100644 --- a/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm +++ b/code/modules/projectiles/ammunition/calibers/normal/a7_92mm.dm @@ -8,7 +8,7 @@ icon_state = "stg" ammo_caliber = /datum/ammo_caliber/a7_92mm - ammo_type = /obj/item/ammo_casing/a792 + ammo_preload = /obj/item/ammo_casing/a792 ammo_max = 30 /obj/item/ammo_magazine/a7_92mm/empty diff --git a/code/modules/projectiles/ammunition/calibers/special/pellet.dm b/code/modules/projectiles/ammunition/calibers/special/pellet.dm index 56c074bbcf9..b0e3df75fc8 100644 --- a/code/modules/projectiles/ammunition/calibers/special/pellet.dm +++ b/code/modules/projectiles/ammunition/calibers/special/pellet.dm @@ -28,7 +28,7 @@ rendering_count = 1 ammo_caliber = /datum/ammo_caliber/pellet - ammo_type = /obj/item/ammo_casing/p_pellet + ammo_preload = /obj/item/ammo_casing/p_pellet magazine_type = MAGAZINE_TYPE_BOX materials_base = list( /datum/material/steel::id = 100, diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6d865d55804..ed75a96ada7 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -130,7 +130,11 @@ var/unstable = 0 var/destroyed = 0 - //* Rendering + //* Rendering *// + + /// Used instead of base_icon_state for the mob renderer, if this exists. + var/base_mob_state + /// renderer datum we use for world rendering of the gun item itself /// set this in prototype to a path /// if null, we will not perform default rendering/updating of item states. @@ -149,25 +153,26 @@ var/datum/gun_mob_renderer/mob_renderer /// for de-duping var/static/list/mob_renderer_store = list() - /// base onmob state override so we don't use [base_icon_state] if overridden - // todo: impl - var/render_mob_base - /// render as -wield if we're wielded? applied at the end of our worn state no matter what + + /// render as -wield if we're wielded? applied at the end of our base worn state no matter what + /// + /// todo: impl /// /// * ignores [mob_renderer] /// * ignores [render_additional_exclusive] / [render_additional_worn] - // todo: impl + /// * ordering: [base]-wield-[additional]-[...rest] var/render_mob_wielded = FALSE /// state to add as an append /// /// * segment and overlay renders add [base_icon_state]-[append] - /// * state renders set state to [base_icon_state]-[append]-[...rest] + /// * state renders set state to [base_icon_state]-[wield?]-[append]-[...rest] var/render_additional_state /// only render [render_additional_state] var/render_additional_exclusive = FALSE /// [render_additional_state] and [render_additional_exclusive] apply to worn sprites // todo: impl var/render_additional_worn = FALSE + /// use the old render system, if item_renderer and mob_renderer are not set // todo: remove var/render_use_legacy_by_default = TRUE @@ -879,6 +884,8 @@ // PENDING FIREMODE REWORK /obj/item/gun/proc/legacy_get_firemode() + if(!length(firemodes) || (sel_mode > length(firemodes))) + return return firemodes[sel_mode] //* Ammo *// @@ -896,7 +903,8 @@ //* Rendering *// /obj/item/gun/update_icon(updates) - if(!item_renderer && !mob_renderer) + // todo: shouldn't need this check, deal with legacy + if(!item_renderer && !mob_renderer && render_use_legacy_by_default) return ..() cut_overlays() var/ratio_left = get_ammo_ratio() diff --git a/code/modules/projectiles/gun_item_renderer.dm b/code/modules/projectiles/gun_item_renderer.dm index d7b57cc5415..a2cd3a4715f 100644 --- a/code/modules/projectiles/gun_item_renderer.dm +++ b/code/modules/projectiles/gun_item_renderer.dm @@ -60,7 +60,7 @@ return var/x = initial_x var/y = initial_y - var/append = "[use_firemode && firemode_key && "-[firemode_key]"]" + var/append = "[use_firemode && firemode_key ? "-[firemode_key]" : ""]" for(var/i in 1 to ceil(count * ammo_ratio)) var/image/creating = image(gun.icon, "[base_icon_state][append]-ammo", null, null, x, y) x += offset_x @@ -132,7 +132,7 @@ return if(!ammo_ratio) if(use_empty) - gun.icon_state = "[base_icon_state][firemode_key && use_firemode_empty && "-[firemode_key]"]-empty" + gun.icon_state = "[base_icon_state][firemode_key && use_firemode_empty ? "-[firemode_key]" : ""]-empty" else gun.icon_state = base_icon_state return @@ -146,3 +146,17 @@ */ /datum/gun_item_renderer/states/all_or_nothing count = 1 + +/** + * just swaps icon state to "-empty" + * + * * can optionally append a firemode key + */ +/datum/gun_item_renderer/empty_state + +/datum/gun_item_renderer/empty_state/render(obj/item/gun/gun, ammo_ratio, firemode_key) + var/base_icon_state = gun.base_icon_state || initial(gun.icon_state) + gun.icon_state = "[base_icon_state][firemode_key && use_firemode ? "-[firemode_key]" : ""][ammo_ratio ? "" : "-empty"]" + +/datum/gun_item_renderer/empty_state/dedupe_key() + return "empty_state-[use_firemode]" diff --git a/code/modules/projectiles/gun_mob_renderer.dm b/code/modules/projectiles/gun_mob_renderer.dm index 5bbce3dc96b..cbcba9de9b6 100644 --- a/code/modules/projectiles/gun_mob_renderer.dm +++ b/code/modules/projectiles/gun_mob_renderer.dm @@ -43,7 +43,7 @@ /datum/gun_mob_renderer/states/render(obj/item/gun/gun, ammo_ratio, firemode_key) // todo: do we really need to always return TRUE and force an update? - var/base_icon_state = gun.render_mob_base || gun.base_icon_state || initial(gun.icon_state) + var/base_icon_state = gun.base_mob_state || gun.base_icon_state || initial(gun.icon_state) if(!ammo_ratio) if(empty_state) gun.inhand_state = "[base_icon_state][firemode_key && use_firemode && "-[firemode_key]"]-empty" diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 9fc3cd85399..8ba4989426f 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -17,6 +17,32 @@ /// If set, accepts ammo and magazines of this caliber. var/caliber = /datum/ammo_caliber/a357 + //* Rendering *// + + /// Render an overlay when magazine is in. + /// + /// todo: mob renderer integration + /// + /// * This uses MAGAZINE_CLASS_* defines + /// * We'll look for a matching class that we support to render + /// * If we can't find one, we'll use any class that we have on ourselves + var/render_magazine_overlay = NONE + /// Render the chamber state. + /// + /// todo: mob renderer integration + /// todo: this is not supported yet + /// + /// * uses BALLISTIC_RENDER_BOLT_* enms + var/render_bolt_overlay = BALLISTIC_RENDER_BOLT_NEVER + /// Render the state of a gun that's 'break action' + /// + /// todo: mob renderer integration + /// todo: this is not supported yet + /// + /// * uses BALLISTIC_RENDER_BREAK_* enums + /// * This is also used for LMGs, and any other gun requiring this stuff. + var/render_break_overlay = BALLISTIC_RENDER_BREAK_NEVER + //! LEGACY BELOW var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled @@ -111,7 +137,8 @@ qdel(chambered) return else - chambered.loc = get_turf(src) + chambered.forceMove(get_turf(src)) + chambered.randomize_offsets_after_eject() playsound(src.loc, "casing", 50, 1) if(CYCLE_CASINGS) //cycle the casing back to the end. if(ammo_magazine) @@ -366,3 +393,30 @@ var/datum/ammo_caliber/ours = resolve_caliber(caliber) var/datum/ammo_caliber/theirs = resolve_caliber(caliberlike) return ours.equivalent(theirs) + +//* Rendering *// + +/** + * Returns an overlay for a magazine. This can be a string, or anything else that goes into our 'overlays' list. + */ +/obj/item/gun/ballistic/proc/get_magazine_overlay_for(obj/item/ammo_magazine/magazine) + var/effective_magazine_class = magazine.magazine_class + if(!(effective_magazine_class & render_magazine_overlay)) + if(render_magazine_overlay & MAGAZINE_CLASS_GENERIC) + effective_magazine_class = MAGAZINE_CLASS_GENERIC + else + return + return global.magazine_class_bit_to_state[log(2, magazine.magazine_class) + 1] + +/obj/item/gun/ballistic/update_icon() + // todo: shouldn't need this check, deal with legacy + if(!item_renderer && !mob_renderer && render_use_legacy_by_default) + return ..() + . = ..() + // todo: render_break_overlay + // todo: render_bolt_overlay + if(render_magazine_overlay) + if(ammo_magazine) + var/overlay = get_magazine_overlay_for(ammo_magazine) + if(overlay) + add_overlay(overlay) diff --git a/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm b/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm index e0c51d4bf7d..83030d8233f 100644 --- a/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm +++ b/code/modules/projectiles/guns/ballistic/microbattery/medigun.dm @@ -26,7 +26,7 @@ desc = "A nanite fabrication magazine for the \'AML'" catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med) description_info = "This magazine holds self-charging nanite fabricators to power the AML 'Medigun'. Up to three can be loaded at once, and each provides four shots of their respective healing type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." - ammo_type = /obj/item/ammo_casing/microbattery/medical + ammo_restrict = /obj/item/ammo_casing/microbattery/medical icon_state = "ml3m_mag" origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3) diff --git a/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm index dbcb829cd3c..b7b7cf9b27c 100644 --- a/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm +++ b/code/modules/projectiles/guns/ballistic/microbattery/microbattery-magazine.dm @@ -7,7 +7,6 @@ icon_state = "cell_mag" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3) ammo_caliber = /datum/ammo_caliber/microbattery - ammo_type = /obj/item/ammo_casing/microbattery ammo_max = 3 ammo_current = 0 ammo_legacy_init_everything = TRUE diff --git a/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm b/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm index 7ecdbf4d0f7..de5e78196b5 100644 --- a/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/microbattery/revolver.dm @@ -31,7 +31,7 @@ x_offset = 4 catalogue_data = null//list(/datum/category_item/catalogue/information/organization/nanotrasen) description_info = "This magazine holds Hydra microbatteries to power the Hydra handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." - ammo_type = /obj/item/ammo_casing/microbattery/combat + ammo_restrict = /obj/item/ammo_casing/microbattery/combat /obj/item/ammo_magazine/microbattery/combat/prototype name = "prototype microbattery magazine" diff --git a/icons/content/factions/corporations/hephaestus/items/guns/protomag/srp.dmi b/icons/content/factions/corporations/hephaestus/items/guns/protomag/srp.dmi new file mode 100644 index 00000000000..3e7ef886941 Binary files /dev/null and b/icons/content/factions/corporations/hephaestus/items/guns/protomag/srp.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial-ammo.dmi new file mode 100644 index 00000000000..9869cd2a52e Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial.dmi new file mode 100644 index 00000000000..b5ffd3b25da Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/antimaterial.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi new file mode 100644 index 00000000000..24d41475107 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy.dmi new file mode 100644 index 00000000000..a5098c56094 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-heavy.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light-ammo.dmi new file mode 100644 index 00000000000..9394a91116b Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light.dmi new file mode 100644 index 00000000000..78eb4491263 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/rifle-light.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun-ammo.dmi new file mode 100644 index 00000000000..b92a4ffde96 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun.dmi new file mode 100644 index 00000000000..96e46a7f918 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/shotgun.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy-ammo.dmi new file mode 100644 index 00000000000..17da04c0fd7 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy.dmi new file mode 100644 index 00000000000..3a33ab4067d Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-heavy.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light-ammo.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light-ammo.dmi new file mode 100644 index 00000000000..c8e54349ef9 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light-ammo.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light.dmi new file mode 100644 index 00000000000..29fd226bb8c Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/sidearm-light.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_357.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_357.dmi new file mode 100644 index 00000000000..6323ae0b29e Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_357.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_38.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_38.dmi new file mode 100644 index 00000000000..dc4d0946d65 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_38.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_44.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_44.dmi new file mode 100644 index 00000000000..a08cb3c3043 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_44.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_45.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_45.dmi new file mode 100644 index 00000000000..c0279eca577 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_45.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_56mm.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_56mm.dmi new file mode 100644 index 00000000000..4f4700c0649 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_56mm.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_7mm.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_7mm.dmi new file mode 100644 index 00000000000..1d713110d0f Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_5_7mm.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_7_62mm.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_7_62mm.dmi new file mode 100644 index 00000000000..71c2ba17c49 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_7_62mm.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_9mm.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_9mm.dmi new file mode 100644 index 00000000000..02f3f38bb00 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_9mm.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_a12g.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_a12g.dmi new file mode 100644 index 00000000000..d89710e46d9 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_a12g.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_attachies.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_attachies.dmi new file mode 100644 index 00000000000..131adea7190 Binary files /dev/null and b/icons/content/factions/corporations/nanotrasen/items/guns/expeditionary/staging_attachies.dmi differ diff --git a/icons/content/factions/corporations/nanotrasen/items/guns/pulse.dmi b/icons/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dmi similarity index 100% rename from icons/content/factions/corporations/nanotrasen/items/guns/pulse.dmi rename to icons/content/factions/corporations/nanotrasen/items/guns/nt_pulse.dmi diff --git a/icons/modules/projectiles/casings/modular_cased_unused.dmi b/icons/modules/projectiles/casings/modular_cased_unused.dmi deleted file mode 100644 index bf4e01ca840..00000000000 Binary files a/icons/modules/projectiles/casings/modular_cased_unused.dmi and /dev/null differ diff --git a/icons/modules/projectiles/magazines/modular_magazine_unused.dmi b/icons/modules/projectiles/magazines/modular_magazine_unused.dmi index b732274adaf..a1c9eea32a0 100644 Binary files a/icons/modules/projectiles/magazines/modular_magazine_unused.dmi and b/icons/modules/projectiles/magazines/modular_magazine_unused.dmi differ diff --git a/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi b/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi deleted file mode 100644 index f565fbbd2a1..00000000000 Binary files a/icons/modules/projectiles/magazines/modular_speedloader_unused.dmi and /dev/null differ diff --git a/icons/modules/projectiles/magazines/modular_stripper_unused.dmi b/icons/modules/projectiles/magazines/modular_stripper_unused.dmi deleted file mode 100644 index fc99de5d492..00000000000 Binary files a/icons/modules/projectiles/magazines/modular_stripper_unused.dmi and /dev/null differ diff --git a/maps/away_missions/archive/zresearchlabs.dmm b/maps/away_missions/archive/zresearchlabs.dmm index fe99bb0aae4..5114c067696 100644 --- a/maps/away_missions/archive/zresearchlabs.dmm +++ b/maps/away_missions/archive/zresearchlabs.dmm @@ -5581,7 +5581,7 @@ /area/awaymission/labs/command) "pQ" = ( /obj/structure/closet/cabinet, -/obj/item/gun/energy/pulse_carbine, +/obj/item/gun/energy/nt_pulse/carbine, /obj/item/clothing/accessory/medal/gold/heroism, /obj/item/clothing/under/rank/head_of_security/navyblue, /obj/item/clothing/accessory/holster/armpit, diff --git a/maps/rift/levels/rift-11-orbital.dmm b/maps/rift/levels/rift-11-orbital.dmm index fc113d7d0de..bbf3e1f24ea 100644 --- a/maps/rift/levels/rift-11-orbital.dmm +++ b/maps/rift/levels/rift-11-orbital.dmm @@ -8022,12 +8022,12 @@ /area/tdome/tdome1) "En" = ( /obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /obj/item/storage/secure/briefcase/nsfw_pack, /turf/unsimulated/floor/dark, /area/centcom/specops) diff --git a/maps/sectors/admin_planets_192/croatoan.dmm b/maps/sectors/admin_planets_192/croatoan.dmm index 5206264e34b..0d033cdc89a 100644 --- a/maps/sectors/admin_planets_192/croatoan.dmm +++ b/maps/sectors/admin_planets_192/croatoan.dmm @@ -11442,8 +11442,8 @@ /area/admin_planet/croatoan/sci_entry_hallway) "Oo" = ( /obj/structure/table/rack/shelf/steel, -/obj/item/gun/energy/pulse_carbine, -/obj/item/gun/energy/pulse_carbine, +/obj/item/gun/energy/nt_pulse/carbine, +/obj/item/gun/energy/nt_pulse/carbine, /turf/simulated/floor/reinforced, /area/admin_planet/croatoan/sec_armory) "Op" = ( diff --git a/maps/templates/admin/dhael_centcom.dmm b/maps/templates/admin/dhael_centcom.dmm index 91ea585fafb..f868736e5c2 100644 --- a/maps/templates/admin/dhael_centcom.dmm +++ b/maps/templates/admin/dhael_centcom.dmm @@ -13427,11 +13427,11 @@ /area/centcom/specops) "RE" = ( /obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /turf/unsimulated/floor{ icon_state = "dark" }, diff --git a/maps/templates/admin/ert.dmm b/maps/templates/admin/ert.dmm index 57ce1c0a1a4..834c52d1a78 100644 --- a/maps/templates/admin/ert.dmm +++ b/maps/templates/admin/ert.dmm @@ -2078,12 +2078,12 @@ "pI" = ( /obj/structure/table/rack/steel, /obj/effect/floor_decal/industrial/outline/grey, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /turf/simulated/floor/tiled/techfloor, /area/ship/ert/armoury_dl) "pK" = ( diff --git a/maps/templates/shuttles/overmaps/generic/cruiser.dmm b/maps/templates/shuttles/overmaps/generic/cruiser.dmm index 071f0063aa0..16826581b36 100644 --- a/maps/templates/shuttles/overmaps/generic/cruiser.dmm +++ b/maps/templates/shuttles/overmaps/generic/cruiser.dmm @@ -5824,10 +5824,10 @@ /obj/structure/closet/crate/secure/weapon{ req_one_access = list(108) }, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /obj/item/cell/device/weapon, /obj/item/cell/device/weapon, /obj/item/cell/device/weapon, diff --git a/maps/templates/shuttles/overmaps/generic/shelter_6.dmm b/maps/templates/shuttles/overmaps/generic/shelter_6.dmm index e0a277ddfda..b05f828d0dc 100644 --- a/maps/templates/shuttles/overmaps/generic/shelter_6.dmm +++ b/maps/templates/shuttles/overmaps/generic/shelter_6.dmm @@ -1334,10 +1334,10 @@ /obj/item/storage/belt/holding, /obj/item/hardsuit/ert/assetprotection, /obj/item/hardsuit/ert/assetprotection, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /obj/item/gun/ballistic/automatic/lmg, /obj/item/gun/ballistic/automatic/lmg, /obj/item/ammo_magazine/a5_56mm/saw, diff --git a/maps/triumph/levels/flagship.dmm b/maps/triumph/levels/flagship.dmm index c881b2487aa..85d3b2b38bd 100644 --- a/maps/triumph/levels/flagship.dmm +++ b/maps/triumph/levels/flagship.dmm @@ -3080,12 +3080,12 @@ /area/centcom/main_hall) "jJ" = ( /obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /obj/item/storage/secure/briefcase/nsfw_pack, /turf/unsimulated/floor{ icon_state = "dark" diff --git a/maps/victory/levels/flagship.dmm b/maps/victory/levels/flagship.dmm index 156ba90fd7b..e9fb9d19e00 100644 --- a/maps/victory/levels/flagship.dmm +++ b/maps/victory/levels/flagship.dmm @@ -3080,12 +3080,12 @@ /area/centcom/main_hall) "jJ" = ( /obj/structure/table/rack, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, -/obj/item/gun/energy/pulse_rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, +/obj/item/gun/energy/nt_pulse/rifle, /obj/item/storage/secure/briefcase/nsfw_pack, /turf/unsimulated/floor{ icon_state = "dark"