Adds .38 Flare, which is a lethal laser bullet casing available for printing with Advanced Beam Weaponry. Adjust ammo material values. (#91726)

## About The Pull Request


![image](https://github.com/user-attachments/assets/1332d28c-8d5f-41b7-a614-b74027210145)

Adds the .38 Flare. It does 20 damage. This round highlights the target
for 2 minutes, and projectiles hitting the target always hit the limb
that the shooter was aiming at. Your shot has effectively perfect limb
accuracy, no matter how far the bullet needs to travel. This also
affects other projectiles hitting the target that aren't the .38 Flare.

To indicate whether or not a round in a magazine is either lead or
laser, I've borrowed the implementation of ammo overlays from the C-20r
toy magazines Now each bullet in the speedloaders for .38 can be a
distinct type visibly. Might be interesting if anyone wants to add
additional unique appearances for some of the other .38 rounds.

Reduces the overall cost of a lot of the ammunition in the sec and
autolathe, such as loose bullets. Also reduces the material quantity
within bullet casings.

## Why It's Good For The Game

> .38 Flare

By popular demand, I've come up with a new idea. And that idea...is an
anti-bullet deviation tool. Most players are probably not conscious of
bullet deviation. But if you're familiar with the mechanic, it's why
sometimes your shots may hit into an arm or a leg even though you were
aiming at the head.

The way this works is that over the course of a bullets flight, it
increases in inaccuracy and the pobability of drifting into a limb. From
my last estimate, shooting somewhere around 5 tiles away will usually
result in bullet drift.

While affected by the flare shot, that does not happen. You shoot at the
head, you hit the head.

To put it into perspective; you could consider bullet deviation a form
of damage loss (its a bit more complicated than this and there are
instances where it is positive), and this projectile eliminates that
problem for everyone shooting the target.

> Ammo cost

Some of these were pretty excessive for the cost, and a notable example
of this include the .357 loose casings, .310 Surplus loose casings, and
most shotgun shells. These should go down to roughly below 3/5th of a
sheet of metal when printed from a fully upgraded lathe.

Meanwhile, a single bullet casing was like a sheet of metal each, which
didn't seem right to me. So they're now by default one fifth of a sheet
of metal on recycle.

## Changelog
🆑
add: .38 Flare, a laser bullet! Available in both .38 speedloader and
BR-38 magazine once Advanced Beam Weaponry is researched.
add: .38 Flare highlights the target in an outline and makes sure your
bullets never accidentally hit any limb except the one you are aiming
at. Never accidentally hit someone in the arm when you were going for a
headshot.
balance: Reduces the printing costs of several ammunition types from the
autolathe and security lathe. Reduces the overall material contents of
said printed ammo/magazines. If you find a material dupe, let a coder
know.
/🆑

---------

Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
This commit is contained in:
necromanceranne
2025-07-10 03:11:23 +10:00
committed by GitHub
parent 42bd400f65
commit 8f15d0ea2c
17 changed files with 171 additions and 40 deletions

View File

@@ -453,6 +453,7 @@
#define COLOR_AMMO_DUMDUM "#ffe601" #define COLOR_AMMO_DUMDUM "#ffe601"
#define COLOR_AMMO_HOTSHOT "#ff7b00" #define COLOR_AMMO_HOTSHOT "#ff7b00"
#define COLOR_AMMO_ICEBLOX "#0de3ff" #define COLOR_AMMO_ICEBLOX "#0de3ff"
#define COLOR_AMMO_HELLFIRE "#f60021"
// defines for other ammo type colors (should this be merged with above?) // defines for other ammo type colors (should this be merged with above?)
#define COLOR_AMMO_INCENDIARY "#f4001f" #define COLOR_AMMO_INCENDIARY "#f4001f"

View File

@@ -682,6 +682,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Trait that determines whether our mob gains more strength from drinking during a fist fight /// Trait that determines whether our mob gains more strength from drinking during a fist fight
#define TRAIT_DRUNKEN_BRAWLER "drunken brawler" #define TRAIT_DRUNKEN_BRAWLER "drunken brawler"
/// Trait that ensures that a shot with a projectile always lands exactly where it was aimed at. Or the head.alist
#define TRAIT_DESIGNATED_TARGET "designated_target"
/// Trait that makes you bite when attacking with an unarmed strike. /// Trait that makes you bite when attacking with an unarmed strike.
#define TRAIT_FERAL_BITER "feral biter" #define TRAIT_FERAL_BITER "feral biter"

View File

@@ -231,6 +231,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_DEAF" = TRAIT_DEAF, "TRAIT_DEAF" = TRAIT_DEAF,
"TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA,
"TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED,
"TRAIT_DESIGNATED_TARGET" = TRAIT_DESIGNATED_TARGET,
"TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE,
"TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM, "TRAIT_DETECT_STORM" = TRAIT_DETECT_STORM,
"TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD, "TRAIT_DIAGNOSTIC_HUD" = TRAIT_DIAGNOSTIC_HUD,

View File

@@ -1093,6 +1093,38 @@
UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS) UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS)
owner.update_icon() owner.update_icon()
// Desginated Target - Applied typically by Flare lasers
/atom/movable/screen/alert/status_effect/designated_target
name = "Designated Target"
desc = "You've been lit up by some kind of bright energy! Wash it off to get rid of it, or you'll be a lot easier to hit!"
icon_state = "designated_target"
/datum/status_effect/designated_target
id = "designated_target"
duration = 2 MINUTES
alert_type = /atom/movable/screen/alert/status_effect/designated_target
status_type = STATUS_EFFECT_REFRESH
/// Dummy lighting object for our flare attached to our mob
var/obj/effect/dummy/lighting_obj/moblight/mob_flare
/datum/status_effect/designated_target/on_apply()
mob_flare = owner.mob_light(3, 15, LIGHT_COLOR_FLARE)
ADD_TRAIT(owner, TRAIT_DESIGNATED_TARGET, id)
owner.add_filter("designated_target", 3, list("type" = "outline", "color" = COLOR_RED, "size" = 1))
return TRUE
/datum/status_effect/designated_target/tick(seconds_between_ticks)
// If we are ever wet, remove our flare status effect
var/datum/status_effect/fire_handler/wet_stacks/splashed_with_water = locate() in owner.status_effects
if(istype(splashed_with_water))
qdel(src)
/datum/status_effect/designated_target/on_remove()
QDEL_NULL(mob_flare)
owner.remove_filter("designated_target")
REMOVE_TRAIT(owner, TRAIT_DESIGNATED_TARGET, id)
#undef HEALING_SLEEP_DEFAULT #undef HEALING_SLEEP_DEFAULT
#undef HEALING_SLEEP_ORGAN_MULTIPLIER #undef HEALING_SLEEP_ORGAN_MULTIPLIER
#undef SLEEP_QUALITY_WORKOUT_MULTIPLER #undef SLEEP_QUALITY_WORKOUT_MULTIPLER

