From dd9c91cf5f9f0a53b72b483bc7b8cf007347392b Mon Sep 17 00:00:00 2001 From: Belsima Date: Sat, 6 May 2017 09:27:38 -0400 Subject: [PATCH 01/33] Lets biological females have facial hair. --- code/modules/mob/new_player/sprite_accessories.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index f6679a6dfe..cab1856683 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -561,7 +561,6 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/Human_face.dmi' - gender = MALE shaved name = "Shaved" @@ -1236,4 +1235,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") From c95df78a549e4a1bc07cafd3fc37f9838b6ee89b Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 15:33:29 +0100 Subject: [PATCH 02/33] Fixes a bug with healthy analzyers and adds radiation showing to them, from Bay --- code/game/objects/items/devices/scanners.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5d883784aa..6399d0ce4a 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -69,7 +69,7 @@ REAGENT SCANNER user.show_message("Analyzing Results for [M]:") user.show_message("Overall Status: dead") else - user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]") + user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round(M.health*100/M.maxHealth)]% healthy"]") user.show_message(" Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message(" Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) @@ -99,6 +99,10 @@ 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 Level: [M.radiation]") + else + user.show_message("No radiation detected.") if(istype(M, /mob/living/carbon)) var/mob/living/carbon/C = M if(C.reagents.total_volume) From 6185bbd212c9085fd69bc1769e1ca5f0d754d5af Mon Sep 17 00:00:00 2001 From: Ben Reeve Date: Thu, 15 Dec 2016 19:07:39 +0000 Subject: [PATCH 03/33] Unified radiation system --- code/controllers/Processes/radiation.dm | 43 +++++++ code/controllers/configuration.dm | 4 + code/datums/repositories/radiation.dm | 114 ++++++++++++++++++ code/game/atoms_movable.dm | 3 + code/game/gamemodes/meteor/meteors.dm | 3 +- code/game/machinery/doors/airlock.dm | 13 +- code/game/machinery/doors/blast_door.dm | 11 +- code/game/machinery/doors/door.dm | 2 + code/game/machinery/vending.dm | 2 +- code/game/mecha/equipment/tools/tools.dm | 6 +- code/game/objects/items/devices/geiger.dm | 53 ++++++++ .../crates_lockers/closets/utility_closets.dm | 2 + code/game/turfs/simulated/wall_attacks.dm | 2 + code/game/turfs/simulated/wall_icon.dm | 1 + code/game/turfs/simulated/walls.dm | 6 +- code/game/turfs/turf.dm | 11 +- code/modules/events/event_container.dm | 2 +- code/modules/events/radiation_storm.dm | 10 +- code/modules/events/solar_storm.dm | 17 ++- code/modules/mining/mine_turfs.dm | 4 +- .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/silicon/robot/robot_modules.dm | 2 + code/modules/power/port_gen.dm | 8 +- code/modules/power/singularity/collector.dm | 5 + code/modules/power/singularity/singularity.dm | 10 +- code/modules/supermatter/supermatter.dm | 22 +++- .../xenoarcheaology/effects/radiate.dm | 10 +- .../tools/geosample_scanner.dm | 5 +- html/changelogs/cirra-Radiation.yml | 37 ++++++ icons/obj/device.dmi | Bin 51528 -> 55614 bytes polaris.dme | 3 + 31 files changed, 337 insertions(+), 76 deletions(-) create mode 100644 code/controllers/Processes/radiation.dm create mode 100644 code/datums/repositories/radiation.dm create mode 100644 code/game/objects/items/devices/geiger.dm create mode 100644 html/changelogs/cirra-Radiation.yml diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm new file mode 100644 index 0000000000..8ebd3a71a8 --- /dev/null +++ b/code/controllers/Processes/radiation.dm @@ -0,0 +1,43 @@ +/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() +// set background = 1 + for(var/turf/T in linked.irradiated_turfs) + if(!T) + linked.irradiated_turfs.Remove(T) + continue + linked.irradiated_turfs[T] -= config.radiation_decay_rate + if(linked.irradiated_turfs[T] <= config.radiation_lower_limit) + linked.irradiated_turfs.Remove(T) + SCHECK + for(var/mob/living/L in linked.irradiated_mobs) + if(!L) + linked.irradiated_mobs.Remove(L) + continue + if(get_turf(L) in linked.irradiated_turfs) + L.rad_act(linked.irradiated_turfs[get_turf(L)]) + if(!L.radiation) + linked.irradiated_mobs.Remove(L) + SCHECK + for(var/thing in linked.sources) + if(!thing) + linked.sources.Remove(thing) + continue + var/atom/emitter = thing + linked.radiate(emitter, emitter.rad_power) + to_process.Cut() + SCHECK + for(var/thing in linked.resistance_cache) + if(!thing) + linked.resistance_cache.Remove(thing) + continue + var/turf/T = thing + if((length(T.contents) + 1) != linked.resistance_cache[T]) + T.calc_rad_resistance() + SCHECK \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 5021453462..c22ac1bc81 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -219,6 +219,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) diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm new file mode 100644 index 0000000000..bdf2b18322 --- /dev/null +++ b/code/datums/repositories/radiation.dm @@ -0,0 +1,114 @@ +//#define RADDBG + +var/repository/radiation/radiation_repository = new() + +var/list/to_process = list() + +/repository/radiation + var/list/sources = list() //All the radiation sources we know about + var/list/irradiated_turfs = list() + var/list/irradiated_mobs = list() + var/list/resistance_cache = list() + +/repository/radiation/proc/report_rads(var/turf/T as turf) + return irradiated_turfs[T] + +/repository/radiation/proc/radiate(source, power) //Sends out a radiation pulse, taking walls into account + if(!(source && power)) //Sanity checking + return + + var/range = min(round(sqrt(power / config.radiation_lower_limit)), 31) + var/turf/epicentre = get_turf(source) + to_process = list() + + range = min(epicentre.x, world.maxx - epicentre.x, epicentre.y, world.maxy - epicentre.y, range) + + to_process = trange(range, epicentre) + to_process[epicentre] = power + + for(var/turf/spot in to_process) + var/turf/origin = get_turf(epicentre) + var/working = power + while(origin != spot) + origin = get_step_towards(origin, spot) //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.rad_resistance * config.radiation_resistance_multiplier)), 0) + if(!working) + break + if(!to_process[origin]) + to_process[origin] = working + + else + to_process[origin] = max(to_process[origin], working) + + for(var/turf/spot in to_process) + irradiated_turfs[spot] = max(((to_process[spot]) * (1 / (get_dist(epicentre, spot) ** 2))), irradiated_turfs[spot]) //Butchered version of the inverse square law. Works for this purpose + #ifdef RADDBG + var/x = Clamp( irradiated_turfs[spot], 0, 255) + spot.color = rgb(5,x,5) + #endif + +/repository/radiation/proc/flat_radiate(source, power, range, var/respect_maint=0) //Sets the radiation in a range to a constant value. + if(!(source && power && range)) + return + var/turf/epicentre = get_turf(source) + range = min(epicentre.x, world.maxx - epicentre.x, epicentre.y, world.maxy - epicentre.y, range) + if(!respect_maint) + for(var/turf/T in trange(range, epicentre)) + irradiated_turfs[T] = max(power, irradiated_turfs[T]) + else + for(var/turf/T in trange(range, epicentre)) + var/area/A = T.loc + if(A.flags & RAD_SHIELDED) + continue + irradiated_turfs[T] = max(power, irradiated_turfs[T]) + +/repository/radiation/proc/z_radiate(var/atom/source, power, var/respect_maint=0) //Irradiates a full Z-level. Hacky way of doing it, but not too expensive. + 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/proc/calc_rad_resistance() + rad_resistance = 0 + for(var/obj/O in src.contents) + if(O.rad_resistance) //Override + rad_resistance += O.rad_resistance + + else if(O.density) //So doors don't get counted + var/material/M = O.get_material() + if(!M) continue + rad_resistance += M.weight + radiation_repository.resistance_cache[src] = (length(contents) + 1) + +/turf/simulated/wall/calc_rad_resistance() + radiation_repository.resistance_cache[src] = (length(contents) + 1) + rad_resistance = (density ? material.weight : 0) + +/atom + var/rad_power = 0 + var/rad_resistance = 0 + +/atom/Destroy() + if(rad_power) + radiation_repository.sources.Remove(src) + . = ..() + +/atom/proc/update_radiation() //For VV'ing something to make it radioactive at runtime + if((rad_power) && (!(src in radiation_repository.sources))) + radiation_repository.sources.Add(src) + else if((!rad_power) && (src in radiation_repository.sources)) + radiation_repository.sources.Remove(src) + +/atom/proc/rad_act(var/severity) //If people expand the system, this may be useful. Here as a placeholder until then + return 1 + +/mob/living/rad_act(var/severity) + if(severity) + src.apply_effect(severity, IRRADIATE, src.getarmor(null, "rad")) + for(var/obj/I in src) + I.rad_act(severity) + + +//#undef RADDBG \ No newline at end of file diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index fe9f99b032..82061ddb6a 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -53,6 +53,9 @@ pulledby = null /atom/movable/proc/initialize() + if(rad_power) + radiation_repository.sources.Add(src) + if(!isnull(gcDestroyed)) crash_with("GC: -- [type] had initialize() called after qdel() --") 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/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index e78cba3568..c1ec9287b0 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -263,6 +263,7 @@ icon = 'icons/obj/doors/Dooruranium.dmi' mineral = "uranium" var/last_event = 0 + rad_power = 7.5 /obj/machinery/door/airlock/process() // Deliberate no call to parent. @@ -277,18 +278,6 @@ ..() -/obj/machinery/door/airlock/uranium/process() - if(world.time > last_event+20) - if(prob(50)) - radiate() - 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..f8e1d1cbb5 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,8 @@ icon_state = icon_state_closed else icon_state = icon_state_open + var/turf/T = get_turf(src) + T.calc_rad_resistance() return // Proc: force_open() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7a1d6abd02..898683192f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -362,6 +362,8 @@ icon_state = "door1" else icon_state = "door0" + var/turf/T = get_turf(src) + T.calc_rad_resistance() return diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 3d53a053f0..58bed70d07 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1029,7 +1029,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..acd85b730c --- /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.report_rads(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/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 5c8aa2b2e0..67a4d3e788 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -155,6 +155,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/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 098782ebdf..b236e4dc90 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 + calc_rad_resistance() + 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..757639e1bb 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) + calc_rad_resistance() 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/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3f2e0064f2..87b4b2b648 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -140,6 +140,12 @@ var/const/enterloopsanity = 100 if(ismob(A)) var/mob/M = A + var/mob/living/L = A + if(istype(L)) + if(!(L in radiation_repository.irradiated_mobs)) + if(src in radiation_repository.irradiated_turfs) + radiation_repository.irradiated_mobs.Add(L) + L.handle_footstep(src) if(!M.lastarea) M.lastarea = get_area(M.loc) if(M.lastarea.has_gravity == 0) @@ -147,9 +153,6 @@ var/const/enterloopsanity = 100 else if(!is_space()) M.inertia_dir = 0 M.make_floating(0) - if(isliving(M)) - var/mob/living/L = M - L.handle_footstep(src) ..() var/objects = 0 if(A && (A.flags & PROXMOVE)) @@ -255,4 +258,4 @@ var/const/enterloopsanity = 100 step(AM, turn(AM.last_move, 180)) if(isliving(AM)) var/mob/living/M = AM - M.turf_collision(src, speed) + M.turf_collision(src, speed) \ No newline at end of file diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 37a576a442..804d13404d 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -186,4 +186,4 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT #undef ASSIGNMENT_JANITOR #undef ASSIGNMENT_MEDICAL #undef ASSIGNMENT_SCIENTIST -#undef ASSIGNMENT_SECURITY +#undef ASSIGNMENT_SECURITY \ No newline at end of file diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index b9435f25aa..a8c9386fde 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -30,20 +30,18 @@ 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") /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..4ebfc71d55 100644 --- a/code/modules/events/solar_storm.dm +++ b/code/modules/events/solar_storm.dm @@ -27,17 +27,14 @@ radiate() /datum/event/solar_storm/proc/radiate() - for(var/mob/living/L in living_mob_list) - var/turf/T = get_turf(L) - if(!T) + var/radiation_level = rand(15, 30) + for(var/area/A in all_areas) + if(!(A.z in using_map.player_levels)) continue - - if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) //Make sure you're in a space area or on a space turf - 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")) - + for(var/turf/T in A) + if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) + continue + radiation_repository.irradiated_turfs[T] = radiation_level /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/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index bf59f3c382..68363fb27f 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) @@ -559,4 +559,4 @@ var/list/mining_overlay_cache = list() if(mineral_name && (mineral_name in ore_data)) mineral = ore_data[mineral_name] UpdateMineral() - update_icon() + update_icon() \ No newline at end of file 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 795e535ebf..4b2c7f6f79 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/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..ba817d392a 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 + var/turf/T = get_turf(src) + if(T in radiation_repository.irradiated_turfs) + receive_pulse((radiation_repository.irradiated_turfs[T] * 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/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 1ebd8207e0..46f8033b24 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 @@ -39,6 +42,7 @@ anchored = 0 light_range = 4 + rad_power = 1 //So it gets added to the repository var/gasefficency = 0.25 var/base_icon_state = "darkmatter" @@ -95,6 +99,10 @@ 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. + radiation_repository.z_radiate(TS, DETONATION_RADS) + radiation_repository.z_radiate(TS, DETONATION_RADS) + 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) @@ -258,12 +264,15 @@ if(eye_shield < 1) 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) +*/ + rad_power = power * 1.5//Better close those shutters! power -= (power/DECAY_FACTOR)**3 //energy losses due to radiation @@ -377,8 +386,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() @@ -394,6 +403,7 @@ return + /obj/machinery/power/supermatter/GotoAirflowDest(n) //Supermatter not pushed around by airflow return 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/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/device.dmi b/icons/obj/device.dmi index 336f8dfe9ca6529e358c535cf800995662f80912..1198dc0314405b17131745daabc112e319559d67 100644 GIT binary patch literal 55614 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 z zxFi$0{)Bw#S-Mo_+n}O7t^PjU<@;i#NVU!C5_I}#oy6BVC%PNcO%*_~67Tyw#ok~b z92;j4SBwUceQ9iD;k_QBJ?LifbE2HcbicBcpt1h+i6U`z=cP3x1}8DTQnIsT=I5n6U%-^67_*Z^tZ)C zDANs8QbM^jLJrA35E;YPS+csijOlXQhin<*-2OfVk$yt$)ZLj6)TBBtHqKQhQNpGs z=Gd=tcd9-+j-KC2vpSAC1+7`>%q@XyPf(%(eX{4CUmG{#kmcV7(tOMDbq6_U**u)k z8Mq8zZsy`V%!>9m4!>;RP|f}A8Lx4*IM8~fFH~Q8M6JlAyjb3xI~URF<7lxN)d_vE z3B2b3%)7ZxWVF&eyS$$Y`w9bSqnbrqpO5 zZd<$~8$DHogPfiFZ(x@qo9gh3yAX4J=WU$PBWc|8`G53f)zzgu;S^#o)pB>3OlXeOG0Zks z6o+0EJPkl0&vBn`w2>=+2kQsk0qeKqY#iLeje;g~FMBXp$y11JnJX1ATyuf|?MyDO z3pPR|WB)4Qv8U^f+GhvEKJ0Mjes?p>AJKOEmbnJ8ri^wu9BR%-(BZYT{Al_UsA zP|LVZwk&3_L`M?kfnH)0dT#RRM7z?S-vh&;@(}nw${kGhgiAg9Y5oGcaFoog{;^v z|GlVY9>`1d=&d5^n)ja>ww_?x>}+N$EF=)2)8G4i#xhC23lg!56*YI9 zp^39~rIq&wdRNPFws)*^Bor|>+Di;P8^69spV;H>wHg7>uE`qy_RaApop+~2p*YiG zOdqDKuEI&FauBZZHt;e0*$PDj`6!Y?je((oV4SUxk592hA>h(s*koBqEbTgcx`2Rk zQFzq+93l;Z_3AFruHQ5a#+m=EXd8IVJ&N_stgYflK>YX7OPQ+uerpTQSDJM6 z$qO9POH!uA81@byPxVEs{dnmF_6lrOiZ`Zt65a|xxGb4&Xgx~w6l`}#1;-T-PAMh| z2S=m#7squFEdb$zk54kJUAxGt-&nSd9x97W=)5E+KrTqj8I@7LNTH|eQ@!$~#-7l! z52NC}J~UA))+T#EqzEgGE(^IQx2iPKa*%(}2f7`ePWC^j2xb4^We5CRDJR%Uv~}a) zlZsEXU<$ZrSfQ{}3}7gno&0JUO!tQa)LoxIEx->sO1}nPI z%7bunNQCVXBrVc@Fi)@G{$p_MOUh>du6b#fEh(UB@%?D^%D^yu={+#fjp~Bu=!ky; zTZ7HxbqrF8dqE*b%!jsEh@2NuDn#yOhFC+z6c8xY$^>>=%>hUr@V9FuY0|3~SD=KJ zjq}U(x>a~4FiyJMpoIp>KW&xA1f4OeKi+KAs|6_gs@R zz^8XFXAcNRwkv$9_aM%cTDP%Y>3u<3;>O1`+>+AIg|O-@F4^4prC0{|3d*CL|M|HJ z4RnNdLx&HnUgqdPCHDtV{+*(}5InO7-;EvDiLZP+YNA}~5ATtF16UkvejK`<@Hdoq zo~ULiHODstzq`446~@P(1?0B)P~c4lE^7itYtsY7KJSD4Q)4~K8X2lmzfd16!=0ff zY9MZ|Zu%Fgk-;Ip`L@|4mS(j8^o5`T?%uZ?p~>k1!7Iwi@xPz@5A{9eNz1O+4Lle- zBhzH03#a{;rJSAYKP=?~9b<`{Z!V`80<`0hfBW0)p9-)*qlyQp zxy2AhOBMR6o3FQ^N#F3<`17+uj9Y84I;$amu41(A{9@6Zh>d{+@LXY-q2@hKPU*nc z`-`;e8aS}y>+)?c=f5I)np!NWqT4x;`0}CPC!Pbk=u~HNJs90(Yf_F*fruN#(Fo8eylLc)buEJ`X`^OwY&dGkhT z0V8)Q*td3eO4VEB+!AbJsg)Cr<7gt_2WRFgqSahNi9b-Aj9u|1uBcBDyVn zcoK(jZ+X{rYuyvk=zaIjosTpj6Xj;s8%f8N5ZwH6BSaE^v{!zH05?;oQ#Dp^XWbDl zTJ07}FGyhsnfyu}`&-~XcztfUbNue=_|r zJHHaId44udTok(R6!2zXeKyq`^PG68_bsF{_pFCsd!)51hJJTOT`EA#qT+L&Kw-$D zy&x^$`7S-(YKvDU^=OB=Q}{g0t$Ejd%<72M*Kc0VH+d{o*x8DjgS_^57}UnTat{n&@H+6vZ*p=FA-v;KW?j@V7tg8pS-l1R zNBA~4RsxPfY1<#S$Y$eEjR&h7_2NY3ln^D4cs5qcPtBD6ZCRho%lWQ-`c=8_*+1^e z&ryYX>bsHaT|UeVQz$B|gBD#O5lYftm9T0R+?y@<_;I5tfvuHOnN9GtMt9+0Eej>g z^5(nO&HHD9K`84;0nikTlhE$mjh;@|!T0*}Iq1zyb2jqRW+BPLsnyF5gl9n&c=;`u z2yw4fdhlsY&FXp%`-=}bL|6Ab>oy;-^GTIefmo%9tQtLI$>WM>$&;|=#pzeeDcAa^ zCUYoaH4++#$HGJ)WU-%fhWu6Xi@?D=dAJg2T)1FwRtznx?#O^r(1>q;Qj9G9$lFP) zqS*|Y!9rn-+u6E=H&@l~=il&jF8KR*Rn$%KG8KhE8^Dnqk1DXpkGd%%WaM8quVZZK5 zJ(OP=d)iDadqA@hj0z~B1XYIQ&g`x`tLG2a#cYI-{T9wIf_62!7J{OoTcSL9<_>PU zPv~p)+^>CH43)il8k`5sQqIFI;_gVcjsO!yKE-ahOXQ!&J~(4NE&lXbLFmZ(xgKNA z7zuSAnC!@7)wCoHw<}>?`N>`K+-ol`Igp7Q~Ml5xSAzdEiSaH$&_)hizQ zXseO9@t$xxH(<|Yn=8mdKF~OD zJ&}eZ>jZ8u>0y$3J}+5tH}}J~(@Ysv+6yTyV6aMqu*t_$(z_W)nb*2uhf`Z3qZVLo z#qX?^bDp^H5r~ni@AWH3_}xrtktVhxsGiw@|2btBB7frR&{tgjqTu1lO`S^-8+%U;^=3W4iTb7m!47uls%}V4?jf>b_INt(~g%f z(x9E)uvhc!I+R79!U_wbpZWK7+2n9kjW*=aP0Mf#B%Q7#uD4W7MU7;S&bi7^(m$7b z5B~06;4boNdfH1iw0Ls22=VKD+ZAHlI{iRlN@UyfP5|T_-!k(e6Z&>RNo1q+n=;dvZ`&RO)kP8!&xw2tA=0t1*sVu zn17tjX{{F2)a6UCi`W(RBd2r%8peo&73urh$F8H#UmzjFwB^&>6VSX5)hQH=+^YG0IInvPW99DB;5j zq1mzV3Yp$<#tPzP+Kg)IV9+FFP64`>xQ1=GhvVFDItT?$Z_6W=tJ2F|WPO`p7F7P^ zv1Y(jh45)?^ee-((pT$Nt4(%;e?KW7n)Kj ztLr%BR-IqsR7*hhCq*}XV~8d#aCE39?ZBiwD1LL8RV9}p?o8&6dH5(!T@9R@^sbnM zXK1ij)_Umw>FMgjncm{K%9I)3XMmZApr5ks(9w zC5kj}!)z2TdD$!xX5NY-P4asdRc<&{ zI;EiB*?1*5JpN@%{sH$!b=O4$Av56q_{|vGqQ}7vN%9cH9x7Lizq?9+=tdaPI)B}c zF-F3~PY=yy@IYgH&anxg5PZ8x?)cvgyA(@?lKne;-=ikkKZ3(+EA=bnsVh1V<(|wC zmg(#pFMg}~U=Y+LBT=d3JEKiCtrInnjrCF+W)Q{1K78l8bo1|zp3xD~By3FV4ys4TCbM}18 z)&5VQruzkg{7&uM6NgV?vjw9Y5w@iLC&QQkr@cZxVKFg@ZKB}+L~G&>5hxUslBPl8 zqV_Hc(O=Ahk%&l5aQ&*Hr4>JTD6Mn12n6QP8kcBikuVrGj-PZH0u_NCt>?uK#2Jnk zR5oZ=C_aIRFbSaIhwiV@Ke$scGqpkP$_(2%NB3XFuP%(#yj9jSMD0;YO_4Lg*C?nS z>S-3P`7t(#`hgJXvu-_0y*IT>s7rpA*jHf2;QwGT%U=+lgocG7UPNN-dvPVyb(%ki z`+h<&G;4IKATIloIY%0QT2m=z66^)qp6h6?(@V=Z5NRX*jP26`IY-P2Q30F85P zCVITv`54@qo0~hW2#I1H3y6oVeU&A+kz?zoM8+pnpGDzw}N?PL` zE-5H5!Ypp3_sDv^XbXP!C-z;O@ZPi{s`9uGx0vAU04>-mA|W}xDK?KHh{Q!NO|tac zXJ6YFLfaDt2M4pBJ@e&$!Y*o!BBJb?2Po9p8z62Ur*{l5LYYTpZJ&0?W_Aua4wW3LQnf1N($u`qW3~=~x z14Lk!DL}N%$+zgEMyb5m=U}6cNF*{i-5Fi_a8(q*=XXox9E0d&6w4kwLHg^d7mH;L z000ij%33mPQ{6FWwVB}P{AF9Xmid+`;>AIN{rJ1P^VG9UtbX9zHLrXKLs@3+qteN5 zWjG@>2@XJLan7T))V@$h&E3YvM!Ki;Z<*<>lD<9zM?IglHPXU*uN_=Hc5+8?JIvNB ze(d#59oO2f+K>sT%)LC*m^1X$>z_(?zQpS0QK5pmUL1@u0u90wW^QN1PSMqc){AO( zWXgcQ&CDhjwr|*nTM&w2W@C3@_;1-csM$ zhTmb=i3fv5EXu1W^AW!p4_ba~ju|Q+D5WnFCv?V7jS<@XKU{{a|9WJ^?@(EcqmPV_ zU>o&aM?dSLgw_%-Ni6((!LtVd{D?BTVd1q(0QHEhqmB-4cI_%`M~9m}Fme3H@JU|Q zf|RmdeiS^(PBW9HPmh{q<3VQK^bE=wloctG-cDlO(sRiK9iLx?%-8AJRG4!FoZ7$M zfSEb@Uxkkb!q3#eqc{JM(dF+e{HHZpgq0k#oxCwiD_Ef%-NSeBdpYbraaB&`Z6^&6 z51$mHvzWC3T?drhQB`nH2;_T!|B;CsEnsyBgJg-Oh^MU;cdPT9j8KQkuiSV^lA_%) zx!J0NH?_my3yIqBiXKysKeL;y^Vt~D)d*IB$kaBNPR>=O_Bolu^iaF_t1lhp*5~5NG0S_p2oTA@uRQ zH85ugTgTfPi&Qcp8}zxuDINp?ZjpKrkH55?! zl#zF6x#7*xt?j9g?vi+P7cvYsHEchLT7OkThN$L3KGzx_?=-pHf0UR~VR*?^+Y41D zDe^NBkR{2%RbQ0-yNY>O&;N_YYEqgI7Xu2(Ua)KjB?3BVJJ%@c7S+gX$1_k-q!$j@ g7Q%EPl0Wwe_MZcqc*l?Js1)^WtS-UcSa>A=1N*y|&;S4c literal 51528 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üT&6RojtjKxL?!)u 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 Date: Mon, 22 May 2017 16:26:24 +0100 Subject: [PATCH 04/33] Tweaks readstorms as per Bay --- code/modules/events/radiation_storm.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index a8c9386fde..1debfb2fcf 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,8 +27,7 @@ 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) From 40ba4f5913292dc382540def4c63192075004748 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 16:29:04 +0100 Subject: [PATCH 05/33] Fixes a radiation oversight as per Bay --- code/modules/events/radiation_storm.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 1debfb2fcf..4596e9ef35 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -37,7 +37,8 @@ var/area/A = get_area(C) if(!A) continue - + if(A.flags & AREA_RAD_SHIELDED) + continue if(istype(C,/mob/living/carbon/human)) var/mob/living/carbon/human/H = C if(prob(5)) From e5ebd3a56d781def2f789d4c966249805a4140cf Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 16:33:37 +0100 Subject: [PATCH 06/33] Fixes a radiation oversight --- code/modules/events/radiation_storm.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 4596e9ef35..bf2dec5e4e 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -37,7 +37,7 @@ var/area/A = get_area(C) if(!A) continue - if(A.flags & AREA_RAD_SHIELDED) + if(A.flags & RAD_SHIELDED) continue if(istype(C,/mob/living/carbon/human)) var/mob/living/carbon/human/H = C From 4dd0bb9bbebc989c63cba8068c8fd4c9a1d043ef Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 16:46:25 +0100 Subject: [PATCH 07/33] Fixes SM stuff --- code/modules/supermatter/supermatter.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 46f8033b24..9db6eca0ad 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -100,9 +100,10 @@ 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. - radiation_repository.z_radiate(TS, DETONATION_RADS) - radiation_repository.z_radiate(TS, DETONATION_RADS) - + 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)) @@ -111,7 +112,7 @@ var/mob/living/carbon/human/H = mob H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) spawn(pull_time) - explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) + explosion(TS, explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) qdel(src) return @@ -389,7 +390,6 @@ var/rads = 500 radiation_repository.radiate(src, rads) - /obj/machinery/power/supermatter/proc/supermatter_pull() //following is adapted from singulo code if(defer_powernet_rebuild != 2) From 341be4ccb8f0a71e2cc05e8e1fb3d6c12e8a35cb Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 16:48:52 +0100 Subject: [PATCH 08/33] Max health thing --- code/game/objects/items/devices/scanners.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 6399d0ce4a..3d48a40374 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -69,7 +69,7 @@ REAGENT SCANNER user.show_message("Analyzing Results for [M]:") user.show_message("Overall Status: dead") else - user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round(M.health*100/M.maxHealth)]% healthy"]") + user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round(M.health*100/M.getMaxHealth())]% healthy"]") user.show_message(" Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message(" Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) From b1250a4391ba446d68e8d61af3836796fdccff55 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Mon, 22 May 2017 17:17:28 +0100 Subject: [PATCH 09/33] Door stuff --- code/game/objects/structures/simple_doors.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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") From cfa6387f1549067493399315780d3a12769bba1a Mon Sep 17 00:00:00 2001 From: MagmaRam Date: Wed, 24 May 2017 15:45:48 -0500 Subject: [PATCH 10/33] Reduces autoheal cutoff on all external wounds to 10. --- code/modules/organs/wound.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 **/ From 9d2e7fe1ae4ab69a529ac956fc0afedc3879badc Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 24 May 2017 17:14:03 -0400 Subject: [PATCH 11/33] Prevent Gravity Failure event from disabling gravity on planet z levels. --- code/modules/events/gravity.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/events/gravity.dm b/code/modules/events/gravity.dm index 0719c9bba1..f5fc8f0b5a 100644 --- a/code/modules/events/gravity.dm +++ b/code/modules/events/gravity.dm @@ -1,8 +1,14 @@ /datum/event/gravity announceWhen = 5 + var/list/zLevels /datum/event/gravity/setup() endWhen = rand(15, 60) + // Setup which levels we will disrupt gravit on. + zLevels = using_map.station_levels.Copy() + if (planet_controller) + for(var/datum/planet/P in planet_controller.planets) + zLevels -= P.expected_z_levels /datum/event/gravity/announce() command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system \ @@ -11,7 +17,7 @@ /datum/event/gravity/start() gravity_is_on = 0 for(var/area/A in world) - if(A.z in using_map.station_levels) + if(A.z in zLevels) A.gravitychange(gravity_is_on, A) /datum/event/gravity/end() @@ -19,7 +25,7 @@ gravity_is_on = 1 for(var/area/A in world) - if(A.z in using_map.station_levels) + if(A.z in zLevels) A.gravitychange(gravity_is_on, A) command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.", "Gravity Restored") From e3bc79b12c7462ac2efd9bdacf43a5236f3fd5b0 Mon Sep 17 00:00:00 2001 From: MagmaRam Date: Wed, 24 May 2017 16:44:57 -0500 Subject: [PATCH 12/33] Changelog --- html/changelogs/MagmaRam - Health Regen.yml | 36 +++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 html/changelogs/MagmaRam - Health Regen.yml 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." From db95f36e3bd36e850d206d8616b682d1064baaa7 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 22 May 2017 14:19:14 -0400 Subject: [PATCH 13/33] Fixes Runtime in camera.dm,214: pick() from empty list proc name: attackby (/obj/machinery/camera/attackby) --- code/game/machinery/camera/camera.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index b105222084..85d97a2b30 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -206,7 +206,7 @@ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if (W.force >= src.toughness) user.do_attack_animation(src) - visible_message("[src] has been [pick(W.attack_verb)] with [W] by [user]!") + visible_message("[src] has been [W.attack_verb.len? pick(W.attack_verb) : "attacked"] with [W] by [user]!") if (istype(W, /obj/item)) //is it even possible to get into attackby() with non-items? var/obj/item/I = W if (I.hitsound) From 1b0474d57a50a7cefada05ca45d7c6f253506b3d Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 22 May 2017 14:19:38 -0400 Subject: [PATCH 14/33] Fixes Runtime in preferences_setup.dm,230: Cannot read null.title proc name: dress preview mob (/datum/preferences/proc/dress_preview_mob) --- code/modules/mob/new_player/preferences_setup.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 4cf3499b8a..5fa306b7b9 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -224,12 +224,14 @@ var/datum/gear/G = gear_datums[thing] if(G) var/permitted = 0 - if(G.allowed_roles) + if(!G.allowed_roles) + permitted = 1 + else if(!previewJob) + permitted = 0 + else for(var/job_name in G.allowed_roles) if(previewJob.title == job_name) permitted = 1 - else - permitted = 1 if(G.whitelisted && (G.whitelisted != mannequin.species.name)) permitted = 0 From c53899bea6626704516609c2464dd0b79d1398bc Mon Sep 17 00:00:00 2001 From: Leshana Date: Tue, 23 May 2017 21:03:39 -0400 Subject: [PATCH 15/33] Fixes Runtime in lattice.dm,41: undefined proc or verb /turf/simulated/floor/airless/update(). --- code/game/objects/structures/lattice.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 96291ecd27..ec4652901d 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -37,7 +37,7 @@ if(istype(loc, /turf/simulated/open)) var/turf/simulated/open/O = loc spawn(1) - if(O) // If we built a new floor with the lattice, the open turf won't exist anymore. + if(istype(O)) // If we built a new floor with the lattice, the open turf won't exist anymore. O.update() // This lattice may be supporting things on top of it. If it's being deleted, they need to fall down. ..() From 34c73dab6963c91086f30a1bc1ad6a79038e766e Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 24 May 2017 16:37:06 -0400 Subject: [PATCH 16/33] Optimization/Rewrite of Radiation Controller * The performance of the radiation controller as-is was not fast enough for inclusion in production servers, but it has some nice featuers, so rewrote it to be more performant. * Instead of storing the radiation strength for every turf, we only store the sources of radiation, and calculate the strength only for mobs who might be in range. * Old method was ray-tracing to every turf in range whether anything was there to be irradiated or not. Could be hundreds of turfs. New method only lazily calcualtes strength at a turf if we actually need to know it. Often times this is zero turfs if nobody is standing in engineering. * Removed the automatic processing of objects with "rad_power" set. Objects are responsible for calling the repository to create/update their radiation sources. Saves some extra overhead that in practice was redundant with other process controllers. * Also tweaked to be more respectful of qdel'd objects and added some comments. --- code/controllers/Processes/radiation.dm | 68 ++++---- code/datums/repositories/radiation.dm | 178 +++++++++++--------- code/game/atoms_movable.dm | 3 - code/game/machinery/doors/airlock.dm | 9 +- code/game/machinery/doors/blast_door.dm | 3 +- code/game/machinery/doors/door.dm | 3 +- code/game/objects/items/devices/geiger.dm | 2 +- code/game/objects/items/devices/scanners.dm | 6 +- code/game/turfs/simulated/wall_attacks.dm | 2 +- code/game/turfs/simulated/wall_icon.dm | 2 +- code/game/turfs/turf.dm | 11 +- code/modules/events/event_container.dm | 2 +- code/modules/events/solar_storm.dm | 17 +- code/modules/mining/mine_turfs.dm | 2 +- code/modules/power/singularity/collector.dm | 8 +- code/modules/supermatter/supermatter.dm | 6 +- 16 files changed, 172 insertions(+), 150 deletions(-) diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm index 8ebd3a71a8..e64f71ebb7 100644 --- a/code/controllers/Processes/radiation.dm +++ b/code/controllers/Processes/radiation.dm @@ -7,37 +7,43 @@ linked = radiation_repository /datum/controller/process/radiation/doWork() -// set background = 1 - for(var/turf/T in linked.irradiated_turfs) - if(!T) - linked.irradiated_turfs.Remove(T) + // Step 1 - Sources Decay + var/list/sources = linked.sources + for(var/thing in sources) + if(deleted(thing)) + sources.Remove(thing) continue - linked.irradiated_turfs[T] -= config.radiation_decay_rate - if(linked.irradiated_turfs[T] <= config.radiation_lower_limit) - linked.irradiated_turfs.Remove(T) - SCHECK - for(var/mob/living/L in linked.irradiated_mobs) - if(!L) - linked.irradiated_mobs.Remove(L) - continue - if(get_turf(L) in linked.irradiated_turfs) - L.rad_act(linked.irradiated_turfs[get_turf(L)]) - if(!L.radiation) - linked.irradiated_mobs.Remove(L) - SCHECK - for(var/thing in linked.sources) - if(!thing) - linked.sources.Remove(thing) - continue - var/atom/emitter = thing - linked.radiate(emitter, emitter.rad_power) - to_process.Cut() - SCHECK - for(var/thing in linked.resistance_cache) - if(!thing) - linked.resistance_cache.Remove(thing) + 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 + 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) != linked.resistance_cache[T]) - T.calc_rad_resistance() - SCHECK \ No newline at end of file + 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 + 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/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index bdf2b18322..457e423b4e 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -1,114 +1,132 @@ -//#define RADDBG - -var/repository/radiation/radiation_repository = new() - -var/list/to_process = list() +var/global/repository/radiation/radiation_repository = new() /repository/radiation - var/list/sources = list() //All the radiation sources we know about - var/list/irradiated_turfs = list() - var/list/irradiated_mobs = list() - var/list/resistance_cache = list() + 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. -/repository/radiation/proc/report_rads(var/turf/T as turf) - return irradiated_turfs[T] +// 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 + . = ..() + +/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) + +// 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) + return S - var/range = min(round(sqrt(power / config.radiation_lower_limit)), 31) - var/turf/epicentre = get_turf(source) - to_process = list() - - range = min(epicentre.x, world.maxx - epicentre.x, epicentre.y, world.maxy - epicentre.y, range) - - to_process = trange(range, epicentre) - to_process[epicentre] = power - - for(var/turf/spot in to_process) - var/turf/origin = get_turf(epicentre) - var/working = power - while(origin != spot) - origin = get_step_towards(origin, spot) //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.rad_resistance * config.radiation_resistance_multiplier)), 0) - if(!working) - break - if(!to_process[origin]) - to_process[origin] = working - - else - to_process[origin] = max(to_process[origin], working) - - for(var/turf/spot in to_process) - irradiated_turfs[spot] = max(((to_process[spot]) * (1 / (get_dist(epicentre, spot) ** 2))), irradiated_turfs[spot]) //Butchered version of the inverse square law. Works for this purpose - #ifdef RADDBG - var/x = Clamp( irradiated_turfs[spot], 0, 255) - spot.color = rgb(5,x,5) - #endif - -/repository/radiation/proc/flat_radiate(source, power, range, var/respect_maint=0) //Sets the radiation in a range to a constant value. +// 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/turf/epicentre = get_turf(source) - range = min(epicentre.x, world.maxx - epicentre.x, epicentre.y, world.maxy - epicentre.y, range) - if(!respect_maint) - for(var/turf/T in trange(range, epicentre)) - irradiated_turfs[T] = max(power, irradiated_turfs[T]) - else - for(var/turf/T in trange(range, epicentre)) - var/area/A = T.loc - if(A.flags & RAD_SHIELDED) - continue - irradiated_turfs[T] = max(power, irradiated_turfs[T]) + 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) + return S -/repository/radiation/proc/z_radiate(var/atom/source, power, var/respect_maint=0) //Irradiates a full Z-level. Hacky way of doing it, but not too expensive. +// 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() - rad_resistance = 0 + cached_rad_resistance = 0 for(var/obj/O in src.contents) if(O.rad_resistance) //Override - rad_resistance += O.rad_resistance + cached_rad_resistance += O.rad_resistance - else if(O.density) //So doors don't get counted + else if(O.density) //So open doors don't get counted var/material/M = O.get_material() if(!M) continue - rad_resistance += M.weight + 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) - rad_resistance = (density ? material.weight : 0) + cached_rad_resistance = (density ? material.weight : 0) -/atom - var/rad_power = 0 - var/rad_resistance = 0 +/obj + var/rad_resistance = 0 // Allow overriding rad resistance -/atom/Destroy() - if(rad_power) - radiation_repository.sources.Remove(src) - . = ..() - -/atom/proc/update_radiation() //For VV'ing something to make it radioactive at runtime - if((rad_power) && (!(src in radiation_repository.sources))) - radiation_repository.sources.Add(src) - else if((!rad_power) && (src in radiation_repository.sources)) - radiation_repository.sources.Remove(src) - -/atom/proc/rad_act(var/severity) //If people expand the system, this may be useful. Here as a placeholder until then +// 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/obj/I in src) + for(var/atom/I in src) I.rad_act(severity) - - -//#undef RADDBG \ No newline at end of file diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 82061ddb6a..fe9f99b032 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -53,9 +53,6 @@ pulledby = null /atom/movable/proc/initialize() - if(rad_power) - radiation_repository.sources.Add(src) - if(!isnull(gcDestroyed)) crash_with("GC: -- [type] had initialize() called after qdel() --") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c1ec9287b0..5d8d068d49 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -263,7 +263,7 @@ icon = 'icons/obj/doors/Dooruranium.dmi' mineral = "uranium" var/last_event = 0 - rad_power = 7.5 + var/rad_power = 7.5 /obj/machinery/door/airlock/process() // Deliberate no call to parent. @@ -278,6 +278,13 @@ ..() +/obj/machinery/door/airlock/uranium/process() + if(world.time > last_event+20) + if(prob(50)) + radiation_repository.radiate(src, rad_power) + last_event = world.time + ..() + /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 f8e1d1cbb5..41680d3de7 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -53,8 +53,7 @@ icon_state = icon_state_closed else icon_state = icon_state_open - var/turf/T = get_turf(src) - T.calc_rad_resistance() + 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 898683192f..cf7f96d52d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -362,8 +362,7 @@ icon_state = "door1" else icon_state = "door0" - var/turf/T = get_turf(src) - T.calc_rad_resistance() + radiation_repository.resistance_cache.Remove(get_turf(src)) return diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index acd85b730c..62cb9d9862 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -22,7 +22,7 @@ /obj/item/device/geiger/process() if(!scanning) return - radiation_count = radiation_repository.report_rads(get_turf(src)) + radiation_count = radiation_repository.get_rads_at_turf(get_turf(src)) update_icon() /obj/item/device/geiger/examine(mob/user) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3d48a40374..cfd0693b15 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -69,7 +69,7 @@ REAGENT SCANNER user.show_message("Analyzing Results for [M]:") user.show_message("Overall Status: dead") else - user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round(M.health*100/M.getMaxHealth())]% healthy"]") + user.show_message("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]") user.show_message(" Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message(" Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) @@ -100,9 +100,7 @@ REAGENT SCANNER 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 Level: [M.radiation]") - else - user.show_message("No radiation detected.") + 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/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index b236e4dc90..890574d664 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -7,7 +7,7 @@ if(can_open == WALL_OPENING) return - calc_rad_resistance() + radiation_repository.resistance_cache.Remove(src) if(density) can_open = WALL_OPENING diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 757639e1bb..eab99bfba7 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -26,7 +26,7 @@ else if(material.opacity < 0.5 && opacity) set_light(0) - calc_rad_resistance() + radiation_repository.resistance_cache.Remove(src) update_connections(1) update_icon() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 87b4b2b648..3f2e0064f2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -140,12 +140,6 @@ var/const/enterloopsanity = 100 if(ismob(A)) var/mob/M = A - var/mob/living/L = A - if(istype(L)) - if(!(L in radiation_repository.irradiated_mobs)) - if(src in radiation_repository.irradiated_turfs) - radiation_repository.irradiated_mobs.Add(L) - L.handle_footstep(src) if(!M.lastarea) M.lastarea = get_area(M.loc) if(M.lastarea.has_gravity == 0) @@ -153,6 +147,9 @@ var/const/enterloopsanity = 100 else if(!is_space()) M.inertia_dir = 0 M.make_floating(0) + if(isliving(M)) + var/mob/living/L = M + L.handle_footstep(src) ..() var/objects = 0 if(A && (A.flags & PROXMOVE)) @@ -258,4 +255,4 @@ var/const/enterloopsanity = 100 step(AM, turn(AM.last_move, 180)) if(isliving(AM)) var/mob/living/M = AM - M.turf_collision(src, speed) \ No newline at end of file + M.turf_collision(src, speed) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 804d13404d..37a576a442 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -186,4 +186,4 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT #undef ASSIGNMENT_JANITOR #undef ASSIGNMENT_MEDICAL #undef ASSIGNMENT_SCIENTIST -#undef ASSIGNMENT_SECURITY \ No newline at end of file +#undef ASSIGNMENT_SECURITY diff --git a/code/modules/events/solar_storm.dm b/code/modules/events/solar_storm.dm index 4ebfc71d55..afaa01ed95 100644 --- a/code/modules/events/solar_storm.dm +++ b/code/modules/events/solar_storm.dm @@ -27,14 +27,17 @@ radiate() /datum/event/solar_storm/proc/radiate() - var/radiation_level = rand(15, 30) - for(var/area/A in all_areas) - if(!(A.z in using_map.player_levels)) + // 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) continue - for(var/turf/T in A) - if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) - continue - radiation_repository.irradiated_turfs[T] = radiation_level + + if(!istype(T.loc,/area/space) && !istype(T,/turf/space)) //Make sure you're in a space area or on a space turf + continue + + //Todo: Apply some burn damage from the heat of the sun. Until then, enjoy some moderate radiation. + 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/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 68363fb27f..a6a857c43b 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -559,4 +559,4 @@ var/list/mining_overlay_cache = list() if(mineral_name && (mineral_name in ore_data)) mineral = ore_data[mineral_name] UpdateMineral() - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index ba817d392a..47a9c08923 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -31,10 +31,10 @@ var/global/list/rad_collectors = list() last_power_new = 0 - var/turf/T = get_turf(src) - if(T in radiation_repository.irradiated_turfs) - receive_pulse((radiation_repository.irradiated_turfs[T] * 5)) //Maths is hard - + 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) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 9db6eca0ad..046c315ec9 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -42,7 +42,6 @@ anchored = 0 light_range = 4 - rad_power = 1 //So it gets added to the repository var/gasefficency = 0.25 var/base_icon_state = "darkmatter" @@ -112,7 +111,7 @@ var/mob/living/carbon/human/H = mob H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) spawn(pull_time) - explosion(TS, explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) + explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) qdel(src) return @@ -273,7 +272,7 @@ var/rads = (power / 10) * ( 1 / (radius**2) ) l.apply_effect(rads, IRRADIATE) */ - rad_power = power * 1.5//Better close those shutters! + radiation_repository.radiate(src, power * 1.5) //Better close those shutters! power -= (power/DECAY_FACTOR)**3 //energy losses due to radiation @@ -403,7 +402,6 @@ return - /obj/machinery/power/supermatter/GotoAirflowDest(n) //Supermatter not pushed around by airflow return From 8579adcc53d28aaa063aed1b3c75c243f66e4784 Mon Sep 17 00:00:00 2001 From: Spades Date: Fri, 26 May 2017 19:32:23 -0400 Subject: [PATCH 17/33] Naming convention of ammo is now consistent s = Speedloaders. (Functionally the same as clips, but they're not _really_ the same thing, just in case we change these later.) c = Clips. (Can also be used to fill other magazines.) m = Magazine. (Holds ammo rounds.) a = Ammo. (Individual rounds of ammo.) --- code/datums/autolathe/arms.dm | 50 ++++++------ code/datums/supplypacks/munitions.dm | 4 +- code/datums/uplink/ammunition.dm | 32 ++++---- code/game/machinery/autolathe.dm | 4 +- .../items/weapons/storage/uplink_kits.dm | 2 +- code/game/objects/random/random.dm | 6 +- .../crates_lockers/closets/secure/security.dm | 6 +- .../crates_lockers/closets/syndicate.dm | 10 +-- code/modules/admin/verbs/debug.dm | 4 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/projectiles/ammunition/boxes.dm | 80 +++++++++---------- .../projectiles/guns/projectile/automatic.dm | 30 +++---- .../projectiles/guns/projectile/pistol.dm | 22 ++--- .../projectiles/guns/projectile/sniper.dm | 4 +- code/modules/random_map/drop/drop_types.dm | 10 +-- 15 files changed, 133 insertions(+), 133 deletions(-) diff --git a/code/datums/autolathe/arms.dm b/code/datums/autolathe/arms.dm index efe5791b11..276819d3ad 100644 --- a/code/datums/autolathe/arms.dm +++ b/code/datums/autolathe/arms.dm @@ -49,34 +49,34 @@ /////// .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 @@ -129,34 +129,34 @@ /////// 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 @@ -188,24 +188,24 @@ /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 @@ -221,24 +221,24 @@ /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 @@ -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 diff --git a/code/datums/supplypacks/munitions.dm b/code/datums/supplypacks/munitions.dm index e2df9609ad..c9817e2274 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 ) @@ -156,7 +156,7 @@ contains = list( /obj/item/ammo_magazine/mc9mmt, /obj/item/ammo_magazine/mc9mmt/rubber, - /obj/item/ammo_magazine/a556 + /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..4238884598 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -8,7 +8,7 @@ /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)" @@ -16,28 +16,28 @@ /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/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 2953f0de87..50d6988e35 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -144,7 +144,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 @@ -262,7 +262,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/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 75c0d5830f..183065d3ba 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -285,9 +285,9 @@ 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/m45, + prob(4);/obj/item/ammo_magazine/m45/rubber, + prob(4);/obj/item/ammo_magazine/m45/flash, prob(2);/obj/item/ammo_magazine/mc9mmt, prob(6);/obj/item/ammo_magazine/mc9mmt/rubber) 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 dc80d17827..a80ceb3580 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -217,7 +217,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) + new /obj/item/ammo_magazine/m45/rubber(src) 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) @@ -277,8 +277,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/c45m/rubber(src) - new /obj/item/ammo_magazine/c45m/rubber(src) + new /obj/item/ammo_magazine/m45/rubber(src) + new /obj/item/ammo_magazine/m45/rubber(src) new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/colt/detective(src) 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/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 82206fdc30..bd6d1ea4d0 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/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/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 8a259b6342..3ee2393bbf 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -1,6 +1,6 @@ ///////// .357 ///////// -/obj/item/ammo_magazine/a357 +/obj/item/ammo_magazine/s357 name = "speedloader (.357)" desc = "A speedloader for .357 revolvers." icon_state = "38" @@ -12,7 +12,7 @@ ///////// .38 ///////// -/obj/item/ammo_magazine/c38 +/obj/item/ammo_magazine/s38 name = "speedloader (.38)" desc = "A speedloader for .38 revolvers." icon_state = "38" @@ -22,17 +22,17 @@ max_ammo = 6 multiple_sprites = 1 -/obj/item/ammo_magazine/c38/rubber +/obj/item/ammo_magazine/s38/rubber name = "speedloader (.38 rubber)" ammo_type = /obj/item/ammo_casing/c38r -/obj/item/ammo_magazine/c38/emp +/obj/item/ammo_magazine/s38/emp name = "ammunition box (.38 haywire)" ammo_type = /obj/item/ammo_casing/c38/emp ///////// .45 ///////// -/obj/item/ammo_magazine/c45m +/obj/item/ammo_magazine/m45 name = "pistol magazine (.45)" icon_state = "45" mag_type = MAGAZINE @@ -42,30 +42,30 @@ max_ammo = 7 multiple_sprites = 1 -/obj/item/ammo_magazine/c45m/empty +/obj/item/ammo_magazine/m45/empty initial_ammo = 0 -/obj/item/ammo_magazine/c45m/rubber +/obj/item/ammo_magazine/m45/rubber name = "magazine (.45 rubber)" ammo_type = /obj/item/ammo_casing/c45r -/obj/item/ammo_magazine/c45m/practice +/obj/item/ammo_magazine/m45/practice name = "magazine (.45 practice)" ammo_type = /obj/item/ammo_casing/c45p -/obj/item/ammo_magazine/c45m/flash +/obj/item/ammo_magazine/m45/flash name = "magazine (.45 flash)" ammo_type = /obj/item/ammo_casing/c45f -/obj/item/ammo_magazine/c45m/ap +/obj/item/ammo_magazine/m45/ap name = "magazine (.45 AP)" ammo_type = /obj/item/ammo_casing/c45ap -/obj/item/ammo_magazine/box/emp/c45 +/obj/item/ammo_magazine/box/emp/b45 name = "ammunition box (.45 haywire)" ammo_type = /obj/item/ammo_casing/c45/emp -/obj/item/ammo_magazine/c45uzi +/obj/item/ammo_magazine/m45uzi name = "stick magazine (.45)" icon_state = "uzi45" mag_type = MAGAZINE @@ -75,10 +75,10 @@ max_ammo = 16 multiple_sprites = 1 -/obj/item/ammo_magazine/c45uzi/empty +/obj/item/ammo_magazine/m45uzi/empty initial_ammo = 0 -/obj/item/ammo_magazine/tommymag +/obj/item/ammo_magazine/m45tommy name = "tommygun magazine (.45)" icon_state = "tommy-mag" mag_type = MAGAZINE @@ -87,14 +87,14 @@ caliber = ".45" max_ammo = 20 -/obj/item/ammo_magazine/tommymag/ap +/obj/item/ammo_magazine/m45tommy/ap name = "tommygun magazine (.45 AP)" ammo_type = /obj/item/ammo_casing/c45ap -/obj/item/ammo_magazine/tommymag/empty +/obj/item/ammo_magazine/m45tommy/empty initial_ammo = 0 -/obj/item/ammo_magazine/tommydrum +/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! @@ -104,11 +104,11 @@ caliber = ".45" max_ammo = 50 -/obj/item/ammo_magazine/tommydrum/ap +/obj/item/ammo_magazine/m45tommydrum/ap name = "tommygun drum magazine (.45 AP)" ammo_type = /obj/item/ammo_casing/c45ap -/obj/item/ammo_magazine/tommydrum/empty +/obj/item/ammo_magazine/m45tommydrum/empty initial_ammo = 0 /obj/item/ammo_magazine/clip/c45 @@ -256,7 +256,7 @@ */ ///////// 10mm ///////// -/obj/item/ammo_magazine/a10mm +/obj/item/ammo_magazine/m10mm name = "magazine (10mm)" icon_state = "10mm" origin_tech = list(TECH_COMBAT = 2) @@ -267,7 +267,7 @@ max_ammo = 20 multiple_sprites = 1 -/obj/item/ammo_magazine/a10mm/empty +/obj/item/ammo_magazine/m10mm/empty initial_ammo = 0 /obj/item/ammo_magazine/clip/a10mm @@ -280,13 +280,13 @@ max_ammo = 9 multiple_sprites = 1 -/obj/item/ammo_magazine/box/emp/a10mm +/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/c556 +/obj/item/ammo_magazine/m556 name = "magazine (5.56mm)" icon_state = "c5.56" origin_tech = list(TECH_COMBAT = 2) @@ -297,30 +297,30 @@ max_ammo = 20 multiple_sprites = 1 -/obj/item/ammo_magazine/c556/ext +/obj/item/ammo_magazine/m556/ext name = "extended magazine (5.56mm)" matter = list(DEFAULT_WALL_MATERIAL = 2700) max_ammo = 30 -/obj/item/ammo_magazine/c556/empty +/obj/item/ammo_magazine/m556/empty initial_ammo = 0 -/obj/item/ammo_magazine/c556/ext/empty +/obj/item/ammo_magazine/m556/ext/empty initial_ammo = 0 -/obj/item/ammo_magazine/c556/practice +/obj/item/ammo_magazine/m556/practice name = "magazine (5.56mm practice)" ammo_type = /obj/item/ammo_casing/a556p -/obj/item/ammo_magazine/c556/practice/ext +/obj/item/ammo_magazine/m556/practice/ext name = "extended magazine (5.56mm practice)" max_ammo = 30 -/obj/item/ammo_magazine/c556/ap +/obj/item/ammo_magazine/m556/ap name = "magazine (5.56mm armor-piercing)" ammo_type = /obj/item/ammo_casing/a556/ap -/obj/item/ammo_magazine/c556/ap/ext +/obj/item/ammo_magazine/m556/ap/ext name = "extended magazine (5.56mm armor-piercing)" max_ammo = 30 @@ -341,7 +341,7 @@ name = "rifle clip (5.56mm practice)" ammo_type = /obj/item/ammo_casing/a556 -/obj/item/ammo_magazine/a556 +/obj/item/ammo_magazine/m556saw name = "magazine box (5.56mm)" icon_state = "a556" origin_tech = list(TECH_COMBAT = 2) @@ -353,16 +353,16 @@ max_ammo = 50 multiple_sprites = 1 -/obj/item/ammo_magazine/a556/ap +/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/a556/empty +/obj/item/ammo_magazine/m556saw/empty initial_ammo = 0 ///////// .50 AE ///////// -/obj/item/ammo_magazine/a50 +/obj/item/ammo_magazine/m50 name = "magazine (.50 AE)" icon_state = "50ae" origin_tech = list(TECH_COMBAT = 2) @@ -373,7 +373,7 @@ max_ammo = 7 multiple_sprites = 1 -/obj/item/ammo_magazine/a50/empty +/obj/item/ammo_magazine/m50/empty initial_ammo = 0 /obj/item/ammo_magazine/clip/a50 @@ -388,7 +388,7 @@ ///////// 7.62mm ///////// -/obj/item/ammo_magazine/c762 +/obj/item/ammo_magazine/m762 name = "magazine (7.62mm)" icon_state = "c7.62" mag_type = MAGAZINE @@ -398,11 +398,11 @@ max_ammo = 10 multiple_sprites = 1 -/obj/item/ammo_magazine/c762/ap +/obj/item/ammo_magazine/m762/ap name = "magazine (7.62mm armor-piercing)" ammo_type = /obj/item/ammo_casing/a762/ap -/obj/item/ammo_magazine/c762/empty +/obj/item/ammo_magazine/m762/empty initial_ammo = 0 /obj/item/ammo_magazine/s762 // 's' for small! @@ -468,7 +468,7 @@ ///////// .75 Gyrojet ///////// -/obj/item/ammo_magazine/a75 +/obj/item/ammo_magazine/m75 name = "ammo magazine (.75 Gyrojet)" icon_state = "75" mag_type = MAGAZINE @@ -477,7 +477,7 @@ multiple_sprites = 1 max_ammo = 4 -/obj/item/ammo_magazine/a75/empty +/obj/item/ammo_magazine/m75/empty initial_ammo = 0 ///////// Misc. ///////// diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index bf30c19991..7699b8483c 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -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' @@ -60,8 +60,8 @@ 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 @@ -115,8 +115,8 @@ 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' @@ -187,8 +187,8 @@ 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 @@ -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), @@ -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), @@ -354,8 +354,8 @@ 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/m762 + allowed_magazines = list(/obj/item/ammo_magazine/m762) one_handed_penalty = 4 diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index fd46803c68..d4f9d265f0 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" @@ -123,8 +123,8 @@ caliber = ".50" 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() ..() @@ -173,8 +173,8 @@ 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' diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index be280c2f64..8afda4b63b 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -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..0f331ccbfd 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -62,10 +62,10 @@ 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 @@ -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, From 1e35ef880954bfa1fea9737a425c50707554258f Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 27 May 2017 03:03:45 -0400 Subject: [PATCH 18/33] Goggles are airtight Adds some 'plain' goggles that are airtight, and as such protect your eyes from things like phoron. Also allows eyewear to protect you from phoron if it's airtight (and hiding your eyes). Added airtight flag to science goggles, welding goggles, and 'plain' goggles I added. Weldning goggles only protect your eyes when down, since it removes the covers eyes flag when up. --- code/ZAS/Phoron.dm | 30 +++++++++++++---------- code/modules/clothing/glasses/glasses.dm | 10 ++++++++ icons/mob/eyes.dmi | Bin 8985 -> 8944 bytes icons/mob/species/seromi/eyes.dmi | Bin 6148 -> 6400 bytes icons/mob/species/vox/eyes.dmi | Bin 3407 -> 3819 bytes icons/obj/clothing/glasses.dmi | Bin 9511 -> 9446 bytes 6 files changed, 27 insertions(+), 13 deletions(-) diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index 4a4c29dcfb..acee6a8b65 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -103,19 +103,23 @@ obj/var/phoronproof = 0 //Burn eyes if exposed. if(vsc.plc.EYE_BURNS && (species.breath_type != "phoron")) - if(!head) - if(!wear_mask) - burn_eyes() - else - if(!(wear_mask.body_parts_covered & EYES)) - burn_eyes() - else - if(!(head.body_parts_covered & EYES)) - if(!wear_mask) - burn_eyes() - else - if(!(wear_mask.body_parts_covered & EYES)) - burn_eyes() + var/burn_eyes = 1 + + //Check for protective glasses + if(glasses && (glasses.body_parts_covered & EYES) && (glasses.item_flags & AIRTIGHT)) + burn_eyes = 0 + + //Check for protective maskwear + if(burn_eyes && wear_mask && (wear_mask.body_parts_covered & EYES) && (wear_mask.item_flags & AIRTIGHT)) + burn_eyes = 0 + + //Check for protective helmets + if(burn_eyes && head && (head.body_parts_covered & EYES) && (head.item_flags & AIRTIGHT)) + burn_eyes = 0 + + //If we still need to, burn their eyes + if(burn_eyes) + burn_eyes() //Genetic Corruption if(vsc.plc.GENETIC_CORRUPTION && (species.breath_type != "phoron")) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 4fb748f73a..65d6697df4 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -89,11 +89,20 @@ BLIND // can't see anything item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") toggleable = 1 action_button_name = "Toggle Goggles" + item_flags = AIRTIGHT /obj/item/clothing/glasses/science/New() ..() overlay = global_hud.science +/obj/item/clothing/glasses/goggles + name = "Goggles" + desc = "Just some plain old goggles." + icon_state = "plaingoggles" + item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") + item_flags = AIRTIGHT + body_parts_covered = EYES + /obj/item/clothing/glasses/night name = "Night Vision Goggles" desc = "You can totally see in the dark now!" @@ -200,6 +209,7 @@ BLIND // can't see anything item_state_slots = list(slot_r_hand_str = "welding-g", slot_l_hand_str = "welding-g") action_button_name = "Flip Welding Goggles" matter = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 1000) + item_flags = AIRTIGHT var/up = 0 /obj/item/clothing/glasses/welding/attack_self() diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 1f4bd4a68f2b716e086c1b4a50b7a6d3b026d85e..763ce789906ca72500466ee84ba041e9e64a78e4 100644 GIT binary patch literal 8944 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 Awg3PC diff --git a/icons/mob/species/vox/eyes.dmi b/icons/mob/species/vox/eyes.dmi index 6e15b3e58c4a140c074d08679cd577e8ab50cc37..c81f6217a2cc81a01cf51b8af499244a0e192285 100644 GIT binary patch literal 3819 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 diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 0e863674733d59ee271ebf5ff0444ae1ec88ff20..920880e1553d50de9a26fa740e71e2e973e824b5 100644 GIT binary patch literal 9446 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 lKj}07^RoUwVdq9MvgFuE%o*@rnQd literal 9511 zcmbuFXH*o?vZ#9qk|ax#EIET9C`bkY$pZ+ILCHwY48w>>&N&AW5y^^@2P8{YkRSrW zkn;>_$ge%;t#jX5_uTjA{+Q|AyL)$4@9wJF^;Jjf>8Ozs-zEkCfK)?W1qyEe{QVK$ z0RL|bIWGbLBrwR(#7D)>`dj2H}AK1UNX&ce8j*p^GB7(ve4M~o>_X_ zdiQE+^-a?kKaP}$sA6;k>v8YARkh$_)bO#jFjfwytXU&ao1x35XEXMJtR6wZ*5*(<~Ya(Y}7_cGbv5j>3B1)S4ozuGvH;$eOo!B z7+`wQ>@jUN_dvNfNcvnijrAc05u>d0KqroMK4K~%6}ND}NdBqzjCb(i>w>XVNDm@D zpVwx)X-Qn#t_}VJc2`$b5@Ux7^>K=L`)V>_(bd4MMyWbW$r6f@I%5d>s6t6U<3H)* zWUUezD)jA3^)2bfD4lxk+4^DopY`p}y<^lmy`N1ZJYi)b& zgCx9kieFGdG(=imk8;^=_m6X*+ok!e%MKyxR8Ut46Q%f9 zSGMgT5k+?Zm+V|8cC;@co%o9B6?iIZosX)v^u6HAB#+t)J3tJ`(HXWJ{c&4Lhdct5x;iTb2e-UC z)7RJU9~i*6K;aF2qr<~?vkmTa*lPsuc&e^k^w5x2O`o8!usv(&g_z&oyik8)+0_FD zQ#LaBxfdryUuPTGpRBF$&8vQ)r6n#Hm{94&6( zOv6K}$DfCl?Xi)mX^c~Gv1OuXMGZM^tSY;}9+7Vfxs8pPi7BdAs)$LEEI+3WuBKDl#E~to(%J2B`mAskimL@iX*K@h?M>0|bstVaU)RJ+%4!L0f1L#lan(;^G5I z=U;f4UJ32cffW}Q7hKUF2jwfM^*QmYU1Wp#7thnHduKF5-RAX6H&$8Nq8S;yZyjMK zD{Ws&cAm$WqckxztvEy3B)?lo#ja@(>)~5GnqVH}vth{{OV|%&+2dLdcaeMton;EP57`b8|xJ?(?nLRTeEz#LSP> zIx|b!@u_#e-jsjOC~3_3 z^T(_#`tZm|)aK6$Vebxbr`%0bGxm)+InfJA#$fFG>4SoysEBXRl?)AU{hFO!^pO@j zS=Z)dn<&kblFJ?Lb(J(z=;|nWkq@YxPM{NY+W2D1_@~6-8=Il{Yy)Kpg{B?=s9tm0 z7EP!iCGD5jr{Y6Qq%}A=ZyasL%UYNp4P*u#5t3}66x^3DuvIu`aLyC z5`kt7+fVQK9U+^A!hctx`*1cF%Pbv1-?8iWV?6ZRz<`_L9!rvNH+A@pFm_f29I9|* z?7ldC5&~}#|7f$U;BVvgvp!22s6iQ@aOW02=oD`A3beeozNxIC5H_X&T2VMSTOKFA z99HdNoROgCiEm6zvMSi81Es(egxL$JZ+HcU{T1<2k6fMNh7u^`C3syMHcmE0dP4Am z|8G}OLZ!tym08PisrB5=j4Z@he4sDqX>fESylr-UoUNB~0(Z0jXlst%)#>h;M3g7q zKgVxsnZ58pKG2R65hNnYnZ)@$0udJ%r;(wfqiccvGPCHT-aS5gt+3=6$Q-29r5pAv z@c3zm{ekJIs=~Zu;IrYOq37Az*_DlrCjH;Oq01EqPmWfWW%CCekCxY-7#ecM9ZO$4 zpbI0s;TEhA$g#4tvbie2dDh@virsuvW)-MdRo93xr%1evsqFt9t~z($TQoOev{-H~F%E zpFuQtI3~h9Elx5wK6}`H!@+%R(UYv7OHazp-}h3+C?tV_dFKJ26Da@e>h zc53G@Yn1g_#x%$|GWXC14Uqc9=MhjPYZbVTc9rrktD1{&q-|o1SFVzAeBT3WdwXus z8K=G_Atm*7ntn!f)PycbbSGbqx2^S}63si)5@rPqak9v*uV+pJ?7x@MSLTJs2vjxm zPR}2Ur69k{!(<+covu`wg&IC2xRQVkwqDc2-Bh2>2wnJF5Sp4%>uq_kt$Zc$HZwJa zqg*b^R|XM=cJTf{8u7Z%ZxGtrEPSbJk$J{q)PWwu4Cb^TI< zm0;J^r-Mt<5*gU^Mj{NsJ4-@v<8Me|W|xH~^#9C04Qs6|HW;GpAD^J%rX@b$w|^sA zr}rnZ)!CTub7yd)?!ZV>T2CKW6hq)A{CZbD)xe&oZ#hL&pJQ+Sjk0>!W0|lZbT8fS zZ;{?hfuKqCU`q~X7al#vK!4v4&|`u-ccZkkCp3>Yi|0*}bVnT5=+;*VoFJ<`(mluR zfXU&!(qFA#rKeJ$^W9OCN4n_6-I_(nxSe3gq6SR=Ja55s%h}mP#qiceKJJwwlc8R-&udPVBSUn{cJEfM*`xiJe|V|tHh@RJZLJxtok~1RCs#}s+NEuhqO$+Q zutMWN$smWzovNXqz|3RkJ6$hro7QXR(k&4Wp#o@ zL9_XCQy)UMvRJxwmv%e0P9S|BTzBb7)=Z5pU%wp=r9fC5_Lz4H9KJTs|0BD=$ZA@* zgkGCD5nugYW>>I76Dqac;|(`1O}XgBN0Ke zojklUDT%J|jldgGnG9C}^^iA762Cbw{w}U@iy!=l*!6E+aWlG|Z|7&bO+sZN&dfT_ zW<7(8NE^;`JU!R1$5h>IJ4Lzi&81uNej4T}YVPPuNW@Cvn~f^ z`0Ul>B4ycI;K^#w{arEv8K#^7h?q)BO`LIRcajaQXO5W&!KfPRA`vET{X^db#*vRM! z`<**C6B2s$x71X^i$8oM2ABC`zYjcp=*Ffl9KD*6NV6>8tKJ(x-(& z+8>-5JH6dwI!l53^;4a+-0L2g?yP0qNHQ@8gH%m71zi-)fP%j_jj+W=U+JnM>^ziJ z@4_oFgrU_ETy63P9i*gCeKp8#&RZf#s43w~{T6|zMp{qBos%%=Zv}QoqAxfojo>Zi#r=<~Yeq{B9F_V&#LQhqq7ck?6G0_?sf{H;; zGVUN-x3llL_$0c2nwfryOE5M)9W~JXIMYkB0w2(m{&Wl2uU@gZpRdCwq5^trivwJ* zQ|zdD=e(teKtze?2Lxq?tSbZJ%cKh3uz(6n}`L6!u?jmOa7Z+FO>TvGNug@+tUH95=7k@`*3Myi# zbrlM(3}fWYdl#@_l%Z2Y7E!8#{CW_8_j4K!FmHht29;6}v@LC}a>Qp_y_q(Odo+|5 z{D~+_Tr-g)I^a??`q}E1$NOcOSK?TGC!Qq~RgwWW8&@FTz(<3(7mk3ae|0;q-p&N5 z9B1Tf=5s3b!1*@wR@kU#9a5xEgpZH%%KnGZU=_CLxAMza3MXgVkXz zxS+pmmq{XPYTmY(oCwJiSne=4Q!SHTzr)>ZYsp-jyV)KcUck|NwVr)>OX18>`%fEp z3SlEB%i;rp)@%Wnf{x*KiA$M&k2bGWK#h``OPGR%k^$Ig;;IN}pk@sujn|f=n4h3} z8OUUeg}cf0yEWJzQDB$n37N3FVUUP|9*i>3RP?Ab29|7JUvGn~-Jo-?d#kF^XlfN1 zMr!8qVSD0ztmsK73hw&*@CI$Su!@l#&FV;QBqJ%Q$;p{KK|z7mk*yCXk=(iNVe+!Q zUA+i3FZ6z8JM(IY=_2?Jc=apvdH(;z*c!y3jhOv5IwUP*>D*Rb%>wR2U0VXZ4`WaA#E$eOgqWmPEaa?BB&3vwW&31B zCMm*YKz*1#w|;=aH1{@W+hz4UtChwH>RyT+hbRa&GCuk6U0Q{UP}lXW#|$1ytu#26 zD!z*+c-_%yt0Wr={^#DT(yDab}PQ<|i&2ig{F|V#TVCGYGsio#xX$5Tr(m0=ZjO1@B0pcopE#(M-Q%=g zV*BC(_NC-~6uxq2YT~137!G^Fod$%z$Q@xx+RsNv*d^9>2<<&mWuEN-ta|PVE~)rC z{2{n!=^?=!dj5-kXm)FLLl6qzABW-R!Sd?r-Pj%+pwVX|r9OV)BMZ>k)wNiyQ{;}r zRE2@q?v?CT;c&^z7xwh@F152}lNMjnnoLLl3Vu2XNri=@U>g)JdP*t2v>o3+I_h9L z;%^8EY0H%788b`s&Nj`l5Z?_L)XltHdi({|_99FK)BMcWl4Z*?)$j3q(Zn9MU=u&A zT{e-WE^v>Ag+*ASM=VN zTw_UkU+wp}d;ry6`?cJgPM*c$v|zNqlT{zuAhYyfDOzsc^r*4Et+kUxEor!gQuv@0`TD-4QWZu}XHX021WX(^t+U!dNWmVRBh@Q|6G z<*qz0!&$8@Bp8d_EszV3eEp`SOjkcKwy(keBpz1Vw{dIqysnSs;G8@;$)}KWuHz3d zy)z3S(glo(|I$eZD=8%jZ!C_zVK?0M}!B^jQoW@#K7nS#seBNVl8}B1QXEh^U6h)z5D<(~pnO#_sM4 z6Q(|TJ70T6TFx_TYQhT|-N)fQSN(~_^J?=Z==7Htj3_EMA;DX)WD1JV%uO5S$QqxZ zU+#C_tcMu3XXt8=@k`bu?whI`tn32 z8F~fyKmUp4GD8ki5=&MvohmJO>}rFp{8`>2cNzmOd4D;^^6d)a;t6Q-D{85%e<}iD z)M3cKQT2bh&;J7L|C_FM^#&6kZMathNWbJ#-Rf$em6p2g!PRWfZp_iVU`lSVPk-a7 z7BQ-qHtQ;B;Z9UetL<{}9gi!`k!t^+>q%-59^PY?;O8fP`t&LFD!KLHR>O?zO#s9q zgAXPqq$$8`63i?8S}c%>!su}!+6=M0lhG(_SD!5~HZ#ZmLI8Ho4ADdK?MvacEkuPe zEL0#KHa@|E^&sc)5<3QHX8GVz$NE%ZgFQ`bqNbjNkFX+0TgXEXD2EDU84E*>v)>GD z_-y{5XzLk`rcQze-HK8H3TdZST3OA~&jE zu9C-CRANa*#o&v(IW-|WE&#%1su}_aTecD^v`>j#qul49gh0T-uoO-FpG9{$9N>QF zRjVdyO#EsCB9^H8$S3QLj!s?xwr!-psJHO?AOKKsut`<&na6S**h2v1FTIl7aQ{2V zcdA(f1CKLbm?OcBMr%d}ZG(uCW}N=h7Y1_aN3e=1+*LgE8b*_2WmAo9v8B2BFGqL# z-T0Evpu0CaD{CDpGB#ypu+XXc4n)&M#{_+`^DOG!iX8rz5mx(&P$FqL;tuJr9TBm2F}>H{sLv_0r8HwW+%F0r*0BPj*K6n) zDTKlz`V>9aBO+_c|MTP?(iozfcmL(p6?|f9ssxE-0UZM&5s{*uU8&*Z!UDOqN(U(S zFBVyx-6MSM-p+wHK}ah{IL+MQ%Pl8*cgQ@T-Q+ndyzSF9E%dYvjh+ULct5h8%CgA| z|JAEk6nKy@wm(Zfv5f)fJ7mn#oav-wWH|H;koB`Oh=imh4uZ2d50v2J=l^%&!$8zm z(z+xFP074-7Z%}$9uyh`6jH`4F7oa}%!JdMyGMD2XmHZ^_tQsTLHz~0S&bCH^=Ef? zcM<&lT+NItNXJvI5~HIPjg2!oc@~5VucuulSNHU+U2KYzoN;KapfL#AbM-7NNEIn`uRC9p#7tRPSj4}43DMB8te)B;U_0`P zkB@hBbxm6h0;vlK;AwoD-h+0M6S`9Ml*Z%YjcJ6};N3K{3=MBte{|D(3|0-a9?Fgw zN0>QI3S5RDvIdq=Yc~_*kiEDxNiM~4MX(2UU`_pOhpD@d3(Gk23FD)G_dX^+!JE7E(IqZTtf-kSRY!y>MdjN;i^KWZau zy3v7-Y?x9r!R@aTrTaYaGmjQx6}gV{tx>a2F{PX$Z6&dyLA_;L2o!Kc0ln-?Zzoz0 zJbh_3D1HaY&*Oa>cd?=DPR(z^`hUDtRYgzSRi z;;A%rbR-WRJh1FBWR2ZpTn{85X%Z{>Id?(0Z}yst?1buKNUk`TsNw3ai6if-Kg-0h&v!0cS_cq&pm^$ ze(kA16ktlw5o^NorbVZOyvVG@^0J00yK^wAm!eizSA$&jFhS1S`ubTi5val7uV9H! ze^h)L`n2jvVS*JDx-`BJVhEXAQTs&q%SJM{6z>-1mVR>9>l{+Dx!a2-F{7xNon2I} z7WY0AQBcp?Op^V;kCH0*Cf_6&DQh>zX=YNEeJ3jNKv(!J*xd@HHVU)&l_4$oP8!*o z5R^WiiS6m>!6|G}Ra3)7q~#{d8&6GPyXN_~E}4%S{4|%P#jT;lQs~fw&&IVjMxr73G;HFZ3#IsvdE(}}auRX}%f!#8elGTY zeFd^#BeM4Ie{A!UU!?YB#`4tgBo-QQ7YPQJuVT$RzkHF@XdWBWYtVqciZ@4|eO0u^ zJTEsk9PIO)atTU-j{9~*=M`#`(9qB*mT$#p^XNp$=gCN65LrRm{Fx5IEY;&bXQKc5 z$UrZA(0x3{_>zvctd1N>0yLie%QE5@x-1J~2fnYfT3PDw%;AqN>Nev@+igq}7NmTXA>Q5hMPWLa9MYE1R0 zv@$uNX{OMPbNX#z59XC&WB6y1c>ldB_itqLziM}LY0;v$VtZ^4`RIv{{-=uG|1kF7 z>wcE)q?Fqij<*Vz7KY>ai+(!WwRCne5y;5s%ikwl8>85^u_1c+9Zv+8E&V))b=c*? zqJ@cooJA!hL^e-{XWQ>w{bKPh0BxE_zshGFF}q;)m2s{4iHw*>wXN4|_btnEpaU6z za`O|c%%0+odqtS{NPpK&5hk=EUrgOMUzG=0W{ba7Z}<{Iw~&;q8<&$&(!$yWB4 zf7lWZ57k$sZV==KG)-POTB4?=y4)HxF?>r?Q>gxA4(Mq-qm)k~n8bL@uglKI7AVWo zSNg{<1h>)+Z{?O^kY1N4)MzMW4`YTd3v1{V$^PIRG_d<8?IlXrqm?+IxTdB&vyL0^ zc=U+7|DYs<<#x{4pb2$o|H=42=7@wYCnz|$2dh(d_iC+>=kWMg60Ih>L?9!dCnX&^ z6CpP{Hi`pjy6ts4TR4=lWgIy^XDgPcQTo2G5p#mS# zd=Zvf=4uYENj#9CLO(Dk%w|FGpFd3b|Am{RYx28fi6;C3?ET;eP=JQ2j!LzXb=dy_ D&4v*^ From 3ff9d441f9c2db9c0c8357a4824ffb6b485541ce Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 04:39:49 -0400 Subject: [PATCH 19/33] Finishes fixing ammo inconsistencies --- code/datums/autolathe/arms.dm | 60 +++---- code/datums/supplypacks/contraband.dm | 2 +- code/datums/supplypacks/munitions.dm | 6 +- code/datums/uplink/ammunition.dm | 2 +- .../objects/items/weapons/storage/belt.dm | 2 +- .../objects/items/weapons/storage/boxes.dm | 32 ++-- code/game/objects/random/random.dm | 4 +- code/modules/projectiles/ammunition/boxes.dm | 166 +++++++++--------- .../modules/projectiles/ammunition/bullets.dm | 48 ++--- .../projectiles/guns/projectile/automatic.dm | 16 +- .../projectiles/guns/projectile/pistol.dm | 30 ++-- .../projectiles/guns/projectile/revolver.dm | 12 +- .../projectiles/guns/projectile/shotgun.dm | 12 +- code/modules/research/designs.dm | 4 +- icons/obj/ammo.dmi | Bin 25469 -> 25318 bytes maps/northern_star/polaris-1.dmm | 6 +- maps/northern_star/polaris-2.dmm | 14 +- 17 files changed, 210 insertions(+), 206 deletions(-) diff --git a/code/datums/autolathe/arms.dm b/code/datums/autolathe/arms.dm index 276819d3ad..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 ////////////////// @@ -81,50 +81,50 @@ /////// 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 @@ -161,7 +161,7 @@ /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 /* @@ -211,12 +211,12 @@ /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 @@ -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*/ @@ -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/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 c9817e2274..d0635ffce6 100644 --- a/code/datums/supplypacks/munitions.dm +++ b/code/datums/supplypacks/munitions.dm @@ -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,8 +154,8 @@ 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/m9mmt, + /obj/item/ammo_magazine/m9mmt/rubber, /obj/item/ammo_magazine/m556saw ) cost = 25 diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index 4238884598..03f1296ad9 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -12,7 +12,7 @@ /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)" 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 8eab766dba..c33e26d809 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -136,12 +136,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" @@ -152,12 +152,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" @@ -168,12 +168,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" @@ -184,12 +184,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" @@ -200,12 +200,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" @@ -216,12 +216,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" @@ -232,12 +232,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" @@ -248,12 +248,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/random/random.dm b/code/game/objects/random/random.dm index 183065d3ba..5dba97befb 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -288,8 +288,8 @@ 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/mc9mmt, - prob(6);/obj/item/ammo_magazine/mc9mmt/rubber) + prob(2);/obj/item/ammo_magazine/m9mmt, + prob(6);/obj/item/ammo_magazine/m9mmt/rubber) /obj/random/action_figure diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 3ee2393bbf..d4b450341c 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -18,17 +18,17 @@ icon_state = "38" caliber = "38" matter = list(DEFAULT_WALL_MATERIAL = 360) - ammo_type = /obj/item/ammo_casing/c38 + 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/c38r + ammo_type = /obj/item/ammo_casing/a38r /obj/item/ammo_magazine/s38/emp name = "ammunition box (.38 haywire)" - ammo_type = /obj/item/ammo_casing/c38/emp + ammo_type = /obj/item/ammo_casing/a38/emp ///////// .45 ///////// @@ -36,7 +36,7 @@ name = "pistol magazine (.45)" icon_state = "45" mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/c45 + 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 @@ -47,29 +47,29 @@ /obj/item/ammo_magazine/m45/rubber name = "magazine (.45 rubber)" - ammo_type = /obj/item/ammo_casing/c45r + ammo_type = /obj/item/ammo_casing/a45r /obj/item/ammo_magazine/m45/practice name = "magazine (.45 practice)" - ammo_type = /obj/item/ammo_casing/c45p + ammo_type = /obj/item/ammo_casing/a45p /obj/item/ammo_magazine/m45/flash name = "magazine (.45 flash)" - ammo_type = /obj/item/ammo_casing/c45f + ammo_type = /obj/item/ammo_casing/a45f /obj/item/ammo_magazine/m45/ap name = "magazine (.45 AP)" - ammo_type = /obj/item/ammo_casing/c45ap + 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/c45/emp + 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/c45 + ammo_type = /obj/item/ammo_casing/a45 matter = list(DEFAULT_WALL_MATERIAL = 1200) caliber = ".45" max_ammo = 16 @@ -82,14 +82,14 @@ name = "tommygun magazine (.45)" icon_state = "tommy-mag" mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/c45 + 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/c45ap + ammo_type = /obj/item/ammo_casing/a45ap /obj/item/ammo_magazine/m45tommy/empty initial_ammo = 0 @@ -99,14 +99,14 @@ 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 + 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/c45ap + ammo_type = /obj/item/ammo_casing/a45ap /obj/item/ammo_magazine/m45tommydrum/empty initial_ammo = 0 @@ -116,86 +116,86 @@ icon_state = "clip_pistol" desc = "A stripper clip for reloading .45 rounds into magazines." caliber = ".45" - ammo_type = /obj/item/ammo_casing/c45 + 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/c45r + 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/c45p + 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/c45f + ammo_type = /obj/item/ammo_casing/a45f ///////// 9mm ///////// -/obj/item/ammo_magazine/mc9mm +/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/c9mm + ammo_type = /obj/item/ammo_casing/a9mm max_ammo = 8 multiple_sprites = 1 -/obj/item/ammo_magazine/mc9mm/empty +/obj/item/ammo_magazine/m9mm/empty initial_ammo = 0 -/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 -/obj/item/ammo_magazine/mc9mmt +/obj/item/ammo_magazine/m9mmt name = "top mounted magazine (9mm)" icon_state = "9mmt" mag_type = MAGAZINE - ammo_type = /obj/item/ammo_casing/c9mm + 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/mc9mmt/empty +/obj/item/ammo_magazine/m9mmt/empty initial_ammo = 0 -/obj/item/ammo_magazine/mc9mmt/rubber +/obj/item/ammo_magazine/m9mmt/rubber name = "top mounted magazine (9mm rubber)" - ammo_type = /obj/item/ammo_casing/c9mmr + ammo_type = /obj/item/ammo_casing/a9mmr -/obj/item/ammo_magazine/mc9mmt/flash +/obj/item/ammo_magazine/m9mmt/flash name = "top mounted magazine (9mm flash)" - ammo_type = /obj/item/ammo_casing/c9mmf + ammo_type = /obj/item/ammo_casing/a9mmf -/obj/item/ammo_magazine/mc9mmt/practice +/obj/item/ammo_magazine/m9mmt/practice name = "top mounted magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/c9mmp + ammo_type = /obj/item/ammo_casing/a9mmp -/obj/item/ammo_magazine/p90 +/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/c9mm/ap + 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/p90/empty +/obj/item/ammo_magazine/m9mmp90/empty initial_ammo = 0 /obj/item/ammo_magazine/clip/c9mm @@ -203,33 +203,33 @@ icon_state = "clip_pistol" desc = "A stripper clip for reloading 9mm rounds into magazines." caliber = "9mm" - ammo_type = /obj/item/ammo_casing/c9mm + 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/c9mmr + 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/c9mmp + 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/c9mmf + ammo_type = /obj/item/ammo_casing/a9mmf -/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? +/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/c9mm + ammo_type = /obj/item/ammo_casing/a9mm max_ammo = 30 -/obj/item/ammo_magazine/c9mm/empty +/obj/item/ammo_magazine/box/c9mm/empty initial_ammo = 0 ///////// 5mm ///////// @@ -270,7 +270,7 @@ /obj/item/ammo_magazine/m10mm/empty initial_ammo = 0 -/obj/item/ammo_magazine/clip/a10mm +/obj/item/ammo_magazine/clip/c10mm name = "ammo clip (10mm)" icon_state = "clip_pistol" desc = "A stripper clip for reloading 5mm rounds into magazines." @@ -288,7 +288,7 @@ /obj/item/ammo_magazine/m556 name = "magazine (5.56mm)" - icon_state = "c5.56" + icon_state = "c5.56mid" origin_tech = list(TECH_COMBAT = 2) mag_type = MAGAZINE caliber = "a556" @@ -324,7 +324,28 @@ name = "extended magazine (5.56mm armor-piercing)" max_ammo = 30 -/obj/item/ammo_magazine/clip/a556 +/obj/item/ammo_magazine/m556/small + name = "magazine (5.56)" + icon_state = "c5.56" // This icon is named wrongly. Change later. + mag_type = MAGAZINE + caliber = "a762" + matter = list(DEFAULT_WALL_MATERIAL = 900) + ammo_type = /obj/item/ammo_casing/a762 + max_ammo = 10 + multiple_sprites = 1 + +/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 (7.62mm 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 = "a556" @@ -333,11 +354,11 @@ max_ammo = 5 multiple_sprites = 1 -/obj/item/ammo_magazine/clip/a556/ap +/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/a556/practice +/obj/item/ammo_magazine/clip/c556/practice name = "rifle clip (5.56mm practice)" ammo_type = /obj/item/ammo_casing/a556 @@ -376,7 +397,7 @@ /obj/item/ammo_magazine/m50/empty initial_ammo = 0 -/obj/item/ammo_magazine/clip/a50 +/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." @@ -405,24 +426,7 @@ /obj/item/ammo_magazine/m762/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 +/obj/item/ammo_magazine/clip/c762 name = "ammo clip (7.62mm)" icon_state = "clip_rifle" caliber = "a762" @@ -431,39 +435,39 @@ max_ammo = 5 multiple_sprites = 1 -/obj/item/ammo_magazine/clip/a762/ap +/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/a762/practice +/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/g12 +/obj/item/ammo_magazine/m12gdrum 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 + ammo_type = /obj/item/ammo_casing/a12g max_ammo = 24 multiple_sprites = 1 -/obj/item/ammo_magazine/g12/beanbag +/obj/item/ammo_magazine/m12gdrum/beanbag name = "magazine (12 gauge beanbag)" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag + ammo_type = /obj/item/ammo_casing/a12g/beanbag -/obj/item/ammo_magazine/g12/pellet +/obj/item/ammo_magazine/m12gdrum/pellet name = "magazine (12 gauge pellet)" - ammo_type = /obj/item/ammo_casing/shotgun/pellet + ammo_type = /obj/item/ammo_casing/a12g/pellet -/obj/item/ammo_magazine/g12/flash +/obj/item/ammo_magazine/m12gdrum/flash name = "magazine (12 gauge flash)" - ammo_type = /obj/item/ammo_casing/shotgun/flash + ammo_type = /obj/item/ammo_casing/a12g/flash -/obj/item/ammo_magazine/g12/empty +/obj/item/ammo_magazine/m12gdrum/empty initial_ammo = 0 ///////// .75 Gyrojet ///////// diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index dfbd721952..aa34925cef 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -13,18 +13,18 @@ caliber = "75" projectile_type = /obj/item/projectile/bullet/gyro -/obj/item/ammo_casing/c38 +/obj/item/ammo_casing/a38 desc = "A .38 bullet casing." caliber = "38" projectile_type = /obj/item/projectile/bullet/pistol -/obj/item/ammo_casing/c38r +/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/c38/emp +/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" @@ -35,28 +35,28 @@ * 9mm */ -/obj/item/ammo_casing/c9mm +/obj/item/ammo_casing/a9mm desc = "A 9mm bullet casing." caliber = "9mm" projectile_type = /obj/item/projectile/bullet/pistol -/obj/item/ammo_casing/c9mm/ap +/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/c9mmf +/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/c9mmr +/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/c9mmp +/obj/item/ammo_casing/a9mmp desc = "A 9mm practice bullet casing." caliber = "9mm" icon_state = "r-casing" @@ -73,43 +73,43 @@ * 45 ammo */ -/obj/item/ammo_casing/c45 +/obj/item/ammo_casing/a45 desc = "A .45 bullet casing." caliber = ".45" projectile_type = /obj/item/projectile/bullet/pistol/medium -/obj/item/ammo_casing/c45ap +/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/c45p +/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/c45r +/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/c45f +/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/c45/emp +/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/c45/hp +/obj/item/ammo_casing/a45/hp desc = "A .45 hollow-point bullet casing." projectile_type = /obj/item/projectile/bullet/pistol/medium/hollow @@ -134,7 +134,7 @@ * Shotguns */ -/obj/item/ammo_casing/shotgun +/obj/item/ammo_casing/a12g name = "shotgun slug" desc = "A 12 gauge slug." icon_state = "slshell" @@ -142,28 +142,28 @@ projectile_type = /obj/item/projectile/bullet/shotgun matter = list(DEFAULT_WALL_MATERIAL = 360) -/obj/item/ammo_casing/shotgun/pellet +/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/shotgun/blank +/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/shotgun/practice +/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/shotgun/beanbag +/obj/item/ammo_casing/a12g/beanbag name = "beanbag shell" desc = "A beanbag shell." icon_state = "bshell" @@ -172,26 +172,26 @@ //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 +/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/shotgun/stunshell/emp_act(severity) +/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/shotgun/flash +/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/shotgun/emp +/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" diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 7699b8483c..373e0bff8e 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 @@ -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() ..() @@ -257,8 +257,8 @@ 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 @@ -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), diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index d4f9d265f0..69fa353a52 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -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..a92e59982c 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -46,7 +46,7 @@ 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" @@ -74,10 +74,10 @@ 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() @@ -113,7 +113,7 @@ 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 @@ -125,10 +125,10 @@ handle_casings = CYCLE_CASINGS max_shells = 9 caliber = "38" - ammo_type = /obj/item/ammo_casing/c38 + 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_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..80d1a09d78 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -11,7 +11,7 @@ caliber = "shotgun" 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" @@ -66,7 +66,7 @@ slot_flags = SLOT_BACK caliber = "shotgun" 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/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/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 0e0959705e4461fde7a7f52f77d1c71d67af7554..a120049eeadead0db24447477966a735e0dc0969 100644 GIT binary patch literal 25318 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 TG7A2G1!QJ)!LaPC>w|v-il{R| literal 25469 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 Ai2wiq diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index 2b58fe7175..09fa0e217a 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/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/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/mc9mmt/practice,/obj/item/ammo_magazine/mc9mmt/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/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) "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..9708404aa3 100644 --- a/maps/northern_star/polaris-2.dmm +++ b/maps/northern_star/polaris-2.dmm @@ -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/m9mmp90,/obj/item/weapon/gun/projectile/automatic/m9mmp90,/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) @@ -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) From bc3f4fb0dc065a4a013cea728972b1a80a70b55e Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 05:07:34 -0400 Subject: [PATCH 20/33] Polishing oversights away --- code/modules/projectiles/ammunition/boxes.dm | 30 ++++++++++++------ .../projectiles/guns/projectile/automatic.dm | 16 +++++----- icons/obj/ammo.dmi | Bin 25318 -> 24904 bytes icons/obj/gun.dmi | Bin 70629 -> 70811 bytes 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index d4b450341c..a43741bbc2 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -288,7 +288,7 @@ /obj/item/ammo_magazine/m556 name = "magazine (5.56mm)" - icon_state = "c5.56mid" + icon_state = "m556" origin_tech = list(TECH_COMBAT = 2) mag_type = MAGAZINE caliber = "a556" @@ -325,14 +325,9 @@ max_ammo = 30 /obj/item/ammo_magazine/m556/small - name = "magazine (5.56)" - icon_state = "c5.56" // This icon is named wrongly. Change later. - mag_type = MAGAZINE - caliber = "a762" + icon_state = "m556-small" matter = list(DEFAULT_WALL_MATERIAL = 900) - ammo_type = /obj/item/ammo_casing/a762 max_ammo = 10 - multiple_sprites = 1 /obj/item/ammo_magazine/m556/small/empty initial_ammo = 0 @@ -342,7 +337,7 @@ ammo_type = /obj/item/ammo_casing/a556p /obj/item/ammo_magazine/m556/small/ap - name = "magazine (7.62mm armor-piercing)" + name = "magazine (5.56mm armor-piercing)" ammo_type = /obj/item/ammo_casing/a556/ap /obj/item/ammo_magazine/clip/c556 @@ -411,7 +406,7 @@ /obj/item/ammo_magazine/m762 name = "magazine (7.62mm)" - icon_state = "c7.62" + icon_state = "m762-small" mag_type = MAGAZINE caliber = "a762" matter = list(DEFAULT_WALL_MATERIAL = 2000) @@ -426,6 +421,23 @@ /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 = "a762" + 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" diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 373e0bff8e..a3e1f671ec 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -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() @@ -343,7 +343,7 @@ 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" @@ -354,8 +354,8 @@ 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/m762 - allowed_magazines = list(/obj/item/ammo_magazine/m762) + 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/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index a120049eeadead0db24447477966a735e0dc0969..dcdb20e070c02b8aa3396a1095a1e030b4260674 100644 GIT binary patch literal 24904 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 NjLsUC=-+t!{{Y&mKyd&7 literal 25318 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 TG7A2G1!QJ)!LaPC>w|v-il{R| diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index ba02b5a3246aeea1ab6d7ecc6b814ae1b440a32c..75f5005aa5794183a1504ec505ee657b66650f9b 100644 GIT binary patch delta 33101 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
  • &c9BvAY_;y3 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 OJ9oz5^e0W*2mcNK?<%$c delta 32917 zcmbTd1yoe+_cnZJ6eOinQBXlbkcJ@yF$hIMq!o~oZkR)(B7!0U(gLCqLpKZ^BHbZF zcQ;IZXMBFo@B6R!d)NBb`>w?tVCKwy?%4O<*R}U`C;cE@%pr}r0{ZwqF?7FU<@Vgw z*4f?G=@kHYC#NJeI!#tGMD*^OS!|eYhHbQTAH{U3vP5!w7B!F@8TBzZ?k8R*`*?p2 zcet(esC>NxV^|u&d}4hOr_Syg9&5IYKb`MIfW1h}p~umU6oZl9W=q;gy^;v2;m~G` z6|OQ>fir7@M+FlN(q8U3?ZU7KnB~Lcw&KTCGn3PhzYR(vQW*2!;kg^t$)8dj-Y9uN zXDXY^K@BfSkw_>It(rD>Z?02xL*$;Xwt5nz#n@}o%gz3y)fRUPG{(GCUHoeFDC6~g zEpi*S)+esFq^Z)VLS3L=|Ghj2{gHAAw?`GHgD@GZBUcoOSV2f~ldl64E#FsjkXGmo%Nr{f}%-{(I59;_EdR%FB_>uFj^Y>+D6Z?}E&hce8Kb2>@jJ z?s!(=6Z~ZnPGyES^&@E?dOfw3jO@;TnsWP@UZkD}+DJ@~F-kHsh-_O^rLiVKX9q4I zf&Z*vqTaycz{_Ex*%%&dTFdrpEBOhH^N+Yc-|AIWFyTaq|E^%v^rLp!dRaU# znS0$4!;8<*8^NK&hZ7G5OsdDQYaVghzYnWjyKcYK%@YJGj01wFzPOzBjjsQ?nZ_Dk zU7NRbyBgPC-&J{|J9#hUc45jL%@d8Uhm%?#kNimcCmaQo=M`*+ zf;TP(Ffi2T(?6qWRk&7v-Ozx8JSaB6<^}3)IzK49qj))9IpKMI0=@8tU&(I@@eil_ z&oA?cCBkO;UBmA6U1!xeY8}?6ApPL1pRSdw(K)JzbfPEqmwCox1&_+!m$MoaQ7gHv z79yvnt9+I5ZuX$8Rf(`#tc2QgSv7H`tNUv8x_8-Vdg?P?&6B0zYeiQ5Cn~e{S33+B zt!};pi_#^;fAZCYJ>q&bz&>1bCiXGQ$L>k{mtu8~ym9*{ci-+GTDkO`k&{Bc$Qmlo zH=h`^HkJ0JEFYlGi!w?!Z20doOX_~r`qNPt)(w99vLQ8H@nucXI*rI2OxhpkID_2XJ zjs+8$!W9yk>f<}}bQo^dy6*%!H%@mC(`waUAAHEJjd`7B%@bw(qOLz*aKK&lox~q& zz6;x~V02S|z0OyQ(d)BXc7l7lVg~VFns^)lr{1NJmnkCYe3V-Op|COk#&Y|3dyU=8 z)-8_=BpS1BelZ+i(G;?M$Io27NVfI*`E_$2x#B114X54dYCm98aE>mK02&aZai{q-j zn=fFi7uZT*ifp(x1aeP^5#=F}>6 z@azG|BE(4|%aLx8F0Q2>+#|t8Ej#!^e&yk^2}ka?wjc1U8If~_t>1Fq>Am#*Wf=DF zAGc)`JOXN5L$e3i!ZPFeqTjy$KyI00kv_&oUYug_$$MsVQDZKd-6i1(-|u3(7f+3% zgt~G+ki~s>P^rcVEP4f?Xn^yFc8b);H*i$5%FN*>*pjomB1;MY*qA7L@cqXRu<>1`_0)$B=ew6x^Y}^CqWw`hW+y$v%jM;g@iWyn zz1)qu35y6hJXIE|DnH@V$%*&4$IgPs^eJ(}ga?v&1cA;!srQ-isVlLmpyT4YP*O#< z6`s0u+=|?!b$YuWtvPJj#Py!#JNcxDnj`+(AAb3={vw8~EM!?3S$_U|km>4Gtm{EL zz9;ohuog>5XRH&;WU^MOzufeA$+MWAWnm@nJ@SEGpBsYIN!8Y#2{hX(gxW?Xj}ZR zU-yd`x}7Qq(sr^xwR04KMMai{!|Lk3SSj0qD-XX&bmrIwG*+E$ykA~<<~OFQ7}rM;?L8@SyFV=J!8);>NmfZuQue*WYMQT)8m z(DRf+_Q3fcQJ+6Ee=2)PWY{-i1>4=lL^yT-Gka>8+C_ENPR1!8E<;KLTv527;thpGCi36(H{Qk z;O^bYR>w*`B5p0X%-Q_$MI~>hzGs0exswLSi&Z>bsNvqaO_2op1YEUQZOuKOIiRB78Kty^cbWP%(=}sgsmcU4UkFs?@NB2f+TZ zHjB~E4q*$9+v~V=A@=i;Ct`3P*BOvF!ZEPZHQNo#f~f!wKWmd#htP^eKaG(FLWN&%#hFR z$7hOwFr|>qcpUHnP4qL%Y>VRiN1VBMG6uH+9>?Kem$v(jM@B|ylJZFmehJbs)2|k( zhSc}P^8k$vCVH}c8HU%RMRt0{1O+2cACE7_Z7S(!5VfzB)YNEAi`&o$ZEp6dtDj9x zK1|0nD*0w6r^tETT28;&ey-D#N5S{gZAnS+?WJTCS*({CB>>I7dje9MXi9V$7Md3Y zGncjtwKz@U|6OK z>OctLraF5#LKZ2$A5grWfGLrjlDx){Y*Ty}$m5bMeYQ@|maP__Pm*F{B7B^?16lY9 zi4u*IV=+ZiJI7YFgnPJ@!K#y*VZmA66+3jw>^3ro4z99vH^SHqmAc|aM(7-=bbiu) z>zD2k?x_#_fceR#$gmDrB{qb< z3=AaSqo6w-K1A2xQ3ggggh1SGbKc-ckizzs9%fs(4+hj;%D+#+m@SV>cPC4YFf$Fn z*=HB8r-vu$H{H5*>xEMXUtQqP>Fu=YOB;e=v{pqLn%5q?6Hio=4kb9S z-q>t77feZQhXW4Vw+kv>E0rn>;CBvlqmUpN31UP!=-GdE&;s0npf}5_MmzSepKQ`U z#>KVb#(#{eY7*loCj< zODB9r_&Dh~C@@sVY|Y!3wsS!T5Fj)k%#|2(9n!LpCS8K^{W)tIEp z!7-KR?N$Es{8TmukO%|qwrhfdBtTY9j$fi|p$=Ipp%awBI}w-Y8)O{THY>@M;y;D1 zd?-5U7;5+y%^lMJ`6!*-;%CEuMp=I=i`ZLNElir*49;|n+P_HzeeU;zSo@#HoV*g@L*;rfDL8;^a$s& z8#8w3e;X3>cAlh_rbY397%{;7cY>JZZU6LJxA;i-#BXgd?bKM$@adA&{D^wukTQH! z@}pw@i&kX#?)=3=RKW2cVf^dHUU4LbZ1Q050TCXTXNDZHO1xhU5{9bc_(E_--rua= zpG`g#KSKedQ$11252YPFUpWE)*+8q1>a!G|mt94+xv4LY-Vk8}u3Y5@fDw7@gZN`T zVfl(LH-W&Tqi3kbo*tUg#K|I8EBeV=pUCvmF2-I(bY8RT;J`re9+y##=jQm~`Y7ri zE@+YG?F$>55-@~<_GdZI71(L#_Ou8`0}JF7KYjjOd@q*&%_aY?&o{5#xN-hIrCBwc zYksqWXeK*tiK<>vz(mVzGB6e*Z?(0(J=ZU|ru6W!15lt{Rswwol1`w#88KlJ#a#AV% zGBcB&jqT0yD1rnKdRG3)$E`a>&HxC^yc>OM>&scxkJoD^^%uPg;!TSqj&^pOLn9*i zpg!`cziW6Nt-uc)?Xb|(2SJZE6k>juc#CY)#M)uJILrhIH!+6axf3d#`souX@I5z| zG3^-=4%W5zzSx{7v&qfP&5?^x+RI(%c?V5QuCHeVWd(4r2I-*L%mL}X@?1llu=CbqSy14Fme7oo7#NwghL-<~-*;AysDC-Lw-_`7RLrcrc@6`F;zJ2R_x@Wap zrW!$$0S!L)q%DfWRJAgPpA^t}`gC=8p2o}Kp|4RaW`U;%eq9@ey%@n0su`- zO~&6oP?bH-t5beGI6i(3IN9zksZ6Vpq)`F3RWMGok= zzy9i2t(Le;m50`@K7H8k!{^US`v;t>%Svz$EEKU`0EHkPKCET14>)Jna*EsZv}E0j zJ*&-Yj-Z{dM{hOHHb;ngZWt!Zdfca`-f99)JGJ3f*kUGU?s_8gsY=kLnAr5f@f}Oc zuig`^!1?p%jU{V~iy0!BZ@PMKo$StAmIULB`vgqhAIR**reO+dF?+d9#a0i-#d|Rf zw{PD*SxMnqp=UJ`%I`QGzab%&WG*3DnF15*uMc?>HB170&3v9dtUi1E3?5w^Yt^^@ zoSxo-c7iZY0JwTp4&*#KN0=siN5|$bxA6=+9^Q*_28Q0=(!k6cfz+5k=gcadi2ynl zmgNzmF~J}HUm(lYNV?~p)XTVFFpYGcRq@1Qk0a*;os=<|`A1a#DA|KB?N`@byP(Ol z4vGMPO83=|sIIsbyAS z(sLyM;05m8QGR06b5MEN|I34TVGC#<(8#6Qr22$+f4NNsIGg5#RTa=^GBH^?UGC?5 zt{_}f_JeJyTK4z*fw#T)v^8D5={`^?EePP95BG1({EXASWq+4KR!+`kGL$-@z^w6I z=|ylT@!@OA3(c^C;S50|+6PHwA3hv?dgsdC_pmfdr{0B~`o6pqVUlpFT-_Xjyn z;%1t!D|w6tNtqQIZm_tIjGBHn#`Pk~DmBp+hd}m|B zVaZ>9vAg7~xyo(1Rv&=OW)HQ8Z%5(Z*8sm0735yxbQ-wpmwVG_fs>tP+SbIS-n3}w zYrDI-i257v2-y#)^wpGy5kd!aKIKBqStesdOp$uZCydT~T*% z5Mm9in4aLrVHHnb&_8&<5m{oE+`5kN+qP|Cv_phQv@8nMrv=QHlMYEvSBGcR{h4mb zhB~AB?V*e9{UH>$9Qj8W2zFu}?th_Swy!wxwSP7mb41e6og_sB9HT%OVa65|j`$)* zk=PZd)*Tb4TO@(36IeF*ZkUsv8@HmJy}gO)eD~nDX!@Pj3rjA>xx>EH+yQ&2N9M== zyYlr3IF9Ifqh#H7MB7pBE-rWXG#87dD#n}D?{h`tmVL3$+Ca){YloE_X7g=4=K<@I zr+KcuX)qoh_(=w9JzI?)D+_7krBJ!&w-PzI*AIOo+UrA|-|v%2aaQq*jpBBhws37+ zz(&U0n%?P5Q<~SY>}e+~8Jlk{p2x-YnkkRPdtRRVO6uF_{pHib zJTQ+MiT<-4O4!sN(lE`#A|_h*I%zD1e+fK&;V1a<;QDt5Th-XkQ0Y4EC4H(?JW_=6 zZZx-5uD)Vt7K?bV8TJr8ombDHwgojcF9bg8uKd+2 zL%w6R|7|iU9RT>{e$Q|BF=A$%B-rUe1_t8H{?|WrbBF=SS5wyrnB?cr8xCWI%7(j7 z6iOuO!o$PKBhqI%Ws_?(_lICbBDip3bZd`&zzNSzozz>Uv$Bs?Hx`$B%I^L%d80?+ zc3wT^=wTdgy|nIGh3Cx?UkJ*HoM zcB>f=4)8F`xPF5{U{Z+HzWlYpkemTy_H4-C5NLDRp*tb@!~0*KCGUhrH)zyxM|F2o zTJY^`h#w^_+)+~lXQl8cH=)aysk^(aYcV_sG6~Wjbu>NQFz>=Od#r5JOE9Pe9_iNxY4X zITf)7x)|&>*q)OHzoB2^LwmhvW3ocKmN!=F`KsW+Oe4>}XI`yqN6w*>UH10{vGm!A>J;@L{Ne=O6y097S^9{;*Q$ky%v52ANM2!{gn#ZPW9(S(klbUJgxyQ0IA zF%%+ZZB1cRiSARU9-xfZRH!ZO`FmHjd-#ONsblr+-c( znvP)?3%zI!A3vURJ-lwd-Pn={F=5$vu)`rxckX#rq*zy17ZD(!oqACHv1b^@edj$7 zj3%UUhE9H9aPX0l(ONOJZJds;ui4fU2q!c25 z_Ak1hLcQ*I&q^)4J_X@)C}HC=^=AirjPk0ft3UJ6Lm(CRVv!=aj2$cs#1lgI+XrGc ze<#bhadIQi)^aV;tfp5H2t+%y;)M_%u)yQ64-uoPh|%Y>O<@5)aW2WZpqiSRunC82 zxx;u9{I~{n?&;H~4p2D12Hw0Gro5!OjzImf#X*MJS0CD?{NZqXi~QU*aB$=2rNXg)P~u zG3P#!<`z49T4{=tWfpcv3TY1`Yqsk-Afx-RzMs&n>M{`;C++!5@!*abHZCr%n5Fyr zBE>>Ys_uZu=D>TYH>_IlG88C-*_At}`ZIZu`J*+se1s+oKF`5DDyQ?kjE0aa8n(I0 zN(twN%haBM@|+kFwyHG_XjyR?vtEto0Pdn!?|ULZ{^-Q|=!l1h z<~z#7ujS^ma?z_84-b!GgkTw#@SDh8`g9Qv0@oJ3Duh6+2S4M1%bSxl1cL8U@+B=q zM0S~et$j8Fb*RV8HN61t@9?tRUORL^nAz)d9jJS;6=Jkc4&@AE(l84KBip-|A96P- z)b+GOPTx>nJ=}p~=h3;@@A(xz#`I2(W`DYuACSd}V`;dKsFjg!hbb_9SG0m&I)u4V zx@5-Zkes-aXF}Ewxsu+q>xzGi;6UGMWk?P)n%Sd1kVCbbEP=1`A%` z;qIg?tozkI0g@TWSiTKEc~H9&>w?_=al{nZM;JhVK~>PaB({&amv5^D5oG-ex* z6WNpl&piz`CF%ZO@qJi>bihI!3Xjj(sL^s3kBvrwNMk`f1XxwdSW}?g< zm~r0GX1{$uxgPV2$^Y07)r?X+CGDrpo*gFZJ+==ZFiHw=WZU?uySkBW{eF+!ht$;f zBos8}1LYz*Uai#YIkp;j+t{wk)z&J*LUW=Uf`Tqb8&6%5W1;(si*M}~A>n4kkiR0a zLZ|s^gy?A}==iaZp^?5Wn2dPwi@Pk-Bn~ighm#Dlcuk|c>Jm;KQ;x9Fo`*Uuu#ytS zoTjFhT`;1+tX&MSa)Z{^isU42&lLg|j1Xb{_)H*8+W$m!t7cn~Q_-LGdHefT2&L2U z@X$5{uwFq{!@(I%I_Uw?CCnG`Aj($@v;}EWsd;?V>*H#r-G+a~Z9rM3 zu%=+*Z-cAml1TwyqP24eS9xob-xxGgwH|_tU4+~tA~nr`g_cvASD#u2vI0xz*~Yu< z!Sa_bz|!L4=bz2DM1lv+Q-5%?v1UF<7|WRBpK3kBdViV0hl#{d>U@e$vTo{}qYuGES9{~kpw1^G zb&72Ixx#YLg$KEt=Wxx%rj|tX^@DR)80uY zEOBEn*-4IpSu413xoGf?L(9+WHMjRc*;`K&>)RdHN?-O)163^vDlpyX`em7Ah zS>x4baY*akd$)o zMx#(fr^EZGT@XLJ%e%1^{9DO1;ksA47yo?@!S@wU!7udLQLP8InJyb+G8Ow%ZoN<9 zM|B^U(nN#Ubu+330T}dc7G~yKK!TK0YO_6gh_Vp-u4e_5D^fKvNvRkngL2V?lq1c( zd-rI1(-i!ey{3Hx;7Abmz7}0zhbyt^wQLT*(CmrsM55dP3SRwgJ1gM=?}7@=uFqn` z;M-TCIpVFVLUvT@=O}HY z{A=+}5f#{T@`pA(=IY%gq8a4AS0WMn?d{)c=Zb}*I@jnVZ8*Ey6Bk&N;fI(mRPRm| z!`AiCgTZ>*!qDLvp|{$u6C3)zCKP za)3z=PZV@#<7>M1U&db1G=Jw~7g_F8qGM>-k+qp4GjQYb_U*5Qg)zHSv%q$ohLZ!T zJ_W*L-8^fUmc|eYGH&9OW;0dQ5NQ*CfBDac?<)$XUt1wh!Zy6^w@;8Dx>6-*$IYfR z7%pQ|h_&}?|3erw{{{V_hKb4jFw-<4ee+oHZ!@f>jYT~Mf!6_Z+Bf=jbD3-NkS}X$xLT8crDN28CpE^$Lh67_DK-w(w^`lw-CQBV>7)IEX3>#aJ z^3h9hf#)|0X5&paQEyVuA+uaQ1X)h=$Ey!ooEK_2y;MP<s5=u2H6dG|fgd^>_oY($&Y#*h`@6euUm=Hb7to+~ z1sSsLCf9XlD#h;zgT;NqEKbuXT)j#L@qX@RZOG3&xOdNGh5S|L$E!`#b$)EL%7Jy) z8#7cRYH6|+%t)J&?yHZ11}WsJCQ+q_YN``_KS{;H;u2N4+2*DI(hKPTEbAF^gC|)U zA~Q*%aQTPb-F@wCzFhjINa381VVJcOlVEdlV8!Iy{N@|Y+e~wA@-aje6Py)#dYA4a zT-f%kQt!d(8%EMkqw17(9g+LK-xsCqBy zN42)arJl9dl1>*VHaItL;hz1#hWnWcN*v|4YVkfsoTLyfPd+uib z(OSlSU$!hODRN>`98qy^eADab#vzVpaBX+JE6$S4II0&E1@UJjPKp2!LBnN< z*@dPdCOMf}Th;55U<{nQ79xbu93}3n`8Mw4)?pWpx4fP~Dv7Bo&`lAAQG1W`1njqpN=>{y`$VREIxnWNX{?r0Q?}qTu77GYvzbVK$dm)K6^>e z_gAU`k58ZrOO}7#V8#Hv-a!%NJPF^EyUfv$l8aD>5(&ih6g>VhyFcw7Jct~fMQ*F$?>&Y%}~t%{R{jZyHqAB^H5_z0!N z1;@ulkS+8fL>!V1O0M_M6EMI>-N!n{#`0MZE?C&6g+PRGTuW1v3jd~sif=VcTzqhr zCXACC?w_xCW7Vqw%2FJYLZJ=p@>IQcA<%Vr)LaDuc+(vazMGe_{9x+6OotOTrZhT? zgL+$+pL7uXXfRP+N&QwHf9xb(Y8ot7cuyif~`dRu_Vg|bF!-hW~aV~cZ}J+M4~Ka^0TJf?_{dwCQtbhViW5;ORz z2#4<1I2~o@su1`Nt6hhrvP-JQDnILjLGLzg&n2DJox9NJQVF9=a+4>H=hn!e(;}3| zL9I%NG3`)zIezSf$z%TB@eJ;NYdRqPxe`v}FJ~)D2eb}2;JVCZO@yb_gdB&uF8&@& z5S_PzaQ=T9g6^TaLpOWLpRnzHkJZl463XgCymvO4cquJciapl#m7f<|uK!^vnr}4- z{qmN|5;kjx067Tyf$wAlh829Cb{1%%>)BqqN9bBJy9(=*7IM40dlJt+qNF0KHl!@a&eAsN923}O2uT{r2~+}R1M-Zk9s_~UA}`sV zUEq-H;C49i-!eTO#^atx7je`fqKIbXaSM}96hqo{p?mTl_ZgW9%CzhYv$L}+YilY{ zbx%b_rOfL**z`yDbV#i>Dl_Dd#| zazga-9VIU*)rIdDLqkI?A)pRN#7_J(I*_3lBBpJ*U9J~dSV|zI40Qw`K!m)fCH|%- z&^6}Mr_j>UQjt?>yp;Wjkh7N=2E=kollzrDdo^W%EOCN3hQm>^%=aJpWWprUPi8$0 zb)Q8-7<;B6h-9qBON3d-Fp!LjdFH;4OmRtxLh2>wh#@EJ8n|;fYE}bs-N)`;N8Vj} z$JUW7MsmBX%&^wm1&OtDLdqegjs$0q4{#KN+g;0uqhk>rxQ%;%zlP>Lbw8+1Nk1z( zG8_y=gBK3ezP`T3-#~PVR~Twj@k;ISE-EwtfBGi<-u*B|&nr#M&FBqnp8j`RYx_S> zh|*uS_LA(GendK5WCodwp~5&kzxgeb;F&zcA)qYeDhoIK#6l7pEMZmhSlxc+<`$VZ z5msuNTAz{q;@XJ4Nw`)a&c&^67Vpi;HJKT{+sM(fjca z?b;X|9`SWwDK$#C3C%?z0HPNdcTczB+kW21;2$p{07^X^a)D*E#N*^)Hl2dO^)CX-53_YRE#;c~R6LAP7 z_9G(A66Cyu|3kNyAO8^+6jb%_DBDo+(Pi|4_J*9iX`y+LG<>Fkh%jvY!CJ1N0$hIR zprQ_4(46!U;#mBkMpLzbot=FV>$U4UUa?+5=wAk3@dKo!Jyx*S0<5-4_ zsB(&d@*}MSQSvrl^OEwA2vI=e;p@8(9#F9YL?94?Z3hf#)!)(e^$oo(EEGLBI8frr z3~3z*f0@sGq5J0Rx9>v7EtM@X8beYN88tZ+^(QvgTJ5!`wCPn@0l$;(U1U6yNN zaifcW`;ptw1TGLfK^J0suGL|Q4$(!}t(^thKTz7Lp=+H$C&g3cyl9|_Cj*N9 z9M}5n>lhd;KhFQmcm4V~D1)wX|GtWqRd%yIR0l}7fNqVkJB#l4?Uh|SwO%X(o(-k} zKsZHi%pv?|*ZQbm-DnCXb*CL{`EddE{M{eVNk?FVNPZ0b&!X|ufL8{?5{o$%&5zx8li)=qZtqQR(aK?Ci#u5|$ICwvd{xIYI1si-n87JYb%eHNyx+ zA5)k3%ap{dZVH2WgR3pU{l!*YW6zxGz^mM$b*GF^j@o%D(DrSzXPVuI8k_mHyR$1i ztPx=v7ZF+cgo5pDKDuHwhNH!mGtDR;i-q8VJmOGH1-*FQLL z=M%d`^koMs((>P8FiA=IZvV0+wCMRGNaOqXZWQtQg|ZKiJ{&D^iHWV0dVEdt$b^z# z@5DkWFMa=B3%>8@pe!v-=>IcFVumTPc`>)kq@7+}J&{dZ@3*Xl?vbK|1AXdh)lZxi zK79E^nVYZbkIb4a%^p{*-8r<1SdGYqLBg$I-t^pDsyA=m5QN2+&!6{CO}!I)-j-fg z#uSK67Yu`KQw{iZTenX;J4pU5HCe2At%moROoA_0*Evl;m=?cy!}>lYe*P6DkeHZQ z++{FG3rzZHGhSrASok|poCttK%hDjOw%Oe%pV{D7mzV{{8*)%BXTO|*xP;?o9zs~{ zvn#tMbj^IyO3Tl?i3dN|8acjMfqL(;J~Hc+=0DeWaR&Mo94nwD3i@TSJ|wtza5G+C zDSKxpPTua~&!4$2CDqI+DJgUfqLz2Asi=@b&S)l8CQ;gFN#fn1I%Ofn&w>JB_X%GT zk-(TjdUFM8KJ`$5&fM1iE>vNLFpa2nDJD_E25%$KWiEY|5XsY&uSpdSVk%v(A$^B8 z(N`jdM}oj)?K(7tRA>Ar(*i>Hcz^BpKyr0zJm}?L3o{-8s_%^IuZ^ar=G-my zcdSHF>LJic3F8{i3jiH6b9kQ)I-?k}L=zK}x&1)wMK=QjmOOny3HGRV3+PWs(cZdE zP5>FR>)WF#qCWc|Js|DALN^~x%OxASu<*j0y_#yAq_sB}9QcKTl(}IBraoc2bi`w{ z4DzqjYmIAn=z$(cF_v>a3kC-&p>682*K!U}8bSZC)CB-mHkM_CuZ|<^l%fLJKNLKa zbq9(-I(jywYrx20)JlS3)_d*{sQPvwIs+BBS@yua4Na9M^-v{7rZ+3ssOB zw0Jm3lQg{HO^cUS^z z`_G+}!A%yL-M;fm$=@(*dgD~b;WcJPL{jWgh2svzQijBV(8+){gsz>VW7xQZ`u+Ro zB|*oDE5H$t?$xVTRg|3=g#j80Gs25dplF`t`88<<1wEr$9~#=S+Ny}sPI83eKCmv_ zaps$IuMAsX?1WOZXno6+mytn4ki`Tlm=mND5QY?+ms*+W-S_#lM{+c{*rQ35WkVjk z3T1l;@=*O}6j>(SL=6Mk;De_D0SfHw>;T~7bHslR!fhp9GNXebW=?2c-pNq|ydOA? zazf_t0IoQb8qaewGBOVC_iz0|n5wDx%dc^;bB0U3ny$SX^F9_8HZbt`5)6h~R)j;< zJ_t2hNG4g7j2GGt@>@WPJqJij65MUQeU5NAqNB5uzGhznOzM8+caxC3hWTTgrmEbY zLbIZkrntEie4zDN{@^}I(MD_JN2)6U7aD4xzA=K!Kw^R*>RXL}$;9qAAm9Qj#0MJG z38p9DB6N7k_v7{QQ>=4y5Kz zzAa823-Sm=KrFOI3p}X=9iFqvD-B&JA*=9CBgyZDwe{D^%CSWQRkLQq1TN!F`YR$W zy8D;@C^IP(sZg6WH}*~{?|bYFqXq}TkewY-g8G)9e`2;Nb#`XiV$x@frPS!A`g_jR zKKE9ZDXzSrXB1{BTFZz0(gZFZkpmktF^tO<-Cuqi8JTDt9~5v7X@|D@bM>la2~Box zG(qrqBqbriE3d-$o}%VVfetf}Qi8zIDHBxA<5T1T?$oc0ggX3$;x|EGzY5ek$2HJw zH4+vBZT;v!Z#(sn@?8EhvMDtE{rz)l&j=6g6v@_RvG{3Xq2Gj1-}y&l^QR6?Iz1ha z*?RN$D9!(JlIF%14?RP0?&yt2Yt2O0V{l4y{uWQtowxSmA!iCZ%|6Iwxfsj~zE;X~ zANCVH``;cnc|+J?sKeu76wh4{8$x7C6zl1x4i)#)Fv)aeqY)7GrlcF8;dpm=NJ$l~ zWMCsOF)37-5P($WnB~C)va_&6MDW1J?Bi0?inr|1-h?lzPKvNnhX>|yLR29`=-<;2 zZ=nMiTnu{iLHCuFiRPsSR#sPce_Z&Es1qe99C%XU|AX`okwTT%zqJ2<5cz9=tGfTk z83OSCKSl6=*)k>B?)5;Zasu%?l@Xr)|L{A=cmxG=&9v&N!OxlDZoJ?r#agvSXLq+% zRaF&{2|whU|4#4yGcrhjw3p>(cB-0={f@WbB1wN&9(ux6OmL&Q^EqSd z5)gv9nk0b#2_^yvJVhpo)WgpXY*(H$I&W#uCY*iO5&+^UjQNyob&tVyOB+Adup$G!rRj zL9lB=H%S(0hwaK<+Sw5ULqkJAplT)LA>0xl*mYy8i|Jcuh!N9f-5v0gzfmC61{~U;T$0pte zos!km)n&}n&poMxaKZw}QxC85oE$YO_VUX_P?|2O+L|(jjA*xK*H#{8H(sJjCfq`nyU`A2Vqhx6zA?l2b3}7QD zKR5S*KX;+Qoto-u^D?81{+IGJ(4RU+MmJvh!{LhHX+)73jW)|(r=EF0W7-leq-IJ> zO6r0LDipay?S`%ueFYjaEPIh&j|m=mCn2qSH@w@L(JT00yAa%@Ei)9dBpZ4u(PUj> z0hLmVDSknL{xfvWqXE~|;2_Bdp~fUhM+SgbKp-OS(rA@48U6Ubhk(TuNWbnv4{RFB;jY9`{B9f$>AWpnj>tAdgIFh#@cP})J2`H9n1?HjQhXHM3r zmX(kjXLwh}OrG@39B?yd)1VnPbqt0$qE#P2Ck`~C{2D!OiTdz5sL1n z{5(4UpFW3vf+XC`D^~2(W3JMBXD2fp2U;!&t2%w@OMd?y<=pdkA#gDFtG$~4x8UYay zktQNF6zL`Ol7!@~_}zQ|H{Kg>jOS2BOyit=_Fj9fx#pZ_7jkd1O+rUc&#vRGVZ`Id zdUx;UsB)uzQyu$32zR|J`>LwzAJ+M*b!*`huG>bxKB_}+rT8-g0UqKfD2tk%yEPBe z0&)W|uu*cUJ)`fM{?xxc4&v#H_BJ&hoAxkTM5Xf8lt z&;+5$PCh;c1Ul(JzgzN6Isdow0|zXqPWtsJW<}=x6Le!Ey~|$I`-Bpzq=W>(m%-tU z0w60IrvxSRwMuW^IC(2AU{|T0J9}0e1bed-hYc1-Bt_Ad5lQ{@$*e%VIx*L}D!yvz zo7}EiXu<^PKv(0^<;x7n#E&GpW(GlaM{S3L0K8()o;_U4kcTh?Xm1pn9r_~{f;-{; zd#{qi^Jet!e-KQ1F^h1GQtm_k#{|l@@q%;M;60n+C0GlmmmR-;Nk7JxyBiAAet1=n zdL(UD(ls>@w^S=}Tjgefe8@I>8Q|?=K5dqpkMd^d9Zn#(NyNEC)r*N#;FWPL%k0|+S+R4|w{LckH9|~x zWvxtvnOXNQb$NEsm#7QMi*Mh)A&7v2^=zlIVV_OT9JfDZv7u+ZdR=|7zCjF4)YaEl zL%%EDAJOsKTJ5IStoGku1wN6|XGDG^o)|4i^BUYFbg5B<*O+)xT5lW$Vg^Hn7tub& zZ;9;>g_p6wM@ev<>2u=~sn^{zA{3vh!Hh?1-9%?HOFYJm2sH~RL%-)eufK8BKkv_f zhJ(7i%K9ABMke(4Ut6?k>qq-JypF4=M7=PFMF9HTla(6&BzKrA!vH=AsyHY1jd=$F z7XhZ@w-Tqmah~7HXncc(WlKajz7)A?P^uY64v?A}o15KkuN{4`bOR|3 zx@ThYvd)#0nF&H=eZyaxxlQ&Ica`hd4*MU8Q9Z<(PMQx9 zmy%-or>g6f%D(05;YvlM@YvCNtJ7B(KUn97!(TkE%36WSm~iAeGnbeKr7ZeKC@7+h z(L@+n&OPY6_Kg!mTU&USuhBM}rCGDs*B@!lFSg{3x+pTnix&f%p2>^?&KT=?z_r`T>%{j7;p7)90#{7l z=Xum8@V~USp4Zk_} z`wq8oSs7Y35(=5>>)UtlYCAdQHh+XELT8&R-tiqepP>BU8tkcu@iK8L-a_}w7UcGW z(}Ma^qtwWC>%j5zx*Lk>>Q)>Cm?2zUx6>)7{3@2it;<}uk2b`Fi~sg-YHG^N%tVm5 z9S@heEPWL3X(+0uNV-V_iBb9)8}+vX#!HtjDcXM*1THKi)^Blpqzsjbc8WLianqNlL?&O_jC+c9 z<|MJJF3+^S)mZM<&6}J}b1DfflSMssrnk)m6B8tnHS0sJZf^A@pPihXM%++8Rs=)t zX*KimDiyr(_QmBTZhsVe$H|GmVu4IqZmkN#4z8rVdBe!b$;p*(7#>_B_RUww_Pd6$ zn_HpT)nOJ;Z?S?r3}z5Lh;TicPm)s$*c!Tg?b;#HU2i)LxCKFaQVX2SR~Xz>7NZv= zfB#-)SL$gZT7^1ChosOb6Sa>;)ab&6>Njs{-Ix9}72F^F>Y+zC6{L=3;P&_3iKJF@ znk{X8$Aw;4k{j)wf_A1y>Wv1j(oO@p)XJqM?YJV9sI@iE8-&V-M-89Jx>PxB>!l?m zs4TvVq$V_}9C?;C(P~uv@aPMQe?4T?j>^mS!p?E^Xu^{(4GmGPO)aB&Br9|CtV}`~ z>F~tgwXXMQZzyESbV4jN;6t*YusLnfbjQJ=me2T9Ac00*pZ~>+0O=&!ZQ{p6)0@ql zn^$}PQZp+4Hk=4y+M);nY&qJ`RsOQ1Ge zfN${*+gew_Oyue^F1rKe&wZaY;I{B4m&!V(ZlM=?FlskS>U1N{kd4DLOSk;ftExnx z-|*_xgQNY$U5}%qw-Nd9uU~6ACQrz9to1Q9iJb(s#0N6JHLp3)UZbL-w69;6l9ZCF z$^Qn*-})~P`4+$M8Kd6MMS$H4+lU?cM41F#^A3SK|1kjzz4A~fN~GD8hwu&k`?jqo38On+yM4E`hzy>F^cs~6)4I=;;!!6Ejjmh(5NCiU}Xi+y23 z_X8npna0zk4?T`{s{#esZ3n70A&)P?D|oXv%rBHCt)E_H?{J7%{(%Q6tYxV)%8%P@ z#vY~n0o1{eh~#~psDo|DEdqH+Z!*!OcNfwC{ySn+HCme;+RC8bqNRV zgl}}5RbWFFYS|SE^6@AYU`Np^YvO7o?eFh{)C}uAygfXUaUHYX?-t}9|GIpOsfA!_ zuU^iDh+9de*UD^et+O2UTTK@_xx_7k?=aAINtNw5L)HcnG0<$nxyQ>UlKI|V-R(6R z7z7uTwy`nE@_9ss=n)6Y5qTlXkWL*ZXMCIS5;e zYFGZt(g|Xf7w!8mPiGsi*?|D`KOP?cKS(=Y=8_cuW&1=>KinVHvsX@_7uj9Q4-ds&%z+%f6SVI)Tm83`kfBgmHT~UKDeb_%p3B?+mr4mFz}9LvQ^0!7D>=lZ@9wATIDHg!?SDM1~?>P&OFCfC_ z{?ry&SYw|kPa#Oz0_uAy;nAya!AL-Jd=CRR!GRQhltp7B;C%e4p0Uld0t%8RrI~qo zc_ET%0dDk0Qc46&9EM51&5ndHfun>HFiM8j3Kx2rPeB+MLWP+zy}#&?tqgEEVE;LS z{)!S0s`>rr#(j##`9~YSe|In<2PjS4&}rmC?yaFYXOVz-W?wg!DwCP}JguyK_ ze_12&kQpmnhlzas?^4-VRT=M3j{hSOHu+yNK}>Tf;iWtI-i=X1bQe=EMmQoW>X|?8 z-^wctm>baIrppzOh)0h+D&8+Gxq|76DCih;@1A8J(R-}3`9jVSrG&73B&e10-@^@= zm%AT?95XEaY#bxP1^qCni|&tESX$OU*cgR5@ESsHj!AAUWXSi3RqG>=_(Fy%On1(L zT@A3w5x@&Q$qoO8jk@|)|6R2#q6&D@4qsAM7sJ-I#~^bY|B*D)d9>8Ir}m`)Kbs$# zh-pn>-$tJUuA0AYeE78OnowcB)+h0ZmJTF?!7Fc-k)C^49^^84g#eg zCC|L@3qsAoZtdvIFpjg*b3h$rs}~=+oK9;WTCT&?%*R~%U|YxR?&a~Yv#7XOQ$7S1 zZ+e#~4qz+*G!fW8+6M<8Ln`OfU+`dgd>C>+@R!*6^x3m|TMLW5kZ|9epzk2iVf@qD z+v;dj=w(xFiIBQOG4F9l&yp|m0`jTtuMFDYtF}& z*Y1`zRBr_3npgKv@NgksH|(6g{6)BC8T&xjop%Ov^xvvByyShG9q<>RA1(XP_tJhL`kgHFje5pPqku9<=GZE}A8D`dtmAe@C&irABd zgoNll>X1$ zRz+~({o3tzToxWarKHYUgRujm_2zr5;;N7o-%m6%@inq0ZcT0Alr)3km2qBCJbU$-rC<|Mf-Zz3aj98>Txrdix{IGbYc8v@r|1qJ2)XuG4CM8@cb-Qb_Ol{f z!m2|qc*ZyCEe@r9Q=qyhjdpM&Q5oyGNo8J*Oaa;Rjt3%x`W(;Sp6p3F%_4qyjD7wB zGQ^azUFB`r!d%f{oK?I^ql;p<)LeD9)K0y%QzxyCbYPYHw#=V9zkmMCzVAiT)amA* zgNQu6tQx@j1$$)@Ju+cn(X@!vfhkv8ngDhva&eTYdi+n*v+0e+@$s7d?7I`$$9eg0 z^9Egh_KX2>QhzOVfjnnJ4|FfYC4SS#xJ9Gr#jUyRPY_95`*l_7*RNj-){SH8JLe(? zUCvx@wIm#MENXE7aMs}(DD78>BK9vp*A&_x; z#I-av(JObO;?nDsMu7#|ubZ|2n{B{sWkC8$U09G$AcF;@Ow^h!V5y4eZ=BnB+xRA3 zJtxY-PV8hdR5uNcWO_2-y#BiY%od|X)%SKYZSb51u~KVIgL7%8*eFhuLK;Xxwic(o z($EPO9@pYtA*Xxm8u!L-$A3}Ypkf)siwX{CZI*WKJ9Smc$8=OTX_6Pvy)e)OuE-&RXwZSGj<*l*Z)RreFm#{ z#hoxUvi079;hn;~lZKtjr_y-16pt!!QP1D%xKo@CAI-01Z$J|gp7gj~v{n4p{r<_B z-G^8=Ihui;C*6{G;<91uH%6ZyU~VNd8j(`4zkq8`klRFSPU~2SGIAk!VW{TyfICE* zmoh1Smv*X@v+b_#?Ckt-qiN^<+5v9n75$@rOjUT9*9)5yDN;&G{GgV;hz8@Hv-_bO17OQVST75$#`)b$PEjOIB}4-e5U zarMa8Pz#U-0PgU)WjqmCGx@arPd| zV%V{&*7`Ke^Y=Z{FW_JCDi=oehGaSP0I`~`+g#I|5^BLisx}4z~$JGtWlqabQ zxc2Au3BV8YxJIU4DgGp8Ty^oFmG4~f(*bAGXf8saYF=69g11{CfraEs?v8wu| zEValre21ANvuPev(tDVvOLeh2p11Ps?nALK&n^}b+ZV^}y}b-?>!4mCcFCTZ>4kmE zCyj}bZke|25LbH_e24Za5*O|6fOIk&h2o+^n_K-YnB%}ulqf{vHd}No{dac`VjWE@ zbJ_wXdQN`cQpxZ#aTec1{ra3VW(U#~b9@+{d~ zO0wq26}%`A7#$XVscqM|AUo(25g?ko8pSTL9eq-%O9>sy_v_C)w-~=h(W)5n&uD@z z&>|j#R!jCe2+gSoIep4yL@*L&6|h?ki9~c+jwFauNcZ12&wxkf*+VI_?Rzk-Xg=C2wDxSf?6f^6%4Igt5W&Tg^asd^>&Xmdw+qPu=AR7R*fZIm=8} zZ&kAW+$Q9OB% zEOkLQeq(1-tjLbK_a-q5LbHsGX3M_eSmf1u#UM|mL!Q+`_Y?wC6G|}sPW3<10aPt1 zrQ^pB0KM$#KEv!%K$66&nx=(h^vF0^R(oPOTRv9GrU^L>rIXn5U!O!{}# zxc;bf8~{{1-pqNRl~P)t){hg%7_Zil-9wMJ`PvAo`xG_Q>kpfxqz!Xtkc2r=)h;Ya zibynGJ+hN}FT1sUq1)=juN(L>B6@0r?cr`IN9DKDGC8)Y)|9~)6Z~=}24L-AnvA{u z_g^#z!G6PV?JA#F_G}hdOCools2uWnDx*%_`50v|i z-vr-&JmP-RL+n!e_&Be>uCSl|gH<)BE35h&kFu*fF!#3XuZa0>6`mp`J;rZkq;$Es zN=TNkp=Y1(`*Xwo&D_s}?ujRYK{5Q{M*#I*%No->&mqSA-D!XU;C71Wq!8Zd@2X)} zs1#q#VU*`#iRWh6^+?poVAZ^pTYN}FU@FERO;zL4BhYMHMFbvgu?wn_jq!VMT9UdW zLp8TgJlF}8P=nd2vueLvTfrMLVN8@b+Xwcb=>F;+oSntO0vsJAFfT zh;i|B|}s))zs+&us9V z7VDANh$03V`Xh;u5N0M-cvAa-yu5O8gExf8y`?uLy%2rdWUeJDgj8-^=vf1-`l#Z$qt&QPCB{vuA@lr*zEC z|7j>^-?8K8riH5;>UPn}YOb(S{0;v?eUyM4d|jY7DC)D8!FZuM)6{m7UJkHC($H*; zV_hzPr~(24a`s^^Qd?)&x^4P@AG!Ua@BWt8J5qFvkQ#G0dds0vGZ06b68l62GU&~* zZ!hSCxsT=%iE5`iL- ziAdv+{Ch&Q(@PmK=K@zpW3D^X07T|@`rI}6$G+jQ$VF~~JsG>j*XH_G)NnU@^(lA3 zIVUI4QDo@3@$0M3^uty_@FnHBx)kTgGbP^h?k6u^xG;2iKpuv$GG_qv3Xz$ysBi0K zG6UEKcz&ksmd25L1Jo8`zTs;fil^n*;X$_AG61EMRMigpIC5X10qDULR=($${Q;Al zt6nE~AG3VKT&c|YE=h6zUBCe5h7WxZJ;3pE5>I^ zwS7U?1U)kKL=d6_d**6)2Iugln>Y8{wfipvCWy&6)Dx%;W2?$PGC3m$FN(Xh&;NBrt~b2G2qiWJ4DDyFESW7AsaYM^cwyD zlEbavzptp#fJX;rFq(0DGO0EZk%jmLIWDvI9r*SYGW)g|_3|rIsvgWB6`E$S;;3rE zQ;z=hd(e36n$XT|Bdb!52h9rC9z29Oq0*YqNqF-nH$62K38;AZP&x4~FIv+}@cZx` zlpyKMo(V0?pN$chJ9ien7k!CU85JEDfW;SmQUf{(e&8Aw3W*%y9zZTIa4m~0T0%bH zO4Qch?|6IcL@yQ6vN5&GI~H08x*D4d8VYX6Awz!*Wq!CPht7aX?N%gNoC2?HSZOmE z)%owG$k4brSkQ%$lzbsRXg<`e@XGGj)F#*!7$0?l@jMf zZ?&G=b(y0dpT)+W6nvzV5u21Udu%JXMNM*E#g`VmDTiC(yS#=O3#KVjw#3%rd^u^9 z7AjS@7Xu;y-7C4vOH0V->(`>ZZdyi}4Nkd}j<0v3M$6XWz0Cb&eQa}!3Sri35Da6x z7EhF3i~Je&QGJ})@5|^?z4?wr0o1-8B-Pv%1M?q*|6S|j8>?;Xcs}WK0m_tj85u%* ztEJ}FRbLGJ;xg?vN2>VCd?&tN)KL|*JzGuYXk%Q?zBOaJ3})C-$TF~ zkaJDsf+V!uGHZG(M9Kz>pwYzE2DVksp<+dkI;t|%l8nGBhZ&1*6`%A6q^LZ@=I>>j zQW+GB0Oe{ucI*VCM`RR0q=3v~^5YVGLBWNlCIkJumTJFpvH2BTAEH@VhVAwo-32qt z>~~uPVeEz!I(swo#BU+7=p`@6uMQq;I*#ulgSTDlqi;2zn!kRTqb5wb+;-G4D#;)? z6#HDMF23F8HWTVnbu*Z=Sir~R$`u0#l@Pj?E>$!5XT#xAw4V|AH1^Vx&h)!l1gO5@ zDMb9li9LXHi7tO}M}C)k^h%WT!Iq_j zDwM`llYijMH6s2WYN8_+GbB`5zx^dJ<)CpJ3$3SpPQ`sw?ve@$#z`!nd<~(mq#14} zGUB0GA>jwUyHApm9s!?h7>sA8SLk>VlwBsEStuo+6X+~)A;=Hl$aDVLOKtS%)#>sc zbHPQ*XSloK?q}-GJbZr9H*^lxO8Crs7mvBY6K>Dp1hT9W7%ueXMn=`{Gt|oIf4ncM zp16?iF+-_V@L$Dr?ze61C7f9nQ+?gIq*b?NPedy>_Z#kLb~$pJR)6xl4~;y-k{UJ# z#O-2pLucnapSkmQ?qo@hKb&3#JpAnoIa65(fzJ?|)@1eAnLO~r2#SNA7!V#p2WdNaQh78GYA;p?5);bUGL6u!cGs=|5H-? zixBL0oU+A9*jm+RBu$|zo%!`-=NG^we!9l2Zj@2js@W$N9N5;&JT0>Cy`tQ z#5UDd&BrE{$q_Obi4Z|HdKUHN#Ovc^o~x6$kFy=2CqH_12nw0p{pe3KZ z!@Vw`XG>^?pn$dZ7_%OE9IV*gO^lKP$cR_iBwF zvU-brCJ{~vE#e>0j{uzScaGL1_TJPsPlj*m5;H;Q=|o3I$B_F;^;#IEtV5HN@*1p0hr~yYz_8gmZLE5SJ6Ai%r0K!?IfSGd-n9{&h2I9NWck~TXy7gO;RDB z9CzOs8&7Mx$oB$yvr5}YxV%u)p7w5Y)Sm`%oY+Dir;CqD%?>eC^`fHNT%R$WCIs_9 zx|xl6i^vD%vla&OFqpeoV6_W+a4uk7kb!&#Cu6Z+Boe9o!mmPyE?IQ@U!;!>DIb4% zKwI{dvAJHSSW9=i7)m{HR^T9Z&MJDwnGo2XFQPZ_{p_%7nYhXc4mL5jm-3fPFe|Ld zgC(4syV)JC$=87k8PrS(tJH=dDFxikX}0)soVcUVGu}(7S8dWk?k82N;2-Mt<$)TTmfoS7 zA;^eL!Z?M(zyX~@Ncqt35pZg72azwQ&^WJ_bPf53h5;X;< z4qL`kaoNwM_;;y((+o;}I^>b#!vg$`Lh@zX(0p_uZx~m&PH@E2Yrcfl&4jUT=kQ-s zAI*P0=*>K2&+F}-$w zyRuVn2oPzWsU-|Eh_@(?%lG4e=Y@}^Lctk zdMAx4euR-W5k#-oQ8Vs@L^Hj=h|rA;5Ffd~zmpk_;BoEhOA_TbbK?y6lPQ6q?bM{@@r2E@`t zeo4+nAARJn_D5RZfZ;$ahG19IaGtA^Lf=!!EmVrsR9s#)$w7${Df{6ioD%&G0>%2O zza)cl@tb!4ln(lw<@{cf99*)`P_dH+_aZW6A8)<<^^r(0{cM0p)pq*6*2}J&kA>C7 zy~;pB;z0pF8^Jq;!;K%VXXazWzkSm|V|Kj#K)rUwM8ozCq&gX>xIc|?m>6_CP5xY3 z3e|flrzUOUN_k1sSzL?p&mpDxIkh8W--H(X3)G&F7rAY;U;2FWCo0V_=<`9i$fg}P zb5#D^zAdh0=RGpx=G-P<*N|J?{y3X&&kuUfrW1t5#SF;CsG}c^88RfLS0_$y9v;dSGY*6N^U!&1ea?(&_83fFZzzl~?6( zyY;KxhLaf>YYIqkB3U`*<2a(~{mTc&Tx%pN#A!AP@2abKF6UM9=KG-%)b7=zhYD)$ zx5y)(8WW_pG$K|}hxNXuN#CzK+6G0wp{ewVP!X(8 zG*^tvDK+yLBIl2~JjUkGEG;h|vo&;8P&?pp;D^`=M*Uwt=Nv5}tCmQ~-Rp^830)!F zn7%-{Cw;eQEc!7ctK5TEQvgu(r7!fYGv@W+g@Ld)(C>0UZHUM2J!T&*ncd>!l))5= z{WoK^pl7TQrZqNVdw6tM+^EpfCwpNeY`@;x4owIlliel0{ANqb=m5i)Vdsfy z{~cBY@G>}<<7`;PP_=w#$s8juAhidb4&$Yr0R34Uy-75_&=GYS% zHohBfh_e5W*atuuP|KztKlI$(j{W7Y8f$F6-8T-FHXMf9;n~ez$sX8#X{~0t{7T7o zV+ac5AmxY%o}F`1BQO^SDGn)r9!n2++@0VieN|E1caROl_kvHKzb*0iXmV{^(1x9R zQf%94C$HSxqjwvCB&1%eK)511zfrvi#u~}Xl4h|&DaJ#c`dZWbxl=2Pe#iU!U+1!VF7ho(GXNl}H=<@p_s!Hn_ z`5u1@>psyE%uG6Ds=mAfd3P$Xd=U#0<(6vbAJ%J1O4DtU6^K6Hp^rJn!{IoTbbUbK zs)#FA zbve-eFl(0{gmcp~0Tf-FKUmv%W*=<7AJHEjx{;G>7v@II5?zUGVtMiLnR5#CSFr1P zrv|-}ey)`|t<1F)_o4jfQE1)moSyQkLOKW+{yiTB9|@f+hdC;)i^FG9@gUdz@Mj`t zhJVg3O#}x+|7%N>;o3@F?wqgXl`kzjhW>@-Ux{eIYsp)IZR`?_Ez_NcBcSA?T32dE ze9k;WN1@)Jv4RKXbpTHdwz3x<^`@;KR9$(uXzu|qV4eOvb~ zKw9X=^SHRPdGUKas^k;u+w7HLCPv|k8I82`-Rqcjs@3J7vLRqrWCKec@^Q||KE{!* zw~IZh@b7>bL)rtV;1T^p;o<;EP2#i+?$OiIBZi08jo?g~28>Zww(qG!Q9N3Wq2aoo zHT#=0dzD1aKi;cNzVnMD_K#BY71-H~Q9m4wRU*)Kdm_)yLNFaUAfK>(e@e9W=1-OPB zwG5)9(PfmZ&$>uYE%&|SmDm=rS1UF_7lw*Y>s&D0^XgwflgH$L&}NOj3j!!0^hfMn z80qP)D*d<6-)AQdNiAf-kZZHjb8Y%V=GuRO(*I}f`+s{I`v3VpO=3vd+LrWK(XuLH z<82|$_(-8_)bi3>l?A{lt^n^HK|n#kdRzm<4iV&*L7ELUs&ziR#Xk5@^MON$j(^Gb zU{w4C_KZW# zVVkRo?Q1M<%*)~AEv5i$uG#Ph3RHa00Wu0H=0Yjdb-XEVAy`c3hSlq(p+hm2|$5cy(eFtcFbe&13sT!RReDSK#!u(Ff+;Fho2di(*x}3VI`Ux z)Nbp`6LSL+CX!-%^uI*arQuT>3v9Nj>%o(@!Mi zo4mg;9V2qN0kgSs`I>vX?(Z@;8PECtEV_UPRRc=5pS5p`Qg_IoPje-GitE+n=aF&N zJF<>qm)FBzP=rj+Dxs*^18R$N%H~K)%xQ2VI@?qE;8^Q6`rK(_8v?ibdr+n!<}dGe zT{V3T?j~TKGu`qv`?+_s;UM?J>=uqLHWTvp1WjYTIlK)Q@;d-N+z1-5E$D_{=#qIdi4;j zq8SjQqN3EXFKow^m6@%)^z@kH6B2+dl^4r&zpIb?ps~|!Eqi-uD8l^4#V|NwfSXod zt$k+VR=h_)BHRMo5L{c=yE&x(3iORka+Ihzg|prj>nP7TBUxlXCOnuBxeRj+vn2rj zW(%ti6&N@!=MXHQ5mW#U+A()PNdYBfV`F1Lz1>B*L1-|mdQ9&saUST+IDHC;m&IG2 zfTn=|f=Ar-A!(R%S`8DD->>GF7^ckig#HbZ8=6nLN!eHw1T3UO|M7~Mo=|nM z`p1ywsHn*23CDcgR$-S6f-ZatOP?qGbccueJ_D%y9Pa3r)%uK1naL zD#2ZUS8M++eDm0j2ZEe`gY7JdVW?Vd_RL_T&b3pY*bX)|sXkcR7cjWi1?HNypv$=r z1T3&wVRf|>g4z3Xd_Nez0fG8*xPKN7|0&bpgS52x-3=bPzUuz{-O4V5hi<|{aCLjS z#=FKvM?vmC)<*<}wXcPs%%6f;5W0+Un$xgWBC$JUB<0wx$4C7(7GlG}agu#&CA`kx z>-P)G25HIsj4Y4N#Zdr*g1Q`ZLH)K%H}K5?`0tYUU$^IUFv!?ERXZ>)Ai#f6U%p)U zpf=w^n#?c5)>F&TE8pa|b8Bp*)nhHUkT;!ec%+u6PF$}fUvR|R%RQ*8F+v+Sfh`yQ*#xb&Q z*lX^U^KpbP&S4p}`H+AbxE(I*Lq(1A7m8s2^c8lGJ8UU^he`Lq=vGai%N4LW`nv?t z-)m9Rr7xw+*w4Ghk**1q-1`2CcX8oxd~(FJ%4hj)^g}g}q9-WEP*Ck^zjfc&x55~C zs9ZyN!zeHN=rsorhece)_fEntIZG-Yw!DJZUBKP3OxK@e4*2HnW%;UcI zC7rmC*U<@8RUzB7g=!hRkaaGC-i4C!(lb**SOYsjCo#Dp4_F-|PuPzJ@a>H1_X@Xi zqT1?h>=xv&X879=T%_YxUylF9vc5<$_-g*Uv4-gU+b)C;bNmZF!ShUX@Q8k9Urzs@ bUL=jFF2?MSk4A9-0)Gs3jdb#~Y=ZtTdbVTq From bb2f19fe7d3f70d0d7c05663f314acd763d154ec Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 05:14:51 -0400 Subject: [PATCH 21/33] Map fixes, and a comment removal --- code/modules/projectiles/ammunition/boxes.dm | 22 -------------------- maps/northern_star/polaris-1.dmm | 6 +++--- maps/northern_star/polaris-2.dmm | 6 +++--- 3 files changed, 6 insertions(+), 28 deletions(-) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index a43741bbc2..46c94ed1e6 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -232,28 +232,6 @@ /obj/item/ammo_magazine/box/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/m10mm diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index 09fa0e217a..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/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) +"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/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) +"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/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/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 9708404aa3..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) @@ -872,7 +872,7 @@ "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/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/weapon/gun/projectile/automatic/m9mmp90,/obj/item/weapon/gun/projectile/automatic/m9mmp90,/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) @@ -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) From 48f668de9509e3668c844979d1be70fe0bf3824c Mon Sep 17 00:00:00 2001 From: Bromuzl Date: Sat, 27 May 2017 04:38:15 -0500 Subject: [PATCH 22/33] Adds ported high-tops to loadout Extends the high-top port to load-outs, --- .../preference_setup/loadout/loadout_shoes.dm | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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 From cfab9dd6ac1a41ece3ffe8d7454d37b9936e7140 Mon Sep 17 00:00:00 2001 From: Bromuzl Date: Sat, 27 May 2017 04:46:20 -0500 Subject: [PATCH 23/33] High-top consistency tweak Adjusts background all references to "hitop" and in-game references to "high-tops" to maintain consistency. See icons/obj/clothing/shoes.dmi --- code/modules/clothing/shoes/colour.dm | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) 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 From 36544bc7daf51665d676e9d93e0246975ed1fca2 Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 16:23:39 -0400 Subject: [PATCH 24/33] Documentation, proper file naming, and more consistency --- .../ammunition/{boxes.dm => magazines.dm} | 995 +++++++++--------- .../ammunition/{bullets.dm => rounds.dm} | 610 ++++++----- .../projectiles/guns/projectile/automatic.dm | 2 +- .../projectiles/guns/projectile/revolver.dm | 4 +- .../projectiles/guns/projectile/shotgun.dm | 4 +- polaris.dme | 4 +- 6 files changed, 836 insertions(+), 783 deletions(-) rename code/modules/projectiles/ammunition/{boxes.dm => magazines.dm} (90%) rename code/modules/projectiles/ammunition/{bullets.dm => rounds.dm} (85%) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/magazines.dm similarity index 90% rename from code/modules/projectiles/ammunition/boxes.dm rename to code/modules/projectiles/ammunition/magazines.dm index 46c94ed1e6..92512b0dd1 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -1,487 +1,510 @@ -///////// .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 = "ammunition box (.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 = "a556" - 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 - 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 = "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/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 = "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/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 = ".50" - matter = list(DEFAULT_WALL_MATERIAL = 1260) - ammo_type = /obj/item/ammo_casing/a50 - 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 = ".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/m762 - name = "magazine (7.62mm)" - icon_state = "m762-small" - mag_type = MAGAZINE - caliber = "a762" - 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 = "a762" - 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 = "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/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 = "shotgun" - 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 +/************************************************************************/ +/* +# 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_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 + 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 85% rename from code/modules/projectiles/ammunition/bullets.dm rename to code/modules/projectiles/ammunition/rounds.dm index aa34925cef..624c0e6f76 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -1,291 +1,321 @@ -/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/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) - -/* - * 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 - -/* -/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/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) - -/* - * Shotguns - */ - -/obj/item/ammo_casing/a12g - 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/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) - -/* - * 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 + +//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) + +/* + * 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 a3e1f671ec..9bb9862fd3 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -252,7 +252,7 @@ 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 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index a92e59982c..36a929af28 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -107,7 +107,7 @@ 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' @@ -127,7 +127,7 @@ caliber = "38" ammo_type = /obj/item/ammo_casing/a38 var/secondary_max_shells = 1 - var/secondary_caliber = "shotgun" + var/secondary_caliber = "12g" var/secondary_ammo_type = /obj/item/ammo_casing/a12g var/flipped_firing = 0 var/list/secondary_loaded = list() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 80d1a09d78..bc14bb9425 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -8,7 +8,7 @@ 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/a12g/beanbag @@ -64,7 +64,7 @@ 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/a12g/beanbag diff --git a/polaris.dme b/polaris.dme index 9f075b1d76..92abfde4f5 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1876,8 +1876,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" From ae3d877730869ab198896feb23e1bab5f3c94b15 Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 16:25:38 -0400 Subject: [PATCH 25/33] Might be helpful if I clicked save on my files --- code/modules/projectiles/ammunition/rounds.dm | 4 +++- code/modules/projectiles/guns/projectile/automatic.dm | 8 ++++---- code/modules/projectiles/guns/projectile/boltaction.dm | 4 ++-- code/modules/projectiles/guns/projectile/pistol.dm | 4 ++-- code/modules/projectiles/guns/projectile/revolver.dm | 6 +++--- code/modules/projectiles/guns/projectile/sniper.dm | 2 +- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index 624c0e6f76..3230e6ed62 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -258,7 +258,9 @@ desc = "A 7.62mm hollow-point bullet casing." projectile_type = /obj/item/projectile/bullet/rifle/a762/hollow -//145mm +/* + * 14.5mm (anti-materiel rifle round) + */ /obj/item/ammo_casing/a145 desc = "A 14.5mm shell." diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 9bb9862fd3..5abcead8f3 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -56,7 +56,7 @@ 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 @@ -109,7 +109,7 @@ 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' @@ -181,7 +181,7 @@ 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? @@ -350,7 +350,7 @@ 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 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 69fa353a52..ba5f4f147d 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -120,7 +120,7 @@ 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/m50 @@ -168,7 +168,7 @@ 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" diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 36a929af28..3886450fcf 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -43,7 +43,7 @@ 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/a38 @@ -71,7 +71,7 @@ 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/a38 @@ -124,7 +124,7 @@ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) handle_casings = CYCLE_CASINGS max_shells = 9 - caliber = "38" + caliber = ".38" ammo_type = /obj/item/ammo_casing/a38 var/secondary_max_shells = 1 var/secondary_caliber = "12g" diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 8afda4b63b..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 From cef9c4f98d0afa61c9369a60a677541d3472cffd Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 16:27:05 -0400 Subject: [PATCH 26/33] One last thing. --- code/modules/projectiles/ammunition/magazines.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 92512b0dd1..cd80854af3 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -15,7 +15,10 @@ # Likewise, when creating new rounds, the caliber variable should match whatever # the name says. # -# This comment is copied in magazines.dm as well. +# 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. */ /************************************************************************/ From 3a0bdf5cf963aca113d269d1d88556f60e1d5e1e Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 16:31:17 -0400 Subject: [PATCH 27/33] Name tweak for Anewbe --- code/modules/projectiles/ammunition/magazines.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index cd80854af3..6202e03cde 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -329,6 +329,7 @@ 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 From ef2883ff7e796cf43addd7dfed0669ed2f664fe1 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Tue, 30 May 2017 16:32:40 +0100 Subject: [PATCH 28/33] Drop pod issue fix --- code/modules/random_map/drop/drop_types.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index 43f89b4ec7..7c505607bd 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -71,7 +71,7 @@ var/global/list/datum/supply_drop_loot/supply_drop /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, @@ -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, From 2c8df87899c35a0fde9b3f5ba796c48bc672fc25 Mon Sep 17 00:00:00 2001 From: Leshana Date: Tue, 30 May 2017 12:45:21 -0400 Subject: [PATCH 29/33] Tweak to Radiation Optimization * Optimized garbage collection of radiation sources until we get qdel() hints. * Made the RADIATION_LOWER_LIMIT configurable (option for people to save some cpu time) * Added some comments and broke the proccessor into separate procs for profiling purposes * Added a changelog. --- code/controllers/Processes/radiation.dm | 11 +++++++++-- code/controllers/configuration.dm | 3 +++ code/datums/repositories/radiation.dm | 13 ++++++++++--- config/example/config.txt | 3 +++ html/changelogs/Leshana-Radiation.yml | 5 +++++ 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 html/changelogs/Leshana-Radiation.yml diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm index e64f71ebb7..192acf5d5c 100644 --- a/code/controllers/Processes/radiation.dm +++ b/code/controllers/Processes/radiation.dm @@ -7,7 +7,12 @@ linked = radiation_repository /datum/controller/process/radiation/doWork() - // Step 1 - Sources Decay + 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)) @@ -20,7 +25,8 @@ sources.Remove(S) SCHECK // This scheck probably just wastes resources, but better safe than sorry in this case. - // Step 2 - Cache Expires +// 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)) @@ -32,6 +38,7 @@ 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) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index c22ac1bc81..51fc286928 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -720,6 +720,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/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 457e423b4e..5471282026 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -19,14 +19,23 @@ var/global/repository/radiation/radiation_repository = new() 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) + 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) @@ -76,7 +85,6 @@ var/global/repository/radiation/radiation_repository = new() S.source_turf = get_turf(source) S.update_rad_power(power) add_source(S) - return S // Sets the radiation in a range to a constant value. /repository/radiation/proc/flat_radiate(source, power, range, var/respect_maint = FALSE) @@ -89,7 +97,6 @@ var/global/repository/radiation/radiation_repository = new() S.source_turf = get_turf(source) S.update_rad_power(power) add_source(S) - return 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) diff --git a/config/example/config.txt b/config/example/config.txt index 232d3c66ad..52892bc14a 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." From 64ff8bed081a0e72658143aef8ec661f50340580 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 16:25:55 -0400 Subject: [PATCH 30/33] Please let the blood go away You can't qdel lists. --- code/modules/mob/living/carbon/human/human.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 66abc50cab..aa9ec53cfe 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1015,7 +1015,8 @@ gunshot_residue = null if(clean_feet && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len) feet_blood_color = null - qdel(feet_blood_DNA) + feet_blood_DNA.Cut() + feet_blood_DNA = null update_inv_shoes(1) return 1 From a0a390e8875908ba440588e58908bbecd0656e9b Mon Sep 17 00:00:00 2001 From: Neerti Date: Wed, 31 May 2017 17:41:02 -0400 Subject: [PATCH 31/33] Surgery Modifications Semi-rewrites how surgery failure works. Using an improper surface will call the surgery step's fail proc instead of just doing a melee attack. Adds 'surgery odds' var to objs, which determines effectiveness. The numbers for operating tables/roller beds/tables remain unchanged from the previous version, however doing it this way makes it cleaner to add new surfaces in the future. Adds a proc to get a surgery surface. Also makes burn repair on FBPs more efficent, so that one scorched robot does not take literally all of robotic's wires. --- code/_helpers/unsorted.dm | 20 ++++++++--- code/game/machinery/OpTable.dm | 1 + .../structures/stool_bed_chair_nest/bed.dm | 1 + code/modules/power/cable.dm | 4 +-- code/modules/surgery/surgery.dm | 33 +++++++++++++++---- code/modules/tables/tables.dm | 1 + 6 files changed, 46 insertions(+), 14 deletions(-) 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/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/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 8f91f12b26..1b9d897b99 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -203,6 +203,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/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/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 72cc6dbf8b..db445e9f50 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -8,6 +8,7 @@ climbable = 1 layer = 2.8 throwpass = 1 + surgery_odds = 66 var/flipped = 0 var/maxhealth = 10 var/health = 10 From 9d8f4cfa539534374c69f77e86393b94a2f156b7 Mon Sep 17 00:00:00 2001 From: Anewbe Date: Wed, 31 May 2017 19:38:07 -0500 Subject: [PATCH 32/33] Fixes Death Alarms --- code/game/objects/items/weapons/implants/implant.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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) From b5802fb1854ccaa26ec13967b961e986931b337f Mon Sep 17 00:00:00 2001 From: Neerti Date: Thu, 1 Jun 2017 15:05:51 -0400 Subject: [PATCH 33/33] Makes Mechs Fall Mechs now will fall when crossing an open tile. Anything below that tile will have a bad day. Also makes lighting overlays unable to fall just incase. --- code/modules/multiz/movement.dm | 50 +++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 122e1aa4cd..b54fc3efc1 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -23,12 +23,12 @@ if(!istype(start)) to_chat(src, "You are unable to move from here.") return 0 - + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) if(!destination) to_chat(src, "There is nothing of interest in this direction.") return 0 - + if(!start.CanZPass(src, direction)) to_chat(src, "\The [start] is in the way.") return 0 @@ -154,6 +154,28 @@ /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() + var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, loc) + if(lattice) + var/area/area = get_area(src) + if(area.has_gravity()) + // 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) + + // See if something prevents us from falling. + var/turf/below = GetBelow(src) + for(var/atom/A in below) + if(!A.CanPass(src, src.loc)) + return FALSE + + return TRUE + /obj/item/pipe/can_fall() var/turf/simulated/open/below = loc below = below.below @@ -195,4 +217,26 @@ apply_damage(rand(0, damage), BRUTE, BP_L_ARM) apply_damage(rand(0, damage), BRUTE, BP_R_ARM) Weaken(4) - updatehealth() \ No newline at end of file + updatehealth() + +/obj/mecha/handle_fall(var/turf/landing) + if(..()) + return + + // Tell the pilot that they just dropped down with a superheavy mecha. + if(occupant) + to_chat(occupant, "\The [src] crashed down onto \the [landing]!") + + // Anything on the same tile as the landing tile is gonna have a bad day. + for(var/mob/living/L in landing.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(landing, /turf/simulated/floor)) + var/turf/simulated/floor/ground = landing + ground.break_tile() \ No newline at end of file