diff --git a/code/__DEFINES/~~bubber_defines/_globalvars/bitfields.dm b/code/__DEFINES/~~bubber_defines/_globalvars/bitfields.dm new file mode 100644 index 00000000000..c41ce44a447 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/_globalvars/bitfields.dm @@ -0,0 +1,3 @@ +DEFINE_BITFIELD(bubber_obj_flags, list( + "TRUE_IMMUTABLE_SLOW" = TRUE_IMMUTABLE_SLOW, +)) diff --git a/code/__DEFINES/~~bubber_defines/mobs.dm b/code/__DEFINES/~~bubber_defines/mobs.dm index 3b798de68dc..822cb4970da 100644 --- a/code/__DEFINES/~~bubber_defines/mobs.dm +++ b/code/__DEFINES/~~bubber_defines/mobs.dm @@ -1,6 +1,9 @@ #define BLOOD_VOLUME_OVERSIZED 1120 #define PULL_OVERSIZED_SLOWDOWN 2 +#define PULL_BIG_CLOTHES_SLOWDOWN 3 +#define PULL_BULKY_CLOTHES_SLOWDOWN 4 +#define PULL_HUGE_CLOTHES_SLOWDOWN 5 #define HUMAN_MAXHEALTH MAX_LIVING_HEALTH diff --git a/code/__DEFINES/~~bubber_defines/obj_flags.dm b/code/__DEFINES/~~bubber_defines/obj_flags.dm new file mode 100644 index 00000000000..60626105544 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/obj_flags.dm @@ -0,0 +1 @@ +#define TRUE_IMMUTABLE_SLOW (1<<22) diff --git a/code/__DEFINES/~~bubber_defines/research/techweb_nodes.dm b/code/__DEFINES/~~bubber_defines/research/techweb_nodes.dm index c82658ac845..17e06cb2175 100644 --- a/code/__DEFINES/~~bubber_defines/research/techweb_nodes.dm +++ b/code/__DEFINES/~~bubber_defines/research/techweb_nodes.dm @@ -6,3 +6,6 @@ #define TECHWEB_NODE_MECHLAUNCHPAD "mechpad" #define TECHWEB_NODE_BORG_RESEARCH "borg_research" + +#define TECHWEB_NODE_BULLET_WEAPONS "bullet_weapons" +#define TECHWEB_NODE_ADVANCED_ARMOR "advanced_armor" diff --git a/code/__DEFINES/~~bubber_defines/traits/declarations.dm b/code/__DEFINES/~~bubber_defines/traits/declarations.dm index 60e61d96e5d..20fdec9ecdf 100644 --- a/code/__DEFINES/~~bubber_defines/traits/declarations.dm +++ b/code/__DEFINES/~~bubber_defines/traits/declarations.dm @@ -85,3 +85,14 @@ /// Trait used to block telepathy types (Genetics, Xenomorph, Revenant, Slime. Ideally should be all.) #define TRAIT_PSIONIC_DAMPENER "psionic_dampener" + +/// Induces a dragging slowdown to the person when applied. +#define TRAIT_BIG_CLOTHES "trait_big_clothes" // 3 slowdown +#define TRAIT_BULKY_CLOTHES "trait_bulky_clothes" // 4 slowdown +#define TRAIT_HUGE_CLOTHES "trait_huge_clothes" // 5 slowdown + +/// Prevents a person from using vehicles. +#define TRAIT_NO_VEHICLE "trait_no_vehicle" + +/// Prevents from being buckled to anything +#define TRAIT_NO_BUCKLE "trait_no_buckle" diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm index cabff5c5d02..cedf22f32dd 100644 --- a/code/datums/components/riding/riding_vehicle.dm +++ b/code/datums/components/riding/riding_vehicle.dm @@ -29,7 +29,6 @@ if(z_move_flags & ZMOVE_FEEDBACK) to_chat(rider, span_warning("You can't seem to hold onto [movable_parent] to move it...")) return COMPONENT_RIDDEN_STOP_Z_MOVE - return COMPONENT_RIDDEN_ALLOW_Z_MOVE /datum/component/riding/vehicle/driver_move(atom/movable/movable_parent, mob/living/user, direction) @@ -79,8 +78,27 @@ COOLDOWN_START(src, message_cooldown, 5 SECONDS) return COMPONENT_DRIVER_BLOCK_MOVE + //BUBBER EDIT + if(HAS_TRAIT(user, TRAIT_NO_VEHICLE)) + if(ride_check_flags & UNBUCKLE_DISABLED_RIDER) + vehicle_parent.unbuckle_mob(user, TRUE) + user.visible_message(span_danger("[user] falls off \the [vehicle_parent]."),\ + span_danger("You get thrown off \the [vehicle_parent] as you are incapable of operating it!")) + + user.adjust_stamina_loss(35) + playsound(src, 'sound/effects/bang.ogg', 40, TRUE) + var/atom/throw_target = get_edge_target_turf(user, pick(GLOB.cardinals)) + user.throw_at(throw_target, 1, 1) + user.Stun(2 SECONDS) + + if(COOLDOWN_FINISHED(src, message_cooldown)) + to_chat(user, span_warning("You cannot operate \the [vehicle_parent] right now!")) + COOLDOWN_START(src, message_cooldown, 5 SECONDS) + return COMPONENT_DRIVER_BLOCK_MOVE + handle_ride(user, direction) return ..() + //BUBBER EDIT END /// This handles the actual movement for vehicles once [/datum/component/riding/vehicle/proc/driver_move] has given us the green light /datum/component/riding/vehicle/proc/handle_ride(mob/user, direction) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 567f0933d12..e55ce22cd79 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -269,7 +269,12 @@ //If buckling is forbidden for the target, cancel if(!target.can_buckle_to && !force) return FALSE - + //Bubber Addition + //If the target has the TRAIT_NO_BUCKLE, preventing buckling + if(HAS_TRAIT(target, TRAIT_NO_BUCKLE)) + to_chat(target, span_danger("You are unable to do that.")) + return FALSE + //Bubber Addition End return TRUE /** diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index ec0994a5025..e345ee8ba3c 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -157,7 +157,7 @@ . = ..() handle_layer() //SKYRAT EDIT ADDITION - if(HAS_TRAIT(M, TRAIT_OVERSIZED)) + if(HAS_TRAIT(M, TRAIT_OVERSIZED) || HAS_TRAIT(M, TRAIT_NO_VEHICLE)) visible_message(span_warning("[src] buckles under the weight of [M] causing it to break!")) playsound(src, 'modular_skyrat/modules/oversized/sound/chair_break.ogg', 70, TRUE) deconstruct() diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 9a4fbfd83cf..8524023ac50 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -100,6 +100,19 @@ add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_OVERSIZED_SLOWDOWN) return //SKYRAT EDIT END + + //BUBBER EDIT + //Handles extra slowdown if the person has certain clothing traits. If someone can do this more modularily, be my guest. + if(HAS_TRAIT(L, TRAIT_BIG_CLOTHES)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_BIG_CLOTHES_SLOWDOWN) + return + if(HAS_TRAIT(L, TRAIT_BULKY_CLOTHES)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_BULKY_CLOTHES_SLOWDOWN) + return + if(HAS_TRAIT(L, TRAIT_HUGE_CLOTHES)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_HUGE_CLOTHES_SLOWDOWN) + return + //BUBBER EDIT END if(!slowed_by_drag || L.body_position == STANDING_UP || L.buckled || grab_state >= GRAB_AGGRESSIVE) remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index dff5a582997..c92e1ea953c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1556,8 +1556,15 @@ /mob/proc/update_equipment_speed_mods() var/speedies = 0 var/immutable_speedies = 0 + //Bubber Addition + var/true_immute_speedies = 0 + //Bubber Addition End for(var/obj/item/thing in get_equipped_speed_mod_items()) - if(thing.item_flags & IMMUTABLE_SLOW) + //Bubber Addition + if(thing.bubber_obj_flags & TRUE_IMMUTABLE_SLOW) + true_immute_speedies += thing.slowdown + //Bubber Addition End + else if(thing.item_flags & IMMUTABLE_SLOW) immutable_speedies += thing.slowdown else speedies += thing.slowdown @@ -1565,6 +1572,15 @@ //if we have TRAIT_STURDY_FRAME, we reduce our overall speed penalty UNLESS that penalty would be a negative value, and therefore a speed boost. if(speedies > 0 && HAS_TRAIT(src, TRAIT_STURDY_FRAME)) speedies *= 0.2 + //Bubber Addition + if(true_immute_speedies) + add_or_update_variable_movespeed_modifier( + /datum/movespeed_modifier/equipment_speedmod/true_immutable, + multiplicative_slowdown = true_immute_speedies, + ) + else + remove_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod/true_immutable) + //Bubber Addition End if(immutable_speedies) add_or_update_variable_movespeed_modifier( diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm index 1b60188c474..e89277bd920 100644 --- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm +++ b/modular_skyrat/modules/aesthetics/guns/code/guns.dm @@ -201,7 +201,7 @@ /obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate name = "'Caracal' anti-materiel rifle" //we flop out - desc = "A sleek, light bullpup .416 Stabilis sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel." + desc = "A sleek, light bullpup .50 BMG sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel." icon_state = "sysniper" fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg' suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg' @@ -238,7 +238,7 @@ /obj/item/gun/ballistic/automatic/ar/modular name = "\improper NT ARG-63" - desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .277 Aestus - nicknamed 'Boarder' by Special Operations teams." + desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .223 - nicknamed 'Boarder' by Special Operations teams." icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi' icon_state = "arg" inhand_icon_state = "arg" @@ -258,102 +258,56 @@ name = "enchanted rifle round" can_be_printed = FALSE // these are Really Really Better Rubbers -// overrides for tgcode's .223 (formerly 5.56), used in the M90-gl - renamed to .277 Aestus -/obj/item/ammo_casing/a223 - name = ".277 Aestus casing" - desc = "A .277 bullet casing." - -/obj/item/ammo_casing/a223/phasic - name = ".277 Aestus phasic casing" - desc = "A .277 Aestus bullet casing.\ -

\ - PHASIC: Ignores all surfaces except organic matter." - advanced_print_req = TRUE - custom_materials = AMMO_MATS_PHASIC - // shotgun ammo overrides moved to modular_skyrat\modules\shotgunrebalance\code\shotgun.dm // overrides for tgcode .50cal, used in their sniper/anti-materiel rifles /obj/item/ammo_casing/p50 - name = ".416 Stabilis casing" - desc = "A .416 bullet casing." advanced_print_req = TRUE // you are NOT printing more ammo for this without effort. // then again the offstations with ammo printers and sniper rifles come with an ammo disk anyway, so /obj/item/ammo_casing/p50/surplus - name = ".416 Stabilis surplus casing" - desc = "A .416 bullet casing. Intentionally underloaded, but still quite painful to be shot with.\ + desc = "A .50 BMG bullet casing. Intentionally underloaded, but still quite painful to be shot with.\