View File

@@ -465,7 +465,7 @@
boxtag = "9mm Pepperoni" boxtag = "9mm Pepperoni"
foodtypes = MEAT|GRAIN|DAIRY|VEGETABLES foodtypes = MEAT|GRAIN|DAIRY|VEGETABLES
crafting_complexity = FOOD_COMPLEXITY_4 crafting_complexity = FOOD_COMPLEXITY_4
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, /datum/material/meat = MEATSLAB_MATERIAL_AMOUNT) custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 8, /datum/material/meat = MEATSLAB_MATERIAL_AMOUNT)
/obj/item/food/pizza/arnold/raw /obj/item/food/pizza/arnold/raw
name = "raw Arnold pizza" name = "raw Arnold pizza"

View File

@@ -8,7 +8,7 @@
slot_flags = ITEM_SLOT_BELT slot_flags = ITEM_SLOT_BELT
throwforce = 0 throwforce = 0
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT)
override_notes = TRUE override_notes = TRUE
///What sound should play when this ammo is fired ///What sound should play when this ammo is fired
var/fire_sound = null var/fire_sound = null

View File

@@ -42,6 +42,8 @@
desc = "A .38 bullet casing." desc = "A .38 bullet casing."
caliber = CALIBER_38 caliber = CALIBER_38
projectile_type = /obj/projectile/bullet/c38 projectile_type = /obj/projectile/bullet/c38
/// Used for icon building for things like speedloaders and the like to determine what kind of sprite this casing uses. Actually accepts any string, just make sure there is a matching positional sprite in _/icons/obj/weapons/guns/ammo.dmi.
var/lead_or_laser = "lead"
/obj/item/ammo_casing/c38/trac /obj/item/ammo_casing/c38/trac
name = ".38 TRAC bullet casing" name = ".38 TRAC bullet casing"
@@ -78,6 +80,13 @@
desc = "A .38 Iceblox bullet casing." desc = "A .38 Iceblox bullet casing."
projectile_type = /obj/projectile/bullet/c38/iceblox projectile_type = /obj/projectile/bullet/c38/iceblox
/obj/item/ammo_casing/c38/flare
name = ".38 flare casing"
desc = "A .38 flare casing."
icon_state = "sL-casing"
projectile_type = /obj/projectile/beam/laser/flare
lead_or_laser = "laser"
//gatfruit //gatfruit
/obj/item/ammo_casing/pea /obj/item/ammo_casing/pea
name = "pea bullet casing" name = "pea bullet casing"

