diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 6fa9d4ec0c..2b75414a7e 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -1157,12 +1157,22 @@ proc/is_hot(obj/item/W as obj)
istype(W, /obj/item/weapon/surgical/bonesetter)
)
-//check if mob is lying down on something we can operate him on.
+// check if mob is lying down on something we can operate him on.
+// The RNG with table/rollerbeds comes into play in do_surgery() so that fail_step() can be used instead.
/proc/can_operate(mob/living/carbon/M)
- return (M.lying && \
- locate(/obj/machinery/optable, M.loc) || \
- (locate(/obj/structure/bed/roller, M.loc) && prob(75)) || \
- (locate(/obj/structure/table/, M.loc) && prob(66)))
+ return M.lying
+
+// Returns an instance of a valid surgery surface.
+/mob/living/proc/get_surgery_surface()
+ if(!lying)
+ return null // Not lying down means no surface.
+ var/obj/surface = null
+ for(var/obj/O in loc) // Looks for the best surface.
+ if(O.surgery_odds)
+ if(!surface || surface.surgery_odds < O)
+ surface = O
+ if(surface)
+ return surface
/proc/reverse_direction(var/dir)
switch(dir)
diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm
new file mode 100644
index 0000000000..192acf5d5c
--- /dev/null
+++ b/code/controllers/Processes/radiation.dm
@@ -0,0 +1,56 @@
+/datum/controller/process/radiation
+ var/repository/radiation/linked = null
+
+/datum/controller/process/radiation/setup()
+ name = "radiation controller"
+ schedule_interval = 20 // every 2 seconds
+ linked = radiation_repository
+
+/datum/controller/process/radiation/doWork()
+ sources_decay()
+ cache_expires()
+ irradiate_targets()
+
+// Step 1 - Sources Decay
+/datum/controller/process/radiation/proc/sources_decay()
+ var/list/sources = linked.sources
+ for(var/thing in sources)
+ if(deleted(thing))
+ sources.Remove(thing)
+ continue
+ var/datum/radiation_source/S = thing
+ if(S.decay)
+ S.update_rad_power(S.rad_power - config.radiation_decay_rate)
+ if(S.rad_power <= config.radiation_lower_limit)
+ sources.Remove(S)
+ SCHECK // This scheck probably just wastes resources, but better safe than sorry in this case.
+
+// Step 2 - Cache Expires
+/datum/controller/process/radiation/proc/cache_expires()
+ var/list/resistance_cache = linked.resistance_cache
+ for(var/thing in resistance_cache)
+ if(deleted(thing))
+ resistance_cache.Remove(thing)
+ continue
+ var/turf/T = thing
+ if((length(T.contents) + 1) != resistance_cache[T])
+ resistance_cache.Remove(T) // If its stale REMOVE it! It will get added if its needed.
+ SCHECK
+
+ // Step 3 - Registered irradiatable things are checked for radiation
+/datum/controller/process/radiation/proc/irradiate_targets()
+ var/list/registered_listeners = living_mob_list // For now just use this. Nothing else is interested anyway.
+ if(length(linked.sources) > 0)
+ for(var/thing in registered_listeners)
+ if(deleted(thing))
+ continue
+ var/atom/A = thing
+ var/turf/T = get_turf(thing)
+ var/rads = linked.get_rads_at_turf(T)
+ if(rads)
+ A.rad_act(rads)
+ SCHECK
+
+/datum/controller/process/radiation/statProcess()
+ ..()
+ stat(null, "[linked.sources.len] sources, [linked.resistance_cache.len] cached turfs")
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index b03d3bc902..b3fed19c9a 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -220,6 +220,10 @@ var/list/gamemode_cache = list()
var/show_human_death_message = 1
+ var/radiation_decay_rate = 1 //How much radiation is reduced by each tick
+ var/radiation_resistance_multiplier = 6.5
+ var/radiation_lower_limit = 0.35 //If the radiation level for a turf would be below this, ignore it.
+
/datum/configuration/New()
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
for (var/T in L)
@@ -720,6 +724,9 @@ var/list/gamemode_cache = list()
if(values.len > 0)
language_prefixes = values
+ if("radiation_lower_limit")
+ radiation_lower_limit = text2num(value)
+
else
log_misc("Unknown setting in configuration: '[name]'")
diff --git a/code/datums/autolathe/arms.dm b/code/datums/autolathe/arms.dm
index efe5791b11..b40bf27e47 100644
--- a/code/datums/autolathe/arms.dm
+++ b/code/datums/autolathe/arms.dm
@@ -8,29 +8,29 @@
/datum/category_item/autolathe/arms/shotgun_blanks
name = "ammunition (12g, blank)"
- path =/obj/item/ammo_casing/shotgun/blank
+ path =/obj/item/ammo_casing/a12g/blank
/datum/category_item/autolathe/arms/shotgun_beanbag
name = "ammunition (12g, beanbag)"
- path =/obj/item/ammo_casing/shotgun/beanbag
+ path =/obj/item/ammo_casing/a12g/beanbag
/datum/category_item/autolathe/arms/shotgun_flash
name = "ammunition (12g, flash)"
- path =/obj/item/ammo_casing/shotgun/flash
+ path =/obj/item/ammo_casing/a12g/flash
/datum/category_item/autolathe/arms/shotgun
name = "ammunition (12g, slug)"
- path =/obj/item/ammo_casing/shotgun
+ path =/obj/item/ammo_casing/a12g
hidden = 1
/datum/category_item/autolathe/arms/shotgun_pellet
name = "ammunition (12g, pellet)"
- path =/obj/item/ammo_casing/shotgun/pellet
+ path =/obj/item/ammo_casing/a12g/pellet
hidden = 1
/datum/category_item/autolathe/arms/stunshell
name = "ammunition (stun cartridge, shotgun)"
- path =/obj/item/ammo_casing/shotgun/stunshell
+ path =/obj/item/ammo_casing/a12g/stunshell
hidden = 1
//////////////////
@@ -49,119 +49,119 @@
/////// .45
/datum/category_item/autolathe/arms/pistol_45
name = "pistol magazine (.45)"
- path =/obj/item/ammo_magazine/c45m
+ path =/obj/item/ammo_magazine/m45
hidden = 1
/datum/category_item/autolathe/arms/pistol_45p
name = "pistol magazine (.45 practice)"
- path =/obj/item/ammo_magazine/c45m/practice
+ path =/obj/item/ammo_magazine/m45/practice
/datum/category_item/autolathe/arms/pistol_45r
name = "pistol magazine (.45 rubber)"
- path =/obj/item/ammo_magazine/c45m/rubber
+ path =/obj/item/ammo_magazine/m45/rubber
/datum/category_item/autolathe/arms/pistol_45f
name = "pistol magazine (.45 flash)"
- path =/obj/item/ammo_magazine/c45m/flash
+ path =/obj/item/ammo_magazine/m45/flash
/datum/category_item/autolathe/arms/pistol_45uzi
name = "uzi magazine (.45)"
- path =/obj/item/ammo_magazine/c45uzi
+ path =/obj/item/ammo_magazine/m45uzi
hidden = 1
/datum/category_item/autolathe/arms/tommymag
name = "Tommygun magazine (.45)"
- path =/obj/item/ammo_magazine/tommymag
+ path =/obj/item/ammo_magazine/m45tommy
hidden = 1
/datum/category_item/autolathe/arms/tommydrum
name = "Tommygun drum magazine (.45)"
- path =/obj/item/ammo_magazine/tommydrum
+ path =/obj/item/ammo_magazine/m45tommydrum
hidden = 1
/////// 9mm
-/obj/item/ammo_magazine/mc9mm/flash
- ammo_type =/obj/item/ammo_casing/c9mmf
+/obj/item/ammo_magazine/m9mm/flash
+ ammo_type =/obj/item/ammo_casing/a9mmf
-/obj/item/ammo_magazine/mc9mm/rubber
+/obj/item/ammo_magazine/m9mm/rubber
name = "magazine (9mm rubber)"
- ammo_type =/obj/item/ammo_casing/c9mmr
+ ammo_type =/obj/item/ammo_casing/a9mmr
-/obj/item/ammo_magazine/mc9mm/practice
+/obj/item/ammo_magazine/m9mm/practice
name = "magazine (9mm practice)"
- ammo_type =/obj/item/ammo_casing/c9mmp
+ ammo_type =/obj/item/ammo_casing/a9mmp
/datum/category_item/autolathe/arms/pistol_9mm
name = "pistol magazine (9mm)"
- path =/obj/item/ammo_magazine/mc9mm
+ path =/obj/item/ammo_magazine/m9mm
hidden = 1
/datum/category_item/autolathe/arms/pistol_9mmr
name = "pistol magazine (9mm rubber)"
- path =/obj/item/ammo_magazine/mc9mm/rubber
+ path =/obj/item/ammo_magazine/m9mm/rubber
/datum/category_item/autolathe/arms/pistol_9mmp
name = "pistol magazine (9mm practice)"
- path =/obj/item/ammo_magazine/mc9mm/practice
+ path =/obj/item/ammo_magazine/m9mm/practice
/datum/category_item/autolathe/arms/pistol_9mmf
name = "pistol magazine (9mm flash)"
- path =/obj/item/ammo_magazine/mc9mm/flash
+ path =/obj/item/ammo_magazine/m9mm/flash
/datum/category_item/autolathe/arms/smg_9mm
name = "top-mounted SMG magazine (9mm)"
- path =/obj/item/ammo_magazine/mc9mmt
+ path =/obj/item/ammo_magazine/m9mmt
hidden = 1
/datum/category_item/autolathe/arms/smg_9mmr
name = "top-mounted SMG magazine (9mm rubber)"
- path =/obj/item/ammo_magazine/mc9mmt/rubber
+ path =/obj/item/ammo_magazine/m9mmt/rubber
/datum/category_item/autolathe/arms/smg_9mmp
name = "top-mounted SMG magazine (9mm practice)"
- path =/obj/item/ammo_magazine/mc9mmt/practice
+ path =/obj/item/ammo_magazine/m9mmt/practice
/datum/category_item/autolathe/arms/smg_9mmf
name = "top-mounted SMG magazine (9mm flash)"
- path =/obj/item/ammo_magazine/mc9mmt/flash
+ path =/obj/item/ammo_magazine/m9mmt/flash
/////// 10mm
/datum/category_item/autolathe/arms/smg_10mm
name = "SMG magazine (10mm)"
- path =/obj/item/ammo_magazine/a10mm
+ path =/obj/item/ammo_magazine/m10mm
hidden = 1
/datum/category_item/autolathe/arms/pistol_50
name = "pistol magazine (.50AE)"
- path =/obj/item/ammo_magazine/a50
+ path =/obj/item/ammo_magazine/m50
hidden = 1
/////// 5.56mm
/datum/category_item/autolathe/arms/rifle_556
name = "rifle magazine (5.56mm)"
- path =/obj/item/ammo_magazine/c556
+ path =/obj/item/ammo_magazine/m556
hidden = 1
/datum/category_item/autolathe/arms/rifle_556p
name = "rifle magazine (5.56mm practice)"
- path =/obj/item/ammo_magazine/c556/practice
+ path =/obj/item/ammo_magazine/m556/practice
/datum/category_item/autolathe/arms/machinegun_556
name = "machinegun box magazine (5.56)"
- path =/obj/item/ammo_magazine/a556
+ path =/obj/item/ammo_magazine/m556saw
hidden = 1
/////// 7.62
/datum/category_item/autolathe/arms/rifle_762
name = "rifle magazine (7.62mm)"
- path =/obj/item/ammo_magazine/c762
+ path =/obj/item/ammo_magazine/m762
hidden = 1
/datum/category_item/autolathe/arms/shotgun_magazine
name = "24rnd shotgun magazine (12g)"
- path =/obj/item/ammo_magazine/g12
+ path =/obj/item/ammo_magazine/m12gdrum
hidden = 1
/*
@@ -188,57 +188,57 @@
/datum/category_item/autolathe/arms/pistol_45
name = "pistol magazine (.45)"
- path =/obj/item/ammo_magazine/c45m/empty
+ path =/obj/item/ammo_magazine/m45/empty
category = "Arms and Ammunition"
/datum/category_item/autolathe/arms/pistol_45uzi
name = "uzi magazine (.45)"
- path =/obj/item/ammo_magazine/c45uzi/empty
+ path =/obj/item/ammo_magazine/m45uzi/empty
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/tommymag
name = "Tommygun magazine (.45)"
- path =/obj/item/ammo_magazine/tommymag/empty
+ path =/obj/item/ammo_magazine/m45tommy/empty
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/tommydrum
name = "Tommygun drum magazine (.45)"
- path =/obj/item/ammo_magazine/tommydrum/empty
+ path =/obj/item/ammo_magazine/m45tommydrum/empty
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/pistol_9mm
name = "pistol magazine (9mm)"
- path =/obj/item/ammo_magazine/mc9mm/empty
+ path =/obj/item/ammo_magazine/m9mm/empty
category = "Arms and Ammunition"
/datum/category_item/autolathe/arms/smg_9mm
name = "top-mounted SMG magazine (9mm)"
- path =/obj/item/ammo_magazine/mc9mmt/empty
+ path =/obj/item/ammo_magazine/m9mmt/empty
category = "Arms and Ammunition"
/datum/category_item/autolathe/arms/smg_10mm
name = "SMG magazine (10mm)"
- path =/obj/item/ammo_magazine/a10mm/empty
+ path =/obj/item/ammo_magazine/m10mm/empty
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/pistol_50
name = "pistol magazine (.50AE)"
- path =/obj/item/ammo_magazine/a50/empty
+ path =/obj/item/ammo_magazine/m50/empty
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/rifle_556
name = "10rnd rifle magazine (5.56mm)"
- path =/obj/item/ammo_magazine/a556/empty
+ path =/obj/item/ammo_magazine/m556saw/empty
category = "Arms and Ammunition"
/datum/category_item/autolathe/arms/rifle_556m
name = "20rnd rifle magazine (5.56mm)"
- path =/obj/item/ammo_magazine/a556m/empty
+ path =/obj/item/ammo_magazine/m556sawm/empty
category = "Arms and Ammunition"
hidden = 1
@@ -250,7 +250,7 @@
/datum/category_item/autolathe/arms/rifle_762
name = "20rnd rifle magazine (7.62mm)"
- path =/obj/item/ammo_magazine/c762/empty
+ path =/obj/item/ammo_magazine/m762/empty
category = "Arms and Ammunition"
hidden = 1
@@ -262,7 +262,7 @@
/datum/category_item/autolathe/arms/shotgun_magazine
name = "24rnd shotgun magazine (12g)"
- path =/obj/item/ammo_magazine/g12/empty
+ path =/obj/item/ammo_magazine/m12gdrum/empty
category = "Arms and Ammunition"
hidden = 1*/
@@ -272,17 +272,17 @@
/datum/category_item/autolathe/arms/speedloader_357
name = "speedloader (.357)"
- path =/obj/item/ammo_magazine/a357
+ path =/obj/item/ammo_magazine/s357
hidden = 1
/datum/category_item/autolathe/arms/speedloader_38
name = "speedloader (.38)"
- path =/obj/item/ammo_magazine/c38
+ path =/obj/item/ammo_magazine/s38
hidden = 1
/datum/category_item/autolathe/arms/speedloader_38r
name = "speedloader (.38 rubber)"
- path =/obj/item/ammo_magazine/c38/rubber
+ path =/obj/item/ammo_magazine/s38/rubber
// Commented out until metal exploits with autolathe is fixed.
/*/datum/category_item/autolathe/arms/pistol_clip_45
@@ -335,35 +335,35 @@
/datum/category_item/autolathe/arms/pistol_clip_10mm
name = "ammo clip (10mm)"
- path =/obj/item/ammo_magazine/clip/a10mm
+ path =/obj/item/ammo_magazine/clip/c10mm
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/pistol_clip_50
name = "ammo clip (.50AE)"
- path =/obj/item/ammo_magazine/clip/a50
+ path =/obj/item/ammo_magazine/clip/c50
category = "Arms and Ammunition"
hidden = 1
*/
/datum/category_item/autolathe/arms/rifle_clip_556
name = "ammo clip (5.56mm)"
- path =/obj/item/ammo_magazine/clip/a556
+ path =/obj/item/ammo_magazine/clip/c556
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/rifle_clip_556_practice
name = "ammo clip (5.56mm practice)"
- path =/obj/item/ammo_magazine/clip/a556/practice
+ path =/obj/item/ammo_magazine/clip/c556/practice
category = "Arms and Ammunition"
/datum/category_item/autolathe/arms/rifle_clip_762
name = "ammo clip (7.62mm)"
- path =/obj/item/ammo_magazine/clip/a762
+ path =/obj/item/ammo_magazine/clip/c762
hidden = 1
/datum/category_item/autolathe/arms/rifle_clip_762_practice
name = "ammo clip (7.62mm practice)"
- path =/obj/item/ammo_magazine/clip/a762/practice
+ path =/obj/item/ammo_magazine/clip/c762/practice
/datum/category_item/autolathe/arms/knuckledusters
name = "knuckle dusters"
diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm
new file mode 100644
index 0000000000..5471282026
--- /dev/null
+++ b/code/datums/repositories/radiation.dm
@@ -0,0 +1,139 @@
+var/global/repository/radiation/radiation_repository = new()
+
+/repository/radiation
+ var/list/sources = list() // all radiation source datums
+ var/list/sources_assoc = list() // Sources indexed by turf for de-duplication.
+ var/list/resistance_cache = list() // Cache of turf's radiation resistance.
+
+// Describes a point source of radiation. Created either in response to a pulse of radiation, or over an irradiated atom.
+// Sources will decay over time, unless something is renewing their power!
+/datum/radiation_source
+ var/turf/source_turf // Location of the radiation source.
+ var/rad_power // Strength of the radiation being emitted.
+ var/decay = TRUE // True for automatic decay. False if owner promises to handle it (i.e. supermatter)
+ var/respect_maint = FALSE // True for not affecting RAD_SHIELDED areas.
+ var/flat = FALSE // True for power falloff with distance.
+ var/range // Cached maximum range, used for quick checks against mobs.
+
+/datum/radiation_source/Destroy()
+ radiation_repository.sources -= src
+ if(radiation_repository.sources_assoc[src.source_turf] == src)
+ radiation_repository.sources -= src.source_turf
+ src.source_turf = null
+ . = ..()
+
+// TEMPORARY HACK - hard del()'ing sources is too expensive! Until we implement qdel() hints we need to override behavior here
+/datum/radiation_source/finalize_qdel()
+ if(garbage_collector)
+ garbage_collector.AddTrash(src)
+ else
+ delayed_garbage |= src
+// TEMPORARY HACK END
+
+/datum/radiation_source/proc/update_rad_power(var/new_power = null)
+ if(new_power != null && new_power != rad_power)
+ rad_power = new_power
+ . = 1
+ if(. && !flat)
+ range = min(round(sqrt(rad_power / config.radiation_lower_limit)), 31) // R = rad_power / dist**2 - Solve for dist
+
+// Ray trace from all active radiation sources to T and return the strongest effect.
+/repository/radiation/proc/get_rads_at_turf(var/turf/T)
+ if(!istype(T)) return 0
+
+ . = 0
+ for(var/value in sources)
+ var/datum/radiation_source/source = value
+ if(source.rad_power < .)
+ continue // Already being affected by a stronger source
+ var/dist = get_dist(source.source_turf, T)
+ if(dist > source.range)
+ continue // Too far to possibly affect
+ if(source.respect_maint)
+ var/atom/A = T.loc
+ if(A.flags & RAD_SHIELDED)
+ continue // In shielded area
+ if(source.flat)
+ . = max(., source.rad_power)
+ continue // No need to ray trace for flat field
+
+ // Okay, now ray trace to find resistence!
+ var/turf/origin = source.source_turf
+ var/working = source.rad_power
+ while(origin != T)
+ origin = get_step_towards(origin, T) //Raytracing
+ if(!(origin in resistance_cache)) //Only get the resistance if we don't already know it.
+ origin.calc_rad_resistance()
+ working = max((working - (origin.cached_rad_resistance * config.radiation_resistance_multiplier)), 0)
+ if(working <= .)
+ break // Already affected by a stronger source (or its zero...)
+ . = max((working * (1 / (dist ** 2))), .) //Butchered version of the inverse square law. Works for this purpose
+
+// Add a radiation source instance to the repository. It will override any existing source on the same turf.
+/repository/radiation/proc/add_source(var/datum/radiation_source/S)
+ var/datum/radiation_source/existing = sources_assoc[S.source_turf]
+ if(existing)
+ qdel(existing)
+ sources += S
+ sources_assoc[S.source_turf] = S
+
+// Creates a temporary radiation source that will decay
+/repository/radiation/proc/radiate(source, power) //Sends out a radiation pulse, taking walls into account
+ if(!(source && power)) //Sanity checking
+ return
+ var/datum/radiation_source/S = new()
+ S.source_turf = get_turf(source)
+ S.update_rad_power(power)
+ add_source(S)
+
+// Sets the radiation in a range to a constant value.
+/repository/radiation/proc/flat_radiate(source, power, range, var/respect_maint = FALSE)
+ if(!(source && power && range))
+ return
+ var/datum/radiation_source/S = new()
+ S.flat = TRUE
+ S.range = range
+ S.respect_maint = respect_maint
+ S.source_turf = get_turf(source)
+ S.update_rad_power(power)
+ add_source(S)
+
+// Irradiates a full Z-level. Hacky way of doing it, but not too expensive.
+/repository/radiation/proc/z_radiate(var/atom/source, power, var/respect_maint = FALSE)
+ if(!(power && source))
+ return
+ var/turf/epicentre = locate(round(world.maxx / 2), round(world.maxy / 2), source.z)
+ flat_radiate(epicentre, power, world.maxx, respect_maint)
+
+/turf
+ var/cached_rad_resistance = 0
+
+/turf/proc/calc_rad_resistance()
+ cached_rad_resistance = 0
+ for(var/obj/O in src.contents)
+ if(O.rad_resistance) //Override
+ cached_rad_resistance += O.rad_resistance
+
+ else if(O.density) //So open doors don't get counted
+ var/material/M = O.get_material()
+ if(!M) continue
+ cached_rad_resistance += M.weight
+ // Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana
+ radiation_repository.resistance_cache[src] = (length(contents) + 1)
+
+/turf/simulated/wall/calc_rad_resistance()
+ radiation_repository.resistance_cache[src] = (length(contents) + 1)
+ cached_rad_resistance = (density ? material.weight : 0)
+
+/obj
+ var/rad_resistance = 0 // Allow overriding rad resistance
+
+// If people expand the system, this may be useful. Here as a placeholder until then
+/atom/proc/rad_act(var/severity)
+ return 1
+
+/mob/living/rad_act(var/severity)
+ if(severity)
+ src.apply_effect(severity, IRRADIATE, src.getarmor(null, "rad"))
+ for(var/atom/I in src)
+ I.rad_act(severity)
diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm
index 0c7fd3f4ed..c200e2edda 100644
--- a/code/datums/supplypacks/contraband.dm
+++ b/code/datums/supplypacks/contraband.dm
@@ -47,7 +47,7 @@
name = "Surplus militia rifles"
contains = list(
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin = 3,
- /obj/item/ammo_magazine/clip/a762 = 6
+ /obj/item/ammo_magazine/clip/c762 = 6
)
cost = 50
contraband = 1
diff --git a/code/datums/supplypacks/munitions.dm b/code/datums/supplypacks/munitions.dm
index e2df9609ad..d0635ffce6 100644
--- a/code/datums/supplypacks/munitions.dm
+++ b/code/datums/supplypacks/munitions.dm
@@ -27,7 +27,7 @@
name = "Flare guns crate"
contains = list(
/obj/item/weapon/gun/projectile/sec/flash,
- /obj/item/ammo_magazine/c45m/flash,
+ /obj/item/ammo_magazine/m45/flash,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare,
/obj/item/weapon/storage/box/flashshells
)
@@ -129,7 +129,7 @@
contains = list(
/obj/item/device/assembly/timer,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2,
- /obj/item/ammo_magazine/clip/a762/practice = 4,
+ /obj/item/ammo_magazine/clip/c762/practice = 4,
/obj/item/target = 2,
/obj/item/target/alien = 2,
/obj/item/target/syndicate = 2
@@ -154,9 +154,9 @@
name = "Automatic weapon ammunition crate"
num_contained = 6
contains = list(
- /obj/item/ammo_magazine/mc9mmt,
- /obj/item/ammo_magazine/mc9mmt/rubber,
- /obj/item/ammo_magazine/a556
+ /obj/item/ammo_magazine/m9mmt,
+ /obj/item/ammo_magazine/m9mmt/rubber,
+ /obj/item/ammo_magazine/m556saw
)
cost = 25
containertype = /obj/structure/closet/crate/secure
diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm
index 4aefe349fd..03f1296ad9 100644
--- a/code/datums/uplink/ammunition.dm
+++ b/code/datums/uplink/ammunition.dm
@@ -8,36 +8,36 @@
/datum/uplink_item/item/ammo/a357
name = ".357 Speedloader"
- path = /obj/item/ammo_magazine/a357
+ path = /obj/item/ammo_magazine/s357
/datum/uplink_item/item/ammo/mc9mm
name = "Pistol Magazine (9mm)"
- path = /obj/item/ammo_magazine/mc9mm
+ path = /obj/item/ammo_magazine/m9mm
/datum/uplink_item/item/ammo/c45m
name = "Pistol Magazine (.45)"
- path = /obj/item/ammo_magazine/c45m
+ path = /obj/item/ammo_magazine/m45
/datum/uplink_item/item/ammo/c45map
name = "Pistol Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/c45m/ap
+ path = /obj/item/ammo_magazine/m45/ap
/datum/uplink_item/item/ammo/tommymag
name = "Tommygun Magazine (.45)"
- path = /obj/item/ammo_magazine/tommymag
+ path = /obj/item/ammo_magazine/m45tommy
/datum/uplink_item/item/ammo/tommymagap
name = "Tommygun Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/tommymag/ap
+ path = /obj/item/ammo_magazine/m45tommy/ap
/datum/uplink_item/item/ammo/tommydrum
name = "Tommygun Drum Magazine (.45)"
- path = /obj/item/ammo_magazine/tommydrum
+ path = /obj/item/ammo_magazine/m45tommydrum
item_cost = 40
/datum/uplink_item/item/ammo/tommydrumap
name = "Tommygun Drum Magazine (.45 AP)"
- path = /obj/item/ammo_magazine/tommydrum/ap
+ path = /obj/item/ammo_magazine/m45tommydrum/ap
/datum/uplink_item/item/ammo/darts
name = "Darts"
@@ -50,39 +50,39 @@
/datum/uplink_item/item/ammo/c556
name = "Rifle Magazine (5.56mm)"
- path = /obj/item/ammo_magazine/c556
+ path = /obj/item/ammo_magazine/m556
/datum/uplink_item/item/ammo/c556/ext
name = "Rifle Magazine (5.56mm Extended)"
- path = /obj/item/ammo_magazine/c556/ext
+ path = /obj/item/ammo_magazine/m556/ext
/datum/uplink_item/item/ammo/c556/ap
name = "Rifle Magazine (5.56mm AP)"
- path = /obj/item/ammo_magazine/c556/ap
+ path = /obj/item/ammo_magazine/m556/ap
/datum/uplink_item/item/ammo/c556/ap/ext
name = "Rifle Magazine (5.56mm AP Extended)"
- path = /obj/item/ammo_magazine/c556/ap/ext
+ path = /obj/item/ammo_magazine/m556/ap/ext
/datum/uplink_item/item/ammo/c762
name = "Rifle Magazine (7.62mm)"
- path = /obj/item/ammo_magazine/c762
+ path = /obj/item/ammo_magazine/m762
/datum/uplink_item/item/ammo/c762/ap
name = "Rifle Magazine (7.62mm AP)"
- path = /obj/item/ammo_magazine/c762/ap
+ path = /obj/item/ammo_magazine/m762/ap
/datum/uplink_item/item/ammo/a10mm
name = "SMG Magazine (10mm)"
- path = /obj/item/ammo_magazine/a10mm
+ path = /obj/item/ammo_magazine/m10mm
/datum/uplink_item/item/ammo/a556
name = "Machinegun Magazine (5.56mm)"
- path = /obj/item/ammo_magazine/a556
+ path = /obj/item/ammo_magazine/m556saw
/datum/uplink_item/item/ammo/a556/ap
name = "Machinegun Magazine (5.56mm AP)"
- path = /obj/item/ammo_magazine/a556/ap
+ path = /obj/item/ammo_magazine/m556saw/ap
/datum/uplink_item/item/ammo/g12
name = "12g Shotgun Ammo Box (Slug)"
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index ad8b89ec80..c5096d12d8 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -271,8 +271,7 @@
if(explode)
explosion(src.loc, devastation_range = 0, heavy_impact_range = 0, light_impact_range = 4, flash_range = 6, adminlog = 0)
new /obj/effect/decal/cleanable/greenglow(get_turf(src))
- for(var/mob/living/L in view(10, src))
- L.apply_effect(40, IRRADIATE)
+ radiation_repository.radiate(src, 50)
// This meteor fries toasters.
/obj/effect/meteor/emp
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index 4d56d6662d..5696892ddc 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -8,6 +8,7 @@
use_power = 1
idle_power_usage = 1
active_power_usage = 5
+ surgery_odds = 100
var/mob/living/carbon/human/victim = null
var/strapped = 0.0
var/obj/machinery/computer/operating/computer = null
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 946b18ecc2..eb7b7049ef 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -145,7 +145,7 @@
if(is_robot_module(O))
return 0
- if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/a357) || istype(O,/obj/item/ammo_magazine/c38)) // Prevents ammo recycling exploit with speedloaders.
+ if(istype(O,/obj/item/ammo_magazine/clip) || istype(O,/obj/item/ammo_magazine/s357) || istype(O,/obj/item/ammo_magazine/s38)) // Prevents ammo recycling exploit with speedloaders.
user << "\The [O] is too hazardous to recycle with the autolathe!"
return
/* ToDo: Make this actually check for ammo and change the value of the magazine if it's empty. -Spades
@@ -263,7 +263,7 @@
stored_material[material] = max(0, stored_material[material] - round(making.resources[material] * mat_efficiency) * multiplier)
update_icon() // So lid closes
-
+
sleep(build_time)
busy = 0
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f3a0fd68f0..b1cbd21dfd 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -321,6 +321,7 @@
icon = 'icons/obj/doors/Dooruranium.dmi'
mineral = "uranium"
var/last_event = 0
+ var/rad_power = 7.5
/obj/machinery/door/airlock/process()
// Deliberate no call to parent.
@@ -338,15 +339,10 @@
/obj/machinery/door/airlock/uranium/process()
if(world.time > last_event+20)
if(prob(50))
- radiate()
+ radiation_repository.radiate(src, rad_power)
last_event = world.time
..()
-/obj/machinery/door/airlock/uranium/proc/radiate()
- for(var/mob/living/L in range (3,src))
- L.apply_effect(15,IRRADIATE,0)
- return
-
/obj/machinery/door/airlock/phoron
name = "Phoron Airlock"
desc = "No way this can end badly."
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 3d899377cc..41680d3de7 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -13,7 +13,7 @@
icon = 'icons/obj/doors/rapid_pdoor.dmi'
icon_state = null
min_force = 20 //minimum amount of force needed to damage the door with a melee weapon
-
+ var/material/implicit_material
// Icon states for different shutter types. Simply change this instead of rewriting the update_icon proc.
var/icon_state_open = null
var/icon_state_opening = null
@@ -29,6 +29,13 @@
//turning this off prevents awkward zone geometry in places like medbay lobby, for example.
block_air_zones = 0
+/obj/machinery/door/blast/initialize()
+ ..()
+ implicit_material = get_material_by_name("plasteel")
+
+/obj/machinery/door/blast/get_material()
+ return implicit_material
+
// Proc: Bumped()
// Parameters: 1 (AM - Atom that tried to walk through this object)
// Description: If we are open returns zero, otherwise returns result of parent function.
@@ -46,6 +53,7 @@
icon_state = icon_state_closed
else
icon_state = icon_state_open
+ radiation_repository.resistance_cache.Remove(get_turf(src))
return
// Proc: force_open()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 20356c1a5f..ef7c4af9a2 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -364,6 +364,7 @@
icon_state = "door1"
else
icon_state = "door0"
+ radiation_repository.resistance_cache.Remove(get_turf(src))
return
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 5739a6f33e..b18284fab8 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1028,7 +1028,7 @@
icon_state = "engivend"
icon_deny = "engivend-deny"
req_access = list(access_engine_equip)
- products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10,
+ products = list(/obj/item/device/geiger = 4,/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10,
/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,
/obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2,
/obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2,
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 9b2e0aa26d..4d7ee902d8 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -973,11 +973,7 @@
process(var/obj/item/mecha_parts/mecha_equipment/generator/nuclear/EG)
if(..())
- for(var/mob/living/carbon/M in view(EG.chassis))
- if(istype(M,/mob/living/carbon/human))
- M.apply_effect((EG.rad_per_cycle*3),IRRADIATE,0)
- else
- M.apply_effect(EG.rad_per_cycle, IRRADIATE)
+ radiation_repository.radiate(EG, (EG.rad_per_cycle * 3))
return 1
diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm
new file mode 100644
index 0000000000..62cb9d9862
--- /dev/null
+++ b/code/game/objects/items/devices/geiger.dm
@@ -0,0 +1,53 @@
+#define RAD_LEVEL_LOW 5 //10 // Around the level at which radiation starts to become harmful
+#define RAD_LEVEL_MODERATE 15 //15
+#define RAD_LEVEL_HIGH 50 //50
+#define RAD_LEVEL_VERY_HIGH 100 //100
+
+//Geiger counter
+//Rewritten version of TG's geiger counter
+//I opted to show exact radiation levels
+
+/obj/item/device/geiger
+ name = "geiger counter"
+ desc = "A handheld device used for detecting and measuring radiation in an area."
+ icon_state = "geiger_off"
+ item_state = "multitool"
+ w_class = ITEMSIZE_SMALL
+ var/scanning = 0
+ var/radiation_count = 0
+
+/obj/item/device/geiger/New()
+ processing_objects |= src
+
+/obj/item/device/geiger/process()
+ if(!scanning)
+ return
+ radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
+ update_icon()
+
+/obj/item/device/geiger/examine(mob/user)
+ ..(user)
+ to_chat(user, "[scanning ? "ambient" : "stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.")
+
+/obj/item/device/geiger/attack_self(var/mob/user)
+ scanning = !scanning
+ update_icon()
+ to_chat(user, "\icon[src] You switch [scanning ? "on" : "off"] [src].")
+
+/obj/item/device/geiger/update_icon()
+ if(!scanning)
+ icon_state = "geiger_off"
+ return 1
+
+ switch(radiation_count)
+ if(null) icon_state = "geiger_on_1"
+ if(-INFINITY to RAD_LEVEL_LOW) icon_state = "geiger_on_1"
+ if(RAD_LEVEL_LOW + 1 to RAD_LEVEL_MODERATE) icon_state = "geiger_on_2"
+ if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) icon_state = "geiger_on_3"
+ if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) icon_state = "geiger_on_4"
+ if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY) icon_state = "geiger_on_5"
+
+#undef RAD_LEVEL_LOW
+#undef RAD_LEVEL_MODERATE
+#undef RAD_LEVEL_HIGH
+#undef RAD_LEVEL_VERY_HIGH
\ No newline at end of file
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5d883784aa..cfd0693b15 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -99,6 +99,8 @@ REAGENT SCANNER
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal"
user.show_message("[OX] | [TX] | [BU] | [BR]")
+ if(M.radiation)
+ user.show_message("Radiation detected.")
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M
if(C.reagents.total_volume)
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 6554e80f8b..aff1f4bb31 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -452,11 +452,11 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
//give the syndies a bit of stealth
- a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "General")
+ a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
else
- a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "General")
+ a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a)
@@ -464,13 +464,13 @@ the implant may become unstable and either pre-maturely inject the subject or si
if ("emp")
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
var/name = prob(50) ? t.name : pick(teleportlocs)
- a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "General")
+ a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a)
else
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
- a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "General")
+ a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
qdel(a)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 06fd49d0e3..dfa4f61ba1 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -124,7 +124,7 @@
/obj/item/weapon/handcuffs,
/obj/item/device/flash,
/obj/item/clothing/glasses,
- /obj/item/ammo_casing/shotgun,
+ /obj/item/ammo_casing/a12g,
/obj/item/ammo_magazine,
/obj/item/weapon/cell/device,
/obj/item/weapon/reagent_containers/food/snacks/donut/,
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 26873e6608..c224b38a09 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -151,12 +151,12 @@
/obj/item/weapon/storage/box/blanks/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/blank(src)
+ new /obj/item/ammo_casing/a12g/blank(src)
/obj/item/weapon/storage/box/blanks/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/blank(src)
+ new /obj/item/ammo_casing/a12g/blank(src)
/obj/item/weapon/storage/box/beanbags
name = "box of beanbag shells"
@@ -167,12 +167,12 @@
/obj/item/weapon/storage/box/beanbags/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/a12g/beanbag(src)
/obj/item/weapon/storage/box/beanbags/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
+ new /obj/item/ammo_casing/a12g/beanbag(src)
/obj/item/weapon/storage/box/shotgunammo
name = "box of shotgun slugs"
@@ -183,12 +183,12 @@
/obj/item/weapon/storage/box/shotgunammo/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun(src)
+ new /obj/item/ammo_casing/a12g(src)
/obj/item/weapon/storage/box/shotgunammo/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun(src)
+ new /obj/item/ammo_casing/a12g(src)
/obj/item/weapon/storage/box/shotgunshells
name = "box of shotgun shells"
@@ -199,12 +199,12 @@
/obj/item/weapon/storage/box/shotgunshells/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/pellet(src)
+ new /obj/item/ammo_casing/a12g/pellet(src)
/obj/item/weapon/storage/box/shotgunshells/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/pellet(src)
+ new /obj/item/ammo_casing/a12g/pellet(src)
/obj/item/weapon/storage/box/flashshells
name = "box of illumination shells"
@@ -215,12 +215,12 @@
/obj/item/weapon/storage/box/flashshells/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/flash(src)
+ new /obj/item/ammo_casing/a12g/flash(src)
/obj/item/weapon/storage/box/flashshells/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/flash(src)
+ new /obj/item/ammo_casing/a12g/flash(src)
/obj/item/weapon/storage/box/stunshells
name = "box of stun shells"
@@ -231,12 +231,12 @@
/obj/item/weapon/storage/box/stunshells/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
+ new /obj/item/ammo_casing/a12g/stunshell(src)
/obj/item/weapon/storage/box/stunshells/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/stunshell(src)
+ new /obj/item/ammo_casing/a12g/stunshell(src)
/obj/item/weapon/storage/box/practiceshells
name = "box of practice shells"
@@ -247,12 +247,12 @@
/obj/item/weapon/storage/box/practiceshells/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/a12g/practice(src)
/obj/item/weapon/storage/box/practiceshells/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/practice(src)
+ new /obj/item/ammo_casing/a12g/practice(src)
/obj/item/weapon/storage/box/empshells
name = "box of emp shells"
@@ -263,12 +263,12 @@
/obj/item/weapon/storage/box/empshells/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/emp(src)
+ new /obj/item/ammo_casing/a12g/emp(src)
/obj/item/weapon/storage/box/empshells/large/New()
..()
for(var/i = 1 to 8)
- new /obj/item/ammo_casing/shotgun/emp(src)
+ new /obj/item/ammo_casing/a12g/emp(src)
/obj/item/weapon/storage/box/sniperammo
name = "box of 14.5mm shells"
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 573325e079..d5ac595c1e 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -27,7 +27,7 @@
if("guns")
new /obj/item/weapon/gun/projectile/revolver(src)
- new /obj/item/ammo_magazine/a357(src)
+ new /obj/item/ammo_magazine/s357(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/weapon/plastique(src)
new /obj/item/weapon/plastique(src)
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index e0cb908d69..7b781b93f2 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -290,11 +290,11 @@
prob(2);/obj/item/weapon/storage/box/shotgunammo,
prob(4);/obj/item/weapon/storage/box/shotgunshells,
prob(1);/obj/item/weapon/storage/box/stunshells,
- prob(2);/obj/item/ammo_magazine/c45m,
- prob(4);/obj/item/ammo_magazine/c45m/rubber,
- prob(4);/obj/item/ammo_magazine/c45m/flash,
- prob(2);/obj/item/ammo_magazine/mc9mmt,
- prob(6);/obj/item/ammo_magazine/mc9mmt/rubber)
+ prob(2);/obj/item/ammo_magazine/m45,
+ prob(4);/obj/item/ammo_magazine/m45/rubber,
+ prob(4);/obj/item/ammo_magazine/m45/flash,
+ prob(2);/obj/item/ammo_magazine/m9mmt,
+ prob(6);/obj/item/ammo_magazine/m9mmt/rubber)
/obj/random/action_figure
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index b535454c7c..e8c6713582 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -234,7 +234,7 @@
new /obj/item/clothing/accessory/storage/black_vest(src)
new /obj/item/clothing/head/soft/sec/corp(src)
new /obj/item/clothing/under/rank/security/corp(src)
- //new /obj/item/ammo_magazine/c45m/rubber(src) //VOREStation Edit
+ //new /obj/item/ammo_magazine/m45/rubber(src) //VOREStation Edit
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/cell/device/weapon(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
@@ -294,8 +294,8 @@
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/device/radio/headset/headset_sec/alt(src)
new /obj/item/clothing/suit/storage/vest/detective(src)
- new /obj/item/ammo_magazine/a44sl/rubber(src) //VOREStation Edit
- new /obj/item/ammo_magazine/a44sl/rubber(src) //VOREStation Edit
+ new /obj/item/ammo_casing/a44/rubber(src)
+ new /obj/item/ammo_casing/a44/rubber(src)
new /obj/item/taperoll/police(src)
new /obj/item/weapon/gun/projectile/revolver/consul(src) //VOREStation Edit
new /obj/item/clothing/accessory/holster/armpit(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 98f6138f68..906e46dbe1 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -42,11 +42,11 @@
/obj/structure/closet/syndicate/nuclear/New()
..()
- new /obj/item/ammo_magazine/a10mm(src)
- new /obj/item/ammo_magazine/a10mm(src)
- new /obj/item/ammo_magazine/a10mm(src)
- new /obj/item/ammo_magazine/a10mm(src)
- new /obj/item/ammo_magazine/a10mm(src)
+ new /obj/item/ammo_magazine/m10mm(src)
+ new /obj/item/ammo_magazine/m10mm(src)
+ new /obj/item/ammo_magazine/m10mm(src)
+ new /obj/item/ammo_magazine/m10mm(src)
+ new /obj/item/ammo_magazine/m10mm(src)
new /obj/item/weapon/storage/box/handcuffs(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/gun/energy/gun(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 07dfb6b2fe..922d8fd9ec 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -156,6 +156,8 @@
new /obj/item/clothing/head/radiation(src)
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
+ new /obj/item/device/geiger(src)
+ new /obj/item/device/geiger(src)
/*
* Bombsuit closet
diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm
index 58742c3b60..4e302e0e31 100644
--- a/code/game/objects/structures/simple_doors.dm
+++ b/code/game/objects/structures/simple_doors.dm
@@ -168,8 +168,7 @@
/obj/structure/simple_door/process()
if(!material.radioactivity)
return
- for(var/mob/living/L in range(1,src))
- L.apply_effect(round(material.radioactivity/3),IRRADIATE,0)
+ radiation_repository.radiate(src, round(material.radioactivity/3))
/obj/structure/simple_door/iron/New(var/newloc,var/material_name)
..(newloc, "iron")
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 0375a66272..3e3d4c17e4 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -205,6 +205,7 @@
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
anchored = 0
+ surgery_odds = 75
/obj/structure/bed/roller/update_icon()
return // Doesn't care about material or anything else.
diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm
index 098782ebdf..890574d664 100644
--- a/code/game/turfs/simulated/wall_attacks.dm
+++ b/code/game/turfs/simulated/wall_attacks.dm
@@ -7,6 +7,8 @@
if(can_open == WALL_OPENING)
return
+ radiation_repository.resistance_cache.Remove(src)
+
if(density)
can_open = WALL_OPENING
//flick("[material.icon_base]fwall_opening", src)
diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm
index dc7874b2aa..eab99bfba7 100644
--- a/code/game/turfs/simulated/wall_icon.dm
+++ b/code/game/turfs/simulated/wall_icon.dm
@@ -26,6 +26,7 @@
else if(material.opacity < 0.5 && opacity)
set_light(0)
+ radiation_repository.resistance_cache.Remove(src)
update_connections(1)
update_icon()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index f8544e714d..376fb8e452 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -48,6 +48,9 @@
if(!radiate())
return PROCESS_KILL
+/turf/simulated/wall/proc/get_material()
+ return material
+
/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj,/obj/item/projectile/beam))
burn(2500)
@@ -265,8 +268,7 @@
if(!total_radiation)
return
- for(var/mob/living/L in range(3,src))
- L.apply_effect(total_radiation, IRRADIATE,0)
+ radiation_repository.radiate(src, total_radiation)
return total_radiation
/turf/simulated/wall/proc/burn(temperature)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 73e570228d..eebf9de424 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -480,7 +480,7 @@
M.equip_to_slot_or_del(new /obj/item/clothing/head/det(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver(M), slot_r_hand)
- M.equip_to_slot_or_del(new /obj/item/ammo_magazine/a357(M), slot_l_store)
+ M.equip_to_slot_or_del(new /obj/item/ammo_magazine/s357(M), slot_l_store)
if ("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
@@ -592,7 +592,7 @@
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
- sec_briefcase.contents += new /obj/item/ammo_magazine/a357
+ sec_briefcase.contents += new /obj/item/ammo_magazine/s357
sec_briefcase.contents += new /obj/item/weapon/plastique
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm
index 4de90fed9f..3b3e528403 100644
--- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm
@@ -77,6 +77,38 @@
display_name = "flats, black"
path = /obj/item/clothing/shoes/flats
+/datum/gear/shoes/hitops/
+ display_name = "high-top, white"
+ path = /obj/item/clothing/shoes/hitops/
+
+/datum/gear/shoes/hitops/red
+ display_name = "high-top, red"
+ path = /obj/item/clothing/shoes/hitops/red
+
+/datum/gear/shoes/hitops/black
+ display_name = "high-top, black"
+ path = /obj/item/clothing/shoes/hitops/black
+
+/datum/gear/shoes/hitops/orange
+ display_name = "high-top, orange"
+ path = /obj/item/clothing/shoes/hitops/orange
+
+/datum/gear/shoes/hitops/blue
+ display_name = "high-top, blue"
+ path = /obj/item/clothing/shoes/hitops/blue
+
+/datum/gear/shoes/hitops/green
+ display_name = "high-top, green"
+ path = /obj/item/clothing/shoes/hitops/green
+
+/datum/gear/shoes/hitops/purple
+ display_name = "high-top, purple"
+ path = /obj/item/clothing/shoes/hitops/purple
+
+/datum/gear/shoes/hitops/yellow
+ display_name = "high-top, yellow"
+ path = /obj/item/clothing/shoes/hitops/yellow
+
/datum/gear/shoes/flats/blue
display_name = "flats, blue"
path = /obj/item/clothing/shoes/flats/blue
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index 91703336e1..6b4b270f97 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -123,39 +123,39 @@
if (istype(H, /obj/item/weapon/handcuffs))
attach_cuffs(H, user)
-/obj/item/clothing/shoes/hightops
- name = "white high tops"
+/obj/item/clothing/shoes/hitops
+ name = "white high-tops"
desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design."
icon_state = "whitehi"
-/obj/item/clothing/shoes/hightops/red
- name = "red high tops"
+/obj/item/clothing/shoes/hitops/red
+ name = "red high-tops"
icon_state = "redhi"
-/obj/item/clothing/shoes/hightops/brown
- name = "brown high tops"
+/obj/item/clothing/shoes/hitops/brown
+ name = "brown high-tops"
icon_state = "brownhi"
-/obj/item/clothing/shoes/hightops/black
- name = "black high tops"
+/obj/item/clothing/shoes/hitops/black
+ name = "black high-tops"
icon_state = "blackhi"
-/obj/item/clothing/shoes/hightops/orange
- name = "orange high tops"
+/obj/item/clothing/shoes/hitops/orange
+ name = "orange high-tops"
icon_state = "orangehi"
-/obj/item/clothing/shoes/hightops/blue
- name = "blue high tops"
+/obj/item/clothing/shoes/hitops/blue
+ name = "blue high-tops"
icon_state = "bluehi"
-/obj/item/clothing/shoes/hightops/green
- name = "green high tops"
+/obj/item/clothing/shoes/hitops/green
+ name = "green high-tops"
icon_state = "greenhi"
-/obj/item/clothing/shoes/hightops/purple
- name = "purple high tops"
+/obj/item/clothing/shoes/hitops/purple
+ name = "purple high-tops"
icon_state = "purplehi"
-/obj/item/clothing/shoes/hightops/yellow
- name = "yellow high tops"
+/obj/item/clothing/shoes/hitops/yellow
+ name = "yellow high-tops"
icon_state = "yellowhi"
\ No newline at end of file
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index c253496423..cad80ffb83 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -2,7 +2,7 @@
var/const/enterBelt = 30
var/const/radIntervall = 5 // Enough time between enter/leave belt for 10 hits, as per original implementation
var/const/leaveBelt = 80
- var/const/revokeAccess = 135
+ var/const/revokeAccess = 165
startWhen = 2
announceWhen = 1
endWhen = revokeAccess
@@ -27,23 +27,21 @@
radiate()
else if(activeFor == leaveBelt)
- command_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
-
+ command_announcement.Announce("The station has passed the radiation belt. Please allow for up to one minute while radiation levels dissipate, and report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
/datum/event/radiation_storm/proc/radiate()
+ var/radiation_level = rand(15, 35)
+ for(var/z in using_map.station_levels)
+ radiation_repository.z_radiate(locate(1, 1, z), radiation_level, 1)
+
for(var/mob/living/carbon/C in living_mob_list)
var/area/A = get_area(C)
if(!A)
continue
- if(!(A.z in using_map.station_levels))
- continue
if(A.flags & RAD_SHIELDED)
continue
-
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/H = C
- H.apply_effect((rand(15,35)),IRRADIATE,0)
if(prob(5))
- H.apply_effect((rand(40,70)),IRRADIATE,0)
if (prob(75))
randmutb(H) // Applies bad mutation
domutcheck(H,null,MUTCHK_FORCED)
diff --git a/code/modules/events/solar_storm.dm b/code/modules/events/solar_storm.dm
index 971e0418bc..afaa01ed95 100644
--- a/code/modules/events/solar_storm.dm
+++ b/code/modules/events/solar_storm.dm
@@ -27,6 +27,7 @@
radiate()
/datum/event/solar_storm/proc/radiate()
+ // Note: Too complicated to be worth trying to use the radiation system for this. Its only in space anyway, so we make an exception in this case.
for(var/mob/living/L in living_mob_list)
var/turf/T = get_turf(L)
if(!T)
@@ -36,8 +37,7 @@
continue
//Todo: Apply some burn damage from the heat of the sun. Until then, enjoy some moderate radiation.
- L.apply_effect((rand(15,30)),IRRADIATE,blocked = L.getarmor(null, "rad"))
-
+ L.rad_act(rand(15, 30))
/datum/event/solar_storm/end()
command_announcement.Announce("The solar storm has passed the station. It is now safe to resume EVA activities. Please report to medbay if you experience any unusual symptoms. ", "Anomaly Alert")
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index a8987538ab..c887ff5b9b 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -332,7 +332,7 @@ proc/check_panel(mob/M)
qdel(O)
return
-var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\
+var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/s357,\
/obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword,\
/obj/item/weapon/storage/box/syndicate, /obj/item/weapon/storage/box/emps,\
/obj/item/weapon/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index bf59f3c382..a6a857c43b 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -482,7 +482,7 @@ var/list/mining_overlay_cache = list()
M.flash_eyes()
if(prob(50))
M.Stun(5)
- M.apply_effect(25, IRRADIATE)
+ radiation_repository.flat_radiate(src, 25, 200)
if(prob(25))
excavate_find(prob(5), finds[1])
else if(rand(1,500) == 1)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 61b13316b8..8f7398e0a8 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -94,7 +94,7 @@ emp_act
var/obj/item/organ/external/organ = organs_by_name[organ_name]
if(organ)
var/weight = organ_rel_size[organ_name]
- armorval += getarmor_organ(organ, type) * weight
+ armorval += (getarmor_organ(organ, type) * weight)
total += weight
return (armorval/max(total, 1))
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index bf70516f1f..36c8768276 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -352,6 +352,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/device/floor_painter(src)
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
+ src.modules += new /obj/item/device/geiger(src)
var/datum/matter_synth/metal = new /datum/matter_synth/metal()
var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel()
@@ -396,6 +397,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/device/floor_painter(src)
src.emag = new /obj/item/weapon/melee/baton/robot/arm(src)
+ src.modules += new /obj/item/device/geiger(src)
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 04e45f93d0..470b4e1a00 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -627,7 +627,6 @@
/datum/sprite_accessory/facial_hair
icon = 'icons/mob/Human_face.dmi'
- gender = MALE
shaved
name = "Shaved"
@@ -1309,4 +1308,4 @@
name = "Default skrell skin"
icon_state = "default"
icon = 'icons/mob/human_races/r_skrell.dmi'
- species_allowed = list("Skrell")
\ No newline at end of file
+ species_allowed = list("Skrell")
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index eecc8448f8..4604db82ec 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -164,6 +164,14 @@
/obj/effect/decal/cleanable/can_fall()
return TRUE
+// These didn't fall anyways but better to nip this now just incase.
+/atom/movable/lighting_overlay/can_fall()
+ return FALSE
+
+// Mechas are anchored, so we need to override.
+/obj/mecha/can_fall()
+ return TRUE
+
/obj/item/pipe/can_fall()
. = ..()
@@ -291,3 +299,33 @@
apply_damage(rand(0, damage), BRUTE, BP_R_ARM)
Weaken(4)
updatehealth()
+
+/obj/mecha/handle_fall(var/turf/landing)
+ // First things first, break any lattice
+ var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, loc)
+ if(lattice)
+ // Lattices seem a bit too flimsy to hold up a massive exosuit.
+ lattice.visible_message("\The [lattice] collapses under the weight of \the [src]!")
+ qdel(lattice)
+
+ // Then call parent to have us actually fall
+ return ..()
+
+/obj/mecha/fall_impact(var/atom/hit_atom)
+ // Tell the pilot that they just dropped down with a superheavy mecha.
+ if(occupant)
+ to_chat(occupant, "\The [src] crashed down onto \the [hit_atom]!")
+
+ // Anything on the same tile as the landing tile is gonna have a bad day.
+ for(var/mob/living/L in hit_atom.contents)
+ L.visible_message("\The [src] crushes \the [L] as it lands on them!")
+ L.adjustBruteLoss(rand(70, 100))
+ L.Weaken(8)
+
+ // Now to hurt the mech.
+ take_damage(rand(15, 30))
+
+ // And hurt the floor.
+ if(istype(hit_atom, /turf/simulated/floor))
+ var/turf/simulated/floor/ground = hit_atom
+ ground.break_tile()
diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm
index 060f1f045e..85925d9158 100644
--- a/code/modules/organs/wound.dm
+++ b/code/modules/organs/wound.dm
@@ -44,7 +44,7 @@
var/damage_type = CUT
// whether this wound needs a bandage/salve to heal at all
// the maximum amount of damage that this wound can have and still autoheal
- var/autoheal_cutoff = 15
+ var/autoheal_cutoff = 10
@@ -336,7 +336,6 @@ datum/wound/puncture/massive
"moderate bruise" = 20, "small bruise" = 10, "tiny bruise" = 5)
bleed_threshold = 20
max_bleeding_stage = 2 //only huge bruise and above can bleed.
- autoheal_cutoff = 30
damage_type = BRUISE
/** BURNS **/
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 27bf4c0ab7..2d53277590 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -526,9 +526,9 @@ obj/structure/cable/proc/cableColor(var/colorC)
if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
return ..()
- var/use_amt = min(src.amount, ceil(S.burn_dam/3), 5)
+ var/use_amt = min(src.amount, ceil(S.burn_dam/5), 5)
if(can_use(use_amt))
- if(S.robo_repair(3*use_amt, BURN, "some damaged wiring", src, user))
+ if(S.robo_repair(5*use_amt, BURN, "some damaged wiring", src, user))
src.use(use_amt)
else
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index f900f6fcf4..6a40cf3b8e 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -396,17 +396,13 @@
/obj/machinery/power/port_gen/pacman/super/UseFuel()
//produces a tiny amount of radiation when in use
if (prob(2*power_output))
- for (var/mob/living/L in range(src, 5))
- L.apply_effect(1, IRRADIATE) //should amount to ~5 rads per minute at max safe power
+ radiation_repository.radiate(src, 4)
..()
/obj/machinery/power/port_gen/pacman/super/explode()
//a nice burst of radiation
var/rads = 50 + (sheets + sheet_left)*1.5
- for (var/mob/living/L in range(src, 10))
- //should really fall with the square of the distance, but that makes the rads value drop too fast
- //I dunno, maybe physics works different when you live in 2D -- SM radiation also works like this, apparently
- L.apply_effect(max(20, round(rads/get_dist(L,src))), IRRADIATE)
+ radiation_repository.radiate(src, (max(20, rads)))
explosion(src.loc, 3, 3, 5, 3)
qdel(src)
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index dee15d9f14..47a9c08923 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -31,6 +31,11 @@ var/global/list/rad_collectors = list()
last_power_new = 0
+ if(P && active)
+ var/rads = radiation_repository.get_rads_at_turf(get_turf(src))
+ if(rads)
+ receive_pulse(rads * 5) //Maths is hard
+
if(P)
if(P.air_contents.gas["phoron"] == 0)
investigate_log("out of fuel.","singulo")
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 39090ceac5..9309c6bd3c 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -406,15 +406,13 @@
var/toxrange = 10
var/toxdamage = 4
var/radiation = 15
- var/radiationmin = 3
if (src.energy>200)
toxdamage = round(((src.energy-150)/50)*4,1)
radiation = round(((src.energy-150)/50)*5,1)
- radiationmin = round((radiation/5),1)//
+ radiation_repository.radiate(src, radiation) //Always radiate at max, so a decent dose of radiation is applied
for(var/mob/living/M in view(toxrange, src.loc))
if(M.status_flags & GODMODE)
continue
- M.apply_effect(rand(radiationmin,radiation), IRRADIATE)
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
M.apply_effect(toxdamage, TOX)
return
@@ -448,13 +446,13 @@
/obj/singularity/proc/smwave()
for(var/mob/living/M in view(10, src.loc))
if(prob(67))
- M.apply_effect(rand(energy), IRRADIATE)
- M << "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."
- M << "Miraculously, it fails to kill you."
+ to_chat(M, "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")
+ to_chat(M, "Miraculously, it fails to kill you.")
else
M << "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat."
M << "You don't even have a moment to react as you are reduced to ashes by the intense radiation."
M.dust()
+ radiation_repository.radiate(src, rand(energy))
return
/obj/singularity/proc/pulse()
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/magazines.dm
similarity index 57%
rename from code/modules/projectiles/ammunition/boxes.dm
rename to code/modules/projectiles/ammunition/magazines.dm
index 73d03697ec..6202e03cde 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -1,493 +1,514 @@
-///////// .357 /////////
-
-/obj/item/ammo_magazine/a357
- name = "speedloader (.357)"
- desc = "A speedloader for .357 revolvers."
- icon_state = "38"
- caliber = "357"
- ammo_type = /obj/item/ammo_casing/a357
- matter = list(DEFAULT_WALL_MATERIAL = 1260)
- max_ammo = 6
- multiple_sprites = 1
-
-///////// .38 /////////
-
-/obj/item/ammo_magazine/c38
- name = "speedloader (.38)"
- desc = "A speedloader for .38 revolvers."
- icon_state = "38"
- caliber = "38"
- matter = list(DEFAULT_WALL_MATERIAL = 360)
- ammo_type = /obj/item/ammo_casing/c38
- max_ammo = 6
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/c38/rubber
- name = "speedloader (.38 rubber)"
- ammo_type = /obj/item/ammo_casing/c38r
-
-/obj/item/ammo_magazine/c38/emp
- name = "ammunition box (.38 haywire)"
- ammo_type = /obj/item/ammo_casing/c38/emp
-
-///////// .45 /////////
-
-/obj/item/ammo_magazine/c45m
- name = "pistol magazine (.45)"
- icon_state = "45"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c45
- matter = list(DEFAULT_WALL_MATERIAL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
- caliber = ".45"
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/c45m/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/c45m/rubber
- name = "magazine (.45 rubber)"
- ammo_type = /obj/item/ammo_casing/c45r
-
-/obj/item/ammo_magazine/c45m/practice
- name = "magazine (.45 practice)"
- ammo_type = /obj/item/ammo_casing/c45p
-
-/obj/item/ammo_magazine/c45m/flash
- name = "magazine (.45 flash)"
- ammo_type = /obj/item/ammo_casing/c45f
-
-/obj/item/ammo_magazine/c45m/ap
- name = "magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/c45ap
-
-/obj/item/ammo_magazine/box/emp/c45
- name = "ammunition box (.45 haywire)"
- ammo_type = /obj/item/ammo_casing/c45/emp
-
-/obj/item/ammo_magazine/c45uzi
- name = "stick magazine (.45)"
- icon_state = "uzi45"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c45
- matter = list(DEFAULT_WALL_MATERIAL = 1200)
- caliber = ".45"
- max_ammo = 16
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/c45uzi/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/tommymag
- name = "tommygun magazine (.45)"
- icon_state = "tommy-mag"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c45
- matter = list(DEFAULT_WALL_MATERIAL = 1500)
- caliber = ".45"
- max_ammo = 20
-
-/obj/item/ammo_magazine/tommymag/ap
- name = "tommygun magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/c45ap
-
-/obj/item/ammo_magazine/tommymag/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/tommydrum
- name = "tommygun drum magazine (.45)"
- icon_state = "tommy-drum"
- w_class = ITEMSIZE_NORMAL // Bulky ammo doesn't fit in your pockets!
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c45
- matter = list(DEFAULT_WALL_MATERIAL = 3750)
- caliber = ".45"
- max_ammo = 50
-
-/obj/item/ammo_magazine/tommydrum/ap
- name = "tommygun drum magazine (.45 AP)"
- ammo_type = /obj/item/ammo_casing/c45ap
-
-/obj/item/ammo_magazine/tommydrum/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c45
- name = "ammo clip (.45)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading .45 rounds into magazines."
- caliber = ".45"
- ammo_type = /obj/item/ammo_casing/c45
- matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs very roughly based around one .45 casing = 75 metal
- max_ammo = 9
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c45/rubber
- name = "ammo clip (.45 rubber)"
- ammo_type = /obj/item/ammo_casing/c45r
-
-/obj/item/ammo_magazine/clip/c45/practice
- name = "ammo clip (.45 practice)"
- ammo_type = /obj/item/ammo_casing/c45p
-
-/obj/item/ammo_magazine/clip/c45/flash
- name = "ammo clip (.45 flash)"
- ammo_type = /obj/item/ammo_casing/c45f
-
-///////// 9mm /////////
-
-/obj/item/ammo_magazine/mc9mm
- name = "magazine (9mm)"
- icon_state = "9x19p"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- matter = list(DEFAULT_WALL_MATERIAL = 480)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 8
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/mc9mm/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mc9mm/flash
- ammo_type = /obj/item/ammo_casing/c9mmf
-
-/obj/item/ammo_magazine/mc9mm/rubber
- name = "magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/c9mmr
-
-/obj/item/ammo_magazine/mc9mm/practice
- name = "magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/c9mmp
-
-/obj/item/ammo_magazine/mc9mmt
- name = "top mounted magazine (9mm)"
- icon_state = "9mmt"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c9mm
- matter = list(DEFAULT_WALL_MATERIAL = 1200)
- caliber = "9mm"
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/mc9mmt/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/mc9mmt/rubber
- name = "top mounted magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/c9mmr
-
-/obj/item/ammo_magazine/mc9mmt/flash
- name = "top mounted magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/c9mmf
-
-/obj/item/ammo_magazine/mc9mmt/practice
- name = "top mounted magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/c9mmp
-
-/obj/item/ammo_magazine/p90
- name = "high capacity top mounted magazine (9mm armor-piercing)"
- icon_state = "p90"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c9mm/ap
- matter = list(DEFAULT_WALL_MATERIAL = 3000)
- caliber = "9mm"
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/p90/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/c9mm
- name = "ammo clip (9mm)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading 9mm rounds into magazines."
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/c9mm
- matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 9mm casing = 60 metal
- max_ammo = 9
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c9mm/rubber
- name = "ammo clip (.45 rubber)"
- ammo_type = /obj/item/ammo_casing/c9mmr
-
-/obj/item/ammo_magazine/clip/c9mm/practice
- name = "ammo clip (.45 practice)"
- ammo_type = /obj/item/ammo_casing/c9mmp
-
-/obj/item/ammo_magazine/clip/c9mm/flash
- name = "ammo clip (.45 flash)"
- ammo_type = /obj/item/ammo_casing/c9mmf
-
-/obj/item/ammo_magazine/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets?
- name = "ammunition Box (9mm)"
- icon_state = "9mm"
- origin_tech = list(TECH_COMBAT = 2)
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
- caliber = "9mm"
- ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 30
-
-/obj/item/ammo_magazine/c9mm/empty
- initial_ammo = 0
-
-///////// 5mm /////////
-/*
-/obj/item/ammo_magazine/c5mm
- name = "magazine (5mm)"
- icon_state = "fiveseven"
- mag_type = MAGAZINE
- ammo_type = /obj/item/ammo_casing/c5mm
- matter = list(DEFAULT_WALL_MATERIAL = 1200)
- caliber = "5mm"
- max_ammo = 20
- //multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/c5mm
- name = "ammo clip (5mm)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading 5mm rounds into magazines."
- caliber = "5mm"
- ammo_type = /obj/item/ammo_casing/c5mm
- matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 5mm casing = 60 metal
- max_ammo = 9
- multiple_sprites = 1
-*/
-///////// 10mm /////////
-
-/obj/item/ammo_magazine/a10mm
- name = "magazine (10mm)"
- icon_state = "10mm"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "10mm"
- matter = list(DEFAULT_WALL_MATERIAL = 1500)
- ammo_type = /obj/item/ammo_casing/a10mm
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/a10mm/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/a10mm
- name = "ammo clip (10mm)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading 5mm rounds into magazines."
- caliber = "10mm"
- ammo_type = /obj/item/ammo_casing/a10mm
- matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
- max_ammo = 9
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/box/emp/a10mm
- name = "ammunition box (10mm haywire)"
- ammo_type = /obj/item/ammo_casing/a10mm/emp
-
-///////// 5.56mm /////////
-
-/obj/item/ammo_magazine/c556
- name = "magazine (5.56mm)"
- icon_state = "c5.56"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "a556"
- matter = list(DEFAULT_WALL_MATERIAL = 1800)
- ammo_type = /obj/item/ammo_casing/a556
- max_ammo = 20
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/c556/ext
- name = "extended magazine (5.56mm)"
- matter = list(DEFAULT_WALL_MATERIAL = 2700)
- max_ammo = 30
-
-/obj/item/ammo_magazine/c556/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/c556/ext/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/c556/practice
- name = "magazine (5.56mm practice)"
- ammo_type = /obj/item/ammo_casing/a556p
-
-/obj/item/ammo_magazine/c556/practice/ext
- name = "extended magazine (5.56mm practice)"
- max_ammo = 30
-
-/obj/item/ammo_magazine/c556/ap
- name = "magazine (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/c556/ap/ext
- name = "extended magazine (5.56mm armor-piercing)"
- max_ammo = 30
-
-/obj/item/ammo_magazine/clip/a556
- name = "ammo clip (5.56mm)"
- icon_state = "clip_rifle"
- caliber = "a556"
- ammo_type = /obj/item/ammo_casing/a556
- matter = list(DEFAULT_WALL_MATERIAL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
- max_ammo = 5
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/a556/ap
- name = "rifle clip (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/clip/a556/practice
- name = "rifle clip (5.56mm practice)"
- ammo_type = /obj/item/ammo_casing/a556
-
-/obj/item/ammo_magazine/a556
- name = "magazine box (5.56mm)"
- icon_state = "a556"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = "a556"
- matter = list(DEFAULT_WALL_MATERIAL = 10000)
- ammo_type = /obj/item/ammo_casing/a556
- w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!!
- max_ammo = 50
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/a556/ap
- name = "magazine box (5.56mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a556/ap
-
-/obj/item/ammo_magazine/a556/empty
- initial_ammo = 0
-
-///////// .50 AE /////////
-
-/obj/item/ammo_magazine/a50
- name = "magazine (.50 AE)"
- icon_state = "50ae"
- origin_tech = list(TECH_COMBAT = 2)
- mag_type = MAGAZINE
- caliber = ".50"
- matter = list(DEFAULT_WALL_MATERIAL = 1260)
- ammo_type = /obj/item/ammo_casing/a50
- max_ammo = 7
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/a50/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/clip/a50
- name = "ammo clip (.50 AE)"
- icon_state = "clip_pistol"
- desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
- caliber = ".50"
- ammo_type = /obj/item/ammo_casing/a50
- matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
- max_ammo = 9
- multiple_sprites = 1
-
-///////// 7.62mm /////////
-
-/obj/item/ammo_magazine/c762
- name = "magazine (7.62mm)"
- icon_state = "c7.62"
- mag_type = MAGAZINE
- caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 2000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 20 // VOREStation Edit - This one is supposed to be bigger than the small one.
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/c762/ap
- name = "magazine (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/c762/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/s762 // 's' for small!
- name = "magazine (7.62mm)"
- icon_state = "SVD"
- mag_type = MAGAZINE
- caliber = "a762"
- matter = list(DEFAULT_WALL_MATERIAL = 1000)
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 10
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/s762/empty
- initial_ammo = 0
-
-/obj/item/ammo_magazine/s762/ap
- name = "magazine (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/clip/a762
- name = "ammo clip (7.62mm)"
- icon_state = "clip_rifle"
- caliber = "a762"
- ammo_type = /obj/item/ammo_casing/a762
- matter = list(DEFAULT_WALL_MATERIAL = 1000) // metal costs are very roughly based around one 7.62 casing = 200 metal
- max_ammo = 5
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/clip/a762/ap
- name = "rifle clip (7.62mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a762/ap
-
-/obj/item/ammo_magazine/clip/a762/practice
- name = "rifle clip (7.62mm practice)"
- ammo_type = /obj/item/ammo_casing/a762p
-
-///////// 12g /////////
-
-/obj/item/ammo_magazine/g12
- name = "magazine (12 gauge)"
- icon_state = "12g"
- mag_type = MAGAZINE
- caliber = "shotgun"
- matter = list(DEFAULT_WALL_MATERIAL = 2200)
- ammo_type = /obj/item/ammo_casing/shotgun
- max_ammo = 24
- multiple_sprites = 1
-
-/obj/item/ammo_magazine/g12/beanbag
- name = "magazine (12 gauge beanbag)"
- ammo_type = /obj/item/ammo_casing/shotgun/beanbag
-
-/obj/item/ammo_magazine/g12/pellet
- name = "magazine (12 gauge pellet)"
- ammo_type = /obj/item/ammo_casing/shotgun/pellet
-
-/obj/item/ammo_magazine/g12/flash
- name = "magazine (12 gauge flash)"
- ammo_type = /obj/item/ammo_casing/shotgun/flash
-
-/obj/item/ammo_magazine/g12/empty
- initial_ammo = 0
-
-///////// .75 Gyrojet /////////
-
-/obj/item/ammo_magazine/a75
- name = "ammo magazine (.75 Gyrojet)"
- icon_state = "75"
- mag_type = MAGAZINE
- caliber = "75"
- ammo_type = /obj/item/ammo_casing/a75
- multiple_sprites = 1
- max_ammo = 4
-
-/obj/item/ammo_magazine/a75/empty
- initial_ammo = 0
-
-///////// Misc. /////////
-
-/obj/item/ammo_magazine/caps
- name = "speedloader (caps)"
- icon_state = "T38"
- caliber = "caps"
- color = "#FF0000"
- ammo_type = /obj/item/ammo_casing/cap
- matter = list(DEFAULT_WALL_MATERIAL = 600)
- max_ammo = 7
+/************************************************************************/
+/*
+# An explaination of the naming format for guns and ammo:
+#
+# a = Ammo, as in individual rounds of ammunition.
+# b = Box, intended to have ammo taken out one at a time by hand.
+# c = Clips, intended to reload magazines or guns quickly.
+# m = Magazine, intended to hold rounds of ammo.
+# s = Speedloaders, intended to reload guns quickly.
+#
+# Use this format, followed by the caliber. For example, a shotgun's caliber
+# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g",
+# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion
+# for developers and in-game admins spawning these items, stick to this format.
+# Likewise, when creating new rounds, the caliber variable should match whatever
+# the name says.
+#
+# This comment is copied in rounds.dm as well.
+#
+# Also, if a magazine is only meant for a specific gun, include the name
+# of the specific gun in the path. Example: m45uzi is only for the Uzi.
+*/
+/************************************************************************/
+
+
+
+///////// .357 /////////
+
+/obj/item/ammo_magazine/s357
+ name = "speedloader (.357)"
+ desc = "A speedloader for .357 revolvers."
+ icon_state = "38"
+ caliber = "357"
+ ammo_type = /obj/item/ammo_casing/a357
+ matter = list(DEFAULT_WALL_MATERIAL = 1260)
+ max_ammo = 6
+ multiple_sprites = 1
+
+///////// .38 /////////
+
+/obj/item/ammo_magazine/s38
+ name = "speedloader (.38)"
+ desc = "A speedloader for .38 revolvers."
+ icon_state = "38"
+ caliber = ".38"
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
+ ammo_type = /obj/item/ammo_casing/a38
+ max_ammo = 6
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/s38/rubber
+ name = "speedloader (.38 rubber)"
+ ammo_type = /obj/item/ammo_casing/a38r
+
+/obj/item/ammo_magazine/s38/emp
+ name = "speedloader (.38 haywire)"
+ ammo_type = /obj/item/ammo_casing/a38/emp
+
+///////// .45 /////////
+
+/obj/item/ammo_magazine/m45
+ name = "pistol magazine (.45)"
+ icon_state = "45"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a45
+ matter = list(DEFAULT_WALL_MATERIAL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
+ caliber = ".45"
+ max_ammo = 7
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m45/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m45/rubber
+ name = "magazine (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/a45r
+
+/obj/item/ammo_magazine/m45/practice
+ name = "magazine (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/a45p
+
+/obj/item/ammo_magazine/m45/flash
+ name = "magazine (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/a45f
+
+/obj/item/ammo_magazine/m45/ap
+ name = "magazine (.45 AP)"
+ ammo_type = /obj/item/ammo_casing/a45ap
+
+/obj/item/ammo_magazine/box/emp/b45
+ name = "ammunition box (.45 haywire)"
+ ammo_type = /obj/item/ammo_casing/a45/emp
+
+/obj/item/ammo_magazine/m45uzi
+ name = "stick magazine (.45)"
+ icon_state = "uzi45"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a45
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = ".45"
+ max_ammo = 16
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m45uzi/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m45tommy
+ name = "tommygun magazine (.45)"
+ icon_state = "tommy-mag"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a45
+ matter = list(DEFAULT_WALL_MATERIAL = 1500)
+ caliber = ".45"
+ max_ammo = 20
+
+/obj/item/ammo_magazine/m45tommy/ap
+ name = "tommygun magazine (.45 AP)"
+ ammo_type = /obj/item/ammo_casing/a45ap
+
+/obj/item/ammo_magazine/m45tommy/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m45tommydrum
+ name = "tommygun drum magazine (.45)"
+ icon_state = "tommy-drum"
+ w_class = ITEMSIZE_NORMAL // Bulky ammo doesn't fit in your pockets!
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a45
+ matter = list(DEFAULT_WALL_MATERIAL = 3750)
+ caliber = ".45"
+ max_ammo = 50
+
+/obj/item/ammo_magazine/m45tommydrum/ap
+ name = "tommygun drum magazine (.45 AP)"
+ ammo_type = /obj/item/ammo_casing/a45ap
+
+/obj/item/ammo_magazine/m45tommydrum/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c45
+ name = "ammo clip (.45)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .45 rounds into magazines."
+ caliber = ".45"
+ ammo_type = /obj/item/ammo_casing/a45
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs very roughly based around one .45 casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c45/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/a45r
+
+/obj/item/ammo_magazine/clip/c45/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/a45p
+
+/obj/item/ammo_magazine/clip/c45/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/a45f
+
+///////// 9mm /////////
+
+/obj/item/ammo_magazine/m9mm
+ name = "magazine (9mm)"
+ icon_state = "9x19p"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ matter = list(DEFAULT_WALL_MATERIAL = 480)
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/a9mm
+ max_ammo = 8
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m9mm/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m9mm/flash
+ ammo_type = /obj/item/ammo_casing/a9mmf
+
+/obj/item/ammo_magazine/m9mm/rubber
+ name = "magazine (9mm rubber)"
+ ammo_type = /obj/item/ammo_casing/a9mmr
+
+/obj/item/ammo_magazine/m9mm/practice
+ name = "magazine (9mm practice)"
+ ammo_type = /obj/item/ammo_casing/a9mmp
+
+/obj/item/ammo_magazine/m9mmt
+ name = "top mounted magazine (9mm)"
+ icon_state = "9mmt"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a9mm
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
+ caliber = "9mm"
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m9mmt/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m9mmt/rubber
+ name = "top mounted magazine (9mm rubber)"
+ ammo_type = /obj/item/ammo_casing/a9mmr
+
+/obj/item/ammo_magazine/m9mmt/flash
+ name = "top mounted magazine (9mm flash)"
+ ammo_type = /obj/item/ammo_casing/a9mmf
+
+/obj/item/ammo_magazine/m9mmt/practice
+ name = "top mounted magazine (9mm practice)"
+ ammo_type = /obj/item/ammo_casing/a9mmp
+
+/obj/item/ammo_magazine/m9mmp90
+ name = "high capacity top mounted magazine (9mm armor-piercing)"
+ icon_state = "p90"
+ mag_type = MAGAZINE
+ ammo_type = /obj/item/ammo_casing/a9mm/ap
+ matter = list(DEFAULT_WALL_MATERIAL = 3000)
+ caliber = "9mm"
+ max_ammo = 50
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m9mmp90/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c9mm
+ name = "ammo clip (9mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 9mm rounds into magazines."
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/a9mm
+ matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 9mm casing = 60 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c9mm/rubber
+ name = "ammo clip (.45 rubber)"
+ ammo_type = /obj/item/ammo_casing/a9mmr
+
+/obj/item/ammo_magazine/clip/c9mm/practice
+ name = "ammo clip (.45 practice)"
+ ammo_type = /obj/item/ammo_casing/a9mmp
+
+/obj/item/ammo_magazine/clip/c9mm/flash
+ name = "ammo clip (.45 flash)"
+ ammo_type = /obj/item/ammo_casing/a9mmf
+
+/obj/item/ammo_magazine/box/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets?
+ name = "ammunition Box (9mm)"
+ icon_state = "9mm"
+ origin_tech = list(TECH_COMBAT = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ caliber = "9mm"
+ ammo_type = /obj/item/ammo_casing/a9mm
+ max_ammo = 30
+
+/obj/item/ammo_magazine/box/c9mm/empty
+ initial_ammo = 0
+
+///////// 10mm /////////
+
+/obj/item/ammo_magazine/m10mm
+ name = "magazine (10mm)"
+ icon_state = "10mm"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = "10mm"
+ matter = list(DEFAULT_WALL_MATERIAL = 1500)
+ ammo_type = /obj/item/ammo_casing/a10mm
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m10mm/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c10mm
+ name = "ammo clip (10mm)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading 5mm rounds into magazines."
+ caliber = "10mm"
+ ammo_type = /obj/item/ammo_casing/a10mm
+ matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/box/emp/b10
+ name = "ammunition box (10mm haywire)"
+ ammo_type = /obj/item/ammo_casing/a10mm/emp
+
+///////// 5.56mm /////////
+
+/obj/item/ammo_magazine/m556
+ name = "magazine (5.56mm)"
+ icon_state = "m556"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = "5.56mm"
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
+ ammo_type = /obj/item/ammo_casing/a556
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m556/ext
+ name = "extended magazine (5.56mm)"
+ matter = list(DEFAULT_WALL_MATERIAL = 2700)
+ max_ammo = 30
+
+/obj/item/ammo_magazine/m556/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m556/ext/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m556/practice
+ name = "magazine (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556p
+
+/obj/item/ammo_magazine/m556/practice/ext
+ name = "extended magazine (5.56mm practice)"
+ max_ammo = 30
+
+/obj/item/ammo_magazine/m556/ap
+ name = "magazine (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/m556/ap/ext
+ name = "extended magazine (5.56mm armor-piercing)"
+ max_ammo = 30
+
+/obj/item/ammo_magazine/m556/small
+ name = "reduced magazine (5.56mm)"
+ icon_state = "m556-small"
+ matter = list(DEFAULT_WALL_MATERIAL = 900)
+ max_ammo = 10
+
+/obj/item/ammo_magazine/m556/small/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m556/small/practice
+ name = "magazine (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556p
+
+/obj/item/ammo_magazine/m556/small/ap
+ name = "magazine (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/clip/c556
+ name = "ammo clip (5.56mm)"
+ icon_state = "clip_rifle"
+ caliber = "5.56mm"
+ ammo_type = /obj/item/ammo_casing/a556
+ matter = list(DEFAULT_WALL_MATERIAL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c556/ap
+ name = "rifle clip (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/clip/c556/practice
+ name = "rifle clip (5.56mm practice)"
+ ammo_type = /obj/item/ammo_casing/a556
+
+/obj/item/ammo_magazine/m556saw
+ name = "magazine box (5.56mm)"
+ icon_state = "a556"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = "5.56mm"
+ matter = list(DEFAULT_WALL_MATERIAL = 10000)
+ ammo_type = /obj/item/ammo_casing/a556
+ w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!!
+ max_ammo = 50
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m556saw/ap
+ name = "magazine box (5.56mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a556/ap
+
+/obj/item/ammo_magazine/m556saw/empty
+ initial_ammo = 0
+
+///////// .50 AE /////////
+
+/obj/item/ammo_magazine/m50
+ name = "magazine (.50 AE)"
+ icon_state = "50ae"
+ origin_tech = list(TECH_COMBAT = 2)
+ mag_type = MAGAZINE
+ caliber = ".50AE"
+ matter = list(DEFAULT_WALL_MATERIAL = 1260)
+ ammo_type = /obj/item/ammo_casing/a50ae
+ max_ammo = 7
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m50/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c50
+ name = "ammo clip (.50 AE)"
+ icon_state = "clip_pistol"
+ desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
+ caliber = ".50AE"
+ ammo_type = /obj/item/ammo_casing/a50ae
+ matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
+ max_ammo = 9
+ multiple_sprites = 1
+
+///////// 7.62mm /////////
+
+/obj/item/ammo_magazine/m762
+ name = "magazine (7.62mm)"
+ icon_state = "m762-small"
+ mag_type = MAGAZINE
+ caliber = "7.62mm"
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
+ ammo_type = /obj/item/ammo_casing/a762
+ max_ammo = 10
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m762/ap
+ name = "magazine (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/m762/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/m762m // Intentionally not a subtype of m762 because it's supposed to be incompatible with the Z8 Bulldog rifle.
+ name = "magazine (7.62mm)"
+ icon_state = "m762"
+ mag_type = MAGAZINE
+ caliber = "7.62mm"
+ matter = list(DEFAULT_WALL_MATERIAL = 4000)
+ ammo_type = /obj/item/ammo_casing/a762
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m762m/ap
+ name = "magazine (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/m762m/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/clip/c762
+ name = "ammo clip (7.62mm)"
+ icon_state = "clip_rifle"
+ caliber = "7.62mm"
+ ammo_type = /obj/item/ammo_casing/a762
+ matter = list(DEFAULT_WALL_MATERIAL = 1000) // metal costs are very roughly based around one 7.62 casing = 200 metal
+ max_ammo = 5
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/clip/c762/ap
+ name = "rifle clip (7.62mm armor-piercing)"
+ ammo_type = /obj/item/ammo_casing/a762/ap
+
+/obj/item/ammo_magazine/clip/c762/practice
+ name = "rifle clip (7.62mm practice)"
+ ammo_type = /obj/item/ammo_casing/a762p
+
+///////// 12g /////////
+
+/obj/item/ammo_magazine/m12gdrum
+ name = "magazine (12 gauge)"
+ icon_state = "12g"
+ mag_type = MAGAZINE
+ caliber = "12g"
+ matter = list(DEFAULT_WALL_MATERIAL = 2200)
+ ammo_type = /obj/item/ammo_casing/a12g
+ max_ammo = 24
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/m12gdrum/beanbag
+ name = "magazine (12 gauge beanbag)"
+ ammo_type = /obj/item/ammo_casing/a12g/beanbag
+
+/obj/item/ammo_magazine/m12gdrum/pellet
+ name = "magazine (12 gauge pellet)"
+ ammo_type = /obj/item/ammo_casing/a12g/pellet
+
+/obj/item/ammo_magazine/m12gdrum/flash
+ name = "magazine (12 gauge flash)"
+ ammo_type = /obj/item/ammo_casing/a12g/flash
+
+/obj/item/ammo_magazine/m12gdrum/empty
+ initial_ammo = 0
+
+///////// .75 Gyrojet /////////
+
+/obj/item/ammo_magazine/m75
+ name = "ammo magazine (.75 Gyrojet)"
+ icon_state = "75"
+ mag_type = MAGAZINE
+ caliber = ".75"
+ ammo_type = /obj/item/ammo_casing/a75
+ multiple_sprites = 1
+ max_ammo = 4
+
+/obj/item/ammo_magazine/m75/empty
+ initial_ammo = 0
+
+///////// Misc. /////////
+
+/obj/item/ammo_magazine/caps
+ name = "speedloader (caps)"
+ icon_state = "T38"
+ caliber = "caps"
+ color = "#FF0000"
+ ammo_type = /obj/item/ammo_casing/cap
+ matter = list(DEFAULT_WALL_MATERIAL = 600)
+ max_ammo = 7
multiple_sprites = 1
\ No newline at end of file
diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/rounds.dm
similarity index 76%
rename from code/modules/projectiles/ammunition/bullets.dm
rename to code/modules/projectiles/ammunition/rounds.dm
index dfbd721952..3230e6ed62 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -1,291 +1,323 @@
-/obj/item/ammo_casing/a357
- desc = "A .357 bullet casing."
- caliber = "357"
- projectile_type = /obj/item/projectile/bullet/pistol/strong
-
-/obj/item/ammo_casing/a50
- desc = "A .50AE bullet casing."
- caliber = ".50"
- projectile_type = /obj/item/projectile/bullet/pistol/strong
-
-/obj/item/ammo_casing/a75
- desc = "A .75 gyrojet rocket sheathe."
- caliber = "75"
- projectile_type = /obj/item/projectile/bullet/gyro
-
-/obj/item/ammo_casing/c38
- desc = "A .38 bullet casing."
- caliber = "38"
- projectile_type = /obj/item/projectile/bullet/pistol
-
-/obj/item/ammo_casing/c38r
- desc = "A .38 rubber bullet casing."
- caliber = "38"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/rubber
-
-/obj/item/ammo_casing/c38/emp
- name = ".38 haywire round"
- desc = "A .38 bullet casing fitted with a single-use ion pulse generator."
- icon_state = "empcasing"
- projectile_type = /obj/item/projectile/ion/small
- matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
-
-/*
- * 9mm
- */
-
-/obj/item/ammo_casing/c9mm
- desc = "A 9mm bullet casing."
- caliber = "9mm"
- projectile_type = /obj/item/projectile/bullet/pistol
-
-/obj/item/ammo_casing/c9mm/ap
- desc = "A 9mm armor-piercing bullet casing."
- projectile_type = /obj/item/projectile/bullet/pistol/ap
-
-/obj/item/ammo_casing/c9mmf
- desc = "A 9mm flash shell casing."
- caliber = "9mm"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/energy/flash
-
-/obj/item/ammo_casing/c9mmr
- desc = "A 9mm rubber bullet casing."
- caliber = "9mm"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/rubber
-
-/obj/item/ammo_casing/c9mmp
- desc = "A 9mm practice bullet casing."
- caliber = "9mm"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/practice
-
-/*
-/obj/item/ammo_casing/c5mm
- desc = "A 5mm bullet casing."
- caliber = "5mm"
- projectile_type = /obj/item/projectile/bullet/pistol/ap
-*/
-
-/*
- * 45 ammo
- */
-
-/obj/item/ammo_casing/c45
- desc = "A .45 bullet casing."
- caliber = ".45"
- projectile_type = /obj/item/projectile/bullet/pistol/medium
-
-/obj/item/ammo_casing/c45ap
- desc = "A .45 Armor-Piercing bullet casing."
- caliber = ".45"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/medium/ap
-
-/obj/item/ammo_casing/c45p
- desc = "A .45 practice bullet casing."
- caliber = ".45"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/practice
-
-/obj/item/ammo_casing/c45r
- desc = "A .45 rubber bullet casing."
- caliber = ".45"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/bullet/pistol/rubber
-
-/obj/item/ammo_casing/c45f
- desc = "A .45 flash shell casing."
- caliber = ".45"
- icon_state = "r-casing"
- projectile_type = /obj/item/projectile/energy/flash
-
-/obj/item/ammo_casing/c45/emp
- name = ".45 haywire round"
- desc = "A .45 bullet casing fitted with a single-use ion pulse generator."
- projectile_type = /obj/item/projectile/ion/small
- icon_state = "empcasing"
- matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
-
-/obj/item/ammo_casing/c45/hp
- desc = "A .45 hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow
-
-
-/*
- * 10mm
- */
-
-/obj/item/ammo_casing/a10mm
- desc = "A 10mm bullet casing."
- caliber = "10mm"
- projectile_type = /obj/item/projectile/bullet/pistol/medium
-
-/obj/item/ammo_casing/a10mm/emp
- name = "10mm haywire round"
- desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
- projectile_type = /obj/item/projectile/ion/small
- icon_state = "empcasing"
- matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
-
-/*
- * Shotguns
- */
-
-/obj/item/ammo_casing/shotgun
- name = "shotgun slug"
- desc = "A 12 gauge slug."
- icon_state = "slshell"
- caliber = "shotgun"
- projectile_type = /obj/item/projectile/bullet/shotgun
- matter = list(DEFAULT_WALL_MATERIAL = 360)
-
-/obj/item/ammo_casing/shotgun/pellet
- name = "shotgun shell"
- desc = "A 12 gauge shell."
- icon_state = "gshell"
- projectile_type = /obj/item/projectile/bullet/pellet/shotgun
- matter = list(DEFAULT_WALL_MATERIAL = 360)
-
-/obj/item/ammo_casing/shotgun/blank
- name = "shotgun shell"
- desc = "A blank shell."
- icon_state = "blshell"
- projectile_type = /obj/item/projectile/bullet/blank
- matter = list(DEFAULT_WALL_MATERIAL = 90)
-
-/obj/item/ammo_casing/shotgun/practice
- name = "shotgun shell"
- desc = "A practice shell."
- icon_state = "pshell"
- projectile_type = /obj/item/projectile/bullet/shotgun/practice
- matter = list("metal" = 90)
-
-/obj/item/ammo_casing/shotgun/beanbag
- name = "beanbag shell"
- desc = "A beanbag shell."
- icon_state = "bshell"
- projectile_type = /obj/item/projectile/bullet/shotgun/beanbag
- matter = list(DEFAULT_WALL_MATERIAL = 180)
-
-//Can stun in one hit if aimed at the head, but
-//is blocked by clothing that stops tasers and is vulnerable to EMP
-/obj/item/ammo_casing/shotgun/stunshell
- name = "stun shell"
- desc = "A 12 gauge taser cartridge."
- icon_state = "stunshell"
- projectile_type = /obj/item/projectile/energy/electrode/stunshot
- matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
-
-/obj/item/ammo_casing/shotgun/stunshell/emp_act(severity)
- if(prob(100/severity)) BB = null
- update_icon()
-
-//Does not stun, only blinds, but has area of effect.
-/obj/item/ammo_casing/shotgun/flash
- name = "flash shell"
- desc = "A chemical shell used to signal distress or provide illumination."
- icon_state = "fshell"
- projectile_type = /obj/item/projectile/energy/flash/flare
- matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90)
-
-/obj/item/ammo_casing/shotgun/emp
- name = "ion shell"
- desc = "An advanced shotgun round that creates a small EMP when it strikes a target."
- icon_state = "empshell"
- projectile_type = /obj/item/projectile/ion
-// projectile_type = /obj/item/projectile/bullet/shotgun/ion
- matter = list(DEFAULT_WALL_MATERIAL = 360, "uranium" = 240)
-
-/*
- * 762mm
- */
-
-/obj/item/ammo_casing/a762
- desc = "A 7.62mm bullet casing."
- caliber = "a762"
- icon_state = "rifle-casing"
- projectile_type = /obj/item/projectile/bullet/rifle/a762
-
-/obj/item/ammo_casing/a762/ap
- desc = "A 7.62mm armor-piercing bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a762/ap
-
-/obj/item/ammo_casing/a762p
- desc = "A 7.62mm practice bullet casing."
- caliber = "a762"
- icon_state = "rifle-casing" // Need to make an icon for these
- projectile_type = /obj/item/projectile/bullet/rifle/practice
-
-/obj/item/ammo_casing/a762/blank
- desc = "A blank 7.62mm bullet casing."
- projectile_type = /obj/item/projectile/bullet/blank
- matter = list(DEFAULT_WALL_MATERIAL = 90)
-
-/obj/item/ammo_casing/a762/hp
- desc = "A 7.62mm hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a762/hollow
-
-//145mm
-
-/obj/item/ammo_casing/a145
- desc = "A 14.5mm shell."
- icon_state = "lcasing"
- caliber = "14.5mm"
- projectile_type = /obj/item/projectile/bullet/rifle/a145
- matter = list(DEFAULT_WALL_MATERIAL = 1250)
-
-/*
- * 556mm
- */
-
-/obj/item/ammo_casing/a556
- desc = "A 5.56mm bullet casing."
- caliber = "a556"
- icon_state = "rifle-casing"
- projectile_type = /obj/item/projectile/bullet/rifle/a556
-
-/obj/item/ammo_casing/a556/ap
- desc = "A 5.56mm armor-piercing bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a556/ap
-
-/obj/item/ammo_casing/a556p
- desc = "A 5.56mm practice bullet casing."
- caliber = "a556"
- icon_state = "rifle-casing" // Need to make an icon for these
- projectile_type = /obj/item/projectile/bullet/rifle/practice
-
-/obj/item/ammo_casing/a556/blank
- desc = "A blank 5.56mm bullet casing."
- projectile_type = /obj/item/projectile/bullet/blank
- matter = list(DEFAULT_WALL_MATERIAL = 90)
-
-/obj/item/ammo_casing/a556/hp
- desc = "A 5.56mm hollow-point bullet casing."
- projectile_type = /obj/item/projectile/bullet/rifle/a556/hollow
-
-/*
- * Misc
- */
-
-/obj/item/ammo_casing/rocket
- name = "rocket shell"
- desc = "A high explosive designed to be fired from a launcher."
- icon_state = "rocketshell"
- projectile_type = /obj/item/missile
- caliber = "rocket"
-
-/obj/item/ammo_casing/cap
- name = "cap"
- desc = "A cap for children toys."
- caliber = "caps"
- icon_state = "r-casing"
- color = "#FF0000"
- projectile_type = /obj/item/projectile/bullet/pistol/cap
-
-/obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else.
- icon_state = "s-casing-spent"
- BB = null
+/************************************************************************/
+/*
+# An explaination of the naming format for guns and ammo:
+#
+# a = Ammo, as in individual rounds of ammunition.
+# b = Box, intended to have ammo taken out one at a time by hand.
+# c = Clips, intended to reload magazines or guns quickly.
+# m = Magazine, intended to hold rounds of ammo.
+# s = Speedloaders, intended to reload guns quickly.
+#
+# Use this format, followed by the caliber. For example, a shotgun's caliber
+# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g",
+# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion
+# for developers and in-game admins spawning these items, stick to this format.
+# Likewise, when creating new rounds, the caliber variable should match whatever
+# the name says.
+#
+# This comment is copied in magazines.dm as well.
+*/
+/************************************************************************/
+
+/*
+ * .357
+ */
+
+/obj/item/ammo_casing/a357
+ desc = "A .357 bullet casing."
+ caliber = "357"
+ projectile_type = /obj/item/projectile/bullet/pistol/strong
+
+/*
+ * .38
+ */
+
+/obj/item/ammo_casing/a38
+ desc = "A .38 bullet casing."
+ caliber = ".38"
+ projectile_type = /obj/item/projectile/bullet/pistol
+
+/obj/item/ammo_casing/a38r
+ desc = "A .38 rubber bullet casing."
+ caliber = ".38"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/rubber
+
+/obj/item/ammo_casing/a38/emp
+ name = ".38 haywire round"
+ desc = "A .38 bullet casing fitted with a single-use ion pulse generator."
+ icon_state = "empcasing"
+ projectile_type = /obj/item/projectile/ion/small
+ matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
+
+/*
+ * .50 Action Express
+ */
+
+/obj/item/ammo_casing/a50ae
+ desc = "A .50AE bullet casing."
+ caliber = ".50AE"
+ projectile_type = /obj/item/projectile/bullet/pistol/strong
+
+/*
+ * .75 (aka Gyrojet Rockets, aka admin abuse)
+ */
+
+/obj/item/ammo_casing/a75
+ desc = "A .75 gyrojet rocket sheathe."
+ caliber = ".75"
+ projectile_type = /obj/item/projectile/bullet/gyro
+
+/*
+ * 9mm
+ */
+
+/obj/item/ammo_casing/a9mm
+ desc = "A 9mm bullet casing."
+ caliber = "9mm"
+ projectile_type = /obj/item/projectile/bullet/pistol
+
+/obj/item/ammo_casing/a9mm/ap
+ desc = "A 9mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/pistol/ap
+
+/obj/item/ammo_casing/a9mmf
+ desc = "A 9mm flash shell casing."
+ caliber = "9mm"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/energy/flash
+
+/obj/item/ammo_casing/a9mmr
+ desc = "A 9mm rubber bullet casing."
+ caliber = "9mm"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/rubber
+
+/obj/item/ammo_casing/a9mmp
+ desc = "A 9mm practice bullet casing."
+ caliber = "9mm"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/practice
+
+/*
+ * .45
+ */
+
+/obj/item/ammo_casing/a45
+ desc = "A .45 bullet casing."
+ caliber = ".45"
+ projectile_type = /obj/item/projectile/bullet/pistol/medium
+
+/obj/item/ammo_casing/a45ap
+ desc = "A .45 Armor-Piercing bullet casing."
+ caliber = ".45"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/medium/ap
+
+/obj/item/ammo_casing/a45p
+ desc = "A .45 practice bullet casing."
+ caliber = ".45"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/practice
+
+/obj/item/ammo_casing/a45r
+ desc = "A .45 rubber bullet casing."
+ caliber = ".45"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/bullet/pistol/rubber
+
+/obj/item/ammo_casing/a45f
+ desc = "A .45 flash shell casing."
+ caliber = ".45"
+ icon_state = "r-casing"
+ projectile_type = /obj/item/projectile/energy/flash
+
+/obj/item/ammo_casing/a45/emp
+ name = ".45 haywire round"
+ desc = "A .45 bullet casing fitted with a single-use ion pulse generator."
+ projectile_type = /obj/item/projectile/ion/small
+ icon_state = "empcasing"
+ matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
+
+/obj/item/ammo_casing/a45/hp
+ desc = "A .45 hollow-point bullet casing."
+ projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow
+
+
+/*
+ * 10mm
+ */
+
+/obj/item/ammo_casing/a10mm
+ desc = "A 10mm bullet casing."
+ caliber = "10mm"
+ projectile_type = /obj/item/projectile/bullet/pistol/medium
+
+/obj/item/ammo_casing/a10mm/emp
+ name = "10mm haywire round"
+ desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
+ projectile_type = /obj/item/projectile/ion/small
+ icon_state = "empcasing"
+ matter = list(DEFAULT_WALL_MATERIAL = 130, "uranium" = 100)
+
+/*
+ * 12g (aka shotgun ammo)
+ */
+
+/obj/item/ammo_casing/a12g
+ name = "shotgun slug"
+ desc = "A 12 gauge slug."
+ icon_state = "slshell"
+ caliber = "12g"
+ projectile_type = /obj/item/projectile/bullet/shotgun
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
+
+/obj/item/ammo_casing/a12g/pellet
+ name = "shotgun shell"
+ desc = "A 12 gauge shell."
+ icon_state = "gshell"
+ projectile_type = /obj/item/projectile/bullet/pellet/shotgun
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
+
+/obj/item/ammo_casing/a12g/blank
+ name = "shotgun shell"
+ desc = "A blank shell."
+ icon_state = "blshell"
+ projectile_type = /obj/item/projectile/bullet/blank
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+
+/obj/item/ammo_casing/a12g/practice
+ name = "shotgun shell"
+ desc = "A practice shell."
+ icon_state = "pshell"
+ projectile_type = /obj/item/projectile/bullet/shotgun/practice
+ matter = list("metal" = 90)
+
+/obj/item/ammo_casing/a12g/beanbag
+ name = "beanbag shell"
+ desc = "A beanbag shell."
+ icon_state = "bshell"
+ projectile_type = /obj/item/projectile/bullet/shotgun/beanbag
+ matter = list(DEFAULT_WALL_MATERIAL = 180)
+
+//Can stun in one hit if aimed at the head, but
+//is blocked by clothing that stops tasers and is vulnerable to EMP
+/obj/item/ammo_casing/a12g/stunshell
+ name = "stun shell"
+ desc = "A 12 gauge taser cartridge."
+ icon_state = "stunshell"
+ projectile_type = /obj/item/projectile/energy/electrode/stunshot
+ matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
+
+/obj/item/ammo_casing/a12g/stunshell/emp_act(severity)
+ if(prob(100/severity)) BB = null
+ update_icon()
+
+//Does not stun, only blinds, but has area of effect.
+/obj/item/ammo_casing/a12g/flash
+ name = "flash shell"
+ desc = "A chemical shell used to signal distress or provide illumination."
+ icon_state = "fshell"
+ projectile_type = /obj/item/projectile/energy/flash/flare
+ matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90)
+
+/obj/item/ammo_casing/a12g/emp
+ name = "ion shell"
+ desc = "An advanced shotgun round that creates a small EMP when it strikes a target."
+ icon_state = "empshell"
+ projectile_type = /obj/item/projectile/ion
+// projectile_type = /obj/item/projectile/bullet/shotgun/ion
+ matter = list(DEFAULT_WALL_MATERIAL = 360, "uranium" = 240)
+
+/*
+ * 7.62mm
+ */
+
+/obj/item/ammo_casing/a762
+ desc = "A 7.62mm bullet casing."
+ caliber = "7.62mm"
+ icon_state = "rifle-casing"
+ projectile_type = /obj/item/projectile/bullet/rifle/a762
+
+/obj/item/ammo_casing/a762/ap
+ desc = "A 7.62mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a762/ap
+
+/obj/item/ammo_casing/a762p
+ desc = "A 7.62mm practice bullet casing."
+ caliber = "7.62mm"
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
+
+/obj/item/ammo_casing/a762/blank
+ desc = "A blank 7.62mm bullet casing."
+ projectile_type = /obj/item/projectile/bullet/blank
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+
+/obj/item/ammo_casing/a762/hp
+ desc = "A 7.62mm hollow-point bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a762/hollow
+
+/*
+ * 14.5mm (anti-materiel rifle round)
+ */
+
+/obj/item/ammo_casing/a145
+ desc = "A 14.5mm shell."
+ icon_state = "lcasing"
+ caliber = "14.5mm"
+ projectile_type = /obj/item/projectile/bullet/rifle/a145
+ matter = list(DEFAULT_WALL_MATERIAL = 1250)
+
+/*
+ * 5.56mm
+ */
+
+/obj/item/ammo_casing/a556
+ desc = "A 5.56mm bullet casing."
+ caliber = "5.56mm"
+ icon_state = "rifle-casing"
+ projectile_type = /obj/item/projectile/bullet/rifle/a556
+
+/obj/item/ammo_casing/a556/ap
+ desc = "A 5.56mm armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a556/ap
+
+/obj/item/ammo_casing/a556p
+ desc = "A 5.56mm practice bullet casing."
+ caliber = "5.56mm"
+ icon_state = "rifle-casing" // Need to make an icon for these
+ projectile_type = /obj/item/projectile/bullet/rifle/practice
+
+/obj/item/ammo_casing/a556/blank
+ desc = "A blank 5.56mm bullet casing."
+ projectile_type = /obj/item/projectile/bullet/blank
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
+
+/obj/item/ammo_casing/a556/hp
+ desc = "A 5.56mm hollow-point bullet casing."
+ projectile_type = /obj/item/projectile/bullet/rifle/a556/hollow
+
+/*
+ * Misc
+ */
+
+/obj/item/ammo_casing/rocket
+ name = "rocket shell"
+ desc = "A high explosive designed to be fired from a launcher."
+ icon_state = "rocketshell"
+ projectile_type = /obj/item/missile
+ caliber = "rocket"
+
+/obj/item/ammo_casing/cap
+ name = "cap"
+ desc = "A cap for children toys."
+ caliber = "caps"
+ icon_state = "r-casing"
+ color = "#FF0000"
+ projectile_type = /obj/item/projectile/bullet/pistol/cap
+
+/obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else.
+ icon_state = "s-casing-spent"
+ BB = null
projectile_type = null
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index bf30c19991..5abcead8f3 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -8,7 +8,7 @@
caliber = "9mm"
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
- ammo_type = /obj/item/ammo_casing/c9mm
+ ammo_type = /obj/item/ammo_casing/a9mm
multi_aim = 1
burst_delay = 2
@@ -33,8 +33,8 @@
slot_flags = SLOT_BELT|SLOT_BACK
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/a10mm
- allowed_magazines = list(/obj/item/ammo_magazine/a10mm)
+ magazine_type = /obj/item/ammo_magazine/m10mm
+ allowed_magazines = list(/obj/item/ammo_magazine/m10mm)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -56,12 +56,12 @@
item_state = null
w_class = ITEMSIZE_LARGE
force = 10
- caliber = "a556"
+ caliber = "5.56mm"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/c556
- allowed_magazines = list(/obj/item/ammo_magazine/c556)
+ magazine_type = /obj/item/ammo_magazine/m556
+ allowed_magazines = list(/obj/item/ammo_magazine/m556)
one_handed_penalty = 4
@@ -73,8 +73,8 @@
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/s762))
- icon_state = "arifle-small"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/m556/small))
+ icon_state = "arifle-small" // If using the small magazines, use the small magazine sprite.
else
icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
if(!ignore_inhands) update_held_icon()
@@ -88,11 +88,11 @@
caliber = "9mm"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
- ammo_type = "/obj/item/ammo_casing/c9mmr"
+ ammo_type = "/obj/item/ammo_casing/a9mmr"
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/mc9mmt/rubber
- allowed_magazines = list(/obj/item/ammo_magazine/mc9mmt)
+ magazine_type = /obj/item/ammo_magazine/m9mmt/rubber
+ allowed_magazines = list(/obj/item/ammo_magazine/m9mmt)
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
..()
@@ -109,14 +109,14 @@
item_state = "z8carbine"
w_class = ITEMSIZE_LARGE
force = 10
- caliber = "a762"
+ caliber = "7.62mm"
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
fire_sound = 'sound/weapons/Gunshot.ogg'
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/c762
- allowed_magazines = list(/obj/item/ammo_magazine/c762)
+ magazine_type = /obj/item/ammo_magazine/m762
+ allowed_magazines = list(/obj/item/ammo_magazine/m762)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -181,14 +181,14 @@
force = 10
slot_flags = 0
max_shells = 50
- caliber = "a556"
+ caliber = "5.56mm"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
fire_sound = 'sound/weapons/machinegun.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/a556
- allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/c556)
+ magazine_type = /obj/item/ammo_magazine/m556saw
+ allowed_magazines = list(/obj/item/ammo_magazine/m556saw, /obj/item/ammo_magazine/m556)
one_handed_penalty = 6
@@ -225,7 +225,7 @@
return ..() //once open, behave like normal
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/c762))
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
icon_state = "l6[cover_open ? "open" : "closed"]mag"
item_state = icon_state
else
@@ -252,13 +252,13 @@
item_state = null
w_class = ITEMSIZE_LARGE
force = 10
- caliber = "shotgun"
+ caliber = "12g"
fire_sound = 'sound/weapons/shotgun.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/g12
- allowed_magazines = list(/obj/item/ammo_magazine/g12)
+ magazine_type = /obj/item/ammo_magazine/m12gdrum
+ allowed_magazines = list(/obj/item/ammo_magazine/m12gdrum)
one_handed_penalty = 4
@@ -284,8 +284,8 @@
load_method = MAGAZINE
caliber = ".45"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
- magazine_type = /obj/item/ammo_magazine/c45uzi
- allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
+ magazine_type = /obj/item/ammo_magazine/m45uzi
+ allowed_magazines = list(/obj/item/ammo_magazine/m45uzi)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -310,8 +310,8 @@
slot_flags = SLOT_BELT // ToDo: Belt sprite.
fire_sound = 'sound/weapons/Gunshot_light.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/p90
- allowed_magazines = list(/obj/item/ammo_magazine/p90, /obj/item/ammo_magazine/mc9mmt) // ToDo: New sprite for the different mag.
+ magazine_type = /obj/item/ammo_magazine/m9mmp90
+ allowed_magazines = list(/obj/item/ammo_magazine/m9mmp90, /obj/item/ammo_magazine/m9mmt) // ToDo: New sprite for the different mag.
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -330,8 +330,8 @@
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
slot_flags = SLOT_BELT // ToDo: Belt sprite.
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/tommymag
- allowed_magazines = list(/obj/item/ammo_magazine/tommymag, /obj/item/ammo_magazine/tommydrum)
+ magazine_type = /obj/item/ammo_magazine/m45tommy
+ allowed_magazines = list(/obj/item/ammo_magazine/m45tommy, /obj/item/ammo_magazine/m45tommydrum)
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0),
@@ -343,19 +343,19 @@
icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
// update_held_icon()
-/obj/item/weapon/gun/projectile/automatic/carbine
+/obj/item/weapon/gun/projectile/automatic/carbine // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start.
name = "assault carbine"
desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds."
icon_state = "bullpup"
item_state = "bullpup"
w_class = ITEMSIZE_LARGE
force = 10
- caliber = "a762"
+ caliber = "7.62mm"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/c762
- allowed_magazines = list(/obj/item/ammo_magazine/c762)
+ magazine_type = /obj/item/ammo_magazine/m762m
+ allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
one_handed_penalty = 4
@@ -366,9 +366,9 @@
/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands)
..()
- if(ammo_magazine)
- icon_state = "bullpup"
+ if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
+ icon_state = "bullpup-small" // If using the smaller magazines, use the small mag sprite.
else
icon_state = "bullpup-empty"
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
+ if(!ignore_inhands) update_held_icon()
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
index cbc403c4e0..17e2fe1234 100644
--- a/code/modules/projectiles/guns/projectile/boltaction.dm
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -7,7 +7,7 @@
icon_state = "boltaction"
fire_sound = 'sound/weapons/rifleshot.ogg'
max_shells = 5
- caliber = "a762"
+ caliber = "7.62mm"
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
ammo_type = /obj/item/ammo_casing/a762
load_method = SINGLE_CASING|SPEEDLOADER
@@ -60,7 +60,7 @@
icon_state = "leveraction"
fire_sound = 'sound/weapons/rifleshot.ogg'
max_shells = 5
- caliber = "a762"
+ caliber = "7.62mm"
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
ammo_type = /obj/item/ammo_casing/a762
load_method = SINGLE_CASING|SPEEDLOADER
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index fd46803c68..ba5f4f147d 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -2,8 +2,8 @@
var/unique_reskin
name = ".45 pistol"
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
- magazine_type = /obj/item/ammo_magazine/c45m
- allowed_magazines = list(/obj/item/ammo_magazine/c45m)
+ magazine_type = /obj/item/ammo_magazine/m45
+ allowed_magazines = list(/obj/item/ammo_magazine/m45)
icon_state = "colt"
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -12,7 +12,7 @@
/obj/item/weapon/gun/projectile/colt/detective
desc = "A Martian recreation of an old Terran pistol. Uses .45 rounds."
- magazine_type = /obj/item/ammo_magazine/c45m/rubber
+ magazine_type = /obj/item/ammo_magazine/m45/rubber
/obj/item/weapon/gun/projectile/colt/detective/update_icon()
if(ammo_magazine)
@@ -71,7 +71,7 @@
name = ".45 pistol"
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. Found pretty much everywhere humans are. Uses .45 rounds."
icon_state = "secguncomp"
- magazine_type = /obj/item/ammo_magazine/c45m/rubber
+ magazine_type = /obj/item/ammo_magazine/m45/rubber
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/semiauto.ogg'
@@ -86,7 +86,7 @@
/obj/item/weapon/gun/projectile/sec/flash
name = ".45 signal pistol"
- magazine_type = /obj/item/ammo_magazine/c45m/flash
+ magazine_type = /obj/item/ammo_magazine/m45/flash
/obj/item/weapon/gun/projectile/sec/wood
desc = "The NT Mk58 is a cheap, ubiquitous sidearm, produced by a NanoTrasen subsidiary. This one has a sweet wooden grip. Uses .45 rounds."
@@ -111,8 +111,8 @@
recoil = 0
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/c45m
- allowed_magazines = list(/obj/item/ammo_magazine/c45m)
+ magazine_type = /obj/item/ammo_magazine/m45
+ allowed_magazines = list(/obj/item/ammo_magazine/m45)
/obj/item/weapon/gun/projectile/deagle
name = "desert eagle"
@@ -120,11 +120,11 @@
icon_state = "deagle"
item_state = "deagle"
force = 14.0
- caliber = ".50"
+ caliber = ".50AE"
load_method = MAGAZINE
fire_sound = 'sound/weapons/deagle.ogg'
- magazine_type = /obj/item/ammo_magazine/a50
- allowed_magazines = list(/obj/item/ammo_magazine/a50)
+ magazine_type = /obj/item/ammo_magazine/m50
+ allowed_magazines = list(/obj/item/ammo_magazine/m50)
/obj/item/weapon/gun/projectile/deagle/update_icon()
..()
@@ -168,13 +168,13 @@
desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you."
icon_state = "gyropistol"
max_shells = 8
- caliber = "75"
+ caliber = ".75"
fire_sound = 'sound/weapons/rpg.ogg'
origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/a75
- allowed_magazines = list(/obj/item/ammo_magazine/a75)
+ magazine_type = /obj/item/ammo_magazine/m75
+ allowed_magazines = list(/obj/item/ammo_magazine/m75)
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
@@ -196,12 +196,12 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
fire_sound = 'sound/weapons/semiauto.ogg'
load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/mc9mm
- allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
+ magazine_type = /obj/item/ammo_magazine/m9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/m9mm)
/obj/item/weapon/gun/projectile/pistol/flash
name = "holdout signal pistol"
- magazine_type = /obj/item/ammo_magazine/mc9mm/flash
+ magazine_type = /obj/item/ammo_magazine/m9mm/flash
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob)
if(user.get_inactive_hand() == src)
@@ -256,17 +256,17 @@
var/global/list/ammo_types = list(
/obj/item/ammo_casing/a357 = ".357",
- /obj/item/ammo_casing/c9mmf = "9mm",
- /obj/item/ammo_casing/c45f = ".45",
+ /obj/item/ammo_casing/a9mmf = "9mm",
+ /obj/item/ammo_casing/a45f = ".45",
/obj/item/ammo_casing/a10mm = "10mm",
- /obj/item/ammo_casing/shotgun = "12 gauge",
- /obj/item/ammo_casing/shotgun = "12 gauge",
- /obj/item/ammo_casing/shotgun/pellet = "12 gauge",
- /obj/item/ammo_casing/shotgun/pellet = "12 gauge",
- /obj/item/ammo_casing/shotgun/pellet = "12 gauge",
- /obj/item/ammo_casing/shotgun/beanbag = "12 gauge",
- /obj/item/ammo_casing/shotgun/stunshell = "12 gauge",
- /obj/item/ammo_casing/shotgun/flash = "12 gauge",
+ /obj/item/ammo_casing/a12g = "12 gauge",
+ /obj/item/ammo_casing/a12g = "12 gauge",
+ /obj/item/ammo_casing/a12g/pellet = "12 gauge",
+ /obj/item/ammo_casing/a12g/pellet = "12 gauge",
+ /obj/item/ammo_casing/a12g/pellet = "12 gauge",
+ /obj/item/ammo_casing/a12g/beanbag = "12 gauge",
+ /obj/item/ammo_casing/a12g/stunshell = "12 gauge",
+ /obj/item/ammo_casing/a12g/flash = "12 gauge",
/obj/item/ammo_casing/a762 = "7.62mm",
/obj/item/ammo_casing/a556 = "5.56mm"
)
@@ -299,8 +299,8 @@
caliber = "9mm"
load_method = MAGAZINE
fire_sound = 'sound/weapons/semiauto.ogg'
- magazine_type = /obj/item/ammo_magazine/mc9mm
- allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
+ magazine_type = /obj/item/ammo_magazine/m9mm
+ allowed_magazines = list(/obj/item/ammo_magazine/m9mm)
/obj/item/weapon/gun/projectile/luger/update_icon()
..()
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index e7d31c0226..3886450fcf 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -43,10 +43,10 @@
name = "revolver"
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
icon_state = "detective"
- caliber = "38"
+ caliber = ".38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
- ammo_type = /obj/item/ammo_casing/c38
+ ammo_type = /obj/item/ammo_casing/a38
/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun()
set name = "Name Gun"
@@ -71,13 +71,13 @@
name = "Deckard .38"
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
icon_state = "deckard-empty"
- caliber = "38"
+ caliber = ".38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
- ammo_type = /obj/item/ammo_casing/c38
+ ammo_type = /obj/item/ammo_casing/a38
/obj/item/weapon/gun/projectile/revolver/deckard/emp
- ammo_type = /obj/item/ammo_casing/c38/emp
+ ammo_type = /obj/item/ammo_casing/a38/emp
/obj/item/weapon/gun/projectile/revolver/deckard/update_icon()
@@ -107,13 +107,13 @@
name = "\"The Judge\""
desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12 shotgun rounds."
icon_state = "judge"
- caliber = "shotgun"
+ caliber = "12g"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
max_shells = 5
fire_sound = 'sound/weapons/shotgun.ogg'
recoil = 2 // ow my fucking hand
accuracy = -1 // smooth bore + short barrel = shit accuracy
- ammo_type = /obj/item/ammo_casing/shotgun
+ ammo_type = /obj/item/ammo_casing/a12g
// ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
/obj/item/weapon/gun/projectile/revolver/lemat
@@ -124,11 +124,11 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 9
- caliber = "38"
- ammo_type = /obj/item/ammo_casing/c38
+ caliber = ".38"
+ ammo_type = /obj/item/ammo_casing/a38
var/secondary_max_shells = 1
- var/secondary_caliber = "shotgun"
- var/secondary_ammo_type = /obj/item/ammo_casing/shotgun
+ var/secondary_caliber = "12g"
+ var/secondary_ammo_type = /obj/item/ammo_casing/a12g
var/flipped_firing = 0
var/list/secondary_loaded = list()
var/list/tertiary_loaded = list()
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 84ad0bc426..bc14bb9425 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -8,10 +8,10 @@
force = 10
flags = CONDUCT
slot_flags = SLOT_BACK
- caliber = "shotgun"
+ caliber = "12g"
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING
- ammo_type = /obj/item/ammo_casing/shotgun/beanbag
+ ammo_type = /obj/item/ammo_casing/a12g/beanbag
handle_casings = HOLD_CASINGS
fire_sound = 'sound/weapons/shotgun.ogg'
var/recentpump = 0 // to prevent spammage
@@ -48,7 +48,7 @@
item_state = "cshotgun"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8.
- ammo_type = /obj/item/ammo_casing/shotgun
+ ammo_type = /obj/item/ammo_casing/a12g
/obj/item/weapon/gun/projectile/shotgun/doublebarrel
name = "double-barreled shotgun"
@@ -64,9 +64,9 @@
force = 10
flags = CONDUCT
slot_flags = SLOT_BACK
- caliber = "shotgun"
+ caliber = "12g"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
- ammo_type = /obj/item/ammo_casing/shotgun/beanbag
+ ammo_type = /obj/item/ammo_casing/a12g/beanbag
burst_delay = 0
firemodes = list(
@@ -75,12 +75,12 @@
)
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet
- ammo_type = /obj/item/ammo_casing/shotgun/pellet
+ ammo_type = /obj/item/ammo_casing/a12g/pellet
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/flare
name = "signal shotgun"
desc = "A double-barreled shotgun meant to fire signal flash shells."
- ammo_type = /obj/item/ammo_casing/shotgun/flash
+ ammo_type = /obj/item/ammo_casing/a12g/flash
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/unload_ammo(user, allow_dump)
..(user, allow_dump=1)
@@ -115,6 +115,6 @@
icon_state = "sawnshotgun"
item_state = "sawnshotgun"
slot_flags = SLOT_BELT|SLOT_HOLSTER
- ammo_type = /obj/item/ammo_casing/shotgun/pellet
+ ammo_type = /obj/item/ammo_casing/a12g/pellet
w_class = ITEMSIZE_NORMAL
force = 5
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index be280c2f64..9a16f68a4c 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -80,7 +80,7 @@
slot_flags = SLOT_BACK // Needs a sprite.
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
recoil = 2 //extra kickback
- caliber = "a762"
+ caliber = "7.62mm"
load_method = MAGAZINE
accuracy = -3 //shooting at the hip
scoped_accuracy = 0
@@ -88,11 +88,11 @@
one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
fire_sound = 'sound/weapons/SVD_shot.ogg'
magazine_type = /obj/item/ammo_magazine/SVD
- allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/c762)
+ allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/m762)
/obj/item/weapon/gun/projectile/SVD/update_icon()
..()
-// if(istype(ammo_magazine,/obj/item/ammo_magazine/c762)
+// if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)
// icon_state = "SVD-bigmag" //No icon for this exists yet.
if(ammo_magazine)
icon_state = "SVD"
diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm
index 43f89b4ec7..8fb02007b4 100644
--- a/code/modules/random_map/drop/drop_types.dm
+++ b/code/modules/random_map/drop/drop_types.dm
@@ -62,16 +62,16 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/weapon/storage/box/emps,
/obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/gun/projectile/automatic/sts35,
- /obj/item/ammo_magazine/c762/ap,
- /obj/item/ammo_magazine/c762/ap,
+ /obj/item/ammo_magazine/m762/ap,
+ /obj/item/ammo_magazine/m762/ap,
/obj/item/weapon/gun/projectile/colt,
- /obj/item/ammo_magazine/c45m,
+ /obj/item/ammo_magazine/m45,
/obj/item/weapon/material/hatchet/tacknife/combatknife)
/datum/supply_drop_loot/heavy_warfare
name = "Heavy Warfare"
container = /obj/structure/largecrate
-/datum/supply_drop_loot/armour/New()
+/datum/supply_drop_loot/heavy_warfare/New()
..()
contents = list(
/obj/item/clothing/head/helmet/combat,
@@ -83,8 +83,8 @@ var/global/list/datum/supply_drop_loot/supply_drop
/obj/item/clothing/accessory/storage/black_drop_pouches,
/obj/item/weapon/storage/backpack/dufflebag/sec,
/obj/item/weapon/gun/projectile/automatic/carbine,
- /obj/item/ammo_magazine/c762/ap,
- /obj/item/ammo_magazine/c762,
+ /obj/item/ammo_magazine/m762/ap,
+ /obj/item/ammo_magazine/m762,
/obj/item/weapon/shield/energy,
/obj/item/weapon/grenade/frag,
/obj/item/weapon/grenade/frag,
@@ -99,7 +99,7 @@ var/global/list/datum/supply_drop_loot/supply_drop
datum/supply_drop_loot/riot
name = "Riot Gear"
container = /obj/structure/largecrate
-/datum/supply_drop_loot/armour/New()
+/datum/supply_drop_loot/riot/New()
..()
contents = list(
/obj/item/clothing/head/helmet/riot,
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 49678c966c..6f1add522a 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -545,7 +545,7 @@ other types of metals and chemistry for reagents).
id = "ammo_9mm"
req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
materials = list(DEFAULT_WALL_MATERIAL = 3750, "silver" = 100)
- build_path = /obj/item/ammo_magazine/c9mm
+ build_path = /obj/item/ammo_magazine/box/c9mm
sort_string = "TAACA"
/datum/design/item/weapon/stunshell
@@ -553,7 +553,7 @@ other types of metals and chemistry for reagents).
id = "stunshell"
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
materials = list(DEFAULT_WALL_MATERIAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun/stunshell
+ build_path = /obj/item/ammo_casing/a12g/stunshell
sort_string = "TAACB"
/datum/design/item/weapon/chemsprayer
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index 88da3ad842..df5d625a2e 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -23,8 +23,11 @@
#define DAMAGE_RATE_LIMIT 3 //damage rate cap at power = 300, scales linearly with power
-//These would be what you would get at point blank, decreases with distance
-#define DETONATION_RADS 200
+// Base variants are applied to everyone on the same Z level
+// Range variants are applied on per-range basis: numbers here are on point blank, it scales with the map size (assumes square shaped Z levels)
+#define DETONATION_RADS 20
+#define DETONATION_HALLUCINATION_BASE 300
+#define DETONATION_HALLUCINATION_RANGE 300
#define DETONATION_HALLUCINATION 600
@@ -95,6 +98,11 @@
anchored = 1
grav_pulling = 1
exploded = 1
+ var/turf/TS = get_turf(src) // The turf supermatter is on. SM being in a locker, mecha, or other container shouldn't block it's effects that way.
+ if(!TS)
+ return
+ for(var/z in GetConnectedZlevels(TS.z))
+ radiation_repository.z_radiate(locate(1, 1, z), DETONATION_RADS, 1)
for(var/mob/living/mob in living_mob_list)
var/turf/T = get_turf(mob)
if(T && (loc.z == T.z))
@@ -102,8 +110,6 @@
//Hilariously enough, running into a closet should make you get hit the hardest.
var/mob/living/carbon/human/H = mob
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
- var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) )
- mob.apply_effect(rads, IRRADIATE)
spawn(pull_time)
explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1)
qdel(src)
@@ -252,12 +258,15 @@
if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) // VOREStation Edit - Only mesons can protect you!
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
+/*
//adjusted range so that a power of 170 (pretty high) results in 9 tiles, roughly the distance from the core to the engine monitoring room.
//note that the rads given at the maximum range is a constant 0.2 - as power increases the maximum range merely increases.
for(var/mob/living/l in range(src, round(sqrt(power / 2))))
var/radius = max(get_dist(l, src), 1)
var/rads = (power / 10) * ( 1 / (radius**2) )
l.apply_effect(rads, IRRADIATE)
+*/
+ radiation_repository.radiate(src, power * 1.5) //Better close those shutters!
power -= (power/DECAY_FACTOR)**3 //energy losses due to radiation
@@ -371,9 +380,8 @@
"The unearthly ringing subsides and you notice you have new radiation burns.", 2)
else
l.show_message("You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.", 2)
- var/rads = 500 * sqrt( 1 / (get_dist(l, src) + 1) )
- l.apply_effect(rads, IRRADIATE)
-
+ var/rads = 500
+ radiation_repository.radiate(src, rads)
/obj/machinery/power/supermatter/proc/supermatter_pull()
//following is adapted from singulo code
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 38b919823f..b9fe362031 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -1,5 +1,8 @@
/* SURGERY STEPS */
+/obj/
+ var/surgery_odds = 0 // Used for tables/etc which can have surgery done of them.
+
/datum/surgery_step
var/priority = 0 //steps with higher priority would be attempted first
@@ -111,13 +114,29 @@
return 1
M.op_stage.in_progress += zone
S.begin_step(user, M, zone, src) //start on it
- //We had proper tools! (or RNG smiled.) and user did not move or change hands.
- if(prob(S.tool_quality(src)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
- S.end_step(user, M, zone, src) //finish successfully
- else if ((src in user.contents) && user.Adjacent(M)) //or
- S.fail_step(user, M, zone, src) //malpractice~
- else // This failing silently was a pain.
- user << "You must remain close to your patient to conduct surgery."
+ var/success = TRUE
+
+ // Bad tools make it less likely to succeed.
+ if(!prob(S.tool_quality(src)))
+ success = FALSE
+
+ // Bad or no surface may mean failure as well.
+ var/obj/surface = M.get_surgery_surface()
+ if(!surface || !prob(surface.surgery_odds))
+ success = FALSE
+
+ // Not staying still fails you too.
+ if(success)
+ if(!do_mob(user, M, rand(S.min_duration, S.max_duration)))
+ success = FALSE
+ else
+ to_chat(user, "You must remain close to your patient to conduct surgery.")
+
+ if(success)
+ S.end_step(user, M, zone, src)
+ else
+ S.fail_step(user, M, zone, src)
+
M.op_stage.in_progress -= zone // Clear the in-progress flag.
if (ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
index 9348799a99..620a475475 100644
--- a/code/modules/tables/tables.dm
+++ b/code/modules/tables/tables.dm
@@ -10,6 +10,7 @@ var/list/table_icon_cache = list()
climbable = 1
layer = 2.8
throwpass = 1
+ surgery_odds = 66
var/flipped = 0
var/maxhealth = 10
var/health = 10
diff --git a/code/modules/xenoarcheaology/effects/radiate.dm b/code/modules/xenoarcheaology/effects/radiate.dm
index 7816409757..6c8d37838a 100644
--- a/code/modules/xenoarcheaology/effects/radiate.dm
+++ b/code/modules/xenoarcheaology/effects/radiate.dm
@@ -15,16 +15,10 @@
/datum/artifact_effect/radiate/DoEffectAura()
if(holder)
- var/turf/T = get_turf(holder)
- for (var/mob/living/M in range(src.effectrange,T))
- M.apply_effect(radiation_amount,IRRADIATE,0)
- M.updatehealth()
+ radiation_repository.flat_radiate(holder, radiation_amount, src.effectrange)
return 1
/datum/artifact_effect/radiate/DoEffectPulse()
if(holder)
- var/turf/T = get_turf(holder)
- for (var/mob/living/M in range(src.effectrange,T))
- M.apply_effect(radiation_amount * 25,IRRADIATE,0)
- M.updatehealth()
+ radiation_repository.radiate(holder, ((radiation_amount * 25) * (sqrt(src.effectrange)))) //Need to get feedback on this
return 1
diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
index 9d6450a839..9e3343b680 100644
--- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm
+++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm
@@ -198,8 +198,7 @@
radiation = rand() * 15 + 85
if(!rad_shield)
//irradiate nearby mobs
- for(var/mob/living/M in view(7,src))
- M.apply_effect(radiation / 25, IRRADIATE, 0)
+ radiation_repository.radiate(src, radiation / 25)
else
t_left_radspike = pick(10,15,25)
@@ -361,4 +360,4 @@
scanned_item = null
add_fingerprint(usr)
- return 1 // update UIs attached to this object
+ return 1 // update UIs attached to this object
\ No newline at end of file
diff --git a/config/example/config.txt b/config/example/config.txt
index 7c7e397155..e344634847 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -36,6 +36,9 @@ JOBS_HAVE_MINIMAL_ACCESS
Configure how fast explosion strength diminishes when travelling up/down z levels. All explosion distances are multiplied by this each time they go up/down z-levels.
#MULTI_Z_EXPLOSION_SCALAR 0.5
+# Radiation weakens with distance from the source; stop calculating when the strength falls below this value. Lower values mean radiation reaches smaller (with increasingly trivial damage) at the cost of more CPU usage. Max range = DISTANCE^2 * POWER / RADIATION_LOWER_LIMIT
+# RADIATION_LOWER_LIMIT 0.35
+
## log OOC channel
LOG_OOC
diff --git a/html/changelogs/Leshana-Radiation.yml b/html/changelogs/Leshana-Radiation.yml
new file mode 100644
index 0000000000..d4d9c3589d
--- /dev/null
+++ b/html/changelogs/Leshana-Radiation.yml
@@ -0,0 +1,5 @@
+author: Leshana
+delete-after: True
+changes:
+ - tweak: "Optimized the unified radiation system. Made the radiation cutoff level configurable."
+ - bugfix: "Standing still won't save you from radiation storms."
diff --git a/html/changelogs/MagmaRam - Health Regen.yml b/html/changelogs/MagmaRam - Health Regen.yml
new file mode 100644
index 0000000000..c0cab4f13f
--- /dev/null
+++ b/html/changelogs/MagmaRam - Health Regen.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: MagmaRam
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Nerfed health regeneration, especially on bruises."
diff --git a/html/changelogs/cirra-Radiation.yml b/html/changelogs/cirra-Radiation.yml
new file mode 100644
index 0000000000..53038532cd
--- /dev/null
+++ b/html/changelogs/cirra-Radiation.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Cirra
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added a unified radiation system. Radiation is lessened by obstacles, and distance."
+ - rscadd: "Added a geiger counter for measuring radiation levels, which can be found in certain vending machines and radiation closets."
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 0e0959705e..dcdb20e070 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 336f8dfe9c..1198dc0314 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index ba02b5a324..75f5005aa5 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index 2b58fe7175..faa4589659 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -2311,7 +2311,7 @@
"aSw" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aSx" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/security)
"aSy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/security_port)
-"aSz" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/machinery/door/window/brigdoor/northleft{name = "Ammo"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aSz" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/machinery/door/window/brigdoor/northleft{name = "Ammo"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
"aSA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"aSB" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
"aSC" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
@@ -5255,7 +5255,7 @@
"bXc" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_b)
"bXd" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_b)
"bXe" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/light,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
-"bXf" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 4},/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/turf/simulated/floor/tiled,/area/security/range)
+"bXf" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 4},/obj/item/ammo_magazine/m9mmt/practice,/obj/item/ammo_magazine/m9mmt/practice,/obj/item/ammo_magazine/m45/practice,/obj/item/ammo_magazine/m45/practice,/obj/item/ammo_magazine/m45/practice,/obj/item/ammo_magazine/m45/practice,/obj/item/ammo_magazine/m45/practice,/obj/item/ammo_magazine/m45/practice,/turf/simulated/floor/tiled,/area/security/range)
"bXg" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/structure/table/steel,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bXh" = (/obj/structure/closet/crate{icon_state = "crateopen"; name = "Grenade Crate"; opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
"bXi" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych)
@@ -6167,7 +6167,7 @@
"coE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_three)
"coF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
"coG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/sleep/elevator)
-"coH" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/turf/simulated/floor/tiled/dark,/area/security/tactical)
+"coH" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/turf/simulated/floor/tiled/dark,/area/security/tactical)
"coI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/medbay_aft)
"coJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/medbay_aft)
"coK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/medbay_aft)
diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm
index 3f14b89489..edead8f198 100644
--- a/maps/northern_star/polaris-2.dmm
+++ b/maps/northern_star/polaris-2.dmm
@@ -859,7 +859,7 @@
"aqA" = (/obj/structure/table/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqB" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/gun/energy/ionrifle,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aqD" = (/obj/structure/table/rack,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aqD" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqE" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/launcher/grenade,/obj/item/weapon/gun/launcher/grenade,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqF" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps{pixel_x = 4; pixel_y = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/smokes,/obj/item/weapon/storage/box/smokes,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqG" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -869,11 +869,11 @@
"aqK" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT"; name = "Assault Weapon Storage"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqL" = (/obj/structure/sign/securearea,/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
"aqM" = (/obj/machinery/door/airlock/centcom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aqN" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aqN" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqO" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqP" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aqQ" = (/obj/structure/table/rack,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aqR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aqQ" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aqR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqS" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
"aqT" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aqU" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -896,7 +896,7 @@
"arl" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"arm" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"arn" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aro" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aro" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"arp" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"arq" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"arr" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
@@ -953,7 +953,7 @@
"asq" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"asr" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/xray,/obj/item/weapon/gun/energy/xray,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ass" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"ast" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ast" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/flash,/obj/item/ammo_magazine/m45/flash,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"asu" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/sec,/obj/item/weapon/gun/projectile/sec,/obj/item/weapon/gun/projectile/sec,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"asv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"asw" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -1179,7 +1179,7 @@
"awI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"awJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"awK" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"awL" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/obj/item/ammo_magazine/mc9mm/flash,/obj/item/weapon/gun/projectile/pistol/flash,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
+"awL" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/obj/item/ammo_magazine/m9mm/flash,/obj/item/weapon/gun/projectile/pistol/flash,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"awM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
"awN" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"awO" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
@@ -1207,8 +1207,8 @@
"axk" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"axl" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"axm" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"axn" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"axo" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"axn" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"axo" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"axp" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"axq" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall/dark,/area/shuttle/administration/centcom)
"axr" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
diff --git a/vorestation.dme b/vorestation.dme
index 1a663df9d4..58325fdbbc 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -165,6 +165,7 @@
#include "code\controllers\Processes\nanoui.dm"
#include "code\controllers\Processes\obj.dm"
#include "code\controllers\Processes\planet.dm"
+#include "code\controllers\Processes\radiation.dm"
#include "code\controllers\Processes\scheduler.dm"
#include "code\controllers\Processes\Shuttle.dm"
#include "code\controllers\Processes\sun.dm"
@@ -231,6 +232,7 @@
#include "code\datums\repositories\cameras.dm"
#include "code\datums\repositories\crew.dm"
#include "code\datums\repositories\decls.dm"
+#include "code\datums\repositories\radiation.dm"
#include "code\datums\repositories\repository.dm"
#include "code\datums\supplypacks\atmospherics.dm"
#include "code\datums\supplypacks\contraband.dm"
@@ -819,6 +821,7 @@
#include "code\game\objects\items\devices\flash_vr.dm"
#include "code\game\objects\items\devices\flashlight.dm"
#include "code\game\objects\items\devices\floor_painter.dm"
+#include "code\game\objects\items\devices\geiger.dm"
#include "code\game\objects\items\devices\hacktool.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
#include "code\game\objects\items\devices\locker_painter.dm"
@@ -2061,8 +2064,8 @@
#include "code\modules\projectiles\effects.dm"
#include "code\modules\projectiles\gun.dm"
#include "code\modules\projectiles\projectile.dm"
-#include "code\modules\projectiles\ammunition\boxes.dm"
-#include "code\modules\projectiles\ammunition\bullets.dm"
+#include "code\modules\projectiles\ammunition\magazines.dm"
+#include "code\modules\projectiles\ammunition\rounds.dm"
#include "code\modules\projectiles\guns\energy.dm"
#include "code\modules\projectiles\guns\launcher.dm"
#include "code\modules\projectiles\guns\projectile.dm"