\ SURPLUS/UNDERLOAD: Lacks armor penetration capabilities, contact-stun, or innate dismemberment ability. Still incredibly painful to be hit by." projectile_type = /obj/projectile/bullet/p50/surplus /obj/item/ammo_casing/p50/disruptor - name = ".416 Stabilis disruptor casing" - desc = "A .416 bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\ + desc = "A .50 BMG bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\

\ DISRUPTOR: Forces humanoid targets to sleep, does heavy damage against cyborgs, EMPs struck targets." /obj/item/ammo_casing/p50/incendiary - name = ".416 Stabilis precision incendiary casing" - desc = "A .416 bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\ + desc = "A .50 BMG bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\

\ PRECISION INCENDIARY: Lacks innate dismemberment ability and contact-stun, suffers against mechanized armor. Sets people on fire." projectile_type = /obj/projectile/bullet/p50/incendiary /obj/item/ammo_casing/p50/penetrator - name = ".416 Stabilis penetrator sabot casing" - desc = "A .416 bullet casing. Loaded with a hardened sabot and packed with extra propellant. \ + desc = "A .50 BMG bullet casing. Loaded with a hardened sabot and packed with extra propellant. \ Designed to go through basically everything. A label warns of overpressure risk, and to not use the round if \ a given weapon cannot handle pressures greater than 85000 PSI.\

\ PENETRATOR: Goes through basically everything. Lacks innate dismemberment ability and contact-stun capabilities." /obj/item/ammo_casing/p50/marksman - name = ".416 Stabilis marksman hyperkinetic casing" - desc = "A .416 bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \ + desc = "A .50 BMG bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \ and a concerning amount of experimental propellant. A label warns of overpressure risk, and to not use the round if \ a given weapon cannot handle pressures greater than 95000 PSI.\

\ MARKSMAN: Bullets have no travel time, and can ricochet once. Does slightly less damage, lacks innate dismemberment and contact-stun capabilities." projectile_type = /obj/projectile/bullet/p50/marksman -// overrides for tgcode 4.6x30mm, used in the WT-550 -/obj/item/ammo_casing/c46x30mm - name = "8mm Usurpator bullet casing" - desc = "An 8mm bullet casing." - -/obj/item/ammo_casing/c46x30mm/ap - name = "8mm Usurpator armor-piercing bullet casing" - desc = "An 8mm armor-piercing bullet casing.\ -

\ - ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?" - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/item/ammo_casing/c46x30mm/inc - name = "8mm Usurpator incendiary bullet casing" - desc = "An 8mm incendiary bullet casing.\ -

\ - INCENDIARY: Leaves a trail of fire when shot, sets targets aflame." - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - // overrides for tgcode .45, used in the M1911 and C20-r -/obj/item/ammo_casing/c45 - name = ".460 Ceres bullet casing" - desc = "A .460 bullet casing." /obj/item/ammo_casing/c45/ap - name = ".460 Ceres armor-piercing bullet casing" - desc = "An armor-piercing .460 bullet casing.\ + desc = "An armor-piercing .45 bullet casing.\

\ ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?" custom_materials = AMMO_MATS_AP advanced_print_req = TRUE /obj/item/ammo_casing/c45/inc - name = ".460 Ceres incendiary bullet casing" - desc = "An incendiary .460 bullet casing.\ + desc = "An incendiary .45 bullet casing.\

\ INCENDIARY: Leaves a trail of fire when shot, sets targets aflame." custom_materials = AMMO_MATS_TEMP @@ -361,8 +315,7 @@ // overrides for .50AE, used in the deagle /obj/item/ammo_casing/a50ae - name = ".454 Trucidator bullet casing" - desc = "A .454 Trucidator bullet casing. Extremely powerful.\ + desc = "A .50 Action Express casing. Extremely powerful.\

\ HAND CANNON: Fired out of a handgun, deals disproportionately large damage." @@ -413,12 +366,6 @@ // The ones above are the casings for the ammo, whereas the ones below are the actual projectiles that give you feedback when you're shot -/obj/projectile/bullet/a223 - name = ".277 Aestus bullet" - -/obj/projectile/bullet/a223/phasic - name = ".277 phasic bullet" - /obj/projectile/bullet/c9mm name = "9x25mm bullet" @@ -431,81 +378,5 @@ /obj/projectile/bullet/incendiary/c9mm name = "9x25mm incendiary bullet" -/obj/projectile/bullet/c45 - name = ".460 bullet" - -/obj/projectile/bullet/c45/ap - name = ".460 armor-piercing bullet" - -/obj/projectile/bullet/incendiary/c45 - name = ".460 incendiary bullet" - -/obj/projectile/bullet/c46x30mm - name = "8mm Usurpator bullet" - -/obj/projectile/bullet/c46x30mm/ap - name = "8mm armor-piercing bullet" - -/obj/projectile/bullet/incendiary/c46x30mm - name = "8mm incendiary bullet" - -/obj/projectile/bullet/p50 - name = ".416 Stabilis bullet" - -/obj/projectile/bullet/p50/disruptor - name = ".416 disruptor bullet" - -/obj/projectile/bullet/p50/penetrator - name = ".416 penetrator bullet" - -/obj/projectile/bullet/a50ae - name = ".454 Trucidator bullet" - - -// MAGAZINES UPDATED TO MATCH STUFF - -/obj/item/ammo_box/magazine/wt550m9 - name = "\improper WT-550 magazine" - desc = "A 20-round toploaded 8mm Usurpator magazine that fits neatly in the WT-550." - -/obj/item/ammo_box/magazine/wt550m9/wtap - name = "\improper WT-550 AP magazine" - -/obj/item/ammo_box/magazine/wt550m9/wtic - name = "\improper WT-550 IND magazine" - -/obj/item/ammo_box/magazine/smgm45 - name = ".460 Ceres SMG magazine" - desc = "A magazine chambered for .460 meant to fit in submachine guns." - -/obj/item/ammo_box/magazine/smgm45/ap - name = ".460 Ceres AP SMG magazine" - -/obj/item/ammo_box/magazine/smgm45/incen - name = ".460 Ceres IND SMG magazine" - -/obj/item/ammo_box/magazine/tommygunm45 - name = "\improper Tommy Gun .460 Ceres drum" - desc = "A disc magazine chambered for .460 Ceres." - -/obj/item/ammo_box/magazine/m556 - name = ".277 Aestus toploading magazine" - desc = "A toploading magazine chambered for .277 Aestus." - -/obj/item/ammo_box/magazine/m556/phasic - name = ".277 PHASE toploading magazine" - -/obj/item/ammo_box/magazine/sniper_rounds - name = "anti-materiel rifle magazine" - desc = "A heavy magazine chambered for .416 Stabilis." - -/obj/item/ammo_box/magazine/sniper_rounds/soporific - desc = "A magazine with soporific .416 Stabilis ammo, designed for happy days and dead quiet nights." - -/obj/item/ammo_box/magazine/sniper_rounds/penetrator - name = "anti-materiel rifle ++P magazine" - desc = "A heavy magazine with over the top, overpressurized, and frankly over the top .416 penetrator ammo." - -/obj/item/ammo_box/magazine/m50 - name = ".454 Trucidator handcannon magazine" - desc = "An absurdly THICK magazine possibly meant for a heavy hitting pistol, if you can call it that." +/obj/item/ammo_box/magazine/sniper_rounds/soporific //this is just a regular 50 bmg mag I have no clue why the fuck this exists but some maps are dependant on it so I'm not getting rid of it + desc = "A magazine with .50 BMG ammo, designed for happy days and dead quiet nights." diff --git a/modular_skyrat/modules/black_mesa/code/projectiles.dm b/modular_skyrat/modules/black_mesa/code/projectiles.dm index 2a0c77fa02e..390bd7268a6 100644 --- a/modular_skyrat/modules/black_mesa/code/projectiles.dm +++ b/modular_skyrat/modules/black_mesa/code/projectiles.dm @@ -1,10 +1,10 @@ /obj/projectile/bullet/a223/weak - name = "surplus .277 bullet" + name = "surplus .223 bullet" damage = 25 armour_penetration = 10 wound_bonus = -40 /obj/item/ammo_casing/a223/weak - name = ".277 surplus bullet casing" - desc = "A .277 surplus bullet casing." + name = ".223 surplus bullet casing" + desc = "A .223 surplus bullet casing." projectile_type = /obj/projectile/bullet/a223/weak diff --git a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm b/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm index 1bbad7b3391..3644aa3a1f9 100644 --- a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm +++ b/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm @@ -11,27 +11,25 @@ // whatever goblin decided to spread out bullets over like 3 files and god knows however many overrides i wish you a very stubbed toe /* -* .460 Ceres (renamed tgcode .45) +* .45 bullets */ /obj/item/ammo_casing/c45/hp - name = ".460 Ceres hollow-point bullet casing" - desc = "A .460 hollow-point bullet casing. Very lethal against unarmored opponents. Suffers against armor." + desc = "A .45 hollow-point bullet casing. Very lethal against unarmored opponents. Suffers against armor." projectile_type = /obj/projectile/bullet/c45/hp advanced_print_req = TRUE /obj/projectile/bullet/c45/hp - name = ".460 Ceres hollow-point bullet" damage = 40 weak_against_armour = TRUE /* -* .277 Aestus (renamed tgcode .223, used in the M-90gl) +* .223 bullets */ /obj/item/ammo_casing/a223/ap - name = ".277 Aestus armor-piercing bullet casing" - desc = "A .277 armor-piercing bullet casing.\ + name = ".223 armor-piercing bullet casing" + desc = "A .223 armor-piercing bullet casing.\