View File

@@ -34,14 +34,27 @@
name = "speed loader (.38)" name = "speed loader (.38)"
desc = "Designed to quickly reload revolvers." desc = "Designed to quickly reload revolvers."
icon_state = "38" icon_state = "38"
base_icon_state = "38"
ammo_type = /obj/item/ammo_casing/c38 ammo_type = /obj/item/ammo_casing/c38
max_ammo = 6 max_ammo = 6
caliber = CALIBER_38 caliber = CALIBER_38
multiple_sprites = AMMO_BOX_PER_BULLET multiple_sprites = AMMO_BOX_PER_BULLET
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10) custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
ammo_band_icon = "+38_ammo_band" ammo_band_icon = "+38_ammo_band"
ammo_band_color = null ammo_band_color = null
/obj/item/ammo_box/c38/update_icon_state()
. = ..()
icon_state = "[base_icon_state]-base"
/obj/item/ammo_box/c38/update_overlays()
. = ..()
if(!LAZYLEN(stored_ammo))
return
for(var/inserted_ammo in 1 to stored_ammo.len)
var/obj/item/ammo_casing/c38/boolet = stored_ammo[inserted_ammo]
. += "38-[boolet::lead_or_laser]-[inserted_ammo]"
/obj/item/ammo_box/c38/trac /obj/item/ammo_box/c38/trac
name = "speed loader (.38 TRAC)" name = "speed loader (.38 TRAC)"
desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body." desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body."
@@ -84,6 +97,12 @@
ammo_type = /obj/item/ammo_casing/c38/iceblox ammo_type = /obj/item/ammo_casing/c38/iceblox
ammo_band_color = COLOR_AMMO_ICEBLOX ammo_band_color = COLOR_AMMO_ICEBLOX
/obj/item/ammo_box/c38/flare
name = "speed loader (.38 Flare)"
desc = "Designed to quickly reload revolvers. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see."
ammo_type = /obj/item/ammo_casing/c38/flare
ammo_band_color = COLOR_AMMO_HELLFIRE
/obj/item/ammo_box/c9mm /obj/item/ammo_box/c9mm
name = "ammo box (9mm)" name = "ammo box (9mm)"
icon_state = "9mmbox" icon_state = "9mmbox"

View File

