From b67910652f8d3ababa42b14fa2638ca3c5f65ca2 Mon Sep 17 00:00:00 2001 From: nikothedude <59709059+nikothedude@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:56:33 -0400 Subject: [PATCH] Adds a new bow that penetrates armor to cargo and security voucher + nonlethal arrows (#5390) ## About The Pull Request Title. Introduces a new bow and 2 new arrows: The hardlight bow, and the blunt/taser arrows. You can acquire these items via a new primary security voucher. This kit gives you one bow, one quiver with 9 blunt and 1 taser, a hatchet, and a book that teaches you how to build these arrows. **You do not gain the ability to craft lethal arrows roundstart. You have to order the book from cargo.** You can also order a kit of 2 quivers and 2 bows from cargo. The quivers have a mix of lethal and nonlethal arrows. They cost a little less than a crate of 3 laser guns, so this is generally a suboptimal choice. ## The bow Like all bows, it is bulky, and fits only in suit storage. Unlike other bows, it is not weak against armor, and can cause wounds. It is a hardlight bow - its string is made out of energy. You can obtain this bow via a voucher or cargo. The bow itself is also an appreciable weapon, doing 11 blunt damage (this is prone to change on review - this was inherited from the base bow). ## The arrows ### Blunt The blunt arrow is the simplest arrow. 35 stamina, 5 brute, 3 hits to down. Craftable the same way a normal arrow is. Reusable. Causes dislocations if fired in close quarters. ### Taser You only spawn with one taser arrow roundstart. 5 stamina guaranteed, 40 and knockdown if the target isnt electrically insulated. Not reusable. Craftable like a normal arrow, but with a igniter, cable, and a cell. **This recipe is prone to change on review, as I feel it might be a bit easy to make for its power, but I dont know what to add to make it truely expensive.** Both of these arrows can only be crafted if you have the fletching book, or an arrow to convert. This PR also locks bronze arrows to ashies and hearthkin exclusively, as they are too powerful for their ease of crafting. Upgrading your arrows to bone should take time and effort. ## Why It's Good For The Game Well, A, I have a character that does bowsec, and as it stands, its kinda useless. The arrows are too weak and fail on all armor. Bronze arrows do THREE DAMAGE on a redsuit. THREE. B., it adds a fairly unique way to play ranged security. Bows just - function differently. You have to load each arrow manually, pick up your dropped arrows, and deal with a relatively choked quiver (if you want to deal with the quiver at all). You also have to craft your own arrows, seek out another fletching book for lethal arrows... its a more involved playstyle if you really want to go full bowman. C. Flavor. Some characters. like my own, prefer more... traditional methods of dealing with people. Bows, spears, cudgels, clubs. I should note, this kit will be somewhat underpowered in actual combat. Running around, trying to load your bow while under fire, is very difficult, especially because the disabler generally has a higher DPS anyway. I do think thats fine, as it is more of a sidegrade in the same way the pepperball is, but if maintainers request, I could possibly increase the damage this bow deals or some variation to make it worth using. ## Proof Of Testing
Screenshots/Videos image https://github.com/user-attachments/assets/d2697261-2b13-4f4e-9288-4a1a2fe1d134
## Changelog :cl: add: A new security voucher - the archery kit, that gives you a bow that penetrates armor and causes wounds, as well as some less-lethal arrows add: An armory cargo order with two powerful bows and quivers with lethal and nonlethal arrows add: Two new less-lethal arrows craftable via the fletching book and blacksmithing balance: Bronze arrows can now only be crafted by ashies and hearthkin /:cl: --- .../items/granters/crafting/fletching.dm | 2 + .../modules/mapping/code/mob_spawns.dm | 2 + .../primitive_catgirls/code/spawner.dm | 7 + .../sec_haul/code/guns/armory_spawns.dm | 5 + .../modules/tribal_extended/code/recipes.dm | 1 + .../objects/effects/spawners/random/armory.dm | 2 +- .../code/modules/bow_adjustments/arrow.dm | 40 +++++- .../code/modules/cargo/packs/security.dm | 51 ++++++++ .../ammunition/ballistic/arrows.dm | 122 ++++++++++++++++++ .../modules/projectiles/guns/ballistic/bow.dm | 10 ++ .../modules/security/sec_vouchers_vendor.dm | 36 ++++++ .../icons/obj/weapons/guns/arrows.dmi | Bin 0 -> 1053 bytes .../icons/obj/weapons/guns/bow.dmi | Bin 0 -> 4176 bytes tgstation.dme | 2 + 14 files changed, 277 insertions(+), 3 deletions(-) create mode 100644 modular_zubbers/code/modules/projectiles/ammunition/ballistic/arrows.dm create mode 100644 modular_zubbers/code/modules/projectiles/guns/ballistic/bow.dm create mode 100644 modular_zubbers/icons/obj/weapons/guns/arrows.dmi create mode 100644 modular_zubbers/icons/obj/weapons/guns/bow.dmi diff --git a/code/game/objects/items/granters/crafting/fletching.dm b/code/game/objects/items/granters/crafting/fletching.dm index 482cc2cd33e..7ca308dfd46 100644 --- a/code/game/objects/items/granters/crafting/fletching.dm +++ b/code/game/objects/items/granters/crafting/fletching.dm @@ -4,6 +4,8 @@ desc = "A how-to guide to crafting and maintaining wooden bows, fletching arrows, and... making violins?" crafting_recipe_types = list( /datum/crafting_recipe/arrow, + /datum/crafting_recipe/blunted_arrow,// BUBBER EDIT ADDITION - Nonlethal arrows + /datum/crafting_recipe/taser_arrow,// BUBBER EDIT ADDITION - Nonlethal arrows /datum/crafting_recipe/plastic_arrow, /datum/crafting_recipe/shortbow, /datum/crafting_recipe/holy_arrow, diff --git a/modular_skyrat/modules/mapping/code/mob_spawns.dm b/modular_skyrat/modules/mapping/code/mob_spawns.dm index b37bac43217..1cdbed29d47 100644 --- a/modular_skyrat/modules/mapping/code/mob_spawns.dm +++ b/modular_skyrat/modules/mapping/code/mob_spawns.dm @@ -6,6 +6,8 @@ ADD_TRAIT(spawned_human, TRAIT_NOBREATH, ROUNDSTART_TRAIT) ADD_TRAIT(spawned_human, TRAIT_RESISTCOLD, ROUNDSTART_TRAIT) + spawned_human.mind?.teach_crafting_recipe(/datum/crafting_recipe/bronze_arrow) + /obj/effect/mob_spawn/ghost_role/human/pirate/silverscale/special(mob/living/carbon/human/spawned_human) . = ..() spawned_human.grant_language(/datum/language/common, source = LANGUAGE_SPAWNER) diff --git a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm b/modular_skyrat/modules/primitive_catgirls/code/spawner.dm index 11a3d9d96ce..bea14f9e973 100644 --- a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm +++ b/modular_skyrat/modules/primitive_catgirls/code/spawner.dm @@ -77,6 +77,13 @@ to_chat(user, span_warning("It'd be weird if there were multiple of you in that cave, wouldn't it?")) return FALSE +/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/special(mob/living/spawned_mob, mob/mob_possessor, apply_prefs) + . = ..() + + if (ishuman(spawned_mob)) + var/mob/living/carbon/human/human_spawned = spawned_mob + human_spawned.mind?.teach_crafting_recipe(/datum/crafting_recipe/bronze_arrow) + // This stuff is put on equip because it turns out /special sometimes just don't get called because skyrat /obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/equip(mob/living/carbon/human/spawned_human) . = ..() diff --git a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm b/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm index 03b321a383f..fe37942eb1b 100644 --- a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm +++ b/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm @@ -43,8 +43,13 @@ /obj/item/gun/ballistic/shotgun/riot/sol, /obj/item/gun/ballistic/shotgun/riot/sol, /obj/item/gun/ballistic/shotgun/riot/sol, + /obj/item/gun/ballistic/bow/security, ) +/obj/effect/spawner/armory_spawn/shotguns/Initialize(mapload) + . = ..() + new /obj/item/storage/bag/quiver/lesser/security/armory(loc) + /obj/structure/closet/ammunitionlocker/useful/PopulateContents() new /obj/item/storage/box/rubbershot(src) new /obj/item/storage/box/rubbershot(src) diff --git a/modular_skyrat/modules/tribal_extended/code/recipes.dm b/modular_skyrat/modules/tribal_extended/code/recipes.dm index 0266edca53b..d4dc8aedf58 100644 --- a/modular_skyrat/modules/tribal_extended/code/recipes.dm +++ b/modular_skyrat/modules/tribal_extended/code/recipes.dm @@ -47,6 +47,7 @@ ) category = CAT_WEAPON_AMMO non_craftable = TRUE + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED steps = list("Reinforce the arrowhead with bronze.") /datum/crafting_recipe/goliathshield diff --git a/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm b/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm index 0ae654d520f..252879574b1 100644 --- a/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm +++ b/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm @@ -60,7 +60,7 @@ spawn_all_loot = TRUE /obj/effect/spawner/random/armory/shotgun loot = list( - /obj/item/gun/ballistic/shotgun/riot + /obj/item/gun/ballistic/shotgun/riot, ) spawn_loot_count = 3 diff --git a/modular_zubbers/code/modules/bow_adjustments/arrow.dm b/modular_zubbers/code/modules/bow_adjustments/arrow.dm index 384a267bf69..74e719a9f5f 100644 --- a/modular_zubbers/code/modules/bow_adjustments/arrow.dm +++ b/modular_zubbers/code/modules/bow_adjustments/arrow.dm @@ -12,7 +12,12 @@ wound_bonus = CANT_WOUND range = 16 embed_type = /datum/embedding/arrow - var/tribal_damage_bonus = 20 //If you're an icemoon dweller, or an ashwalker. + /// If you're an icemoon dweller, or an ashwalker, you gain this on top of being more effective against armor. + var/tribal_damage_bonus = 20 + /// Does this arrow benefit from being a tribal? + var/gets_tribal_bonus = TRUE + /// If TRUE, this arrow will not obtain any benefits from being used by tribals or from a powerful bow. + var/already_effective = FALSE faction_bonus_force = 10 //Bonus force dealt against certain factions nemesis_paths = list( /mob/living/simple_animal/hostile/asteroid, @@ -20,17 +25,45 @@ /mob/living/basic/wumborian_fugu, ) +/obj/item/gun/ballistic/bow + /// If this bow counts as being effectively used, which makes arrows not weak to armor and enables wounding. + var/effective = FALSE + +/obj/item/gun/ballistic/bow/divine + effective = TRUE + /obj/projectile/bullet/arrow/prehit_pierce(mob/living/target) + if (already_effective) + return ..() + var/mob/living/carbon/human/user = firer if(isnull(target)) return ..() - if(istype(user?.mind?.assigned_role, /datum/job/ash_walker) || istype(user?.mind?.assigned_role, /datum/job/primitive_catgirl)) + var/effective_usage = FALSE + + if(!isnull(fired_from) && istype(fired_from, /obj/item/gun/ballistic/bow)) + var/obj/item/gun/ballistic/bow/bow = fired_from + if (bow.effective) + effective_usage = TRUE + if(gets_tribal_bonus && istype(user?.mind?.assigned_role, /datum/job/ash_walker) || istype(user?.mind?.assigned_role, /datum/job/primitive_catgirl)) damage += tribal_damage_bonus + effective_usage = TRUE + + if(effective_usage) weak_against_armour = FALSE + if (wound_bonus <= CANT_WOUND) + wound_bonus = -10 return ..() +/obj/projectile/bullet/arrow/poison + damage = 20 + +/obj/projectile/bullet/arrow/sticky + damage = 3 // decrease from 30 - makes it less lethal on initial impact and awful to tear out + stamina = 30 + /obj/projectile/bullet/arrow/holy damage = 25 // Increase from 20 embed_type = /datum/embedding/arrow @@ -54,3 +87,6 @@ wound_bonus = CANT_WOUND faction_bonus_force = 90 embed_type = /datum/embedding/arrow + +/obj/projectile/bullet/arrow/plastic + already_effective = TRUE diff --git a/modular_zubbers/code/modules/cargo/packs/security.dm b/modular_zubbers/code/modules/cargo/packs/security.dm index d268a10b6fb..9219945e1b4 100644 --- a/modular_zubbers/code/modules/cargo/packs/security.dm +++ b/modular_zubbers/code/modules/cargo/packs/security.dm @@ -125,3 +125,54 @@ /obj/item/ammo_box/magazine/recharge/ntusp, /obj/item/ammo_box/magazine/recharge/ntusp) crate_name = "nt-usp crate" + +/datum/supply_pack/security/armory/archery_kit + name = "Archery Crate" + desc = "Two hardlight bows capable of defeating armor, alongside a mix of lethal and non/less-than-lethal arrows." + cost = CARGO_CRATE_VALUE * 6 + contains = list( + /obj/item/gun/ballistic/bow/security, + /obj/item/gun/ballistic/bow/security, + /obj/item/storage/bag/quiver/lesser/security/armory, + /obj/item/storage/bag/quiver/lesser/security/armory, + ) + +/obj/item/storage/bag/quiver/lesser/security/armory + +/obj/item/storage/bag/quiver/lesser/security/armory/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_casing/arrow/blunt = 3, + /obj/item/ammo_casing/arrow = 6, + /obj/item/ammo_casing/arrow/taser = 1 + ) + + generate_items_inside(items_inside, src) + +/datum/supply_pack/security/armory/lethal_arrows + name = "Arrow Crate" + desc = "Two quivers containing nine normal arrows and one randomly selected specialty arrow." + cost = CARGO_CRATE_VALUE * 3 + contains = list( + /obj/item/storage/bag/quiver/lesser/security/lethal, + /obj/item/storage/bag/quiver/lesser/security/lethal + ) + +/obj/item/storage/bag/quiver/lesser/security/lethal + +/obj/item/storage/bag/quiver/lesser/security/lethal/PopulateContents() + var/static/list/static_items = list( + /obj/item/ammo_casing/arrow = 9 + ) + /// Typepath -> Weight + var/static/list/bonus_items = list( + /obj/item/ammo_casing/arrow/sticky = 10, + /obj/item/ammo_casing/arrow/poison = 10, + /obj/item/ammo_casing/arrow/plastic = 6, + /obj/item/ammo_casing/arrow/bronze = 1, + /obj/item/ammo_casing/arrow/taser = 1, + ) + + var/list/obj/item/ammo_casing/arrow/to_spawn = static_items.Copy() + to_spawn[pick_weight(bonus_items)] = 1 + + generate_items_inside(to_spawn, src) diff --git a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/arrows.dm b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/arrows.dm new file mode 100644 index 00000000000..a2b814a5c9d --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/arrows.dm @@ -0,0 +1,122 @@ +/datum/crafting_recipe/blunted_arrow + name = "Arrow (Less-lethal)" + result = /obj/item/ammo_casing/arrow/blunt + reqs = list( + /obj/item/stack/sheet/mineral/wood = 1, + /obj/item/stack/sheet/cloth = 1, + /obj/item/stack/sheet/iron = 1, + ) + tool_paths = list( + /obj/item/hatchet, + ) + category = CAT_WEAPON_AMMO + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/blunted_arrow_conversion + name = "Blunt Arrow Conversion" + result = /obj/item/ammo_casing/arrow/blunt + reqs = list( + /obj/item/ammo_casing/arrow = 1, + ) + tool_behaviors = list(TOOL_SAW) + category = CAT_WEAPON_AMMO + non_craftable = TRUE + steps = list("Smooth the arrowhead with the saw.") + +/datum/crafting_recipe/taser_arrow + name = "Arrow (Electric, Non-lethal)" + result = /obj/item/ammo_casing/arrow/taser + reqs = list( + /obj/item/stack/sheet/mineral/wood = 1, + /obj/item/stack/sheet/cloth = 1, + /obj/item/stack/sheet/iron = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/assembly/igniter = 1, + /obj/item/stock_parts/power_store/cell = 1, + ) + tool_paths = list( + /obj/item/hatchet, + ) + category = CAT_WEAPON_AMMO + crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED + +/datum/crafting_recipe/taser_arrow_conversion + name = "Taser Arrow Conversion" + result = /obj/item/ammo_casing/arrow/taser + reqs = list( + /obj/item/ammo_casing/arrow = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/assembly/igniter = 1, + /obj/item/stock_parts/power_store/cell = 1, + ) + blacklist = list( + /obj/item/ammo_casing/arrow/taser + ) + time = 1 SECONDS + tool_behaviors = list(TOOL_SAW) + category = CAT_WEAPON_AMMO + +/obj/item/ammo_casing/arrow/blunt + name = "blunt arrow" + desc = "An arrow with its head reduced to a blunt tip. Suitable for breaking bones and subduing targets without excessive physical damage. Staggers targets on impact." + icon = 'modular_zubbers/icons/obj/weapons/guns/arrows.dmi' + icon_state = "blunt_arrow" + projectile_type = /obj/projectile/bullet/arrow/blunt + +/obj/projectile/bullet/arrow/blunt + name = "blunt arrow" + desc = "A blunted arrow." + damage = 5 // ow + stamina = 40 // its okay + wound_bonus = 35 // will sometimes cause dislocations at close range + gets_tribal_bonus = FALSE // technically a modern arrow + meant to be less lethal + embed_type = null + sharpness = NONE + +/obj/projectile/bullet/arrow/blunt/on_hit(atom/target, blocked, pierce_hit) + . = ..() + + if (pierce_hit) + return + if (. == BULLET_ACT_BLOCK || blocked >= 100 || !isliving(target)) + return + + var/mob/living/living_target = target + var/percent_blocked = blocked / 100 + + living_target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * (1 - percent_blocked), 10 SECONDS) // it hits really hard + +/obj/item/ammo_casing/arrow/taser + name = "taser arrow" + desc = "An arrow, the head removed, replaced with an igniter, and hooked up to a power cell. Negligible damage, but capable of delivering a terrible electric shock.\n\ + Likely to break apart on impact. Ineffective against those insulated against electricity." + icon = 'modular_zubbers/icons/obj/weapons/guns/arrows.dmi' + icon_state = "taser_arrow" + reusable = FALSE + projectile_type = /obj/projectile/bullet/arrow/taser + harmful = FALSE + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.2, /datum/material/wood = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.1) + +/obj/projectile/bullet/arrow/taser + name = "taser arrow" + desc = "A jury-rigged taser arrow, capable of delivering a terrible electric shock, and not much else." + icon = 'modular_zubbers/icons/obj/weapons/guns/arrows.dmi' + icon_state = "taser_arrow_projectile" + damage = 0 // lol + stamina = 5 + /// Staimna damage to be dealt by the shock. Separate from stamina - insulated individuals might be immune to the shock. + var/shock_damage = 50 //stamcrit in two but any armor at all reduces it to three + gets_tribal_bonus = FALSE // technically a modern arrow + meant to be less lethal + embed_type = null + sharpness = NONE + +/obj/projectile/bullet/arrow/taser/on_hit(atom/target, blocked, pierce_hit) + . = ..() + + if (pierce_hit) + return + do_sparks(3, TRUE, src) + if (. == BULLET_ACT_BLOCK || blocked >= 100 || !isliving(target)) + return + var/mob/living/living_target = target + living_target.electrocute_act(shock_damage, src, 1, SHOCK_ILLUSION|SHOCK_SUPPRESS_MESSAGE|SHOCK_NOGLOVES|SHOCK_KNOCKDOWN) // illusion so it doesnt do damage diff --git a/modular_zubbers/code/modules/projectiles/guns/ballistic/bow.dm b/modular_zubbers/code/modules/projectiles/guns/ballistic/bow.dm new file mode 100644 index 00000000000..4eac33c55b3 --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/guns/ballistic/bow.dm @@ -0,0 +1,10 @@ + +/obj/item/gun/ballistic/bow/security + name = "hardlight bow" + desc = "A classic shortbow design, upgraded with carbon fiber structure and a hardlight bowstring. Elegant to use, though undeniably still a bit antiquated. \ + Offers heightened armor penetration and wounding potential than the older variants." + effective = TRUE + icon = 'modular_zubbers/icons/obj/weapons/guns/bow.dmi' + icon_state = "hardlightbow" + inhand_icon_state = "bow_hardlight" + base_icon_state = "hardlightbow" diff --git a/modular_zubbers/code/modules/security/sec_vouchers_vendor.dm b/modular_zubbers/code/modules/security/sec_vouchers_vendor.dm index 1e22190b392..1f5ef457988 100644 --- a/modular_zubbers/code/modules/security/sec_vouchers_vendor.dm +++ b/modular_zubbers/code/modules/security/sec_vouchers_vendor.dm @@ -66,6 +66,42 @@ /obj/item/shield/riot/flash, ) +/datum/voucher_set/security/primary/archery + name = "Archery Kit" + description = "A powerful bow, a training manual, and a quiver with non/less-than-lethal arrows. You will still need to order the fletching kit from cargo if you want to make lethal arrows." + icon = 'icons/obj/weapons/bows/bows.dmi' + icon_state = "hardlightbow" + set_items = list( + /obj/item/gun/ballistic/bow/security, + /obj/item/storage/bag/quiver/lesser/security, + /obj/item/book/granter/crafting_recipe/fletching/nonlethal, + /obj/item/hatchet, + ) + +/obj/item/storage/bag/quiver/lesser/security + name = "security quiver" + desc = "A lightweight, low-capacity quiver capable of being folded into pockets, but nothing else." + slot_flags = ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET|ITEM_SLOT_BELT + +/obj/item/storage/bag/quiver/lesser/security/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_casing/arrow/blunt = 7, + /obj/item/ammo_casing/arrow/taser = 3 + ) + + generate_items_inside(items_inside, src) + +/obj/item/book/granter/crafting_recipe/fletching/nonlethal + name = "Aim for the knees, not the eyes!" + desc = "A manual on how to construct sub-lethal bows & arrows, how best to use them... and how to construct violins?" + crafting_recipe_types = list( + /datum/crafting_recipe/shortbow, + /datum/crafting_recipe/blunted_arrow, + /datum/crafting_recipe/taser_arrow, + /datum/crafting_recipe/violin, + ) + uses = 1 + /datum/voucher_set/security/primary/nt_usp name = "NT-USP Pistol" description = "A small pistol that uses hardlight technology to synthesize bullets. Due to its low power, it doesn't have much use besides tiring out criminals." diff --git a/modular_zubbers/icons/obj/weapons/guns/arrows.dmi b/modular_zubbers/icons/obj/weapons/guns/arrows.dmi new file mode 100644 index 0000000000000000000000000000000000000000..995a4d563b92aed94e2f5ef6c9bc16fd989ba98c GIT binary patch literal 1053 zcmV+&1mgRNP)V=-0C=30%R3IjFc5^{+Ixyo(j#828{`PNNUjhWvS6bmM(c%KpCS?+1>OA8 zH#JVp*>`ZQr#DMUd4|Ptvn8{nK_e^y%tL>kXAAHp`@;|pfabm-7J7>fi%6a*)$rEc$_ z)-0ixf{?NGFm+JLAT5&S9GYm`q}W{E^)9*mmkUR@_x*o-?>pXopC+Zm%knuLfYWLM za5?~|<#_-tc0N2NgjxDMC8cKPT2^HXfRgd2%gcZ74F>|I8zCqM5EH^I8K0k@2OyP7 zsa{5zl-GbMDYfB1fOmHTsvliZ;g|omnHAYm1aJ33ItTA(ACgL?_&PUdOAQETgbBgo z)tZz8SR4~(ItSl3;n$k#r|*^CA+?bYY4i^3aFy18-R8%i?F1DQ!j;9ZBxM;;$vn9C z^;eP-00)_`2h|Lqp3Osz0P5X5)BvCn%!5S$jba`w0B9uhP$hsyGY?e&XhidHNC1s$ z9u5J(&F0&R-yPb7^}|rbv%m!*)^c#}P4QIcM)Rtq?e7bC$vo`a0+q~<+I*yST6+Lg zGM|HWr-C~Q?E&yZN^QUSPAShj72Hv%tOfuWLYQ7K4+p#j+NIRmk2(^EMA}VAoo;$d(LvFf!uTU|V+Q zeOJ!3^ZZfrSWF04o+yh?RD4WI%3n^QQhS%e~{kb{aDp!o_cLQQ%YY z`WWcBc9quCEhgX}pPZ~|lEW@p1~51nHWwCFx!%=|8mBsELRb2!(vRQ_Ph5(2}B7{OAmX?+<41+|SnFk91GMS7P3WZ1}lXY(% zEY^U&zCH~w>)kw91h6}C(056$`^7()=^In?|C^MgPD6pf_|K}B8-$GB|9lIgCt9~?6PEOPchlT zqR3j7jIBXq7|Tb4F=J+Y=lA>Xd%k}>_nv$1Irnv+=e}OgdCr5ix3xGVA}0a>z#+@4 zmmT^3BY%|&9pGCJRevwO`yKD(7IQf;+CM5dA|^OI3;^PaA6@?>mZEvkxT(SIw^gQ@ zq@8#6mxv)BP3Kdd#o2eV(nztt!6*7=$kg`n4*hGi4#NUuykY)A*Q5NlvWsm!E+>}* z{-oKBUBK=yY>B{sF^ZVVcne&wEklob*_2z!(Z6S3js@BAu*gq^y@+v6Rg#tv<#4)F zv+ax`S4HW=hI4%>lcFE!{<1M985$z%65P_|r zFd}C5NbF}>v$@6U5a^1@F}B55F?yIZ-vLEN$v0p2gwcf|k2;u~(XI`-k=dzBWJ z{{9tLt3p;aZ8FEk%{@I|OplD5Jaz4P8ca%vD0V|*IacE^(x=5^%3S+LRdS>3>x?qRZ4Lz~;sDtDr3WwE zdz!-}CAQlbRBX3{X$(}tJJq+81zLhrX+HMnzR*$1Ats2^Btz4f>KqaOew_TCFS`mj z3P&fZtrt)k&uy=QdY#h#{n+?rc9nX+{Cb>N3Rv_=S{?l6%TkKDst|4AA|%EoTaN_f zU<|oZvg@Oyc4hrLzkHn^TmOtk_P13%#eJ8J%VFH@7;Sz1SQ@cxH%p8~8L}r`^H_`h zGf37M=X2e@Y(W=Bzrhg{S=HpB{Mek$%Wpb8H&xeLI30 zd*Ep_@51D;55W^^%tz_nhj2mGT%MSoKKHN-q%uET$a#Mzw2=4x_13TqzK?&lf6nTY z&ZAV+a?@;7>6^O8o@@wdSBlAVPvx_>o9n#p){9?dKx?lpUQwiFJlpFJ9oX58oQIhC z1OwvQLJQ2zlzdyKrSWS$WL%E)92+ANIeI*sRdTH3#uhr8HAv_o)1eY`4?WX^yecuA zn@j2tz;q_D&8KA)E5e;Qcb`shy|qe3d%DYAkP1K}so#ZjS=ebo#uzi&ok)q|&O@&I zSOfpMx5d=fG&GE#BU~miAyrWoV~_E=q^6b5zVpW=^@9{Kzu06@QmI{xR~#i!XlZCm zutS9KShdKfJeqT6v*oWTEOw}{)`()G zRr5WF)(tuct4F7R+I^wq=B>&>9yQ$!FYVV&wxLGC@gkzHp@B6c%TtizotNPeonQ$* zQT_|ya5j_>P`eS6LWL&}3aXr|p=RxX3X=Ola(_5dTOXWei|W47%qJD&?%j4+5L+uk zMMy{J15M|aU+tP$N&l^tjd{2O`@Iaqavo`Bm2vArNIpMVrVC8fTBuM(Z*OB%oiBFc zVE$sguD}DVb}n0c3yB{Zx{YtSZB$vFJccX>odjy&yLt26iEAUs^3?5df$}k^_j{P+ zx#j~&D}&ynle3BO428+rVKqeo)T#I&>*N5;y#=b!Rn)2HLBhZUUZM5EK1V!OqZg#K z%%#XSImiKxaH3usD=15@vcqbq%4LjM-EbC|`vLWqra7w96Mning8!27-1B#t2FhE` zCS2C1D(^97O+x@U(;5@!toCeW5W@!@yC~Cg8?%?^N#YfEkLR&z8-+h1cfpzdm>sL2 z;9%M9^?_rBj$}N3t8*N34w(A|h4o3T=r1mKe&lh?mIzil?aTDf4QN$0`zg-=!F1aW zV0#gX+G8h!fKXU7tc2s24{qOa7<2Vn7Bk`@)a)hLor1}>ykT-o*#50WOpA~flrH#_ zsQ_3mLDprASQ&QKi?6rmHPG^#&eN%Bdgxh!+^4+%K#^P1YQ|(S5Z>%G$zyvFGLcx< z;0n*Z|1He~4ObOH-T%8=<9a%X8i-nF|5-EH(fMSi=_aV(;Pt#S$h(V8p<6GEExG?6 z07ok*fN%DJZBw`K@bFq2XIIy+#CMvSN&-V;W48?S^so-}Q<*)G6FEsYa|9-!zBXPS zoCNbL&0+HWO>mGo-8hK|$I!d&-m+v3yH_CMVC_ZjFwMB9d$sp+7{|j=>E|xv$p$=V zCs|c0EsvlmOJd(Pf9oZsY{2`n4oRZUm-xI}9oNTNyh2N%RK*wSNLysZ&9Z|cF&JRf zzSgBc z?=`&i5!Jz{1iLD43+58QcOmu@_!-fw49RcJS%~L8j+SI;vWOB<*EMxpP>CVxi;4G} zKwYR|SqHn)T}~j;wWK%)PjjX`_7^m%FC4V{Q&LpsY}0#V#_bwb-X|F_V|N(Gghzmk8`n%vHC-%o6XC!P{j7b zx*41f=6jjSb}X#*SO_|RoWGwTncQb>BEG=nCIyWciEG0f2W-_LFW~arj}4%jWkCO^ zgBCnr&LLRPXw~X53;QckRdE{6tFM>y9Gh^UT2y=8?$~@>qRWuXI|RgF;tghRbc}jW z$G$-n$mIpg6z#DG`y?!N;D;vwr5bo5SB{XW3-9NkScTTqJJiTogx$ zRw_R@ZLWZVx?QC!;94vF1OIYo>2uGKeohg##iJjZ-kg=&ZC%dqyv4$T`D$FCpA$YE z=@a~?>~})&;<35cW(g;l_dT2s+7O)%n5^vkxIbunFwD!*iYQc~ZYPz?lr?fmy7~%H zonl2SPZ?;=a^;IG4($7XMfSf`XPF3O6K~0Jj7`4zXMWzP$o>nIiYB!QRqp07!yg>W z%@O!i*>n5O{e!unOaUtp!aH&IIV@j0&}8ZR#$N2UnK%~$YxB5F;aJF4t%KVZ7AJo6 zH8JSVZnf0mMlDPv2MHw9mGJ1PPhxX@*sXt_46+TmhE?rWFbT^!|AOoz=~%k241P4HB(_0la25YnCnqaWi*G}*esZ6;RWjh$%e{25PcKQ*Z(LsHAp$X;!ZU4J73Q+-u z9(lM!2~bx)IY7X4P5#zfei`)|bSZ!^2npl{t=Ne#HV?+iI_Za)w+JCobugn<5$oA; zk)$=;Ap6$3op?36OCagaNH04M6+@PO*Rd!i^#AH?Jc=3)E)?Nz7GH?&g<(CmLJb#* z|6F;)-_z-#;KDQ9Mm6y^IE?TO0r%F9 zTG;z?u7Y_RE?kEjws_^$w%K|?BU*&U6^>bs1~gy!I+6=_>cwsTlrm2b)efoy{<56mun9IL`A)z8tMTObf#Hg&%m;F&+sX`wGN`-^b z&sl|bct4*)1H#QvCkil>G|AaCegn|_{c=7Te0nGwgf5AwZMkGMSwUb=I*i>*)rS{) ze6KhO#Ca;!v4qdGC~wW1(gc#$Akg&COngM4Z!!95pIy~h`W;?lTEV`qR`YvDFZb|43q9HoTLGp08DoXiUCa6t`8@&6 zP>|8ioXu~kOm-9e&>95y$ea`AQn;oU^ovN`8NmsTRyQ-< z+6ogl%eKwo_I`FQNBKBlS!($q!NF>%L)&{lIO^!ub1Ha)|E#+rRSx;coVVmsQj^YT zwe{nM>?EXTK_}n96YWLPQ^s72CpZ+xVaumn{sm%2uZVPh@gwkM$O3C4bx~TWmP@G+ zd2@E{(u`M#v_>kNITih?4l%HPh#gIJx&-DwS8}F`1!{2%3AIj#y+W>OcOC%ZJr$c_ z&*@()v&I$9x4c_dcO;(}{Dh4*X)>P29|t8FZNf$y_mQEBwNUT^GGj87cw=C2CtxTx z_4x=C78Zvhq^~VI-H_DY(5&s=Q) literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index c9ebda5e700..54a1f9a0fe5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9794,12 +9794,14 @@ #include "modular_zubbers\code\modules\primitive_catgirls\code\spawner.dm" #include "modular_zubbers\code\modules\privacy_policy\privacy_policy.dm" #include "modular_zubbers\code\modules\projectiles\beams.dm" +#include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\arrows.dm" #include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\pistol.dm" #include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\rifle.dm" #include "modular_zubbers\code\modules\projectiles\ammunition\ballistic\smg.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\pistol.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\smg.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\automatic.dm" +#include "modular_zubbers\code\modules\projectiles\guns\ballistic\bow.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\pistol.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\rifle.dm" #include "modular_zubbers\code\modules\projectiles\guns\energy\pulse.dm"