\ ARMOR PIERCING: Increased armor piercing capabilities. What did you expect?" projectile_type = /obj/projectile/bullet/a223/ap @@ -39,7 +37,6 @@ custom_materials = AMMO_MATS_AP /obj/projectile/bullet/a223/ap - name = ".277 armor-piercing bullet" armour_penetration = 60 /* diff --git a/modular_skyrat/modules/sec_haul/code/technode/all_nodes.dm b/modular_skyrat/modules/sec_haul/code/technode/all_nodes.dm index 5c359566428..f3d0991a1a4 100644 --- a/modular_skyrat/modules/sec_haul/code/technode/all_nodes.dm +++ b/modular_skyrat/modules/sec_haul/code/technode/all_nodes.dm @@ -14,15 +14,17 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SECURITY) +/* Commenting this out due to the fact that we don't really have anything that falls under the category of 'even more exotic ammo'. The dragon's breath can be safely moved to illegal tech where it fits alongside the incendiary WT ammo. /datum/techweb_node/magazineresearch id = "storedmunition_tech" - display_name = "Ballisitic Research" + display_name = "Esoteric Ammunition" description = "The daring do not stop at reaching the mountaintop, they go where no man has gone before" // and with that nice quote we have exotic ammo 2 prereq_ids = list("exotic_ammo") design_ids = list( "s12g_db" ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) +*/ /datum/techweb_node/basic_arms/New() design_ids += "s12c_fslug" diff --git a/modular_zubbers/code/__DEFINES/projectiles.dm b/modular_zubbers/code/__DEFINES/projectiles.dm index dfa82b6fa2a..877dc6df17f 100644 --- a/modular_zubbers/code/__DEFINES/projectiles.dm +++ b/modular_zubbers/code/__DEFINES/projectiles.dm @@ -1 +1,4 @@ #define CALIBER_69MM "69mm" + +///used by the stingball machine gun +#define CALIBER_STINGBALL "stingball" diff --git a/modular_zubbers/code/datums/components/crafting/crafting/melee_weapon.dm b/modular_zubbers/code/datums/components/crafting/crafting/melee_weapon.dm index 88dd2445b5c..4e1c9121adf 100644 --- a/modular_zubbers/code/datums/components/crafting/crafting/melee_weapon.dm +++ b/modular_zubbers/code/datums/components/crafting/crafting/melee_weapon.dm @@ -26,3 +26,47 @@ ) time = 8 SECONDS category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/stunstaff + name = "Stun Staff" + result = /obj/item/melee/baton/security/staff + reqs = list( + /obj/item/melee/baton/security = 2, + /obj/item/stack/sheet/plasteel = 3, + /obj/item/stack/cable_coil = 5 + ) + blacklist = list( + /obj/item/melee/baton/security/cattleprod, + /obj/item/melee/baton/security/cattleprod/telecrystalprod, + /obj/item/melee/baton/security/cattleprod/teleprod, + /obj/item/melee/baton/security/boomerang, + /obj/item/melee/baton/security/stunsword + ) + tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH) + time = 15 SECONDS + category = CAT_WEAPON_MELEE + crafting_flags = CRAFT_SKIP_MATERIALS_PARITY + +/datum/crafting_recipe/stunstaff_prime + name = "Magna-staff" + result = /obj/item/melee/baton/security/staff/prime + reqs = list( + /obj/item/melee/baton/security/staff = 1, + /obj/item/stack/sheet/mineral/titanium = 10, + /obj/item/stack/sheet/mineral/plasma = 10, + /obj/item/stock_parts/capacitor/quadratic = 5, + /datum/reagent/consumable/ethanol/quintuple_sec = 30, + ) + blacklist = list( + /obj/item/melee/baton/security/staff/prime + ) + tool_behaviors = list(TOOL_WELDER, TOOL_WRENCH) + tool_paths = list( + /obj/item/clothing/accessory/medal/silver/security, + ) + machinery = list( + /obj/machinery/power/apc, + ) + time = 15 SECONDS + category = CAT_WEAPON_MELEE + crafting_flags = CRAFT_SKIP_MATERIALS_PARITY | CRAFT_MUST_BE_LEARNED diff --git a/modular_zubbers/code/datums/components/crafting/guncrafting.dm b/modular_zubbers/code/datums/components/crafting/guncrafting.dm index ec94f7e6c53..07b98b6fcef 100644 --- a/modular_zubbers/code/datums/components/crafting/guncrafting.dm +++ b/modular_zubbers/code/datums/components/crafting/guncrafting.dm @@ -1,5 +1,45 @@ +/obj/item/weaponcrafting/gunkit/wt550_burst + name = "WT-550 burst-fire modification parts kit" + desc = "A suitcase containing the necessary gun parts to modify a WT-550 into a burst-fire assault weapon." + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + ) + +/obj/item/weaponcrafting/gunkit/wt550_long + name = "WT-550 long range operations parts kit" + desc = "A suitcase containing the necessary gun parts to construct a long range WT-550. Contains a long barrel, scope, and modified frame." + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + ) + +/obj/item/weaponcrafting/gunkit/simple_battle_rifle + name = "NT-38 battle rifle simplification kit" + desc = "A suitcase containing the necessary gun parts to remove the advanced electronics and acceleration technology from a NT-38 battle rifle, reducing performance but maximizing reliability." + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, + ) + /obj/item/weaponcrafting/gunkit/regal_condor name = "unnamed weapon parts case (viciously lethal)" desc = "A suitcase containing the necessary gun parts to assemble a very powerful handgun. The case itself has a foreboding aura to it." icon = 'modular_zubbers/icons/obj/weapons/improvised.dmi' icon_state = "syndikitsuitcase" + +/obj/item/weaponcrafting/juggernaut_suit + name = "advanced security suit armor plates" + desc = "A set of incredibly dense armor plates for use in constructing the advanced security suit." + icon = 'modular_zubbers/icons/obj/weapons/improvised.dmi' + icon_state = "jugg_plates" + w_class = WEIGHT_CLASS_HUGE + item_flags = SLOWS_WHILE_IN_HAND + slowdown = 3 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 40, + /datum/material/alloy/plastitanium = SHEET_MATERIAL_AMOUNT * 40, + ) diff --git a/modular_zubbers/code/datums/components/crafting/ranged_weapon.dm b/modular_zubbers/code/datums/components/crafting/ranged_weapon.dm index ec626b05580..63067a04725 100644 --- a/modular_zubbers/code/datums/components/crafting/ranged_weapon.dm +++ b/modular_zubbers/code/datums/components/crafting/ranged_weapon.dm @@ -13,7 +13,7 @@ ) /datum/crafting_recipe/deagle_prime_mag - crafting_flags = CRAFT_SKIP_MATERIALS_PARITY //for the unit test, this recipe is has custom materials like the original. + crafting_flags = CRAFT_SKIP_MATERIALS_PARITY | CRAFT_MUST_BE_LEARNED //for the unit test, this recipe is has custom materials like the original. reqs = list( /obj/item/stack/sheet/iron = 10, /obj/item/stack/sheet/mineral/gold = 10, @@ -22,3 +22,55 @@ /obj/item/stack/telecrystal = 1, //induces a limit on how many magazines you can make /obj/item/food/donkpocket = 1, ) + +/datum/crafting_recipe/wt550_burst + name = "WT-550-B Autoburstrifle" + result = /obj/item/gun/ballistic/automatic/wt550/burst + reqs = list( + /obj/item/gun/ballistic/automatic/wt550 = 1, + /obj/item/weaponcrafting/gunkit/wt550_burst = 1, + ) + blacklist = list( + /obj/item/gun/ballistic/automatic/wt550/burst, + /obj/item/gun/ballistic/automatic/wt550/dmr, + ) + time = 15 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/wt550_long + name = "WT-550-C Autorifle" + result = /obj/item/gun/ballistic/automatic/wt550/dmr + reqs = list( + /obj/item/gun/ballistic/automatic/wt550 = 1, + /obj/item/weaponcrafting/gunkit/wt550_long = 1, + ) + blacklist = list( + /obj/item/gun/ballistic/automatic/wt550/burst, + /obj/item/gun/ballistic/automatic/wt550/dmr, + ) + time = 15 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/simple_battle_rifle + name = "NT .38 Battle Rifle" + result = /obj/item/gun/ballistic/automatic/battle_rifle_basic + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL) + reqs = list( + /obj/item/gun/ballistic/automatic/battle_rifle = 1, + /obj/item/weaponcrafting/gunkit/simple_battle_rifle = 1, + ) + time = 20 SECONDS + category = CAT_WEAPON_RANGED + crafting_flags = CRAFT_SKIP_MATERIALS_PARITY + +/datum/crafting_recipe/nuclear_smg + name = "Advanced Energy SMG" + result = /obj/item/gun/energy/e_gun/nuclear_smg + tool_behaviors = list(TOOL_WIRECUTTER, TOOL_MULTITOOL) + reqs = list( + /obj/item/gun/energy/e_gun/nuclear = 1, + /obj/item/gun/energy/laser/carbine = 1, + /obj/item/gun/energy/disabler/smg = 1, + ) + time = 20 SECONDS + category = CAT_WEAPON_RANGED diff --git a/modular_zubbers/code/datums/components/crafting/tailoring.dm b/modular_zubbers/code/datums/components/crafting/tailoring.dm index 718a6963604..29c90082a24 100644 --- a/modular_zubbers/code/datums/components/crafting/tailoring.dm +++ b/modular_zubbers/code/datums/components/crafting/tailoring.dm @@ -113,3 +113,21 @@ reqs = list(/obj/item/stack/sheet/mineral/metal_hydrogen = 3, /obj/item/clothing/head/utility/hardhat/welding/atmos = 1) category = CAT_CLOTHING + +/datum/crafting_recipe/security_juggernaut + name = "Security Juggernaut Suit" + result = /obj/item/clothing/suit/hooded/secjuggernaut + time = 60 + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WELDER, TOOL_WRENCH, TOOL_CROWBAR, TOOL_MULTITOOL) + reqs = list( + /obj/item/weaponcrafting/juggernaut_suit = 1, + /obj/item/clothing/shoes/magboots = 1, + /obj/item/flashlight/seclite = 2, + /obj/item/clothing/suit/armor/swat = 1, + /obj/item/clothing/head/helmet/swat = 1, + /obj/item/stack/cable_coil = 30, + ) + blacklist = list( + /obj/item/clothing/shoes/magboots/advance + ) + category = CAT_CLOTHING diff --git a/modular_zubbers/code/datums/components/crafting/weapon_ammo.dm b/modular_zubbers/code/datums/components/crafting/weapon_ammo.dm new file mode 100644 index 00000000000..9be90faa645 --- /dev/null +++ b/modular_zubbers/code/datums/components/crafting/weapon_ammo.dm @@ -0,0 +1,9 @@ +/datum/crafting_recipe/stingballcan + name = "Stingball Canister" + result = /obj/item/ammo_box/stingball + reqs = list( + /obj/item/grenade/stingbang = 1, + ) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + time = 1.0 SECONDS + category = CAT_WEAPON_AMMO 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 252879574b1..b42771530ee 100644 --- a/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm +++ b/modular_zubbers/code/game/objects/effects/spawners/random/armory.dm @@ -46,8 +46,7 @@ /obj/effect/spawner/random/armory/smg loot = list( - /obj/item/gun/ballistic/automatic/wt550/security - ) + /obj/item/gun/ballistic/automatic/wt550) spawn_loot_count = 2 diff --git a/modular_zubbers/code/game/objects/effects/spawners/random/contraband.dm b/modular_zubbers/code/game/objects/effects/spawners/random/contraband.dm new file mode 100644 index 00000000000..9a844611d48 --- /dev/null +++ b/modular_zubbers/code/game/objects/effects/spawners/random/contraband.dm @@ -0,0 +1,12 @@ +/obj/effect/spawner/random/contraband/armory + loot = list( + /obj/item/gun/ballistic/automatic/pistol/contraband = 80, + /obj/item/gun/ballistic/shotgun/automatic/combat = 50, + /obj/item/storage/box/syndie_kit/throwing_weapons = 30, + /obj/item/grenade/clusterbuster/teargas = 20, + /obj/item/grenade/clusterbuster = 20, + /obj/item/gun/ballistic/automatic/pistol/deagle/contraband, + /obj/item/gun/ballistic/revolver/mateba = 9, + /obj/item/gun/ballistic/revolver/reverse/mateba = 1, + /obj/item/book/granter/crafting_recipe/stunstaff_prime = 10, + ) diff --git a/modular_zubbers/code/game/objects/items/granters/crafting/magnastaff.dm b/modular_zubbers/code/game/objects/items/granters/crafting/magnastaff.dm new file mode 100644 index 00000000000..f5fff279eb9 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/granters/crafting/magnastaff.dm @@ -0,0 +1,20 @@ +/obj/item/book/granter/crafting_recipe/stunstaff_prime + name = "diary of a lonely warden" + desc = "A relatively clean diary. It reeks of pepperspray and copper." + crafting_recipe_types = list( + /datum/crafting_recipe/stunstaff_prime + ) + icon_state = "book1" + remarks = list( + "It gets pretty lonely sitting in the brig all shift, doesn't it...?", + "With all that time on time on your hands, you're bound to come up with something.", + "A more effective way to apply police brutality...", + "Overcharge the capacitors... apply a titanium reinforcement...", + "Why not just use a gun instead?", + "Ah yes, jam the staff right into an APC. What could go wrong?", + "It recharges HOW fast between attacks?", + ) + +/obj/item/book/granter/crafting_recipe/stunstaff_prime/recoil(mob/living/user) + to_chat(user, span_warning("The book turns to dust in your hands.")) + qdel(src) diff --git a/modular_zubbers/code/game/objects/items/weaponry/melee/baton.dm b/modular_zubbers/code/game/objects/items/weaponry/melee/baton.dm new file mode 100644 index 00000000000..42ab3d0df14 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/weaponry/melee/baton.dm @@ -0,0 +1,86 @@ +/obj/item/melee/baton/security/staff + name = "stun staff" + desc = "An advanced Secure Apprehension Device in the form of a quarterstaff. Debatably more effective at incapacitating targets." + icon = 'modular_zubbers/icons/obj/weapons/baton.dmi' + icon_state = "stunstaff" + base_icon_state = "stunstaff" + lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'modular_zubbers/icons/mob/inhands/weapons/staves_righthand.dmi' + inhand_icon_state = "stunstaff" + worn_icon = 'modular_zubbers/icons/mob/clothing/back.dmi' + worn_icon_state = "stunstaff" + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + convertible = FALSE + + block_chance = 50 //functionally a side-grade to a riot shield and baton, cannot block projectiles and is worse against tackles in exchange for being unbreakable and cool and marginally statistically better + block_sound = 'sound/items/weapons/genhit.ogg' + stamina_damage = 65 //marginally better at stamcritting + stun_armour_penetration = 20 //ditto + force = 14 //bigger batong, downs in ~8 instead of 10 + throwforce = 8 + +/obj/item/melee/baton/security/staff/Initialize(mapload) //because it'd honestly be too much of a headache (for me) to make it activate/deactivate when wielded/unwielded especially since the way the game checks for the cell. + . = ..() + AddComponent(/datum/component/two_handed, require_twohands = TRUE) + +/obj/item/melee/baton/security/staff/attack(mob/target, mob/living/carbon/human/user) + ..() + if(prob(50)) + INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) + +/obj/item/melee/baton/security/staff/proc/jedi_spin(mob/living/user) + dance_rotate(user, CALLBACK(user, TYPE_PROC_REF(/mob, dance_flip))) + +/obj/item/melee/baton/security/staff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(attack_type == LEAP_ATTACK) + final_block_chance -= 30 //It's still worse than a shield and a baton but it's for the cool factor and to not make it that terrible in comparison + if(attack_type == PROJECTILE_ATTACK) + final_block_chance -= 40 //Don't rely on this. + if(attack_type == OVERWHELMING_ATTACK) + final_block_chance = 0 //Don't bring a staff to a road roller roller fight. + return ..() + +/obj/item/melee/baton/security/staff/loaded + preload_cell_type = /obj/item/stock_parts/power_store/cell/high + +/obj/item/melee/baton/security/staff/add_deep_lore() + return + +/obj/item/melee/baton/security/staff/prime + name = "\improper Magna-staff" + desc = "An absolutely brutal feat of less-lethal engineering. The unique construction allows it to recharge between shocks incredibly quickly. Definitely more effective at incapacitating targets and posesses exceptional blocking capabilities." + icon_state = "stunstaff_prime" + base_icon_state = "stunstaff_prime" + inhand_icon_state = "stunstaff_prime" + worn_icon_state = "stunstaff_prime" + + block_chance = 75 //security desword + block_sound = 'sound/items/weapons/genhit.ogg' + stamina_damage = 24 //way less stamina damage but oh lord it attacks fast + stun_armour_penetration = 35 //same as desword + force = 15 + throwforce = 10 + throw_stun_chance = 75 + throw_range = 6 + cell_hit_cost = STANDARD_CELL_CHARGE * 4 //guzzler. It's overcharged, what do you expect? + knockdown_time = 0.5 SECONDS //one tenth the knockdown + cooldown = 0 SECONDS //as fast as you can attack (probably) + + light_color = LIGHT_COLOR_FLARE + +/obj/item/melee/baton/security/staff/prime/Initialize(mapload) + . = ..() + AddComponent(/datum/component/boomerang, throw_range + 2, TRUE) + +/obj/item/melee/baton/security/staff/prime/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) + if(attack_type == LEAP_ATTACK) + final_block_chance -= 45 //effective 30 + if(attack_type == PROJECTILE_ATTACK) + final_block_chance -= 25 //effective 50 + if(attack_type == OVERWHELMING_ATTACK) + final_block_chance = 0 + return ..() + +/obj/item/melee/baton/security/staff/prime/loaded + preload_cell_type = /obj/item/stock_parts/power_store/cell/bluespace diff --git a/modular_zubbers/code/game/objects/objs.dm b/modular_zubbers/code/game/objects/objs.dm new file mode 100644 index 00000000000..8b3169bb790 --- /dev/null +++ b/modular_zubbers/code/game/objects/objs.dm @@ -0,0 +1,2 @@ +/obj + var/bubber_obj_flags diff --git a/modular_zubbers/code/modules/cargo/exports/weapons.dm b/modular_zubbers/code/modules/cargo/exports/weapons.dm deleted file mode 100644 index b892ef6756f..00000000000 --- a/modular_zubbers/code/modules/cargo/exports/weapons.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/export/weapon/wt550 - exclude_types = list(/obj/item/gun/ballistic/automatic/wt550/security) - -/datum/export/weapon/wt551 - export_types = list(/obj/item/gun/ballistic/automatic/wt550/security) - cost = CARGO_CRATE_VALUE * 1.25 - unit_name = "WT-551 automatic rifle" diff --git a/modular_zubbers/code/modules/cargo/packs/goodies.dm b/modular_zubbers/code/modules/cargo/packs/goodies.dm index d25b801c2cb..9a88e2c71fe 100644 --- a/modular_zubbers/code/modules/cargo/packs/goodies.dm +++ b/modular_zubbers/code/modules/cargo/packs/goodies.dm @@ -10,15 +10,15 @@ contains = list(/obj/item/gun/energy/laser/carbine) /datum/supply_pack/goody/wt550_single - name = "WT-551 Autorifle Single-Pack" - desc = "An NT-security grade autorifle, it comes with excellent heating and poses no health-related risks for the user. Comes as a single-pack with one WT-551 locked and loaded." + name = "WT-550 Autorifle Single-Pack" + desc = "A surplus-grade autorifle, it comes with excellent heating and poses no health-related risks for the user. Comes as a single-pack with one WT-550 locked and loaded." cost = PAYCHECK_COMMAND * 8 //Nvm these are stronger than lasers in most scenarios so let's get them a bit of an edge. Plus gun price variety looks better access_view = ACCESS_WEAPONS - contains = list(/obj/item/gun/ballistic/automatic/wt550/security) + contains = list(/obj/item/gun/ballistic/automatic/wt550) /datum/supply_pack/goody/wt550_ammo - name = "WT-550/WT-551 Autorifle Magazine Single-Pack" - desc = "A single-pack magazine with lethal regular rounds for the WT-551." + name = "WT-550 Autorifle Magazine Single-Pack" + desc = "A single-pack magazine with lethal regular rounds for the WT-550." cost = PAYCHECK_CREW * 5 //Scale it like all guns contains = list(/obj/item/ammo_box/magazine/wt550m9 = 1) diff --git a/modular_zubbers/code/modules/cargo/packs/security.dm b/modular_zubbers/code/modules/cargo/packs/security.dm index dda36cc49ea..3d026d7b02d 100644 --- a/modular_zubbers/code/modules/cargo/packs/security.dm +++ b/modular_zubbers/code/modules/cargo/packs/security.dm @@ -1,13 +1,13 @@ -/datum/supply_pack/security/armory/wt551 - name = "WT-551 Autorifle Crate" - desc = "Contains a pair of WT-551 Autorifles pre-loaded with less-lethal rubber-tipped rounds. Additional ammo sold seperately. Backwards-compatible with WT-550 magazines. Nanotrasen reminds you that the other weapon is for a friend, and not for going guns akimbo." +/datum/supply_pack/security/armory/wt550 + name = "WT-550 Autorifle Crate" + desc = "Contains a trifecta of pre-loaded WT-550 Autorifles. Additional ammo sold seperately." cost = CARGO_CRATE_VALUE * 10 - contains = list(/obj/item/gun/ballistic/automatic/wt550/security = 3) + contains = list(/obj/item/gun/ballistic/automatic/wt550 = 3) crate_name = "wt-550 autorifle crate" /datum/supply_pack/security/armory/wt550_ammo_regular - name = "WT-550/WT-551 Autorifle Ammo Crate (Regular)" - desc = "Contains 4 magazines with lethal regular rounds for the WT-551." + name = "WT-550 Autorifle Ammo Crate (Regular)" + desc = "Contains 4 magazines with lethal regular rounds for the WT-550." cost = CARGO_CRATE_VALUE * 4 //these are printable, price can be lowered safely to 800ish contains = list(/obj/item/ammo_box/magazine/wt550m9 = 4) crate_name = "wt-550 magazine crate (regular)" @@ -227,3 +227,31 @@ /obj/item/gun/energy/modular_laser_rifle/carbine, /obj/item/gun/energy/modular_laser_rifle/carbine, ) + +/datum/supply_pack/security/armory/stingballer + name = "Stingball Rifle crate" + crate_name = "stingball rifle crate" + desc = "A single unit of a prototype rifle designed to rapidly shoot stingball pellets. Comes preloaded, but additional ammunition is sold seperately." + cost = CARGO_CRATE_VALUE * 22.5 + contains = list( + /obj/item/gun/ballistic/rifle/stingballer, + ) + +/datum/supply_pack/security/armory/kiboko + name = "Kiboko Grenade Launcher Crate" + crate_name = "Kiboko grenade launcher crate" + desc = "A brand-new loaded Kiboko grenade launcher just for you, in case you somehow lost the issued one." + cost = CARGO_CRATE_VALUE * 37.5 + contains = list( + /obj/item/gun/ballistic/automatic/sol_grenade_launcher + ) + +/datum/supply_pack/security/armory/grenadelauncher + name = "Pneumatic Grenade Launcher Crate" + crate_name = "grenade launcher crate" + desc = "A truly diabolical weapon for rapid deployment of any standard grenade. Comes with a complimentary box of flashbangs." + cost = CARGO_CRATE_VALUE * 75 + contains = list( + /obj/item/gun/grenadelauncher, + /obj/item/storage/box/flashbangs, + ) diff --git a/modular_zubbers/code/modules/clothing/suits/armor.dm b/modular_zubbers/code/modules/clothing/suits/armor.dm index 64b5849514a..ac3d82403bd 100644 --- a/modular_zubbers/code/modules/clothing/suits/armor.dm +++ b/modular_zubbers/code/modules/clothing/suits/armor.dm @@ -268,6 +268,136 @@ /obj/item/clothing/head/hooded/cultlain_hood worn_icon_teshari = 'modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi' +/obj/item/clothing/suit/hooded/secjuggernaut + name = "security juggernaut suit" + desc = "The Advanced Security Suit offers nigh-perfect protection of the wearer through an advanced layering of kevlar, titanium, and ceramic plates. \ + The construction of the suit unfortunately renders it incredibly heavy and cumbersome, effectively slowing the user to a crawl and heavily limiting their mobility options. \ + Only through recently developed micro-anti-gravitational generators can the suit actually be worn and moved in. \ + Comes along with a built-in helmet for EVA action." + icon_state = "security_jugger" + icon = 'modular_zubbers/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_zubbers/icons/mob/clothing/suits/armor.dmi' + worn_icon_digi = 'modular_zubbers/icons/mob/clothing/suits/armor_digi.dmi' + worn_icon_teshari = 'modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi' + inhand_icon_state = "swat_suit" + hoodtype = /obj/item/clothing/head/hooded/secjuggernaut + hood_up_affix = "" + armor_type = /datum/armor/secjuggernaut + w_class = WEIGHT_CLASS_HUGE + siemens_coefficient = 0 + strip_delay = 25 SECONDS + equip_delay_self = 12 SECONDS + equip_delay_other = 15 SECONDS + resistance_flags = FIRE_PROOF | ACID_PROOF + item_flags = SLOWS_WHILE_IN_HAND | IMMUTABLE_SLOW + clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT + bubber_obj_flags = TRUE_IMMUTABLE_SLOW + cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + slowdown = 5 + drag_slowdown = 5 + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, TRAIT_PUSHIMMUNE, TRAIT_NEGATES_GRAVITY, TRAIT_NO_SLIP_WATER, TRAIT_NO_VEHICLE, TRAIT_HUGE_CLOTHES, TRAIT_NO_BUCKLE) + allowed = list( + /obj/item/tank/internals, + /obj/item/tank/jetpack/captain, + ) + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 40.4, + /datum/material/alloy/plastitanium = SHEET_MATERIAL_AMOUNT * 40, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3.4 + ) + +/obj/item/clothing/suit/hooded/secjuggernaut/examine(mob/user) + . = ..() + . += span_warning("Trying to buckle to anything while wearing this is impossible, whether it be a chair, cyborg, horse, or golf cart.") + +/obj/item/clothing/suit/hooded/secjuggernaut/Initialize(mapload) + . = ..() + allowed += GLOB.security_vest_allowed + +/obj/item/clothing/head/hooded/secjuggernaut + name = "security juggernaut helmet" + desc = "A helmet built into the Advanced Security Suit. It offers nigh-perfect protection with the drawback of being permanently affixed to an incredibly heavy suit. \ + It is pressure resistant, flash-protected, and comes with a built-in seclite for visiblity in dark areas.\ + While made of the same materials and having the same overall construction, built-in servos and actuators allow it to be easily put on compared to the suit it comes with." + icon_state = "security_jugger0" + icon = 'modular_zubbers/icons/obj/clothing/head/helmet.dmi' + worn_icon = 'modular_zubbers/icons/mob/clothing/head/helmet.dmi' + worn_icon_muzzled = 'modular_zubbers/icons/mob/clothing/head/helmet_muzzled.dmi' + worn_icon_teshari = 'modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi' + armor_type = /datum/armor/secjuggernaut + flash_protect = FLASH_PROTECTION_WELDER + strip_delay = 15 SECONDS + clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | HEADINTERNALS + bubber_obj_flags = TRUE_IMMUTABLE_SLOW + clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT + flags_inv = HIDEHAIR|HIDEFACE|HIDESNOUT|SHOWSPRITEEARS + flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH|PEPPERPROOF + resistance_flags = FIRE_PROOF | ACID_PROOF + + actions_types = list(/datum/action/item_action/toggle_helmet_light) + light_system = OVERLAY_LIGHT_DIRECTIONAL + light_range = 7 + light_power = 1.0 + light_color = "#99ccff" + light_on = FALSE + var/on = FALSE + + var/sound_on = 'sound/items/weapons/magin.ogg' + var/sound_off = 'sound/items/weapons/magout.ogg' + +/obj/item/clothing/head/hooded/secjuggernaut/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + AddComponent(/datum/component/wearertargeting/earprotection) + +/obj/item/clothing/head/hooded/secjuggernaut/proc/toggle_helmet_light(mob/living/user) + on = !on + if(on) + playsound(src, sound_on, 40, TRUE) + turn_on(user) + else + playsound(src, sound_off, 40, TRUE) + turn_off(user) + update_appearance() + +/obj/item/clothing/head/hooded/secjuggernaut/update_icon_state() + icon_state = "security_jugger[on]" + return ..() + +/obj/item/clothing/head/hooded/secjuggernaut/proc/turn_on(mob/user) + set_light_on(TRUE) + +/obj/item/clothing/head/hooded/secjuggernaut/proc/turn_off(mob/user) + set_light_on(FALSE) + +/obj/item/clothing/head/hooded/secjuggernaut/on_saboteur(datum/source, disrupt_duration) + . = ..() + if(on) + toggle_helmet_light() + return TRUE + +/obj/item/clothing/head/hooded/secjuggernaut/attack_self(mob/living/user) + toggle_helmet_light(user) + +/datum/armor/secjuggernaut + melee = 80 + bullet = 80 + laser = 70 + energy = 40 + bomb = 100 + bio = 100 + fire = 100 + acid = 100 + wound = 40 + /obj/item/clothing/suit/armor/vest/blueshirt worn_icon_teshari = 'modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi' diff --git a/modular_zubbers/code/modules/jobs/job_types/cargo_technician.dm b/modular_zubbers/code/modules/jobs/job_types/cargo_technician.dm index 02a48eb0370..801341e577a 100644 --- a/modular_zubbers/code/modules/jobs/job_types/cargo_technician.dm +++ b/modular_zubbers/code/modules/jobs/job_types/cargo_technician.dm @@ -1,4 +1,3 @@ /datum/job/cargo_technician/New() mail_goodies -= /obj/item/gun/ballistic/automatic/wt550 - mail_goodies += /obj/item/gun/ballistic/automatic/wt550/security . = ..() diff --git a/modular_zubbers/code/modules/mob/living/basic/trooper/nanotrasen.dm b/modular_zubbers/code/modules/mob/living/basic/trooper/nanotrasen.dm index 806f40d6adc..f4af26e6cf8 100644 --- a/modular_zubbers/code/modules/mob/living/basic/trooper/nanotrasen.dm +++ b/modular_zubbers/code/modules/mob/living/basic/trooper/nanotrasen.dm @@ -1,3 +1,3 @@ /mob/living/basic/trooper/nanotrasen/ranged/smg casingtype = /obj/item/ammo_casing/c46x30mm - r_hand = /obj/item/gun/ballistic/automatic/wt550/security + r_hand = /obj/item/gun/ballistic/automatic/wt550 diff --git a/modular_zubbers/code/modules/movespeed/modifiers/mobs.dm b/modular_zubbers/code/modules/movespeed/modifiers/mobs.dm new file mode 100644 index 00000000000..036f622d81c --- /dev/null +++ b/modular_zubbers/code/modules/movespeed/modifiers/mobs.dm @@ -0,0 +1,2 @@ +/datum/movespeed_modifier/equipment_speedmod/true_immutable //will apply anywhere + blacklisted_movetypes = null diff --git a/modular_zubbers/code/modules/power/cell.dm b/modular_zubbers/code/modules/power/cell.dm new file mode 100644 index 00000000000..1b6240b983f --- /dev/null +++ b/modular_zubbers/code/modules/power/cell.dm @@ -0,0 +1,4 @@ +/obj/item/stock_parts/power_store/cell/laser_lmg + name = "laser machine gun power cell" + maxcharge = STANDARD_CELL_CHARGE * 3 + chargerate = STANDARD_CELL_RATE * 0.5 diff --git a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm index 6cb06f4ffcf..e291d0e2b3a 100644 --- a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -1,2 +1,15 @@ /obj/item/ammo_casing/strilka310/phasic can_be_printed = FALSE + +/obj/item/ammo_casing/stingballer + name = "stingball pellet" + desc = "A small metal bearing." + icon = 'modular_zubbers/icons/obj/weapons/guns/ammo.dmi' + icon_state = "stingball" + caliber = CALIBER_STINGBALL + projectile_type = /obj/projectile/bullet/pellet/stingball + +/obj/item/ammo_casing/stingballer/Initialize(mapload) + . = ..() + + AddElement(/datum/element/caseless) diff --git a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/smg.dm b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/smg.dm index c89d1711f7b..61568f0eecf 100644 --- a/modular_zubbers/code/modules/projectiles/ammunition/ballistic/smg.dm +++ b/modular_zubbers/code/modules/projectiles/ammunition/ballistic/smg.dm @@ -19,6 +19,14 @@ advanced_print_req = TRUE custom_materials = AMMO_MATS_TEMP +/obj/item/ammo_casing/c46x30mm/compressed + name = "compressed 4.6x30mm bullet casing" + desc = "A compressed 4.6x30mm bullet casing." + projectile_type = /obj/projectile/bullet/c46x30mm/compressed + can_be_printed = TRUE + advanced_print_req = TRUE + custom_materials = AMMO_MATS_HOMING + /obj/item/ammo_casing/caseless/c22hl/ntmp5 projectile_type = /obj/projectile/bullet/c22hl/ntmp5 diff --git a/modular_zubbers/code/modules/projectiles/ammunition/energy/laser.dm b/modular_zubbers/code/modules/projectiles/ammunition/energy/laser.dm new file mode 100644 index 00000000000..d4f8c63b311 --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/ammunition/energy/laser.dm @@ -0,0 +1,5 @@ +/obj/item/ammo_casing/energy/lasergun/carbine_old + projectile_type = /obj/projectile/beam/laser/carbine_old + e_cost = LASER_SHOTS(40, STANDARD_CELL_CHARGE) + select_name = "kill" + fire_sound = 'sound/items/weapons/laser2.ogg' diff --git a/modular_zubbers/code/modules/projectiles/beams.dm b/modular_zubbers/code/modules/projectiles/beams.dm new file mode 100644 index 00000000000..f1927ad7f27 --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/beams.dm @@ -0,0 +1,5 @@ +/obj/projectile/beam/laser/carbine_old + name = "carbine laser" + icon_state = "carbine_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + damage = 15 diff --git a/modular_zubbers/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/modular_zubbers/code/modules/projectiles/boxes_magazines/ammo_boxes.dm new file mode 100644 index 00000000000..3f90a7891b3 --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -0,0 +1,9 @@ +/obj/item/ammo_box/stingball + name = "stingball canister" + desc = "A cut open stingbang." + icon = 'modular_zubbers/icons/obj/weapons/guns/ammo.dmi' + icon_state = "stingball_mag" + ammo_type = /obj/item/ammo_casing/stingballer + max_ammo = 25 + ammo_box_multiload = AMMO_BOX_MULTILOAD_ALL + custom_materials = null diff --git a/modular_zubbers/code/modules/projectiles/boxes_magazines/external/smg.dm b/modular_zubbers/code/modules/projectiles/boxes_magazines/external/smg.dm index a79df9f7fcb..66476abce6c 100644 --- a/modular_zubbers/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/modular_zubbers/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -2,11 +2,31 @@ name = "\improper WT-550 magazine" /obj/item/ammo_box/magazine/wt550m9/wtap - name = "wt550 Armour-piercing magazine" + name = "wt550 armour-piercing magazine" /obj/item/ammo_box/magazine/wt550m9/wtic name = "wt550 incendiary magazine" +/obj/item/ammo_box/magazine/wt550m9/compressed //20% higher damage potential than the standard bullets, but DPS is lower + name = "compressed wt550 magazine" + ammo_type = /obj/item/ammo_casing/c46x30mm/compressed + ammo_band_color = "#00618E" + max_ammo = 40 + caliber = null + multitype = FALSE //we don't want people loading these with normal or ap bullets do we + +/obj/item/ammo_box/magazine/wt550m9/compressed/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[round(ammo_count()/2, 4)]" + +/obj/item/ammo_box/magazine/wt550m9/compressed/super + name = "hyper compressed wt550 magazine" + ammo_band_color = "#072E40" + max_ammo = 60 +/obj/item/ammo_box/magazine/wt550m9/compressed/super/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[round(ammo_count()/3, 4)]" + /obj/item/ammo_box/magazine/recharge/ntmp5 name = "large disabling power pack" diff --git a/modular_zubbers/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/modular_zubbers/code/modules/projectiles/boxes_magazines/internal/rifle.dm new file mode 100644 index 00000000000..a6fdcfb5823 --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -0,0 +1,9 @@ +/obj/item/ammo_box/magazine/internal/stingballer + name = "stingball rifle internal magazine" + desc = "If you're reading this" + ammo_type = /obj/item/ammo_casing/stingballer + caliber = CALIBER_STINGBALL + max_ammo = 50 + +/obj/item/ammo_box/magazine/internal/stingballer/empty + start_empty = TRUE diff --git a/modular_zubbers/code/modules/projectiles/guns/ballistic/automatic.dm b/modular_zubbers/code/modules/projectiles/guns/ballistic/automatic.dm index 0f677d1ea58..d0cd469dca0 100644 --- a/modular_zubbers/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/modular_zubbers/code/modules/projectiles/guns/ballistic/automatic.dm @@ -1,18 +1,30 @@ /obj/item/gun/ballistic/automatic/wt550 can_suppress = FALSE + can_be_sawn_off = TRUE +/obj/item/gun/ballistic/automatic/wt550/sawoff(mob/user) + . = ..() + if(.) + desc = "why would you do this" + icon = 'modular_zubbers/icons/obj/weapons/guns/ballistic.dmi' + w_class = WEIGHT_CLASS_NORMAL + spread = 10 + dual_wield_spread = 20 + recoil = SAWN_OFF_RECOIL + update_appearance() /obj/item/gun/ballistic/automatic/wt550/add_bayonet_point() return -/obj/item/gun/ballistic/automatic/wt550/security - name = "\improper WT-551 Autorifle" - desc = "A heavier, bulkier automatic variant of the WT-550, and now with 99% less discombobulation! It's back, baby. Uses 4.6x30mm rounds. Recommended to hold with two hands." - icon = 'modular_zubbers/icons/obj/weapons/guns/wt551.dmi' - fire_sound = 'modular_zubbers/sound/weapons/gun/wt551/shot.ogg' - w_class = WEIGHT_CLASS_BULKY - fire_delay = 3 - //18 damage per 0.3 seconds = 60 DPS - //Reference: Laser Gun 22 damage per 0.4 seconds = 55DPS +/obj/item/gun/ballistic/automatic/wt550/Initialize(mapload) + . = ..() + if(type != /obj/item/gun/ballistic/automatic/wt550) + return + var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/wt550_burst, /datum/crafting_recipe/wt550_long) + + AddElement( + /datum/element/slapcrafting,\ + slapcraft_recipes = slapcraft_recipe_list,\ + ) /obj/item/gun/ballistic/automatic/ntmp5 burst_size = 1 @@ -150,3 +162,104 @@ recoil = 0 spread = 5 update_appearance() + +/obj/item/gun/ballistic/automatic/wt550/burst + name = "\improper WT-550-B Autoburstrifle" + desc = "Not so much of a rifle, being modified closer to a submachine gun, but still somehow just as bulky. Outfitted with a modified frame and barrel and a two-shot burst trigger mechanism. Performs overall better than the average autorifle, but kicks a bit more. Has a threaded barrel for suppressors. Uses 4.6x30mm rounds." + icon = 'modular_zubbers/icons/obj/weapons/guns/ballistic.dmi' + icon_state = "wt550b" + fire_sound = 'modular_zubbers/sound/weapons/gun/wt551/shot.ogg' + can_suppress = TRUE + can_be_sawn_off = FALSE + suppressor_x_offset = 4 + spread = 3 + recoil = 0.25 + burst_delay = 1 + burst_size = 2 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 8.5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3 + ) + +/obj/item/gun/ballistic/automatic/wt550/burst/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.5 SECONDS) + +/obj/item/gun/ballistic/automatic/wt550/burst/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 17, \ + overlay_y = 9) + +/obj/item/gun/ballistic/automatic/wt550/dmr + name = "\improper WT-550-C Autorifle" + desc = "A longer range WT-550, assembled using an aftermarket kit and parts. Outfitted with the longest barrel and custom trigger to enhance performance at a distance. Equipped with a custom scope and a threaded barrel for suppressors. Uses 4.6x30mm rounds." + icon = 'modular_zubbers/icons/obj/weapons/guns/wide_guns.dmi' + worn_icon = 'icons/mob/clothing/belt.dmi' + worn_icon_state = "gun" + fire_sound = 'modular_zubbers/sound/weapons/gun/wt551/shot.ogg' + weapon_weight = WEAPON_HEAVY + can_suppress = TRUE + can_be_sawn_off = FALSE + suppressor_x_offset = 6 + slot_flags = ITEM_SLOT_BACK + projectile_damage_multiplier = 1.50 // 30 damage base + wounding at half the firerate + projectile_speed_multiplier = 1.50 + projectile_wound_bonus = 5 + burst_delay = 6 + burst_size = 1 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 8.5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3 + ) + + SET_BASE_PIXEL(-8, 0) + +/obj/item/gun/ballistic/automatic/wt550/dmr/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.6 SECONDS) + AddComponent(/datum/component/scope, range_modifier = 2.0) + +/obj/item/gun/ballistic/automatic/battle_rifle_basic + name = "\improper .38 battle rifle" + desc = "A lower-tech alternative version of Nanotrasen's latest prototype longarm, granting a different option to those who don't care for the NT-38. \ + Technically a pistol-caliber carbine, despite the name and its use as a battle rifle. \ + Forsaking the advanced electronics and integrated technological advantages allows it to perform infinitely more reliably." + icon = 'modular_zubbers/icons/obj/weapons/guns/wide_guns.dmi' + icon_state = "battle_rifle" + lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi' + righthand_file = 'modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi' + inhand_icon_state = "battle_rifle" + worn_icon = 'icons/mob/clothing/back.dmi' + worn_icon_state = "battle_rifle" + slot_flags = ITEM_SLOT_BACK + + weapon_weight = WEAPON_HEAVY + accepted_magazine_type = /obj/item/ammo_box/magazine/m38 + w_class = WEIGHT_CLASS_BULKY + force = 15 + mag_display = TRUE + empty_indicator = TRUE + fire_delay = 1.5 DECISECONDS + burst_size = 1 + actions_types = list() + fire_sound = 'sound/items/weapons/thermalpistol.ogg' + suppressor_x_offset = 0 + + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 11, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, + ) + + SET_BASE_PIXEL(-8, 0) + +/obj/item/gun/ballistic/automatic/battle_rifle_basic/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 26, \ + overlay_y = 10) diff --git a/modular_zubbers/code/modules/projectiles/guns/ballistic/rifle.dm b/modular_zubbers/code/modules/projectiles/guns/ballistic/rifle.dm index 7694b351894..cd132d0d929 100644 --- a/modular_zubbers/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/modular_zubbers/code/modules/projectiles/guns/ballistic/rifle.dm @@ -7,3 +7,35 @@ lefthand_file = 'modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi' inhand_icon_state = "rebarxbowsyndie" + +/obj/item/gun/ballistic/rifle/stingballer + name = "\improper S-K Stingball Rifle" + desc = "A pneumatic rifle designed to rapidly fire stingballs. Holds up to 50 rounds." + icon = 'modular_zubbers/icons/obj/weapons/guns/ballistic.dmi' + icon_state = "stingballer" + fire_sound = 'modular_zubbers/sound/weapons/gun/light_gunfire.ogg' + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/stingballer + need_bolt_lock_to_interact = TRUE + semi_auto = TRUE + bolt_type = BOLT_TYPE_LOCKING + internal_magazine = TRUE + w_class = WEIGHT_CLASS_BULKY + weapon_weight = 2 + mag_display_ammo = TRUE + spread = 7.5 + projectile_damage_multiplier = 0.50 + projectile_speed_multiplier = 1.25 + +/obj/item/gun/ballistic/rifle/stingballer/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.125 SECONDS) + +/obj/item/gun/ballistic/rifle/stingballer/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 26, offset_y = 12) + +/obj/item/gun/ballistic/rifle/stingballer/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 20, \ + overlay_y = 10) diff --git a/modular_zubbers/code/modules/projectiles/guns/energy/beam_rifle.dm b/modular_zubbers/code/modules/projectiles/guns/energy/beam_rifle.dm new file mode 100644 index 00000000000..f950f38793b --- /dev/null +++ b/modular_zubbers/code/modules/projectiles/guns/energy/beam_rifle.dm @@ -0,0 +1,13 @@ +/obj/projectile/beam/event_horizon + damage = 110 + armour_penetration = 30 + demolition_mod = 2 + +/obj/projectile/beam/event_horizon/on_hit(atom/target, blocked = 0, pierce_hit) //breaks walls like a pulse rifle + . = ..() + if (!QDELETED(target) && (isturf(target) || isstructure(target))) + if(isobj(target)) + SSexplosions.med_mov_atom += target + else + SSexplosions.medturf += target + return ..() diff --git a/modular_zubbers/code/modules/projectiles/guns/energy/energyguns.dm b/modular_zubbers/code/modules/projectiles/guns/energy/energyguns.dm index de4ff5eab09..322aa6fc3bc 100644 --- a/modular_zubbers/code/modules/projectiles/guns/energy/energyguns.dm +++ b/modular_zubbers/code/modules/projectiles/guns/energy/energyguns.dm @@ -21,3 +21,37 @@ light_overlay = "flight", \ overlay_x = 15, \ overlay_y = 10) + +/obj/item/gun/energy/e_gun/nuclear_smg + name = "advanced energy smg" + desc = "A self-charging dual-mode rapid-fire energy weapon created as a disgusting hybrid of a laser carbine, a disabler smg and an advanced energy gun. \ + Modifications to the micro reactor have caused allowed a more stable, but less efficient generation of power. Comes with two settings: disable and kill." + icon = 'modular_zubbers/icons/obj/weapons/guns/energy.dmi' + icon_state = "nuclear_smg" + inhand_icon_state = "nucgun" + ammo_type = list(/obj/item/ammo_casing/energy/disabler/smg, /obj/item/ammo_casing/energy/lasergun/carbine_old) + spread = 2 + ammo_x_offset = 1 + projectile_damage_multiplier = 1.0 + projectile_speed_multiplier = 1.2 + selfcharge = 1 + charge_delay = 7.5 + self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE / 2 + can_charge = TRUE + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 8, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 1.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT + ) + +/obj/item/gun/energy/e_gun/nuclear_smg/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE) + +/obj/item/gun/energy/e_gun/nuclear_smg/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 17, \ + overlay_y = 8) diff --git a/modular_zubbers/code/modules/projectiles/projectile/bullets/smg.dm b/modular_zubbers/code/modules/projectiles/projectile/bullets/smg.dm index 84810a88739..b83f53a6248 100644 --- a/modular_zubbers/code/modules/projectiles/projectile/bullets/smg.dm +++ b/modular_zubbers/code/modules/projectiles/projectile/bullets/smg.dm @@ -16,6 +16,10 @@ damage = 10 fire_stacks = 1 +/obj/projectile/bullet/c46x30mm/compressed + name = "compressed 4.6x30mm bullet" + damage = 12 + /obj/projectile/bullet/c45/lesser_reaper name = ".45 reaper pellet" icon = 'modular_zubbers/icons/obj/weapons/guns/projectiles.dmi' diff --git a/modular_zubbers/code/modules/research/designs/weapon_designs.dm b/modular_zubbers/code/modules/research/designs/weapon_designs.dm index 526acb51cff..1cfdbe7c525 100644 --- a/modular_zubbers/code/modules/research/designs/weapon_designs.dm +++ b/modular_zubbers/code/modules/research/designs/weapon_designs.dm @@ -214,8 +214,8 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/m45_mag - name = ".460 Ceres Pistol Magazine(Lethal)" - desc = "A standard magazine for pistol using .460 Ceres." + name = ".45 Pistol Magazine(Lethal)" + desc = "A standard magazine for pistol using .45 rounds." id = "m45_mag" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5) @@ -286,3 +286,92 @@ RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/wt550kit_burst + name = "WT-550 Burst-Fire Parts Kit" + desc = "A kit to modify a WT-550 to shoot burst-fire." + id = "wt550_burst" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/weaponcrafting/gunkit/wt550_burst + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +/datum/design/wt550kit_long + name = "WT-550 Long-Range Parts Kit" + desc = "A kit to modify a WT-550 to be more effective at long ranges." + id = "wt550_long" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + ) + build_path = /obj/item/weaponcrafting/gunkit/wt550_long + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +/datum/design/wt550_ammo_compressed + name = "WT-550 Magazine (4.6x30mm Compressed) (Lethal)" + desc = "A magazine for the WT-550 Autorifle. Contains a high amount of lower power ammunition." + id = "wt550_ammo_compressed" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 20, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT * 3, + ) + + build_path = /obj/item/ammo_box/magazine/wt550m9/compressed + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +/datum/design/simple_battle_rifle + name = "NT-38 Battle Rifle Simplification Kit" + desc = "A kit to simplify an NT-38 Battle Rifle, making it much less complicated." + id = "battle_rifle_basic" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/weaponcrafting/gunkit/simple_battle_rifle + category = list( + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE + +/datum/design/juggernaut_suit_parts + name = "Security Juggernaut Plates" + desc = "An expensive set of incredibly dense armor plates." + id = "security_juggernaut" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 40, + /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 40, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 40, + ) + build_path = /obj/item/weaponcrafting/juggernaut_suit + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + autolathe_exportable = FALSE diff --git a/modular_zubbers/code/modules/research/techweb/all_nodes.dm b/modular_zubbers/code/modules/research/techweb/all_nodes.dm index e67450cb4d1..c4c1645d779 100644 --- a/modular_zubbers/code/modules/research/techweb/all_nodes.dm +++ b/modular_zubbers/code/modules/research/techweb/all_nodes.dm @@ -170,6 +170,8 @@ "minesweeper", ) +// Security Tech + /datum/techweb_node/riot_supression/New() design_ids += "s12g_rubber" design_ids += "s12g_bslug" @@ -186,13 +188,39 @@ /datum/techweb_node/exotic_ammo/New() design_ids += "wt550_ammo_ap" + design_ids += "wt550_ammo_compressed" . = ..() /datum/techweb_node/syndicate_basic/New() design_ids += "wt550_ammo_incendiary" + design_ids += "s12g_db" design_ids += "mod_mind_transfer" . = ..() +/datum/techweb_node/bullet_weapons //This is for advanced bullet weapon designs and upgrades + id = TECHWEB_NODE_BULLET_WEAPONS + display_name = "Advanced Ballistic Weaponry" + description = "As if shooting a bullet could get any more complicated." + prereq_ids = list(TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "wt550_burst", + "wt550_long", + "battle_rifle_basic", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) + +/datum/techweb_node/advanced_armor //This is for advanced armor and shields + id = TECHWEB_NODE_ADVANCED_ARMOR + display_name = "Advanced Security Protection" + description = "If we can't hurt them, we can outlast them." + prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION, TECHWEB_NODE_GAS_COMPRESSION) + design_ids = list( + "security_juggernaut" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(RADIO_CHANNEL_SECURITY) + // Modsuit tech /datum/techweb_node/mod_equip/New() . = ..() diff --git a/modular_zubbers/icons/mob/clothing/back.dmi b/modular_zubbers/icons/mob/clothing/back.dmi new file mode 100644 index 00000000000..6b017e1f86f Binary files /dev/null and b/modular_zubbers/icons/mob/clothing/back.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/head/helmet.dmi b/modular_zubbers/icons/mob/clothing/head/helmet.dmi index 2179a8d865e..37c26f67520 100644 Binary files a/modular_zubbers/icons/mob/clothing/head/helmet.dmi and b/modular_zubbers/icons/mob/clothing/head/helmet.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/head/helmet_muzzled.dmi b/modular_zubbers/icons/mob/clothing/head/helmet_muzzled.dmi index 785b9e7ddbb..5840e006bfc 100644 Binary files a/modular_zubbers/icons/mob/clothing/head/helmet_muzzled.dmi and b/modular_zubbers/icons/mob/clothing/head/helmet_muzzled.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi b/modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi index 46f0fa039a4..9b4981e0218 100644 Binary files a/modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi and b/modular_zubbers/icons/mob/clothing/head/helmet_teshari.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/suits/armor.dmi b/modular_zubbers/icons/mob/clothing/suits/armor.dmi index 5faa8d9f6f5..610537cdb39 100644 Binary files a/modular_zubbers/icons/mob/clothing/suits/armor.dmi and b/modular_zubbers/icons/mob/clothing/suits/armor.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/suits/armor_digi.dmi b/modular_zubbers/icons/mob/clothing/suits/armor_digi.dmi index 3e704b7effa..d57af744a09 100644 Binary files a/modular_zubbers/icons/mob/clothing/suits/armor_digi.dmi and b/modular_zubbers/icons/mob/clothing/suits/armor_digi.dmi differ diff --git a/modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi b/modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi index d77c9c1b639..6fbad1c0ffb 100644 Binary files a/modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi and b/modular_zubbers/icons/mob/clothing/suits/armor_teshari.dmi differ diff --git a/modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi b/modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi index d0262d05ffe..920a7ababb6 100644 Binary files a/modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi and b/modular_zubbers/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi b/modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi index a3b2e8094d2..c4a3d60e6b0 100644 Binary files a/modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi and b/modular_zubbers/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/modular_zubbers/icons/mob/inhands/weapons/staves_lefthand.dmi b/modular_zubbers/icons/mob/inhands/weapons/staves_lefthand.dmi index 86673b66d96..661781be84b 100644 Binary files a/modular_zubbers/icons/mob/inhands/weapons/staves_lefthand.dmi and b/modular_zubbers/icons/mob/inhands/weapons/staves_lefthand.dmi differ diff --git a/modular_zubbers/icons/mob/inhands/weapons/staves_righthand.dmi b/modular_zubbers/icons/mob/inhands/weapons/staves_righthand.dmi index d11ec39b044..fb86548c877 100644 Binary files a/modular_zubbers/icons/mob/inhands/weapons/staves_righthand.dmi and b/modular_zubbers/icons/mob/inhands/weapons/staves_righthand.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/head/helmet.dmi b/modular_zubbers/icons/obj/clothing/head/helmet.dmi index 01cf10328c5..7e8015a66ea 100644 Binary files a/modular_zubbers/icons/obj/clothing/head/helmet.dmi and b/modular_zubbers/icons/obj/clothing/head/helmet.dmi differ diff --git a/modular_zubbers/icons/obj/clothing/suits/armor.dmi b/modular_zubbers/icons/obj/clothing/suits/armor.dmi index 81e9b735e8e..4f4b4a72a59 100644 Binary files a/modular_zubbers/icons/obj/clothing/suits/armor.dmi and b/modular_zubbers/icons/obj/clothing/suits/armor.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/baton.dmi b/modular_zubbers/icons/obj/weapons/baton.dmi new file mode 100644 index 00000000000..41eed315a39 Binary files /dev/null and b/modular_zubbers/icons/obj/weapons/baton.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/guns/ammo.dmi b/modular_zubbers/icons/obj/weapons/guns/ammo.dmi index 08bd0bda28d..901dacd3c3d 100644 Binary files a/modular_zubbers/icons/obj/weapons/guns/ammo.dmi and b/modular_zubbers/icons/obj/weapons/guns/ammo.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/guns/ballistic.dmi b/modular_zubbers/icons/obj/weapons/guns/ballistic.dmi index ff40c858dfc..9f172853dc5 100644 Binary files a/modular_zubbers/icons/obj/weapons/guns/ballistic.dmi and b/modular_zubbers/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/guns/energy.dmi b/modular_zubbers/icons/obj/weapons/guns/energy.dmi new file mode 100644 index 00000000000..5a8fc3998ea Binary files /dev/null and b/modular_zubbers/icons/obj/weapons/guns/energy.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/guns/wide_guns.dmi b/modular_zubbers/icons/obj/weapons/guns/wide_guns.dmi new file mode 100644 index 00000000000..e00516be6c1 Binary files /dev/null and b/modular_zubbers/icons/obj/weapons/guns/wide_guns.dmi differ diff --git a/modular_zubbers/icons/obj/weapons/improvised.dmi b/modular_zubbers/icons/obj/weapons/improvised.dmi index d1c754443c4..ae9254ea83e 100644 Binary files a/modular_zubbers/icons/obj/weapons/improvised.dmi and b/modular_zubbers/icons/obj/weapons/improvised.dmi differ diff --git a/modular_zubbers/master_files/code/modules/research/designs/weapon_designs.dm b/modular_zubbers/master_files/code/modules/research/designs/weapon_designs.dm index 854224dcbf0..480150a02ff 100644 --- a/modular_zubbers/master_files/code/modules/research/designs/weapon_designs.dm +++ b/modular_zubbers/master_files/code/modules/research/designs/weapon_designs.dm @@ -1,6 +1,6 @@ /datum/design/wt550_ammo - name = "WT-550/WT-551 Magazine (4.6x30mm Regular) (Lethal)" - desc = "A magazine for the WT-550/WT-551 Autorifle. Contains lethal regular ammo." + name = "WT-550 Magazine (4.6x30mm Regular) (Lethal)" + desc = "A magazine for the WT-550 Autorifle. Contains lethal regular ammo." id = "wt550_ammo_normal" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 10) @@ -11,8 +11,8 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/wt550_ammo_ap - name = "WT-550/WT-551 Magazine (4.6x30mm Armor-Piercing) (Lethal)" - desc = "A magazine for the WT-550/WT-551 Autorifle. Contains lethal armor-piercing ammo. Nanotrasen prefers you didn't use these on your pressurized space station." + name = "WT-550 Magazine (4.6x30mm Armor-Piercing) (Lethal)" + desc = "A magazine for the WT-550 Autorifle. Contains lethal armor-piercing ammo. Nanotrasen prefers you didn't use these on your pressurized space station." id = "wt550_ammo_ap" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 12, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) @@ -23,8 +23,8 @@ departmental_flags = DEPARTMENT_BITFLAG_SECURITY /datum/design/wt550_ammo_incendiary - name = "WT-550/WT-551 Magazine (4.6x30mm Incendiary) (Extremely Lethal)" - desc = "A magazine for the WT-550/WT-551 Autorifle. Contains very lethal incendiary ammo. Consult your local laws for warcrime status before use." + name = "WT-550 Magazine (4.6x30mm Incendiary) (Extremely Lethal)" + desc = "A magazine for the WT-550 Autorifle. Contains very lethal incendiary ammo. Consult your local laws for warcrime status before use." id = "wt550_ammo_incendiary" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 2, /datum/material/silver = SHEET_MATERIAL_AMOUNT , /datum/material/glass = SHEET_MATERIAL_AMOUNT) diff --git a/modular_zubbers/sound/weapons/gun/light_gunfire.ogg b/modular_zubbers/sound/weapons/gun/light_gunfire.ogg new file mode 100644 index 00000000000..6dc756273cd Binary files /dev/null and b/modular_zubbers/sound/weapons/gun/light_gunfire.ogg differ diff --git a/tgstation.dme b/tgstation.dme index ac5d6b035b6..3b1bc1df46f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -553,6 +553,7 @@ #include "code\__DEFINES\~~bubber_defines\mobs.dm" #include "code\__DEFINES\~~bubber_defines\mood.dm" #include "code\__DEFINES\~~bubber_defines\nanites.dm" +#include "code\__DEFINES\~~bubber_defines\obj_flags.dm" #include "code\__DEFINES\~~bubber_defines\privacy_policy.dm" #include "code\__DEFINES\~~bubber_defines\robot_defines.dm" #include "code\__DEFINES\~~bubber_defines\role_preferences.dm" @@ -567,6 +568,7 @@ #include "code\__DEFINES\~~bubber_defines\transport.dm" #include "code\__DEFINES\~~bubber_defines\vehicles.dm" #include "code\__DEFINES\~~bubber_defines\vomit.dm" +#include "code\__DEFINES\~~bubber_defines\_globalvars\bitfields.dm" #include "code\__DEFINES\~~bubber_defines\_globalvars\lists\invalid_uplink_item.dm" #include "code\__DEFINES\~~bubber_defines\atmospherics\atmos_mob_interaction.dm" #include "code\__DEFINES\~~bubber_defines\research\research_categories.dm" @@ -9151,6 +9153,7 @@ #include "modular_zubbers\code\datums\components\crafting\tailoring.dm" #include "modular_zubbers\code\datums\components\crafting\tools.dm" #include "modular_zubbers\code\datums\components\crafting\utility.dm" +#include "modular_zubbers\code\datums\components\crafting\weapon_ammo.dm" #include "modular_zubbers\code\datums\components\crafting\crafting\melee_weapon.dm" #include "modular_zubbers\code\datums\components\fantasy\weight_overrides.dm" #include "modular_zubbers\code\datums\components\vore\_defines.dm" @@ -9336,6 +9339,7 @@ #include "modular_zubbers\code\game\machinery\doors\firedoor.dm" #include "modular_zubbers\code\game\machinery\pipe\construction.dm" #include "modular_zubbers\code\game\machinery\telecomms\machines\relay.dm" +#include "modular_zubbers\code\game\objects\objs.dm" #include "modular_zubbers\code\game\objects\effects\landmarks.dm" #include "modular_zubbers\code\game\objects\effects\overlays.dm" #include "modular_zubbers\code\game\objects\effects\shark_infested_waters.dm" @@ -9345,6 +9349,7 @@ #include "modular_zubbers\code\game\objects\effects\decals\turfdecal\tilecoloring.dm" #include "modular_zubbers\code\game\objects\effects\effects_system\effect_sparks.dm" #include "modular_zubbers\code\game\objects\effects\spawners\random\armory.dm" +#include "modular_zubbers\code\game\objects\effects\spawners\random\contraband.dm" #include "modular_zubbers\code\game\objects\effects\spawners\random\moonstation_random.dm" #include "modular_zubbers\code\game\objects\effects\spawners\random\ntc_bluey_safes.dm" #include "modular_zubbers\code\game\objects\effects\spawners\random\vending.dm" @@ -9368,6 +9373,7 @@ #include "modular_zubbers\code\game\objects\items\food\meatslab.dm" #include "modular_zubbers\code\game\objects\items\food\misc.dm" #include "modular_zubbers\code\game\objects\items\food\sweets.dm" +#include "modular_zubbers\code\game\objects\items\granters\crafting\magnastaff.dm" #include "modular_zubbers\code\game\objects\items\grenades\plastic.dm" #include "modular_zubbers\code\game\objects\items\holotool\holotool.dm" #include "modular_zubbers\code\game\objects\items\holotool\modes.dm" @@ -9387,6 +9393,7 @@ #include "modular_zubbers\code\game\objects\items\tanks\tank_types.dm" #include "modular_zubbers\code\game\objects\items\tools\engineering\crowbar.dm" #include "modular_zubbers\code\game\objects\items\tools\engineering\weldingtool.dm" +#include "modular_zubbers\code\game\objects\items\weaponry\melee\baton.dm" #include "modular_zubbers\code\game\objects\structures\aliens.dm" #include "modular_zubbers\code\game\objects\structures\chalkboard.dm" #include "modular_zubbers\code\game\objects\structures\engine_choice.dm" @@ -9593,7 +9600,6 @@ #include "modular_zubbers\code\modules\cargo\bounties\assistant.dm" #include "modular_zubbers\code\modules\cargo\bounties\blacksmith.dm" #include "modular_zubbers\code\modules\cargo\bounties\prisoner.dm" -#include "modular_zubbers\code\modules\cargo\exports\weapons.dm" #include "modular_zubbers\code\modules\cargo\markets\market_items\misc.dm" #include "modular_zubbers\code\modules\cargo\packs\contraband.dm" #include "modular_zubbers\code\modules\cargo\packs\general.dm" @@ -10060,6 +10066,7 @@ #include "modular_zubbers\code\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\pistol.dm" #include "modular_zubbers\code\modules\more_renaming\renaming_overrides.dm" #include "modular_zubbers\code\modules\movespeed\_movespeed_modifier.dm" +#include "modular_zubbers\code\modules\movespeed\modifiers\mobs.dm" #include "modular_zubbers\code\modules\movespeed\modifiers\status_effects.dm" #include "modular_zubbers\code\modules\nanites\designs.dm" #include "modular_zubbers\code\modules\nanites\living.dm" @@ -10104,6 +10111,7 @@ #include "modular_zubbers\code\modules\paperwork\stamps.dm" #include "modular_zubbers\code\modules\pen_medipens\pen_medipens.dm" #include "modular_zubbers\code\modules\power\cable.dm" +#include "modular_zubbers\code\modules\power\cell.dm" #include "modular_zubbers\code\modules\power\powerator.dm" #include "modular_zubbers\code\modules\power\singularity\emitter.dm" #include "modular_zubbers\code\modules\power\supermatter\supermatter_delam.dm" @@ -10111,14 +10119,18 @@ #include "modular_zubbers\code\modules\primitive_catgirls\code\spawner.dm" #include "modular_zubbers\code\modules\primitive_structures\code\wall_torch.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\ammunition\energy\laser.dm" +#include "modular_zubbers\code\modules\projectiles\boxes_magazines\ammo_boxes.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\pistol.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\shotgun.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\external\smg.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\internal\revolver.dm" +#include "modular_zubbers\code\modules\projectiles\boxes_magazines\internal\rifle.dm" #include "modular_zubbers\code\modules\projectiles\boxes_magazines\internal\toy.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\automatic.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\bow.dm" @@ -10128,6 +10140,7 @@ #include "modular_zubbers\code\modules\projectiles\guns\ballistic\rifle.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\shotgun.dm" #include "modular_zubbers\code\modules\projectiles\guns\ballistic\toy.dm" +#include "modular_zubbers\code\modules\projectiles\guns\energy\beam_rifle.dm" #include "modular_zubbers\code\modules\projectiles\guns\energy\energyguns.dm" #include "modular_zubbers\code\modules\projectiles\guns\energy\pulse.dm" #include "modular_zubbers\code\modules\projectiles\projectile\bullets\lmg.dm"