@@ -23,6 +23,10 @@
w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_NORMAL
ammo_type = /obj/item/ammo_casing/c38 ammo_type = /obj/item/ammo_casing/c38
caliber = CALIBER_38 caliber = CALIBER_38
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 1,
)
max_ammo = 15 max_ammo = 15
ammo_band_icon = "+38mag_ammo_band" ammo_band_icon = "+38mag_ammo_band"
ammo_band_color = null ammo_band_color = null
@@ -75,3 +79,9 @@
desc = parent_type::desc + " Iceblox bullets contain a cryogenic payload." desc = parent_type::desc + " Iceblox bullets contain a cryogenic payload."
ammo_type = /obj/item/ammo_casing/c38/iceblox ammo_type = /obj/item/ammo_casing/c38/iceblox
ammo_band_color = COLOR_AMMO_ICEBLOX ammo_band_color = COLOR_AMMO_ICEBLOX
/obj/item/ammo_box/magazine/m38/flare
name = "battle rifle magazine (.38 Flare)"
desc = parent_type::desc + " Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see."
ammo_type = /obj/item/ammo_casing/c38/flare
ammo_band_color = COLOR_AMMO_HELLFIRE

View File

@@ -496,8 +496,12 @@
return return
last_impact_turf = get_turf(target) last_impact_turf = get_turf(target)
// If our target has TRAIT_DESIGNATED_TARGET, treat accuracy_falloff as 0
var/effective_accuracy = HAS_TRAIT(target, TRAIT_DESIGNATED_TARGET) ? 0 : accuracy_falloff
// Lower accurancy/longer range tradeoff. 7 is a balanced number to use. // Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
def_zone = ran_zone(def_zone, clamp(accurate_range - (accuracy_falloff * get_dist(last_impact_turf, starting)), 5, 100)) def_zone = ran_zone(def_zone, clamp(accurate_range - (effective_accuracy * get_dist(last_impact_turf, starting)), 5, 100))
var/impact_result = process_hit_loop(select_target(last_impact_turf, target)) var/impact_result = process_hit_loop(select_target(last_impact_turf, target))
if (impact_result == PROJECTILE_IMPACT_PASSED) if (impact_result == PROJECTILE_IMPACT_PASSED)
return return

View File

@@ -56,6 +56,22 @@
speed = 1.6 speed = 1.6
light_color = "#FF969D" light_color = "#FF969D"
/obj/projectile/beam/laser/flare
name = "flare particle"
icon_state = "flare"
light_range = 2
light_power = 3
damage = 20
wound_bonus = -15
exposed_wound_bonus = 15
/obj/projectile/beam/laser/flare/on_hit(atom/target, blocked, pierce_hit)
. = ..()
if(!isliving(target))
return
var/mob/living/designated_target = target
designated_target.apply_status_effect(/datum/status_effect/designated_target)
/obj/projectile/beam/laser/heavylaser /obj/projectile/beam/laser/heavylaser
name = "heavy laser" name = "heavy laser"
icon_state = "heavylaser" icon_state = "heavylaser"

View File

