From 6c34d93be715012943626d0f812e99f730a536ef Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Tue, 8 Aug 2023 20:40:23 +1000 Subject: [PATCH] Nukies Update 7: Hats (Also massive uplink standardization, weapon kits and ammo changes) (#77330) ## About The Pull Request Massively overhauls and standardizes the nuclear operative uplink. ### Weapon Kits Essentially, all the main weapons of the uplink have been changed to instead come as 'weapon kits', which are essentially cases containing a weapon loadout to enable operatives to easily start operating on only just one item purchase, without the fuss of worrying whether or not operatives are getting spare ammo, or getting relevant equipment for success. Consider this a pseudo-loadout, though without necessarily restricting the purchasing of more weapon kits. All kits come in three categories: Low Cost (8 TC), Medium Cost (14 TC) and High Cost (18 TC). This is also matched by categorized ammo costs; Basic Ammo (2 TC), Hollow Point and Armour Penetrating (4 TC), Incendiary (3 TC) and Special (or anything that does not easily fit these categories and does something real extra) (5 TC). Weapons that lacked these ammos have gained these ammo types to fill the gaps.
There is may one exception to this in disruptor ammo, which is priced as basic ammo if only because it isn't _quite_ good enough to justify pricing at 5 tc and I can see an op wanting to use it as a basic ammo type instead of normal .50 BMG against, say, a silicon/mech heavy opposition. Since it cannot kill organics on its own, I'll consider this mostly basic-adjacent
The kits have also been labelled based on potential difficulty. This reflects possible difficulties in using the item, how conducive it is to success for how much game knowledge needed to actually use it, and how likely an op is to succeed using it. I don't expect ops to win using nothing but a rocket launcher, but I think ops should get a fair shake at trying, yeah? The kits are as below: #### **Low-Cost** _Bulldog (Moderate):_ Shotgun and three magazines of standard ammo. _Ansem (Easy/Spare):_ Pistol and three spare magazines of standard ammo. #### **Medium Cost** _C-20r (Easy):_ SMG and three spare magazines of standard ammo. _Energy Sword and Shield (Very Hard):_ Energy sword and shield. (Also a special hat) _Revolver (Moderate):_ Revolver and three speedloaders of standard ammo. _Rocket Launcher (Hard):_ Rocket launcher with three spare rockets. #### **High Cost** _L6 SAW (Moderate):_ LMG, and that's it. No spare ammo. _M-90gl (Hard):_ Rifle, two spare magazines of standard ammo and a box of rubber grenades. _Sniper (Hard):_ Sniper rifle, two spare magazine of standard ammo, and one magazine of disruptor ammo. Also suit and tie. _CQC (Very Hard):_ Comes with a stealth implant and a bandana. _Double-Energy Sword (Very Hard):_ Double-energy sword, syndicate soap, antislip module, meth injector and a prisoner jumpsuit. _**NEW** Grenadier's Kit (Hard):_ Grenadier's belt and grenade launcher (the one that launchers chem grenades). (I replaced the shit acid grenade with another flashbang in the belt) Surplus SMG (Flukie difficulty) has been unchanged. It just now comes with two rations. Includes two new revolver ammo types: Phasic, which goes through walls and armor, but has significantly less damage as a result (I've equalized the revolver damage and the rifle version's damage to 30 for both). And Heartseeker, which has homing bullets. Both are Special ammo, and are priced at 5 TC a speedloader. ### Other Gear The other items in the uplink have also been consolidated and standardized in various ways. #### Grenades Most now cost 15 TC for three grenades of any given type (including the full fungal tuberculous). This is pretty much identical to the previous price, just more consistent overall and front-loaded in cost. #### Reinforcements All the various reinforcements now cost 35 TC and all refundable, equalizing cost to the average across the reinforcements. This is primarily because I feel like all these options should be weighed equally, and not one of these options are necessarily worse or better than the other in their current balance. They're largely inaccessible for normal ops regardless, and typically come out when there is a discount or war ops. I took the average value and went with it. Not much more to say. #### Mechs They're just cheaper. These things still suck and they need help. They've always needed help. A slightly less excessive value for the mechs may help see people willing to spend the TC on them. I doubt it. I seriously suggest not buying these still. I keep them in primarily because they are big stompy mechs and are kind of iconic 'war ops' gear. #### Bundles Since I've implemented weapon kits, gun bundles are rather redundant. So the bulldog weapon and ammo bundle, the c20-r weapon and ammo bundle and technically the sniper bundle were removed. The sniper bundle is now the weapon kit, obviously. Nothing else here really. Except for one.... #### Implants Not much changed here. I standardized the implant prices to 8 TC a pop. This is in accordance with traitor implants, which ops also get. So everything in this category bar a few exceptions (like macro/microbombs) are around 8 TC. Makes sense to me, really. Importantly, I made the Implant bundle 25 TC, and I unrandomized the contents. Who in the right fucking mind would spend 40 TC just to get five reviver implants is beyond me. But instead, you get one of each of the cybernetic implants except thermal eyes (you can just buy thermals and get the benefit of both vision types; x-ray and thermal vision, if you want to use smokescreens a lot). #### Base Keys They're all now 15 TC, except the fridge which is 5 TC. It's weird they're valued differently when they are taken mostly to do gimmicks like xenobio and toxins in a hurry before hitting the station. So we've standardized it. ## Hat Crate **YES, GOOD SIR, YOU TOO CAN ORDER A HAT CRATE FROM THE SYNDICATE STORE FOR ONLY 5 TC!** **NO NEED FOR A KEY, JUST BUY IT AND PULL IT OPEN WITH YOUR STANDARD ISSUE CROWBAR!** **ENJOY YOUR NEW CRATE! ENJOY YOUR NEW HAT!** **PUT IT ON USING THE FREE HAT STABILIZERS WE INCLUDED WITH THE HATS!** ~~**NO REFUNDS IF YOU GET BLOOD ON YOUR HAT!**~~
There is a 1% chance to instagib people with direct hits from a rocket. This does the crit effect.
## Why It's Good For The Game The uplink needed more spring cleaning and standardization. With this, I've partially implemented my older idea for ammo consistency and initial allowance for nukies. Ammo is kind of over-priced and often where a good chunk of TC goes towards without really pushing nukies towards meaningful success. And it is often what is tripping up new players who didn't think to get any. Now, when they get a gun, they get ammo in their case. On top of this, the weapon kit category is both at the top of the uplink AND has a little label to say 'Recommend', so that these new players will hopefully know they should be looking there first. In addition, it is the gateway towards a concept that is currently being worked on. Nuclear operatives having some degree of predefined loadouts for players to select if they aren't sure what they want, or don't know what to get. Nukies is very confusing for many players. So giving them a fighting chance with some premade setups can help ease them into the role without needing too much player knowledge in how to apply the items. This is only one step towards that, so that players can identify what gear they need to help succeed based on their skill. I wanted to implement a difficulty warning so that players can choose gear loadouts that are actually conducive to their skill and knowledge. I based it on how much players would need to know to engage in combat with it, and how much fiddling is required to get something to work properly (overly involved reloading is a consideration, for example, as well as precise button presses). In addition, how much of a force multiplier some weapons can be for their ease of use. Most people recognize the c20-r as the most new player friendly weapon, as an example. So it would be good to steer players towards taking that gun because of how easy it is to use, understand and succeed with it. And most importantly of all; Having standards within the uplink is important. Most of the values in the uplink are just completely random. Nobody has a good grasp of what is too much or too little. Even just a hint of consistency, and people will stick to it (see implants for what I mean). And there is still some work to be done even there. A good start is weapons. Price for power can be meaningful when decided whether we want some weapons to come out more often than others. Players do enjoy making informed decisions and choices, and having affordability be a draw to some otherwise less powerful weapons (looking at you, Bulldog) can actually be a worthwhile and meaningful difference. ~~I thought it would tick off the gun nerds to change the calibers on the guns.~~ ~~I also thought adding hats would be funny given the release of TF2's most recent update.~~ ## Changelog :cl: balance: Standardizes some of the nuclear operative entries to have more consistent pricing within their respective categories. add: Adds some new categories so that players have an easier time navigating the nuclear operative uplink. balance: Many items have had prices reduced or adjusted to make them more desirable or more consistent within their category. add: Weapon kits have replaced almost all the individual weapons in the uplink. You now buy these instead of the individual weapon. These often come with spare ammo or relevant gear for success. add: Most ammo types have been standardized in price. refactor; Removes a lot of redundant item entry code and tidies up the actual code part of the nuclear uplink so that it is much easier to find things within it. add: Added 40 new cosmetic items to the Syndicate Store. Buy them now from the Hat Crate, only 5 TC! code: Updated the nuclear operative uplink files. /:cl: --- _maps/map_files/Basketball/ass_blast_usa.dmm | 2 +- _maps/templates/battlecruiser_starfury.dmm | 14 +- code/__DEFINES/projectiles.dm | 4 +- .../effects/spawners/random/clothing.dm | 59 + code/game/objects/items/storage/backpack.dm | 35 - code/game/objects/items/storage/belt.dm | 3 +- code/game/objects/items/storage/briefcase.dm | 6 +- code/game/objects/items/storage/toolbox.dm | 132 +- .../game/objects/items/storage/uplink_kits.dm | 15 +- .../structures/crates_lockers/crates/large.dm | 15 + code/modules/cargo/packs/imports.dm | 2 +- code/modules/clothing/under/jobs/security.dm | 9 +- .../ruins/spaceruin_code/forgottenship.dm | 2 +- .../projectiles/ammunition/ballistic/lmg.dm | 52 +- .../ammunition/ballistic/revolver.dm | 8 + .../projectiles/ammunition/ballistic/rifle.dm | 29 +- .../projectiles/ammunition/ballistic/smg.dm | 5 + .../projectiles/boxes_magazines/ammo_boxes.dm | 31 + .../boxes_magazines/external/lmg.dm | 48 +- .../boxes_magazines/external/rifle.dm | 16 +- .../boxes_magazines/external/smg.dm | 4 + .../boxes_magazines/external/toy.dm | 6 +- .../projectiles/guns/ballistic/automatic.dm | 8 +- .../projectiles/projectile/bullets/lmg.dm | 27 +- .../projectile/bullets/revolver.dm | 14 + .../projectiles/projectile/bullets/rifle.dm | 16 +- .../projectiles/projectile/bullets/shotgun.dm | 8 + .../projectiles/projectile/bullets/smg.dm | 5 + .../projectiles/projectile/special/rocket.dm | 10 +- .../reagents/reagent_containers/hypospray.dm | 7 + code/modules/surgery/organs/autosurgeon.dm | 3 + .../internal/cyberimp/augments_internal.dm | 14 +- .../modules/uplink/uplink_items/ammunition.dm | 2 +- code/modules/uplink/uplink_items/clownops.dm | 141 ++ code/modules/uplink/uplink_items/dangerous.dm | 4 +- code/modules/uplink/uplink_items/nukeops.dm | 1239 ++++++++--------- icons/mob/clothing/head/costume.dmi | Bin 53059 -> 53587 bytes icons/obj/clothing/head/costume.dmi | Bin 25275 -> 25522 bytes icons/obj/weapons/guns/ammo.dmi | Bin 25449 -> 25909 bytes tgstation.dme | 1 + ...0_common_ammo_caliber_to_weird_caliber.txt | 13 + 41 files changed, 1177 insertions(+), 832 deletions(-) create mode 100644 code/modules/uplink/uplink_items/clownops.dm create mode 100644 tools/UpdatePaths/Scripts/77330_common_ammo_caliber_to_weird_caliber.txt diff --git a/_maps/map_files/Basketball/ass_blast_usa.dmm b/_maps/map_files/Basketball/ass_blast_usa.dmm index d4d7a435ebe..4b3354ba649 100644 --- a/_maps/map_files/Basketball/ass_blast_usa.dmm +++ b/_maps/map_files/Basketball/ass_blast_usa.dmm @@ -27,7 +27,7 @@ /area/centcom/basketball) "cz" = ( /obj/structure/rack, -/obj/item/gun/ballistic/automatic/sniper_rifle, +/obj/item/gun/ballistic/rifle/sniper_rifle, /turf/open/floor/iron/dark, /area/centcom/basketball) "dr" = ( diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 22697e2ac9f..979b5f2b058 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -2088,28 +2088,28 @@ /obj/item/ammo_box/a40mm{ icon_state = "40mm-4" }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30"; pixel_x = 2; pixel_y = 4 }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30"; pixel_x = 2; pixel_y = 4 }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30" }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30" }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30"; pixel_x = -2; pixel_y = -4 }, -/obj/item/ammo_box/magazine/m556{ +/obj/item/ammo_box/magazine/m223{ icon_state = "5.56m-30"; pixel_x = -2; pixel_y = -4 @@ -2475,7 +2475,7 @@ layer = 2.9 }, /obj/item/storage/belt/military, -/obj/item/ammo_box/magazine/mm712x82, +/obj/item/ammo_box/magazine/m7mm, /obj/item/gun/ballistic/automatic/l6_saw, /turf/open/floor/pod/light, /area/shuttle/sbc_starfury) diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index 64f4d6d8cf7..e76b1cae4f6 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -11,7 +11,7 @@ // Caliber defines: (current count stands at 24) /// The caliber used by the [L6 SAW][/obj/item/gun/ballistic/automatic/l6_saw]. -#define CALIBER_712X82MM "mm71282" +#define CALIBER_A7MM "a7mm" /// The caliber used by the [security auto-rifle][/obj/item/gun/ballistic/automatic/wt550]. #define CALIBER_46X30MM "4.6x30mm" /// The caliber used by the Nanotrasen Saber SMG, PP-95 SMG and Type U3 Uzi. Also used as the default caliber for pistols but only the stechkin APS machine pistol doesn't override it. @@ -33,7 +33,7 @@ /// The caliber used by [one revolver variant][/obj/item/gun/ballistic/revolver/nagant]. #define CALIBER_N762 "n762" /// The caliber used by the the M-90gl Carbine, and NT-ARG 'Boarder'. -#define CALIBER_A556 "a556" +#define CALIBER_A223 "a223" /// The caliber used by bolt action rifles. #define CALIBER_A762 "a762" /// The caliber used by shotguns. diff --git a/code/game/objects/effects/spawners/random/clothing.dm b/code/game/objects/effects/spawners/random/clothing.dm index 437c9475458..3d2bb47cbf0 100644 --- a/code/game/objects/effects/spawners/random/clothing.dm +++ b/code/game/objects/effects/spawners/random/clothing.dm @@ -173,3 +173,62 @@ /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/duffelbag/clown, ) + +/obj/effect/spawner/random/clothing/funny_hats + name = "random hat spawner" + icon_state = "hat" + desc = "This is the update that ruined Spacestation 13 forever. I can't believe what the TG Coders have done. \ + They've added fucking HATS! HATS!!! In MY competitive-roleplay-action-click-shooter-stabber-against-two-sides-to-detonate-the-payload game? \ + This isn't what I signed up for and why I supported this game! My game is chugging with every update to this stupid project and \ + I can't fucking stand it anymore. And instead of fixing the bugs or getting rid of the exploits, they just keep adding more \ + fucking hats so that the dumbasses that keep feeding into the coders bullshit will eat it up and ignore the glaring problems with it. \ + They've stopped caring. We've not had a REAL update in almost 5 years of development! Just removals! It's been all downhill since cloning and stuns were removed. \ + And frankly, I don't know what to do. There isn't any other competitive-roleplay-action-click-shooter-stabber-against-two-sides-to-detonate-the-payload game \ + out there that isn't trying to get my donator money just so I can have a single sprite added to the game and autoequipped to my character. \ + Next thing you know, the coders are going to have us PAY for these goddamn pixels on our character! Imagine having to pay for extra pixels! \ + I'm fucking DONE WITH THIS GAME! I'M THROUGH WITH THIS SHIT! FUCK THE CODERS! I JUST WANT TO PLAY MY COMPETITIVE-ROLEPLAY-ACTION-\ + CLICK-SHOOTER-STABBER-AGAINST-TWO-SIDES-TO-DETONATE-THE-PAYLOAD GAME THAT ISN'T DRAGGED DOWN BY HORRIBLE ADMINS THAT BAN ME WHEN I SAY \ + CERTAIN WORDS THAT I AM ENTITLED TO SAY ON THE INTERNET! I'M THROUGH WITH THIS! I'M GOING TO GO PLAY A PURE, GENUINE GAME. WITH NO FUCKING HATS!" + loot = list( + /obj/item/clothing/head/costume/powdered_wig, + /obj/item/clothing/head/costume/cueball, + /obj/item/clothing/head/costume/snowman, + /obj/item/clothing/head/costume/witchwig, + /obj/item/clothing/head/costume/maidheadband, + /obj/item/clothing/head/costume/chicken, + /obj/item/clothing/head/costume/griffin, + /obj/item/clothing/head/costume/xenos, + /obj/item/clothing/head/costume/lobsterhat, + /obj/item/clothing/head/costume/cardborg, + /obj/item/clothing/head/costume/football_helmet, + /obj/item/clothing/head/costume/tv_head/fov_less, + /obj/item/clothing/head/costume/tmc, + /obj/item/clothing/head/costume/deckers, + /obj/item/clothing/head/costume/yuri, + /obj/item/clothing/head/costume/allies, + /obj/item/clothing/head/frenchberet, + /obj/item/clothing/head/costume/crown, + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/beanie/red, + /obj/item/clothing/head/beanie/darkblue, + /obj/item/clothing/head/rasta, + /obj/item/clothing/head/costume/constable, + /obj/item/clothing/head/bio_hood/plague, + /obj/item/clothing/head/costume/nursehat, + /obj/item/clothing/head/hats/bowler, + /obj/item/clothing/head/costume/bearpelt, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/head/cowboy, + /obj/item/clothing/head/costume/rice_hat, + /obj/item/clothing/head/costume/pharaoh, + /obj/item/clothing/head/costume/delinquent, + /obj/item/clothing/head/costume/jackbros, + /obj/item/clothing/head/costume/ushanka, + /obj/item/clothing/head/costume/nightcap/blue, + /obj/item/clothing/head/costume/nightcap/red, + /obj/item/clothing/head/mothcap, + /obj/item/clothing/head/cone, + /obj/item/clothing/head/collectable/petehat, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/wizard/marisa/fake, + ) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index c1ce4cce7f3..4bc5eb2f9e5 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -702,23 +702,6 @@ icon_state = "duffel-syndieammo" inhand_icon_state = "duffel-syndieammo" -/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun - desc = "A large duffel bag, packed to the brim with Bulldog shotgun magazines." - -/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g/slug(src) - new /obj/item/ammo_box/magazine/m12g/slug(src) - new /obj/item/ammo_box/magazine/m12g/dragon(src) - -/obj/item/storage/backpack/duffelbag/syndie/ammo/smg - desc = "A large duffel bag, packed to the brim with C-20r magazines." - -/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents() - for(var/i in 1 to 9) - new /obj/item/ammo_box/magazine/smgm45(src) - /obj/item/storage/backpack/duffelbag/syndie/ammo/mech desc = "A large duffel bag, packed to the brim with various exosuit ammo." @@ -743,24 +726,6 @@ new /obj/item/mecha_ammo/missiles_srm(src) new /obj/item/mecha_ammo/missiles_srm(src) -/obj/item/storage/backpack/duffelbag/syndie/c20rbundle - desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor." - -/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents() - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/ammo_box/magazine/smgm45(src) - new /obj/item/gun/ballistic/automatic/c20r(src) - new /obj/item/suppressor(src) - -/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle - desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses." - -/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents() - new /obj/item/gun/ballistic/shotgun/bulldog(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle desc = "A large duffel bag containing a medical equipment, a Donksoft LMG, a big jumbo box of riot darts, and a magboot MODsuit module." diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index cab2f4e88da..aa327ebf88b 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -619,11 +619,10 @@ /obj/item/storage/belt/grenade/full/PopulateContents() generate_items_inside(list( - /obj/item/grenade/chem_grenade/facid = 1, /obj/item/grenade/chem_grenade/incendiary = 2, /obj/item/grenade/empgrenade = 2, /obj/item/grenade/frag = 10, - /obj/item/grenade/flashbang = 1, + /obj/item/grenade/flashbang = 2, /obj/item/grenade/gluon = 4, /obj/item/grenade/smokebomb = 4, /obj/item/grenade/syndieminibomb = 2, diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 299c10df5af..719f296b39c 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -60,7 +60,7 @@ user.visible_message(span_suicide("[user] looks overwhelmed with paperwork! It looks like [user.p_theyre()] trying to commit suicide!")) return OXYLOSS -/obj/item/storage/briefcase/sniperbundle +/obj/item/storage/briefcase/sniper desc = "Its label reads \"genuine hardened Captain leather\", but suspiciously has no other tags or branding. Smells like L'Air du Temps." force = 10 @@ -69,6 +69,6 @@ new /obj/item/gun/ballistic/rifle/sniper_rifle/syndicate(src) new /obj/item/clothing/neck/tie/red/hitman(src) new /obj/item/clothing/under/syndicate/sniper(src) + new /obj/item/ammo_box/magazine/sniper_rounds(src) + new /obj/item/ammo_box/magazine/sniper_rounds(src) new /obj/item/ammo_box/magazine/sniper_rounds/disruptor(src) - new /obj/item/ammo_box/magazine/sniper_rounds/disruptor(src) - new /obj/item/suppressor(src) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index eded2483104..028c911742f 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -313,24 +313,136 @@ name = "old toolbox" custom_materials = list(/datum/material/hauntium = SMALL_MATERIAL_AMOUNT*5) -/obj/item/storage/toolbox/mosincase - name = "ancient gun case" - desc = "A weapon's case. Has the symbol of the Third Soviet Union stamped on the side." +/obj/item/storage/toolbox/guncase + name = "gun case" + desc = "A weapon's case. Has a blood-red 'S' stamped on the cover." icon = 'icons/obj/storage/case.dmi' - icon_state = "mosin_case" + icon_state = "infiltrator_case" lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' - inhand_icon_state = "mosin_case" + inhand_icon_state = "infiltrator_case" has_latches = FALSE + var/weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol + var/extra_to_spawn = /obj/item/ammo_box/magazine/m9mm -/obj/item/storage/toolbox/mosincase/Initialize(mapload) +/obj/item/storage/toolbox/guncase/Initialize(mapload) . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY - atom_storage.max_total_storage = 7 //enough to hold ONE mosin and the ammo boxes + atom_storage.max_total_storage = 7 //enough to hold ONE bulky gun and the ammo boxes atom_storage.max_slots = 4 -/obj/item/storage/toolbox/mosincase/PopulateContents() - new /obj/effect/spawner/random/mosin (src) +/obj/item/storage/toolbox/guncase/PopulateContents() + new weapon_to_spawn (src) for(var/i in 1 to 3) - new /obj/effect/spawner/random/mosin/ammo (src) + new extra_to_spawn (src) +/obj/item/storage/toolbox/guncase/bulldog + name = "bulldog gun case" + weapon_to_spawn = /obj/item/gun/ballistic/shotgun/bulldog + extra_to_spawn = /obj/item/ammo_box/magazine/m12g + +/obj/item/storage/toolbox/guncase/c20r + name = "c-20r gun case" + weapon_to_spawn = /obj/item/gun/ballistic/automatic/c20r + extra_to_spawn = /obj/item/ammo_box/magazine/smgm45 + +/obj/item/storage/toolbox/guncase/clandestine + name = "clandestine gun case" + weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/clandestine + extra_to_spawn = /obj/item/ammo_box/magazine/m10mm + +/obj/item/storage/toolbox/guncase/m90gl + name = "m-90gl gun case" + weapon_to_spawn = /obj/item/gun/ballistic/automatic/m90 + extra_to_spawn = /obj/item/ammo_box/magazine/m223 + +/obj/item/storage/toolbox/guncase/m90gl/PopulateContents() + new weapon_to_spawn (src) + for(var/i in 1 to 2) + new extra_to_spawn (src) + new /obj/item/ammo_box/a40mm/rubber (src) + +/obj/item/storage/toolbox/guncase/rocketlauncher + name = "rocket launcher gun case" + weapon_to_spawn = /obj/item/gun/ballistic/rocketlauncher + extra_to_spawn = /obj/item/ammo_box/rocket + +/obj/item/storage/toolbox/guncase/rocketlauncher/PopulateContents() + new weapon_to_spawn (src) + new extra_to_spawn (src) + +/obj/item/storage/toolbox/guncase/revolver + name = "revolver gun case" + weapon_to_spawn = /obj/item/gun/ballistic/revolver/syndicate + extra_to_spawn = /obj/item/ammo_box/a357 + +/obj/item/storage/toolbox/guncase/sword_and_board + name = "energy sword and shield weapon case" + weapon_to_spawn = /obj/item/melee/energy/sword + extra_to_spawn = /obj/item/shield/energy + +/obj/item/storage/toolbox/guncase/sword_and_board/PopulateContents() + new weapon_to_spawn (src) + new extra_to_spawn (src) + new /obj/item/mod/module/hat_stabilizer (src) + new /obj/item/clothing/head/costume/knight (src) + +/obj/item/storage/toolbox/guncase/cqc + name = "\improper CQC equipment case" + weapon_to_spawn = /obj/item/book/granter/martial/cqc + extra_to_spawn = /obj/item/storage/box/syndie_kit/imp_stealth + +/obj/item/storage/toolbox/guncase/cqc/PopulateContents() + new weapon_to_spawn (src) + new extra_to_spawn (src) + new /obj/item/mod/module/hat_stabilizer (src) + new /obj/item/clothing/head/costume/snakeeater (src) + +/obj/item/clothing/head/costume/snakeeater + name = "strange bandana" + desc = "A bandana. It seems to have a little carp embroidered on the inside, as well as the kanji '魚'." + icon_state = "snake_eater" + inhand_icon_state = null + +/obj/item/clothing/head/costume/knight + name = "fake medieval helmet" + desc = "A classic metal helmet. Though, this one seems to be very obviously fake..." + icon = 'icons/obj/clothing/head/helmet.dmi' + worn_icon = 'icons/mob/clothing/head/helmet.dmi' + icon_state = "knight_green" + inhand_icon_state = "knight_helmet" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + dog_fashion = null + +/obj/item/storage/toolbox/guncase/doublesword + name = "double-energy sword weapon case" + weapon_to_spawn = /obj/item/dualsaber + extra_to_spawn = /obj/item/soap/syndie + +/obj/item/storage/toolbox/guncase/doublesword/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.max_total_storage = 10 //it'll hold enough + atom_storage.max_slots = 5 + +/obj/item/storage/toolbox/guncase/doublesword/PopulateContents() + new weapon_to_spawn (src) + new extra_to_spawn (src) + new /obj/item/mod/module/noslip (src) + new /obj/item/reagent_containers/hypospray/medipen/methamphetamine (src) + new /obj/item/clothing/under/rank/prisoner/nosensor (src) + +/obj/item/storage/toolbox/guncase/soviet + name = "ancient gun case" + desc = "A weapon's case. Has the symbol of the Third Soviet Union stamped on the side." + icon_state = "mosin_case" + inhand_icon_state = "mosin_case" + weapon_to_spawn = /obj/effect/spawner/random/mosin + extra_to_spawn = /obj/effect/spawner/random/mosin/ammo + +/obj/item/storage/toolbox/guncase/soviet/plastikov + name = "ancient surplus gun case" + desc = "A gun case. Has the symbol of the Third Soviet Union stamped on the side." + weapon_to_spawn = /obj/item/gun/ballistic/automatic/plastikov + extra_to_spawn = /obj/item/food/rationpack //sorry comrade, cannot get you more ammo, here, have lunch diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 12026cc7d0f..4d300204bb3 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -588,19 +588,30 @@ for(var/i in 1 to 3) new /obj/item/grenade/spawnergrenade/buzzkill(src) +/obj/item/storage/box/syndie_kit/manhack_grenades/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/grenade/spawnergrenade/manhacks(src) + /obj/item/storage/box/syndie_kit/sleepytime/PopulateContents() new /obj/item/clothing/under/syndicate/bloodred/sleepytime(src) new /obj/item/reagent_containers/cup/glass/mug/coco(src) new /obj/item/toy/plush/carpplushie(src) new /obj/item/bedsheet/syndie(src) +/obj/item/storage/box/syndie_kit/demoman/PopulateContents() + new /obj/item/gun/grenadelauncher(src) + new /obj/item/storage/belt/grenade/full(src) + if(prob(1)) + new /obj/item/clothing/head/hats/hos/shako(src) + new /obj/item/mod/module/hat_stabilizer(src) + /// Surplus Ammo Box -/obj/item/storage/box/syndie_kit/surplus +/obj/item/storage/box/syndie_kit/sniper_surplus name = "surplus .50 BMG magazine box" desc = "A shoddy box full of surplus .50 BMG magazines. Not as strong, but good enough to keep lead in the air." -/obj/item/storage/box/syndie_kit/surplus/PopulateContents() +/obj/item/storage/box/syndie_kit/sniper_surplus/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_box/magazine/sniper_rounds/surplus(src) diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index ef6e25d343c..3fe68ee5763 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -55,3 +55,18 @@ to_chat(user, span_warning("You need a crowbar to pry this open!")) return FALSE //Just stop. Do nothing. Don't turn into an invisible sprite. Don't open like a locker. //The large crate has no non-attack interactions other than the crowbar, anyway. + +/obj/structure/closet/crate/large/hats/PopulateContents() + ..() + for (var/i in 1 to 5) + new /obj/effect/spawner/random/clothing/funny_hats(src) + for (var/i in 1 to 5) + new /obj/item/mod/module/hat_stabilizer(src) + if(prob(1)) + var/our_contents = list() + for(var/obj/item/clothing/head/any_hat in contents) + our_contents[any_hat]++ + if(our_contents) + var/obj/item/clothing/head/lucky_hat = pick(our_contents) + lucky_hat.AddComponent(/datum/component/unusual_effect, color = "#FFEA0030", include_particles = TRUE) + lucky_hat.name = "unusual [name]" diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index db4de55df60..eda2bf3ecb2 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -224,7 +224,7 @@ /obj/item/clothing/mask/russian_balaclava, /obj/item/clothing/head/helmet/rus_ushanka, /obj/item/clothing/suit/armor/vest/russian_coat, - /obj/item/storage/toolbox/mosincase = 2, + /obj/item/storage/toolbox/guncase/soviet = 2, ) /datum/supply_pack/imports/russian/fill(obj/structure/closet/crate/our_crate) diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 01f15e04ea4..6fdecff829b 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -229,7 +229,7 @@ /obj/item/clothing/under/rank/prisoner name = "prison jumpsuit" - desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "jumpsuit" icon_preview = 'icons/obj/fluff/previews.dmi' icon_state_preview = "prisonsuit" @@ -243,9 +243,14 @@ sensor_mode = SENSOR_COORDS random_sensor = FALSE +/obj/item/clothing/under/rank/prisoner/nosensor + desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"OFF\" position." + has_sensor = NO_SENSORS + sensor_mode = SENSOR_OFF + /obj/item/clothing/under/rank/prisoner/skirt name = "prison jumpskirt" - desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." + desc = "Standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "jumpskirt" icon_preview = 'icons/obj/fluff/previews.dmi' icon_state_preview = "prisonskirt" diff --git a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index e5ba1d5fc0b..830fb83c0f3 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -136,7 +136,7 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) rapid_melee = 1 retreat_distance = 2 minimum_distance = 4 - casingtype = /obj/item/ammo_casing/a556/weak + casingtype = /obj/item/ammo_casing/a223/weak projectilesound = 'sound/weapons/gun/smg/shot.ogg' loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier) mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm index 896fea98034..d3d74f283c5 100644 --- a/code/modules/projectiles/ammunition/ballistic/lmg.dm +++ b/code/modules/projectiles/ammunition/ballistic/lmg.dm @@ -1,33 +1,33 @@ -// 7.12x82mm (SAW) +// 7mm (SAW) -/obj/item/ammo_casing/mm712x82 - name = "7.12x82mm bullet casing" - desc = "A 7.12x82mm bullet casing." +/obj/item/ammo_casing/m7mm + name = "7mm bullet casing" + desc = "A 7mm bullet casing." icon_state = "762-casing" - caliber = CALIBER_712X82MM - projectile_type = /obj/projectile/bullet/mm712x82 + caliber = CALIBER_A7MM + projectile_type = /obj/projectile/bullet/a7mm -/obj/item/ammo_casing/mm712x82/ap - name = "7.12x82mm armor-piercing bullet casing" - desc = "A 7.12x82mm bullet casing designed with a hardened-tipped core to help penetrate armored targets." - projectile_type = /obj/projectile/bullet/mm712x82/ap +/obj/item/ammo_casing/m7mm/ap + name = "7mm armor-piercing bullet casing" + desc = "A 7mm bullet casing designed with a hardened-tipped core to help penetrate armored targets." + projectile_type = /obj/projectile/bullet/a7mm/ap -/obj/item/ammo_casing/mm712x82/hollow - name = "7.12x82mm hollow-point bullet casing" - desc = "A 7.12x82mm bullet casing designed to cause more damage to unarmored targets." - projectile_type = /obj/projectile/bullet/mm712x82/hp +/obj/item/ammo_casing/m7mm/hollow + name = "7mm hollow-point bullet casing" + desc = "A 7mm bullet casing designed to cause more damage to unarmored targets." + projectile_type = /obj/projectile/bullet/a7mm/hp -/obj/item/ammo_casing/mm712x82/incen - name = "7.12x82mm incendiary bullet casing" - desc = "A 7.12x82mm bullet casing designed with a chemical-filled capsule on the tip that when bursted, reacts with the atmosphere to produce a fireball, engulfing the target in flames." - projectile_type = /obj/projectile/bullet/incendiary/mm712x82 +/obj/item/ammo_casing/m7mm/incen + name = "7mm incendiary bullet casing" + desc = "A 7mm bullet casing designed with a chemical-filled capsule on the tip that when bursted, reacts with the atmosphere to produce a fireball, engulfing the target in flames." + projectile_type = /obj/projectile/bullet/incendiary/a7mm -/obj/item/ammo_casing/mm712x82/match - name = "7.12x82mm match bullet casing" - desc = "A 7.12x82mm bullet casing manufactured to unfailingly high standards, you could pull off some cool trickshots with this." - projectile_type = /obj/projectile/bullet/mm712x82/match +/obj/item/ammo_casing/m7mm/match + name = "7mm match bullet casing" + desc = "A 7mm bullet casing manufactured to unfailingly high standards, you could pull off some cool trickshots with this." + projectile_type = /obj/projectile/bullet/a7mm/match -/obj/item/ammo_casing/mm712x82/bouncy - name = "7.12x82mm rubber bullet casing" - desc = "A 7.12x82mm rubber bullet casing manufactured to unfailingly disastrous standards, you could piss off a lot of people spraying this down a hallway." - projectile_type = /obj/projectile/bullet/mm712x82/bouncy +/obj/item/ammo_casing/m7mm/bouncy + name = "7mm rubber bullet casing" + desc = "A 7mm rubber bullet casing manufactured to unfailingly disastrous standards, you could piss off a lot of people spraying this down a hallway." + projectile_type = /obj/projectile/bullet/a7mm/bouncy diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 54b3f39cd85..811b4309f52 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -14,6 +14,14 @@ desc = "A .357 bullet casing, manufactured to exceedingly high standards." projectile_type = /obj/projectile/bullet/a357/match +/obj/item/ammo_casing/a357/phasic + name = ".357 phasic bullet casing" + projectile_type = /obj/projectile/bullet/a357/phasic + +/obj/item/ammo_casing/a357/heartseeker + name = ".357 heartseeker bullet casing" + projectile_type = /obj/projectile/bullet/a357/heartseeker + // 7.62x38mmR (Nagant Revolver) /obj/item/ammo_casing/n762 diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 38515fb7820..4e07c4c6ff9 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -15,21 +15,21 @@ /obj/item/ammo_casing/a762/enchanted projectile_type = /obj/projectile/bullet/a762/enchanted -// 5.56mm (M-90gl Carbine) +// .223 (M-90gl Carbine) -/obj/item/ammo_casing/a556 - name = "5.56mm bullet casing" - desc = "A 5.56mm bullet casing." - caliber = CALIBER_A556 - projectile_type = /obj/projectile/bullet/a556 +/obj/item/ammo_casing/a223 + name = ".223 bullet casing" + desc = "A .223 bullet casing." + caliber = CALIBER_A223 + projectile_type = /obj/projectile/bullet/a223 -/obj/item/ammo_casing/a556/phasic - name = "5.56mm phasic bullet casing" - desc = "A 5.56mm phasic bullet casing." - projectile_type = /obj/projectile/bullet/a556/phasic +/obj/item/ammo_casing/a223/phasic + name = ".223 phasic bullet casing" + desc = "A .223 phasic bullet casing." + projectile_type = /obj/projectile/bullet/a223/phasic -/obj/item/ammo_casing/a556/weak - projectile_type = /obj/projectile/bullet/a556/weak +/obj/item/ammo_casing/a223/weak + projectile_type = /obj/projectile/bullet/a223/weak // 40mm (Grenade Launcher) @@ -39,3 +39,8 @@ caliber = CALIBER_40MM icon_state = "40mmHE" projectile_type = /obj/projectile/bullet/a40mm + +/obj/item/ammo_casing/a40mm/rubber + name = "40mm rubber shell" + desc = "A cased rubber slug. The big brother of the beanbag slug, this thing will knock someone out in one. Doesn't do so great against anyone in armor." + projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index 594a1341d2c..7e84bc1a918 100644 --- a/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -32,6 +32,11 @@ desc = "A .45 bullet casing." projectile_type = /obj/projectile/bullet/c45/ap +/obj/item/ammo_casing/c45/hp + name = ".45 hollow point bullet casing" + desc = "A .45 bullet casing." + projectile_type = /obj/projectile/bullet/c45/hp + /obj/item/ammo_casing/c45/inc name = ".45 incendiary bullet casing" desc = "A .45 bullet casing." diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index c14275843db..4be643b0e19 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -7,11 +7,28 @@ caliber = CALIBER_357 multiple_sprites = AMMO_BOX_PER_BULLET item_flags = NO_MAT_REDEMPTION + ammo_band_icon = "+357_ammo_band" + ammo_band_color = null /obj/item/ammo_box/a357/match name = "speed loader (.357 Match)" desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." ammo_type = /obj/item/ammo_casing/a357/match + ammo_band_color = "#77828a" + +/obj/item/ammo_box/a357/phasic + name = "speed loader (.357 Phasic)" + desc = "Designed to quickly reload revolvers. Holds phasic ammo, also known as 'Ghost Lead', allowing it to pass through non-organic material." + ammo_type = /obj/item/ammo_casing/a357/phasic + ammo_band_color = "#693a6a" + +/obj/item/ammo_box/a357/heartseeker + name = "speed loader (.357 Heartseeker)" + desc = "Designed to quickly reload revolvers. Holds heartseeker ammo, which veers into targets with exceptional precision using \ + an unknown method. It apparently predicts movement using neural pulses in the brain, but that's less marketable. \ + As seen in the hit NTFlik horror-space western film, Forget-Me-Not! Brought to you by Roseus Galactic!" + ammo_type = /obj/item/ammo_casing/a357/heartseeker + ammo_band_color = "#a91e1e" /obj/item/ammo_box/c38 name = "speed loader (.38)" @@ -86,6 +103,20 @@ max_ammo = 4 multiple_sprites = AMMO_BOX_PER_BULLET +/obj/item/ammo_box/a40mm/rubber + name = "ammo box (40mm rubber slug)" + ammo_type = /obj/item/ammo_casing/a40mm/rubber + +/obj/item/ammo_box/rocket + name = "rocket bouquet (84mm HE)" + icon_state = "rocketbundle" + ammo_type = /obj/item/ammo_casing/rocket + max_ammo = 3 + multiple_sprites = AMMO_BOX_PER_BULLET + +/obj/item/ammo_box/rocket/can_load(mob/user) + return FALSE + /obj/item/ammo_box/a762 name = "stripper clip (7.62mm)" desc = "A stripper clip." diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm index f711f46b54e..5af59b03777 100644 --- a/code/modules/projectiles/boxes_magazines/external/lmg.dm +++ b/code/modules/projectiles/boxes_magazines/external/lmg.dm @@ -1,34 +1,34 @@ -/obj/item/ammo_box/magazine/mm712x82 - name = "box magazine (7.12x82mm)" - icon_state = "a762-50" - ammo_type = /obj/item/ammo_casing/mm712x82 - caliber = CALIBER_712X82MM +/obj/item/ammo_box/magazine/m7mm + name = "box magazine (7mm)" + icon_state = "a7mm-50" + ammo_type = /obj/item/ammo_casing/m7mm + caliber = CALIBER_A7MM max_ammo = 50 -/obj/item/ammo_box/magazine/mm712x82/hollow - name = "box magazine (Hollow-Point 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/hollow +/obj/item/ammo_box/magazine/m7mm/hollow + name = "box magazine (Hollow-Point 7mm)" + ammo_type = /obj/item/ammo_casing/m7mm/hollow -/obj/item/ammo_box/magazine/mm712x82/ap - name = "box magazine (Armor Penetrating 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/ap +/obj/item/ammo_box/magazine/m7mm/ap + name = "box magazine (Armor Penetrating 7mm)" + ammo_type = /obj/item/ammo_casing/m7mm/ap -/obj/item/ammo_box/magazine/mm712x82/incen - name = "box magazine (Incendiary 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/incen +/obj/item/ammo_box/magazine/m7mm/incen + name = "box magazine (Incendiary 7mm)" + ammo_type = /obj/item/ammo_casing/m7mm/incen -/obj/item/ammo_box/magazine/mm712x82/match - name = "box magazine (Match 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/match +/obj/item/ammo_box/magazine/m7mm/match + name = "box magazine (Match 7mm)" + ammo_type = /obj/item/ammo_casing/m7mm/match -/obj/item/ammo_box/magazine/mm712x82/bouncy - name = "box magazine (Rubber 7.12x82mm)" - ammo_type = /obj/item/ammo_casing/mm712x82/bouncy +/obj/item/ammo_box/magazine/m7mm/bouncy + name = "box magazine (Rubber 7mm)" + ammo_type = /obj/item/ammo_casing/m7mm/bouncy -/obj/item/ammo_box/magazine/mm712x82/bouncy/hicap - name = "hi-cap box magazine (Rubber 7.12x82mm)" +/obj/item/ammo_box/magazine/m7mm/bouncy/hicap + name = "hi-cap box magazine (Rubber 7mm)" max_ammo = 150 -/obj/item/ammo_box/magazine/mm712x82/update_icon_state() +/obj/item/ammo_box/magazine/m7mm/update_icon_state() . = ..() - icon_state = "a762-[min(round(ammo_count(), 10), 50)]" //Min is used to prevent high capacity magazines from attempting to get sprites with larger capacities + icon_state = "a7mm-[min(round(ammo_count(), 10), 50)]" //Min is used to prevent high capacity magazines from attempting to get sprites with larger capacities diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm index a4d9bacad89..882fefedec1 100644 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm @@ -10,14 +10,14 @@ . = ..() icon_state = "[base_icon_state]-[LAZYLEN(stored_ammo) ? "full" : "empty"]" -/obj/item/ammo_box/magazine/m556 - name = "toploader magazine (5.56mm)" - icon_state = "5.56m" - ammo_type = /obj/item/ammo_casing/a556 - caliber = CALIBER_A556 +/obj/item/ammo_box/magazine/m223 + name = "toploader magazine (.223)" + icon_state = ".223" + ammo_type = /obj/item/ammo_casing/a223 + caliber = CALIBER_A223 max_ammo = 30 multiple_sprites = AMMO_BOX_FULL_EMPTY -/obj/item/ammo_box/magazine/m556/phasic - name = "toploader magazine (5.56mm Phasic)" - ammo_type = /obj/item/ammo_casing/a556/phasic +/obj/item/ammo_box/magazine/m223/phasic + name = "toploader magazine (.223 Phasic)" + ammo_type = /obj/item/ammo_casing/a223/phasic diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index a4e2489bdfa..7e9fc44f585 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -90,6 +90,10 @@ name = "SMG magazine (Armour Piercing .45)" ammo_type = /obj/item/ammo_casing/c45/ap +/obj/item/ammo_box/magazine/smgm45/hp + name = "SMG magazine (Hollow Point .45)" + ammo_type = /obj/item/ammo_casing/c45/hp + /obj/item/ammo_box/magazine/smgm45/incen name = "SMG magazine (Incendiary .45)" ammo_type = /obj/item/ammo_casing/c45/inc diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index 1c2a6470796..3a841c605a1 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -44,8 +44,8 @@ /obj/item/ammo_box/magazine/toy/m762 name = "donksoft box magazine" - icon_state = "a762-toy" - base_icon_state = "a762" + icon_state = "a7mm-toy" + base_icon_state = "a7mm" ammo_type = /obj/item/ammo_casing/foam_dart max_ammo = 50 @@ -54,5 +54,5 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 10)]" /obj/item/ammo_box/magazine/toy/m762/riot - icon_state = "a762-riot" + icon_state = "a7mm-riot" ammo_type = /obj/item/ammo_casing/foam_dart/riot diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 16b1b787366..387081d6a0c 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -154,7 +154,7 @@ w_class = WEIGHT_CLASS_BULKY inhand_icon_state = "m90" selector_switch_icon = TRUE - accepted_magazine_type = /obj/item/ammo_box/magazine/m556 + accepted_magazine_type = /obj/item/ammo_box/magazine/m223 can_suppress = FALSE var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel burst_size = 3 @@ -229,7 +229,7 @@ icon_state = "arg" inhand_icon_state = "arg" slot_flags = 0 - accepted_magazine_type = /obj/item/ammo_box/magazine/m556 + accepted_magazine_type = /obj/item/ammo_box/magazine/m223 can_suppress = FALSE burst_size = 3 fire_delay = 1 @@ -238,13 +238,13 @@ /obj/item/gun/ballistic/automatic/l6_saw name = "\improper L6 SAW" - desc = "A heavily modified 7.12x82mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." + desc = "A heavily modified 7mm light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." icon_state = "l6" inhand_icon_state = "l6closedmag" base_icon_state = "l6" w_class = WEIGHT_CLASS_HUGE slot_flags = 0 - accepted_magazine_type = /obj/item/ammo_box/magazine/mm712x82 + accepted_magazine_type = /obj/item/ammo_box/magazine/m7mm weapon_weight = WEAPON_HEAVY burst_size = 1 actions_types = list() diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm index f6081c7b070..5601df06dd5 100644 --- a/code/modules/projectiles/projectile/bullets/lmg.dm +++ b/code/modules/projectiles/projectile/bullets/lmg.dm @@ -24,21 +24,22 @@ /obj/projectile/bullet/syndicate_turret damage = 20 -// 7.12x82mm (SAW) +// 7mm (SAW) -/obj/projectile/bullet/mm712x82 - name = "7.12x82mm bullet" +/obj/projectile/bullet/a7mm + name = "7mm bullet" damage = 30 armour_penetration = 5 wound_bonus = -50 wound_falloff_tile = 0 -/obj/projectile/bullet/mm712x82/ap - name = "7.12x82mm armor-piercing bullet" +/obj/projectile/bullet/a7mm/ap + name = "7mm armor-piercing bullet" + damage = 25 armour_penetration = 75 -/obj/projectile/bullet/mm712x82/hp - name = "7.12x82mm hollow-point bullet" +/obj/projectile/bullet/a7mm/hp + name = "7mm hollow-point bullet" damage = 50 sharpness = SHARP_EDGED weak_against_armour = TRUE @@ -46,20 +47,20 @@ bare_wound_bonus = 30 wound_falloff_tile = -8 -/obj/projectile/bullet/incendiary/mm712x82 - name = "7.12x82mm incendiary bullet" +/obj/projectile/bullet/incendiary/a7mm + name = "7mm incendiary bullet" damage = 15 fire_stacks = 3 -/obj/projectile/bullet/mm712x82/match - name = "7.12x82mm match bullet" +/obj/projectile/bullet/a7mm/match + name = "7mm match bullet" ricochets_max = 2 ricochet_chance = 60 ricochet_auto_aim_range = 4 ricochet_incidence_leeway = 55 -/obj/projectile/bullet/mm712x82/bouncy - name = "7.12x82mm rubber bullet" +/obj/projectile/bullet/a7mm/bouncy + name = "7mm rubber bullet" damage = 20 ricochets_max = 40 ricochet_chance = 500 // will bounce off anything and everything, whether they like it or not diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index 8a9ce8c7649..b5411c937be 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -109,6 +109,20 @@ damage = 60 wound_bonus = -30 +/obj/projectile/bullet/a357/phasic + name = ".357 phasic bullet" + icon_state = "gaussphase" + damage = 35 + armour_penetration = 100 + projectile_phasing = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS + +/obj/projectile/bullet/a357/heartseeker + name = ".357 heartseeker bullet" + icon_state = "gauss" + damage = 50 + homing = TRUE + homing_turn_speed = 120 + // admin only really, for ocelot memes /obj/projectile/bullet/a357/match name = ".357 match bullet" diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 712e4dcc0f2..61266ff1769 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -1,19 +1,19 @@ -// 5.56mm (M-90gl Carbine) +// .223 (M-90gl Carbine) -/obj/projectile/bullet/a556 - name = "5.56mm bullet" +/obj/projectile/bullet/a223 + name = ".223 bullet" damage = 35 armour_penetration = 30 wound_bonus = -40 -/obj/projectile/bullet/a556/weak //centcom +/obj/projectile/bullet/a223/weak //centcom damage = 20 -/obj/projectile/bullet/a556/phasic - name = "5.56mm phasic bullet" +/obj/projectile/bullet/a223/phasic + name = ".223 phasic bullet" icon_state = "gaussphase" - damage = 20 - armour_penetration = 70 + damage = 30 + armour_penetration = 100 projectile_phasing = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS // 7.62 (Nagant Rifle) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 813a10b14e9..446654a3489 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -24,6 +24,14 @@ sharpness = NONE embedding = null +/obj/projectile/bullet/shotgun_beanbag/a40mm + name = "rubber slug" + icon_state = "cannonball" + damage = 20 + stamina = 160 //BONK + wound_bonus = 30 + weak_against_armour = TRUE + /obj/projectile/bullet/incendiary/shotgun name = "incendiary slug" icon_state = "pellet" diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index 7dec4b9da21..8befcb690ec 100644 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ b/code/modules/projectiles/projectile/bullets/smg.dm @@ -10,6 +10,11 @@ name = ".45 armor-piercing bullet" armour_penetration = 50 +/obj/projectile/bullet/c45/hp + name = ".45 hollow point bullet" + damage = 50 + weak_against_armour = TRUE + /obj/projectile/bullet/incendiary/c45 name = ".45 incendiary bullet" damage = 15 diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 5d76b547119..899f737d8cc 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -26,13 +26,15 @@ var/random_crits_enabled = TRUE // Worst thing Valve ever added /obj/projectile/bullet/rocket/on_hit(atom/target, blocked = FALSE) + var/random_crit_gib = FALSE if(isliving(target) && prob(1) && random_crits_enabled) var/mob/living/gibbed_dude = target if(gibbed_dude.stat < HARD_CRIT) gibbed_dude.say("Is that a fucking ro-", forced = "hit by rocket") + random_crit_gib = TRUE ..() - do_boom(target) + do_boom(target, random_crit_gib) if(anti_armour_damage && ismecha(target)) var/obj/vehicle/sealed/mecha/M = target M.take_damage(anti_armour_damage) @@ -43,11 +45,15 @@ /** This proc allows us to customize the conditions necesary for the rocket to detonate, allowing for different explosions for living targets, turf targets, among other potential differences. This granularity is helpful for things like the special rockets mechs use. */ -/obj/projectile/bullet/rocket/proc/do_boom(atom/target) +/obj/projectile/bullet/rocket/proc/do_boom(atom/target, random_crit_gib = FALSE) if(!isliving(target)) //if the target isn't alive, so is a wall or something explosion(target, heavy_impact_range = 1, light_impact_range = 2, flame_range = 3, flash_range = 4, explosion_cause = src) else explosion(target, light_impact_range = 2, flame_range = 3, flash_range = 4, explosion_cause = src) + if(random_crit_gib) + var/mob/living/gibbed_dude = target + new /obj/effect/temp_visual/crit(get_turf(gibbed_dude)) + gibbed_dude.gib() /// PM9 HEAP rocket - the anti-anything missile you always craved. /obj/projectile/bullet/rocket/heap diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index e1a444b52d3..b08ffac4647 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -178,6 +178,13 @@ amount_per_transfer_from_this = 50 list_reagents = list(/datum/reagent/medicine/stimulants = 50) +/obj/item/reagent_containers/hypospray/medipen/methamphetamine + name = "methamphetamine medipen" + volume = 24 + amount_per_transfer_from_this = 24 + desc = "Contains a relatively safe quantity of methamphetamine, along with mannitol to ensure that brain damage is kept at a minimum." + list_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/medicine/mannitol = 14) + /obj/item/reagent_containers/hypospray/medipen/morphine name = "morphine medipen" desc = "A rapid way to get you out of a tight situation and fast! You'll feel rather drowsy, though." diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index 0987df92bd9..d28ffa4062c 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -157,6 +157,9 @@ /obj/item/autosurgeon/syndicate/anti_stun starting_organ = /obj/item/organ/internal/cyberimp/brain/anti_stun +/obj/item/autosurgeon/syndicate/anti_drop + starting_organ = /obj/item/organ/internal/cyberimp/brain/anti_drop + /obj/item/autosurgeon/syndicate/reviver starting_organ = /obj/item/organ/internal/cyberimp/chest/reviver diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm index 48f48bf674c..55624e88bf1 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm @@ -167,15 +167,9 @@ name = "boxed cybernetic implants" desc = "A sleek, sturdy box." icon_state = "cyber_implants" - var/list/boxed = list( - /obj/item/autosurgeon/syndicate/thermal_eyes, - /obj/item/autosurgeon/syndicate/xray_eyes, - /obj/item/autosurgeon/syndicate/anti_stun, - /obj/item/autosurgeon/syndicate/reviver) - var/amount = 5 /obj/item/storage/box/cyber_implants/PopulateContents() - var/implant - while(contents.len <= amount) - implant = pick(boxed) - new implant(src) + new /obj/item/autosurgeon/syndicate/xray_eyes(src) + new /obj/item/autosurgeon/syndicate/anti_stun(src) + new /obj/item/autosurgeon/syndicate/reviver(src) + new /obj/item/autosurgeon/syndicate/anti_drop(src) diff --git a/code/modules/uplink/uplink_items/ammunition.dm b/code/modules/uplink/uplink_items/ammunition.dm index 4ab97445251..292f87ffe13 100644 --- a/code/modules/uplink/uplink_items/ammunition.dm +++ b/code/modules/uplink/uplink_items/ammunition.dm @@ -58,5 +58,5 @@ progression_minimum = 30 MINUTES item = /obj/item/ammo_box/a357 cost = 4 - purchasable_from = ~UPLINK_CLOWN_OPS + purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //nukies get their own version illegal_tech = FALSE diff --git a/code/modules/uplink/uplink_items/clownops.dm b/code/modules/uplink/uplink_items/clownops.dm new file mode 100644 index 00000000000..b973869cf12 --- /dev/null +++ b/code/modules/uplink/uplink_items/clownops.dm @@ -0,0 +1,141 @@ + +// Clown Operative Stuff +// Maybe someday, someone will care to maintain this + +/datum/uplink_item/weapon_kits/pie_cannon + name = "Banana Cream Pie Cannon" + desc = "A special pie cannon for a special clown, this gadget can hold up to 20 pies and automatically fabricates one every two seconds!" + cost = 10 + item = /obj/item/pneumatic_cannon/pie/selfcharge + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/weapon_kits/bananashield + name = "Bananium Energy Shield" + desc = "A clown's most powerful defensive weapon, this personal shield provides near immunity to ranged energy attacks \ + by bouncing them back at the ones who fired them. It can also be thrown to bounce off of people, slipping them, \ + and returning to you even if you miss. WARNING: DO NOT ATTEMPT TO STAND ON SHIELD WHILE DEPLOYED, EVEN IF WEARING ANTI-SLIP SHOES." + item = /obj/item/shield/energy/bananium + cost = 16 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/weapon_kits/clownsword + name = "Bananium Energy Sword" + desc = "An energy sword that deals no damage, but will slip anyone it contacts, be it by melee attack, thrown \ + impact, or just stepping on it. Beware friendly fire, as even anti-slip shoes will not protect against it." + item = /obj/item/melee/energy/sword/bananium + cost = 3 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/weapon_kits/clownoppin + name = "Ultra Hilarious Firing Pin" + desc = "A firing pin that, when inserted into a gun, makes that gun only useable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." + cost = 1 //much cheaper for clown ops than for clowns + item = /obj/item/firing_pin/clown/ultra + purchasable_from = UPLINK_CLOWN_OPS + illegal_tech = FALSE + +/datum/uplink_item/weapon_kits/clownopsuperpin + name = "Super Ultra Hilarious Firing Pin" + desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." + cost = 4 //much cheaper for clown ops than for clowns + item = /obj/item/firing_pin/clown/ultra/selfdestruct + purchasable_from = UPLINK_CLOWN_OPS + illegal_tech = FALSE + +/datum/uplink_item/weapon_kits/foamsmg + name = "Toy Submachine Gun" + desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine." + item = /obj/item/gun/ballistic/automatic/c20r/toy + cost = 5 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/weapon_kits/foammachinegun + name = "Toy Machine Gun" + desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \ + riot grade darts, that can briefly incapacitate someone in just one volley." + item = /obj/item/gun/ballistic/automatic/l6_saw/toy + cost = 10 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/explosives/bombanana + name = "Bombanana" + desc = "A banana with an explosive taste! discard the peel quickly, as it will explode with the force of a Syndicate minibomb \ + a few seconds after the banana is eaten." + item = /obj/item/food/grown/banana/bombanana + cost = 4 //it is a bit cheaper than a minibomb because you have to take off your helmet to eat it, which is how you arm it + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/explosives/clown_bomb_clownops + name = "Clown Bomb" + desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ + with a minimum of %MIN_BOMB_TIMER seconds, and can be bolted to the floor with a wrench to prevent \ + movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ + transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ + be defused, and some crew may attempt to do so." + item = /obj/item/sbeacondrop/clownbomb + cost = 15 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/explosives/clown_bomb_clownops/New() + . = ..() + desc = replacetext(desc, "%MIN_BOMB_TIMER", SYNDIEBOMB_MIN_TIMER_SECONDS) + +/datum/uplink_item/explosives/tearstache + name = "Teachstache Grenade" + desc = "A teargas grenade that launches sticky moustaches onto the face of anyone not wearing a clown or mime mask. The moustaches will \ + remain attached to the face of all targets for one minute, preventing the use of breath masks and other such devices." + item = /obj/item/grenade/chem_grenade/teargas/moustache + cost = 3 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/explosives/pinata + name = "Weapons Grade Pinata Kit" + desc = "A pinata filled with both candy and explosives as well as two belts to carry them on, crack it open and see what you get!" + item = /obj/item/storage/box/syndie_kit/pinata + purchasable_from = UPLINK_CLOWN_OPS + limited_stock = 1 + cost = 12 //This is effectively the clown ops version of the grenadier belt where you should on average get 8 explosives if you use a weapon with exactly 10 force. + surplus = 0 + +/datum/uplink_item/reinforcement/clown_reinforcement + name = "Clown Reinforcements" + desc = "Call in an additional clown to share the fun, equipped with full starting gear, but no telecrystals." + item = /obj/item/antag_spawner/nuke_ops/clown + cost = 20 + purchasable_from = UPLINK_CLOWN_OPS + restricted = TRUE + refundable = TRUE + +/datum/uplink_item/mech/honker + name = "Dark H.O.N.K." + desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000." + item = /obj/vehicle/sealed/mecha/honker/dark/loaded + cost = 80 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/stealthy_tools/combatbananashoes + name = "Combat Banana Shoes" + desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ + can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ + squeak significantly louder." + item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat + cost = 6 + surplus = 0 + purchasable_from = UPLINK_CLOWN_OPS + +/datum/uplink_item/badass/clownopclumsinessinjector //clowns can buy this too, but it's in the role-restricted items section for them + name = "Clumsiness Injector" + desc = "Inject yourself with this to become as clumsy as a clown... or inject someone ELSE with it to make THEM as clumsy as a clown. Useful for clown operatives who wish to reconnect with their former clownish nature or for clown operatives who wish to torment and play with their prey before killing them." + item = /obj/item/dnainjector/clumsymut + cost = 1 + purchasable_from = UPLINK_CLOWN_OPS + illegal_tech = FALSE + diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index 1d3b3cb0a6b..0cdcf3a7bb7 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -68,7 +68,7 @@ item = /obj/item/dualsaber cost = 16 - purchasable_from = ~UPLINK_CLOWN_OPS + purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //nukies get their own version /datum/uplink_item/dangerous/doublesword/get_discount_value(discount_type) switch(discount_type) @@ -98,4 +98,4 @@ progression_minimum = 30 MINUTES cost = 13 surplus = 50 - purchasable_from = ~UPLINK_CLOWN_OPS + purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) //nukies get their own version diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 8436d72028b..42bc0f56069 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -1,47 +1,489 @@ -/datum/uplink_item/bundles_tc/bulldog - name = "Bulldog bundle" - desc = "Lean and mean: Optimized for people that want to get up close and personal. Contains the popular \ - Bulldog shotgun, two 12g buckshot drums, and a pair of Thermal imaging goggles." - item = /obj/item/storage/backpack/duffelbag/syndie/bulldogbundle - cost = 13 // normally 16 +// Nuclear Operative Weapons and Ammunition + +/datum/uplink_category/weapon_kits + name = "Weapon Kits (Recommended)" + weight = 30 + +/datum/uplink_item/weapon_kits + category = /datum/uplink_category/weapon_kits + surplus = 40 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/bundles_tc/c20r - name = "C-20r bundle" - desc = "Old Faithful: The classic C-20r, bundled with two magazines and a suppressor at discount price." - item = /obj/item/storage/backpack/duffelbag/syndie/c20rbundle - cost = 14 // normally 16 +// ~~ Ammunition Categories ~~ + +/datum/uplink_category/ammo_nuclear + name = "Additional and Unique Ammunition" + weight = 29 + +/datum/uplink_item/ammo_nuclear + category = /datum/uplink_category/ammo_nuclear + surplus = 40 purchasable_from = UPLINK_NUKE_OPS +// Basic: Run of the mill ammunition for various firearms +/datum/uplink_item/ammo_nuclear/basic + cost = 2 + +// Armor Penetrating: strong into armor, low damage +/datum/uplink_item/ammo_nuclear/ap + cost = 4 + +// Hollow Point: weak into armor, high damage +/datum/uplink_item/ammo_nuclear/hp + cost = 4 + +// Incendiary: sets target on fire, does less damage +/datum/uplink_item/ammo_nuclear/incendiary + cost = 3 + +// Special: does something particularly extra than just any of the above +/datum/uplink_item/ammo_nuclear/special + cost = 5 + +// ~~ Weapon Categories ~~ + +//Low-cost firearms: Around 8 TC each. Meant for easy squad weapon purchases + +/datum/uplink_item/weapon_kits/low_cost + cost = 8 + surplus = 40 + purchasable_from = UPLINK_NUKE_OPS + +// ~~ Bulldog Shotgun ~~ + +/datum/uplink_item/weapon_kits/low_cost/shotgun + name = "Bulldog Shotgun Case (Moderate)" + desc = "A fully-loaded semi-automatic drum-fed shotgun, complete with a secondary magazine you can hotswap. The gun has a handy label to explain how. \ + Compatible with all 12g rounds. Designed for close quarter anti-personnel engagements. Comes with three spare magazines." + item = /obj/item/storage/toolbox/guncase/bulldog + +/datum/uplink_item/ammo_nuclear/basic/buck + name = "12g Buckshot Drum (Bulldog)" + desc = "An additional 8-round buckshot magazine for use with the Bulldog shotgun. Front towards enemy." + item = /obj/item/ammo_box/magazine/m12g + +/datum/uplink_item/ammo_nuclear/basic/slug + name = "12g Slug Drum (Bulldog)" + desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \ + Now 8 times less likely to shoot your pals." + item = /obj/item/ammo_box/magazine/m12g/slug + +/datum/uplink_item/ammo_nuclear/incendiary/dragon + name = "12g Dragon's Breath Drum (Bulldog)" + desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \ + 'I'm a fire starter, twisted fire starter!'" + item = /obj/item/ammo_box/magazine/m12g/dragon + purchasable_from = UPLINK_NUKE_OPS + +/datum/uplink_item/ammo_nuclear/special/meteor + name = "12g Meteorslug Shells (Bulldog)" + desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ + Great for blasting holes into the hull and knocking down enemies." + item = /obj/item/ammo_box/magazine/m12g/meteor + purchasable_from = UPLINK_NUKE_OPS + +// ~~ Ansem Pistol ~~ + +/datum/uplink_item/weapon_kits/low_cost/clandestine + name = "Ansem Pistol Case (Easy/Spare)" + desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ + with suppressors. Comes with three spare magazines." + item = /obj/item/storage/toolbox/guncase/clandestine + +/datum/uplink_item/ammo_nuclear/basic/m10mm + name = "10mm Handgun Magazine (Ansem)" + desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol." + item = /obj/item/ammo_box/magazine/m10mm + +/datum/uplink_item/ammo_nuclear/ap/m10mm + name = "10mm Armour Piercing Magazine (Ansem)" + desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ + These rounds are less effective at injuring the target but penetrate protective gear." + item = /obj/item/ammo_box/magazine/m10mm/ap + +/datum/uplink_item/ammo_nuclear/hp/m10mm + name = "10mm Hollow Point Magazine (Ansem)" + desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ + These rounds are more damaging but ineffective against armour." + item = /obj/item/ammo_box/magazine/m10mm/hp + +/datum/uplink_item/ammo_nuclear/incendiary/m10mm + name = "10mm Incendiary Magazine (Ansem)" + desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ + Loaded with incendiary rounds which inflict less damage, but ignite the target." + item = /obj/item/ammo_box/magazine/m10mm/fire + +//Medium-cost: 14 TC each. Meant for more expensive purchases with a goal in mind. + +/datum/uplink_item/weapon_kits/medium_cost + cost = 14 + surplus = 20 + purchasable_from = UPLINK_NUKE_OPS + +// ~~ C-20r Submachine Gun ~~ + +/datum/uplink_item/weapon_kits/medium_cost/smg + name = "C-20r Submachine Gun Case (Easy)" + desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \ + 24-round magazine and is compatible with suppressors. Comes with spare three magazines." + item = /obj/item/storage/toolbox/guncase/c20r + +/datum/uplink_item/ammo_nuclear/basic/smg + name = ".45 SMG Magazine (C-20r)" + desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun." + item = /obj/item/ammo_box/magazine/smgm45 + +/datum/uplink_item/ammo_nuclear/ap/smg + name = ".45 Armor Piercing SMG Magazine (C-20r)" + desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun.\ + These rounds are less effective at injuring the target but penetrate protective gear." + item = /obj/item/ammo_box/magazine/smgm45/ap + +/datum/uplink_item/ammo_nuclear/hp/smg + name = ".45 Hollow Point SMG Magazine (C-20r)" + desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun.\ + These rounds are more damaging but ineffective against armour." + item = /obj/item/ammo_box/magazine/smgm45/hp + +/datum/uplink_item/ammo_nuclear/incendiary/smg + name = ".45 Incendiary SMG Magazine (C-20r)" + desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun.\ + Loaded with incendiary rounds which inflict little damage, but ignite the target." + item = /obj/item/ammo_box/magazine/smgm45/incen + cost = 4 + purchasable_from = UPLINK_NUKE_OPS + +// ~~ Energy Sword and Shield ~~ + +/datum/uplink_item/weapon_kits/medium_cost/sword_and_board + name = "Energy Shield and Sword Case (Very Hard)" + desc = "A case containing an energy sword and energy shield. The shield is capable of deflecting \ + energy and laser projectiles, and the sword most forms of attack. Perfect for the enterprising nuclear knight. " + item = /obj/item/storage/toolbox/guncase/sword_and_board + +// ~~ Syndicate Revolver ~~ +// Nuclear operatives get a special deal on their revolver purchase compared to traitors. + +/datum/uplink_item/weapon_kits/medium_cost/revolvercase + name = "Syndicate Revolver Case (Moderate)" + desc = "Waffle Co.'s modernized Syndicate revolver. Fires 7 brutal rounds of .357 Magnum. \ + A classic operative weapon, brought to the modern era. Comes with 3 additional speedloaders of .357." + item = /obj/item/storage/toolbox/guncase/revolver + +/datum/uplink_item/ammo_nuclear/basic/revolver + name = ".357 Speed Loader (Revolver)" + desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ + For when you really need a lot of things dead. Operatives get a discount from most of our agents!" + item = /obj/item/ammo_box/a357 + +/datum/uplink_item/ammo_nuclear/special/revolver/phasic + name = ".357 Phasic Speed Loader (Revolver)" + desc = "A speed loader that contains seven additional .357 Magnum phasic rounds; usable with the Syndicate revolver. \ + These bullets are made from an experimental alloy, 'Ghost Lead', that allows it to pass through almost any non-organic material. \ + The name is a misnomer. It doesn't contain any lead whatsoever!" + item = /obj/item/ammo_box/a357/phasic + +/datum/uplink_item/ammo_nuclear/special/revolver/heartseeker + name = ".357 Heartseeker Speed Loader (Revolver)" + desc = "A speed loader that contains seven additional .357 Magnum heartseeker rounds; usable with the Syndicate revolver. \ + Able to veer straight into targets! Don't miss a shot with heartseeker! As seen in the hit NTFlik horror-space western film, Forget-Me-Not! \ + Brought to you by Roseus Galactic!" + item = /obj/item/ammo_box/a357/heartseeker + cost = 3 + +// ~~ Grenade Launcher ~~ +// 'If god had wanted you to live, he would not have created ME!' + +/datum/uplink_item/weapon_kits/medium_cost/rawketlawnchair + name = "84mm Rocket Propelled Grenade Launcher (Hard)" + desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \ + Guaranteed to send your target out with a bang or your money back! Comes with a bouquet of additional rockets!" + item = /obj/item/storage/toolbox/guncase/rocketlauncher + +/datum/uplink_item/ammo_nuclear/basic/rocket + name = "84mm HE Rocket Bouquet (Rocket Launcher)" + desc = "Three low-yield anti-personnel HE rocket wrapped in a bundle. Gonna take you out in style!" + item = /obj/item/ammo_box/rocket + +/datum/uplink_item/ammo_nuclear/ap/rocket + name = "84mm HEAP Rocket (Rocket Launcher)" + desc = "A high-yield HEAP rocket; extremely effective against literally everything and anything near that thing that doesn't exist anymore. \ + Strike fear into the hearts of your enemies." + item = /obj/item/ammo_casing/rocket/heap + +//High-cost: 18 TC each. Really should only be coming out during war for how powerful it is, or be the majority of your TC outside of war. + +/datum/uplink_item/weapon_kits/high_cost + cost = 18 + surplus = 10 + purchasable_from = UPLINK_NUKE_OPS + +// ~~ L6 SAW Machine Gun ~~ + +/datum/uplink_item/weapon_kits/high_cost/machinegun + name = "L6 Squad Automatic Weapon (Moderate)" + desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \ + This deadly weapon has a massive 50-round magazine of devastating 7mm ammunition." + item = /obj/item/gun/ballistic/automatic/l6_saw + +/datum/uplink_item/ammo_nuclear/basic/machinegun + name = "7mm Box Magazine (L6 SAW)" + desc = "A 50-round magazine of 7mm ammunition for use with the L6 SAW. \ + By the time you need to use this, you'll already be standing on a pile of corpses." + item = /obj/item/ammo_box/magazine/m7mm + +/datum/uplink_item/ammo_nuclear/ap/machinegun + name = "7mm (Armor Penetrating) Box Magazine (L6 SAW)" + desc = "A 50-round magazine of 7mm ammunition for use in the L6 SAW; equipped with special properties \ + to puncture even the most durable armor." + item = /obj/item/ammo_box/magazine/m7mm/ap + +/datum/uplink_item/ammo_nuclear/hp/machinegun + name = "7mm (Hollow-Point) Box Magazine (L6 SAW)" + desc = "A 50-round magazine of 7mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \ + with the unarmored masses of crew." + item = /obj/item/ammo_box/magazine/m7mm/hollow + +/datum/uplink_item/ammo_nuclear/incendiary/machinegun + name = "7mm (Incendiary) Box Magazine (L6 SAW)" + desc = "A 50-round magazine of 7mm ammunition for use in the L6 SAW; tipped with a special flammable \ + mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." + item = /obj/item/ammo_box/magazine/m7mm/incen + +/datum/uplink_item/ammo_nuclear/special/machinegun + name = "7mm (Match) Box Magazine (L6 SAW)" + desc = "A 50-round magazine of 7mm ammunition for use in the L6 SAW; you didn't know there was a demand for match grade \ + precision bullet hose ammo, but these rounds are finely tuned and perfect for ricocheting off walls all fancy-like." + item = /obj/item/ammo_box/magazine/m7mm/match + +// ~~ M-90gl Carbine ~~ + +/datum/uplink_item/weapon_kits/high_cost/carbine + name = "M-90gl Carbine Case (Hard)" + desc = "A fully-loaded, specialized three-round burst carbine that fires .223 ammunition from a 30 round magazine \ + with a 40mm underbarrel grenade launcher. Use secondary-fire to fire the grenade launcher. Comes with two spare magazines \ + and a box of 40mm rubber slugs." + item = /obj/item/storage/toolbox/guncase/m90gl + +/datum/uplink_item/ammo_nuclear/basic/carbine + name = ".223 Toploader Magazine (M-90gl)" + desc = "An additional 30-round .223 magazine; suitable for use with the M-90gl carbine. \ + These bullets pack less punch than 7mm rounds, but they still offer more power than .45 ammo due to their innate armour penetration." + item = /obj/item/ammo_box/magazine/m223 + +/datum/uplink_item/ammo_nuclear/special/carbine + name = ".223 Toploader Phasic Magazine (M-90gl)" + desc = "An additional 30-round .223 magazine; suitable for use with the M-90gl carbine. \ + These bullets are made from an experimental alloy, 'Ghost Lead', that allows it to pass through almost any non-organic material. \ + The name is a misnomer. It doesn't contain any lead whatsoever!" + item = /obj/item/ammo_box/magazine/m223/phasic + +/datum/uplink_item/ammo_nuclear/basic/carbine/a40mm + name = "40mm Grenade Box (M-90gl)" + desc = "A box of 40mm HE grenades for use with the M-90gl's under-barrel grenade launcher. \ + Your teammates will ask you to not shoot these down small hallways. \ + You'll do it anyway." + item = /obj/item/ammo_box/a40mm + +// ~~ Anti-Materiel Sniper Rifle ~~ + +/datum/uplink_item/weapon_kits/high_cost/sniper + name = "Anti-Materiel Sniper Rifle Briefcase (Hard)" + desc = "An outdated, but still extremely powerful anti-material sniper rifle. Fires .50 BMG cartridges from a 6 round magazine. \ + Can be fitted with a suppressor. If anyone asks how that even works, tell them it's Nanotrasen's fault. Comes with \ + 3 spare magazines; 2 regular magazines and 1 disruptor magazine. Also comes with a suit and tie." + item = /obj/item/storage/briefcase/sniper + +/datum/uplink_item/ammo_nuclear/basic/sniper + name = ".50 BMG Magazine (AMSR)" + desc = "An additional standard 6-round magazine for use with .50 sniper rifles." + item = /obj/item/ammo_box/magazine/sniper_rounds + +/datum/uplink_item/ammo_nuclear/basic/sniper/surplussniper + name = ".50 BMG Surplus Magazine Box (AMSR)" + desc = "A box full of surplus .50 BMG magazines. Not as good as high quality magazines, \ + usually lacking the penetrative power and impact, but good enough to keep the gun firing. \ + Useful for arming a squad." + cost = 7 //1 TC per magazine, special price for a special deal! + item = /obj/item/storage/box/syndie_kit/sniper_surplus + +/datum/uplink_item/ammo_nuclear/ap/sniper/penetrator + name = ".50 BMG Penetrator Magazine (AMSR)" + desc = "A 6-round magazine of penetrator ammo designed for use with .50 sniper rifles. \ + Can pierce walls and multiple enemies." + item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator + +/datum/uplink_item/ammo_nuclear/incendiary/sniper + name = ".50 BMG Incendiary Magazine (AMSR)" + desc = "A 6-round magazine of incendiary ammo. \ + Sets your enemies ablaze, along with everyone else next to them!" + item = /obj/item/ammo_box/magazine/sniper_rounds/incendiary + +/datum/uplink_item/ammo_nuclear/basic/sniper/disruptor + name = ".50 BMG Disruptor Magazine (AMSR)" + desc = "A 6-round magazine of disruptor ammo designed for use with .50 sniper rifles. \ + Put your enemies and their alarm clock to sleep today!" + item = /obj/item/ammo_box/magazine/sniper_rounds/disruptor + +/datum/uplink_item/ammo_nuclear/special/sniper/marksman + name = ".50 BMG Marksman Magazine (AMSR)" + desc = "A 6-round magazine of marksman ammo designed for use with .50 sniper rifles. \ + Blast your enemies with instant shots! Just watch out for the rebound..." + item = /obj/item/ammo_box/magazine/sniper_rounds/marksman + +/datum/uplink_item/weapon_kits/high_cost/cqc + name = "CQC Equipment Case (Very Hard)" + desc = "Contains a manual that instructs you in the ways of CQC, or Close Quarters Combat. Comes with a stealth implant and a snazzy bandana (and a hat stabilizer to go with it)." + item = /obj/item/book/granter/martial/cqc + purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS + surplus = 0 + +/datum/uplink_item/weapon_kits/high_cost/doublesword + name = "Double-Energy Sword Case (Very Hard)" + desc = "A case containing a double-energy sword, anti-slip module, meth autoinjector, and a bar of soap. \ + Some say the most infamous nuclear operatives utilized this combination of equipment to slaughter hundreds \ + of Nanotrasen employees. However, some also say this is an embellishment from the Tiger Co-operative. \ + The soap did most of the work. Comes with a prisoner uniform so you fit the part." + item = /obj/item/storage/toolbox/guncase/doublesword + +//Meme weapons: Literally just weapons used as a joke, shouldn't be particularly expensive. + +/datum/uplink_item/weapon_kits/surplus_smg + name = "Surplus SMG Case (Flukie)" + desc = "A horribly outdated automatic weapon. Why would you want to use this? Comes with...rations." + item = /obj/item/gun/ballistic/automatic/plastikov + cost = 2 + purchasable_from = UPLINK_NUKE_OPS + +/datum/uplink_item/ammo_nuclear/surplus_smg + name = "Surplus SMG Magazine (Surplus)" + desc = "A cylindrical magazine designed for the PP-95 SMG." + item = /obj/item/ammo_box/magazine/plastikov9mm + cost = 1 + purchasable_from = UPLINK_NUKE_OPS + illegal_tech = FALSE + +// Explosives and Grenades +// ~~ Grenades ~~ + +/datum/uplink_item/explosives/grenades + cost = 15 + surplus = 35 + purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS + +/datum/uplink_item/explosives/grenades/buzzkill + name = "Buzzkill Grenade Box" + desc = "A box with three grenades that release a swarm of angry bees upon activation. These bees indiscriminately attack friend or foe \ + with random toxins. Courtesy of the BLF and Tiger Cooperative." + item = /obj/item/storage/box/syndie_kit/bee_grenades + +/datum/uplink_item/explosives/grenades/virus_grenade + name = "Fungal Tuberculosis Grenade Box" + desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) \ + autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ + the BVAK solution." + item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade + restricted = TRUE + +/datum/uplink_item/explosives/grenades/viscerators + name = "Viscerator Delivery Grenade Box" + desc = "A box containing unique grenades that deploys a swarm of viscerators upon activation, which will chase down and shred \ + any non-operatives in the area." + item = /obj/item/storage/box/syndie_kit/manhack_grenades + +// ~~ Grenadier's Belt Kit ~~ + +/datum/uplink_item/weapon_kits/high_cost/grenadier + name = "Grenadier's Belt and Grenade Launcher Kit (Hard)" + desc = "A belt containing 26 lethally dangerous and destructive grenades, along with a grenade launcher to fire them. Comes with an extra multitool and screwdriver." + item = /obj/item/storage/box/syndie_kit/demoman + purchasable_from = UPLINK_NUKE_OPS + +// ~~ Detonator: In case you lose the old one ~~ + +/datum/uplink_item/explosives/syndicate_detonator + name = "Syndicate Detonator" + desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button \ + and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ + Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of \ + the blast radius before using the detonator." + item = /obj/item/syndicatedetonator + cost = 1 + purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS + +// Support (Borgs and Reinforcements) + +/datum/uplink_category/reinforcements + name = "Reinforcements" + weight = 28 + +/datum/uplink_item/reinforcements + category = /datum/uplink_category/reinforcements + surplus = 0 + cost = 35 + purchasable_from = UPLINK_NUKE_OPS + restricted = TRUE + refundable = TRUE + +/datum/uplink_item/reinforcements/operative_reinforcement + name = "Operative Reinforcements" + desc = "Call in an additional team member from one of our factions. \ + They'll come equipped with a mere surplus SMG, so arming them is recommended." + item = /obj/item/antag_spawner/nuke_ops + +/datum/uplink_item/reinforcements/assault_borg + name = "Syndicate Assault Cyborg" + desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. \ + Comes equipped with a self-resupplying LMG, a grenade launcher, energy sword, emag, pinpointer, flash and crowbar." + item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault + +/datum/uplink_item/reinforcements/medical_borg + name = "Syndicate Medical Cyborg" + desc = "A combat medical cyborg. Has limited offensive potential, but makes more than up for it with its support capabilities. \ + It comes equipped with a nanite hypospray, a medical beamgun, combat defibrillator, full surgical kit including an energy saw, an emag, pinpointer and flash. \ + Thanks to its organ storage bag, it can perform surgery as well as any humanoid." + item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical + +/datum/uplink_item/reinforcements/saboteur_borg + name = "Syndicate Saboteur Cyborg" + desc = "A streamlined engineering cyborg, equipped with covert modules. Also incapable of leaving the welder in the shuttle. \ + Aside from regular Engineering equipment, it comes with a special destination tagger that lets it traverse disposals networks. \ + Its chameleon projector lets it disguise itself as a Nanotrasen cyborg, on top it has thermal vision and a pinpointer." + item = /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur + +// ~~ Disposable Sentry Gun ~~ +// Technically not a spawn but it is a kind of reinforcement...I guess. + +/datum/uplink_item/reinforcements/turretbox + name = "Disposable Sentry Gun" + desc = "A disposable sentry gun deployment system cleverly disguised as a toolbox, apply wrench for functionality." + item = /obj/item/storage/toolbox/emergency/turret/nukie + cost = 16 + restricted = FALSE + refundable = FALSE + +// Bundles + /datum/uplink_item/bundles_tc/cyber_implants name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon." + desc = "A box containing x-ray eyes, a CNS Rebooter and Reviver implant. Comes with an autosurgeon for each." item = /obj/item/storage/box/cyber_implants - cost = 40 + cost = 25 //worth around 32 TC purchasable_from = UPLINK_NUKE_OPS /datum/uplink_item/bundles_tc/medical name = "Medical bundle" desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \ - a Donksoft LMG, a box of riot darts and a magboot MODsuit module to rescue your friends in no-gravity environments." + a Donksoft LMG, a box of riot darts and a magboot MODsuit module to rescue your friends in no-gravity environments." item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle cost = 25 // normally 31 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/bundles_tc/sniper - name = "Sniper bundle" - desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, \ - two .50 BMG disruptor magazines, a free suppressor, and a sharp-looking tactical turtleneck suit. \ - We'll throw in a free red tie if you order NOW." - item = /obj/item/storage/briefcase/sniperbundle - cost = 20 // normally 27, the suit and office supplies are free! - purchasable_from = UPLINK_NUKE_OPS - /datum/uplink_item/bundles_tc/firestarter name = "Spetsnaz Pyro bundle" desc = "For systematic suppression of carbon lifeforms in close quarters: Contains an Elite MODsuit with a flamethrower attachment, \ - Stechkin APS machine pistol, two incendiary magazines, a minibomb and a stimulant syringe. \ - Order NOW and comrade Boris will throw in an extra tracksuit." + Stechkin APS machine pistol, two incendiary magazines, a minibomb and a stimulant syringe. \ + Order NOW and comrade Boris will throw in an extra tracksuit." item = /obj/item/storage/backpack/duffelbag/syndie/firestarter cost = 30 purchasable_from = UPLINK_NUKE_OPS @@ -49,599 +491,87 @@ /datum/uplink_item/bundles_tc/induction_kit name = "Syndicate Induction Kit" desc = "Met a fellow syndicate agent on the station? Kept some TC in reserve just in case? Or are you communicating with one via the Syndicate channel? \ - Get this kit and you'll be able to induct them into your operative team via a special implant. \ - Additionally, it contains an assortment of useful gear for new operatives, including a space suit, an Ansem pistol, two spare magazines, and more! \ - *NOT* for usage with Reinforcements, and does not brainwash the target!" + Get this kit and you'll be able to induct them into your operative team via a special implant. \ + Additionally, it contains an assortment of useful gear for new operatives, including a space suit, an Ansem pistol, two spare magazines, and more! \ + *NOT* for usage with Reinforcements, and does not brainwash the target!" item = /obj/item/storage/box/syndie_kit/induction_kit cost = 10 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/dangerous/rawketlawnchair - name = "84mm Rocket Propelled Grenade Launcher" - desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \ - Guaranteed to send your target out with a bang or your money back!" - item = /obj/item/gun/ballistic/rocketlauncher - cost = 8 - surplus = 30 - purchasable_from = UPLINK_NUKE_OPS +// Mech related gear -/datum/uplink_item/dangerous/pie_cannon - name = "Banana Cream Pie Cannon" - desc = "A special pie cannon for a special clown, this gadget can hold up to 20 pies and automatically fabricates one every two seconds!" - cost = 10 - item = /obj/item/pneumatic_cannon/pie/selfcharge - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS +/datum/uplink_category/mech + name = "Mech Reinforcement" + weight = 27 -/datum/uplink_item/dangerous/bananashield - name = "Bananium Energy Shield" - desc = "A clown's most powerful defensive weapon, this personal shield provides near immunity to ranged energy attacks \ - by bouncing them back at the ones who fired them. It can also be thrown to bounce off of people, slipping them, \ - and returning to you even if you miss. WARNING: DO NOT ATTEMPT TO STAND ON SHIELD WHILE DEPLOYED, EVEN IF WEARING ANTI-SLIP SHOES." - item = /obj/item/shield/energy/bananium - cost = 16 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/dangerous/clownsword - name = "Bananium Energy Sword" - desc = "An energy sword that deals no damage, but will slip anyone it contacts, be it by melee attack, thrown \ - impact, or just stepping on it. Beware friendly fire, as even anti-slip shoes will not protect against it." - item = /obj/item/melee/energy/sword/bananium - cost = 3 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/dangerous/clownoppin - name = "Ultra Hilarious Firing Pin" - desc = "A firing pin that, when inserted into a gun, makes that gun only useable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." - cost = 1 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra - purchasable_from = UPLINK_CLOWN_OPS - illegal_tech = FALSE - -/datum/uplink_item/dangerous/clownopsuperpin - name = "Super Ultra Hilarious Firing Pin" - desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." - cost = 4 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra/selfdestruct - purchasable_from = UPLINK_CLOWN_OPS - illegal_tech = FALSE - -/datum/uplink_item/dangerous/shotgun - name = "Bulldog Shotgun" - desc = "A fully-loaded semi-automatic drum-fed shotgun, complete with a secondary magazine. Compatible with all 12g rounds. Designed for close \ - quarter anti-personnel engagements." - item = /obj/item/gun/ballistic/shotgun/bulldog - cost = 8 - surplus = 40 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/dangerous/smg - name = "C-20r Submachine Gun" - desc = "A fully-loaded Scarborough Arms bullpup submachine gun. The C-20r fires .45 rounds with a \ - 24-round magazine and is compatible with suppressors." - item = /obj/item/gun/ballistic/automatic/c20r - cost = 13 - surplus = 40 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/dangerous/shield - name = "Energy Shield" - desc = "An incredibly useful personal shield projector, capable of reflecting energy projectiles and defending \ - against other attacks. Pair with an Energy Sword for a killer combination." - item = /obj/item/shield/energy - cost = 16 - surplus = 20 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/dangerous/machinegun - name = "L6 Squad Automatic Weapon" - desc = "A fully-loaded Aussec Armoury belt-fed machine gun. \ - This deadly weapon has a massive 50-round magazine of devastating 7.12x82mm ammunition." - item = /obj/item/gun/ballistic/automatic/l6_saw - cost = 18 +/datum/uplink_item/mech + category = /datum/uplink_category/mech surplus = 0 purchasable_from = UPLINK_NUKE_OPS + restricted = TRUE -/datum/uplink_item/dangerous/carbine - name = "M-90gl Carbine" - desc = "A fully-loaded, specialized three-round burst carbine that fires 5.56mm ammunition from a 30 round magazine \ - with a 40mm underbarrel grenade launcher. Use secondary-fire to fire the grenade launcher." - item = /obj/item/gun/ballistic/automatic/m90 - cost = 14 - surplus = 50 - purchasable_from = UPLINK_NUKE_OPS +// ~~ Mechs ~~ -/datum/uplink_item/dangerous/sniper - name = "Anti-Materiel Sniper Rifle" - desc = "An outdated, but still extremely powerful anti-material sniper rifle. Fires .50 BMG cartridges from a 6 round magazine. \ - Can be fitted with a suppressor. If anyone asks how that even works, tell them it's Nanotrasen's fault." - item = /obj/item/gun/ballistic/rifle/sniper_rifle/syndicate - cost = 16 - surplus = 25 - purchasable_from = UPLINK_NUKE_OPS +/datum/uplink_item/mech/gygax + name = "Dark Gygax Exosuit" + desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ + for hit-and-run style attacks. Features a scattershot shotgun, armor boosters against melee and ranged attacks, ion thrusters and a Tesla energy array." + item = /obj/vehicle/sealed/mecha/gygax/dark/loaded + cost = 60 -/datum/uplink_item/dangerous/pistol_nukeop - name = "Ansem Pistol" - desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ - with suppressors." - item = /obj/item/gun/ballistic/automatic/pistol/clandestine - cost = 6 - purchasable_from = UPLINK_NUKE_OPS +/datum/uplink_item/mech/mauler + name = "Mauler Exosuit" + desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ + and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." + item = /obj/vehicle/sealed/mecha/marauder/mauler/loaded + cost = 100 -/datum/uplink_item/dangerous/surplus_smg - name = "Surplus SMG" - desc = "A horribly outdated automatic weapon. Why would you want to use this?" - item = /obj/item/gun/ballistic/automatic/plastikov - cost = 2 - purchasable_from = UPLINK_NUKE_OPS +// ~~ Mech Support ~~ -/datum/uplink_item/dangerous/foamsmg - name = "Toy Submachine Gun" - desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine." - item = /obj/item/gun/ballistic/automatic/c20r/toy - cost = 5 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/dangerous/foammachinegun - name = "Toy Machine Gun" - desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating \ - riot grade darts, that can briefly incapacitate someone in just one volley." - item = /obj/item/gun/ballistic/automatic/l6_saw/toy - cost = 10 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/stealthy_weapons/cqc - name = "CQC Manual" - desc = "A manual that teaches a single user tactical Close-Quarters Combat before self-destructing." - item = /obj/item/book/granter/martial/cqc - purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS - cost = 13 - surplus = 0 - -/datum/uplink_item/ammo/pistol_nukeop - name = "10mm Handgun Magazine" - desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol." - item = /obj/item/ammo_box/magazine/m10mm - cost = 2 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/pistolap_nukeop - name = "10mm Armour Piercing Magazine" - desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ - These rounds are less effective at injuring the target but penetrate protective gear." - item = /obj/item/ammo_box/magazine/m10mm/ap - cost = 3 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/pistolhp_nukeop - name = "10mm Hollow Point Magazine" - desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ - These rounds are more damaging but ineffective against armour." - item = /obj/item/ammo_box/magazine/m10mm/hp - cost = 3 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/pistolfire_nukeop - name = "10mm Incendiary Magazine" - desc = "An additional 8-round 10mm magazine, compatible with the Ansem pistol. \ - Loaded with incendiary rounds which inflict less damage, but ignite the target." - item = /obj/item/ammo_box/magazine/m10mm/fire - cost = 2 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/shotgun - cost = 2 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/shotgun/bag - name = "12g Ammo Duffel Bag" - desc = "A duffel bag filled with enough 12g ammo to supply an entire team, at a discounted price." - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun - cost = 12 - -/datum/uplink_item/ammo/shotgun/buck - name = "12g Buckshot Drum" - desc = "An additional 8-round buckshot magazine for use with the Bulldog shotgun. Front towards enemy." - item = /obj/item/ammo_box/magazine/m12g - -/datum/uplink_item/ammo/shotgun/slug - name = "12g Slug Drum" - desc = "An additional 8-round slug magazine for use with the Bulldog shotgun. \ - Now 8 times less likely to shoot your pals." - cost = 3 - item = /obj/item/ammo_box/magazine/m12g/slug - -/datum/uplink_item/ammo/shotgun/dragon - name = "12g Dragon's Breath Drum" - desc = "An alternative 8-round dragon's breath magazine for use in the Bulldog shotgun. \ - 'I'm a fire starter, twisted fire starter!'" - item = /obj/item/ammo_box/magazine/m12g/dragon - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/shotgun/meteor - name = "12g Meteorslug Shells" - desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ - Great for blasting holes into the hull and knocking down enemies." - item = /obj/item/ammo_box/magazine/m12g/meteor - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/a40mm - name = "40mm Grenade Box" - desc = "A box of 40mm HE grenades for use with the M-90gl's under-barrel grenade launcher. \ - Your teammates will ask you to not shoot these down small hallways." - item = /obj/item/ammo_box/a40mm - cost = 6 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/smg/bag - name = ".45 Ammo Duffel Bag" - desc = "A duffel bag filled with enough .45 ammo to supply an entire team, at a discounted price." - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/smg - cost = 20 //instead of 27 TC - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/smg - name = ".45 SMG Magazine" - desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun." - item = /obj/item/ammo_box/magazine/smgm45 - cost = 3 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/smgap - name = ".45 Armor Piercing SMG Magazine" - desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun.\ - These rounds are less effective at injuring the target but penetrate protective gear." - item = /obj/item/ammo_box/magazine/smgm45/ap - cost = 5 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/smgfire - name = ".45 Incendiary SMG Magazine" - desc = "An additional 24-round .45 magazine suitable for use with the C-20r submachine gun.\ - Loaded with incendiary rounds which inflict little damage, but ignite the target." - item = /obj/item/ammo_box/magazine/smgm45/incen - cost = 4 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/sniper - cost = 3 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/sniper/basic - name = ".50 BMG Magazine" - desc = "An additional standard 6-round magazine for use with .50 sniper rifles." - item = /obj/item/ammo_box/magazine/sniper_rounds - -/datum/uplink_item/ammo/sniper/surplusbox - name = ".50 BMG Surplus Magazine Box" - desc = "A box full of surplus .50 BMG magazines. Not as good as high quality magazines, \ - usually lacking the penetrative power and impact, but good enough to keep the gun firing. \ - Useful for arming a squad." - cost = 7 //1 TC per magazine - item = /obj/item/storage/box/syndie_kit/surplus - -/datum/uplink_item/ammo/sniper/penetrator - name = ".50 BMG Penetrator Magazine" - desc = "A 6-round magazine of penetrator ammo designed for use with .50 sniper rifles. \ - Can pierce walls and multiple enemies." - item = /obj/item/ammo_box/magazine/sniper_rounds/penetrator - cost = 4 - -/datum/uplink_item/ammo/sniper/incendiary - name = ".50 BMG Incendiary Magazine" - desc = "A 6-round magazine of incendiary ammo. \ - Sets your enemies ablaze, along with everyone else next to them!" - item = /obj/item/ammo_box/magazine/sniper_rounds/incendiary - cost = 4 - -/datum/uplink_item/ammo/sniper/disruptor - name = ".50 BMG Disruptor Magazine" - desc = "A 6-round magazine of disruptor ammo designed for use with .50 sniper rifles. \ - Put your enemies and their alarm clock to sleep today!" - item = /obj/item/ammo_box/magazine/sniper_rounds/disruptor - cost = 4 - -/datum/uplink_item/ammo/sniper/marksman - name = ".50 BMG Marksman Magazine" - desc = "A 6-round magazine of marksman ammo designed for use with .50 sniper rifles. \ - Blast your enemies with instant shots! Just watch out for the rebound..." - item = /obj/item/ammo_box/magazine/sniper_rounds/marksman - cost = 4 - -/datum/uplink_item/ammo/carbine - name = "5.56mm Toploader Magazine" - desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \ - These bullets pack less punch than 7.12x82mm rounds, but they still offer more power than .45 ammo due to their innate armour penetration." - item = /obj/item/ammo_box/magazine/m556 - cost = 4 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/carbinephase - name = "5.56mm Toploader Phasic Magazine" - desc = "An additional 30-round 5.56mm magazine; suitable for use with the M-90gl carbine. \ - These bullets are made from an experimental alloy, 'Ghost Lead', that allows it to pass through almost any non-organic material. \ - The name is a misnomer. It doesn't contain any lead whatsoever!" - item = /obj/item/ammo_box/magazine/m556/phasic - cost = 8 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/machinegun - cost = 6 - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/machinegun/basic - name = "7.12x82mm Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use with the L6 SAW. \ - By the time you need to use this, you'll already be standing on a pile of corpses." - item = /obj/item/ammo_box/magazine/mm712x82 - -/datum/uplink_item/ammo/machinegun/ap - name = "7.12x82mm (Armor Penetrating) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with special properties \ - to puncture even the most durable armor." - item = /obj/item/ammo_box/magazine/mm712x82/ap - cost = 9 - -/datum/uplink_item/ammo/machinegun/hollow - name = "7.12x82mm (Hollow-Point) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \ - with the unarmored masses of crew." - item = /obj/item/ammo_box/magazine/mm712x82/hollow - -/datum/uplink_item/ammo/machinegun/incen - name = "7.12x82mm (Incendiary) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; tipped with a special flammable \ - mixture that'll ignite anyone struck by the bullet. Some men just want to watch the world burn." - item = /obj/item/ammo_box/magazine/mm712x82/incen - -/datum/uplink_item/ammo/machinegun/match - name = "7.12x82mm (Match) Box Magazine" - desc = "A 50-round magazine of 7.12x82mm ammunition for use in the L6 SAW; you didn't know there was a demand for match grade \ - precision bullet hose ammo, but these rounds are finely tuned and perfect for ricocheting off walls all fancy-like." - item = /obj/item/ammo_box/magazine/mm712x82/match - cost = 10 - -/datum/uplink_item/ammo/rocket - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/ammo/rocket/basic - name = "84mm HE Rocket" - desc = "A low-yield anti-personnel HE rocket. Gonna take you out in style!" - item = /obj/item/ammo_casing/rocket - cost = 4 - -/datum/uplink_item/ammo/rocket/heap - name = "84mm HEAP Rocket" - desc = "A high-yield HEAP rocket; extremely effective against literally everything and anything near that thing that doesn't exist anymore. \ - Strike fear into the hearts of your enemies." - item = /obj/item/ammo_casing/rocket/heap - cost = 6 - -/datum/uplink_item/ammo/surplus_smg - name = "Surplus SMG Magazine" - desc = "A cylindrical magazine designed for the PP-95 SMG." - item = /obj/item/ammo_box/magazine/plastikov9mm - cost = 1 - purchasable_from = UPLINK_NUKE_OPS - illegal_tech = FALSE - -/datum/uplink_item/ammo/mech/bag +/datum/uplink_item/mech/support_bag name = "Mech Support Kit Bag" desc = "A duffel bag containing ammo for four full reloads of the scattershotm which is equipped on standard Dark Gygax and Mauler exosuits. Also comes with some support equipment for maintaining the mech, including tools and an inducer." item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mech cost = 4 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/ammo/mauler/bag +/datum/uplink_item/mech/support_bag/mauler name = "Mauler Ammo Bag" desc = "A duffel bag containing ammo for three full reloads of the LMG, scattershot carbine, and SRM-8 missile laucher that are equipped on a standard Mauler exosuit." item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mauler cost = 6 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/explosives/bombanana - name = "Bombanana" - desc = "A banana with an explosive taste! discard the peel quickly, as it will explode with the force of a Syndicate minibomb \ - a few seconds after the banana is eaten." - item = /obj/item/food/grown/banana/bombanana - cost = 4 //it is a bit cheaper than a minibomb because you have to take off your helmet to eat it, which is how you arm it - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/clown_bomb_clownops - name = "Clown Bomb" - desc = "The Clown bomb is a hilarious device capable of massive pranks. It has an adjustable timer, \ - with a minimum of %MIN_BOMB_TIMER seconds, and can be bolted to the floor with a wrench to prevent \ - movement. The bomb is bulky and cannot be moved; upon ordering this item, a smaller beacon will be \ - transported to you that will teleport the actual bomb to it upon activation. Note that this bomb can \ - be defused, and some crew may attempt to do so." - item = /obj/item/sbeacondrop/clownbomb - cost = 15 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/clown_bomb_clownops/New() - . = ..() - desc = replacetext(desc, "%MIN_BOMB_TIMER", SYNDIEBOMB_MIN_TIMER_SECONDS) - -/datum/uplink_item/explosives/buzzkill - name = "Buzzkill Grenade Box" - desc = "A box with three grenades that release a swarm of angry bees upon activation. These bees indiscriminately attack friend or foe \ - with random toxins. Courtesy of the BLF and Tiger Cooperative." - item = /obj/item/storage/box/syndie_kit/bee_grenades - cost = 15 - surplus = 35 - purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/virus_grenade - name = "Fungal Tuberculosis Grenade" - desc = "A primed bio-grenade packed into a compact box. Comes with five Bio Virus Antidote Kit (BVAK) \ - autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \ - the BVAK solution." - item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade - cost = 12 - surplus = 35 - purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS - restricted = TRUE - -/datum/uplink_item/explosives/grenadier - name = "Grenadier's belt" - desc = "A belt containing 26 lethally dangerous and destructive grenades. Comes with an extra multitool and screwdriver." - item = /obj/item/storage/belt/grenade/full - purchasable_from = UPLINK_NUKE_OPS - cost = 22 - surplus = 0 - -/datum/uplink_item/explosives/syndicate_detonator - name = "Syndicate Detonator" - desc = "The Syndicate detonator is a companion device to the Syndicate bomb. Simply press the included button \ - and an encrypted radio frequency will instruct all live Syndicate bombs to detonate. \ - Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of \ - the blast radius before using the detonator." - item = /obj/item/syndicatedetonator - cost = 3 - purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/tearstache - name = "Teachstache Grenade" - desc = "A teargas grenade that launches sticky moustaches onto the face of anyone not wearing a clown or mime mask. The moustaches will \ - remain attached to the face of all targets for one minute, preventing the use of breath masks and other such devices." - item = /obj/item/grenade/chem_grenade/teargas/moustache - cost = 3 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/viscerators - name = "Viscerator Delivery Grenade" - desc = "A unique grenade that deploys a swarm of viscerators upon activation, which will chase down and shred \ - any non-operatives in the area." - item = /obj/item/grenade/spawnergrenade/manhacks - cost = 5 - surplus = 35 - purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS - -/datum/uplink_item/explosives/pinata - name = "Weapons Grade Pinata Kit" - desc = "A pinata filled with both candy and explosives as well as two belts to carry them on, crack it open and see what you get!" - item = /obj/item/storage/box/syndie_kit/pinata - purchasable_from = UPLINK_CLOWN_OPS - limited_stock = 1 - cost = 12 //This is effectively the clown ops version of the grenadier belt where you should on average get 8 explosives if you use a weapon with exactly 10 force. - surplus = 0 - -//Support and Mechs -/datum/uplink_category/support - name = "Support and Exosuits" - weight = 5 - -/datum/uplink_item/support - category = /datum/uplink_category/support - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS - -/datum/uplink_item/support/clown_reinforcement - name = "Clown Reinforcements" - desc = "Call in an additional clown to share the fun, equipped with full starting gear, but no telecrystals." - item = /obj/item/antag_spawner/nuke_ops/clown - cost = 20 - purchasable_from = UPLINK_CLOWN_OPS - restricted = TRUE - refundable = TRUE - -/datum/uplink_item/support/reinforcement - name = "Reinforcements" - desc = "Call in an additional team member from one of our factions. \ - They'll come equipped with a mere surplus SMG, so arming them is recommended." - item = /obj/item/antag_spawner/nuke_ops - cost = 25 - purchasable_from = UPLINK_NUKE_OPS - restricted = TRUE - refundable = TRUE - -/datum/uplink_item/support/reinforcement/assault_borg - name = "Syndicate Assault Cyborg" - desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel. \ - Comes equipped with a self-resupplying LMG, a grenade launcher, energy sword, emag, pinpointer, flash and crowbar." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/assault - cost = 65 - restricted = TRUE - -/datum/uplink_item/support/reinforcement/medical_borg - name = "Syndicate Medical Cyborg" - desc = "A combat medical cyborg. Has limited offensive potential, but makes more than up for it with its support capabilities. \ - It comes equipped with a nanite hypospray, a medical beamgun, combat defibrillator, full surgical kit including an energy saw, an emag, pinpointer and flash. \ - Thanks to its organ storage bag, it can perform surgery as well as any humanoid." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/medical - cost = 35 - restricted = TRUE - -/datum/uplink_item/support/reinforcement/saboteur_borg - name = "Syndicate Saboteur Cyborg" - desc = "A streamlined engineering cyborg, equipped with covert modules. Also incapable of leaving the welder in the shuttle. \ - Aside from regular Engineering equipment, it comes with a special destination tagger that lets it traverse disposals networks. \ - Its chameleon projector lets it disguise itself as a Nanotrasen cyborg, on top it has thermal vision and a pinpointer." - item = /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur - cost = 35 - restricted = TRUE - -/datum/uplink_item/support/gygax - name = "Dark Gygax Exosuit" - desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ - for hit-and-run style attacks. Features a scattershot shotgun, armor boosters against melee and ranged attacks, ion thrusters and a Tesla energy array." - item = /obj/vehicle/sealed/mecha/gygax/dark/loaded - cost = 80 - -/datum/uplink_item/support/honker - name = "Dark H.O.N.K." - desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000." - item = /obj/vehicle/sealed/mecha/honker/dark/loaded - cost = 80 - purchasable_from = UPLINK_CLOWN_OPS - -/datum/uplink_item/support/mauler - name = "Mauler Exosuit" - desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ - and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." - item = /obj/vehicle/sealed/mecha/marauder/mauler/loaded - cost = 140 - -/datum/uplink_item/support/turretbox - name = "Disposable Sentry Gun" - desc = "A disposable sentry gun deployment system cleverly disguised as a toolbox, apply wrench for functionality." - item = /obj/item/storage/toolbox/emergency/turret/nukie - cost = 16 - -/datum/uplink_item/stealthy_tools/combatbananashoes - name = "Combat Banana Shoes" - desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ - can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ - squeak significantly louder." - item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat - cost = 6 - surplus = 0 - purchasable_from = UPLINK_CLOWN_OPS +// Stealthy Tools /datum/uplink_item/stealthy_tools/syndigaloshes/nuke item = /obj/item/clothing/shoes/chameleon/noslip cost = 4 purchasable_from = UPLINK_NUKE_OPS +/datum/uplink_item/stealthy_weapons/romerol_kit + name = "Romerol" + desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. \ + On death, these nodules take control of the dead body, causing limited revivification, \ + along with slurred speech, aggression, and the ability to infect others with this agent." + item = /obj/item/storage/box/syndie_kit/romerol + cost = 25 + purchasable_from = UPLINK_CLOWN_OPS|UPLINK_NUKE_OPS + cant_discount = TRUE + +// Modsuits + /datum/uplink_item/suits/modsuit/elite name = "Elite Syndicate MODsuit" desc = "An upgraded, elite version of the Syndicate MODsuit. It features fireproofing, and also \ - provides the user with superior armor and mobility compared to the standard Syndicate MODsuit." + provides the user with superior armor and mobility compared to the standard Syndicate MODsuit." item = /obj/item/mod/control/pre_equipped/elite purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS /datum/uplink_item/suits/energy_shield name = "MODsuit Energy Shield Module" desc = "An energy shield module for a MODsuit. The shields can handle up to three impacts \ - within a short duration and will rapidly recharge while not under fire." + within a short duration and will rapidly recharge while not under fire." item = /obj/item/mod/module/energy_shield cost = 15 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS @@ -667,6 +597,8 @@ cost = 2 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS +// Devices + /datum/uplink_item/device_tools/assault_pod name = "Assault Pod Targeting Device" desc = "Use this to select the landing zone of your assault pod." @@ -679,7 +611,7 @@ /datum/uplink_item/device_tools/syndie_jaws_of_life name = "Syndicate Jaws of Life" desc = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \ - In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." + In its crowbar configuration, it can be used to force open airlocks. Very useful for entering the station or its departments." item = /obj/item/crowbar/power/syndicate cost = 4 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS @@ -687,7 +619,7 @@ /datum/uplink_item/device_tools/medgun name = "Medbeam Gun" desc = "A wonder of Syndicate engineering, the Medbeam gun, or Medi-Gun enables a medic to keep his fellow \ - operatives in the fight, even while under fire. Don't cross the streams!" + operatives in the fight, even while under fire. Don't cross the streams!" item = /obj/item/gun/medbeam cost = 15 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS @@ -695,8 +627,8 @@ /datum/uplink_item/device_tools/medkit name = "Syndicate Combat Medic Kit" desc = "This first aid kit is a suspicious black and red. Included is a number of atropine medipens \ - for rapid stabilization and detonation prevention, sutures and regenerative mesh for wound treatment, and patches \ - for faster healing on the field. Also comes with basic medical tools and sterlizer." + for rapid stabilization and detonation prevention, sutures and regenerative mesh for wound treatment, and patches \ + for faster healing on the field. Also comes with basic medical tools and sterlizer." item = /obj/item/storage/medkit/tactical cost = 4 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS @@ -704,9 +636,9 @@ /datum/uplink_item/device_tools/medkit/premium name = "Syndicate Combat Medical Suite" desc = "This first aid kit is a suspicious black and red. Included is an unloaded combat chemical injector \ - for suit-penetrative chem delivery, a medical science night vision HUD for quick identification of injured personnel and chemical supplies, \ - improved medical supplies, including Interdyne-approved pharmaceuticals, a hacked cybernetic surgery toolset arm implant, \ - and some helpful MODsuit modules for for field medical use and operative physiopharmaceutical augmentation." + for suit-penetrative chem delivery, a medical science night vision HUD for quick identification of injured personnel and chemical supplies, \ + improved medical supplies, including Interdyne-approved pharmaceuticals, a hacked cybernetic surgery toolset arm implant, \ + and some helpful MODsuit modules for for field medical use and operative physiopharmaceutical augmentation." item = /obj/item/storage/medkit/tactical/premium cost = 15 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS @@ -715,71 +647,74 @@ name = "Syndicate Sentience Potion" item = /obj/item/slimepotion/slime/sentience/nuclear desc = "A potion recovered at great risk by undercover Syndicate operatives and then subsequently modified with Syndicate technology. \ - Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." + Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors." cost = 4 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS restricted = TRUE -/datum/uplink_item/implants/antistun - name = "CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon." - item = /obj/item/autosurgeon/syndicate/anti_stun - cost = 12 +// Implants + +/datum/uplink_item/implants/nuclear surplus = 0 purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/implants/microbomb +/datum/uplink_item/implants/nuclear/deathrattle + name = "Box of Deathrattle Implants" + desc = "A collection of implants (and one reusable implanter) that should be injected into the team. When one of the team \ + dies, all other implant holders recieve a mental message informing them of their teammates' name \ + and the location of their death. Unlike most implants, these are designed to be implanted \ + in any creature, biological or mechanical." + item = /obj/item/storage/box/syndie_kit/imp_deathrattle + cost = 4 + +/datum/uplink_item/implants/nuclear/microbomb name = "Microbomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ - The more implants inside of you, the higher the explosive power. \ - This will permanently destroy your body, however." + The more implants inside of you, the higher the explosive power. \ + This will permanently destroy your body, however." item = /obj/item/storage/box/syndie_kit/imp_microbomb cost = 2 - purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/implants/macrobomb +/datum/uplink_item/implants/nuclear/macrobomb name = "Macrobomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. \ - Upon death, releases a massive explosion that will wipe out everything nearby." + Upon death, releases a massive explosion that will wipe out everything nearby." item = /obj/item/storage/box/syndie_kit/imp_macrobomb cost = 20 - purchasable_from = UPLINK_NUKE_OPS restricted = TRUE -/datum/uplink_item/implants/reviver +/datum/uplink_item/implants/nuclear/reviverplus name = "Reviver Implant" desc = "This implant will attempt to revive and heal you if you lose consciousness. Comes with an autosurgeon." item = /obj/item/autosurgeon/syndicate/reviver cost = 8 - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/implants/thermals +/datum/uplink_item/implants/nuclear/thermals name = "Thermal Eyes" desc = "These cybernetic eyes will give you thermal vision. Comes with a free autosurgeon." item = /obj/item/autosurgeon/syndicate/thermal_eyes cost = 8 - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS -/datum/uplink_item/implants/xray +/datum/uplink_item/implants/nuclear/implants/xray name = "X-ray Vision Implant" desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." item = /obj/item/autosurgeon/syndicate/xray_eyes - cost = 10 - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS + cost = 8 -/datum/uplink_item/implants/deathrattle - name = "Box of Deathrattle Implants" - desc = "A collection of implants (and one reusable implanter) that should be injected into the team. When one of the team \ - dies, all other implant holders recieve a mental message informing them of their teammates' name \ - and the location of their death. Unlike most implants, these are designed to be implanted \ - in any creature, biological or mechanical." - item = /obj/item/storage/box/syndie_kit/imp_deathrattle - cost = 4 - surplus = 0 - purchasable_from = UPLINK_NUKE_OPS +/datum/uplink_item/implants/nuclear/antistun + name = "CNS Rebooter Implant" + desc = "This implant will help you get back up on your feet faster after being stunned. Comes with an autosurgeon." + item = /obj/item/autosurgeon/syndicate/anti_stun + cost = 8 + +/datum/uplink_item/implants/nuclear/antidrop + name = "Anti-Drop Implant" + desc = "This implant will keep you from dropping things from your hands. Be sure to hold onto the item before activating, and \ + activate it again to turn it off. Comes with an autosurgeon." + item = /obj/item/autosurgeon/syndicate/anti_drop + cost = 8 + +// Badass (meme items) /datum/uplink_item/badass/costumes surplus = 0 @@ -787,62 +722,60 @@ cost = 4 cant_discount = TRUE -/datum/uplink_item/badass/clownopclumsinessinjector //clowns can buy this too, but it's in the role-restricted items section for them - name = "Clumsiness Injector" - desc = "Inject yourself with this to become as clumsy as a clown... or inject someone ELSE with it to make THEM as clumsy as a clown. Useful for clown operatives who wish to reconnect with their former clownish nature or for clown operatives who wish to torment and play with their prey before killing them." - item = /obj/item/dnainjector/clumsymut - cost = 1 - purchasable_from = UPLINK_CLOWN_OPS - illegal_tech = FALSE +// Base Keys -/datum/uplink_item/stealthy_weapons/romerol_kit - name = "Romerol" - desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. \ - On death, these nodules take control of the dead body, causing limited revivification, \ - along with slurred speech, aggression, and the ability to infect others with this agent." - item = /obj/item/storage/box/syndie_kit/romerol - cost = 25 - purchasable_from = UPLINK_CLOWN_OPS|UPLINK_NUKE_OPS +/datum/uplink_category/base_keys + name = "Base Keys" + weight = 27 + +/datum/uplink_item/base_keys + category = /datum/uplink_category/base_keys + surplus = 0 + purchasable_from = UPLINK_NUKE_OPS + cost = 15 cant_discount = TRUE -/datum/uplink_item/support/bomb_key +/datum/uplink_item/base_keys/bomb_key name = "Syndicate Ordnance Laboratory Access Card" desc = "Do you fancy yourself an explosives expert? If so, then consider yourself lucky! With this special Authorization Key, \ - you can blow those corpo suits away with your very own home-made explosive devices. Made in your local firebase's \ - very own Ordnance Laboratory! *The Syndicate is not responsible for injuries or deaths sustained while utilizing the lab." + you can blow those corpo suits away with your very own home-made explosive devices. Made in your local firebase's \ + very own Ordnance Laboratory! *The Syndicate is not responsible for injuries or deaths sustained while utilizing the lab." item = /obj/item/keycard/syndicate_bomb - cost = 15 purchasable_from = UPLINK_NUKE_OPS - cant_discount = TRUE -/datum/uplink_item/support/bio_key +/datum/uplink_item/base_keys/bio_key name = "Syndicate Bio-Weapon Laboratory Access Card" desc = "In the right hands, even vile corpo technology can be turned into a vast arsenal of liberation and justice. From \ - micro-organism symbiosis to slime-core weaponization, this special Authorization Key can let you push past the boundaries \ - of bio-terrorism at breakneck speeds. As a bonus, these labs even come equipped with natural life support! *Plants not included." + micro-organism symbiosis to slime-core weaponization, this special Authorization Key can let you push past the boundaries \ + of bio-terrorism at breakneck speeds. As a bonus, these labs even come equipped with natural life support! *Plants not included." item = /obj/item/keycard/syndicate_bio - cost = 17 purchasable_from = UPLINK_CLOWN_OPS | UPLINK_NUKE_OPS - cant_discount = TRUE -/datum/uplink_item/support/chem_key +/datum/uplink_item/base_keys/chem_key name = "Syndicate Chemical Plant Access Card" desc = "For some of our best Operatives, watching corpo space stations blow up with a flash of retribution just isn't enough. \ - Folks like those prefer a more personal touch to their artistry. For those interested, a special Authorization Key \ - can be instantly delivered to your location. Create groundbreaking chemical agents, cook up, sell the best of drugs, \ - and listen to the best classic music today!" + Folks like those prefer a more personal touch to their artistry. For those interested, a special Authorization Key \ + can be instantly delivered to your location. Create groundbreaking chemical agents, cook up, sell the best of drugs, \ + and listen to the best classic music today!" item = /obj/item/keycard/syndicate_chem - cost = 12 purchasable_from = UPLINK_CLOWN_OPS | UPLINK_NUKE_OPS - cant_discount = TRUE -/datum/uplink_item/support/fridge_key +/datum/uplink_item/base_keys/fridge_key name = "Lopez's Access Card" desc = "Hungry? So is everyone in Firebase Balthazord. Lopez is a great cook, don't get me wrong, but he's stubborn when it \ - comes to the meal plans. Sometimes you just want to pig out. Listen, don't tell anyone, ok? I picked this out of his \ - pocket during this morning's briefing. He's been looking for it since. Take it, get into the fridge, and cook up whatever \ - you need before he gets back. And remember: DON'T TELL ANYONE! -M.T" + comes to the meal plans. Sometimes you just want to pig out. Listen, don't tell anyone, ok? I picked this out of his \ + pocket during this morning's briefing. He's been looking for it since. Take it, get into the fridge, and cook up whatever \ + you need before he gets back. And remember: DON'T TELL ANYONE! -M.T" item = /obj/item/keycard/syndicate_fridge cost = 5 purchasable_from = UPLINK_CLOWN_OPS | UPLINK_NUKE_OPS +// Hats +// It is fundamental for the game's health for there to be a hat crate for nuclear operatives. + +/datum/uplink_item/badass/hats + name = "Hat Crate" + desc = "Hat crate! Contains hats, along with hat stabilizers to wear your hats while you're in your suit! HATS!!!" + item = /obj/structure/closet/crate/large/hats + cost = 5 + purchasable_from = UPLINK_CLOWN_OPS | UPLINK_NUKE_OPS diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi index 996cb20bbb17dd45323112941cfb3ead3f8debbc..6116fb945002110b0c92e774db8b66a157ffe813 100644 GIT binary patch delta 10046 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 delta 9514 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 MxAis4Z`nWl54&cIYybcN diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi index 72b8bcad4504e4c60d6ad698edbe24a91d378169..2bd05db126cbde4afcdc677e3b245cb32879063d 100644 GIT binary patch delta 5890 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 JP_Jqi`5&PkKBE8t delta 5642 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 diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 1cc8bf0712f7f158be900b763f6984234ad884e9..074ebca306ae15269cf83e20807542311873ecaa 100644 GIT binary patch delta 4725 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 HvwihHoM>1^ diff --git a/tgstation.dme b/tgstation.dme index 0bcbf65d79b..3a4b18f7e9f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5254,6 +5254,7 @@ #include "code\modules\uplink\uplink_items\ammunition.dm" #include "code\modules\uplink\uplink_items\badass.dm" #include "code\modules\uplink\uplink_items\bundle.dm" +#include "code\modules\uplink\uplink_items\clownops.dm" #include "code\modules\uplink\uplink_items\dangerous.dm" #include "code\modules\uplink\uplink_items\device_tools.dm" #include "code\modules\uplink\uplink_items\explosive.dm" diff --git a/tools/UpdatePaths/Scripts/77330_common_ammo_caliber_to_weird_caliber.txt b/tools/UpdatePaths/Scripts/77330_common_ammo_caliber_to_weird_caliber.txt new file mode 100644 index 00000000000..19ffd2d62ac --- /dev/null +++ b/tools/UpdatePaths/Scripts/77330_common_ammo_caliber_to_weird_caliber.txt @@ -0,0 +1,13 @@ +#comment This repaths several ammo types to a new type with a different caliber. + +/obj/item/ammo_box/magazine/mm712x82 : : /obj/item/ammo_box/magazine/m7mm + +/obj/item/ammo_casing/mm712x82 : /obj/item/ammo_casing/m7mm{@OLD} + +/obj/projectile/bullet/mm712x82 : /obj/projectile/bullet/a7mm{@OLD} + +/obj/projectile/bullet/m223 : /obj/item/ammo_box/magazine/m223{@OLD} + +/obj/item/ammo_casing/a556 : /obj/item/ammo_casing/a223{@OLD} + +/obj/projectile/bullet/a556 : /obj/projectile/bullet/a223{@OLD}