@@ -2,7 +2,7 @@
name = "Beanbag Slug (Less Lethal)" name = "Beanbag Slug (Less Lethal)"
id = "beanbag_slug" id = "beanbag_slug"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/shotgun/beanbag build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list( category = list(
RND_CATEGORY_INITIAL, RND_CATEGORY_INITIAL,
@@ -14,7 +14,7 @@
name = "Rubber Shot (Less Lethal)" name = "Rubber Shot (Less Lethal)"
id = "rubber_shot" id = "rubber_shot"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/shotgun/rubbershot build_path = /obj/item/ammo_casing/shotgun/rubbershot
category = list( category = list(
RND_CATEGORY_INITIAL, RND_CATEGORY_INITIAL,
@@ -26,7 +26,7 @@
name = "Speed Loader (.38) (Lethal)" name = "Speed Loader (.38) (Lethal)"
id = "c38" id = "c38"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*10) materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*3)
build_path = /obj/item/ammo_box/c38 build_path = /obj/item/ammo_box/c38
category = list( category = list(
RND_CATEGORY_INITIAL, RND_CATEGORY_INITIAL,
@@ -130,7 +130,7 @@
name = "Shotgun Dart (Lethal)" name = "Shotgun Dart (Lethal)"
id = "shotgun_dart" id = "shotgun_dart"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/shotgun/dart build_path = /obj/item/ammo_casing/shotgun/dart
category = list( category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_HACKED,
@@ -142,7 +142,7 @@
name = "Incendiary Slug (Lethal)" name = "Incendiary Slug (Lethal)"
id = "incendiary_slug" id = "incendiary_slug"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/shotgun/incendiary build_path = /obj/item/ammo_casing/shotgun/incendiary
category = list( category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_HACKED,
@@ -178,7 +178,7 @@
name = ".357 Casing (VERY Lethal)" name = ".357 Casing (VERY Lethal)"
id = "a357" id = "a357"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/c357 build_path = /obj/item/ammo_casing/c357
category = list( category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_HACKED,
@@ -190,7 +190,7 @@
name = ".310 Surplus Bullet Casing (VERY Lethal)" name = ".310 Surplus Bullet Casing (VERY Lethal)"
id = "strilka310_surplus" id = "strilka310_surplus"
build_type = AUTOLATHE build_type = AUTOLATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_casing/strilka310/surplus build_path = /obj/item/ammo_casing/strilka310/surplus
category = list( category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_HACKED,

View File

@@ -17,8 +17,8 @@
id = "c38_trac" id = "c38_trac"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 10, /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
) )
build_path = /obj/item/ammo_box/c38/trac build_path = /obj/item/ammo_box/c38/trac
@@ -33,8 +33,8 @@
id = "c38_hotshot" id = "c38_hotshot"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 10, /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
) )
build_path = /obj/item/ammo_box/c38/hotshot build_path = /obj/item/ammo_box/c38/hotshot
category = list( category = list(
@@ -48,8 +48,8 @@
id = "c38_iceblox" id = "c38_iceblox"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 10, /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
) )
build_path = /obj/item/ammo_box/c38/iceblox build_path = /obj/item/ammo_box/c38/iceblox
category = list( category = list(
@@ -62,7 +62,7 @@
desc = "Designed to quickly reload revolvers. Rubber bullets are bouncy and less-than-lethal." desc = "Designed to quickly reload revolvers. Rubber bullets are bouncy and less-than-lethal."
id = "c38_rubber" id = "c38_rubber"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 10) materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3)
build_path = /obj/item/ammo_box/c38/match/bouncy build_path = /obj/item/ammo_box/c38/match/bouncy
category = list( category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
@@ -75,8 +75,8 @@
id = "c38_true_strike" id = "c38_true_strike"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 10, /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
) )
build_path = /obj/item/ammo_box/magazine/m38/true build_path = /obj/item/ammo_box/magazine/m38/true
category = list( category = list(
@@ -84,6 +84,22 @@
) )
departmental_flags = DEPARTMENT_BITFLAG_SECURITY departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/c38_flare
name = "Speedloader (.38 Flare) (VERY Lethal)"
desc = "Designed to quickly reload revolvers. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see."
id = "c38_flare"
build_type = PROTOLATHE | AWAY_LATHE
materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
)
build_path = /obj/item/ammo_box/c38/flare
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
)
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/c38_mag /datum/design/c38_mag
name = "Magazine (.38) (Lethal)" name = "Magazine (.38) (Lethal)"
desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Less powerful by design, guns chambered in .38 caliber rounds are still quite popular for use by police forces, \ desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Less powerful by design, guns chambered in .38 caliber rounds are still quite popular for use by police forces, \
@@ -92,8 +108,8 @@
id = "c38_mag" id = "c38_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
) )
build_path = /obj/item/ammo_box/magazine/m38 build_path = /obj/item/ammo_box/magazine/m38
category = list( category = list(
@@ -107,10 +123,10 @@
id = "c38_trac_mag" id = "c38_trac_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
) )
build_path = /obj/item/ammo_box/magazine/m38/trac build_path = /obj/item/ammo_box/magazine/m38/trac
category = list( category = list(
@@ -124,9 +140,9 @@
id = "c38_hotshot_mag" id = "c38_hotshot_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
) )
build_path = /obj/item/ammo_box/magazine/m38/hotshot build_path = /obj/item/ammo_box/magazine/m38/hotshot
category = list( category = list(
@@ -140,9 +156,9 @@
id = "c38_iceblox_mag" id = "c38_iceblox_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
) )
build_path = /obj/item/ammo_box/magazine/m38/iceblox build_path = /obj/item/ammo_box/magazine/m38/iceblox
category = list( category = list(
@@ -156,8 +172,8 @@
id = "c38_rubber_mag" id = "c38_rubber_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
) )
build_path = /obj/item/ammo_box/magazine/m38/match/bouncy build_path = /obj/item/ammo_box/magazine/m38/match/bouncy
category = list( category = list(
@@ -171,9 +187,9 @@
id = "c38_true_strike_mag" id = "c38_true_strike_mag"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list( materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 30, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 3, /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
/datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
) )
build_path = /obj/item/ammo_box/magazine/m38/true build_path = /obj/item/ammo_box/magazine/m38/true
category = list( category = list(
@@ -181,6 +197,24 @@
) )
departmental_flags = DEPARTMENT_BITFLAG_SECURITY departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/c38_flare_mag
name = "Magazine (.38 Flae) (VERY Lethal)"
desc = "Designed to tactically reload a NT BR-38 Battle Rifle. Flare casings launch a concentrated particle beam towards a target, lighting them up for everyone to see."
id = "c38_flare_mag"
build_type = PROTOLATHE | AWAY_LATHE
materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 4,
/datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
)
build_path = /obj/item/ammo_box/magazine/m38/flare
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
)
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/rubbershot/sec /datum/design/rubbershot/sec
id = "sec_rshot" id = "sec_rshot"
desc = "Rubbershot shotgun shells. Fires a cloud of pellets. Rubber bullets are bouncy and less-than-lethal." desc = "Rubbershot shotgun shells. Fires a cloud of pellets. Rubber bullets are bouncy and less-than-lethal."
@@ -482,7 +516,7 @@
in grotesque burns." in grotesque burns."
id = "lasershell" id = "lasershell"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/shotgun/scatterlaser build_path = /obj/item/ammo_casing/shotgun/scatterlaser
category = list( category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
@@ -495,7 +529,7 @@
Does nothing on its own." Does nothing on its own."
id = "techshotshell" id = "techshotshell"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/shotgun/techshell build_path = /obj/item/ammo_casing/shotgun/techshell
category = list( category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
@@ -508,7 +542,7 @@
into outsides." into outsides."
id = "flechetteshell" id = "flechetteshell"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/shotgun/flechette build_path = /obj/item/ammo_casing/shotgun/flechette
category = list( category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
@@ -521,7 +555,7 @@
shot by this, but is it really going to do that much damage? You decide, pal, I'm not your mother. I'm just a computer." shot by this, but is it really going to do that much damage? You decide, pal, I'm not your mother. I'm just a computer."
id = "donkshell" id = "donkshell"
build_type = PROTOLATHE | AWAY_LATHE build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 2) materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/shotgun/flechette/donk build_path = /obj/item/ammo_casing/shotgun/flechette/donk
category = list( category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO

View File

@@ -118,6 +118,8 @@
design_ids = list( design_ids = list(
"xray_laser", "xray_laser",
"nuclear_gun", "nuclear_gun",
"c38_flare",
"c38_flare_mag",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
announce_channels = list(RADIO_CHANNEL_SECURITY) announce_channels = list(RADIO_CHANNEL_SECURITY)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 137 KiB