From dd9c91cf5f9f0a53b72b483bc7b8cf007347392b Mon Sep 17 00:00:00 2001 From: Belsima Date: Sat, 6 May 2017 09:27:38 -0400 Subject: [PATCH 001/261] 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 002/261] 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 003/261] 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 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 literal 51528 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üT&6RojtjKxL?!)u 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 Date: Mon, 22 May 2017 16:26:24 +0100 Subject: [PATCH 004/261] 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 005/261] 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 006/261] 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 007/261] 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 008/261] 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 009/261] 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 010/261] 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 011/261] 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 012/261] 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 013/261] 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 014/261] 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 015/261] 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 016/261] 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 017/261] 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 50c3e40a228e0cf20f03aff5869da1099cc9b096 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 26 May 2017 20:05:38 -0700 Subject: [PATCH 018/261] Adds mapmergePY More or less because I CBA to install java right now. --- html/changelogs/chaoko99-mapmergepy.yml | 37 ++ tools/mapmergepy/1 Prepare Maps.bat | 12 + tools/mapmergepy/2 Clean Maps.bat | 4 + .../__pycache__/map_helpers.cpython-36.pyc | Bin 0 -> 7998 bytes tools/mapmergepy/map_helpers.py | 524 ++++++++++++++++++ tools/mapmergepy/mapmerger.py | 81 +++ tools/mapmergepy/prepare_maps.sh | 2 + 7 files changed, 660 insertions(+) create mode 100644 html/changelogs/chaoko99-mapmergepy.yml create mode 100644 tools/mapmergepy/1 Prepare Maps.bat create mode 100644 tools/mapmergepy/2 Clean Maps.bat create mode 100644 tools/mapmergepy/__pycache__/map_helpers.cpython-36.pyc create mode 100644 tools/mapmergepy/map_helpers.py create mode 100644 tools/mapmergepy/mapmerger.py create mode 100644 tools/mapmergepy/prepare_maps.sh diff --git a/html/changelogs/chaoko99-mapmergepy.yml b/html/changelogs/chaoko99-mapmergepy.yml new file mode 100644 index 0000000000..32e38564aa --- /dev/null +++ b/html/changelogs/chaoko99-mapmergepy.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: chaoko99 + +# 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 mapmerge PY to the \tools directory of the Vorestation repository." + diff --git a/tools/mapmergepy/1 Prepare Maps.bat b/tools/mapmergepy/1 Prepare Maps.bat new file mode 100644 index 0000000000..d878510e3b --- /dev/null +++ b/tools/mapmergepy/1 Prepare Maps.bat @@ -0,0 +1,12 @@ +@echo off +cd ../../maps/ + +for /R %%f in (*.dmm) do copy "%%f" "%%f.backup" + +cls +echo All dmm files in maps directories have been backed up +echo Now you can make your changes... +echo --- +echo Remember to run Run_Map_Merge.bat just before you commit your changes! +echo --- +pause diff --git a/tools/mapmergepy/2 Clean Maps.bat b/tools/mapmergepy/2 Clean Maps.bat new file mode 100644 index 0000000000..b651f5da71 --- /dev/null +++ b/tools/mapmergepy/2 Clean Maps.bat @@ -0,0 +1,4 @@ +@echo off +set MAPROOT="../../maps/" +python mapmerger.py %1 %MAPROOT% +pause \ No newline at end of file diff --git a/tools/mapmergepy/__pycache__/map_helpers.cpython-36.pyc b/tools/mapmergepy/__pycache__/map_helpers.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bee5f17afa8c4d4a7ea784c168c99d81e428209 GIT binary patch literal 7998 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 1: + i = 1 + nextnew = key + while i < difference: + nextnew = get_next_key(nextnew) + unused_keys.append(nextnew) + i += 1 + sort = 1 + + + #Recycle outdated keys with any new tile data, starting from the bottom of the dictionary + i = 0 + for key, value in reversed(tempDict.items()): + recycled_key = key + if len(unused_keys) > 0: + recycled_key = unused_keys.pop() + + for coord, gridkey in tempGrid.items(): + if gridkey == None: + continue + if gridkey == key: + mergeGrid[coord] = recycled_key + tempGrid[coord] = None + + originalDict[recycled_key] = value + + #if gaps in the key sequence were found, sort the dictionary for cleanliness + if sort == 1: + sorted_dict = collections.OrderedDict() + next_key = get_next_key("") + while len(sorted_dict) < len(originalDict): + try: + sorted_dict[next_key] = originalDict[next_key] + except KeyError: + pass + next_key = get_next_key(next_key) + originalDict = sorted_dict + + if tgm: + with open(newfile, "w") as output: + write_dictionary_tgm(output, originalDict) + write_grid_coord_small(output, mergeGrid) + else: + with open(newfile, "wt", encoding='cp1252', newline='\n') as output: + write_dictionary_dmm(output, originalDict) + write_grid_dmm(output, mergeGrid) + return 1 + +#write dictionary in tgm format +def write_dictionary_tgm(output, dictionary): + output.write("//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE \n") + for key, list_ in dictionary.items(): + output.write("\"{}\" = (\n".format(key)) + + for thing in list_: + buffer = "" + in_quote_block = False + in_varedit_block = False + for char in thing: + + if in_quote_block: + if char == "\"": + in_quote_block = False + buffer = buffer + char + continue + elif char == "\"": + in_quote_block = True + buffer = buffer + char + continue + + if not in_varedit_block: + if char == "{": + in_varedit_block = True + buffer = buffer + "{\n\t" + continue + else: + if char == ";": + buffer = buffer + ";\n\t" + continue + elif char == "}": + buffer = buffer + "\n\t}" + in_varedit_block = False + continue + + buffer = buffer + char + + if list_.index(thing) != len(list_) - 1: + buffer = buffer + ",\n" + output.write(buffer) + + output.write(")\n") + +#thanks to YotaXP for finding out about this one +def write_grid_coord_small(output, grid): + output.write("\n") + + for x in range(1, maxx+1): + output.write("({},{},1) = {{\"\n".format(x, 1, 1)) + for y in range(1, maxy): + output.write("{}\n".format(grid[x,y])) + output.write("{}\n\"}}\n".format(grid[x,maxy])) + +def search_key(dictionary, data): + for key, value in dictionary.items(): + if value == data: + return key + return None + +def generate_new_key(dictionary): + last_key = next(reversed(dictionary)) + return get_next_key(last_key) + +def get_next_key(key): + if key == "": + return "".join("a" for _ in range(key_length)) + + length = len(key) + new_key = "" + carry = 1 + for char in key[::-1]: + if carry <= 0: + new_key = new_key + char + continue + if char == 'Z': + new_key = new_key + 'a' + carry += 1 + length -= 1 + if length <= 0: + return "OVERFLOW" + elif char == 'z': + new_key = new_key + 'A' + else: + new_key = new_key + chr(ord(char) + 1) + if carry > 0: + carry -= 1 + return new_key[::-1] + +#still does not support more than one z level per file, but should parse any format +def parse_map(map_file): + with open(map_file, "r") as map_input: + characters = map_input.read() + + in_quote_block = False + in_key_block = False + in_data_block = False + in_varedit_block = False + after_data_block = False + escaping = False + skip_whitespace = False + + dictionary = collections.OrderedDict() + curr_key = "" + curr_datum = "" + curr_data = list() + + in_map_block = False + in_coord_block = False + in_map_string = False + iter_x = 0 + adjust_y = True + + curr_num = "" + reading_coord = "x" + + global key_length + global maxx + global maxy + curr_x = 0 + curr_y = 0 + curr_z = 1 + grid = dict() + + for char in characters: + + if not in_map_block: + + if char == "\n" or char == "\t": + continue + + if in_data_block: + + if in_varedit_block: + + if in_quote_block: + if char == "\\": + curr_datum = curr_datum + char + escaping = True + continue + + if escaping: + curr_datum = curr_datum + char + escaping = False + continue + + if char == "\"": + curr_datum = curr_datum + char + in_quote_block = False + continue + + curr_datum = curr_datum + char + continue + + if skip_whitespace and char == " ": + skip_whitespace = False + continue + skip_whitespace = False + + if char == "\"": + curr_datum = curr_datum + char + in_quote_block = True + continue + + if char == ";": + skip_whitespace = False + curr_datum = curr_datum + char + continue + + if char == "}": + curr_datum = curr_datum + char + in_varedit_block = False + continue + + curr_datum = curr_datum + char + continue + + if char == "{": + curr_datum = curr_datum + char + in_varedit_block = True + continue + + if char == ",": + curr_data.append(curr_datum) + curr_datum = "" + continue + + if char == ")": + curr_data.append(curr_datum) + dictionary[curr_key] = tuple(curr_data) + curr_data = list() + curr_datum = "" + curr_key = "" + in_data_block = False + after_data_block = True + continue + + curr_datum = curr_datum + char + continue + + if in_key_block: + if char == "\"": + in_key_block = False + key_length = len(curr_key) + else: + curr_key = curr_key + char + continue + #else we're looking for a key block, a data block or the map block + + if char == "\"": + in_key_block = True + after_data_block = False + continue + + if char == "(": + if after_data_block: + in_map_block = True + in_coord_block = True + after_data_block = False + curr_key = "" + continue + else: + in_data_block = True + after_data_block = False + continue + + else: + + if in_coord_block: + if char == ",": + if reading_coord == "x": + curr_x = string_to_num(curr_num) + if curr_x > maxx: + maxx = curr_x + iter_x = 0 + curr_num = "" + reading_coord = "y" + elif reading_coord == "y": + curr_y = string_to_num(curr_num) + if curr_y > maxy: + maxy = curr_y + curr_num = "" + reading_coord = "z" + else: + pass + continue + + if char == ")": + in_coord_block = False + reading_coord = "x" + curr_num = "" + #read z here if needed + continue + + curr_num = curr_num + char + continue + + if in_map_string: + + if char == "\"": + in_map_string = False + adjust_y = True + curr_y -= 1 + continue + + if char == "\n": + if adjust_y: + adjust_y = False + else: + curr_y += 1 + if curr_x > maxx: + maxx = curr_x + if iter_x > 1: + curr_x = 1 + iter_x = 0 + continue + + + curr_key = curr_key + char + if len(curr_key) == key_length: + iter_x += 1 + if iter_x > 1: + curr_x += 1 + + grid[curr_x, curr_y] = curr_key + curr_key = "" + continue + + + #else look for coordinate block or a map string + + if char == "(": + in_coord_block = True + continue + if char == "\"": + in_map_string = True + continue + + if curr_y > maxy: + maxy = curr_y + + data = dict() + data["dictionary"] = dictionary + data["grid"] = grid + return data + +#subtract keyB from keyA +def key_difference(keyA, keyB): + if len(keyA) != len(keyB): + return "you fucked up" + + Ayek = keyA[::-1] + Byek = keyB[::-1] + + result = 0 + for i in range(0, len(keyA)): + base = 52**i + A = 26 if Ayek[i].isupper() else 0 + B = 26 if Byek[i].isupper() else 0 + result += ( (ord(Byek[i].lower()) + B) - (ord(Ayek[i].lower()) + A) ) * base + return result + +def string_to_num(s): + try: + return int(s) + except ValueError: + return -1 + +#writes a tile data dictionary the same way Dreammaker does +def write_dictionary_dmm(output, dictionary): + for key, value in dictionary.items(): + output.write("\"{}\" = ({})\n".format(key, ",".join(value))) + +#writes a map grid the same way Dreammaker does +def write_grid_dmm(output, grid): + output.write("\n") + output.write("(1,1,1) = {\"\n") + + for y in range(1, maxy+1): + for x in range(1, maxx+1): + try: + output.write(grid[x,y]) + except KeyError: + print("Key error: ({},{})".format(x,y)) + output.write("\n") + output.write("\"}") + output.write("\n") + +#inflated map grid; unused +def write_grid_coord(filename, grid): + with open(filename, "a") as output: + output.write("\n") + for y in range(1, maxy+1): + for x in range(1, maxx+1): + output.write("({},{},1) = {{\"{}\"}}\n".format(x, y, grid[x,y])) + +def key_compare(keyA, keyB): #thanks byond for not respecting ascii + pos = 0 + for a in keyA: + pos += 1 + count = pos + for b in keyB: + if(count > 1): + count -= 1 + continue + if a.islower() and b.islower(): + if(a < b): + return -1 + if(a > b): + return 1 + break + if a.islower() and b.isupper(): + return -1 + if a.isupper() and b.islower(): + return 1 + if a.isupper() and b.isupper(): + if(a < b): + return -1 + if(a > b): + return 1 + break + return 0 diff --git a/tools/mapmergepy/mapmerger.py b/tools/mapmergepy/mapmerger.py new file mode 100644 index 0000000000..0a177eb07a --- /dev/null +++ b/tools/mapmergepy/mapmerger.py @@ -0,0 +1,81 @@ +#!/usr/bin/python3 + +import sys +import os +import pathlib +import map_helpers +import shutil + +def main(map_folder): + list_of_files = list() + for root, directories, filenames in os.walk(map_folder): + for filename in [f for f in filenames if f.endswith(".dmm")]: + list_of_files.append(pathlib.Path(root, filename)) + + last_dir = "" + for i in range(0, len(list_of_files)): + this_dir = list_of_files[i].parent + if last_dir != this_dir: + print("--------------------------------") + last_dir = this_dir + print("[{}]: {}".format(i, str(list_of_files[i])[len(map_folder):])) + + print("--------------------------------") + in_list = input("List the maps you want to merge (example: 1,3-5,12):\n") + in_list = in_list.replace(" ", "") + in_list = in_list.split(",") + + valid_indices = list() + for m in in_list: + index_range = m.split("-") + if len(index_range) == 1: + index = string_to_num(index_range[0]) + if index >= 0 and index < len(list_of_files): + valid_indices.append(index) + elif len(index_range) == 2: + index0 = string_to_num(index_range[0]) + index1 = string_to_num(index_range[1]) + if index0 >= 0 and index0 <= index1 and index1 < len(list_of_files): + valid_indices.extend(range(index0, index1 + 1)) + +# if tgm == "1": +# print("\nMaps will be converted to tgm.") +# tgm = True +# else: +# print("\nMaps will not be converted to tgm.") +# tgm = False + tgm = False + + print("\nMerging these maps:") + for i in valid_indices: + print(str(list_of_files[i])[len(map_folder):]) + merge = input("\nPress Enter to merge...") + if merge == "abort": + print("\nAborted map merge.") + sys.exit() + else: + for i in valid_indices: + path_str = str(list_of_files[i]) + shutil.copyfile(path_str, path_str + ".before") + path_str_pretty = path_str[len(map_folder):] + try: + if map_helpers.merge_map(path_str, path_str + ".backup", tgm) != 1: + print("ERROR MERGING: {}".format(path_str_pretty)) + os.remove(path_str + ".before") + continue + print("MERGED: {}".format(path_str_pretty)) + except FileNotFoundError: + print("\nERROR: File not found! Make sure you run 'Prepare Maps.bat' before merging.") + print(path_str_pretty + " || " + path_str_pretty + ".backup") + + print("\nFinished merging.") + print("\nNOTICE: A version of the map files from before merging have been created for debug purposes.\nDo not delete these files until it is sure your map edits have no undesirable changes.") + +def string_to_num(s): + try: + return int(s) + except ValueError: + return -1 + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/tools/mapmergepy/prepare_maps.sh b/tools/mapmergepy/prepare_maps.sh new file mode 100644 index 0000000000..f1ea86ce45 --- /dev/null +++ b/tools/mapmergepy/prepare_maps.sh @@ -0,0 +1,2 @@ +#!/bin/bash +find ../../maps | grep \.dmm$ | xargs -l1 -I{} cp {} {}.backup \ No newline at end of file From 1e35ef880954bfa1fea9737a425c50707554258f Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 27 May 2017 03:03:45 -0400 Subject: [PATCH 019/261] 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 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 D&4v*^ From 3ff9d441f9c2db9c0c8357a4824ffb6b485541ce Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 27 May 2017 04:39:49 -0400 Subject: [PATCH 020/261] 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 021/261] 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 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 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 022/261] 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 023/261] 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 024/261] 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 025/261] 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 026/261] 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 027/261] 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 028/261] 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 8bf1b327079a0d07fa37b3cde56d9aff7a8da65d Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Sat, 27 May 2017 19:26:00 -0300 Subject: [PATCH 029/261] Fixed 1 area in Tether one. Moved the grenade making case to medical storage. Fixed thunderdome area in colony 6. Did some extra changes to my beloved syndibase --- maps/tether/tether-01-surface.dmm | 5 +-- maps/tether/tether-03-station.dmm | 4 +- maps/tether/tether-06-colony.dmm | 38 ++++++++---------- maps/tether/tether-07-misc.dmm | 67 ++++++++++++++++--------------- 4 files changed, 54 insertions(+), 60 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 43fe590b61..9b45935d8d 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -256,7 +256,7 @@ "aeV" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/rust,/turf/simulated/floor,/area/maintenance/substation/mining) "aeW" = (/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,47)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/substation/mining) "aeX" = (/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining_eva) -"aeY" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) +"aeY" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/vending/cigarette{name = "Cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) "aeZ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) "afa" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled/steel_dirty,/area/tether/surfacebase/mining_main/ore) "afb" = (/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel_dirty,/area/tether/surfacebase/mining_main/ore) @@ -719,7 +719,6 @@ "anQ" = (/obj/structure/sign/directions/evac,/turf/simulated/wall,/area/crew_quarters/locker) "anR" = (/turf/simulated/wall,/area/crew_quarters/locker) "anS" = (/obj/effect/floor_decal/techfloor,/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) -"anT" = (/turf/simulated/mineral,/area/space) "anU" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two"); req_one_access = list(47,24,11)},/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) "anV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) "anW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) @@ -5447,7 +5446,7 @@ aaaaadaadaadaadaadaadaadaadaadaadaadaadajUajUalLaiwalMalNaiwalOalPagPalQalRalSal aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagammammammammammamnamnamnamnamoamoamoamoamoampamqamrahhakMakOakOamsalzakOakOakOakMakMakTaagaagaagaagaagaagaagaagaklaklamuamvamwamxakYalEakYakYahWahWahWahWahWaagaagagIamyakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPajQagIalhalhalhalhalhamAamAamBamAaODamAamDaOFaOZalKalKalKalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGamHamIamJamGamKamLamMamGamNamOamPamQamRamSaiCakhahhakMakOalzakOakOanIanIakOakOakOakTaagaagaagaagaagaagaagaagaagaklaklamTamUamVakYaPdalEalEakYaagaagaagaagaagaagagIamXakuajOamzbZdalfalfbZgbZgbZgalfalfbZeamzajOajPamYagIaagaagaagalhamZamZalhalhalhalhalhalhalhalhalhalhalhalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGanaanbancamGandaneanfamGanganhanhanianjankaiFanlahhaRkakOakRakOakOakOakOalzalzakRakTaagaagaagaagaagaagaagaagaagaagaklaklaklaklakYannanoalEakYaagaagaagaagaagaagagIanpakuajOamzbZdalfbZeanqanqanrbZdalfbZeamzajOajPansagIaagaagaagalhantalhalhaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa -aaaaadaadaadaadaadaadaadaadaadaadaadaagamGamGamGanuanvanwamGanxanyanzamGanAanBanCanDanEanFaiCanGanHakOakOakOakOakOalzakOakOakOanJakTaagaagaagaagaagaagaagaagaagaagaagaagaagaagakYanKanLanMakYaagaagaagaagaagaaganNalGanOajOamzbZdalfbZeanqakvanqbZdalfbZeamzajOanPajQanQanRanRanRanRaSqanRanRanRanRanRanRaaganTaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa +aaaaadaadaadaadaadaadaadaadaadaadaadaagamGamGamGanuanvanwamGanxanyanzamGanAanBanCanDanEanFaiCanGanHakOakOakOakOakOalzakOakOakOanJakTaagaagaagaagaagaagaagaagaagaagaagaagaagaagakYanKanLanMakYaagaagaagaagaagaaganNalGanOajOamzbZdalfbZeanqakvanqbZdalfbZeamzajOanPajQanQanRanRanRanRaSqanRanRanRanRanRanRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagamGanUamGanVanWanXamGanYanZaoaamGamoamoamoamoamoaobaocaodaoeaofalzanIakOakOakOakOakOaogaohakTaagaagaagaagakYakYakYakYakYakYakYakYakYakYakYakYakYaSWakYakYakYakYakYakYakYagIalGakuajOamzbZdalfbZeanranqanrbZdalfbZeamzajOajPajQanRaojaokaolaomaonanRaooaopaoqaoranRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaosaotaouaovaowaoxaoyaozaoAamGaoBaoCaoDaoEahhaoFaiCaoGahhaoHakOakOakOalzalzaUrakMakMakMakTaagaagaagaagakYaUsaoKaoLalEalEaoMalEalEalEalEalEalEaoNaoOaoOaoOaoOaoOaoOaoOaoPaoQakuajOamzbZdalfalfbVubVubVualfalfbZeamzajOajPaoRanRaoSaoTaoUaoVaoWanRaoXaoYanRanRanRaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaoZaotaouapaapbapcapdapaaoAamGapeapfapgaphahhapiapjakhahhaUNakOakOalzaUQakMakMakMakMakMakTaagaagaagaagakYapmalEapnappappappannannannaUZaVYaVJakYakYakYakYakYakYakYakYagIaptakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPapuanRaoSapvapwapxapyanRapzapAapBaoranRaagapCapCapCapCapCapCapCapDapEapEapFapGapGapGapGapFapEapEapHaaa diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 047d97de6f..f8ac89c2cc 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -4306,7 +4306,7 @@ "bEP" = (/obj/machinery/status_display{pixel_y = 30},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/station/upper) "bEQ" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/station/upper) "bER" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/item/device/radio/intercom{pixel_y = 24; req_access = list()},/turf/simulated/floor/tiled,/area/hallway/station/upper) -"bES" = (/obj/structure/closet/crate{icon_state = "crate"; name = "Grenade Crate"; opened = 0},/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,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/light_switch{dir = 1; pixel_x = 4; pixel_y = -24},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "chemistry"; name = "Chemistry Shutters"; pixel_x = -6; pixel_y = -24; req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bES" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/light_switch{dir = 1; pixel_x = 4; pixel_y = -24},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "chemistry"; name = "Chemistry Shutters"; pixel_x = -6; pixel_y = -24; req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bET" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/obj/machinery/photocopier,/turf/simulated/floor/tiled/dark,/area/bridge) "bEU" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/maintenance/common,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/station/elevator) "bEV" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/simulated/floor/tiled,/area/hallway/station/upper) @@ -4652,7 +4652,7 @@ "bLx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bLy" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/medical/biostorage) "bLz" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bLA" = (/obj/structure/window/basic{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled,/area/medical/biostorage) +"bLA" = (/obj/structure/window/basic{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/structure/closet/crate{icon_state = "crate"; name = "Grenade Crate"; opened = 0},/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,/area/medical/biostorage) "bLB" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/adv,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/medical/biostorage) "bLC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bLD" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled,/area/medical/biostorage) diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index da4c89104f..7391e2a3d9 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -135,15 +135,15 @@ "cE" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "cF" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdomeobserve) "cG" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdomeobserve) -"cH" = (/turf/unsimulated/wall,/area/space) -"cI" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) +"cH" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"cI" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "cJ" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/control) "cK" = (/obj/machinery/door/airlock/glass_research{name = "Robotics Lab"; req_access = list(29,47)},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/control) "cL" = (/turf/unsimulated/floor/steel{icon = 'icons/turf/flooring/circuit.dmi'; icon_state = "bcircuit"},/area/centcom/control) "cM" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "cN" = (/obj/machinery/igniter,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "cO" = (/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) -"cP" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) +"cP" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "cQ" = (/obj/structure/sign/science,/turf/unsimulated/wall,/area/centcom/control) "cR" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/control) "cS" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning,/obj/machinery/camera/network/crescent{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/control) @@ -161,10 +161,9 @@ "de" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "df" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "dg" = (/obj/machinery/door/blast/regular{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"dh" = (/obj/machinery/door/blast/regular{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) -"di" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) -"dj" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) -"dk" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) +"dh" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"di" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"dj" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "dl" = (/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "dm" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/sign/nanotrasen,/turf/unsimulated/floor/steel,/area/centcom/control) "dn" = (/obj/structure/sign/department/armory,/turf/unsimulated/wall,/area/centcom/control) @@ -179,7 +178,6 @@ "dw" = (/obj/structure/railing{dir = 1},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "dx" = (/obj/effect/floor_decal/corner_steel_grid{dir = 9},/turf/simulated/floor/outdoors/grass/sif/virgo3b,/area/centcom/evac) "dy" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"dz" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) "dA" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/unsimulated/floor/steel,/area/centcom/control) "dB" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "dC" = (/obj/machinery/computer/secure_data{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) @@ -205,7 +203,6 @@ "dW" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 8},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "dX" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "dY" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) -"dZ" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) "ea" = (/obj/machinery/computer/security{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) "eb" = (/obj/machinery/computer/crew{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "ec" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) @@ -254,7 +251,6 @@ "eT" = (/obj/effect/floor_decal/rust,/obj/effect/floor_decal/industrial/warning/dust{dir = 4},/obj/structure/railing{dir = 8},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "eU" = (/obj/effect/floor_decal/corner_steel_grid/diagonal,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod2/centcom) "eV" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"eW" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) "eX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel,/area/centcom/control) "eY" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -282,7 +278,6 @@ "fv" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 9},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fw" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 1},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fx" = (/obj/machinery/door/blast/regular{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"fy" = (/obj/machinery/door/blast/regular{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) "fz" = (/obj/machinery/computer/ordercomp{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "fA" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fB" = (/obj/effect/floor_decal/corner_steel_grid/diagonal,/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 4},/obj/structure/railing{dir = 8},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) @@ -301,7 +296,6 @@ "fO" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fP" = (/obj/effect/floor_decal/rust,/obj/effect/floor_decal/corner_steel_grid/diagonal,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fQ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"fR" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space) "fS" = (/obj/machinery/computer/robotics{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "fT" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/obj/machinery/turretid{pixel_x = 28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) "fU" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -1392,16 +1386,16 @@ aaabababababababababababababababababababababababababababababababababababacacaZbh aaabababababababababababababababababababababababababababababababababacacacacaZbRbibibibibSaZbAbTbTbTbTbTbAbAbAbTbTbTbTbAbUaZbFbFbFbFbFbFbFadahahahaebVbWaebXbYaebXbYaebXbYaebXbYaebXbYaebZbZaeaMaMaMaMaMaMaMaMcaaecbcccdcecfcgchaecibdbdbdbdcjaf aaabababababababababababababababababababababababababababababababababacacacacaZbRckclclbibicmbAbAcncocnbAbAbAbAbAcncocnbAbAcpbFbFbFbFbFbFbFadahahahaeaecqaecqaeaecqaeaecqaeaecqaeaecqaeaeaeaeaecrcrcrbdbdbdcrcrcraeaeaeaeaeaTcsaTaectbdbdbdbdcuaf aaabababababababababababababababababababababababababababababababababacacacacaZaZaZaZaZaZaZaZbAbTbTbTbTbTbAbAbAbTbTbTbTbTbAaZaZaZaZaZaZaZbFadahahahaecvbdbdbdbdbdbdbdcwbdbdbdbdbdbdbdbdbdbdcwbdbdbdbdbdbdbdbdbdcxaecyczcAaecBcgcCaTcDbdbdbdbdbdaf -aaabababababababababababababababababababababababababababababababababacacacacaZaZcEcEcEcEcEaZcFcFcFcFcFcFcFcFcFcFcFcFcFcGcFcHcIcIcIcIcIaZbFadahahahaebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcJcgcgcgcJcgcgcgcKbdbdbdcLcLcLaf -aaababababababababababababababababababababababababababababababababacacacacaZaZaZcMcMcMcMcMaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNcHcPcPcPcPcPaZaZadahahahcrbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcQcRcScTaecUcVcWaTcXbdbdcYcZcYaf -aaababababababababababdadbdbdbdbdbdbdbdbdbdbdbdbdbdbdcababababababacacacacaZdddedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdhdidididididjdkadahahahcrdlbdbdaecrcrcrcrcrcrcrdmcraebdbdbddnaeaeaeaeaeaeaeaedodododpaeaeaeaeaeaeaeaeaedqbdbdcLcLcLaf -aaababababababababababdrdsdtdtdtdtdudtdtdtdtdtdtdvdwdxababababababacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdhdidzdidzdidjdkadahahahaebdbdbdaedAdBdCdDdEdFdGdHdIcrbdbdbddJdKdKdLdKcvaedMdNdOdOdOdOaedPcgdQaeacacacaedRbdbdbdbdbdaf -aaababababababababababdrdSdTdTdTdTdUdTdTdTdTdTdTdVdWdxababababababacacacacaZdddedfdfdXdfdfdgcOcOcOcOcOcOcOdYcOcOcOcOcOcOcOdhdididZdididjdkadahahahcrbdbdbdcrbddBeaebdEbdecedeecrbdbdbddJdKdKdKdKdKefegdOdOdOdOdOehcgcgeiaeacejejejekbNelemeneoaf -aaababababababababababdrdSdTdTdTdTdTdTdTdTdUdTdTdTepdxababababababacacacacaZdddedfdfdfdfdfdgcOcOcOcOcOcOcOeqcOcOcOcOcOcOcOdhdidididididjdkadahahahcrbdbdbdcrbdbdbdbdbdbdbdbdercrbdbdbddJesdKetdKdKaeeuevewexeyezaeeAcVeBaeacejeCejeDeEeFeGeHeIaf -aaababababababababababdrdSdTdTdUdUdTdTdTdTdTdTdTdTeJdxabababababeKacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdhdidzdidzdidjdkadahahahaebdbdbdeLbdbdbdbdeMeNeObdbdcrbdbdbdePejejejeQeQejejejejejejejejejejejejejejeRejejejejejejejeS -aaababababababababababdreTdTdTdTdTdTdTdTdTeUdTdUdUepdxababababababacacacacaZeVdedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdhdidididididjeWadahahahcrbdbdbdcrcxbdbdbdeXeXeYbdbdcrbdbdbdejeZfafbfcfcfdfefffgfcfhfifjfkfcflfmfnfofcfpfqfrfsftfufueS -aaababababababababababdrdSdTdTdTdTdTdTdTdTdTdTdTfvfwdxababababababacacacacaZaZaZfxfxfxfxfxaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNaZfyfyfyfyfyaZaZadahahahcrdlbdbdcrfzdEbdbdbdbdbdbdbdcrbdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS -aaababababababababababdrfBfCfDfEfFfGfHfIfJfKfLfCfMfNfNfNfNfOfPababacacacacacacaZfQfQfQfQfQaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZfRfRfRfRfRaZacadahahahaebdbdbdaefSdEbdfTbdbdbdbdcvcrbdbdbdejfUfVfbfcfWfXfcfcfYfZgafcfcgbgcgdfcfcgegegefcfcgfgfgfgfeS +aaabababababababababababababababababababababababababababababababababacacacacaZaZcEcEcEcEcEaZcFcFcFcFcFcFcFcFcFcFcFcFcFcGcFaZcHcHcHcHcHaZbFadahahahaebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcJcgcgcgcJcgcgcgcKbdbdbdcLcLcLaf +aaababababababababababababababababababababababababababababababababacacacacaZaZaZcMcMcMcMcMaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNaZcMcMcMcMcMaZaZadahahahcrbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcQcRcScTaecUcVcWaTcXbdbdcYcZcYaf +aaababababababababababdadbdbdbdbdbdbdbdbdbdbdbdbdbdbdcababababababacacacacaZdddedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIcIcIcIcIdecPadahahahcrdlbdbdaecrcrcrcrcrcrcrdmcraebdbdbddnaeaeaeaeaeaeaeaedodododpaeaeaeaeaeaeaeaeaedqbdbdcLcLcLaf +aaababababababababababdrdsdtdtdtdtdudtdtdtdtdtdtdvdwdxababababababacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIdhcIdhcIdecPadahahahaebdbdbdaedAdBdCdDdEdFdGdHdIcrbdbdbddJdKdKdLdKcvaedMdNdOdOdOdOaedPcgdQaeacacacaedRbdbdbdbdbdaf +aaababababababababababdrdSdTdTdTdTdUdTdTdTdTdTdTdVdWdxababababababacacacacaZdddedfdfdXdfdfdgcOcOcOcOcOcOcOdYcOcOcOcOcOcOcOdgcIcIdicIcIdecPadahahahcrbdbdbdcrbddBeaebdEbdecedeecrbdbdbddJdKdKdKdKdKefegdOdOdOdOdOehcgcgeiaeacejejejekbNelemeneoaf +aaababababababababababdrdSdTdTdTdTdTdTdTdTdUdTdTdTepdxababababababacacacacaZdddedfdfdfdfdfdgcOcOcOcOcOcOcOeqcOcOcOcOcOcOcOdgcIcIcIcIcIdecPadahahahcrbdbdbdcrbdbdbdbdbdbdbdbdercrbdbdbddJesdKetdKdKaeeuevewexeyezaeeAcVeBaeacejeCejeDeEeFeGeHeIaf +aaababababababababababdrdSdTdTdUdUdTdTdTdTdTdTdTdTeJdxabababababeKacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIdhcIdhcIdecPadahahahaebdbdbdeLbdbdbdbdeMeNeObdbdcrbdbdbdePejejejeQeQejejejejejejejejejejejejejejeRejejejejejejejeS +aaababababababababababdreTdTdTdTdTdTdTdTdTeUdTdUdUepdxababababababacacacacaZeVdedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIcIcIcIcIdeeVadahahahcrbdbdbdcrcxbdbdbdeXeXeYbdbdcrbdbdbdejeZfafbfcfcfdfefffgfcfhfifjfkfcflfmfnfofcfpfqfrfsftfufueS +aaababababababababababdrdSdTdTdTdTdTdTdTdTdTdTdTfvfwdxababababababacacacacaZaZaZfxfxfxfxfxaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNaZfxfxfxfxfxaZaZadahahahcrdlbdbdcrfzdEbdbdbdbdbdbdbdcrbdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS +aaababababababababababdrfBfCfDfEfFfGfHfIfJfKfLfCfMfNfNfNfNfOfPababacacacacacacaZfQfQfQfQfQaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZdjdjdjdjdjaZacadahahahaebdbdbdaefSdEbdfTbdbdbdbdcvcrbdbdbdejfUfVfbfcfWfXfcfcfYfZgafcfcgbgcgdfcfcgegegefcfcgfgfgfgfeS aaababababababababababdrggghgigjgkglgmgngogpgqgqdWfNfNfNfNfNfNababacacacacacacaZaZaZaZaZaZaZacacacacacacacacacacacacacacacaZaZaZaZaZaZaZacadahahahcrbdbdbdaeaeaeaeaeaeaecreLcraebdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS aaababababababababababdrdSgrgsgtgtgtgtgugtgtgtgtdVgvdxababfNfNababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahahahcrbdbdbdbdbdbdbdcwbdbdbdbdbdbdbdbdbdejgwgxfbgyfcfcfcfcfcgzgAgBgBgBgBgBgCgCgAgzgDfcfcfcgEgEgEeS aaababababababababababdrdSgtgtgFgtgugtgtgtgtgugtgtepdxababfNfNababacacacacacacacacacgGgGgGgGgGgGgGgGgGgGgGgGgGgGgGgGacacacacacacacacacacacadahahahaebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdejejejejejejejfcfcejejejejejejejejejejejejejgHgHePejejejeS diff --git a/maps/tether/tether-07-misc.dmm b/maps/tether/tether-07-misc.dmm index b14a06e945..3b9a89a288 100644 --- a/maps/tether/tether-07-misc.dmm +++ b/maps/tether/tether-07-misc.dmm @@ -547,7 +547,7 @@ "kA" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor/white,/area/shuttle/trade/centcom) "kB" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor/white,/area/shuttle/trade/centcom) "kC" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) -"kD" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) +"kD" = (/obj/machinery/vending/cigarette{name = "Cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "kE" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/largecrate/animal/cat,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "kF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/largecrate/animal/cow,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "kG" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) @@ -780,7 +780,7 @@ "oZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_w = 0; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "pa" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/plasmastun,/obj/item/weapon/gun/energy/plasmastun,/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pb" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/darkmatter,/obj/item/weapon/gun/energy/darkmatter,/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"pc" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/antag/antag_base) +"pc" = (/turf/simulated/floor/outdoors/grass/sif/virgo3b{tree_chance = 0},/area/antag/antag_base) "pd" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/heavysniper,/obj/item/weapon/gun/projectile/heavysniper,/obj/effect/floor_decal/corner/red{dir = 5},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pe" = (/turf/unsimulated/mineral{icon = 'icons/turf/transit_vr.dmi'; icon_state = "rock"},/area/space) "pf" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) @@ -870,12 +870,12 @@ "qL" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_one_access = list(150)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "qM" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/item/weapon/tank/oxygen/red,/obj/effect/floor_decal/borderfloorblack{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "qN" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/obj/effect/floor_decal/borderfloorblack{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"qO" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) +"qO" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/virgo3b{tree_chance = 0},/area/antag/antag_base) "qP" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_w = 0; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "qQ" = (/obj/machinery/vending/sovietsoda,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "qR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/shuttle/antag_ground/base) "qS" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/shuttle/antag_space/base) -"qT" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) +"qT" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 3},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 12},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "qU" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "qV" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/antag_space/transit) "qW" = (/turf/unsimulated/floor/steel{icon = 'icons/turf/flooring/circuit.dmi'; icon_state = "bcircuit"},/area/antag/antag_base) @@ -888,7 +888,7 @@ "rd" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/obj/item/weapon/storage/belt/security{name = "black belt"},/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/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/effect/floor_decal/borderfloorblack{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "re" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/effect/floor_decal/borderfloorblack{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base) -"rg" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) +"rg" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_coffee/full,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "rh" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "ri" = (/obj/item/weapon/folder{pixel_y = 2},/obj/structure/table/glass,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "rj" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/obj/structure/table/glass,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) @@ -907,7 +907,7 @@ "rw" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy{name = "Super Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rx" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "ry" = (/obj/machinery/door/airlock/centcom{name = "Equipment Storage"; req_one_access = list(150)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"rz" = (/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) +"rz" = (/obj/machinery/vending/cigarette{name = "Breach Corp cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "rA" = (/obj/structure/flora/pottedplant{icon_state = "plant-20"},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "rB" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "antag_ground_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(13,31); tag_door = "antag_ground_shuttle_hatch"},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/shuttle/floor/darkred,/area/shuttle/antag_ground/base) "rC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/shuttle/antag_ground/base) @@ -1040,6 +1040,7 @@ "tZ" = (/obj/machinery/body_scanconsole,/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "ua" = (/obj/machinery/bodyscanner{dir = 8},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "ub" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) +"uc" = (/obj/effect/floor_decal/borderfloorblack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) (1,1,1) = {" aaabacadaeafagahaiajakalamanaoaaabacadaeafagahaiajapaqaqaqaqaqaqaqaqaqaqaqapapapapaparasasasasasasasasasasarasasasasasasasasasasarasasasasasasasasasasarasasasasasasasasasasarasasasasasasasasasasarasasasasasasasasasasarasasasasasasasasasasar @@ -1132,35 +1133,35 @@ mwapapapapapapapapapapmxmxmxmymxmxmxapapapapapapapapapapmwapapapapapapapapapapap mwapapapapapapapapapapapapapapapapapapapapapapapapapapapmwapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap mwapapapapapapapapapapapapapapapapapapapapapapapapapapapmwapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap mwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwmwapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -apapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -apapapapapapoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -apapapapapapoYoZpioYoZpioYoZpioYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +apapapapapapapapapapapapapapapoYoYoYoYoYoYoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +apapapapapapoYoYoYoYoYoYoYoYoYoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +apapapapapapoYoZpioYoZpioYoZpioYpcqOpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap apapapapapapoYpqpqoYpqpqoYpqpqoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYoYoYoYoYoYoYoYpDoYoYpDoYoYpDoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYoYoYoYoYoYoYoYpDoYoYpDoYoYpDoYpcpcpcqOpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYpJphpapbpKpdoYpfpfpfpfpLpfpfoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfpfpfpfpgoYoYoYoYoYoYoYpfoYoYrurtrvoYoYapapapapapapapapapapapapapapgFgGgHgIgJgKgLgLgIappepepepepepepepepeapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfsNpnpoppoYsQtosTtotroYpfoYprpsptpupvoYapapapapapapapapapapapapapapgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpCoYoYoYoYoYoYtututututuoYpfoYpEpEpEpEpFoYapapapapapapapapapapapapapapgKhdpwpxpypzpAgZgGappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpItAtztBpMoYtCtEtDtEtFtGpfpNpEpEpEpEtHoYapapapapapapapapapapapapapapgGgZpypzpGpHpwhbgLappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfpfpPpQpfoYoYoYoYoYoYoYoYoYpRpEpEpEpFoYapapapapapapapapapapapapapapgLhbpGpHpOpApyhegHappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpUpVpWpXpfpfoYpYpZpZqapZpZqboYqcpEpEpEqdoYapapqeqeqeqeqeapqfqfqfqfqfapgHhepOpApSpwpGhqgJappjpTpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpUqhqipXpfpfqjqkpfpfpfpfpfqloYqmpEpEpEpvoYapapqeqnqoqpqeapqfqqqrqsqfapgJhqpSpwpypypOhsgMappjpkpBpBpBpBpBqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYqtquqvqwpfpfqxqyqzqAqBqCqyqloYoYoYpNoYoYoYoYoYqeqDqoqpqeapqfqEqrqsqfapgMhspypypGpGpShwhZappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYqFqGqHqIpftIoYqJqKoYqLoYqMqNoYqOpqpqpqqPtJqQoYqeqRqotKqeapqfqSqrtLqfaphZhwpGpGpOpOpyheilappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfpfpfpftMoYoYoYoYpfoYoYoYoYqTpqpqpqqUqUpqoYqeqRqotKqeapqfqSqrtLqfapilhepOpOpSpSpGhqitappjpTpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYqWqXqXqWpfqYoYqZrarbpfrcrdrerfrgpqpqrhrirjrkoYqeqRqoqpqeapqfqSqrqsqfapithqpSpSqVpypOhsixappjpkpBpBpBpBpBqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfpfpfpfrmoYrnpfpfpfpfpfrorfrppqpqpqrqrqpqoYqerrqoqoqeapqfqrqrqrqfapixhsqVpyrlpGpShwhZappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYrstNtPtOrwpMoYrxpfpfpfpfpfpfrypqpqpqpqpqrzrAoYqerBqorCqeapqfrDqrrEqfaphZhwiHigiRiriBiuilappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYoYoYoYoYoYoYoYrFpfpfpfpfpfrGoYrHpfpfpfqloYoYoYqerIrJrIqeapqfrKrLrKqfapiliuiFhsiPhwizizitappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfrMqjrNrOoYrPrQrRrSrTrUrVoYrWpftQpfqlrXoYapqeqerYqeqeapqfqfrZqfqfapitiziPhwhfiuiFiFixappjpkplplplplplqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYsasbscpfpfsdoYoYoYseseseoYoYoYsfpfpfpfqloYoYoYoYoYsgoYoYoYoYoYshoYoYapixiFhfiuhaiziPiPjtappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYoYoYoYsipfpfsjqjrNrNrNrNrNskslpfpfpfpfsmrNrNrNrNsnpfqjrNrNrNsopfspoYapjtiPhaizhciFhfhfjMappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfrMpfpfsqsrssstpfqxsususvsrswstpfqxsusususususususususususususxoYapjMhfhciFgYiPhahajYappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYsasbscpfpfqloYoYoYsyoYoYoYoYoYoYsrszoYoYoYoYoYoYoYsrsroYsAoYsrsroYoYoYjYhagYiPhdhfhchcgFappjpkplplplplplqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYoYoYoYsBpfqloYsCsDsEsFsFoYsGoYsHsIsIsJsKoYsLsLsMtcsOsPtRsItsttsRsSsUoYgFhchdhfgZhagYgYgIappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYpfpfrMpfpfsVoYsEsEsEsEsEsWsEoYsXsIsIsIsYoYsZtatbtcsIsIsIsIsIsIsIsItdoYgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYsasbscqxtetfoYtgthsEtStioYtToYtjtktltmtnoYtUtUpftcsIsIsIsIsIsIsIsItVoYgKhdhbhchegYgZgZgGappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYtWtWtptctXtqtYuatZubtvtwtxoYgGgJhZgLilgHgMgMgLappepepepepepepetypeapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfpfpfpfpgoYoYoYoYoYoYoYpfoYoYrurtrvoYoYapapapapapapapapapapapapapapapapgFgGgHgIgJgKgLgLgIappepepepepepepepepeapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfsNpnpoppoYsQtosTtotroYpfoYprpsptpupvoYapapapapapapapapapapapapapapapapgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpCoYoYoYoYoYoYtututututuoYpfoYpEpEpEpEpFoYapapapapapapapapapapapapapapapapgKhdpwpxpypzpAgZgGappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpItAtztBpMoYtCtEtDtEtFtGpfpNpEpEpEpEtHoYapapapapapapapapapapapapapapapapgGgZpypzpGpHpwhbgLappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfpfpPpQpfoYoYoYoYoYoYoYoYoYpRpEpEpEpFoYapapapapapapapapapapapapapapapapgLhbpGpHpOpApyhegHappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpUpVpWpXpfpfoYpYpZpZqapZpZqboYqcpEpEpEqdoYapapqeqeqeqeqeapqfqfqfqfqfapapapgHhepOpApSpwpGhqgJappjpTpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpUqhqipXpfpfqjqkpfpfpfpfpfqloYqmpEpEpEpvoYapapqeqnqoqpqeapqfqqqrqsqfapapapgJhqpSpwpypypOhsgMappjpkpBpBpBpBpBqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYqtquqvqwpfpfqxqyqzqAqBqCqyqloYoYoYpNoYoYoYoYoYqeqDqoqpqeapqfqEqrqsqfapapapgMhspypypGpGpShwhZappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYqFqGqHqIpftIoYqJqKoYqLoYqMqNoYqTrgpqpqqPtJqQoYqeqRqotKqeapqfqSqrtLqfapapaphZhwpGpGpOpOpyheilappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfpfpfpftMoYoYoYoYpfoYoYoYoYpqpqpqpqqUqUpqoYqeqRqotKqeapqfqSqrtLqfapapapilhepOpOpSpSpGhqitappjpTpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYqWqXqXqWpfqYoYqZrarbpfrcrdrerfrzpqpqrhrirjrkoYqeqRqoqpqeapqfqSqrqsqfapapapithqpSpSqVpypOhsixappjpkpBpBpBpBpBqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfpfpfpfrmoYrnpfpfpfpfpfrorfrppqpqpqrqrqpqoYqerrqoqoqeapqfqrqrqrqfapapapixhsqVpyrlpGpShwhZappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYrstNtPtOrwpMoYrxpfpfpfpfpfpfrypqpqpqpqpqpqrAoYqerBqorCqeapqfrDqrrEqfapapaphZhwiHigiRiriBiuilappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYoYoYoYoYoYoYoYrFpfpfpfpfpfrGoYrHpfpfpfpfqloYoYqerIrJrIqeapqfrKrLrKqfapapapiliuiFhsiPhwizizitappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfrMqjrNrOoYrPrQrRrSrTrUrVoYrWpfpfpfpfqlrXoYqeqerYqeqeapqfqfrZqfqfapapapitiziPhwhfiuiFiFixappjpkplplplplplqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYsasbscpfpfsdoYoYoYseseseoYoYoYsfpfpfpfpfqloYoYoYoYsgoYoYoYoYoYshoYoYoYapapixiFhfiuhaiziPiPjtappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYoYoYoYsipfpfsjqjrNrNrNrNrNskslpfpfpfpfpfsmrNrNrNsnpfqjrNrNrNsopfpfspoYapapjtiPhaizhciFhfhfjMappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfrMpftQsqsrssstpfqxsususvsrswstpfqxucsusususususususususususususxoYapapjMhfhciFgYiPhahajYappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYsasbscpfpfqloYoYoYsyoYoYoYoYoYoYsrszoYoYoYoYoYoYoYsrsroYsAoYsrsroYoYoYapapjYhagYiPhdhfhchcgFappjpkplplplplplqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYoYoYoYsBpfqloYsCsDsEsFsFoYsGoYsHsIsIsJsKoYsLsLsMtcsOsPtRsItsttsRsSsUoYapapgFhchdhfgZhagYgYgIappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYpfpfrMpfpfsVoYsEsEsEsEsEsWsEoYsXsIsIsIsYoYsZtatbtcsIsIsIsIsIsIsIsItdoYapapgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYsasbscqxtetfoYtgthsEtStioYtToYtjtktltmtnoYtUtUpftcsIsIsIsIsIsIsIsItVoYapapgKhdhbhchegYgZgZgGappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYtWtWtptctXtqtYuatZubtvtwtxoYapapgGgJhZgLilgHgMgMgLappepepepepepepetypeapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap apapapapapapapapapapapapapapapapapapapapapoYoYoYoYoYoYoYoYoYoYoYoYoYoYoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap "} From a52bac9f1c080138981729afc6c2f7e91baf1490 Mon Sep 17 00:00:00 2001 From: killer653 Date: Sun, 28 May 2017 18:48:20 -0400 Subject: [PATCH 030/261] Makes it so mice can't eat people. http://i.imgur.com/Huc8Ikk.jpg It was causing a lot of bugs --- code/modules/mob/living/simple_animal/animals/mouse_vr.dm | 8 +++++++- code/modules/mob/living/simple_animal/simple_animal_vr.dm | 4 +++- code/modules/vore/eating/living_vr.dm | 7 ++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/animals/mouse_vr.dm b/code/modules/mob/living/simple_animal/animals/mouse_vr.dm index 0cd0bd97c6..396d43a68b 100644 --- a/code/modules/mob/living/simple_animal/animals/mouse_vr.dm +++ b/code/modules/mob/living/simple_animal/animals/mouse_vr.dm @@ -1,2 +1,8 @@ +/mob/living/simple_animal/mouse + no_vore = 1 //Mice can't eat others due to the amount of bugs caused by it. + + + + /mob/living/simple_animal/mouse/attack_hand(mob/living/hander) - src.get_scooped(hander) //For one-click mouse scooping under any conditions. They knew what they were getting into! \ No newline at end of file + src.get_scooped(hander) //For one-click mouse scooping under any conditions. They knew what they were getting into! diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm index ab87fbe70a..4fe1e408d4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm +++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/GetIdCard() if(myid) return myid - + // Update fullness based on size & quantity of belly contents /mob/living/simple_animal/proc/update_fullness() var/new_fullness = 0 @@ -131,6 +131,8 @@ /mob/living/simple_animal/proc/init_belly() if(vore_organs.len) return + if(no_vore) //If it can't vore, let's not give it a stomach. + return var/datum/belly/B = new /datum/belly(src) B.immutable = 1 diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 686be7572d..68ceeb8d45 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -12,14 +12,19 @@ var/reviving = 0 // Only used for creatures that have the xenochimera regen ability, so far. var/metabolism = 0.0015 var/vore_taste = null // What the character tastes like + var/no_vore = 0 // If the character/mob can vore. // // Hook for generic creation of stuff on new creatures // /hook/living_new/proc/vore_setup(mob/living/M) - M.verbs += /mob/living/proc/insidePanel M.verbs += /mob/living/proc/escapeOOC M.verbs += /mob/living/proc/lick + if(no_vore) //If the mob isn's supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach. + M << "The creature that you are can not eat others." + return + M.verbs += /mob/living/proc/insidePanel + M.appearance_flags |= PIXEL_SCALE //Tries to load prefs if a client is present otherwise gives freebie stomach From 53d793a71f69dd632432af4bb86b9db1e5a5b6da Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Sun, 28 May 2017 20:15:54 -0300 Subject: [PATCH 031/261] Fixes RD window tint --- maps/tether/tether-01-surface.dmm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 9b45935d8d..efed994990 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -5141,7 +5141,6 @@ "bUT" = (/obj/structure/table/glass,/obj/machinery/computer/skills,/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUU" = (/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUV" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/mauve/border{dir = 4},/turf/simulated/floor/tiled,/area/rnd/rdoffice) -"bUW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/rdoffice) "bUX" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 10},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) @@ -5723,9 +5722,9 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYbTfbTgbTgbThbTgbTgbTfbTibTjbTkbTlbTmbTnbTobRKbRKbRKbTpbTqbTrbTsbTtbTtbTubTtbTtbTtbTvbTwbTxbTybTzbTAbTBbTCbTAbTDbTtbTtbTtbTtbTtbTtbTtbTEbTFbIZbIZbTGbTHbTIbTJbTKbTLbTMbTMbTMbTMbTMbTMbTNbTObTPbTQbJLboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabTfbTRbTSbTTbTUbTVbTfbTWbTXbTkbTlbTmbTnbTYbTZbUabTZbUbbTqbTrbUcbUdbUebUfbJYbJYbJYbUgbUhbUibUjbUjbUjbUkbUlbUmbUjbUjbUjbUjbUjbUnbUlbUobUjbUjbUjbUjbUpbFQbUqbUrbUsbSYbUtbUubUvbUwbUxbUybFQbUzbHebUAbJLboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabTfbUBbUCbUDbUEbUFbTfbUGbTXbTnbUHbUIbQubQubRCbRCbRCbQubQubQubUJbRCbQubHzbUKbUKbULbUMbIZbUNbULbUKbUKbHzbHzbHzbUKbUKbUKbUKbUKbHzbHzbHzbUKbUKbUKbUKbUKbFQbFQbFQbFQbUObUObUObUObUObFQbFQbFQbUObUObUObUPboZboZboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbURbUSbUTbUUbUVbUWbUXbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbVobVpbVqbUUbVrbUWbVsbTnbVtbZrbVvbVwbVvbVvbVvbVvbVvbVxbTnbTnbVybQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpaboZboZboZboZbpabpabpabpabpabpaboZboZboZbpabpabpabpabpabpabpabpabUQbVzbVAbUUbUUbVBbUWbVCbTnbTnbTnbTnbVDbVEbVEbVEbVEbVEbVFbTnbVGbVHbQubpabpabpabHzbVIbVJbVKbHzbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbURbUSbUTbUUbUVbTgbUXbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbVobVpbVqbUUbVrbTgbVsbTnbVtbZrbVvbVwbVvbVvbVvbVvbVvbVxbTnbTnbVybQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpaboZboZboZboZbpabpabpabpabpabpaboZboZboZbpabpabpabpabpabpabpabpabUQbVzbVAbUUbUUbVBbTgbVCbTnbTnbTnbTnbVDbVEbVEbVEbVEbVEbVFbTnbVGbVHbQubpabpabpabHzbVIbVJbVKbHzbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZbpabpabpabpabpabpabpabpabTfbVLbVMbVNbVObVPbTfbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebQubpabpabpabHzbWfbIZbUNbHzbpabpabpabpabpabpabpabpabpabpabpabWgbWgbWhbWhbWhbWhbWhbWgbWgbWgbWhbWhbWhbWhbWhbWgbWgbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZboZbpabpaboZbpaboZboZboZboZboZboZboZboZboZboZbpabpabpabTfbTfbWibWibWibTfbTfbQubWjbWjbWjbQubQubWjbWjbWjbQubQubWjbWjbWjbQubQubpabpabpabHzbWkbIZbWlbHzbpabpabpabpabpabpabpabpabpabpabpabWgbWmbWnbWnbWnbWnbWnbWobWpbWqbWnbWnbWnbWnbWnbWmbWgbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabWrbWsbWtbWtbWtbWtbWtbWubWnbWsbWtbWtbWtbWtbWtbWubWvbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY From 6649fa2a49492f848952a80895230fd57d30b280 Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Sun, 28 May 2017 22:14:57 -0300 Subject: [PATCH 032/261] Fixes Bridge cell lockers and adds missing wall flashes. --- maps/tether/tether-03-station.dmm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index f8ac89c2cc..54011cbb4c 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -1086,7 +1086,7 @@ "auT" = (/obj/machinery/computer/cryopod{pixel_y = 32},/obj/effect/floor_decal/techfloor{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/sleep/cryo) "auU" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/corner_techfloor_grid{dir = 5},/obj/effect/floor_decal/corner_techfloor_grid{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/sleep/cryo) "auV" = (/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/decal/cleanable/dirt,/turf/simulated/floor,/area/crew_quarters/sleep/cryo) -"auW" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{name = "Security Cells"; req_access = list(1)},/turf/simulated/floor/tiled/steel_grid,/area/security/hallway) +"auW" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"},/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) "auX" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eng_starboard_airlock"; pixel_x = 0; pixel_y = -25; req_access = list(13); req_one_access = null; tag_airpump = "eng_starboard_pump"; tag_chamber_sensor = "eng_starboard_sensor"; tag_exterior_door = "eng_starboard_outer"; tag_interior_door = "eng_starboard_inner"},/turf/simulated/floor/tiled/dark,/area/engineering/engine_eva) "auY" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eng_starboard_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_starboard_sensor"; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/engineering/engine_eva) "auZ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_starboard_inner"; locked = 1; name = "Engineering Starboard Internal Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/engineering/engine_eva) @@ -1923,8 +1923,8 @@ "aKY" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/structure/stairs/south,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) "aKZ" = (/obj/machinery/cryopod{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/brig) "aLa" = (/obj/structure/closet/secure_closet/brig,/obj/effect/floor_decal/industrial/outline,/turf/simulated/floor/tiled/dark,/area/security/brig) -"aLb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark,/area/security/brig) -"aLc" = (/obj/structure/closet/secure_closet/brig,/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) +"aLb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/flasher{id = "Cell 3"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/brig) +"aLc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/flasher{id = "Cell 4"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/brig) "aLd" = (/obj/item/weapon/stool/padded,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aLe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aLf" = (/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) @@ -2015,7 +2015,7 @@ "aMM" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals3{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/prison) "aMN" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/structure/stairs/north,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/security/prison) "aMO" = (/obj/machinery/cryopod{dir = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/brig) -"aMP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/security/brig) +"aMP" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4"},/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) "aMQ" = (/obj/structure/cable/green,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -28},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aMR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) @@ -5252,6 +5252,11 @@ "bWZ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/station/medbay) "bXa" = (/obj/structure/closet,/obj/random/maintenance/medical,/obj/random/junk,/obj/random/maintenance/medical,/obj/random/toy,/obj/random/action_figure,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random_multi/single_item/netgun,/obj/random_multi/single_item/teleport,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/station/medbay) "bXb" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/substation/command) +"bXc" = (/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) +"bXd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/flasher{id = "Cell 1"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/brig) +"bXe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/flasher{id = "Cell 2"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/brig) +"bXf" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2"},/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) +"bXg" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{name = "Security Cells"; req_access = list(1)},/turf/simulated/floor/tiled/steel_grid,/area/security/prison) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5411,11 +5416,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaJnaJoaJiaJ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaJEaJnaJFaJGaJHaJIaJeaacaacaacaJlaJJaJKaJLaJMaJNaJOaJMaJPanQaJMaJRaJSaJTaJUaJUaJUaJUaJVaJWaJXaJYaJZaKaaJmaKbaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKcaKcaKdaKeaKfaKgaJeaacaacaacaJlaKhaKiaKjaKkaKjaKjaKlaKmaKjaKnaKoaKjaKpaKqaKqaKqaKqaKqaKraJmaKsaKtaKuaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaKwaKwaKwaKwaKwaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKcaKcaKxaKyaKzaKzaJeaacaacaacaJlaKAaKBaKjaKCaKDaKjaKEaKFaKjaKEaKFaKjaKGaKHaKIaKJaKKaKLaKMaJmaKNaKOaKPaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaKwaKQaKRaKSaKSaKwaacaacaataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKTaKUaKVaKWaKzaKXaJeaacaacaacaJlaKhaKYaKjaKZaLaaKjaLbaLcaKjaLbaLcaKjaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaLnaLoaLpaKSaKSaKwaacaataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKTaKUaKVaKWaKzaKXaJeaacaacaacaJlaKhaKYaKjaKZaLaaKjaLbauWaKjaLcaMPaKjaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaLnaLoaLpaKSaKSaKwaacaataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaLqaLraKdaLsaLtaLuaJeaacaacaacaJlaKhagaagAaKjaKjaKjaLwaLxaKjaLyaLxaKjaLzaLeaLfaLAaLBaLCaLDaLEaLEaLEaLEaLEaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaLnaLoaLFaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaLGaLHaKxaLIaLJaLKaJeaacaacaacaJlaLLaLMaLNaLOaLPaLQaLOaLRaLSaLOaLRaLTaLUaLVaLOaLWaLXaLYaLZaLEaMaaMbaMcaLEaMdaJDaacaacaacaacaacaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaMeaMfaMgaMhaMiaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaJeaJeaMjaMkaJeaJeaJeaacaacaacaJlaMlaMmaKjaKjaKjaKjaMnaMoaKjaMpaMqaKjaMraLeaLfaMsaMtaLCaMuaLEaMvaMwaMxaLEaMdaJDaMyaMyaMyaMyaMyaMyaMzaMAaMAaMAaMBaMCaMAaMAaMDaMAaMAaMEaMFaMGaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaMHaMIaMJaMKaMLaMLaJeaacaacaacaJlaMMaMNaKjaMOaLaaKjaMPaLcaKjaMPaLcaKjaMQaLeaLfaMRaLfaMSaMTaMUaMVaMWaMXaLEaKvaJDaMYaMZaNaaNbaNcaMyaNdaKwaKwaNeaNeaNeaNeaNeaNeaNeaNeaNeaNfaNgaNhaNiaNjaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaMHaMIaMJaMKaMLaMLaJeaacaacaacaJlaMMaMNaKjaMOaLaaKjbXdbXcaKjbXebXfaKjaMQaLeaLfaMRaLfaMSaMTaMUaMVaMWaMXaLEaKvaJDaMYaMZaNaaNbaNcaMyaNdaKwaKwaNeaNeaNeaNeaNeaNeaNeaNeaNeaNfaNgaNhaNiaNjaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaMHaMHaNkaNlaMLaMLaJeaacaacaacaJlaNmaKBaKjaNnaKDaKjaNoaKFaKjaNoaKFaKjaNpaNqaNraNsaNtaNuaNvaLEaNwaNxaNyaLEaKvaJDaNzaNAaNBaNCaNDaMyaNdaKwaNEaNeaNFaNGaNHaNIaNJaNGaNKaNeaNLaNMaNhaNNaNjaataataataataataataataabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaNOaNOaNOaNPaNQaNOaNOaNOaNOaNOaNOaJlaNmaNRaKjaNSaKjaKjaNTaNUaKjaNVaNWaKjaNXaNYaNZaNZaNZaNZaOaaLEaLEaLEaLEaLEaKvaJDaObaOcaOdaOeaOfaMyaNdaKwaOgaNeaOhaOiaOjaOkaOlaOmaOnaNeaLoaLoaOoaNNaNjaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaNOaOpaOpaOqaOraOsaOtaOtaOuaOvaNOaJlaOwaOxaOyaOzaOAapnaOzaOCapmaOzaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaOPawDaORaKvaJDaOeaOSaOTaOUaOVaMyaOWaOXaOXaNeaOYaOZaPaaPbaPcaPdaPeaNeaKwaKwaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5540,7 +5545,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaacbppbrcbrdbrebrfbrgasvbqAbqAbqAbqAbqAbqAbqAbqAbqAbqAbqAbqAbqAbqBbpQbpQbpQbpQasybrhbribrjbrkbrlbrmbrnbrobrpbrqbrrbpzbpAbnPaacbrsbrtbrubrvbrwbrubrxbrybrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaacbppbrzbrAbrBbrCbrDasvbpQbrEbrEbrEbrEbrEbrEbrEbrEbrFbqAbqAbqAbqBbpQbpQbpQbqkbpybqCbrGbrHainbrJbrKbpzbrLbrLbrLbrLbpzbpAbnPaacbrsbrMbrNbrNbrObrNbrNbrPbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbppbrQbrRbrSbrTbrUasvbpQbrVbpQbpQbpQbpQbpQbpQbrVbrWbqAbqAbqAbqBbpQbpQbpQbpQbpybrXbrYbpybpybpybpybpzbpzbpzbpzbpzbpzbrZbnPaacbrsbsabrNbsbbscbsbbrNbsdbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbppbppbppbsfbsgbshatiaujaujaujatjatjatjatjatjaujavUatjauWatjavUatjatjatjaujaujbslbsmbsnbsobspbsqbsrbssbstbsubsvbsobpAbnPaacbrsbrMbswbrNbsxbrNbsybrPbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbppbppbppbsfbsgbshatiaujaujaujatjatjatjatjatjaujavUatjbXgatjavUatjatjatjaujaujbslbsmbsnbsobspbsqbsrbssbstbsubsvbsobpAbnPaacbrsbrMbswbrNbsxbrNbsybrPbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbszbszbszbszbszbszbszbsAbsBbsCbsDbsEbsFbsGbsHbsIbsHbsJbsKbsLbsKbsMbsNbsObsPbsQbsQbsRbsKbsMbsSbsTbsUbsobspbsVbsWbsXbsYbsZbtabsobpAbnPaacbrsbtbbtcbtdbtebtfbtgbthbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbszbszbszbszbszbszbszbtibtjbtkbtlbtmbtlbtnbtobtpbtqbtrbtlbtlbtlbtlbtsbttbtobtubtvbtwbtxbtlbtybtzbtAbtBbtCbtDbtEbtFbtGbtHbtIbsobpAbnPaacbrsbrsbrsbrsbrsbrsbrsbrsbrsaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbtJbtKbtJbtKbtJbtLbszbtMbtNbtObtPbtQbtRavZbtRbtRbtSbtRbtRbtRbtRbtTbtUbtVbtWbtXbtYbtZbtUbuabtRbubbucbudbuebsWbufbugbsYbsZbtabsobpAbnPaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From d2fa930662e65570992804886cbb1b492162989a Mon Sep 17 00:00:00 2001 From: killer653 Date: Sun, 28 May 2017 23:55:23 -0400 Subject: [PATCH 033/261] Returns one --- code/modules/vore/eating/living_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 68ceeb8d45..0655d33355 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -20,9 +20,9 @@ /hook/living_new/proc/vore_setup(mob/living/M) M.verbs += /mob/living/proc/escapeOOC M.verbs += /mob/living/proc/lick - if(no_vore) //If the mob isn's supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach. + if(M.no_vore) //If the mob isn's supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach. M << "The creature that you are can not eat others." - return + return 1 M.verbs += /mob/living/proc/insidePanel M.appearance_flags |= PIXEL_SCALE From 4d8b465cd9a9ab382a86c6c0c1ad414672dbf350 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 29 May 2017 05:08:25 -0400 Subject: [PATCH 034/261] Basically initial working traits --- code/__defines/belly_modes_vr.dm | 2 +- code/__defines/misc_vr.dm | 4 + code/_helpers/global_lists.dm | 2 +- code/_helpers/global_lists_vr.dm | 23 +- code/game/dna/dna2.dm | 8 + code/game/dna/dna2_helpers.dm | 13 +- .../preference_setup/general/03_body.dm | 4 +- .../client/preference_setup/vore/01_ears.dm | 14 - .../client/preference_setup/vore/07_traits.dm | 245 ++++++++++++++++++ code/modules/client/preferences.dm | 5 +- .../carbon/human/species/station/blank_vr.dm | 108 ++++++++ .../species/station/traits_vr/negative.dm | 63 +++++ .../species/station/traits_vr/neutral.dm | 31 +++ .../species/station/traits_vr/positive.dm | 75 ++++++ .../human/species/station/traits_vr/trait.dm | 20 ++ code/modules/mob/living/living.dm | 1 + code/modules/mob/new_player/new_player.dm | 2 +- code/modules/mob/new_player/new_player_vr.dm | 41 ++- code/modules/organs/organ.dm | 2 +- code/modules/organs/organ_icon.dm | 2 +- .../Chemistry-Reagents-Medicine_vr.dm | 15 +- code/modules/vore/eating/bellymodes_vr.dm | 7 +- code/modules/vore/eating/vorepanel_vr.dm | 3 + vorestation.dme | 6 + 24 files changed, 666 insertions(+), 30 deletions(-) create mode 100644 code/modules/client/preference_setup/vore/07_traits.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/blank_vr.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm create mode 100644 code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 9e0a66fb6f..1fb1cbf02c 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -1,6 +1,7 @@ // Belly Mode Constants #define DM_HOLD "Hold" #define DM_DIGEST "Digest" +#define DM_DIGEST_NUMB "Digest (Numbing)" #define DM_HEAL "Heal" #define DM_ABSORB "Absorb" #define DM_TRANSFORM_HAIR_AND_EYES "Transform (Hair and eyes)" @@ -18,7 +19,6 @@ #define DM_DRAIN "Drain" #define DM_UNABSORB "Unabsorb" - // Stance for hostile mobs to be in while devouring someone. #define HOSTILE_STANCE_EATING 99 diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm index 7f25f41475..b3c87fcec3 100644 --- a/code/__defines/misc_vr.dm +++ b/code/__defines/misc_vr.dm @@ -15,3 +15,7 @@ #define VANTAG_KILL "vantag_kill" #define ANNOUNCER_NAME "Facility PA" + +//For custom species +#define STARTING_SPECIES_POINTS 1 +#define MAX_SPECIES_TRAITS 4 diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 72937092c4..73d41048ed 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -32,7 +32,7 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages var/global/list/whitelisted_species = list("Human") // Species that require a whitelist check. -var/global/list/playable_species = list("Human") // A list of ALL playable species, whitelisted, latejoin or otherwise. +var/global/list/playable_species = list("Custom Species","Human") // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious. var/list/mannequins_ diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index fe953e1f1b..3e83ce7fbf 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -4,6 +4,11 @@ var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type +var/global/list/negative_traits = list() // Negative custom species traits, indexed by path +var/global/list/neutral_traits = list() // Neutral custom species traits, indexed by path +var/global/list/positive_traits = list() // Positive custom species traits, indexed by path +var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup +var/global/list/all_traits = list() // All of 'em at once (same instances) //stores numeric player size options indexed by name var/global/list/player_sizes_list = list( @@ -120,4 +125,20 @@ var/global/list/tf_egg_types = list( for(var/path in paths) var/datum/sprite_accessory/tail/instance = new path() tail_styles_list[path] = instance - return 1 // Hooks must return 1 + + // Custom species traits + paths = typesof(/datum/trait) - /datum/trait + for(var/path in paths) + var/datum/trait/instance = new path() + var/cost = instance.cost + traits_costs[path] = cost + all_traits[path] = instance + switch(cost) + if(-INFINITY to -0.1) + negative_traits[path] = instance + if(0) + neutral_traits[path] = instance + if(0.1 to INFINITY) + positive_traits[path] = instance + + return 1 // Hooks must return 1 \ No newline at end of file diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 6866f8fcb4..4e5af5e504 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -90,6 +90,8 @@ var/global/list/datum/dna/gene/dna_genes[0] // VOREStation var/custom_species + var/base_species = "Human" + var/list/species_traits = list() // VOREStation // New stuff @@ -105,6 +107,8 @@ var/global/list/datum/dna/gene/dna_genes[0] new_dna.real_name=real_name new_dna.species=species new_dna.body_markings=body_markings.Copy() + new_dna.base_species=base_species //VOREStation Edit + new_dna.species_traits=species_traits.Copy() //VOREStation Edit for(var/b=1;b<=DNA_SE_LENGTH;b++) new_dna.SE[b]=SE[b] if(b<=DNA_UI_LENGTH) @@ -163,6 +167,10 @@ var/global/list/datum/dna/gene/dna_genes[0] // Technically custom_species is not part of the UI, but this place avoids merge problems. src.custom_species = character.custom_species + if(istype(character.species,/datum/species/custom)) + var/datum/species/custom/CS = character.species + src.species_traits = CS.traits.Copy() + src.base_species = CS.base_species // +1 to account for the none-of-the-above possibility SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 4482967cf9..784898cd82 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -201,11 +201,15 @@ // Technically custom_species is not part of the UI, but this place avoids merge problems. H.custom_species = dna.custom_species + if(istype(H.species,/datum/species/custom)) + var/datum/species/custom/CS = H.species + CS.produceCopy(dna.base_species,dna.species_traits,src) // VOREStation Edit End + H.force_update_organs() //VOREStation Add - Gotta do this too H.force_update_limbs() - H.update_body(0) + //H.update_body(0) //VOREStation Edit - Done in force_update_limbs already H.update_eyes() H.update_hair() @@ -213,6 +217,13 @@ else return 0 +//VOREStation Add +/mob/living/carbon/human/proc/force_update_organs() + for(var/organ in organs + internal_organs) + var/obj/item/organ/O = organ + O.species = species +//VOREStation Add End + // Used below, simple injection modifier. /proc/probinj(var/pr, var/inj) return prob(pr+inj*pr) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 81bbf075de..72df34b08c 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -384,7 +384,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - if(!(pref.species in S.species_allowed)) + if(!(pref.species in S.species_allowed) && (!pref.custom_base || !(pref.custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance continue valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] @@ -440,7 +440,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O continue if(pref.biological_gender == FEMALE && S.gender == MALE) continue - if(!(pref.species in S.species_allowed)) + if(!(pref.species in S.species_allowed) && (!pref.custom_base || !(pref.custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance continue valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle] diff --git a/code/modules/client/preference_setup/vore/01_ears.dm b/code/modules/client/preference_setup/vore/01_ears.dm index 9757e28846..04bec4c2ee 100644 --- a/code/modules/client/preference_setup/vore/01_ears.dm +++ b/code/modules/client/preference_setup/vore/01_ears.dm @@ -6,7 +6,6 @@ // Define a place to save appearance in character setup /datum/preferences - var/custom_species // Custom species name var/ear_style // Type of selected ear style var/tail_style // Type of selected tail style var/r_tail = 30 // Tail/Taur color @@ -20,7 +19,6 @@ sort_order = 1 /datum/category_item/player_setup_item/vore/ears/load_character(var/savefile/S) - S["custom_species"] >> pref.custom_species S["ear_style"] >> pref.ear_style S["tail_style"] >> pref.tail_style S["r_tail"] >> pref.r_tail @@ -28,7 +26,6 @@ S["b_tail"] >> pref.b_tail /datum/category_item/player_setup_item/vore/ears/save_character(var/savefile/S) - S["custom_species"] << pref.custom_species S["ear_style"] << pref.ear_style S["tail_style"] << pref.tail_style S["r_tail"] << pref.r_tail @@ -45,7 +42,6 @@ pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style)) /datum/category_item/player_setup_item/vore/ears/copy_to_mob(var/mob/living/carbon/human/character) - character.custom_species = pref.custom_species character.ear_style = ear_styles_list[pref.ear_style] character.tail_style = tail_styles_list[pref.tail_style] character.r_tail = pref.r_tail @@ -86,20 +82,10 @@ if (T.do_colouration) . += "Change Color
    __

    " - . += "Custom Species " - . += "[pref.custom_species ? pref.custom_species : "None"]
    " - /datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user) if(!CanUseTopic(user)) return TOPIC_NOACTION - else if(href_list["custom_species"]) - var/raw_choice = sanitize(input(user, "Input your character's species:", - "Character Preference", pref.custom_species) as null|text, MAX_NAME_LEN) - if (CanUseTopic(user)) - pref.custom_species = raw_choice - return TOPIC_REFRESH - else if(href_list["ear_style"]) // Construct the list of names allowed for this user. var/list/pretty_ear_styles = list("Normal" = null) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm new file mode 100644 index 0000000000..602751c63f --- /dev/null +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -0,0 +1,245 @@ +#define POSITIVE_MODE 1 +#define NEUTRAL_MODE 2 +#define NEGATIVE_MODE 3 + +/datum/preferences + var/custom_species // Custom species name, can't be changed due to it having been used in savefiles already. + var/custom_base // What to base the custom species on + + var/list/pos_traits = list() // What traits they've selected for their custom species + var/list/neu_traits = list() + var/list/neg_traits = list() + + var/traits_cheating = 0 //Varedit by admins allows saving new maximums on people who apply/etc + var/starting_trait_points = STARTING_SPECIES_POINTS + var/max_traits = MAX_SPECIES_TRAITS + +// Definition of the stuff for Ears +/datum/category_item/player_setup_item/vore/traits + name = "Traits" + sort_order = 7 + +/datum/category_item/player_setup_item/vore/traits/load_character(var/savefile/S) + S["custom_species"] >> pref.custom_species + S["custom_base"] >> pref.custom_base + S["pos_traits"] >> pref.pos_traits + S["neu_traits"] >> pref.neu_traits + S["neg_traits"] >> pref.neg_traits + + S["traits_cheating"]>> pref.traits_cheating + S["max_traits"] >> pref.max_traits + S["trait_points"] >> pref.starting_trait_points + +/datum/category_item/player_setup_item/vore/traits/save_character(var/savefile/S) + S["custom_species"] << pref.custom_species + S["custom_base"] << pref.custom_base + S["pos_traits"] << pref.pos_traits + S["neu_traits"] << pref.neu_traits + S["neg_traits"] << pref.neg_traits + + S["traits_cheating"]<< pref.traits_cheating + S["max_traits"] << pref.max_traits + S["trait_points"] << pref.starting_trait_points + +/datum/category_item/player_setup_item/vore/traits/sanitize_character() + if(!pref.pos_traits) pref.pos_traits = list() + if(!pref.neu_traits) pref.neu_traits = list() + if(!pref.neg_traits) pref.neg_traits = list() + + if(!pref.traits_cheating) + pref.starting_trait_points = STARTING_SPECIES_POINTS + pref.max_traits = MAX_SPECIES_TRAITS + + if(pref.species != "Custom Species") + pref.custom_species = null + pref.pos_traits.Cut() + pref.neu_traits.Cut() + pref.neg_traits.Cut() + else + // Clean up positive traits + for(var/path in pref.pos_traits) + if(!(path in positive_traits)) + pref.pos_traits -= path + //Neutral traits + for(var/path in pref.neu_traits) + if(!(path in neutral_traits)) + pref.neu_traits -= path + //Negative traits + for(var/path in pref.neg_traits) + if(!(path in negative_traits)) + pref.neg_traits -= path + + if(!pref.custom_base || !(pref.custom_base in playable_species - whitelisted_species)) + pref.custom_base = "Human" + +/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character) + character.custom_species = pref.custom_species + if(pref.species == "Custom Species") + var/datum/species/custom/CS = character.species + var/S = pref.custom_base ? pref.custom_base : "Human" + CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) + +/datum/category_item/player_setup_item/vore/traits/content(var/mob/user) + if(pref.species == "Custom Species" || pref.custom_species) + . += "Custom Species " + . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
    " + + if(pref.species == "Custom Species") + . += "Icon Base: " + . += "[pref.custom_base ? pref.custom_base : "Human"]
    " + + var/points_left = pref.starting_trait_points + var/traits_left = pref.max_traits + for(var/T in pref.pos_traits + pref.neu_traits + pref.neg_traits) + points_left -= traits_costs[T] + traits_left-- + + . += "Points Left: [points_left]
    " + . += "Traits Left: [traits_left]
    " + if(points_left < 0 || traits_left < 0 || !pref.custom_species) + . += "^ Fix things! ^
    " + + . += "Positive Trait +
    " + . += "" + + . += "Neutral Trait +
    " + . += "" + + . += "Negative Trait +
    " + . += "" + +/datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user) + if(!CanUseTopic(user)) + return TOPIC_NOACTION + + else if(href_list["custom_species"]) + if(pref.species != "Custom Species") + alert("You cannot set a custom species name unless you set your character to use the 'Custom Species' \ + species on the 'General' tab. If you have this set to something, it's because you had it set before the \ + Trait system was implemented. If you wish to change it, set your species to 'Custom Species' and configure \ + the species completely.") + return TOPIC_REFRESH + var/raw_choice = sanitize(input(user, "Input your custom species name:", + "Character Preference", pref.custom_species) as null|text, MAX_NAME_LEN) + if (CanUseTopic(user)) + pref.custom_species = raw_choice + return TOPIC_REFRESH + + else if(href_list["custom_base"]) + var/text_choice = input("Pick an icon set for your species:","Icon Base") in playable_species - whitelisted_species - "Custom Species" + if(text_choice in playable_species) + pref.custom_base = text_choice + return TOPIC_REFRESH_UPDATE_PREVIEW + + else if(href_list["clicked_pos_trait"]) + var/datum/trait/trait = text2path(href_list["clicked_pos_trait"]) + var/choice = alert("Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait","Remove","Cancel") + if(choice == "Remove") + pref.pos_traits -= trait + return TOPIC_REFRESH + + else if(href_list["clicked_neu_trait"]) + var/datum/trait/trait = text2path(href_list["clicked_neu_trait"]) + var/choice = alert("Remove [initial(trait.name)]?","Remove Trait","Remove","Cancel") + if(choice == "Remove") + pref.neu_traits -= trait + return TOPIC_REFRESH + + else if(href_list["clicked_neg_trait"]) + var/datum/trait/trait = text2path(href_list["clicked_neg_trait"]) + var/choice = alert("Remove [initial(trait.name)] and lose [initial(trait.cost)] points?","Remove Trait","Remove","Cancel") + if(choice == "Remove") + pref.neg_traits -= trait + return TOPIC_REFRESH + + else if(href_list["add_trait"]) + var/mode = text2num(href_list["add_trait"]) + var/list/picklist + var/list/mylist + switch(mode) + if(POSITIVE_MODE) + picklist = positive_traits.Copy() - pref.pos_traits + mylist = pref.pos_traits + if(NEUTRAL_MODE) + picklist = neutral_traits.Copy() - pref.pos_traits + mylist = pref.neu_traits + if(NEGATIVE_MODE) + picklist = negative_traits.Copy() - pref.pos_traits + mylist = pref.neg_traits + else + + if(isnull(picklist)) + return TOPIC_REFRESH + + if(isnull(mylist)) + return TOPIC_REFRESH + + var/list/nicelist = list() + for(var/P in picklist) + var/datum/trait/T = picklist[P] + nicelist[T.name] = P + + var/points_left = pref.starting_trait_points + for(var/T in pref.pos_traits + pref.neu_traits + pref.neg_traits) + points_left -= traits_costs[T] + + var/traits_left = pref.max_traits - (pref.pos_traits.len + pref.neg_traits.len + pref.neu_traits.len) + + var/trait_choice + var/done = FALSE + while(!done) + var/message = "\[Remaining: [points_left] points, [traits_left] traits\] Select a trait to read the description and see the cost." + trait_choice = input(message,"Positive Traits") in nicelist + if(trait_choice in nicelist) + var/datum/trait/path = nicelist[trait_choice] + var/choice = alert("\[Cost:[initial(path.cost)]\] [initial(path.desc)]",initial(path.name),"Take Trait","Cancel","Go Back") + if(choice == "Cancel") + trait_choice = null + if(choice != "Go Back") + done = TRUE + + if(!trait_choice) + return TOPIC_REFRESH + else if(trait_choice in nicelist) + var/datum/trait/path = nicelist[trait_choice] + var/datum/trait/instance = all_traits[path] + + var/conflict = FALSE + + varconflict: + for(var/P in pref.pos_traits + pref.neu_traits + pref.neg_traits) + var/datum/trait/instance_test = all_traits[P] + if(path in instance_test.excludes) + conflict = instance_test.name + break varconflict + + for(var/V in instance.var_changes) + if(V in instance_test.var_changes) + conflict = instance_test.name + break varconflict + + if(conflict) + alert("You cannot take this trait and [conflict] at the same time. \ + Please remove that trait, or pick another trait to add.","Error") + return TOPIC_REFRESH + + mylist += path + return TOPIC_REFRESH + + return ..() + +#undef POSITIVE_MODE +#undef NEUTRAL_MODE +#undef NEGATIVE_MODE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2c35c44fff..3489b25d8c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -274,7 +274,10 @@ datum/preferences // Ask the preferences datums to apply their own settings to the new mob player_setup.copy_to_mob(character) - + + // VOREStation Edit - Sync up all their organs and species one final time + character.force_update_organs() + if(icon_updates) character.force_update_limbs() character.update_mutations(0) diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm new file mode 100644 index 0000000000..1906bd3722 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -0,0 +1,108 @@ +/datum/species + var/vore_numbing = 0 + +/datum/species/custom + name = "Custom Species" + name_plural = "Custom" + var/base_species = "Human" + + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite) + + blurb = "This is a custom species where you can assign various species traits to them as you wish, to \ + create a (hopefully) balanced species. You will see the options to customize them on the VORE tab once \ + you select and set this species as your species. Please look at the VORE tab if you select this species." + + name_language = null // Use the first-name last-name generator rather than a language scrambler + min_age = 18 + max_age = 200 + health_hud_intensity = 2 + num_alternate_languages = 3 + + spawn_flags = SPECIES_CAN_JOIN + appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR + + var/list/traits = list() + +/datum/species/custom/get_bodytype() + return base_species + +/datum/species/custom/get_race_key() + var/datum/species/real = all_species[base_species] + return real.race_key + +/datum/species/custom/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H) + ASSERT(to_copy) + ASSERT(istype(H)) + + if(ispath(to_copy)) + to_copy = "[initial(to_copy.name)]" + if(istext(to_copy)) + to_copy = all_species[to_copy] + + var/datum/species/custom/new_copy = new() + + //Initials so it works with a simple path passed, or an instance + new_copy.base_species = to_copy.name + new_copy.icobase = to_copy.icobase + new_copy.deform = to_copy.deform + new_copy.tail = to_copy.tail + new_copy.tail_animation = to_copy.tail_animation + new_copy.icobase_tail = to_copy.icobase_tail + new_copy.color_mult = to_copy.color_mult + new_copy.primitive_form = to_copy.primitive_form + new_copy.appearance_flags = to_copy.appearance_flags + new_copy.flesh_color = to_copy.flesh_color + new_copy.base_color = to_copy.base_color + new_copy.blood_mask = to_copy.blood_mask + new_copy.damage_mask = to_copy.damage_mask + new_copy.damage_overlays = to_copy.damage_overlays + + new_copy.traits = traits + + //If you had traits, apply them + if(new_copy.traits) + for(var/trait in new_copy.traits) + var/datum/trait/T = all_traits[trait] + T.apply(new_copy,H) + + //Set up a mob + H.species = new_copy + H.icon_state = lowertext(new_copy.get_bodytype()) + + if(new_copy.holder_type) + H.holder_type = new_copy.holder_type + + if(H.dna) + H.dna.ready_dna(H) + + return new_copy + +// Stub species overrides for shoving trait abilities into + +//Called when face-down in the water or otherwise over their head. +// Return: TRUE for able to breathe fine in water. +/datum/species/custom/can_breathe_water() + return ..() + +//Called during handle_environment in Life() ticks. +// Return: Not used. +/datum/species/custom/handle_environment_special(var/mob/living/carbon/human/H) + return ..() + +//Called when spawning to equip them with special things. +/datum/species/custom/equip_survival_gear(var/mob/living/carbon/human/H) + /* Example, from Vox: + H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) + if(H.backbag == 1) + H.equip_to_slot_or_del(new /obj/item/weapon/tank/vox(H), slot_back) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H), slot_r_hand) + H.internal = H.back + else + H.equip_to_slot_or_del(new /obj/item/weapon/tank/vox(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack) + H.internal = H.r_hand + H.internal = locate(/obj/item/weapon/tank) in H.contents + if(istype(H.internal,/obj/item/weapon/tank) && H.internals) + H.internals.icon_state = "internal1" + */ + return ..() diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm new file mode 100644 index 0000000000..0a854e3456 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -0,0 +1,63 @@ +/datum/trait/speed_slow + name = "Slowdown" + desc = "Allows you to move slower on average than baseline." + cost = -1 + var_changes = list("slowdown" = 0.3) + +/datum/trait/speed_slow_plus + name = "Slowdown (Plus)" + desc = "Allows you to move MUCH slower on average than baseline." + cost = -2 + var_changes = list("slowdown" = 0.5) + +/datum/trait/weakling + name = "Weakling" + desc = "Causes heavy equipment to slow you down more when carried." + cost = -1 + var_changes = list("item_slowdown_mod" = 1.5) + +/datum/trait/weakling_plus + name = "Weakling (Plus)" + desc = "Allows you to carry heavy equipment with much more slowdown." + cost = -2 + var_changes = list("item_slowdown_mod" = 2.0) + +/datum/trait/endurance_low + name = "Low Endurance" + desc = "Reduces your maximum total hitpoints." + cost = -2 + var_changes = list("total_health" = 75) + + apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..(S,H) + H.setMaxHealth(S.total_health) + +/datum/trait/brute_weak + name = "Brute Weakness" + desc = "Increases damage from brute damage sources." + cost = -1 + var_changes = list("brute_mod" = 1.15) + +/datum/trait/brute_weak_plus + name = "Brute Weakness (Plus)" + desc = "Increases damage significantly from brute damage sources." + cost = -2 + var_changes = list("brute_mod" = 1.30) + +/datum/trait/burn_weak + name = "Burn Weakness" + desc = "Increases damage from burn damage sources." + cost = -1 + var_changes = list("burn_mod" = 1.15) + +/datum/trait/burn_weak_plus + name = "Burn Weakness (Plus)" + desc = "Increases damage significantly from burn damage sources." + cost = -2 + var_changes = list("burn_mod" = 1.30) + +/datum/trait/photosensitive + name = "Photosensitive" + desc = "Increases stun duration from flashes and other light-based stuns." + cost = -1 + var_changes = list("flash_mod" = 2.0) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm new file mode 100644 index 0000000000..b27dbf9cbc --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -0,0 +1,31 @@ +/datum/trait/metabolism_up + name = "Fast Metabolism" + desc = "You process ingested and injected reagents faster, but get hungry faster." + cost = 0 + var_changes = list("metabolic_rate" = 1.2) + +/datum/trait/metabolism_down + name = "Slow Metabolism" + desc = "You process ingested and injected reagents slower, but get hungry slower." + cost = 0 + var_changes = list("metabolic_rate" = 0.8) + +/datum/trait/vore_numbing + name = "Prey Numbing" + desc = "Adds a 'Digest (Numbing)' belly mode, to douse prey in numbing enzymes during digestion." + cost = 0 + var_changes = list("vore_numbing" = TRUE) + +/datum/trait/cold_discomfort + name = "Hot-Blooded" + desc = "You are too hot at the standard 20C. 18C is more suitable. Rolling down your jumpsuit or being unclothed helps." + cost = 0 + var_changes = list("heat_discomfort_level" = T0C+19) + excludes = list(/datum/trait/hot_discomfort) + +/datum/trait/hot_discomfort + name = "Cold-Blooded" + desc = "You are too cold at the standard 20C. 22C is more suitable. Wearing clothing that covers your legs and torso helps." + cost = 0 + var_changes = list("cold_discomfort_level" = T0C+21) + excludes = list(/datum/trait/cold_discomfort) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm new file mode 100644 index 0000000000..9c1c1519c8 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -0,0 +1,75 @@ +/datum/trait/speed_fast + name = "Haste" + desc = "Allows you to move faster on average than baseline." + cost = 2 + var_changes = list("slowdown" = -0.3) + +/datum/trait/speed_fast_plus + name = "Haste (Plus)" + desc = "Allows you to move MUCH faster on average than baseline." + cost = 3 + var_changes = list("slowdown" = -0.5) + +/datum/trait/hardy + name = "Hardy" + desc = "Allows you to carry heavy equipment with less slowdown." + cost = 1 + var_changes = list("item_slowdown_mod" = 0.5) + +/datum/trait/hardy_plus + name = "Hardy (Plus)" + desc = "Allows you to carry heavy equipment with almost no slowdown." + cost = 2 + var_changes = list("item_slowdown_mod" = 0.1) + +/datum/trait/endurance_high + name = "High Endurance" + desc = "Increases your maximum total hitpoints." + cost = 2 + var_changes = list("total_health" = 125) + + apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..(S,H) + H.setMaxHealth(S.total_health) + +/datum/trait/darksight + name = "Darksight" + desc = "Allows you to see a short distance in the dark." + cost = 1 + var_changes = list("darksight" = 3) + +/datum/trait/darksight_plus + name = "Darksight (Plus)" + desc = "Allows you to see in the dark for the whole screen." + cost = 2 + var_changes = list("darksight" = 7) + +/datum/trait/melee_attack + name = "Sharp Melee" + desc = "Provides sharp melee attacks that do slightly more damage." + cost = 1 + var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)) + +/datum/trait/brute_resist + name = "Brute Resist" + desc = "Adds some resistance to brute damage sources." + cost = 1 + var_changes = list("brute_mod" = 0.85) + +/datum/trait/brute_resist_plus + name = "Brute Resist (Plus)" + desc = "Adds some resistance to brute damage sources." + cost = 2 + var_changes = list("brute_mod" = 0.70) + +/datum/trait/burn_resist + name = "Burn Resist" + desc = "Adds some resistance to burn damage sources." + cost = 1 + var_changes = list("burn_mod" = 0.85) + +/datum/trait/burn_resist_plus + name = "Burn Resist (Plus)" + desc = "Adds some resistance to burn damage sources." + cost = 2 + var_changes = list("burn_mod" = 0.70) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm new file mode 100644 index 0000000000..b225cc6e89 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm @@ -0,0 +1,20 @@ +/datum/trait + var/name = "Prototype Trait" + var/desc = "Contact a developer if you see this trait." + + var/cost = 0 // 0 is neutral, negative cost means negative, positive cost means positive. + var/list/var_changes // A list to apply to the custom species vars. + var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars. + +//Proc can be overridden lower to include special changes, make sure to call up though for the vars changes +/datum/trait/proc/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ASSERT(S) + if(var_changes) + for(var/V in var_changes) + S.vars[V] = var_changes[V] + return + +//Similar to the above, but for removing. Probably won't be called often/ever. +/datum/trait/proc/remove(var/datum/species/S) + ASSERT(S) + return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 459195f092..554de787d7 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -387,6 +387,7 @@ default behaviour is: return result /mob/living/proc/setMaxHealth(var/newMaxHealth) + health = (health/maxHealth) * (newMaxHealth) //VOREStation Add - Adjust existing health maxHealth = newMaxHealth /mob/living/Stun(amount) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 782e03a06a..c4ad0699ef 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -488,7 +488,7 @@ //new_character.dna.UpdateSE() // Do the initial caching of the player's body icons. - new_character.force_update_limbs() + //new_character.force_update_limbs() //VOREStation Removal - This is done in copy_to, don't waste time. new_character.update_eyes() new_character.regenerate_icons() diff --git a/code/modules/mob/new_player/new_player_vr.dm b/code/modules/mob/new_player/new_player_vr.dm index d2dbfadf52..199563de4a 100644 --- a/code/modules/mob/new_player/new_player_vr.dm +++ b/code/modules/mob/new_player/new_player_vr.dm @@ -1,8 +1,41 @@ /mob/new_player/proc/spawn_checks_vr() - var/pass = 1 - if (config.allow_Metadata && client && client.prefs && (isnull(client.prefs.metadata) || length(client.prefs.metadata) < 5)) - src << "You must first set your OOC notes before spawning in!" - pass = 0 + var/pass = TRUE + + //No OOC notes + if (config.allow_Metadata && client && client.prefs && (isnull(client.prefs.metadata) || length(client.prefs.metadata) < 15)) + src << "Please set informative OOC notes related to ERP preferences. Set them using the 'OOC Notes' button on the 'General' tab in character setup." + pass = FALSE + + //Custom species checks + if (client && client.prefs && client.prefs.species == "Custom Species") + + //Didn't name it + if(!client.prefs.custom_species) + pass = FALSE + src << "You have to name your custom species. Do this on the VORE tab in character setup." + + //Check traits/costs + var/list/megalist = client.prefs.pos_traits + client.prefs.neu_traits + client.prefs.neg_traits + var/points_left = client.prefs.starting_trait_points + var/traits_left = client.prefs.max_traits + for(var/T in megalist) + traits_left-- + var/cost = traits_costs[T] + + //A trait was removed from the game + if(isnull(cost)) + pass = FALSE + src << "Your custom species is not playable. One or more traits appear to have been removed from the game or renamed. Enter character setup to correct this." + break + else + points_left -= traits_costs[T] + + //Went into negatives + if(points_left < 0 || traits_left < 0) + pass = FALSE + src << "Your custom species is not playable. Reconfigure your traits on the VORE tab." + + //Final popup notice if (!pass) alert(src,"There were problems with spawning your character. Check your message log for details.","Error","OK") return pass diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 02450c2c5c..1899b8a3c7 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -55,7 +55,7 @@ var/list/organ_cache = list() species = all_species["Human"] if(holder.dna) dna = holder.dna.Clone() - species = all_species[dna.species] + species = holder.species //VOREStation Edit - For custom species else log_debug("[src] at [loc] spawned without a proper DNA.") var/mob/living/carbon/human/H = holder diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index c64fb36cc4..fc734e0e81 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -102,7 +102,7 @@ var/global/list/limb_icon_cache = list() if(owner && owner.gender == MALE) gender = "m" - icon_cache_key = "[icon_name]_[species ? species.name : "Human"]" + icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : "Human"]" //VOREStation Edit if(force_icon) mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]") diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm index ddc0a5a411..bebbb91325 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine_vr.dm @@ -15,4 +15,17 @@ if(M.eye_blurry) M.eye_blurry = max(M.eye_blurry - 8*removed, 0) if(M.jitteriness) - M.make_jittery(max(M.jitteriness - 8*removed,0)) \ No newline at end of file + M.make_jittery(max(M.jitteriness - 8*removed,0)) + +/datum/reagent/numbing_enzyme + name = "Numbing Enzyme" + id = "numbenzyme" + description = "Some sort of organic painkiller." + taste_description = "sourness" + reagent_state = LIQUID + color = "#800080" + metabolism = 0.02 + mrate_static = TRUE + +/datum/reagent/numbing_enzyme/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, 200) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 0836ef1891..2a14eb0a89 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -22,7 +22,7 @@ return //Pretty boring, huh //////////////////////////// DM_DIGEST //////////////////////////// - if(digest_mode == DM_DIGEST) + if(digest_mode == DM_DIGEST || digest_mode == DM_DIGEST_NUMB) if(prob(50)) //Was SO OFTEN. AAAA. var/churnsound = pick(digestion_sounds) @@ -60,6 +60,11 @@ owner.update_icons() continue + if(digest_mode == DM_DIGEST_NUMB && ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.bloodstr.get_reagent_amount("numbenzyme") < 5) + H.bloodstr.add_reagent("numbenzyme",10) + // Deal digestion damage (and feed the pred) if(!(M.status_flags & GODMODE)) M.adjustBruteLoss(digest_brute) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index e186b8ec84..9e882c5ab8 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -451,6 +451,9 @@ if(href_list["b_mode"]) var/list/menu_list = selected.digest_modes if(istype(usr,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = usr + if(H.species.vore_numbing) + menu_list += DM_DIGEST_NUMB menu_list += selected.transform_modes if(selected.digest_modes.len == 1) // Don't do anything diff --git a/vorestation.dme b/vorestation.dme index 3b28ef75d1..0c298486a4 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1298,6 +1298,7 @@ #include "code\modules\client\preference_setup\vore\04_resleeving.dm" #include "code\modules\client\preference_setup\vore\05_persistence.dm" #include "code\modules\client\preference_setup\vore\06_vantag.dm" +#include "code\modules\client\preference_setup\vore\07_traits.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\clothing_accessories.dm" @@ -1764,6 +1765,7 @@ #include "code\modules\mob\living\carbon\human\species\species_vr.dm" #include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" #include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" +#include "code\modules\mob\living\carbon\human\species\station\blank_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey_vr.dm" @@ -1774,6 +1776,10 @@ #include "code\modules\mob\living\carbon\human\species\station\station_special_abilities_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\station_special_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\station_vr.dm" +#include "code\modules\mob\living\carbon\human\species\station\traits_vr\negative.dm" +#include "code\modules\mob\living\carbon\human\species\station\traits_vr\neutral.dm" +#include "code\modules\mob\living\carbon\human\species\station\traits_vr\positive.dm" +#include "code\modules\mob\living\carbon\human\species\station\traits_vr\trait.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" From 9316d49972d521cef369957dd3ad193d3653edc2 Mon Sep 17 00:00:00 2001 From: killer653 Date: Mon, 29 May 2017 13:20:31 -0400 Subject: [PATCH 035/261] Gives Vorrakul a mouse plushie Resolves #1576 --- .../vore/fluffstuff/custom_items_vr.dm | 10 ++++++++++ config/custom_items.txt | 6 ++++++ icons/vore/custom_items_vr.dmi | Bin 38569 -> 39226 bytes 3 files changed, 16 insertions(+) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 942baaf238..12ba4639a1 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -259,6 +259,16 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie item_state = "flag_advent_mob" +//Vorrakul: Kaitlyn Fiasco +/obj/item/toy/plushie/mouse/fluff + name = "Mouse Plushie" + desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend." + slot_flags = SLOT_HEAD + icon_state = "mouse_brown" + item_state = "mouse_brown_head" + icon = 'icons/vore/custom_items_vr.dmi' + icon_override = 'icons/vore/custom_items_vr.dmi' + //zodiacshadow: ? /obj/item/device/radio/headset/fluff/zodiacshadow name = "Nehi's 'phones" diff --git a/config/custom_items.txt b/config/custom_items.txt index cb7a912a5b..5e142ea5eb 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -589,6 +589,12 @@ character_name: Theodora Lindt item_path: /obj/item/weapon/implanter/reagent_generator/vorrarkul } +{ +ckey: vorrarkul +character_name: Kaitlyn Fiasco +item_path: /obj/item/toy/plushie/mouse/fluff +} + { ckey: Viveret character_name: Keturah diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 1b1653f8c6c58a0d5697af6bba26512f5633ca7b..1131ce4a1a337797609fb40b71fccf5df99e48bb 100644 GIT binary patch delta 18771 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
    OjQ}OmyFk8>Hd{_BeAH|3F7hh+FZNeE;rS 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 delta 18109 zcmb@tbyQT*_Xm21MpBV(X$9$S!5{<_B_))U4hg9{fJ%pgbhmVaG*T+v%}~pM4rCv3`_bMYDq`Ua#~%C|kIixx9D!@ZQk@ z06bGl;+h?11;~4>HhF^0zZ0qHjJO}Xl;D$LS7TO?2#I}`yn6et{Zn5gsXN$|BH}dHLqKcz;H0RW`^YEO$QL!A14f{9rKOEG;-ru;ACaogD^5yG!ix)>$*S@@?PB#5r zpKL(If=k#1wrxZa#?&^+#LKm$ZBSHli`_Q5$5dVv{4h?WN6h4oCzrSZldsbf-FtIHZpy6p}L`)APCBnB& z7QNqYPJ`B>AI5D1zp&T6EYj&?`ziD7!3N`Z%E>2T&(8$N16*ZprY+nW_@XOR3xZ2IFL8BY!{G!kbcq9U`Y zMX}CwdG1?3fqs7D*G%GBgd0{I^i#nXo%r7+z_ss!ZOza zRrlkJ6?$`dS)Tn=R(O0{`Hj(SEoXg;?@CU%k~&&AFO(HO-{-y0Gq zdTZ*IymH1P!oKvhvE*Ie6@AUSvpr2Z4zxtW3abj)e@+%Artd*n%gD&H~?^foZu zCv0MYe~-5f_iC05UMWW<_VBH>`d%W0Yh_y5v4QR~J?Z@wt~GOkW+p`gJ`oEGavx9o zxY*bxHiAb=s;a907TW`>PQ7G_NJz%>^71siSK28wd>2Z9#lx?SJ}(1bXZJMmYi-xB zj=V0sj%jS|X0PIZ_^_5{x57*jlyFy9H23c_GRg0K z$ZMPb7&8@%xyHxuiRyX(pyYi|6dS|4RzUZJS=x_bg>`_AJNK&OlzD%a+C+*_!CbtzW_2$QSuWO5n#Xu9Rdr#Zp*XK>5TPtlVqUZI>CiRb>^iD39?W@HEB`^mlG= zpGrD>(`_{ih6!*68TCX3N*I*P~W0;+Ic3abXiO2W{9ig70vigwwngd>fKXpKelp3(H_69?kUA zEGR;bWng>%88~yeGQ|I8LyMU_AItr5t8B&PiMqz057z^~a8pjfm9VVVq9f_0zSVIN z$QX#QnrNkH(xc&3R)fo>=je3{p7}4X7WYl3AIE&l5KLy>IAyRBS>F4o+26RmNzK>Z z-I-go_WVtQO{yoVbc1=61fzyUzJbZ7Nv25@w}G!7RikNa^KZ}D&T;MhbUug z9(yoF3O7|JY!vr34QB70=5+F{`X6a5s$2*9;VEhbIy-RG?h#94-S3xI@!T?)sbJhI zPJ@8lUCsVp)1@T^C2WbvKpu7+>n8e)>i#70(u0oz7YBKAB;GH>7OcXbM}&r|PHcYY zvlFYE+S+gd1n$3+yh7?)*sf*Yi>oRls~wza?F_?rT=yCN`clJ4R4zU$O+FG*a`Nc> zU86toek+J+>1gH9IoS=%jd*{qQ}ZP_+fB-Shrry*FfLy~#L?ULhp#+CTS%tTplYhcUEI72y=-qF{(< zbDirS!XmQG?ue@pA|h-nq4v9Ux1L*YoG=7^i6#f_yiYH~zobeB-KCV@s~T&SU5R^o zO)!SO7@k9vs%vO4{W|s`BwzmEUH245{wd|zbKoTvi;&PAxJ1rQQ|d=)o1pmUILWOL ze!lJDY71-fcZChS`=T)N4N33{d+MD9I`SkJSX8Z- zzXbpOxO|(TGf%U}6T$ z19-Rzl7b0Ld*fJxgBAQ1-i-GlD7XQZS5Iw%9IdStw6w^pXY%A8oHaM)vSd7sViN1E zs;Xj4Dm!&QTiaKcmy(*P+>6pdVFANCh+1$Ivl7YZ*=2*p>Tyc=NF|3w;g=N6K^>s* z>pnS<(R3(2x?hQo*2#uF;16OU;BIK@D+@OXzyh-RS!gTVtP1t9F`L!d-^>e2?N)xE zxpWwFi)T?}k<9#!a*EvkZopzxjh_|qDzh2j^y(_~eouC73xgJ*K>qMZWr5vY6O_I@ zWXB@f&I3RqfIZud`e(Sly)Q>50B0e{N@ZI|0Y3iudE3Mu{d)GkCWpF|AbMxX{xMT@;B>1cpfMpZ&DBjSZjMS0_^{uk3fIODu&OjzL-%i0^11;$2LDD zC1v`=3IiZkxnX2Lbc@Lr1&)}E(@s0&8{!M0{T~B^3p(SxHX|1(ZE2BP z41{0&*{`^`O3|cwOm4I23`EC@^AIaIz1XU~Mcb={^vlvD2g)5(*QzTkE7yyPiehNY z3Q9}Aun@$ZMkuz~`!nEll9&uckKh*YJyl%Szl%d|kLM@^tiX0WZTea=T`0etpj6Wd zoF<6ez4=68Nd zBxzhyiI}y=zPi|9lly7u@Gzm1$^-D~!fq&#U{3=BOJ8U8n^Ht@{d?X(58%TU`$+Xb z6;Ti%zk7FVsKl@i_TH#*V8pft*@3)hS~i}?TUJ}Ef&I)zi1OLT>6A_OFw3P(mehN) zEH=X$vJtsz@%jcOIwrch@zm7R;^c6|cBATxEinyyY=;MV{Ha0ICO)^%G1*0$e^0st zxu%Z(^}-5VnT&t#Zy@gX-cJ{!i#SwNR0QjNE`{E`dq;kkofK8}*o(NnXY${fXa^Bj#eJqJR;T)(E)RlKYt)pUJZ{%e=B1vzW8SE$N8ARD-{X zs8#o;ny-`*zkXF7{r)XzSY}+ezc(itx{Z&EYXS8UQ6yLG`1MOe`RUX6#QrtG2bh!o z7LIh2vQTuht+d10lSzuumvzo6YMhl>-)Cn(-7flU-p0I`qB;8423KJ_&s@$x`*l_L z`sGDN21{&wJe!;x6Duq0q6F#p@83a4%iypu?7?Gl9GIJ%8v!XPo*6Mi&mmAa#x2b< zf%eT5ZgRR)wC1le56@jIfuR^#XC6A7!lu&1>*ns>L8Jb(m_>pgdt!p_xcG(aC)RM) z2=Q{>Ywaz+`hGvB#;^X*2`V9mD@y+IUwn|C%Clg^XqA+H~(J zcHWN{XzxaQQ(3PQg(xOj@Gc1s`*HddrJjuged7H9r%zACu^TMi&huR;yoj5Gwu=T% zZwsD&oG<%%*G}x6(||`&ZJ7wFKta-;dzDIVoK4(gQCHV^S~9Pt1)bE?q}IJ?>Lc!X zP?-7Am2whsa*&w+>(?*5we@umQWBDqsIaic&SM!H8ylT|&&K#=B#5(g;}>oHUcVlX zks0iHUt{p5;R7KL4-WwmQQ(to#g88)ZES77#>V1QO@||qUT^B1U|+v}9Vu@^e){z3 ze9cZHJ@?5a$MN96z>|v~+68;l6sjlKEXQ2egi&6rXWZ!Bl97Wc*(2TF9pAainJ@W517;QRUMy!8z@;P`e)6hNLoy6Lnz!tr5i zjBsgbX=w8UHxG}Zk`neyZSA*0iKb%7FJ8U+l#oCZcG=U_1^zTg*KxG8*%aC^mP+e2 z{(4uy))7~$7g)D2k+xI7&0eEJPIjXWNfZ`5YGNzwsjRERWa7i&^H2V)zCCJzHl<97 zW;+XHpKIp#@&3wxYs{FK`>?jO9P|EhW7c5G&!EqrmvT=|6xnQTT#&R88^(H`;=tq6 zbvq4yKi8Q*pb=y>=hig_*Vo5`fer4vNiiuY;l|Bg^ATmS<6HzL6=;5aqN2jWw8f8d zIzpJ(*t^Qg$_izZ+11r|pJd;LEY=zVeMr4qw{DR$GxPW3YcVr2qV`hyH>-@sQ*?OF ztb8}57k3@f_2UrU9bRHPvri9EZrg&pCo1Jc>EPR$=|*76q3-I-Y1?!jY98{SMTIYF z@tG3km!dpn$l7w|Fb=!MY02~?!k-3o<2JI*wz5QJ>N{hlK4@VwunZ0`_ z_R|b~hs@XNs^Lq>6Y#Lio3EE4Q9hpcVI$umE~o4hrfag1GA4M|eB*7ut=PuL?lN=r%7L`gRgBLVyLI zlMZy0XBK9_>5!FH9yr+;#va^l{S48{pnkDCZ;p%#9^%}n=5YCu&_Ukk?xrr80=jyW zd#0IwT-F;4`1Wnp7KrYX=S%5JKag)~pl&>#gwjtefQqu>tF~EwTTq2Z^6GhYcX&cl zD9c{+dTA7IKPaxuk#pj0A=#)>`bf%b71~RZ$={A5B&Fym1qBrco##$3zkdA^TTtMK znDcn$jG}csN9N|`tuY$f(wIwfd$CaVW{?Ye;dcy*RMA6uJPaQM0~z}KRUd*TNj<0 z8nKlo%Zf`nQdOsyjG-1ZM}NXB4RZswas6o7zf=2h;p9qs#h1Uq26j@0H0sjHBjn%8 zktDFHRp#tq>yu65->vBLZl>UdF6%x5BEk?<)byN%=eu`lVlpZGquXlWj~^fHe&xx9 zZds|z-5GE6*e4EbC%@V*Yjxk8EHg2NXt$#Xof;7l5p#0J!6C(`l;Y%XKXZzUcMfM} zW}ZRrYHQ1;v#X1hogD`<8;Ds#lx<@O%*3WKyV=1nUffHE(m8Qk!y_ou{#?06ct`&5Cp^T`r?mLzX?_uBreoCWlR5~hg}rm%)^|1+4}DOK|| z9OpYaY=hKPVnzZq zG{Q7(^u*-9enlH;SAm^GhoRe!MxINx)z#ITQmK&;DnKsET7>Q{CFL&jsdDr(5{DJP z41Kwtud1fTTvk>V1$0hdJ$m$roPmLuhsHFVRZNU3TrfeM^JWu#^^%oJlMGa2lupX> zJ~cSr2tuW6UFpT-2E8dnQ;SzFCn@FqOj6fHbv51+X*lXA_sq`1uz@(4-d(Xb zee$=lnbureyM52k8tAi3mq%WHduk6h)kiVV@j0W`C-(=$X*3Q51uw?!A`Q>yJ;W2T zvg%i>MbbAAD3_x>h)+^Lv;O(>XJ=;LlVK7_Cp8t7!w@-8@i(l;IT2!FagAzQr(OUY zf^P`(`YeTs@d9)ETkGp-Zr{F59uW9qsLIO7d@zmH9KF>+66NTd?cUdu*^+2IqPu?i zF4wrixAzVJz_nt}H9l1oW~xDXA-G~-m6<437|Do@wzhVD^Wh@l^oNwMTm<{C9xIFF zeAs*`33|4{?O4U)-kX{E=9#>Fc@)V)KmvJ*?}7Ma0~6b)ydolFR!E#BK3B2){m973 zG)79w?_@v#3w-_K*!VaU4dLM9XJ=;Ka3}5u50oGVPe(_WF>GBZ{b8%x0U{h!KYWQ* zm&w-1fNk~D%00*a@7mW}RNckDHz-p1;z2c^teEdbZyr?Ib)Os*23M_x;o{%<6`(#z zTHl~Rc9=x?zxkQ(YCW_oVyBXZree$ls?P+Be0OVbi!08SAE5rwrVhl#$1?|qhl`Lf zNR%sN4_~}WXIWizWPXFPFgMS6PTuCs@IflI>-xd{`{Z}-V0F_31O^sKeb^`mEeF<4 zx@_W&RIaeZTL8l+38ltGtd`(d6#f!`&ImO@Yko!PDF`lUIEi85@GAb#lQOD5Vx$|;9Qz=Ln zVk;)4FJJfu$S2Ax)&~~D+Q5!vqzGiy%_as02IgYPk_sXUlA_PjSz_03q}TWKylDFU z`;AJRlNyswWeKMGxRZ`ur~KpzT2@XD?c?KfU3lhzc9ii9 z=<4ib0U`U^?@MQy^T&dW%D@6zjecim=gB@uJA>Uy?&n5Ej1V}LugyyTxejqB5rsiv zcQsqf$Hao$)DAYZmWqku7o<)tFch5I+983>WxBLtIeyL(%%e2M?eZ z#0H#H*h~%b-{@<4Uf0LWHP1h(j2e^@JO9tfP_AVLw?AT^4^a5{@n^r7>iDDNP3h@w zD`fFzt~t78{CxNF99QKd1+5bRw?>Z$o6)yB3p=Z@73j+ZIMGA1(Au4NIOV!C#qih$ z%q*dk?}3H;3+6rJo1gL^$@0L;%S=YP4X6FnU|{#9ea7Pp(k*O-3yxAcGM0%)4<0-i z&h2#tR^NxYTQ~91mc9lu5?Uzv5?h6kVE>?e&vSer_Ioq;)uk@Q4_cN^Q=q3GC*zGg ze6yj-&brgb3BVCZ_$-xhA(f!Vryg*dQwN`-C{VuupP!~(f{7u&fF&0W0FXUw zU9~{%uK=xbE(ZWG(6j;FVCJFxRn2mTJ5R>ai5w3zqydEj{n8o}N9c7P=7F?vEptas zlZxGN*5iaai)fpUKag^^IhMdS(`M<|BUzPG=|^5q-@UvO8Wz?(S~p$cZJ}~xfcSY> zS3Ng+%zt?H`$yl*1r$D$8{Ze>Ntu+viuq$cUF$k;`8W``dJ6~PF8XlVhN?dHF*D_p z7&su3L1o!uY=>of8UaqW_k{~o;lT;Hsr(+vnuPGpY1v@07<>`}?14YmqteEcc1D)% zbr@9e>2e z#wI)F@olS4d=c!{0L8-QxbxMJwGSBZVI?9@>&x~N4-NSrJn$a=ckCEpj{bH?AMu2J ztfZ!RpVzKUzfS@33Bcl~O;Tv-?rYy8h@Qc$f1y9Haf^5^4{(?QPn7xEGef`A+^)ef zP$cpnRlsI!14!~eQz-&H8Mmt?1~K?QW|9x2F}d$7z&uM&Tw?*(&Lj{6BTk~otzYK zBTolmO$}8K0MotH^`YlimZP_Tysh#H_iaJf4wAU_h+B1CO%{9I&&v!tzC4u;!MrYm zSq-loT+j4WcrK_CEVd^AFqzUJM5J&xe|h4uQC#GK2{&M^q?cS*6Jm%D19(L-Cy|lQ zO}zNHj%$gRg*chtLLuAl{{GkO1m$AP9AG#CNo$=JP%GFPr#?2mTe@;)-maGc0il&j%a?jqqdmzO8gVpGcrQmWI%oV zt)7t4j+5?dJmpR-eupK2^8wd5`#m~q@00ZF$?vk>-9_V~am0YBmd5W}q-{e^ptA@( zk@hWBcyNRlgYTpLK$Zm4FSMpIHkU5eqEhfYc9u7ABv1`=*n9DdVf>l{var9K-nnal zRX@JV84Lh;2%;fvzL#j;q($?p59`LzDY4=ql0tsT9BJVtbwcl}1@3CepeO8`a#{T} z5ccA18Lp_cZbaE(9BU5?xF~m)q`f<6>;(e^mJX|cq;O`Z-Rru}S+@L2NeUbC+Yeew z?_(Pyxc0JsUee#)#x|9w$QbDWU=_@5qPLIR{X-bhG=a3Ii=XilAa7{d-Gsqe`SCkoGIKY&v6=N zJAPsGWyN4ubCH)~agPB9vubG=-uik=cM(&0?DVgsZL@ivVd6qo7ISBmw56vcaH<#l z^Ffe2!Hr1CS!GlVnq$-H2?`R;7f54ZWSs{d_yra|s?Zw%)4(P*=tFy81Ex#u1Whj4 zv~;DY>tci%h>lYUWUjR-vptnT^n<-3;n*v1&1$xpPREyqUxa{%-_pfH++JE^QSe}! zI<8F&zMKL3lZxn)v2)~reqsEHK^H54oqZHzcgTVFJD%`Bgoq{nurU@Fctd(Cr(|x} zBMH}u6#(pdw-V8YVz9P~Zl6luT})NHaohL0&>9d`oau+aX*vo{=FE5@82dBjD*#(H-|SrCVDf$ zOo0(XzdrI1aJo>Ip4%0gvq#4f3Iqx=aa!UG_DwNfbF~t2Itcp>RHu-7J)~jC|BNSP zHx5pxDYcSOeiyN{tzSB9`}pt75%GmzR(fj}F~*f~>B1oeNIm+C!$KW5;BRA&wOV>8 zo;|!V|K2RV_FNC4U*?C8BHXEq|GV*BPPwYi;i~RC#q5Q=Zw0-^{_Yq0eA)21WmVv4 z{KD|pr08`me2P|}qmWM}i2;s{|KX>)p8^+i@a4x^1 zj?f2>GRLtg)T^fRk;$mFhQ<;<{6>xor2|XT%|xlDgCH#d;QSWRbWhUTxRrw|KmmMj z7Iz_0eQVD|V{eJq9vp2h!@j8PYBidUntP_G;Nb8OU@4m91%jGqtf1_2VnNnLJF4vpq$Y`yHSj_+a)?byO^+7Wd`_ILA_sq#| zARzgb*b^rnwkRBrnB@A%gf7vZk^8%mrnM*wS3S=nR*W77*{aWpPYTO#^!2Rb)@Ow;0bni8z1{YJ;hymoKgaG^$gYpX&JH>(dDN8TyDamMi=C$UKRc>lL6?h<(j4bJ1Ysqq$h@ zE34_P znKOA&(~X#+@yR_c`Mad9{2q05Da4RhZ<~q!v3${yoH8v(Uu*1FGi*e660VD zzB@f7*q`m|iIfYGrCxtG7(NZGc~#MmPrtZeaR;w!@ZtE3rTGw59<8Qad2w%ipRi@Z z@xgj)iB_ys5)n!IAaGH8)|yXknC?r?A&XurZ*HwQO{=UhOPZ}Ypr96N5;GM&tea^O z-m$%k)G}v+8-~YBwU{EVwJub9<9n1vSjT^j3o$`qL%MYU2;Lc$TfBC)wwG0$QlbUG ztmoOahtYDhs)m`Ou3X1lb6sI_NjHIu;>Ckd9H2%0JHLKwjnU?RP8<0Tu80*}TwEGQ zSZ_iZ69sYXd(cBL(77-CpJ+$1o(%WDVGnf335^3I_;16IvH~4{tM^{K6K-g4h@m`)^E0EQict@T1|H9t!MSL@4%}&_h3)%X(2QD6(#>~ z$!_3wUy>~S)!DWA@Jx(&`oot2PJyS}lj4S8?Z;zFUXvCEDCh&=PnmsVPgD@=eT*$p zl&h9z-e|VM>r(G5O&FZi(M1}fjSDpK~ zECyNjp7~zfk-Ivl7MsO*@=_p(!s_29jrR@v5d>H#&dt36ZZcf}3l9$=aFetH>+2ni#j&fd+{+waa1vV&eymn_Nj6$+i5?>s5Oe3C7qd$kJslq( zk86!$l;-rl6?vkPexhQ+hnfHrrrrm3=@!}+E^Y(ROY4LHP5I`L+}*T~mLbxOxIlRX zHVl|kw{VcZPb+_=qW;fSiK(JErVr!&_O=I;HPr?*DK#HaS3f(T!Of4wwk^@8QppCb zHJ8}6itU%eEBfm%q-T7{Z{$c$`i^UEv7{uBP_~D#OZN3XzX$#}a6d`!&NgZFYg2@# z0s3Gj9V32roC}I@GK~pc9+uUqqlON2S3@FR*wDdfdzDSuQoQS-G%&q zePRsFtb`UZ&ImJ(xN@38+rkBG_`1Y)bztQ1teZ?k+{YHmj|0S`#kGX@za4Q_I2hqA zr41_`%2I(p{RHm2c%4CfQq&Wt?Z9%I*`$f)Jew?XDWMSgG(0G|WfMJnlSsFl6dgRl050Xe~xUvh4v+w-SgM=4tk$v_dSXT7dP{D?+G8js&d=hl(ol# zTcznQ>rlXzA$n+OKc=Ale12XbBk|D6!G@TZsREpiHy?O8+cbt_>WJop(%y5zUIiS& zL(SW!VV54;Lcc8=t0bQemGrWt^h*Z7*h)XQe!yX%Z~SKAFn|U0T|2NWTq9oeHqcIn zPA6NX|AcQ(j6SH?fKp^F)?$red86vj6$?kru?8{w4zSSWQN#NqlaQNCqzNGvk z9*}cxSGzl3KU)-_AKv(N0t=SkjkxtPsLA^Y8Scl1g~L!1>|0!=H4dr zwl4`=KD)xPvqi&cJUs*5tez-b4nSvnX2V%|YoUF8>Or%+h*lFp)OKlODLB5Hv;B(D zwwLH+Of-)5TXQB-rbacqGNK4b(8vD`i6nGNMDd4%sVxMy=nVe|`UQBr?@lvzp>fv3?w|`nz6HOL;l-bYOd@nib{fVDSED`{b zf~IUkktmbXl{)CW^)+RvlzZnfqx8KW892a@M~Mq=`6RQ1Q?};;An^OpJ9bR>>bj_e z**d+|KyR|i1We9f2Nr(_O51;#=h45?eTjg|1_LQN1l`zz&Mp7S89E3j;lgy*_*vb^ z&E@T#?9duBsQINBYu zq&>O7NknEGvp+5oH5O3IOFqd*Zt^G*$8=USHaZ7^g|C zB|s=hAh9)eeZvpl#k8~aBX)8x)i(VU)G?sTBEA~ZL=`pbDz;9*)C2}Z{AX|H31@(B zgaOr_hqC6=?;q$*0`B_@5h^j9qTUXJ1-{ognn?fRGS0I8QP(PAb#kOz`Az&o17`u>x`Xw4@q!OAVw&7%JmZvVdOhFW*>jY}M)IAof4-10}CeGhIQ?RW~p(G?;C52_r=ArzX`$kXm1AU-aRh- zX+(>kWMntN1KJ)VVg>PsQ%~x*^Q7(iOtQR(IeSr9ISTE}jyTZae+87t4&!&uQs}!RL5TwF8jW$&un_xVCf?;xItVRk7(`nQy+ltz7dIZM|pPr5}o1 zQ2@|f1^8*44qW7(JaK#3_)PBc?g|96Wahr2Dt)_uLE|bR!>5)zj!3^zoD9ya_vcOx zen}sc(q9#Q#)5wwj}$vMBxRKPv|-KXmtqiLYut*L6qp#?a;yQg5rr8)?JU*@;6VZ7 z$xPZRV{(2YTquPJUHTt+sgOxLzu2kPl)~_o?7MI&+$*PrQ0q`8$^+p$Sy`+dDzUBS z_m&lWXwnic*X;H7gs)DaXuNR2l3)D4NLA++y9E?f%R$NY_{EPED=XFSM+NMr1cGLH zFVNoBHT{m6b4*%S7yp5f){^YJOYdw=S}2WA5I~?XmqZwSlXee2gZ-C)-jv<_-xw*> z0M)p1C6)KK} zu^a$ZtQPgV`y!*>i^zW@{NQ_|`2kMU7nq#Ls+C&kmGXq&>fD&Q-{*Dk@zSNq3*)4y zqY)(UwLaj4N;H@&Ed3B7s>E?e#uk(zB6>vZ3R8nF|GL5TOFFcHkUxVJ& z8Dwhf=kg)Ib`Uu@*O2}_{`=B$*E^t1ez5=aJqY`s9Xdir>>KqIroM5=fvv0^qfS3gPd*zem!(X)vD^aArH*4`TWD zXTEZy;=+f+@`AVY!6eRyKF1&HPHgdsdpOuk4-_zXB;?sJMS;6Ro2WM%zWu?&-27llocI1 zFmtkbYGc!R!akD~2k7K?H53{^HDC7x1#h3b`HpXPnLGG+=8_49o8UQRnB%~KY0e`t1Z2FGJWrj%-8KBHj=iQ6c6M}5V(iS zx_9t^Y)9BT56s4^zoVdYXi?|J(IknvqIDYkm+sZ$>5UpbN2vKGwqo{{2Tq^T!o|K+ z6w{B8sc{1wKXN8kd(+E`2&%L1LSAZR; zp``Gvac3>K9@xxJtS1H`u>wiKTITZ#A`XX5wfD-JC$_kFe2zsX*-KxCxcc3Ee`oVs z0JT0x{P8ugj7GfRabVxm8GXg|L_YxjH_4{%1ianJ(iyYDjK`7!OMgu#$o+DMc&&GP zp9o;wymD0XMx%R~fD6~FM%i;zGuzd=8m`0cprNn!Yg!Q`OYipbav12aA6Qo8Z(96$ zT93@w8d&+5(9bEr39tF4()*WMAVYif@k_qy@(PL^?gi#kO)A3r`#)4Lm48skV8Z1n zI2Ur7gIIPY*;sdsc7D<-jTzLCR60+{o3t3;LtW^fB>EutaF`di4AU{_kQW67!plWw zt&O=L2V9xNsXJ`j5!5mlh@_Cz9vlIezq(Rpy z){?j1T8RMlv4E$ti@qUukb4QODag7fldMveSP1jb?)^VBTCPT-pYYhiMZXWh{r&yL zj~72OJ*Eydm|OoU>iV_ZrTJgjy2A-cuzU;FVjc3!M>ReZAJ8KkRJg`E>T~toMUfe{ zT9kq|gJl@!2a{%ovI5-CQuo2N@U9J0((wJ(4#4zL z6n~<~K(lBu*sobSQ#XU`b>XT6^XzpWgNFn3P@xzNN@gMG2U19VoKk>x8z$hi*hVDN zw>FVI-6id~SneuKdMz=$62~2La$tyZEI$r3PTLmFXn%l;nL4_Atk>!vLN<8Hzu5c( zmuZ_m@#4V57dqG7J)PueUyN%xpG?0%h2fDiVqJr4mWUdCU<6<|dWq>(bxv%A{q_KE zE%qN`$j+Nm{?5tn-$9?CJS52AMR>)ZF2A*$`v}RWQ&Lm2@{8lEleZe}GH;nwwkukh-b;g_T5h)rb$zQl}Ek$Sk$F516zpTtpJw)_75zs@`HyuCsu8dfSu zh?hejdz03#M1Ui^D(!3{UU>I^i2?U#HEkFosVNb*MQi-OgkbKsJO6)Z3ClJ9|I(8G zRs(?l_i}*$Rs-BHm;ZM8|G!7PzN8J2b|W$0QW$vjJlwETCvxW3%*fB^zrunJFOqpE z6v^$GQ&9m{4)cS5d;dBez7qr%)7RHrT6oECN)zZPR;Vg=bBktQB?1+1HaE(eo?y^= zN2lf*Lh~FZnmVU%p7{ssah8YZ+aDjZ5@hWT^I|)#6eJ(kNk*{>3c^A{2O7Z6#mV1$gE*0dm#zkdSDjm1+14r=||MJ0~aXv>v&!3sF09=OWiNTR|@@5(MfTk ztE=X7lc%rO{`$R|jEW2zAouqdrYgu9{QOyw`tBzPIUiH{f*sT~AW&Y4sG4xC91VquWGe6Xjk|JR+WG`gAh+k)vyocCntz3+x0u8+u-uiDi&+o1L?g`Ybq!S5`53B=39Hc>KV=Q{GozImUWX+##RLr{JU&!L zydL|FGnZHyYvk*#3AByZomb1`O!fz2@1Kg;-aiQ0=38vWKHE-|!>3&sQseJjJk0s;Wt^ImPTf)W!hfiZ&G z-bf>EXU+7FnS*cxX;chl4FqPeU@qjIDI-q7FuRtPRv@ieJWpZ8YHm=pw+yw_*1-Kj zHZJJjy>n0SVO-Nm^vq+(N=ZihNL>EX+Fa%#jw)@=`|!zahb-|DB2ES9wzW)5@MC_! z!U;{Sr@6)^1|PmHpiHX$Q6TJco@!BRoh%xdMI9Un6*BzYj9c{2a_7S_ns`T1pZ zeIz4^=W&r0<@mGhWXq4$pJH*f=yYe$MtoH-!^1#tu)jmZKxS>psB)>wb1iR#BrV?HXa_{LSKiuje??|Vwlp%OaNN+ zTt1wF`XQE6>lqnfyO;jyzW-8!D8s1&y72i;&yV_Lu$#X8txBl}r`n0U{V zTLPLh1G#5qI5yv>(N)v>^#SzM=Q2dMN{{P#BhNNpv(6H#rr2Kjiqj}nbKm_gzIi>&JB>5Sd%kbDTAreM@5eZs}T z8w~xh^|`Jx|#UxO6e;Kd+zw^azQOfv+xO{%b}1v4Wr!agI+dX*d0)j`lKuZ9!?(<7ab`(_ zy{#7CKcm9p!ax7c=nRDTk{>OctC`P&VI6?HUs>4GM>oh}V{4Z zD4~S(PjnIB%h$dEPM<-F*{JNn&K7&Wbk(DizJ6Yk_drtL`GC<8*>n2`>;F2>Rur6~ zXS$pSO}@V-WPGald(;WjpsQwOiXROq*MuVN$bc%!a-9?K%;QE}Gf6qf7p@m0MS*W-#RLr{AA_0)G(( z5J*67W3jJYQKAA>-*INGkfNq&LyxhTwa9g-;1pTwh30GWj;B+&a zakr`@X~5OvI^H6lA;67GA+y;?Cb7?Nhf!}D}E;w0Ml`)=SD&EM-P9aec2UF_T zoqbg3tFa?*`-2(&#utEU*9aa_83;3Yko*}vFYrf!b404~ke@4A^&3|xt%UkA;Ig{l z{<;g0}9_QEY?Gm>id?k@ig|MbD5{T%J#u%udlK z|Gk|DlP4D7ar`#(_y)!a(v>;@!v8N|2mhxwFd9w(d@+U52jDWz8^quIY=&*u>n_|J zY1SQn+hpIQ&F>c-T{d)2ToFfRR|u&8V)&cJj7Hd!SO~xMvpTRDlpiRF7md0J;+3y% z0i{b+LI91dmk7Y(dSDpmmKccm#g`E2@6BxXw5Cjp<|Yw>BeHuB0L#VD>ivel88$o{ z``R60-qM$q*3ck0!<>iP8t|9vEyLMQ+0bze<~DS;*H63hqsgAIT%eZ3_J5vE7=Cp~ zQewn{lnaJ;XA{F`Jf3`$I-jpRQyGhm%cd$%kOMxUy%?tmzaX#3Bz@$~Rxvm7nXa7m z!`Y8L%uo1Az?i^xJ2`B41+AKvwt+*{!~KqV0N${G2qj7p!8T=yMt6VkIqagApsMuG z_J%=XllwmlqrHJHgTlYVMvt_eteiu; zsXd$3SsnAfivx`mB8sjsvwXAZQVle$TuL7-jqZ_6?m9uduB~OEyhX~gy?}UMwJ!IBD z#hX#J9`ATuMG4Bq(dtERk>T>|C?n{GnCw2jMrOr4hFhyCUzo-WY6)Nw+0ChF1$w@o z-z>JjO4xIN5+fa^`+w~Iy*78bpPP3Sf(rnK24JKVkpFS}Lp#k+3TfwbCRi5vMLJ506wm>aa6b}I@;f{Tn) zS!<~Yw{fSYiCY@ffLQD~ZyVA5N=hu3Uo ze+8z=BVPp}v0q%gBHcrF0vYnKNXUl}+6OQ{Ky-*<1iQNQF#^Y{B{hX1b3uunEj zV|u~;;K!wEo35B^`U#~zpv1wT~S2qyr`X79-ji=U^uk4-0AH8Iay2-KyK+%*Kxfss%;>Az>OjMeoX7Uxx5a~LqRf^T3_DSTWzjaAR`Gf z*D>N@7(+mPKtS?O>$Ul_ezac^Kk)A+_a%OR_h&Qi^7YCy=+#bDOXL3cNn9p=mx!>n z^oDC$dlmKAj#gVG>nESMvR?TyXbg|TI*OO!Ojz!}YxU9W%zYc)SwG;r7Rm52LNM#Ua1B%oEPXnDJfC&3if9;@zIJWiJnvyoui_&+tL` z+Jv{D^i$u`ZNbYht;Tj{v?Z60v9|Y|+xssRPwXu0jsP~o4_sfj|9F*)!=+6%vuFQZ z!hLyT{(U={3mGSVfC{uj%u#zKFPsXDjsUh$pKe`k{%hm9kITQm?*}%y%Wkh=pYeQC z;p1bSkqwI%eSCj+x46vllh=;Vy{1+HTOG@IQGDC*v>v*FMi;00K`}KNpsDP6 Date: Mon, 29 May 2017 17:19:03 -0400 Subject: [PATCH 036/261] Don't sanitize out Custom Species unless they are changing species --- code/modules/client/preference_setup/general/03_body.dm | 2 +- code/modules/client/preference_setup/vore/07_traits.dm | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 72df34b08c..583c13c6c2 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -317,7 +317,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(prev_species != pref.species) if(!(pref.biological_gender in mob_species.genders)) pref.set_biological_gender(mob_species.genders[1]) - + pref.custom_species = null //VOREStation Edit - This is cleared on species changes //grab one of the valid hair styles for the newly chosen species var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 602751c63f..2b6776e57c 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -51,7 +51,6 @@ pref.max_traits = MAX_SPECIES_TRAITS if(pref.species != "Custom Species") - pref.custom_species = null pref.pos_traits.Cut() pref.neu_traits.Cut() pref.neg_traits.Cut() From 559c01b43960aeb4c0ea358ad2c9dc32aaef27cb Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Mon, 29 May 2017 21:13:53 -0400 Subject: [PATCH 037/261] Ariana's Centipede Taurhalf. (#1585) * Adds Ariana Centipede taur * Add files via upload * Adding Ariana's taurhalf. UPLOADING THE RIGHT FILE THIS TIME. * Adding Ariana's Centipede taur Please. Please I'm going insane. * Adding Ariana's taurhalf I want death. --- .../vore/appearance/sprite_accessories_vr.dm | 8 +++++++- icons/mob/vore/taurs_vr.dmi | Bin 26014 -> 28113 bytes 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 52356d04e1..6e9ac2184f 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -878,4 +878,10 @@ /datum/sprite_accessory/tail/taur/wolf/serdy name = "CyberSerdy (silencedmp5a5)" icon_state = "serdy_s" - ckeys_allowed = list("silencedmp5a5") \ No newline at end of file + ckeys_allowed = list("silencedmp5a5") + +//liquidfirefly: Ariana Scol +/datum/sprite_accessory/tail/taur/centipede + name = "Centipede (liquidfirefly)" + icon_state = "centipede_s" + ckeys_allowed = list("liquidfirefly") \ No newline at end of file diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 7e474e8249cf2398b52a478bbf08ac7db7a45ee6..0f939b9ddc676178312f8997eb4ed1939cea6c59 100644 GIT binary patch literal 28113 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�ikc?4P(`x*TQ8f*=2t)aG&nKgy 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 Date: Mon, 29 May 2017 23:29:32 -0400 Subject: [PATCH 038/261] Allow 5 traits `balance intensifies` --- code/__defines/misc_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm index b3c87fcec3..a3c4cf72d2 100644 --- a/code/__defines/misc_vr.dm +++ b/code/__defines/misc_vr.dm @@ -18,4 +18,4 @@ //For custom species #define STARTING_SPECIES_POINTS 1 -#define MAX_SPECIES_TRAITS 4 +#define MAX_SPECIES_TRAITS 5 From 6d4e0695f9011f7e766f0dde75d846ed8a1e0730 Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Tue, 30 May 2017 00:37:03 -0400 Subject: [PATCH 039/261] Fixing Ariana's taurhalf --- .../vore/appearance/sprite_accessories_vr.dm | 5 +++-- icons/mob/vore/taurs_vr.dmi | Bin 28113 -> 28259 bytes 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 6e9ac2184f..114e87cae0 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -883,5 +883,6 @@ //liquidfirefly: Ariana Scol /datum/sprite_accessory/tail/taur/centipede name = "Centipede (liquidfirefly)" - icon_state = "centipede_s" - ckeys_allowed = list("liquidfirefly") \ No newline at end of file + icon_state = "ariana_s" + ckeys_allowed = list("liquidfirefly") + do_colouration = 0 \ No newline at end of file diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 0f939b9ddc676178312f8997eb4ed1939cea6c59..805a2c375237c3bf4b0af8feffd8021dbfd81418 100644 GIT binary patch delta 7976 zcmW+*1z1yG8y}#6(uja`hlF%@m!x$5k#3|J<08@>BHgKy(p?gx8|jkn&TZfP_H6gr zeeZeCdHeUCb0?Qjww6(4vARw}ET*tJjtFoBo`L#HQ;xV=u*@lQT14FV7Jh>gKh49cqBen$$Eewdu!F zaH&h%TeexXhK2@#m1<>-3DJdg$;F6`2Y>zw0ZGYR?r!e(96_2bkbkd3{lP}K0lPwA zpu~n-+Qr31Z%(bxshL0)`MM*0z7xzJ0v4k}@W{W>4!D3aJFRt?BHCO_;(hR>^6*-Q z$H!0S>}~3e9^2cJ-T~tzFFs%U7{-ybr+6*a*#~>i4!$$0E6e)Ui}5rE*T zt>01tZb8`ba$KGmWg8G_%8~2MSjBl$Fu2vu)z$XsPmOE-1`m-?v5+5DGK zOG_)?7R)aoaPhc?FcV(B>E=8=x4Ai5u-yC|`LG)nhMohtG2C`r!YGV^Sl?f4TdubG zsb%oJ2ttaOrku=FV+BoeLH|))9D2SrfOe3jNtQ9PcGoWm@_jsR3=dfzh%SV#Wv=qI zbDDRU%*@RJ2O=1{2*>$K>;0)>m?$m{IieV)O+$RvInyTSfd}XFsLeD^ZXi5%z$ha> zRKQ=q*QR!#Bd>7(q_Xuy+h#O_@z*2DQz|;{q&4To%4uM#`&NGqN4ub4H&vvpmML(I zj|QJoeYcP8x*`mWtmX%NyTl<^ckP2M$CteRp!T@opYFf`RvXhlcP zu)&?Oo%R5#yZ(GTdPQjxr&(O(_q2E~K3`9%z6JU^g=PRoY^5$!5s*agi zC3)FuQ`t z*H2_}P=R6$8nLHXq|F)?6(#5B$i|e+x@$EX6OUZ3ygcUU4Lchf+qK_t{YSicLZnzC z=gSY~J6QqEQsyz8a~D6#%Zr+tNQ1uXluk`dbag-;uRdC1}rzH zYvaK`=l{>e{#}mg-bNv3V=<>1} z1R`!zYiRG{LR^~dO-8Q}lh@H9v6~%a^Mo{)y}kWL?YKl?QRi3s4%fA=v5H%td-}cRx;owz4&z7~wG3A4~4@ z=i(ti;yk4)AoO^t@l~vXG6Ug^i60hIZTbhE@6@~Op1WU{Vcpxa^N~s{Wx$+g^-d(X z#(-Uj0vE|Wum-%twusZaya&1Zx{|8Nw2i1_Ypp? z?buA_HU|gCLx*Pdi|As?tYminK)&%mo=m7mSsYi2@Qd07 ztS;T?N|K+{0K;zO>G}E(`FX59UlGoC49S6NVF2m`fwS#o!IJOOIXFV0@Zl|3QO2Xm zXxEh|{qN+!Vzsb}koA*xa0U6JJ}H#j{Q#r$b@u4!QF@J9=YU4wwF?2TI;V6O#*Y@b zcH4@UCWx?^49H8L+*0`EW1EI*OLiNPi;p9S|1t*Y$8|T@Ghi4k;BhIMm3qta_6Ch8 zo}Jh+w?)J6wEZ@uf#s8TmN3cps;c>UDF~86D(YR%;|d?`v4qaY6KuZVQIW9mV7-;Z zw5d&v`9v*Khj#E*3LsXMxZGJ|pOf%1S10RHq;{kyUh01E(!XvFK*DP4siE?8AoceT z=*dti1`67$bv}w49d{!2-!9*~cEMpkNmiNkD%zNtttIs;&3rTM;`OwRM8XXU679-9 z+hL0=O7vRsB&b*$)a?nVD5U&4Y6wjm-I0KthP-(7^?*$e3uuKLP2zpS7D2{XE#U3k z2nLVGSPwy$IeNZm<^+zSW*}{%_4j(+Q+S~r2HO5;V!+N@ZOrD@#6-mhe^q15R&8Lj z*T1&^N&D|L7gAd~qL&+&_nuq1E6o|IcH2Lyss?s130{VJ-ixo&QQRxYJ1 zs0;-Jc%cAazut32WNLk7BiN63`%8ZA8|`_Iq5oq`_Wh`aq4#4|jnRxzC)A22Ma`1y z&l!@DQG4RTc(kvgC1BJ?G+Bu_#JJKOD5@TZV>8;<` z`w$~EkX#SJ<|-ZN1ib#|n+Q4fFJqQl@iSVz+P9KYb>cX6Tf`a@XHXQA9FK)72EJo9 zMvA5|WZ)dY==2=t{hH;(7N4DkIwBaYu?CCG7>hmEss0-f?-@H8hy0=Vh)Hp^o6|E| zWC>)lx&_tJAO_8ao@rS-FuZpB?GP%Z6uYuSp)Nv4t>YcFIP`uJrA*|I?Qq_-xDgeZ zH%@U$Tc!a}_dMPy>8G33dGS@rR=qdZM@g@SQTUG6Lc0?%q?o3q|I>O-nOJpDALzJn zNhCCa9xz{9=^ddIp~i_A2~TTCC;;;U zIhd1jS+7h7jG_&fYJh%poVhA(NqP#K9Og;xH{wt5OSZ^=h^ex;YD%=?p=2N&<#Tal z7;lcWYx=y>I!m>-(n?KB=0by{^gGA4o%eeT?YYyt`;A!-wUn}&pYi39A@YOt)Ej+x zTu!Y-l3%fiT0e`FGe;87tVNUaFt@c(Uw?hil_EX@51-T5gh&r|LWe}<&z22b> zGD*2J+kIcsJ1sR-P#3?UXmDN%E9DAaIO_XP^7T(I-siaWzt%7G5&^Y`Yq05bN{MJ} z;l2_5pO$m1`UwWK@Z-vbb~D~3(^~m9=XL$Z!$x8$7OotbaRDP--|wV&-QNhE1jrw~ z>ovWHn8fHW_hZZz?peoQ#XDQBRT8TxWCwraNmqNg&%p4Wvi>l;2)L~NG2(5j^NcfF zHL#^e8X`E5)bPjL8E`cB^5)pIfE?f#YY6#uVbrhI6n!&cL{V8+*=h3Ih5DyxiIZ^M zty6Dt{pLZHu{3;y8f02;9t4~$ywC9@EQ?AkoK2ayV*SA?t}0+?$Wj zvQe+PFh3E}YIGH+5sUPYq4A~2F<^pH)(@~Gn2zOCpddX7%Gq>m6(9U}g($LcQME$K zCCq3@CX7&wBD!6uRfW#RXwjkj+PxHutu|@M`mfx1E^p?daqdshXs0o7_B8lwo<*YR_rJSdcATeAjYVvJkCta36fRGk zZ+Mr}au?EkB5rtgC6uPU6Zcc|mf81`{DPaLjSQdol(dzT^=6 zy~v90`>Q3|gL(>bz_A^=0$itwKZwdU1SE_tkhi>};0!c362Sm5UgGz-(MvUsZRK^c zt>#2u=$qFVHAOQWQue%m%$cdxbBZIJI=79e(_bHP{cV>iE4C=d-hlSgkL}!-!kM9b z4$p#XM~mkZvBVm$9Q}_Yaslk8yfnC+haK*&m5S=_gy*_Ek3IjEB5;W5P25tm;N;1~ zT*lGWyGMvS>&HnBXyTY||E(m3_lTa(47XgwiC*m%1%3=tTnpf{-M-^_Ix5JG#DGKa zs$w$wu{7GE@ll_RlvV!iajvTNRlN@yUac~e`d6^ofiq<-q%*cUQzOcHSLn`HRw#bB_^l)j`+H;0w*oozV}foZ@B3ZSW$79yf|OX4{+Ndk8;2^_?Dr$&c%R5JOn7bQ zFsaK@s6|@dAPD5m*l&t|6UP27e4pkQ=i8#13N6Pjf0qO>Ww2#=PANYi78E4GVDZnN zIc7jpM2>Vj@%Ytu!l#?(Mbq{~^0bLc>u)c+zI}c-9W?U%1EkMk<3`u-f<(3V<{GWIu{J+MU3RmD;-eGRknS6xCeQxXiL3HF_7MTDo9jTt;M<8eCp0M$$?Dcz7BtCF z{LX717!x9h6O-4b#}xDYS!*LTh$ek6!OM7_mr-GE@Na5idpHwSAH2rw$s|doTPy4&2sg4B;gHQq}U9W z%Gl4*DR42O3h*Q4uAomm>DU#Ul_Q!6(hT3Ae&)k8)M8cq+jpO$#xwkDzAC-nE$i#zoTLaU2)To+G%P zx6tiu8TkES`Y*RNi-0Y#{79ec$Qr*0n$Kgu_!o)Zp*aS48y3u3^4B zRT*>`IT8Xi_ZAe&-=9sXcIsL>%fKj>@=shv-Pt}nZ?t}{ln9c9?JF}r);37a|4S(p z(*?ESV!*?5t4jD?{6O!&qcgvG;*rHm}}JvFOa`UhpWCF>`~<}W?P8zd}+Xb2~NOU^L<4I zxxpGLLj;(-Nw#JAh4dyLGmfkPQIR{W?hv?!w)Z^t5)l(0(B}CXXN^T<5C}}zSEJ2g z;2&V_(HnnsmZ84V{d+xeaJooxfJt>Ds{U-T$46(~XzuVPU#>=^C?zbu3VppOS+Vf_ zMnK(cS(K{6{=7JaFNR!(*e-)v0DOnmd{~r>T%cUb#?(7^LL{hSXVV3ZCcdQg`Vgqp z{iL6*zUcjnOkI_RRAj^VKSNE%@c*W8t~FgQ{gFL<+a%4 zW5RhyI!rlQ&gan~eOoW0+Ndm@fna2(gM6UoHQGaad<^D+1vkqe5h793+68Ovef6~$ zD7d0(%XR+~CLK&`Y-T4eq|dT@?N>~)I@PE$b3FQk9+vLBVl}?KV=2vAe%vSBn7_OA zxG$PJ*{9#7v0YpmNpo*{3bPLSAV&;X)?C>?xV~4+ScP#6Ps}ZjJqM6tV$S#S7YN(a zJQh#Z-sG;l9Arx1!B={7r#Mms>`Dz^Si8eMC9;&6(v;tt(Bd-S5{;GV&A&7>|K!rR zRX39NW;VqDo0zf6$;xe}Rxny?9AVozynM<58oeXO_AAnUgWN)ZHr;2p>K}}eK>O^e z0!hOT6I*#vZe9y~8U(}lNk(3e$#|{kz27N;wYE@B*8wDqh3b>HqF5_xofegY+jWD; z(;YFY`Qh?>D7dMZa$dqKH%UA)U4V;gT|d^cau{ZvhK%XYmNU615YzQ96!yX+N5u@a zIv5_$N2PARwR{idxA~xd<8UPHjPehtXRoi3HKlzC2r9GTc+vsalfHzZ^o=jGFM1!* zQbc~991QLhX60J^s>C4E#u4Z7;r2?Sbo#}6jQQCyhP3M?p`YW|$xzIT2EaT`O~C}g z6V^@wJ8Bvhx1h~aQ;2nEB%G-0bcFV5o<(cC6Pp<{L%VT{cd6vtcpOR`%H(i0zb#GL zH;WT+Pb>@$%Pygyp}MpN0(?tZwx}7lJckt|3>jt5J4}bNJ5b^Gmex? zdSAs61b_M3E?QOeU`mZuY1RYoDFJZuUJ3SXDgWNX(jdFBvTCNsR4eo9t z0v`eC)b7w1uWUvPs@DaYShA1d1kE1!bn=KaEm*po-9B~)zu{$4 zYr?J!d|ZLI{gcja>L*%6v=BU|(>(BOQjl6#WRK?4nXA4(Nk?5gY#-)iAg~dlp}JD- z6#O6HFNq|Y?whtyiR`T-2Op=BwMYV6%$!zF=5&dk14Xc8;M8Ptfr>eKh(^<~B)XK7 zcwmWTRMNGB>#f4#lyi(gY=1-|pM4A|0aQH(XcA0>-*9}}y3cG5KF7Od3Yq@Rvc+P$ z!)NbZ>aAnPZUy(d?9%}t2TccHqZG6Wz*+C7Y4b{0YhZuA2WPsS70v!XS<$h)&56hyF zHZH*_v@FtOwNmh6B;hnEOLJ*eD?0Imhw!OnI8{}cu$q~gYbb>%Me{umLuD^huP@C( z+DD;JNt;1A(UPc8h}VM&l(~Ri7MIs}SlAwaua5_6TmcZY{uMud9GK@b5-N{b9yo6~ z->y|XoeOpX1h0mMd>>P?8I&xD6p*6u{$N8%qlA!PUX*V+208ee7(X|shPjf)DwsiP za_W?(vs{?g65^G)C)4*C3a#)l*$vLf+MdZLL`0m8ed92}B#nLf9fdG3Z_)~EJ4{SR z7bUgM?~B4OuP05*F=c?GCnAS&obF8#g;r?!w?GvbW5`y&+&@`qVlI2g8S12H!#yjP zZRf12tYYTeWKde~>JBA&-(yqjK8XkT%82M9U!fc!v&U_2>{ZlkPxJ}v$OQtA67IbN z>qIqcQc5_8cm>-R>AQA|MRo$!NN~3+RCAQzc7re2Uc&AkBgTkoZb(TwrlI7!!dy$E zz>`~Rwt4)%6!#mYdLK(@BM*X~8EJ!N-|<}KRoHShm-dczYBWN^j|?f&?sqJDhDA~C zZDWG(*oYe5__dhm#2Ci=9rMCA@5K))GRC|MbjwQQZKibkG z>)r*@wZ}gSx1|q^NL3aJ-qVJfzFD8EI4l#CgPR$X~tz%tS!56Xw zYGO#DO7XG!luER%wC$-5v!q1mBhU-VB_yRpDsTgN-nBl3P-B)r)6`21AwXb|9gT_z zy>Gb(YWjx^tGDv(L|dVotpBEAz8q&-$3jlMNw{Y2XE*znk;(gD&DQjnioN=eRBp1U zM7wzR{iCWR^V&(|wb#13x?wFX oEhED@m;EOAf!56b-qj@_@D8bMpRjOs!64*ESzcYPQpO_qe>>C3(EtDd delta 7850 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 oD5*@jUOeq=F^!e^_AhRccs2;i*xxm0Od!-ylvR Date: Tue, 30 May 2017 16:32:40 +0100 Subject: [PATCH 040/261] 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 684f570d0dad210d57e751eda73b96524e680cc1 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 11:30:53 -0400 Subject: [PATCH 041/261] Trait Tweaks Adds blood color as a custom species setting Adds photoresistant trait Changes haste and slowdown traits to be taj and tesh speeds --- code/game/dna/dna2.dm | 2 ++ code/game/dna/dna2_helpers.dm | 3 +- .../client/preference_setup/vore/07_traits.dm | 34 ++++++++++++++++--- .../species/station/traits_vr/negative.dm | 4 +-- .../species/station/traits_vr/positive.dm | 14 +++++--- 5 files changed, 45 insertions(+), 12 deletions(-) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 4e5af5e504..4330be33eb 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -92,6 +92,7 @@ var/global/list/datum/dna/gene/dna_genes[0] var/custom_species var/base_species = "Human" var/list/species_traits = list() + var/blood_color = "#A10808" // VOREStation // New stuff @@ -171,6 +172,7 @@ var/global/list/datum/dna/gene/dna_genes[0] var/datum/species/custom/CS = character.species src.species_traits = CS.traits.Copy() src.base_species = CS.base_species + src.blood_color = CS.blood_color // +1 to account for the none-of-the-above possibility SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 784898cd82..662a522d4a 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -203,7 +203,8 @@ H.custom_species = dna.custom_species if(istype(H.species,/datum/species/custom)) var/datum/species/custom/CS = H.species - CS.produceCopy(dna.base_species,dna.species_traits,src) + var/datum/species/custom/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src) + new_CS.blood_color = dna.blood_color // VOREStation Edit End diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 2b6776e57c..bccb13f432 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -5,6 +5,7 @@ /datum/preferences var/custom_species // Custom species name, can't be changed due to it having been used in savefiles already. var/custom_base // What to base the custom species on + var/blood_color = "#A10808" var/list/pos_traits = list() // What traits they've selected for their custom species var/list/neu_traits = list() @@ -25,6 +26,7 @@ S["pos_traits"] >> pref.pos_traits S["neu_traits"] >> pref.neu_traits S["neg_traits"] >> pref.neg_traits + S["blood_color"] >> pref.blood_color S["traits_cheating"]>> pref.traits_cheating S["max_traits"] >> pref.max_traits @@ -36,6 +38,7 @@ S["pos_traits"] << pref.pos_traits S["neu_traits"] << pref.neu_traits S["neg_traits"] << pref.neg_traits + S["blood_color"] << pref.blood_color S["traits_cheating"]<< pref.traits_cheating S["max_traits"] << pref.max_traits @@ -46,6 +49,8 @@ if(!pref.neu_traits) pref.neu_traits = list() if(!pref.neg_traits) pref.neg_traits = list() + pref.blood_color = sanitize_hexcolor(pref.blood_color, default="#A10808") + if(!pref.traits_cheating) pref.starting_trait_points = STARTING_SPECIES_POINTS pref.max_traits = MAX_SPECIES_TRAITS @@ -76,7 +81,10 @@ if(pref.species == "Custom Species") var/datum/species/custom/CS = character.species var/S = pref.custom_base ? pref.custom_base : "Human" - CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) + var/datum/species/custom/new_CS = CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) + + //Any additional non-trait settings can be applied here + new_CS.blood_color = pref.blood_color /datum/category_item/player_setup_item/vore/traits/content(var/mob/user) if(pref.species == "Custom Species" || pref.custom_species) @@ -87,6 +95,10 @@ . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : "Human"]
    " + . += "Blood Color: " + . += "Set Color" + . += "R
    " + var/points_left = pref.starting_trait_points var/traits_left = pref.max_traits for(var/T in pref.pos_traits + pref.neu_traits + pref.neg_traits) @@ -102,21 +114,21 @@ . += "" . += "Neutral Trait +
    " . += "" . += "Negative Trait +
    " . += "" /datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user) @@ -137,11 +149,23 @@ return TOPIC_REFRESH else if(href_list["custom_base"]) - var/text_choice = input("Pick an icon set for your species:","Icon Base") in playable_species - whitelisted_species - "Custom Species" + var/text_choice = input("Pick an icon set for your species:","Icon Base") in playable_species - whitelisted_species - "Custom Species" - "Promethean" if(text_choice in playable_species) pref.custom_base = text_choice return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["blood_color"]) + var/color_choice = input("Pick a blood color (does not apply to synths)","Blood Color",pref.blood_color) as color + if(color_choice) + pref.blood_color = sanitize_hexcolor(color_choice, default="#A10808") + return TOPIC_REFRESH + + else if(href_list["blood_reset"]) + var/choice = alert("Reset blood color to human default (#A10808)?","Reset Blood Color","Reset","Cancel") + if(choice == "Reset") + pref.blood_color = "#A10808" + return TOPIC_REFRESH + else if(href_list["clicked_pos_trait"]) var/datum/trait/trait = text2path(href_list["clicked_pos_trait"]) var/choice = alert("Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait","Remove","Cancel") diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 0a854e3456..647a070dff 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -2,13 +2,13 @@ name = "Slowdown" desc = "Allows you to move slower on average than baseline." cost = -1 - var_changes = list("slowdown" = 0.3) + var_changes = list("slowdown" = 0.5) /datum/trait/speed_slow_plus name = "Slowdown (Plus)" desc = "Allows you to move MUCH slower on average than baseline." cost = -2 - var_changes = list("slowdown" = 0.5) + var_changes = list("slowdown" = 1.0) /datum/trait/weakling name = "Weakling" diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 9c1c1519c8..93a9d1911f 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -2,13 +2,13 @@ name = "Haste" desc = "Allows you to move faster on average than baseline." cost = 2 - var_changes = list("slowdown" = -0.3) + var_changes = list("slowdown" = -0.5) /datum/trait/speed_fast_plus name = "Haste (Plus)" desc = "Allows you to move MUCH faster on average than baseline." - cost = 3 - var_changes = list("slowdown" = -0.5) + cost = 4 + var_changes = list("slowdown" = -1.0) /datum/trait/hardy name = "Hardy" @@ -72,4 +72,10 @@ name = "Burn Resist (Plus)" desc = "Adds some resistance to burn damage sources." cost = 2 - var_changes = list("burn_mod" = 0.70) \ No newline at end of file + var_changes = list("burn_mod" = 0.70) + +/datum/trait/photoresistant + name = "Photoresistant" + desc = "Decreases stun duration from flashes and other light-based stuns." + cost = 1 + var_changes = list("flash_mod" = 0.5) From d6cb4590dd869076fce056c03ba5d46d0388a02a Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 11:39:12 -0400 Subject: [PATCH 042/261] Tweak spacing on setup, fix DNA bug --- code/game/dna/dna2.dm | 1 + code/modules/client/preference_setup/vore/07_traits.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 4330be33eb..e13f50075a 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -110,6 +110,7 @@ var/global/list/datum/dna/gene/dna_genes[0] new_dna.body_markings=body_markings.Copy() new_dna.base_species=base_species //VOREStation Edit new_dna.species_traits=species_traits.Copy() //VOREStation Edit + new_dna.blood_color=blood_color //VOREStation Edit for(var/b=1;b<=DNA_SE_LENGTH;b++) new_dna.SE[b]=SE[b] if(b<=DNA_UI_LENGTH) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index bccb13f432..cd5189a8b9 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -95,7 +95,7 @@ . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : "Human"]
    " - . += "Blood Color: " + . += "Blood Color: " . += "Set Color" . += "R
    " From 8ac902be0ff1adbb791fff77f91865bd5a51fe8b Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Tue, 30 May 2017 13:32:52 -0300 Subject: [PATCH 043/261] Several map fixes. Fixes telecoms areas and turret controls remove hidden walls under doors. Adds several tinted windows for medical. Gives cargo airtight flaps. Fixes Bar substation and cargo substation. Fixes N20 filter on atmos. Deletes extra holopad in surface locker room. Fixes access to the secure doors in CE office. Fixes access to locker in Psy room. Maybe more things i cant remember. --- maps/tether/tether-01-surface.dmm | 138 +++++++++++++++--------------- maps/tether/tether-03-station.dmm | 122 +++++++++++++------------- 2 files changed, 134 insertions(+), 126 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index efed994990..2390afc101 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -719,6 +719,7 @@ "anQ" = (/obj/structure/sign/directions/evac,/turf/simulated/wall,/area/crew_quarters/locker) "anR" = (/turf/simulated/wall,/area/crew_quarters/locker) "anS" = (/obj/effect/floor_decal/techfloor,/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) +"anT" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Bar"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) "anU" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two"); req_one_access = list(47,24,11)},/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) "anV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) "anW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) @@ -2849,7 +2850,7 @@ "bcP" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcR" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) -"bcS" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; name = "Drone Fabrication"; sortType = "Drone Fabrication"},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) +"bcS" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Bar Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) "bcT" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcU" = (/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcV" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) @@ -3157,7 +3158,7 @@ "biL" = (/obj/structure/railing{dir = 1},/obj/structure/railing{dir = 4},/turf/simulated/open,/area/engineering/atmos) "biM" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "biN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) -"biO" = (/obj/machinery/atmospherics/omni/filter{tag_east = 4; tag_north = 2; tag_south = 1},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos) +"biO" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "biP" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4; icon_state = "map_valve1"; tag = "icon-map_valve1 (WEST)"},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos) "biQ" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos) "biR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos) @@ -3294,8 +3295,8 @@ "bls" = (/obj/structure/catwalk,/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "blt" = (/obj/structure/catwalk,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "blu" = (/obj/structure/table/standard,/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) -"blv" = (/obj/structure/table/standard,/obj/effect/floor_decal/techfloor,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) -"blw" = (/obj/structure/table/standard,/obj/effect/floor_decal/techfloor,/obj/machinery/camera/network/engineering{dir = 1},/obj/item/clothing/glasses/welding,/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) +"blv" = (/obj/machinery/atmospherics/omni/filter{tag_east = 7; tag_north = 2; tag_south = 1},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos) +"blw" = (/obj/structure/table/standard,/obj/effect/floor_decal/techfloor,/obj/item/clothing/glasses/welding,/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "blx" = (/obj/effect/floor_decal/techfloor,/obj/machinery/space_heater,/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "bly" = (/obj/effect/floor_decal/techfloor,/obj/machinery/suit_cycler/engineering{name = "Atmospherics suit cycler"},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "blz" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{name = "Atmospherics Hardsuits"; req_access = list(24)},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/atmos/taur,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) @@ -3333,11 +3334,11 @@ "bmf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmh" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) -"bmi" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"bmi" = (/obj/effect/floor_decal/techfloor,/obj/machinery/camera/network/engineering{dir = 1},/obj/structure/dispenser{phorontanks = 0},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "bmj" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) -"bmk" = (/obj/machinery/porta_turret{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"bml" = (/obj/machinery/camera/network/telecom,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"bmm" = (/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Satellite"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) +"bmk" = (/turf/simulated/mineral,/area/space) +"bml" = (/turf/simulated/wall/r_wall,/area/tcomfoyer) +"bmm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcomfoyer) "bmn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmp" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -3347,14 +3348,14 @@ "bmt" = (/obj/structure/sign/department/telecoms,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) "bmu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/decal/cleanable/cobweb,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance) "bmv" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmw" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmx" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmy" = (/obj/machinery/camera/network/telecom,/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmB" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/tcommsat/entrance) -"bmC" = (/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmD" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"bmw" = (/obj/machinery/porta_turret{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bmx" = (/obj/machinery/camera/network/telecom,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bmy" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcomfoyer) +"bmz" = (/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecomms Central Compartment"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"bmA" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmB" = (/obj/machinery/camera/network/telecom,/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmD" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/tcomfoyer) "bmE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera/network/telecom{dir = 4},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmG" = (/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -3368,13 +3369,13 @@ "bmO" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcommsat/entrance) "bmP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) "bmQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecomms Foyer"; req_one_access = list(61)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmR" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmS" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{req_access = list(61)},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"bmR" = (/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmT" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/tcomfoyer) +"bmU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) "bmY" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bna" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -3387,12 +3388,12 @@ "bnh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/tcommsat/entrance) "bni" = (/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance) "bnj" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnl" = (/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,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/tcommsat/entrance) -"bnn" = (/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bno" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -28},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/tcommsat/entrance) +"bnk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnl" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{req_access = list(61)},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bno" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnp" = (/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,/turf/simulated/floor/tiled,/area/tcomfoyer) "bnq" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bnr" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer_1"; set_temperature = 73; use_power = 1},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bns" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) @@ -3400,16 +3401,16 @@ "bnu" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_outer"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/chamber) "bnv" = (/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "server_access_sensor"; pixel_x = 12; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1381; id_tag = "server_access_pump"},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{frequency = 1381; id_tag = "server_access_airlock"; name = "Server Access Airlock"; pixel_x = 0; pixel_y = 25; tag_airpump = "server_access_pump"; tag_chamber_sensor = "server_access_sensor"; tag_exterior_door = "server_access_outer"; tag_exterior_sensor = "server_access_ex_sensor"; tag_interior_door = "server_access_inner"; tag_interior_sensor = "server_access_in_sensor"; tag_secure = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"bnx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"bny" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"bnz" = (/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,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"bnA" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) +"bnx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bny" = (/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnz" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -28},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/tcomfoyer) "bnB" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnC" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/manifold/hidden/black,/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnD" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnE" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnF" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"bnG" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/wall/r_wall,/area/tcommsat/chamber) +"bnG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/tcomfoyer) "bnH" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 10},/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 4},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake) "bnI" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/effect/floor_decal/industrial/warning/dust{dir = 1},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake) "bnJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance) @@ -3425,30 +3426,30 @@ "bnT" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381; id_tag = "server_access_in_sensor"; name = "interior sensor"; pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnU" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnV" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bnW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bnX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/molten_item,/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bnY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bnZ" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) +"bnW" = (/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bnX" = (/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,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bnY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bnZ" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) "boa" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bob" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"boc" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bod" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"boe" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bof" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) +"boc" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) +"bod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/molten_item,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"boe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bof" = (/turf/simulated/wall/r_wall,/area/tcomsat) "bog" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boh" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boi" = (/obj/machinery/telecomms/server/presets/unused,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boj" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bok" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bol" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bom" = (/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bon" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) +"bol" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bom" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bon" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "boo" = (/obj/machinery/camera/network/telecom{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bop" = (/obj/machinery/exonet_node{anchored = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boq" = (/obj/machinery/camera/network/telecom{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bor" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bos" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) -"bot" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled/techmaint,/area/tcommsat/entrance) +"bor" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bos" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bot" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bou" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bov" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bow" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -4894,8 +4895,8 @@ "bQg" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bQh" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bQi" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 10},/obj/structure/railing{dir = 1},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) -"bQj" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Cargo Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) -"bQk" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Surface Civilian"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bQj" = (/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bQk" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bQl" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Surface Civilian Subgrid"; name_tag = "Surface Civilian Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/bar) "bQm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/locker_room) "bQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/junk,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/lower/rnd) @@ -5141,6 +5142,7 @@ "bUT" = (/obj/structure/table/glass,/obj/machinery/computer/skills,/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUU" = (/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUV" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/mauve/border{dir = 4},/turf/simulated/floor/tiled,/area/rnd/rdoffice) +"bUW" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bUX" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 10},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) @@ -5361,7 +5363,7 @@ "bZg" = (/obj/structure/railing,/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) "bZh" = (/obj/structure/railing{dir = 8},/obj/structure/railing,/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) "bZi" = (/obj/structure/railing,/obj/structure/railing{dir = 4},/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) -"bZj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"bZj" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bZk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/crew_quarters/bar) "bZl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bZm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/crew_quarters/locker/laundry_arrival) @@ -5400,6 +5402,8 @@ "bZT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_stairs_one) "bZU" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_stairs_three) "bZV" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_staires_two) +"bZW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bZX" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaacaacaacaacaacaacaacaacaacaacaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5453,7 +5457,7 @@ aaaaadaadaadaadaadaadaadaadaadaadaagaagamGapIapJapKapLapMapNapOapPapQamGapRapfap aaaaadaadaadaadaadaadaadaadaadaadaagamGamGamGaqsaqtaquaqvaqwaqxaqyaqzamGapRaqAaqBaqCahhaqDaiCaqEaqFaqGaqHaqIapWaagaagaagaagaagaagaagaagaagaagaagakYaYDaqKaqLaqMakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIaptakuajOalebZdalfalfalfalfalfalfalfbZealeajOajPajQanRaqNaqOaqPaqQaqRanRaqSaqTaqUaoranRaagapCaqVaqWaqWaqWaqXaqWaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaadaagamGaqZaraarbaoZarcaoZardarearfargamGarhariarjarjahharkaiCarlapWarmarnaroapWarparparparparparparparparparparpakYarqalEakYakYakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIarrakuajOalebZhbZgbZgbZgbZgbZgbZgbZgbZialeajOajParsanRartaoTaoTaruarvanRarwanRanRanRanRaagapCarxaqWaryarzarAaqWaqnaqoaqparBarCarCarCarCarBaqpaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagaagamGarDarEarbarFarGarHarIarJarKarKarLarMarNarOarParQarRaiCarSarparparTarUarparVarWarXarYarXarXarXarXarXarXarXarZasaasbakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIascakuajOakvakwakwakwakwakwakwakwakwakwakvajOajPasdaseasfaoTaoTaruasgashasiasjaskaslanRaagapCasmaqWasnasoaspaqWaqnaqoarCarBarCarCarCarCarBarCasqapCaaa -aaaaadaadaadaadaadaadaadaadaadaagaagamGasrassastasuasuasuasuasuasuasvaswasxasyaszasAasBasCasDasEarpbegbdUasHasIasJasKasLasLasLasLasLasLasLasLasLasLasMasNasOasOasPasPasPasPasPasPagIagIaagaagaagaagaagaagaagaagagIasQakuajOajOajOajOajOajOajOajOajOajOajOajOajOasRasSasTasUasVbZjasWasXaoTasYaoTaoWaslanRaagapCaqhasZasZaqWataaqWaqnaqoarCarBarCarCarCarCarBarCaqYatbaaa +aaaaadaadaadaadaadaadaadaadaadaagaagamGasrassastasuasuasuasuasuasuasvaswasxasyaszasAasBasCasDasEarpbegbdUasHasIasJasKasLasLasLasLasLasLasLasLasLasLasMasNasOasOasPasPasPasPasPasPagIagIaagaagaagaagaagaagaagaagagIasQakuajOajOajOajOajOajOajOajOajOajOajOajOajOasRasSasTasUasVasVasWasXaoTasYaoTaoWaslanRaagapCaqhasZasZaqWataaqWaqnaqoarCarBarCarCarCarCarBarCaqYatbaaa aaaaadaadaadaadaadaadaadaadaadaagamGamGamGamGatcaoZaoZatdateatfatgathaoZatiatjatkatlatmatnatoatparpatqatratratratratsasLattatuatvatwatxatxatxatyasLatzatAasOatBatCatCatCatCatCatCagIagIagIaagaagaagaagaagaagaagagIatDatEatFatGatGatGatGatGatHatGatGatGatGatGatGatIatJanRatKaoTaoTatLatMatNatOaoTaoWaslanRaagapCapCapCapCatPataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGatQatRatSatTaoZaquaotatQamGatUatVatWamGatXatYarparparparparparpatZauaauaauaauaauaasLaubaucaudaueaufaufaufaugasLbeQauibeSaukatCaulaulaulaulatCaumaunagIagIagIagIauoagIagIagIagIaupakuauqaurausautautauuauvauwauxautautautauyajPajQanRauzauzauAauBauCauDauEauFauGauHanRaagapCauIauIapCauJataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGauKaoZaoZatTaoZauLaotauMamGatUauNauOamGauPauQbfxarXarXarXarXauSauTauaauUauVauWauXauYauZavaavbavcavdavdavdaveasLbfzavgasOavhatCaulaulaulaulaulaviavjavkavlavmavnavnavoavpavqavravsavtavuagIagIavvavvavvavvavvavvavwavvavvavxajPajQanRanRanRanRavyavzanRanRanRanRanRavAagIapCavBavBapCavCavDaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa @@ -5592,7 +5596,7 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbabaUSaSUaTjaVtbacbadbaeaVtbafbagbahbaibajbakaYPbalaUYbambanbaobapbaqbarbasaVabatbQnaQMbavbavbavbavaVyaZabawbaxbaybazbaAbaBaVCbaCbaDbaEbaFbaGbaHaVCahvahvahvahvaYCaYCaYCaYCaYCbaIbXXaYCbaKbaLbaMbaNbaObaPaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbXYaSUaTFbaSaVtbaTbaUbaVaVtbaWbaXbaYbaZbaZbaZbbabbbaUYbbcbanbbdbbebbfbarbbgaVabbhbavbavbavbbibavbavbavbavbavbbjbbkbblbavbavbbmbbnbbobbpbbmbbmbbmbbmbbqaisbbrahvaJJaJJaJJaJJaYCaZUaZVaYCbbsbbtbYaaYtbbvbbwbbxbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbbyaVtbbzbbAbbBaVtbbCbbDbbEbbFbbGbbHbbEbbIaUYbbJbbKbbLbbMbbNbbObbPaVabbQbbRbbTbbVbbUbbSbbWbbXbbYbbZbcabcbbccbcdbcebbmbcfbcgbchbcibcjbckbclbcmbcnbcoahvaJJaJJaJJaJJaYCaZUbaIbcpbbsbcqbcrbcsbctbbwaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbcuaSUaSUbYeaVtbcwbcxbcyaVtaUXbYfaUXaUXaUXaUXaUXaUXaUYbcAbcBbcCbcDbcEbcFbcGaVabcHbcIbcJbcKbcLbcMbcPbcObcNbcQbcRbcSbcTbcUbcVbcWbcXbcYbcZbdabcgbdbbbmajRbdcbddahvaJJaJJaJJaJJaYCbdebYnaYCbbsbcqbdgbdhbdhbdiaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbcuaSUaSUbYeaVtbcwbcxbcyaVtaUXbYfaUXaUXaUXaUXaUXaUXaUYbcAbcBbcCbcDbcEbcFbcGaVabcHbcIbcJbcKbcLbcMbcPbcObcNbcQbcRbiObcTbcUbcVbcWbcXbcYbcZbdabcgbdbbbmajRbdcbddahvaJJaJJaJJaJJaYCbdebYnaYCbbsbcqbdgbdhbdhbdiaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbcvaVtaVtaVtaVtaVtaGmbdjbdkaGmaJJaJJaJJaJJaUYbdlbdlbdmbdnbdmbdlbdlbdlbdobdpbavbavbdtbdvbdWbdvbdtbdrbdsbeFbdYbdZbeJbbobdwbdxbdybdzbdxbdAbbmahvahvahvahvaYCaYCaYCaYCaYCbYraZZaYCbdBbdCbdDaZZbbxaZZaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbYtaGmbdFbdGbdHbdIbdJbdKbdLaGmaJJaJJaJJaJJaJJbdlbdMbdNbdObdPbdQbdRbdlbdSbdTbavbYwbdtbeKbeLbeMbdtbdtbdtbfgbdubcUbfhbbmbeabebbecbedbeebefbbmbYzbYybejbejbejbekbejbdebdebdebYAaYCbembenbeoaZZbepbeqberbesaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaTqaUSaSUaGmbetaGmaGmaGmaGmbdjbeuaGmaJJaJJaJJaJJaJJbdlbevbewbexbeybezbeAbdlbeBbeCbavbeDbdtbfibflbfobfjbfkbdtbfRbfpbcUbfSbbmbbmbbobbobbobbobbmbbmbeNbeNbeNbeNbeNbeNaYCaYCaYCaYCaYCaYCaYCaYCbeObePbYCbeRbYBaYCaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5604,7 +5608,7 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbhrbhsbYLbhubhvbhwbgYbhxbgdaJJbggbhybZCbjEbiCbZDbhBbhDbhEbhFbhGbhGbhGbhGbhGbZEbZGbhGbZFbhcbhcbhcbhZbhNbhNbhJbhObggaJJaJJbeNbeNbeNbeNaJJaJJaJJaJJaJJaJJaJJaJJbYEbgcbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaGmaGmbgdbhPbhQbhRbhSbhTbgdaJJbggbhUbhVbhWbhXbhXbhXbhYbhZbiabibbibbicbicbicbidbhnbhcbhcbhcbhcbhcbhZbihbiibijbikbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbgcbilbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJJaJJaJIaJJaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbgdbgdbgdbgdbgdbgdbgdaJJbggbimbhVbZHbiobipbiqbirbhZbisbjwbitbiubiubiubiubiibibbibbibbibbicbivbiwbixbZIbizbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbiAbcrbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbggbiCbZJbiEbiFbiGbiHbiIbhZbisbhcbiJbiKbiKbiKbiKbiKbiKbiLbiMbiNbihbiObjgbiQbiRbiSbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbiAbcrbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbggbiCbZJbiEbiFbiGbiHbiIbhZbisbhcbiJbiKbiKbiKbiKbiKbiKbiLbiMbiNbihblvbjgbiQbiRbiSbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbiAbcrbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbggbiTbiUbiIbiVbiWbiEbiPbiXbiYbiZbjabjbbjbbjbbjbbjbbjbbjcbjdbjebhmbZKbjgbjgbjibiSbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYQbjkbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbggbiTbjlbjmbjnbjobjpbjpbjqbjrbjsbjabjbbjbbjbbjbbjbbjbbjtbigbjubjvbhZbjwbiIbjxbjybggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYRaZZbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJJaJJaJJaJJaJJaJJaJJbggbiTbiUbiIbiVbiWbjBbiPbjCbjDbjsbjabjbbjbbjbbjbbjbbjbbjcbhZbjubjvbhZbhcbiIbjEbjFbggaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYSbjHbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5614,21 +5618,21 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJJaJJaJJaJJaJJaJJaJJbggbktbkubjxbkvbkvbkvbkwbhcbjYbhcbkxbiZbiZbiZbiZbiZbiZbZtbhKbkzbkAbkBbkCbkBbkubkDbggaJJaJJaJJaJJaJJaJJbYEaZZbYUbeqbYTbkGaZZbYEbkHbYEbgcbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggbkIbhcbhcbhcbhcbhcbhcbhcbjYbhcbkJbkKbkLbkMbkNbkObkPbkQbkRbkSbYVbYVbkTbYVbYVbYVbYVbYEbYEbYEbYEbYEbYEbYEbkUbkVbkWbkWbkXbkYbYEbYEbYEbgcbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggbkZbhcbhcbhcbhcbhcbhcbhcblablbbkJbkKbkLbkMbkNbkObkPbkQbkRblcbYVbYWbleblfblgblgblhbliblgbYXblkbllblmblmblnbloblpblqblrblsblmblmblmbltbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggblublvblwblxblyblzblAblBblCblDblEbkKbkLbkMblFbkObkPbkQblGblHbYVaZZblIaZZaZZaZZaZZaZZblJblKaZZaZZbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggblublwbmiblxblyblzblAblBblCblDblEbkKbkLbkMblFbkObkPbkQblGblHbYVaZZblIaZZaZZaZZaZZaZZblJblKaZZaZZbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbYEaZZblLbYEbYEbYEbYEbYZblNbYYbmabmabmaaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbYEaJJaJJaJJbmablRblSblTblUbmaaJJaJJaJJblVblVblVblVblVblVblVblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmbbmbbmbblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbmbbmbbmbbmbbmbbmbbmbbmibmjbmbbmkbmlbmmblVbmnbmobmpbmobmqbmrblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZbbmtbmubmvbmwbmbbmxbmybmzbmAbmBbmCbmCbmDblVbmEbmFbmGbmHbmIbmJblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbmKbmLbmMbmNbmObmPbmQbmRbmPbmSbmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebnebnebneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbnfbngbmjbnhbnibnjbmbbnkbmCbnlbmCbnmbnnbnobnpblVbnqbnrbnsbmGbntbnubnvbnwbneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYEbYEbmbbmbbmbbmbbmbbnxbnybnzbnAbnebnebnebnebnebnBbnCbnDbnEbnFbnebnebnGbnebneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJbmkaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmlbmlbmlblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbmbbmbbmbbmbbmbbmlbmlbmmbmybmlbmwbmxbmzblVbmnbmobmpbmobmqbmrblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZbbmtbmubmvbmAbmlbmDbmBbmCbmSbmTbmRbmRbmUblVbmEbmFbmGbmHbmIbmJblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbmKbmLbmMbmNbmObmPbmQbmXbmVbmWbnmbnnbnkbnlbnobmYbmZbnabnbbncbndbnebnebnebneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbnfbngbmjbnhbnibnjbmbbnxbmRbnpbmRbnAbnybnzbnGblVbnqbnrbnsbmGbntbnubnvbnwbneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYEbYEbmbbmbbmbbmbbmbbnYbnWbnXbnZbnebnebnebnebnebnBbnCbnDbnEbnFbnebnebocbnebneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbnHbnIbnIbnIbnIbnIbnIbnIbnIbnIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbnJbnJbnKbnJbnebnLbnLbnLbnMbnNbnObnPbnQbnRbnSbnTbnUbnVbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbnWbnXbnYbnZbnebnLbnUbnUbnUboabnUbobbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbocbodboebofbnebnLbogbohboiboabnUbnLbnUboabnUbojbokbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbolbombombonbneboobnUbnUbnUboabnUbopbnUboabnUbnUbnUboqbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbborbosbotbmbbneboubovbowboxbnRboybozboAbnRboBboCboDboEbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbmbbmbbmbbmbbnebnLboFboGbnUboabnUbnLbnUboabnUboHboIbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbolbodboebombnebnLbnUbnUbnUboabnUbobbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbosbonborbotbnebnLbogbohboiboabnUbnLbnUboabnUbojbokbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbQkbQjbQjbUWbneboobnUbnUbnUboabnUbopbnUboabnUbnUbnUboqbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbZXbZjbZWbofbneboubovbowboxbnRboybozboAbnRboBboCboDboEbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbofbofbofbofbnebnLboFboGbnUboabnUbnLbnUboabnUboHboIbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbneboJbnUbnUbnUboabnUboKbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbnebnLboLboMboNboObnUboPbnUboQboRboSboTbnLbneaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbnebnQboUbnLboVbnLbnLboWbnLbnLboXbnLboUbnQbneaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5714,7 +5718,7 @@ boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNUbMAbZSbNmbNmbNnaYUbNVbNWbNXbNYbbgaUYbNZbNZbNZbKSbOabNZbKSbMQbJVbObbMlbOcbOdbOebOfbOgbOUbLIbNEbOibOibOibOibOibOjbOkbOlbOmbOnbOobOpbOqbOrbKJbOsbIZbKLbJGbOtbOtbJobHebHebHebIlbIQbIlbHebHebHebHebOubLobJLbpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabOvaUYbOwbMAbZSbOxbOybOzbZobOBbOCbNqbODbOEaUYbOFbOGbOHbOIbOJbOKbOLbOMbJVbONbMlbOObOPbOQbORbOSbMlbOTbRkbRgbOWbOXbOYbOibKBbOZbKHbPabNdbMsbMtbPbbPcbPdbPebIZbKLbJGbPfbPgbPhbLVbLVbLVbLWbZRbIlbHebHebHebHebIlbKmbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPibMAbPjaYibPkbPlbPmbPlbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPxbJdbZpbPzbMlbOObPAbOQbPBbPCbMlbLIbPDbPEbPFbPGbPHbOibXZbOZbKHbPJbNdbMsbMtbLObPKbNfbPLbIZbKLbJGbPgbPgbPMbMwbMwbMwbMxbIPbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDbOibQjbQkbQlbYdbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDbOibcSanTbQlbYdbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbQrbQsaYiaYibNqaYibQtbQubQubQvbQwbQxbQubQubQybQybQybQybQybQybQzbQAbQBbMlbQCbQDbQEbQDbQFbMlbYlbPDbOibOibOibOibOibQHbYmbKHbQJbLNbLObLObLPbLQbKJbLnbIZbKLbJGbQKbQKbJobHebHebHebHebHebHebHebQLbQMbQNbQObLobJLbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYaUYbQPbQsaYibQQbQRaYibQSbQubQTbQUbQVbQWbQXbQubQYbQZbRabRbbRcbQybRdbQcbQdbMlbRebRebRfbRebRebMlbYpbPDbKBbRhbKBbRibKBbRjbYqbKHbRlbRmbRnbRobRpbRqbKHbKKbIZbRrbFQbRsbHobRtbHebHebHebHebHebHebHebFQbFQbFQbFQbFQbFQbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbRubRvbRwbRxbRybRzbRAaYibRBbRCbRDbREbRFbRGbRHbQubRIbRJbRKbRLbRMbQybRNbQcbQdbRObMlbMlbMlbMlbMlbRPbKBbRQbKBbRRbKBbKBbKBbRSbKBbRTbKHbKJbKJbKJbKJbKHbKHbLnbRUbRVbFQbRWbHebZqbRYbRZbRZbRZbRZbRZbSabFQbSbbScbSdbFQbpabpaboZboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 54011cbb4c..fefc14a77c 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -56,7 +56,7 @@ "abd" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_8) "abe" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_8) "abf" = (/obj/structure/table/woodentable,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_8) -"abg" = (/obj/structure/sink{pixel_y = 22},/obj/item/frame/mirror{layer = 2.9; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_8) +"abg" = (/obj/structure/sink{pixel_y = 22},/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_8) "abh" = (/obj/structure/toilet{pixel_y = 10},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_8) "abi" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "abj" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) @@ -124,7 +124,7 @@ "act" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_6) "acu" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_6) "acv" = (/obj/structure/table/woodentable,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_6) -"acw" = (/obj/structure/sink{pixel_y = 22},/obj/item/frame/mirror{layer = 2.9; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_6) +"acw" = (/obj/structure/sink{pixel_y = 22},/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_6) "acx" = (/obj/structure/toilet{pixel_y = 10},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_6) "acy" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/obj/machinery/camera/network/engineering{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/backup) "acz" = (/obj/machinery/atmospherics/pipe/tank/nitrogen{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/backup) @@ -137,7 +137,7 @@ "acG" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/backup) "acH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/orange/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 10},/obj/item/device/radio/intercom{pixel_y = 24; req_access = list()},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "acI" = (/obj/machinery/atm{pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) -"acJ" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/machinery/camera/network/security{dir = 4},/obj/structure/table/steel,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/device/retail_scanner/security,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 30},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/warden) +"acJ" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/machinery/camera/network/security{dir = 4},/obj/structure/table/steel,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/device/retail_scanner/security,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 30},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/dark,/area/security/warden) "acK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "acL" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "acM" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) @@ -254,7 +254,7 @@ "aeT" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_4) "aeU" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_4) "aeV" = (/obj/structure/table/woodentable,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_4) -"aeW" = (/obj/structure/sink{pixel_y = 22},/obj/item/frame/mirror{layer = 2.9; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_4) +"aeW" = (/obj/structure/mirror{pixel_x = 30},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aeX" = (/obj/structure/toilet{pixel_y = 10},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_4) "aeY" = (/obj/structure/sign/department/atmos,/turf/simulated/wall/r_wall,/area/engineering/atmos/backup) "aeZ" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/orange/border{dir = 8},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) @@ -269,7 +269,7 @@ "afi" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "afj" = (/obj/structure/cable/green{icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "afk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/orange/border{dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) -"afl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/orange/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/engineering/aft_hallway) +"afl" = (/obj/structure/sink{pixel_y = 22},/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_4) "afm" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/workshop) "afn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/workshop) "afo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/workshop) @@ -362,7 +362,7 @@ "agX" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2) "agY" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2) "agZ" = (/obj/structure/table/woodentable,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/Dorm_2) -"aha" = (/obj/structure/sink{pixel_y = 22},/obj/item/frame/mirror{layer = 2.9; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_2) +"aha" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/orange/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 5},/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/engineering/aft_hallway) "ahb" = (/obj/structure/toilet{pixel_y = 10},/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_2) "ahc" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/white/border{dir = 8},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "ahd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) @@ -1158,7 +1158,7 @@ "awn" = (/turf/simulated/wall/r_wall,/area/bridge) "awo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/bridge) "awp" = (/obj/structure/sign/department/bridge,/turf/simulated/wall/r_wall,/area/bridge_hallway) -"awq" = (/obj/structure/table/marble,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/machinery/floor_light/prebuilt{on = 1},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "cafe"; name = "Cafe Shutters"; pixel_x = -10; pixel_y = 10; req_access = list(); req_one_access = list(25)},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) +"awq" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower/security,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "awr" = (/obj/structure/sign/nanotrasen,/turf/simulated/wall/r_wall,/area/bridge_hallway) "aws" = (/obj/structure/table/marble,/obj/machinery/cash_register/civilian{dir = 1},/obj/machinery/door/blast/shutters{dir = 2; id = "cafe"; layer = 3.1; name = "Cafe Shutters"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "awt" = (/turf/simulated/wall/r_wall,/area/bridge_hallway) @@ -1380,7 +1380,7 @@ "aAB" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "aAC" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "aAD" = (/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/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) -"aAE" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/frame/mirror{pixel_x = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) +"aAE" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/suit/storage/apron,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aAF" = (/obj/structure/reagent_dispensers/water_cooler/full,/obj/machinery/computer/guestpass{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/station/docks) "aAG" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/obj/machinery/status_display{pixel_y = 30},/turf/simulated/floor/tiled,/area/hallway/station/docks) "aAH" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/station/docks) @@ -1436,7 +1436,7 @@ "aBF" = (/obj/structure/bed/chair/comfy/brown,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library) "aBG" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "aBH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) -"aBI" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/frame/mirror{pixel_x = 30},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) +"aBI" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aBJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/camera/network/northern_star{dir = 4},/turf/simulated/floor/tiled,/area/hallway/station/docks) "aBK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/station/docks) "aBL" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/station/docks) @@ -1496,7 +1496,7 @@ "aCN" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor/wood,/area/library) "aCO" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/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/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library) "aCP" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library) -"aCQ" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/wood,/area/library) +"aCQ" = (/obj/structure/sink{pixel_y = 22},/obj/structure/mirror{dir = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/Dorm_2) "aCR" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "aCS" = (/obj/machinery/door/airlock{name = "Unit 3"},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "aCT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) @@ -1530,7 +1530,7 @@ "aDv" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/tether/station/dock_two) "aDw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tether/station/dock_two) "aDx" = (/turf/simulated/floor/tiled,/area/tether/station/dock_two) -"aDy" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/crew_quarters/captain) +"aDy" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 1; id = "mining_outbound"},/turf/simulated/floor/plating,/area/mine/explored/upper_level) "aDz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/captain) "aDA" = (/obj/structure/toilet{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/crew_quarters/captain) "aDB" = (/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -1976,7 +1976,7 @@ "aLZ" = (/obj/machinery/seed_storage/garden,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/camera/network/security{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) "aMa" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aMb" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) -"aMc" = (/obj/structure/mirror{pixel_x = 30},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) +"aMc" = (/obj/machinery/telecomms/relay/preset/tether/station_low,/obj/effect/floor_decal/techfloor/orange{dir = 9},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/westleft{req_access = list(56); req_one_access = list(19)},/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) "aMd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/station/sec_lower) "aMe" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue) "aMf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue) @@ -1995,7 +1995,7 @@ "aMs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aMt" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aMu" = (/obj/structure/table/steel,/obj/item/clothing/head/greenbandana,/obj/item/weapon/material/minihoe,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) -"aMv" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower/security,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) +"aMv" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/machinery/telecomms/relay/preset/tether/station_mid,/obj/machinery/door/window/brigdoor/westleft{req_access = list(56); req_one_access = list(19)},/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) "aMw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aMx" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aMy" = (/turf/simulated/wall,/area/chapel/office) @@ -2042,7 +2042,7 @@ "aNn" = (/obj/item/weapon/pen/crayon,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/dark,/area/security/brig) "aNo" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/dark,/area/security/brig) "aNp" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) -"aNq" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe,/obj/item/clothing/suit/storage/apron,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) +"aNq" = (/obj/effect/floor_decal/techfloor/orange{dir = 10},/obj/structure/window/reinforced,/obj/machinery/telecomms/relay/preset/tether/station_high,/obj/machinery/door/window/brigdoor/westleft{req_access = list(56); req_one_access = list(19)},/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) "aNr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/deck/cards,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aNs" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/head/soft/orange,/obj/item/clothing/shoes/sandal,/obj/machinery/light,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aNt" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) @@ -2050,7 +2050,7 @@ "aNv" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/steel_dirty,/area/security/brig) "aNw" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) "aNx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) -"aNy" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/freezer,/area/security/brig/bathroom) +"aNy" = (/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/obj/structure/plasticflaps/mining,/turf/simulated/floor,/area/quartermaster/delivery) "aNz" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/lino,/area/chapel/office) "aNA" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/chapel/office) "aNB" = (/obj/structure/cable/pink{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/lino,/area/chapel/office) @@ -2267,7 +2267,7 @@ "aRE" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/ce,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/flame/lighter/zippo,/obj/item/device/megaphone,/obj/item/weapon/folder/yellow_ce,/obj/item/weapon/pen/multi,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aRF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aRG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) -"aRH" = (/obj/machinery/telecomms/relay/preset/tether/station_low,/obj/effect/floor_decal/techfloor/orange{dir = 9},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/westleft,/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) +"aRH" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 8},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "aRI" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/security/security_processing) "aRJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/security_processing) "aRK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/security/security_processing) @@ -2299,7 +2299,7 @@ "aSk" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 6; pixel_y = -12; req_access = list(10)},/obj/machinery/button/remote/blast_door{id = "englockdown"; name = "Engineering Lockdown"; pixel_x = -6; pixel_y = -12; req_access = list(10)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio{pixel_x = -4},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aSl" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aSm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) -"aSn" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/machinery/door/window/brigdoor/westleft,/obj/machinery/telecomms/relay/preset/tether/station_mid,/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) +"aSn" = (/obj/structure/table/marble,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/machinery/floor_light/prebuilt{on = 1},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "cafe"; name = "Cafe Shutters"; pixel_x = -10; pixel_y = 10; req_access = list(); req_one_access = list(25)},/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "aSo" = (/obj/structure/table/steel,/obj/item/device/taperecorder,/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/turf/simulated/floor/tiled,/area/security/security_processing) "aSp" = (/obj/structure/table/steel,/obj/item/weapon/hand_labeler,/obj/item/weapon/folder/red{pixel_x = 2; pixel_y = 4},/obj/item/weapon/folder/red,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/security/security_processing) "aSq" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/security/security_processing) @@ -2332,7 +2332,7 @@ "aSR" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aSS" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) "aST" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet/oracarpet,/area/crew_quarters/heads/chief) -"aSU" = (/obj/effect/floor_decal/techfloor/orange{dir = 10},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/westleft,/obj/machinery/telecomms/relay/preset/tether/station_high,/turf/simulated/floor/tiled/techfloor,/area/crew_quarters/heads/chief) +"aSU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "cargo_bay_door"; locked = 1; name = "Cargo Docking Hatch"; req_access = list(13)},/turf/simulated/floor/tiled,/area/quartermaster/storage) "aSV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/multi_tile/metal/mait{name = "Security Processing"; req_access = list(1); req_one_access = list(12)},/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/security_processing) "aSW" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/security/security_processing) "aSX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/station/sec_lower) @@ -3950,7 +3950,7 @@ "bxX" = (/turf/simulated/floor,/area/maintenance/station/sec_upper) "bxY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/station/sec_upper) "bxZ" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) -"bya" = (/obj/structure/plasticflaps{opacity = 0},/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/turf/simulated/floor,/area/quartermaster/delivery) +"bya" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -32},/obj/structure/closet/secure_closet/chemical{req_access = list(64); req_one_access = list(5)},/turf/simulated/floor/carpet/blue,/area/medical/psych) "byb" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/medical/reception) "byc" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; name = "Sorting Office"; sortType = "Sorting Office"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/delivery) "byd" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/obj/structure/cable/green{icon_state = "0-8"},/obj/machinery/camera/network/cargo,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/delivery) @@ -4539,8 +4539,8 @@ "bJo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage) "bJp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "bJq" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"bJr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "cargo_bay_door"; locked = 1; name = "Cargo Docking Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/quartermaster/storage) -"bJs" = (/turf/simulated/floor,/area/quartermaster/storage) +"bJr" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Bar"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/substation/cargo) +"bJs" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Bar Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/cargo) "bJt" = (/obj/structure/closet/wardrobe/black,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/newscaster{layer = 3.3; pixel_x = -27; pixel_y = 0},/obj/effect/floor_decal/corner_steel_grid{dir = 6},/turf/simulated/floor/tiled,/area/teleporter/departing) "bJu" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/teleporter/departing) "bJv" = (/obj/machinery/cryopod/robot/door/gateway,/turf/simulated/floor/tiled/techfloor,/area/teleporter/departing) @@ -4598,7 +4598,7 @@ "bKv" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/medbay{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bKw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bKx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals6,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) -"bKy" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -32},/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bKy" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light{dir = 1},/obj/structure/mirror{dir = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "bKz" = (/obj/machinery/camera/network/medbay{dir = 1},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bKA" = (/obj/machinery/light,/turf/simulated/floor/carpet/blue,/area/medical/psych) "bKB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/blue,/area/medical/psych) @@ -4737,8 +4737,8 @@ "bNe" = (/obj/machinery/computer/operating{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery) "bNf" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/medical/surgery) "bNg" = (/obj/item/stack/medical/advanced/bruise_pack{pixel_x = 2; pixel_y = 2},/obj/item/stack/medical/advanced/bruise_pack,/obj/structure/table/standard,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/white/border{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/surgical/bonegel,/obj/item/weapon/surgical/bonegel,/turf/simulated/floor/tiled/white,/area/medical/surgery) -"bNh" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Cargo Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/cargo) -"bNi" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Surface Civilian"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/substation/cargo) +"bNh" = (/obj/structure/bookcase{name = "bookcase (Non-Fiction)"},/turf/simulated/floor/wood,/area/library) +"bNi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{dir = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/toilet) "bNj" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/yellow/full{dir = 4},/turf/simulated/floor/tiled,/area/medical/biostorage) "bNk" = (/obj/structure/closet/crate,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "bNl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) @@ -4965,7 +4965,7 @@ "bRy" = (/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) "bRz" = (/turf/simulated/floor/tiled,/area/medical/surgery_hallway) "bRA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/station/medbay) -"bRB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bRB" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/bookcase{name = "bookcase (Reference)"},/turf/simulated/floor/wood,/area/library) "bRC" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bRD" = (/obj/structure/table/glass,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bRE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) @@ -4980,7 +4980,7 @@ "bRN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bRO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bRP" = (/obj/structure/railing,/turf/simulated/open,/area/medical/surgery_hallway) -"bRQ" = (/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bRQ" = (/obj/structure/bookcase{name = "bookcase (Reference)"},/turf/simulated/floor/wood,/area/library) "bRR" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bRS" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/light,/obj/machinery/requests_console{announcementConsole = 1; department = "Medical Department"; departmentType = 5; name = "Chief Medical Officer RC"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bRT" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) @@ -5011,7 +5011,7 @@ "bSs" = (/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bSt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bSu" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) -"bSv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bSv" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/captain) "bSw" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/medical/sleeper) "bSx" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bSy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -5122,9 +5122,9 @@ "bUz" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bUA" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bUB" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) -"bUC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/patient_a) -"bUD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/patient_b) -"bUE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/patient_c) +"bUC" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bUD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "cmooffice_b"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) +"bUE" = (/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/machinery/button/windowtint{id = "cmooffice_b"; pixel_x = -20; pixel_y = -25},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bUF" = (/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "mrecovery-tint"},/turf/simulated/floor/plating,/area/medical/sleeper) "bUG" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/machinery/door/airlock/medical{id_tag = "MedicalRecovery"; name = "Recovery Room"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bUH" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) @@ -5220,7 +5220,7 @@ "bWt" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/ward) "bWu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/medical_restroom) "bWv" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/white,/area/medical/recoveryrestroom) -"bWw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/exam_room) +"bWw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "cmooffice_b"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bWx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/recoveryrestroom) "bWy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medical_restroom) "bWz" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/ward) @@ -5235,7 +5235,7 @@ "bWI" = (/obj/machinery/camera/network/medbay{dir = 1},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bWJ" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bWK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) -"bWL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/ward) +"bWL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "exam_room"},/turf/simulated/floor/plating,/area/medical/exam_room) "bWM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) "bWN" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/monotile,/area/bridge_hallway) "bWO" = (/obj/structure/closet,/obj/random/maintenance/medical,/obj/random/junk,/obj/random/tool,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/station/micro) @@ -5257,6 +5257,10 @@ "bXe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/flasher{id = "Cell 2"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/brig) "bXf" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2"},/obj/effect/floor_decal/industrial/outline,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/brig) "bXg" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{name = "Security Cells"; req_access = list(1)},/turf/simulated/floor/tiled/steel_grid,/area/security/prison) +"bXh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "pr1_window_tint"},/turf/simulated/floor/plating,/area/medical/patient_a) +"bXi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "pr2_window_tint"},/turf/simulated/floor/plating,/area/medical/patient_b) +"bXj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "pr3_window_tint"},/turf/simulated/floor/plating,/area/medical/patient_c) +"bXk" = (/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "mrecovery-tint"},/turf/simulated/floor/plating,/area/medical/ward) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5295,11 +5299,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZabZabZabZabZabZabZab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZacyaczacAacBacCacDacEacFacGacHacIadEaaUabiacKacLaaUacMacNacOacPacQaaVacRacRacRacRacRacRacRacRacRachabCaacaacaacaacaacaclacmacmacmacmacmacmacSacTaclacUacVabYacWacXacYacZacYadaadbadcabYaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZaddadeadfadgadhadiadjadkadladmadnadoaaUadpadqadradsadtaduabnabnabnaaVadvadwadxadyadzadAadBadCacRacjabCaacaacaacaacaacaclacmacmacmacmacmacmadDadJadFadGadHadIafXadKadLadMadNabYadOadPabYaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQadRadSadTadUadVadWadXadYadZaeaaebaecaaUaaUaedaeeaaUaefaegabnaehaeiaaVaejaekaelaemaemaenaemaeoacRaciabCaacaacaacaacaacaclaclaclaclaclaclaclaclaclaclaepaeqaeraeraeraeraeraeraeraeraeraeraacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesaetaeuaevaewaewaexaeyaezaeAaeBaeCaeDaeEaecaaUaaUaeFaaUaaUaaVaeGaaVaaVaaVaaVaeHaemaeIaemaemaeJaemaeKacRaciabCaacaacaacaacaacaeLaeMaeMaeMaeMaeMaeMaeNaeOaeLaePaeQaeraeRaeSaeTaeUaeVaeraeWaeXaeraacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacabZabZabZabZabZabZabZabZabZaeYaeZafaafbafcafdafeaffafgafhafiafjafkaflafmafnafoafoafpafqafrafsaftacRaciabCaacaacaacaacaacaeLaeMaeMaeMaeMaeMaeMafuafvaeLafwafxaerafyafzafAafBafAafCafDafEaerafFafFafFafFafFafFafFafFafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaesaetaeuaevaewaewaexaeyaezaeAaeBaeCaeDaeEaecaaUaaUaeFaaUaaUaaVaeGaaVaaVaaVaaVaeHaemaeIaemaemaeJaemaeKacRaciabCaacaacaacaacaacaeLaeMaeMaeMaeMaeMaeMaeNaeOaeLaePaeQaeraeRaeSaeTaeUaeVaeraflaeXaeraacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacabZabZabZabZabZabZabZabZabZaeYaeZafaafbafcafdafeaffafgafhafiafjafkahaafmafnafoafoafpafqafrafsaftacRaciabCaacaacaacaacaacaeLaeMaeMaeMaeMaeMaeMafuafvaeLafwafxaerafyafzafAafBafAafCafDafEaerafFafFafFafFafFafFafFafFafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaikafGafHafIafJafKafHafHafLafHafHafHafHafMafNafOafPafQafRaemaemafSafSafTafUafVacRaciabCaacaacaacaacaacaeLaeMaeMaeMaeMaeMaeMafWaiXafYadGadHafZaluagbagcagdageaeragfaggaeraghagiagjagkaglagmagnagoafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacacaafGafHagpagpagqagpagpagragpagpagpagqagsagtaguagvagwagxagxagyagxagxagzaemamjacRacjabCaacaacaacaacaacaeLaeLaeLaeLaeLaeLaeLaeLaeLaeLagBagCaeraeraeraeraeraeraeraeraeraeragDagEagEagEagEagEagFagGafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagIagJafHagKagLagMaemaemaemaemaemaemagNacRaciabCaacaacaacaacaacagOagPagPagPagPagPagPagQagRagOagSagTagUagVagWagXagYagZagUahaahbagUahcahdaheahfahgahhagFahiafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagHagIagJafHagKagLagMaemaemaemaemaemaemagNacRaciabCaacaacaacaacaacagOagPagPagPagPagPagPagQagRagOagSagTagUagVagWagXagYagZagUaCQahbagUahcahdaheahfahgahhagFahiafFaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagHahjahkahlahjahmahjahlahjahnahoahpahqahrahsahtagHahuagJafHahvahwahxaemahyahzahAahBahCahCacRacjabCaacaacaacaacaacagOagPagPagPagPagPagPahDahEagOacUacVagUahFahGahHahIahHahJahKahLagUahMahNahOahPahQahRagFahSafFaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTahTahTahTahTahTahUagHahjahjahjahVahWahWahWahWahXahYahZahWaiaaibaicaidaieaifafHaigaihaihaihaihaihaihaihaihaihaiiacjabCaacaacaacaacaacagOagPagPagPagPagPagPaijaqFailadGadHaimavTaioaipaiqairagUaisaitagUaiuahNaivahPahQaiwagFaixafFaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaahTaiyaizaizaizaizaiAaiBaiCaiDaiEaiFaiGahVaiHaiIaiJaiKaiKaiKaiKaiKaiKaiKaiLaiMaiNaiOaiPaiQaiRaiSaiTaiUaiVaiWaihaxbaciabCaacaacabCabCabCagOagOagOagOagOagOagOagOagOagOaiYaiZagUagUagUagUagUagUagUagUagUagUajaahNajbajcajdajeagFajfafFaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5313,8 +5317,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanEanFanGanHan aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamMagHaonamOaooaopaoqaoraosahjaotamVaouamXaovaowaoxanbaoyaozaoAaoBaoCaoDaoEaoFaoGaoHaoIaoJaRzaoLalOalOalOalOaoMaoMalRalRaoNalVamGamGamFaoOaoPaoQaoPaoQaoQaoPaoPamFamGaoRamGamGanBaoSaoTameameameameameameameameameamealyaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagHamgamhamiagHaoUalBaoVahjamkamVaoWaoXaoYaoZapaamrapbapcanXaoBapdaoGapeapfaoGaoHaciapgacjaphapiapiapiapiapiapiapjapkaplalVamGamGamGaoPatDarYavzarYarYavBaoPamGamGamGamGamGanBapoappameameameameameameameameameamealyaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUahTahTahTahTahTahTahTahUagHapqapraprapsaptalBapuapvapwalDalDalDalDapxalDapyapzapAapBapCapDapEapFapGapHapIapJapKapLapMapiapNapNapNapNapialValValValVamGamGamGaoQatDalValVapOalVavBaoQamGanvanwanxamGanBapPamKameameameameameameameameameamealyamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizapQapQaizapRaaaaaaagHapSalzapTapUamSapVapWapXapYapZaqaaqbaqcaqdaqeaqfaqgaqhaqiaqjaqkaqlaoGapfaqmaoHaqnaqoaqpaqqapiapNapNapNapNapNalValValValVamGamGamGaoQatDalVaqraqsalVavBaoQamGanvaqtanxamGanBaquamKameameameameameameameameameameaqvamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaqwapQaqxaqyapQaqzaaaaaaagHaqAaqBaqCaqDaqBaqCaqEbfpaqGaqHaqIaqJaqKaqLaqMapZaqNaqOaqPaqQaqRaqPaqPaqSaqTaoHbvKaqVaqWaqXapiapNapNapNapNapNalValValValVamGamGamGaoQatDalVaqYawqalVavBaoQamGanvanwanxamGanBaraamKameameameameameameameameameamearbamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizapQapQaizapRaaaaaaagHapSalzapTapUamSapVapWapXapYapZaqaaqbaqcaqdaqeaqfaqgaqhaqiaqjaqkaqlaoGapfaqmaoHaqnaqoaqpaqqapiapNapNapNapNapNalValValValVamGamGamGaoQatDalVaqraqsaRHavBaoQamGanvaqtanxamGanBaquamKameameameameameameameameameameaqvamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaqwapQaqxaqyapQaqzaaaaaaagHaqAaqBaqCaqDaqBaqCaqEbfpaqGaqHaqIaqJaqKaqLaqMapZaqNaqOaqPaqQaqRaqPaqPaqSaqTaoHbvKaqVaqWaqXapiapNapNapNapNapNalValValValVamGamGamGaoQatDalVaqYaSnalVavBaoQamGanvanwanxamGanBaraamKameameameameameameameameameamearbamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizaqzaqwaizapRaaaaaaarcardarearfargarharfariarjarkarlarlarmarlarlarlarlarnaroarpaoBarqarrarsaoHaoHaoHartaruarvarwapiapNapNapNapNarxalValValValVamGamGamGaoQatDalValValValVavBaoQamGanvanwanxamGanBaraamKameameameameameameameameameamealyamfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgaizaqxaqyaizaryahUahTagHarzarAarBarCarAarDarEahjarFarGarHarIarJarKarLarMarNarOaoGarParQarQarRarSarSaoHarTbAlarVarWapiapiapiapiapiapiarXalValValVamGamGamGaoPatDawsawUawUawUavBaoPamGamGamGamGamGanBarZasaasaasaasaasaasaasaasaasbamKasbalyaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizaqzaqwapQapQapQaiAascasdaseasfasgashasiasjaskaskarGaslasmasnasoaspasqasrassastaoGaoGaoGasuaoGaqmaoHbByaswasxbBAaszaszaszaszaszaszasAalValValVamGamGamFaoPaoPaoPaoQaoQaoQaoPaoOamFamGanAamGamGanBaraasBasCasDasEasFasGasHasBasIasJasKalyaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5330,13 +5334,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgaizaqxaqyaizaryaacaacaacaacaacaacaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUaiyaizaqzaqwaizapRaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacawiaylaymawiaykaykawiaynayoaypayqayraysaytayuayvbOHawnayxayyayzayAayBayCayDayEayFawnayGayHaxxawxayIayJayKayKayKayLawxayMayNawzayOayPayQayRalValValValValValValVaySaktaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaqwapQaqxaqyapQaqzaaaaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacawiawEayTawiawiawiawiayUayoayVawjayWawNawOawPayXayYawnayZazaazbazcazaazdazeazaazfazgazhaziazjazkazlayJazmaznazoazpawxaxaawzawzazqazrazsaztazuazvazwazvazvazxazyazzaktaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizaqzaqwaizapRaaaaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacawiazAazBawiawiawiawiazCazCazDawjazEawNbWUawPazFayYawnbETazHazIazHazHazHazJazHazKawnazLayHazMazNazOayJazPazQazRazSawxaxaawzazTazTazUbFBazWazTazTazTazXazXazXazYazXazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgaizaqxaqyaizaryaaaaacaacaacaacaacawPawPawPawPawPawPawPawPawPawPawiawiawiawiawiawiawiawjawjawjawjazZaAaaAbawPbWWbWVawnaAeaAfaAgaAhaAiaAhaAjaAkaAlaAmaAnaAoaApaAqaAraAsayKaAtayKaAuawxaxaawzaAvaAwaAxaAyaAzaAAaAwaAvazXaABaACaADaAEazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgaizaqxaqyaizaryaaaaacaacaacaacaacawPawPawPawPawPawPawPawPawPawPawiawiawiawiawiawiawiawjawjawjawjazZaAaaAbawPbWWbWVawnaAeaAfaAgaAhaAiaAhaAjaAkaAlaAmaAnaAoaApaAqaAraAsayKaAtayKaAuawxaxaawzaAvaAwaAxaAyaAzaAAaAwaAvazXaABaACaADbKyazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizaqzaqwaizapRaaaaacaacaacaacaacawPaAFaAGaAHaAIaAIaAJaAIaAKaALaAMaANaAOaAPaAIaAIaAQaAKaARaASaATaAUawNaAVawPawPawPawnaAWazHaAXaAYazHazHaAZazHaBaawnaBbaBcaBdawxaBeaBfaBgaBhaBiaBjawxayMawzaBkaBkaBkaAyaAzaBkaBkaBlazXazXazXaBmaBnazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaqwapQaqxaqyapQaqzaaaaacaacaacaacaacawPaAVaBoaBpaBqaBqaBqaBqaBqaBqaBraBqaBsaBqaBqaBqaBqaBqaBtaBsaBqaBuaBvaAVawPaacaacawnaBwaBxazHaByazHazHaBzazHazHaBAaBBaBcaBCawxawxawxawxawxawxawxawxayMawzaBDaBDaBkaBEaBFaBkaBDaBDazXaABaBGaBHaBIazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaqwapQaqxaqyapQaqzaaaaacaacaacaacaacawPaAVaBoaBpaBqaBqaBqaBqaBqaBqaBraBqaBsaBqaBqaBqaBqaBqaBtaBsaBqaBuaBvaAVawPaacaacawnaBwaBxazHaByazHazHaBzazHazHaBAaBBaBcaBCawxawxawxawxawxawxawxawxayMawzaBDaBDaBkaBEaBFaBkbNhbNhazXaABaBGaBHbNiazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTaiyaizaqzaqwaizapRaaaaaaaacaacaacaacawPaBJaBKaBLaBMaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBLaBMaBNawNaBOawPaacaacawnaBPaBQaBRaBSbMgazHaBUazaaBVaBWaBXaBYaBZaCaaCbaCcaCdaCeaCfaCgawtayMawzaChaCiaCjaCkaClaCmaBkaCnazXazXazXaCoaCpazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgapQaCqaCqapQaqzaaaaaaaacaacaacaacaCraCsaCtaCuaCrawPaCvaCvaCvawPawPaCvaCvaCvawPawPaCvaCvaCvawPaCwaCxaCyaCzaCwaacaCAaCAaCAaCAaCAaCAaCAaCBaCCaCDaCAaCAaCEaCFaCGaCHaCIaCJaCKaCLaCfaCgawtaxaawzaCMaCNaBkaCOaCPaBkaCNaCQazXaCRaCSbNLaBIazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTajgapQaCqaCqapQaqzaaaaaaaacaacaacaacaCraCsaCtaCuaCrawPaCvaCvaCvawPawPaCvaCvaCvawPawPaCvaCvaCvawPaCwaCxaCyaCzaCwaacaCAaCAaCAaCAaCAaCAaCAaCBaCCaCDaCAaCAaCEaCFaCGaCHaCIaCJaCKaCLaCfaCgawtaxaawzaCMaCNaBkaCOaCPaBkbRQbRBazXaCRaCSbNLbNiazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahTahUahTahTahTahTahTahTahTaacaacaacaacaCraCUaCVaCWaCraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCwaCXaCYaCZaCwaacaCAaDaaDbaDcaCAaDdaDeaDfaDfaDgaDhaDiazhaBcaDjaDkaDlaDlaDlaDlaDmaDmaDmaxaawzaDnaBkaBkaAyaAzaBkaBkaDoazTazTazTazTazTazXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDpaDqaDraDsaDtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDuaDvaDwaDxaCwaacaCAaDyaDzaDAaCAaDBaDCaDDaDfaDfaDEaDFazLaBcaDGawtaDHbXbaDJaDKaDLaDMaDNaDOawzaDPaDQaDQaDRaAzaDSaDTaDUazTaDVaDWaDWazTaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDpaDqaDraDsaDtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDuaDvaDwaDxaCwaacaCAbSvaDzaDAaCAaDBaDCaDDaDfaDfaDEaDFazLaBcaDGawtaDHbXbaDJaDKaDLaDMaDNaDOawzaDPaDQaDQaDRaAzaDSaDTaDUazTaDVaDWaDWazTaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDpaDqaDXaDYaDtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDuaDvaDZaEaaCwaacaCAaCAaEbaCAaCAaEcaEdaEeaEfaEgaEhaEiaEjaEkaElawtaEmaEnaEoaEpaEqaEraEsaEtawzaEuaEuaBkaEvaAzaEwaExaExaEyaExaExaExazTaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDpaDqaEzaDraDtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDuaDvaEAaDwaCwaacaCAaEBaECaEDaCAaEEaEFaDfaDfaDfaEGaCAaEHaEIaEJaEKaELaEMaENaDlaEOawzawzawzawzaEPaEQaBkaERaESaETaEUaEUaEVaEWaEXaEYazTaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEZaEZaEZaFaaFaaEZaEZaFaaFaaFaaEZaEZaEZaaaaaaaCraFbaFcaFdaCraaaaFeaFeaFeaFeaFeaFeaFeaFeaFeaFeaFeaaaaaaaaaaCwaDvaFfaFgaCwaacaCAaFhaFiaFjaFkaFlaDfaDfaDfaDfaFmaCAaFnaFoaFpawtaDlaDlaDlaDlaacaacaacaacazTaFqaFqaBkaEvaAzaFraExaExaEyaFsaFtaFuazTaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5418,10 +5422,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKcaKcaKdaK aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKcaKcaKxaKyaKzaKzaJeaacaacaacaJlaKAaKBaKjaKCaKDaKjaKEaKFaKjaKEaKFaKjaKGaKHaKIaKJaKKaKLaKMaJmaKNaKOaKPaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaKwaKQaKRaKSaKSaKwaacaacaataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaKTaKUaKVaKWaKzaKXaJeaacaacaacaJlaKhaKYaKjaKZaLaaKjaLbauWaKjaLcaMPaKjaLdaLeaLfaLgaLfaLhaLiaLjaLkaLlaLmaJmaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaLnaLoaLpaKSaKSaKwaacaataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaLqaLraKdaLsaLtaLuaJeaacaacaacaJlaKhagaagAaKjaKjaKjaLwaLxaKjaLyaLxaKjaLzaLeaLfaLAaLBaLCaLDaLEaLEaLEaLEaLEaKvaJDaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaKwaLnaLoaLFaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaLGaLHaKxaLIaLJaLKaJeaacaacaacaJlaLLaLMaLNaLOaLPaLQaLOaLRaLSaLOaLRaLTaLUaLVaLOaLWaLXaLYaLZaLEaMaaMbaMcaLEaMdaJDaacaacaacaacaacaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaMeaMfaMgaMhaMiaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaJeaJeaMjaMkaJeaJeaJeaacaacaacaJlaMlaMmaKjaKjaKjaKjaMnaMoaKjaMpaMqaKjaMraLeaLfaMsaMtaLCaMuaLEaMvaMwaMxaLEaMdaJDaMyaMyaMyaMyaMyaMyaMzaMAaMAaMAaMBaMCaMAaMAaMDaMAaMAaMEaMFaMGaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaLGaLHaKxaLIaLJaLKaJeaacaacaacaJlaLLaLMaLNaLOaLPaLQaLOaLRaLSaLOaLRaLTaLUaLVaLOaLWaLXaLYaLZaLEaMaaMbaeWaLEaMdaJDaacaacaacaacaacaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaMeaMfaMgaMhaMiaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaJeaJeaMjaMkaJeaJeaJeaacaacaacaJlaMlaMmaKjaKjaKjaKjaMnaMoaKjaMpaMqaKjaMraLeaLfaMsaMtaLCaMuaLEawqaMwaMxaLEaMdaJDaMyaMyaMyaMyaMyaMyaMzaMAaMAaMAaMBaMCaMAaMAaMDaMAaMAaMEaMFaMGaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaJeaMHaMIaMJaMKaMLaMLaJeaacaacaacaJlaMMaMNaKjaMOaLaaKjbXdbXcaKjbXebXfaKjaMQaLeaLfaMRaLfaMSaMTaMUaMVaMWaMXaLEaKvaJDaMYaMZaNaaNbaNcaMyaNdaKwaKwaNeaNeaNeaNeaNeaNeaNeaNeaNeaNfaNgaNhaNiaNjaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaMHaMHaNkaNlaMLaMLaJeaacaacaacaJlaNmaKBaKjaNnaKDaKjaNoaKFaKjaNoaKFaKjaNpaNqaNraNsaNtaNuaNvaLEaNwaNxaNyaLEaKvaJDaNzaNAaNBaNCaNDaMyaNdaKwaNEaNeaNFaNGaNHaNIaNJaNGaNKaNeaNLaNMaNhaNNaNjaataataataataataataataabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaJeaMHaMHaNkaNlaMLaMLaJeaacaacaacaJlaNmaKBaKjaNnaKDaKjaNoaKFaKjaNoaKFaKjaNpaAEaNraNsaNtaNuaNvaLEaNwaNxaBIaLEaKvaJDaNzaNAaNBaNCaNDaMyaNdaKwaNEaNeaNFaNGaNHaNIaNJaNGaNKaNeaNLaNMaNhaNNaNjaataataataataataataataabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaNOaNOaNOaNPaNQaNOaNOaNOaNOaNOaNOaJlaNmaNRaKjaNSaKjaKjaNTaNUaKjaNVaNWaKjaNXaNYaNZaNZaNZaNZaOaaLEaLEaLEaLEaLEaKvaJDaObaOcaOdaOeaOfaMyaNdaKwaOgaNeaOhaOiaOjaOkaOlaOmaOnaNeaLoaLoaOoaNNaNjaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaNOaOpaOpaOqaOraOsaOtaOtaOuaOvaNOaJlaOwaOxaOyaOzaOAapnaOzaOCapmaOzaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaOPawDaORaKvaJDaOeaOSaOTaOUaOVaMyaOWaOXaOXaNeaOYaOZaPaaPbaPcaPdaPeaNeaKwaKwaKwaKwaKwaataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaNOaOpaOpaOpaOpaOpaOpaOpaOpaPfaNOaJlaPgaPhaPiaPjaPkaPkaPkaPkaPkaPkaPjaPlaPkaPmaPnaPnaPoaPpaPqaORaPraPsaPtaORaPuaJDaPvaPvaPwaPxaPvaMyaPyawQaPAaNeaOhaPBaPCaPDaPCaPBaOnaNeaacaacaacaacaacaacaacaataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5429,9 +5433,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaNOaOpaOpaPEaP aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaOpaOpaQaaQbaQbaQbaQcaOpaQdaNOaxjaQfaQgaQgaxCaQhaQiaQgaQgaQhaQgaQhaQgaQjaQkaQlaQmaQnaQoaQpaORaQqaQraPraORaQsaQtaQuaQvaQwaQxaQyaQzaQAaQBaQCaNeaNeaNeaNeaQDaNeaNeaNeaNeaacaacaacaacaacaacaacaacaataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaQEaOpaQaaQbaQbaQbaQcaOpaPfaNOaxPaQgaQGaQGaQGaQGaQGaQGaQGaQGaQGaQGaQGaQhaQkaQHaQIaQJaQKaQLaORaPraQMaPraORaQNaOXaQOaQPaQQaQRaQSaQTaQUaNeaNeaNeaNeaQVaQWaQXaQYaQZaNeaNeaNeaNeaacaacaacaacaacaacaacaataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaOpaOpaQaaQbaQbaQbaQcaOpaPfaNOaAcaQhaQGaQGaRbaQGaRcaRdaReaRfaRgaRhaQGaQhaQkaRiaRjaQJaQKaQLaORaORaRkaORaORaQNaOXaRlaRmaRnaRoaRpaRqaRmaNeaRraRsaNeaRtaRuaRvaRwaPBaNeaRxaRyaNeaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaOpaOpaQaaQbaQbaQbaQcaOpaPfaNOaAdaQhaQGaRAaRBaRCaRDaREaRFaRGaRBaRHaQGaQhaQkaRIaRJaRJaRKaRLaRMaRNaROaRPaQkaRQaOXaRRaRSaRnaRoaRpaRTaRUaNeaRVaRWaRXaRYaRZaSaaSbaRYaRXaScaSdaNeaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaSeaSeaSfaSgaQbaQbaQcaOpaPfaNOaDIaQgaQGaSiaRBaRDaSjaSkaSlaSmaRBaSnaQGaQgaQkaSoaSpaSqaSraSsaStaSuaSvaSwaQkaQNaOXaSxaSyaSzaSAaSBaSCaSDaNeaSEaSFaNeaSGaSHaPDaSIaSJaNeaSKaSLaNeaSMaSMaSMaSMaSMaSMaSMaSMaSMaSMaSMaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaSNaSeaSfaSgaQbaQbaQcaOpaPfaNOaOQaQgaQGaSPaRBaRDaSQaSRaSSaSTaRBaSUaQGaQgaQkaQkaQkaQkaQkaQkaQkaSVaSWaQkaQkaSXaOXaSYaSZaRnaRoaRpaPMaSZaNeaNeaNeaNeaPCaTaaTbaTcaPCaNeaNeaNeaNeaSMaTdaTeaTfaTgaLvaTiaTjaTeaTkaSMaSMaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaOpaOpaQaaQbaQbaQbaQcaOpaPfaNOaAdaQhaQGaRAaRBaRCaRDaREaRFaRGaRBaMcaQGaQhaQkaRIaRJaRJaRKaRLaRMaRNaROaRPaQkaRQaOXaRRaRSaRnaRoaRpaRTaRUaNeaRVaRWaRXaRYaRZaSaaSbaRYaRXaScaSdaNeaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaNOaSeaSeaSfaSgaQbaQbaQcaOpaPfaNOaDIaQgaQGaSiaRBaRDaSjaSkaSlaSmaRBaMvaQGaQgaQkaSoaSpaSqaSraSsaStaSuaSvaSwaQkaQNaOXaSxaSyaSzaSAaSBaSCaSDaNeaSEaSFaNeaSGaSHaPDaSIaSJaNeaSKaSLaNeaSMaSMaSMaSMaSMaSMaSMaSMaSMaSMaSMaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaSNaSeaSfaSgaQbaQbaQcaOpaPfaNOaOQaQgaQGaSPaRBaRDaSQaSRaSSaSTaRBaNqaQGaQgaQkaQkaQkaQkaQkaQkaQkaSVaSWaQkaQkaSXaOXaSYaSZaRnaRoaRpaPMaSZaNeaNeaNeaNeaPCaTaaTbaTcaPCaNeaNeaNeaNeaSMaTdaTeaTfaTgaLvaTiaTjaTeaTkaSMaSMaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaTlaSeaSfaSgaQbaQbaQcaOpaTmaNOaPzaQiaQGaToaTpaTqaTraTsaTtaTuaRBaTvaQGaQfaQhaTwaTxaTyaTyaTzaTAaTBaTCaTDaTEaQeaOXaTGaTHaRnaRoaRpaTGaTHaTIaTIaTIaTIaTIaTJaTKaTLaTMaTMaTMaTMaTMaTNaTNaTOaTNaTNaTNaTNaTNaTOaTNaTPaSMaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaSeaSeaSfaSgaQbaQbaQcaOpaPfaNOaRaaTRaQGaQGaQGaQGaTSaTTaTUaTVaTWaTXaQGaTYaTYaTYaTZaUaaUaaUaaUbaUbaUbaUbaUbaUbaOXaUcaUdaUeaUdaUfaUdaUcaTIaUgaUhaUiaTIaUjaUkaUlaTMaUmaUnaUoaTMaUpaUqaUraUsaUtaUuaUvaUwaUxaUqaUyaSMaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaSeaSeaSfaSgaQbaQbaQcaOpaUzaUAaUBaUCaUDaUEaUDaUFaUGaUHaUIaUJaUKaUKaUKaULaUMaUNaUOaUPaUQaURaUSaUSaUSaUSaUSaUSaUTaUUaUVaUWaUXaUYaUZaVaaTIaVbaVcaVdaVeaVfaVgaVfaVhaViaVjaVkaTMaTNaTNaVlaTNaTNaVmaTNaTNaVlaTNaTNaSMaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5459,7 +5463,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbKZbLvbKUbKXbLBbLDbLybLAbMjbMlbLEbLFbMnbKsbGzbGAblRbiEbiFbiGbimbiHbiIbiJbgTbiKbiKbiLbiLbiMbiNbiObiPbiQbiQbiRbiSbiTbiUbiVbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbMsbMubMobILbMXbNjbILbMwblgbNDbNzbNAbNIbNJbNEbGAblRbjjbjkbjlbimbiHbjmbXabgTbiKbiKbjobjobjpbjqbjrbjsbjsbjsbjtbjubjvbjwbhDbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbNNbILbILbILbILbIObILbOjblgblgblgbOrbliblgblgblgblRbfsbjBbjCbjDbjEbjFbjFbgTbgTbgTbgTbgTbgTbjGbgTbhDbhDbhDbiubjHbjHbiubhDbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbOvbOwbOsbOubOVbOXbOxbORbADbjQbjRbWPbjTbjUbjVbOZbjXbjYbjZbkabkbbkcbkdbkebkfbkgbkhbkibkibkjbkkbgTbklbkmbhDbknbkobhDbhDbhDbhFaataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbOvbOwbOsbOubOVbOXbOxbORbADbjQbjRbWPbjTbjUbjVbOZbjXbjYbjZbkabkbbkcbkdbkebkfbkgbkhbkibkibkjbkkbgTbklbUCbkmbknbkobhDbhDbhDbhFaataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbADbADbADbADbADbPxbADbADbADbPybkrbksbPBbkubPzbPAbkwbktbkxbkybkybkzbkAbjFbkBbkBbkBbkBbkBbkBbkBbgTbgTbgTbgTbgTbgTbgTbgTbgTbgTaataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbjFbkCbkDbkEbkFbkGbkHbkIbkJbjFbMWbQbbPZbQabMWbMWbMWbkNbkNbkObkPbjFaataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbjFbkQbkRbkSbkTbkUbkVbkWbkXbjFbQMbRnbQsbQtbRybRLbMWbldbldbkOblebjFblfaataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5551,11 +5555,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbszbszbs aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbtJbtKbtJbtKbtJbtLbszbtMbtNbtObtPbtQbtRavZbtRbtRbtSbtRbtRbtRbtRbtTbtUbtVbtWbtXbtYbtZbtUbuabtRbubbucbudbuebsWbufbugbsYbsZbtabsobpAbnPaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbszbtKbtKbtKbtKbtKbtKbszbuhbsSbuibujbujbujbujbukbukbukbukbukbujbujbujbulbujbumbumbunbuobupbuobuqbumbumburburbusbutbuubuuazGbsvbsobuwbuxbuxbuxbuxbuxbuxaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbszbuybtKbuybtKbuybuzbszbuAbtrbuBbujbuCbuDaywbuFbuGbuHbuIbuFbuEbuJbuKbuLbuMbumbuNbuObuPbuQbuRbuSbuTbumbuUburburbuVbuWbuWburburburbpAbuxbuXbuYbuZazVbuxbuxbuxbuxaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbszbtKbtKbtKbtKbtKbtKbvbbuAbvcbvdbukbvebvfbvgbvgbvgbvgbvgbvgbvhbvgbvibvjbvPbumbvlbvmbvnbvobvpbvqbvrbumbvsbvtbvubvvbvwbvxbvybvzburbpAbuxbvAbvBbvCbvDbvEbvFbvGbuxaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbszbtKbtKbtKbtKbtKbtKbvbbuAbvcbvdbukbvebvfbvgbvgbvgbvgbvgbvgbvhbvgbvibvjbvPbumbvlbvmbvnbvobvpbvqbvrbumbvsbvtbvubvvbvwbvxbvybvzburbpAbuxbvAbvBbvCbvDbvEbvFbvGbuxaacaacaacaDyaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaacaacbszbvHbtKbuybtKbuybtKbvbbuAbvIbvJbukaBTbvLbvgbvMbvNbvMbvNbvMbvgbvgbvgbvObvPbumbvQbvmbvRbvSbvTbvmbvUbumbvVbvWbvXbvYbvZbwabvWbwbbwcbwdbuxbwebwfbwgbwhbvBbvBbwibuxaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbszbwjbwkbwjbwlbwjbwjbvbbuAbwmbwnbukbwobvLbvgbwpbwpbwpbwpbwpbvgbvgbvgbwqbwrbwsbwtbwubwvbwwbwxbwubwybwzbwAbwBbwCbwDbwEbwFbwGbwHburbwIbuxbwJbwKbwLbwMbwLbwLbwNbwLaacaacaacaacaacaacaacaacbwObwObwObwObwOaacaacaacaacaacaaaaaabsebsebsebsebseaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbwPbwQbwRbwSbwRbwTbszbwUbtwbwVbwWbwXbvLbvgbwpbwpbwpbwYbwZbvgbvgbxabxbbxGbxcbxdbvmbvmbvmbvmbvmbxebxcbvVbvWbxfbvWbxgbxhbvWbxiburbxjbuxbxkbuxbwLbxlbwLbxmbxnbwLbwLbwLbwObwObwObwObwObwObwObxobxpbwObwOaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbxqbxrbxsbxtbxsbxubxvbxwbxxbxybxzbxAbxBbvgbxCbxDbxCbxDbxCbvgbvgbxEbxFbxGbumbxHbxIbxJbxKbxLbxMbxNbumbxOaThbxQbxRbxSbxTbxUbxVburbxWbxXbxYaQFbwLbyabwLbbybycbydbyebyfbygbyhbyibyjbykbylbymbynbyobypbwObwOaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbwPbwQbwRbwSbwRbwTbszbwUbtwbwVbwWbwXbvLbvgbwpbwpbwpbwYbwZbvgbvgbxabxbbxGbxcbxdbvmbvmbvmbvmbvmbxebxcbvVbvWbxfbvWbxgbxhbvWbxiburbxjbuxbxkbuxbwLaNybwLbxmbxnbwLbwLbwLbwObwObwObwObwObwObwObxobxpbwObwOaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbxqbxrbxsbxtbxsbxubxvbxwbxxbxybxzbxAbxBbvgbxCbxDbxCbxDbxCbvgbvgbxEbxFbxGbumbxHbxIbxJbxKbxLbxMbxNbumbxOaThbxQbxRbxSbxTbxUbxVburbxWbxXbxYaQFbwLbxlbwLbbybycbydbyebyfbygbyhbyibyjbykbylbymbynbyobypbwObwOaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbyqbyrbysbytbyubyvbszbywbsSbyxbukbyybyzbvhbvgbyAbvgbvgbvgbvgbvgbyBbyCbxGbumbumbumbumbumbumbumbumbumburburburburburburburburburbyDbyEbxYaShbwLbxlbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbclbyRbySbyTbyUbyobyVbwOaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbszbcmbyXbyYbyZbzabzbbszbzcbzdbzebujbzfbzgbzhaSObzjbzkaTFaTnbznaTQbzpbzqbzrbzsbztbzubzvbzwbzxbzxbzxbzxbzxbzxbzybzzbzAbzBbzBbzBbzBbzBaYwbzDaVybwLbzFbzGbyHbzHbzIbzJbwLbwObwObzKbzLbwObzMbzNbzObzPbyUbzQbwOaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbszbszbszbszbszbszbszbszbzRbzSbzTbujbujaZbaYYbujbujbujbujbujbujbujbzXbujbujbujaZjbzZbAabctbzxbAcbAcbAcbAcbzxbAdbAebAfbzBbAgbAhbAibzBbAjbAkbfibwLbzFbAmbyHbAnbAobApbAqbArbAsbAtbAubAvbwObAwbAxbyUbyUbAybwOaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5570,13 +5574,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaacaacaacbfUbBXbD aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbfUbCEbDFbhJbhIbDFbhHbhNbhMbhLbhKbhNbhQawfavibhRbHkbHkbHkbHkbHkbiabEZbHhbGBbGCbGDbDIbGEbGFbDIbDKbDIbDIbDIbDObDPbGGbGHbGIbGIbGIbGIbGJbFbbGKbCKbDubDtbDsbFjbGPbGQbGRbGSbGTbFjbGUbGVbGVbGWbGXbGYbGYbGYbGYbGkaatahUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbfUbBXbDFbDFbDFbDxbGZbGZbHabHbbHcbHdbHUawFawgawHbHYbHZbHZbHZbIcbifbHmbHnbHobHpbHkbHkbHkbHkbHkbHqbHlbHrbHobHkbHkbHsbFObGIbGIbHtbGIbHubFbbHvbHvbHwbHxbDybFjbHzbHAbHBbHCbHDbHEbHFbHGbHGbHHbHIbGYbGYbHJbHKbHLbHMbHNbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacbfUbBXbBXbBXbEGbDxbHObHPbHQbHRbHSbHTbHUaxkawIbHUbiBbiAbizbiCbIcbHZbIabIbbHZbiDbfkbiWbiWbiWbfkbfkbIdbiXbLGbFbbFObFObFObGIbGIbGIbGIbIgbFbbIhbIibIjbDCbIlbFjbFjbHAbImbInbHAbFibIobIpbIqbIrbIsbItbIubIvbIwbIxbIwbIxbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacbfUbfUbfUbfUbBXbDxbIybIzbIAbIAbIAbIBbHUbiZbiYbHUbjbbjablkbjfbjebjdbjcbjibjhbfkbjgbjxbjybjxbjnbfkbITbIUbIVbFObIWbIXbIYbIZbJabJbbJcbJdbFbbJebFUbJfbJgbJebJhbFjbJibJjbJkbJlbFibJmbGYbJnbJobGXbGYbGYbJpbJqbJrbJsbJrbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacbfUbfUbfUbfUbBXbDxbIybIzbIAbIAbIAbIBbHUbiZbiYbHUbjbbjablkbjfbjebjdbjcbjibjhbfkbjgbjxbjybjxbjnbfkbITbIUbIVbFObIWbIXbIYbIZbJabJbbJcbJdbFbbJebFUbJfbJgbJebJhbFjbJibJjbJkbJlbFibJmbGYbJnbJobGXbGYbGYbJpbJqaSUbGYaSUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacbfUbEbbDxbJtbJubJvbJwbJvbJxbHUbjIbjAbHUbjLbjKbjJbjPbjObjNbjMblsbkqbkpbjWbgBbkLbgBbkKbfkbJObJPbJQbJRbJSbJTbJTbJTbJUbJVbJWbIZbJXbJYbFUbJZbKabKbbKcbFjbFjbFjbFibFibFjbKdbGYbJnbJobGXbGYbGYbGYbKebHLbHLbKfbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacbfUbEbbDxbDxbKgbKhbKibKjbkZbHUbkYbkMbHUblbblcblablAblwbljblhbkvblmbgzbllbhOblvblubltbfkbKvbKwbKxbFObKybIZbKzbKAbKBbKCbKDbKEbFbbJYbFUbKFbHxbKGbKHbKIbKJbKKbKLbKMbKcbKNbGYbJnbJobGXbGYbGYbHJbKObJrbJsbJrbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacbfUbEbbDxbDxbKgbKhbKibKjbkZbHUbkYbkMbHUblbblcblablAblwbljblhbkvblmbgzbllbhOblvblubltbfkbKvbKwbKxbFObyabIZbKzbKAbKBbKCbKDbKEbFbbJYbFUbKFbHxbKGbKHbKIbKJbKKbKLbKMbKcbKNbGYbJnbJobGXbGYbGYbHJbKOaSUbGYaSUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacbfUbKPbKQbDxbDxbDxbDxbDxbDxbNKbKnbKnbHUblyblxblCblBbmtbjKbmdblKblJblIblHblQblPblOblLbfkbIdbLabLbbFbbFbbFbbFbbFbbFbbFbbFbbFbbFbbJYbLcbLcbLdbLebKcbLfbLgbLhbLibLjbKcbLkbLlbLmbLnbLobIqbLpbLqbLrbLsbLtbLsbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacbfUbLubBXbEbbEbbKPbEbbEbbEbbNKbLwbLwbHUblXblWblVbmqbmebABbzYblsbmsbkpbmrbhObmvbmubgDbrIbLHbLIbLJbLKbLLbLMbLNbLObLPbLQaacaacbFUbJebLcbLRbLSbLTbKcbLUbLgbLVbLWbLXbLYbLZbMabMabMbbMcbGYbGYbLqbMdbHLbMebMfbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacbfUbfUbfUbfUbfUbWSbWRbWQbWTbNKbLwbLwbHUbyQbybbxZbKWbJEbCgbyWbDnbMrbfkbBNbFrbFqbESbDobFvbMybMzbMAbLKbMBbMCbMDbMDbMEbLQaacaacbFUbJebLcbMFbMGbMHbKcbMIbLgbMJbMKbMLbMMbMNbMObMObMPbGYbMQbMQbMRbMdbGkaaaahUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbMSbMSbMSbMSbMSbMSbMSbMSbMTbMTbMTbMTbFCbMTbMTbMTbMUbMVbGobGmbGmbGubGsbGmbGmbGmbMZbJPbNabNbbNcbNdbNebNfbNgbLQaacaacbFUbJebLcbNhbNibHgbKcbNkbLibNlbLgbNmbKcbNnbGYbGYbNobHjbLtbNqbLtbNrbGkaaaahUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbMSbMSbMSbMSbMSbMSbMSbMSbMTbMTbMTbMTbFCbMTbMTbMTbMUbMVbGobGmbGmbGubGsbGmbGmbGmbMZbJPbNabNbbNcbNdbNebNfbNgbLQaacaacbFUbJebLcbJsbJrbHgbKcbNkbLibNlbLgbNmbKcbNnbGYbGYbNobHjbLtbNqbLtbNrbGkaaaahUbGlbGlbGlbGlbGlbGlbGlahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbMSbNsbNtbNubNvbNwbNxbNybHVbNBbNBbIebHWbICbIfbNFbNGbNHbIHbgxbIEbIPbINbIMbIKbgxbNObNPbNQbLKbNRbNSbMDbMDbMEbLQaacbNTbNTbNUbLcbLcbLcbLcbKcbKcbNVbNWbJAbNXbNYbNZbOabObbFlbFlbFlbFlbFlbFlbFlahUahUahUbGlbGlbGlbGlbGlahUahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbJBbOcbOdbOebOfbOgbJDbOibJCbOlbOlbOmbJFbOnbOnbOnbOobJKbJIbgxbJGbKlbKkbJNbJLbgxbKpbOybOzbLKbOAbOBbOCbODbKtbLQaacbNTbOFbOGbWXbNTaacaacaacbKcbKcbKcbKcbKcbKcbFlbFlbFlbFlaacaacaacaacaacbOIahUahUahUahUahUahUahUahUahUahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbMSbOJbOKbOLbOMbONbOObOPbOQbKTbKSbKRbKubOTbOTbOTbOUbLxbOqbKYbKVbKlbLCbKlbLzbMmbMkbPabPbbPcbPdbPdbPdbPdbPdbPdaacbNTbPebPfbPgbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaahUaaaaaaaaaaaaaaaaaaaaaahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5585,17 +5589,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbQjbQjbQjbQjbQjbQjbQjbQjbQkbPmbQlbPobPpbQmbQnbPsbPVbPWbQobgxbOtbOYbOWbOSbOEbgxbQubJPbNabQvbQwbQxbQzbQybQAbPdbQBbQCbQBbLGbQibNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbQjbQDbQEbQFbQGbQHbQIbQJbQKbPmbPobPobPSbPTbPTbPUbPVbPWbQLbgxbgxbMqbPwbMqbgxbgxbQNbMzbNQbPCbQObQPbQgbQgbQQbPdbQBbQBbQBbLGbQRbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbQjbQSbQTbQUbQVbQWbQXbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibRjbRkbRlbRmbPYbRobRpbRqbRrbRsbRtbPCbRubRvbRwbRxbQpbPdbRzbRzbQBbLGbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRBbRCbQUbRDbREbRFbRGbQJbPlbRHbRIbPobPSbPTbPTbPUbRJbRKbOTbOTbOTbOTbQrbOTbQqbRMbRNbRObOzbPdbPdbPdbPdbPdbPdbPdbRzbRzbRPbLGbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRBbRQbRRbRRbRSbRTbRUbQjbRVbRWbRXbRYbRYbRZbSabRYbSbbScbSdbSebSebSzbSybSxbSgbShbSibSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubLGbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQjbSvbSvbSvbQjbQjbQjbQjbMTbMTbMTbSwbMTbMTbMTbUFbUFbUGbUFbUFbMTbUNbUPbUNbSwbLGbSAbSBbSCbSDbSEbSFbSGbSHbSEbSFbSIbSJbSKbSLbSMbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUDbRCbQUbRDbREbRFbRGbQJbPlbRHbRIbPobPSbPTbPTbPUbRJbRKbOTbOTbOTbOTbQrbOTbQqbRMbRNbRObOzbPdbPdbPdbPdbPdbPdbPdbRzbRzbRPbLGbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUDbUEbRRbRRbRSbRTbRUbQjbRVbRWbRXbRYbRYbRZbSabRYbSbbScbSdbSebSebSzbSybSxbSgbShbSibSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubLGbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQjbWwbWwbWwbQjbQjbQjbQjbMTbMTbMTbSwbMTbMTbMTbUFbUFbUGbUFbUFbMTbUNbUPbUNbSwbLGbSAbSBbSCbSDbSEbSFbSGbSHbSEbSFbSIbSJbSKbSLbSMbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacbUVbUYbUXbUWbUVbVcbVbbVabUZbVfbVebVdbVbbVkbVjbVibVhbTabTbbVlbTbbTdbTebVobTebTgbThbVqbThbTgbTjbNTbNTbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbUVbVubVtbVsbUVbVxbVbbVwbVvbVBbVAbVzbVbbVIbVGbVEbVDbTabTubTvbTwbTdbTxbTybTzbTgbTAbTBbTCbTgaataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUVbUVbVNbUVbUVbVQbVbbVPbVObVTbVSbVzbVbbVXbVWbVVbVUbTabTMbTNbTObTdbTPbTQbTRbTgbTSbTTbTUbTgaataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVYbWcbWbbWabVZbWgbWfbWebWdbWkbWjbWibVbbWobWnbWmbWlbTabUjbUkbUlbTdbUmbUnbUobTgbUpbUqbUrbTgaataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVYbWsbWrbWqbWpbWvbVbbWtbVAbVAbVAbVzbVbbWwbWwbWwbWwbTabUCbUCbUCbTdbUDbUDbUDbTgbUEbUEbUEbTgaataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVYbWsbWrbWqbWpbWvbVbbWtbVAbVAbVAbVzbVbbWLbWLbWLbWLbTabXhbXhbXhbTdbXibXibXibTgbXjbXjbXjbTgaataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUVbWxbWxbUVbUVbUVbVbbWzbVAbVAbVAbWCbVbaataataatbWDaataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbVbbWGbWFbWFbWFbWHbVbaataataataataataataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbVbbWLbWLbWLbWLbWLbVbaataataataataataataataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbVbbXkbXkbXkbXkbXkbVbaataataataataataataataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaataataataataataataataataataataataataataataataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataataataataataataataataataataataataataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataataataataataataataataataataataataataataataabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 2c8df87899c35a0fde9b3f5ba796c48bc672fc25 Mon Sep 17 00:00:00 2001 From: Leshana Date: Tue, 30 May 2017 12:45:21 -0400 Subject: [PATCH 044/261] 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 a94887af27b83e30df58a2d48208133a0c4db56d Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 14:47:39 -0400 Subject: [PATCH 045/261] Properly hide traits already selected --- code/modules/client/preference_setup/vore/07_traits.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index cd5189a8b9..4d97091c74 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -196,10 +196,10 @@ picklist = positive_traits.Copy() - pref.pos_traits mylist = pref.pos_traits if(NEUTRAL_MODE) - picklist = neutral_traits.Copy() - pref.pos_traits + picklist = neutral_traits.Copy() - pref.neu_traits mylist = pref.neu_traits if(NEGATIVE_MODE) - picklist = negative_traits.Copy() - pref.pos_traits + picklist = negative_traits.Copy() - pref.neg_traits mylist = pref.neg_traits else @@ -224,7 +224,7 @@ var/done = FALSE while(!done) var/message = "\[Remaining: [points_left] points, [traits_left] traits\] Select a trait to read the description and see the cost." - trait_choice = input(message,"Positive Traits") in nicelist + trait_choice = input(message,"Trait List") as null|anything in nicelist if(trait_choice in nicelist) var/datum/trait/path = nicelist[trait_choice] var/choice = alert("\[Cost:[initial(path.cost)]\] [initial(path.desc)]",initial(path.name),"Take Trait","Cancel","Go Back") @@ -241,6 +241,9 @@ var/conflict = FALSE + if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits) + conflict = instance.name + varconflict: for(var/P in pref.pos_traits + pref.neu_traits + pref.neg_traits) var/datum/trait/instance_test = all_traits[P] From a8a668b7b3e39942a09fc28bee840e4875f633ae Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 15:12:04 -0400 Subject: [PATCH 046/261] Make cancel work on trait list --- code/modules/client/preference_setup/vore/07_traits.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 4d97091c74..a16e9057b3 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -225,6 +225,8 @@ while(!done) var/message = "\[Remaining: [points_left] points, [traits_left] traits\] Select a trait to read the description and see the cost." trait_choice = input(message,"Trait List") as null|anything in nicelist + if(!trait_choice) + done = TRUE if(trait_choice in nicelist) var/datum/trait/path = nicelist[trait_choice] var/choice = alert("\[Cost:[initial(path.cost)]\] [initial(path.desc)]",initial(path.name),"Take Trait","Cancel","Go Back") From 7ffc3a396010199613015e4dd0ecd791dc1cf5f9 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 15:13:50 -0400 Subject: [PATCH 047/261] Fix lesser predator crate Had the same path as the more expensive one, so the firstly defined one would be overridden and not show up. --- code/datums/supplypacks/science_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/supplypacks/science_vr.dm b/code/datums/supplypacks/science_vr.dm index 7ffcf0db96..0bc0b3f740 100644 --- a/code/datums/supplypacks/science_vr.dm +++ b/code/datums/supplypacks/science_vr.dm @@ -49,7 +49,7 @@ containername = "Dangerous Predator crate" access = access_xenobiology -/datum/supply_packs/sci/pred +/datum/supply_packs/sci/pred_doom name = "EXTREMELY Dangerous Predator crate" cost = 200 containertype = /obj/structure/largecrate/animal/dangerous From 4913464913b5556c43ea5899e149cf453ac53b91 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 15:50:23 -0400 Subject: [PATCH 048/261] A Jacket To Match The Coat And normal holster instead of leg holster. Because I can never decide what I want. --- code/modules/vore/fluffstuff/custom_boxes_vr.dm | 2 +- config/custom_items.txt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index a1ef6d8dd5..5681714595 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -174,7 +174,7 @@ new /obj/item/clothing/glasses/omnihud/med/fluff/aronai(src) //Gun and holster new /obj/item/weapon/gun/energy/netgun(src) - new /obj/item/clothing/accessory/holster/leg(src) + new /obj/item/clothing/accessory/holster(src) //Aerowing:Sebastian Aji /obj/item/weapon/storage/box/fluff/sebastian_aji diff --git a/config/custom_items.txt b/config/custom_items.txt index 5e142ea5eb..7c5c51311b 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -62,6 +62,14 @@ item_name: centcom medical uniform item_desc: A medical uniform straight from Central Command. } +{ +ckey: arokha +character_name: Aronai Kadigan +item_path: /obj/item/clothing/suit/storage/service/expeditionary/medical/command +item_name: centcom medical jacket +item_desc: A medical jacket straight from Central Command. +} + { ckey: arokha character_name: Aronai Kadigan From 67dce8524bff9fe3a9099a0f63db0ec3843c7201 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 16:25:55 -0400 Subject: [PATCH 049/261] 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 e6865ef51e..45f6459f32 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1037,7 +1037,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 64ff8bed081a0e72658143aef8ec661f50340580 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 30 May 2017 16:25:55 -0400 Subject: [PATCH 050/261] 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 e75cda5c6f482f4407f94de6d7fce813ef1b5581 Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Tue, 30 May 2017 19:53:22 -0300 Subject: [PATCH 051/261] Very small fixes. Mostly two substations with wrong names or areas and wrong id_tags --- maps/tether/tether-01-surface.dmm | 40 +++++++++++++++---------------- maps/tether/tether-03-station.dmm | 4 ++-- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 2390afc101..8209efe78c 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -254,7 +254,7 @@ "aeT" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Mining Subgrid"; name_tag = "Mining Subgrid"},/obj/structure/cable/green{icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/substation/mining) "aeU" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/rust,/turf/simulated/floor,/area/maintenance/substation/mining) "aeV" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/rust,/turf/simulated/floor,/area/maintenance/substation/mining) -"aeW" = (/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,47)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/substation/mining) +"aeW" = (/obj/machinery/door/airlock/engineering{name = "Mining Substation"; req_one_access = list(11,24,47)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/substation/mining) "aeX" = (/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining_eva) "aeY" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/vending/cigarette{name = "Cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) "aeZ" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) @@ -304,7 +304,7 @@ "afR" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Mining Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/mining) "afS" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/camera/network/engineering{dir = 1},/turf/simulated/floor,/area/maintenance/substation/mining) "afT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/substation/mining) -"afU" = (/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,47)},/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/substation/mining) +"afU" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/engineering{name = "Mining Substation"; req_one_access = list(11,24,47)},/turf/simulated/floor,/area/maintenance/substation/mining) "afV" = (/obj/structure/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining_eva) "afW" = (/obj/structure/railing{dir = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining_eva) "afX" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) @@ -719,7 +719,7 @@ "anQ" = (/obj/structure/sign/directions/evac,/turf/simulated/wall,/area/crew_quarters/locker) "anR" = (/turf/simulated/wall,/area/crew_quarters/locker) "anS" = (/obj/effect/floor_decal/techfloor,/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) -"anT" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Bar"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"anT" = (/turf/simulated/wall,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "anU" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two"); req_one_access = list(47,24,11)},/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) "anV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) "anW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/rnd/anomaly_lab/containment_one) @@ -2850,7 +2850,7 @@ "bcP" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcR" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) -"bcS" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Bar Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bcS" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bcT" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcU" = (/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bcV" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) @@ -4790,7 +4790,7 @@ "bOf" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bOg" = (/obj/machinery/atmospherics/pipe/simple/visible/red{dir = 9},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bOh" = (/obj/machinery/atmospherics/pipe/manifold/visible/supply,/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers,/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/atmos) -"bOi" = (/turf/simulated/wall,/area/maintenance/substation/bar) +"bOi" = (/obj/structure/cable{icon_state = "2-8"},/obj/machinery/camera/network/engineering,/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bOj" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bOk" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bOl" = (/obj/machinery/door/airlock/maintenance/common{name = "Hydroponics Maintenance"; req_access = list(35)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/hydroponics) @@ -4830,9 +4830,9 @@ "bOT" = (/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bOU" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/maintenance/engi{name = "Engineering Pump Station"},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bOV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/locker_room) -"bOW" = (/obj/structure/cable{icon_state = "2-8"},/obj/machinery/camera/network/engineering,/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) -"bOX" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) -"bOY" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/decal/cleanable/blood/splatter,/obj/structure/cable{icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bOW" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/airlock/maintenance/engi{name = "Bar Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) +"bOX" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/decal/cleanable/blood/splatter,/obj/structure/cable{icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) +"bOY" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bOZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bPa" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lime/border{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/guestpass{dir = 4; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled,/area/hydroponics) "bPb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics) @@ -4864,10 +4864,10 @@ "bPB" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/obj/structure/railing{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bPC" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/zpipe/down/supply{dir = 8},/obj/structure/cable/cyan{d1 = 32; d2 = 2; icon_state = "32-2"},/obj/machinery/camera/network/engineering{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/open,/area/maintenance/engineering/pumpstation) "bPD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) -"bPE" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall,/area/maintenance/substation/bar) -"bPF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/substation/bar) -"bPG" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/substation/bar) -"bPH" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bPE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) +"bPF" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) +"bPG" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) +"bPH" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Surface Civilian"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bPI" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor,/area/maintenance/lower/south) "bPJ" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lime/border{dir = 8},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/hydroponics) "bPK" = (/obj/machinery/biogenerator,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lime/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lime/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics) @@ -4897,7 +4897,7 @@ "bQi" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 10},/obj/structure/railing{dir = 1},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bQj" = (/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bQk" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bQl" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Surface Civilian Subgrid"; name_tag = "Surface Civilian Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bQl" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Surface Civilian Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bQm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/locker_room) "bQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/junk,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/lower/rnd) "bQo" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/lower/atrium) @@ -4944,7 +4944,7 @@ "bRd" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/hallway/lower/third_south) "bRe" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bRf" = (/obj/machinery/light/small,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) -"bRg" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{icon_state = "4-8"},/obj/machinery/door/airlock/maintenance/engi{name = "Bar Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bRg" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance/engi{name = "Bar Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bRh" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{scrub_id = "atrium"},/turf/simulated/floor/tiled/techmaint,/area/hallway/lower/third_south) "bRi" = (/obj/random/toy,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bRj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) @@ -5305,7 +5305,7 @@ "bYa" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYb" = (/obj/machinery/door/airlock/maintenance/engi{name = "Engineering Pump Station"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bYc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) -"bYd" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance/engi{name = "Bar Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/bar) +"bYd" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Surface Civilian Subgrid"; name_tag = "Surface Civilian Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bYe" = (/obj/structure/railing{dir = 8},/obj/effect/floor_decal/techfloor{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/asmaint2) "bYf" = (/obj/machinery/door/airlock/maintenance/rnd{name = "Research Maintenance Access"},/obj/machinery/door/firedoor/glass,/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,/turf/simulated/floor/tiled,/area/rnd/lockers) "bYg" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance/rnd{name = "Science Maintenance"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/hallway) @@ -5715,11 +5715,11 @@ boYboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbbcbLYbLZbLZbLZbLZbMabLZbMbbMcbMdbMebLzbMfbMgbMhbMibMhbMjbKSbLGbJVbMkbMlbMlbMlbMlbMlbMlbMlbLbbMmbKBbMnbMobMpbKBbDGbLfbKHbMqbNdbMsbMtbLObLQbKJbLnbIZbKLbFQbMubHebMvbMwbMwbMwbMxbZQbIlbHebHebHebMybFQbpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbMzbMAbMBbMCbMCbMDbMEaYibMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbKSbMQbJVbMRbMlbMSbMTbMUbMSbMSbMlbMVbMWbKBbMXbMYbMZbKBbNabNbbKHbNcbNdbMsbMtbLObNebNfbNgbIZbKLbNhbNibHebJobHebHebHebIlbIQbIlbHebHebHebNjbFQbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNkbMAbNlbNmbNmbNnbNoaYibNpbNqbMAbNraUYbNsbNtbNtbNubNvbNwbNxbMQbNybNzbMlbNAbNBbNBbNBbNCbMlbLKbNEbKBbNFbNGbNHbKBbNIbNJbKHbNKbNdbMsbMtbNLbNMbNNbNObNPbNQbFQbNRbHebJobHebHebHebHebZnbHebHebHebHebNTbFQbJGbFQbpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNUbMAbZSbNmbNmbNnaYUbNVbNWbNXbNYbbgaUYbNZbNZbNZbKSbOabNZbKSbMQbJVbObbMlbOcbOdbOebOfbOgbOUbLIbNEbOibOibOibOibOibOjbOkbOlbOmbOnbOobOpbOqbOrbKJbOsbIZbKLbJGbOtbOtbJobHebHebHebIlbIQbIlbHebHebHebHebOubLobJLbpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabOvaUYbOwbMAbZSbOxbOybOzbZobOBbOCbNqbODbOEaUYbOFbOGbOHbOIbOJbOKbOLbOMbJVbONbMlbOObOPbOQbORbOSbMlbOTbRkbRgbOWbOXbOYbOibKBbOZbKHbPabNdbMsbMtbPbbPcbPdbPebIZbKLbJGbPfbPgbPhbLVbLVbLVbLWbZRbIlbHebHebHebHebIlbKmbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPibMAbPjaYibPkbPlbPmbPlbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPxbJdbZpbPzbMlbOObPAbOQbPBbPCbMlbLIbPDbPEbPFbPGbPHbOibXZbOZbKHbPJbNdbMsbMtbLObPKbNfbPLbIZbKLbJGbPgbPgbPMbMwbMwbMwbMxbIPbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDbOibcSanTbQlbYdbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbQrbQsaYiaYibNqaYibQtbQubQubQvbQwbQxbQubQubQybQybQybQybQybQybQzbQAbQBbMlbQCbQDbQEbQDbQFbMlbYlbPDbOibOibOibOibOibQHbYmbKHbQJbLNbLObLObLPbLQbKJbLnbIZbKLbJGbQKbQKbJobHebHebHebHebHebHebHebQLbQMbQNbQObLobJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNUbMAbZSbNmbNmbNnaYUbNVbNWbNXbNYbbgaUYbNZbNZbNZbKSbOabNZbKSbMQbJVbObbMlbOcbOdbOebOfbOgbOUbLIbNEanTanTanTanTanTbOjbOkbOlbOmbOnbOobOpbOqbOrbKJbOsbIZbKLbJGbOtbOtbJobHebHebHebIlbIQbIlbHebHebHebHebOubLobJLbpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabOvaUYbOwbMAbZSbOxbOybOzbZobOBbOCbNqbODbOEaUYbOFbOGbOHbOIbOJbOKbOLbOMbJVbONbMlbOObOPbOQbORbOSbMlbOTbRkbOWbOibcSbOXanTbKBbOZbKHbPabNdbMsbMtbPbbPcbPdbPebIZbKLbJGbPfbPgbPhbLVbLVbLVbLWbZRbIlbHebHebHebHebIlbKmbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPibMAbPjaYibPkbPlbPmbPlbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPxbJdbZpbPzbMlbOObPAbOQbPBbPCbMlbLIbPDbPFbPEbOYbPGanTbXZbOZbKHbPJbNdbMsbMtbLObPKbNfbPLbIZbKLbJGbPgbPgbPMbMwbMwbMwbMxbIPbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDanTbQlbPHbYdbRgbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbQrbQsaYiaYibNqaYibQtbQubQubQvbQwbQxbQubQubQybQybQybQybQybQybQzbQAbQBbMlbQCbQDbQEbQDbQFbMlbYlbPDanTanTanTanTanTbQHbYmbKHbQJbLNbLObLObLPbLQbKJbLnbIZbKLbJGbQKbQKbJobHebHebHebHebHebHebHebQLbQMbQNbQObLobJLbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYaUYbQPbQsaYibQQbQRaYibQSbQubQTbQUbQVbQWbQXbQubQYbQZbRabRbbRcbQybRdbQcbQdbMlbRebRebRfbRebRebMlbYpbPDbKBbRhbKBbRibKBbRjbYqbKHbRlbRmbRnbRobRpbRqbKHbKKbIZbRrbFQbRsbHobRtbHebHebHebHebHebHebHebFQbFQbFQbFQbFQbFQbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbRubRvbRwbRxbRybRzbRAaYibRBbRCbRDbREbRFbRGbRHbQubRIbRJbRKbRLbRMbQybRNbQcbQdbRObMlbMlbMlbMlbMlbRPbKBbRQbKBbRRbKBbKBbKBbRSbKBbRTbKHbKJbKJbKJbKJbKHbKHbLnbRUbRVbFQbRWbHebZqbRYbRZbRZbRZbRZbRZbSabFQbSbbScbSdbFQbpabpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYaUYbSebSfbSfbcCbSgbShbSibRCbSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubSvbSwbSxbSybSzbSAbSBbSCbSDbSybSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbSObSPbSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbHebSXbSYbSZbTabTabTabTbbTcbFQbTdbHebTebFQbpabpaboZboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index fefc14a77c..de7e7a1a20 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -4539,8 +4539,8 @@ "bJo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage) "bJp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "bJq" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"bJr" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Bar"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/substation/cargo) -"bJs" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Bar Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/cargo) +"bJr" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Cargo"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/maintenance/substation/cargo) +"bJs" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Cargo Substation Bypass"},/turf/simulated/floor,/area/maintenance/substation/cargo) "bJt" = (/obj/structure/closet/wardrobe/black,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/newscaster{layer = 3.3; pixel_x = -27; pixel_y = 0},/obj/effect/floor_decal/corner_steel_grid{dir = 6},/turf/simulated/floor/tiled,/area/teleporter/departing) "bJu" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/teleporter/departing) "bJv" = (/obj/machinery/cryopod/robot/door/gateway,/turf/simulated/floor/tiled/techfloor,/area/teleporter/departing) From 90dff0ae632ad98b21bade60ae9871eec52d4b11 Mon Sep 17 00:00:00 2001 From: Leshana Date: Tue, 30 May 2017 21:00:37 -0400 Subject: [PATCH 052/261] Ports /tg's StonedMC Subsystem from Baystation12 * Partial port of @PsiOmegaDelta's https://github.com/Baystation12/Baystation12/pull/16820 * Only ports the StonedMC changes, not the garbage collector (forthcoming in future) --- code/__defines/MC.dm | 53 ++ code/__defines/math.dm | 10 + code/__defines/misc.dm | 2 + code/__defines/tick.dm | 7 + code/_helpers/lists.dm | 63 ++ code/_helpers/sorts/TimSort.dm | 17 + code/_helpers/sorts/__main.dm | 656 ++++++++++++++++++ code/_helpers/sorts/comparators.dm | 20 + code/_helpers/time.dm | 22 +- code/_macros.dm | 11 + .../ProcessScheduler/core/process.dm | 1 - code/controllers/Processes/ticker.dm | 3 + code/controllers/configuration.dm | 10 +- code/controllers/controller.dm | 19 + code/controllers/failsafe.dm | 102 +++ code/controllers/master.dm | 519 ++++++++++++++ code/controllers/master_controller.dm | 6 +- code/controllers/subsystem.dm | 192 +++++ code/controllers/subsystems.dm | 46 -- code/controllers/verbs.dm | 54 +- polaris.dme | 11 +- 21 files changed, 1763 insertions(+), 61 deletions(-) create mode 100644 code/__defines/MC.dm create mode 100644 code/__defines/math.dm create mode 100644 code/__defines/tick.dm create mode 100644 code/_helpers/sorts/TimSort.dm create mode 100644 code/_helpers/sorts/__main.dm create mode 100644 code/_helpers/sorts/comparators.dm create mode 100644 code/controllers/controller.dm create mode 100644 code/controllers/failsafe.dm create mode 100644 code/controllers/master.dm create mode 100644 code/controllers/subsystem.dm delete mode 100644 code/controllers/subsystems.dm diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm new file mode 100644 index 0000000000..90724a2f98 --- /dev/null +++ b/code/__defines/MC.dm @@ -0,0 +1,53 @@ +#define MC_TICK_CHECK ( ( world.tick_usage > CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) +// Used to smooth out costs to try and avoid oscillation. +#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) +#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) +#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current)) +#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} + +#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = 1;Processor.processing += Datum} +#define STOP_PROCESSING(Processor, Datum) Datum.isprocessing = 0;Processor.processing -= Datum + +//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) + +//subsystem should fire during pre-game lobby. +#define SS_FIRE_IN_LOBBY 1 + +//subsystem does not initialize. +#define SS_NO_INIT 2 + +//subsystem does not fire. +// (like can_fire = 0, but keeps it from getting added to the processing subsystems list) +// (Requires a MC restart to change) +#define SS_NO_FIRE 4 + +//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) +// SS_BACKGROUND has its own priority bracket +#define SS_BACKGROUND 8 + +//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) +#define SS_NO_TICK_CHECK 16 + +//Treat wait as a tick count, not DS, run every wait ticks. +// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) +// (implies SS_FIRE_IN_LOBBY because of how it works) +// (overrides SS_BACKGROUND) +// This is designed for basically anything that works as a mini-mc (like SStimer) +#define SS_TICKER 32 + +//keep the subsystem's timing on point by firing early if it fired late last fire because of lag +// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. +#define SS_KEEP_TIMING 64 + +//Calculate its next fire after its fired. +// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) +// This flag overrides SS_KEEP_TIMING +#define SS_POST_FIRE_TIMING 128 + +//SUBSYSTEM STATES +#define SS_IDLE 0 //aint doing shit. +#define SS_QUEUED 1 //queued to run +#define SS_RUNNING 2 //actively running +#define SS_PAUSED 3 //paused by mc_tick_check +#define SS_SLEEPING 4 //fire() slept. +#define SS_PAUSING 5 //in the middle of pausing diff --git a/code/__defines/math.dm b/code/__defines/math.dm new file mode 100644 index 0000000000..0729a4526d --- /dev/null +++ b/code/__defines/math.dm @@ -0,0 +1,10 @@ +//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks +//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio) +//collapsed to percent_of_tick_used * tick_lag +#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag) +#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(world.tick_usage-starting_tickusage)) + +//time of day but automatically adjusts to the server going into the next day within the same round. +//for when you need a reliable time number that doesn't depend on byond time. +#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) +#define MIDNIGHT_ROLLOVER_CHECK ( rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : midnight_rollovers ) diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index f85ac5e7d4..12deebbfc1 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -196,3 +196,5 @@ #define TSC_MORPH "Morpheus" #define TSC_XION "Xion" // Not really needed but consistancy I guess. #define TSC_GIL "Gilthari" + +#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day diff --git a/code/__defines/tick.dm b/code/__defines/tick.dm new file mode 100644 index 0000000000..3fa6e21bf3 --- /dev/null +++ b/code/__defines/tick.dm @@ -0,0 +1,7 @@ +#define TICK_LIMIT_RUNNING 80 +#define TICK_LIMIT_TO_RUN 78 +#define TICK_LIMIT_MC 70 +#define TICK_LIMIT_MC_INIT_DEFAULT 98 + +#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ) +#define CHECK_TICK if TICK_CHECK stoplag() diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index 30df4693db..e647cd1df7 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -599,3 +599,66 @@ proc/dd_sortedTextList(list/incoming) for(var/path in subtypesof(prototype)) L += new path() return L + +//creates every subtype of prototype (excluding prototype) and adds it to list L as a type/instance pair. +//if no list/L is provided, one is created. +/proc/init_subtypes_assoc(prototype, list/L) + if(!istype(L)) L = list() + for(var/path in subtypesof(prototype)) + L[path] = new path() + return L + +//Move a single element from position fromIndex within a list, to position toIndex +//All elements in the range [1,toIndex) before the move will be before the pivot afterwards +//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards +//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages. +//fromIndex and toIndex must be in the range [1,L.len+1] +//This will preserve associations ~Carnie +/proc/moveElement(list/L, fromIndex, toIndex) + if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move + return + if(fromIndex > toIndex) + ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one + + L.Insert(toIndex, null) + L.Swap(fromIndex, toIndex) + L.Cut(fromIndex, fromIndex+1) + +//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) +//Same as moveElement but for ranges of elements +//This will preserve associations ~Carnie +/proc/moveRange(list/L, fromIndex, toIndex, len=1) + var/distance = abs(toIndex - fromIndex) + if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements + if(fromIndex <= toIndex) + return //no need to move + fromIndex += len //we want to shift left instead of right + + for(var/i=0, i toIndex) + fromIndex += len + + for(var/i=0, i= 2) + fromIndex = fromIndex % L.len + toIndex = toIndex % (L.len+1) + if(fromIndex <= 0) + fromIndex += L.len + if(toIndex <= 0) + toIndex += L.len + 1 + + sortInstance.L = L + sortInstance.cmp = cmp + sortInstance.associative = associative + + sortInstance.timSort(fromIndex, toIndex) + + return L diff --git a/code/_helpers/sorts/__main.dm b/code/_helpers/sorts/__main.dm new file mode 100644 index 0000000000..622d88f147 --- /dev/null +++ b/code/_helpers/sorts/__main.dm @@ -0,0 +1,656 @@ + //These are macros used to reduce on proc calls +#define fetchElement(L, i) (associative) ? L[L[i]] : L[i] + + //Minimum sized sequence that will be merged. Anything smaller than this will use binary-insertion sort. + //Should be a power of 2 +#define MIN_MERGE 32 + + //When we get into galloping mode, we stay there until both runs win less often than MIN_GALLOP consecutive times. +#define MIN_GALLOP 7 + + //This is a global instance to allow much of this code to be reused. The interfaces are kept separately +var/datum/sortInstance/sortInstance = new() +/datum/sortInstance + //The array being sorted. + var/list/L + + //The comparator proc-reference + var/cmp = /proc/cmp_numeric_asc + + //whether we are sorting list keys (0: L[i]) or associated values (1: L[L[i]]) + var/associative = 0 + + //This controls when we get *into* galloping mode. It is initialized to MIN_GALLOP. + //The mergeLo and mergeHi methods nudge it higher for random data, and lower for highly structured data. + var/minGallop = MIN_GALLOP + + //Stores information regarding runs yet to be merged. + //Run i starts at runBase[i] and extends for runLen[i] elements. + //runBase[i] + runLen[i] == runBase[i+1] + //var/stackSize + var/list/runBases = list() + var/list/runLens = list() + + +/datum/sortInstance/proc/timSort(start, end) + runBases.Cut() + runLens.Cut() + + var/remaining = end - start + + //If array is small, do a 'mini-TimSort' with no merges + if(remaining < MIN_MERGE) + var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start+initRunLen) + return + + //March over the array finding natural runs + //Extend any short natural runs to runs of length minRun + var/minRun = minRunLength(remaining) + + do + //identify next run + var/runLen = countRunAndMakeAscending(start, end) + + //if run is short, extend to min(minRun, remaining) + if(runLen < minRun) + var/force = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+force, start+runLen) + runLen = force + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //maybe merge + mergeCollapse() + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + + //Merge all remaining runs to complete sort + //ASSERT(start == end) + mergeForceCollapse(); + //ASSERT(runBases.len == 1) + + //reset minGallop, for successive calls + minGallop = MIN_GALLOP + + return L + +/* +Sorts the specified portion of the specified array using a binary +insertion sort. This is the best method for sorting small numbers +of elements. It requires O(n log n) compares, but O(n^2) data +movement (worst case). + +If the initial part of the specified range is already sorted, +this method can take advantage of it: the method assumes that the +elements in range [lo,start) are already sorted + +lo the index of the first element in the range to be sorted +hi the index after the last element in the range to be sorted +start the index of the first element in the range that is not already known to be sorted +*/ +/datum/sortInstance/proc/binarySort(lo, hi, start) + //ASSERT(lo <= start && start <= hi) + if(start <= lo) + start = lo + 1 + + for(,start < hi, ++start) + var/pivot = fetchElement(L,start) + + //set left and right to the index where pivot belongs + var/left = lo + var/right = start + //ASSERT(left <= right) + + //[lo, left) elements <= pivot < [right, start) elements + //in other words, find where the pivot element should go using bisection search + while(left < right) + var/mid = (left + right) >> 1 //round((left+right)/2) + if(call(cmp)(fetchElement(L,mid), pivot) > 0) + right = mid + else + left = mid+1 + + //ASSERT(left == right) + moveElement(L, start, left) //move pivot element to correct location in the sorted range + +/* +Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front + +A run is the longest ascending sequence with: + a[lo] <= a[lo + 1] <= a[lo + 2] <= ... +or the longest descending sequence with: + a[lo] > a[lo + 1] > a[lo + 2] > ... + +For its intended use in a stable mergesort, the strictness of the +definition of "descending" is needed so that the call can safely +reverse a descending sequence without violating stability. +*/ +/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi) + //ASSERT(lo < hi) + + var/runHi = lo + 1 + if(runHi >= hi) + return 1 + + var/last = fetchElement(L,lo) + var/current = fetchElement(L,runHi++) + + if(call(cmp)(current, last) < 0) + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) >= 0) + break + ++runHi + reverseRange(L, lo, runHi) + else + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) < 0) + break + ++runHi + + return runHi - lo + +//Returns the minimum acceptable run length for an array of the specified length. +//Natural runs shorter than this will be extended with binarySort +/datum/sortInstance/proc/minRunLength(n) + //ASSERT(n >= 0) + var/r = 0 //becomes 1 if any bits are shifted off + while(n >= MIN_MERGE) + r |= (n & 1) + n >>= 1 + return n + r + +//Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: +// runLen[i-3] > runLen[i-2] + runLen[i-1] +// runLen[i-2] > runLen[i-1] +//This method is called each time a new run is pushed onto the stack. +//So the invariants are guaranteed to hold for i= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt(n) + else + break //Invariant is established + + +//Merges all runs on the stack until only one remains. +//Called only once, to finalise the sort +/datum/sortInstance/proc/mergeForceCollapse() + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + + +//Merges the two consecutive runs at stack indices i and i+1 +//Run i must be the penultimate or antepenultimate run on the stack +//In other words, i must be equal to stackSize-2 or stackSize-3 +/datum/sortInstance/proc/mergeAt(i) + //ASSERT(runBases.len >= 2) + //ASSERT(i >= 1) + //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) + + var/base1 = runBases[i] + var/base2 = runBases[i+1] + var/len1 = runLens[i] + var/len2 = runLens[i+1] + + //ASSERT(len1 > 0 && len2 > 0) + //ASSERT(base1 + len1 == base2) + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + + + //Find where the first element of run2 goes in run1. + //Prior elements in run1 can be ignored (because they're already in place) + var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) + //ASSERT(k >= 0) + base1 += k + len1 -= k + if(len1 == 0) + return + + //Find where the last element of run1 goes in run2. + //Subsequent elements in run2 can be ignored (because they're already in place) + len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) + //ASSERT(len2 >= 0) + if(len2 == 0) + return + + //Merge remaining runs, using tmp array with min(len1, len2) elements + if(len1 <= len2) + mergeLo(base1, len1, base2, len2) + else + mergeHi(base1, len1, base2, len2) + + +/* + Locates the position to insert key within the specified sorted range + If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements + + key the element to be inserted into the sorted range + base the index of the first element of the sorted range + len the length of the sorted range, must be greater than 0 + hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint + + Returns the index at which to insert element 'key' +*/ +/datum/sortInstance/proc/gallopLeft(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/lastOffset = 0 + var/offset = 1 + if(call(cmp)(key, fetchElement(L,base+hint)) > 0) + var/maxOffset = len - hint + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + else + var/maxOffset = hint + 1 + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) + lastOffset = offset + offset = (offset << 1) + 1 + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than + //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) > 0) + lastOffset = m + 1 + else + offset = m + + //ASSERT(lastOffset == offset) + return offset + +/** + * Like gallopLeft, except that if the range contains an element equal to + * key, gallopRight returns the index after the rightmost equal element. + * + * @param key the key whose insertion point to search for + * @param a the array in which to search + * @param base the index of the first element in the range + * @param len the length of the range; must be > 0 + * @param hint the index at which to begin the search, 0 <= hint < n. + * The closer hint is to the result, the faster this method will run. + * @param c the comparator used to order the range, and to search + * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] + */ +/datum/sortInstance/proc/gallopRight(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/offset = 1 + var/lastOffset = 0 + if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] + var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards + lastOffset = offset + offset = (offset << 1) + 1 //1 3 7 15 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + else //key > L[base+hint] + var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) + lastOffset = offset + offset = (offset << 1) + 1 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] + offset = m + else //key > L[base+m] + lastOffset = m + 1 + + //ASSERT(lastOffset == offset) + + return offset + + +//Merges two adjacent runs in-place in a stable fashion. +//For performance this method should only be called when len1 <= len2! +/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + var/cursor2 = base2 + + //degenerate cases + if(len2 == 1) + moveElement(L, cursor2, cursor1) + return + + if(len1 == 1) + moveElement(L, cursor1, cursor2+len2) + return + + + //Move first element of second run + moveElement(L, cursor2++, cursor1++) + --len2 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thin until one run starts winning consistently + + do + //ASSERT(len1 > 1 && len2 > 0) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor2++, cursor1++) + --len2 + + ++count2 + count1 = 0 + + if(len2 == 0) + break outer + else + ++cursor1 + + ++count1 + count2 = 0 + + if(--len1 == 1) + break outer + + while((count1 | count2) < minGallop) + + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 1 && len2 > 0) + + count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) + if(count1) + cursor1 += count1 + len1 -= count1 + + if(len1 <= 1) + break outer + + moveElement(L, cursor2, cursor1) + ++cursor2 + ++cursor1 + if(--len2 == 0) + break outer + + count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) + if(count2) + moveRange(L, cursor2, cursor1, count2) + + cursor2 += count2 + cursor1 += count2 + len2 -= count2 + + if(len2 == 0) + break outer + + ++cursor1 + if(--len1 == 1) + break outer + + --minGallop + + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2; // Penalize for leaving gallop mode + + + if(len1 == 1) + //ASSERT(len2 > 0) + moveElement(L, cursor1, cursor2+len2) + + //else + //ASSERT(len2 == 0) + //ASSERT(len1 > 1) + + +/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + len1 - 1 //start at end of sublists + var/cursor2 = base2 + len2 - 1 + + //degenerate cases + if(len2 == 1) + moveElement(L, base2, base1) + return + + if(len1 == 1) + moveElement(L, base1, cursor2+1) + return + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thing until one run starts winning consistently + do + //ASSERT(len1 > 0 && len2 > 1) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + ++count1 + count2 = 0 + + if(len1 == 0) + break outer + else + --cursor2 + --len2 + + ++count2 + count1 = 0 + + if(len2 == 1) + break outer + while((count1 | count2) < minGallop) + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 0 && len2 > 1) + + count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? + if(count1) + cursor1 -= count1 + + moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition + + cursor2 -= count1 + len1 -= count1 + + if(len1 == 0) + break outer + + --cursor2 + + if(--len2 == 1) + break outer + + count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) + if(count2) + cursor2 -= count2 + len2 -= count2 + + if(len2 <= 1) + break outer + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + if(len1 == 0) + break outer + + --minGallop + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2 // Penalize for leaving gallop mode + + if(len2 == 1) + //ASSERT(len1 > 0) + + cursor1 -= len1 + moveRange(L, cursor1+1, cursor2+1, len1) + + //else + //ASSERT(len1 == 0) + //ASSERT(len2 > 0) + + +/datum/sortInstance/proc/mergeSort(start, end) + var/remaining = end - start + + //If array is small, do an insertion sort + if(remaining < MIN_MERGE) + //var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start/*+initRunLen*/) + return + + var/minRun = minRunLength(remaining) + + do + var/runLen = (remaining <= minRun) ? remaining : minRun + + binarySort(start, start+runLen, start) + + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) + + //Advance to find next run + start += runLen + remaining -= runLen + + while(remaining > 0) + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt2(n) + else + break //Invariant is established + + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) + + return L + +/datum/sortInstance/proc/mergeAt2(i) + var/cursor1 = runBases[i] + var/cursor2 = runBases[i+1] + + var/end1 = cursor1+runLens[i] + var/end2 = cursor2+runLens[i+1] + + var/val1 = fetchElement(L,cursor1) + var/val2 = fetchElement(L,cursor2) + + while(1) + if(call(cmp)(val1,val2) < 0) + if(++cursor1 >= end1) + break + val1 = fetchElement(L,cursor1) + else + moveElement(L,cursor2,cursor1) + + ++cursor2 + if(++cursor2 >= end2) + break + ++end1 + ++cursor1 + //if(++cursor1 >= end1) + // break + + val2 = fetchElement(L,cursor2) + + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) + +#undef MIN_GALLOP +#undef MIN_MERGE + +#undef fetchElement diff --git a/code/_helpers/sorts/comparators.dm b/code/_helpers/sorts/comparators.dm new file mode 100644 index 0000000000..8c1f954a00 --- /dev/null +++ b/code/_helpers/sorts/comparators.dm @@ -0,0 +1,20 @@ +// +// Comparators for use with /datum/sortInstance (or wherever you want) +// They should return negative, zero, or positive numbers for a < b, a == b, and a > b respectively. +// + +// Sorts numeric ascending +/proc/cmp_numeric_asc(a,b) + return a - b + +// Sorts subsystems alphabetically +/proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b) + return sorttext(b.name, a.name) + +// Sorts subsystems by init_order +/proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) + return b.init_order - a.init_order + +// Sorts subsystems by priority +/proc/cmp_subsystem_priority(datum/controller/subsystem/a, datum/controller/subsystem/b) + return a.priority - b.priority diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 991d64e20b..b3989a32a4 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -100,4 +100,24 @@ var/round_start_time = 0 /hook/startup/proc/set_roundstart_hour() roundstart_hour = pick(2,7,12,17) - return 1 \ No newline at end of file + return 1 + +/var/midnight_rollovers = 0 +/var/rollovercheck_last_timeofday = 0 +/proc/update_midnight_rollover() + if (world.timeofday < rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS! + return midnight_rollovers++ + return midnight_rollovers + +//Increases delay as the server gets more overloaded, +//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful +#define DELTA_CALC max(((max(world.tick_usage, world.cpu) / 100) * max(Master.sleep_delta,1)), 1) + +/proc/stoplag() + . = 0 + var/i = 1 + do + . += round(i*DELTA_CALC) + sleep(i*world.tick_lag*DELTA_CALC) + i *= 2 + while (world.tick_usage > min(TICK_LIMIT_TO_RUN, CURRENT_TICKLIMIT)) diff --git a/code/_macros.dm b/code/_macros.dm index 463a7da26d..befbc99a54 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -49,5 +49,16 @@ #define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") #define to_chat(target, message) target << message +#define to_world(message) world << message +#define to_world_log(message) world.log << message +// TODO - Baystation has this log to crazy places. For now lets just world.log, but maybe look into it later. +#define log_world(message) world.log << message + #define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) + +#define qdel_null_list(x) if(x) { for(var/y in x) { qdel(y) } ; x = null } + +#define qdel_null(x) if(x) { qdel(x) ; x = null } + +#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index 323c5f7663..edcb8d703c 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -35,7 +35,6 @@ * Config vars */ // Process name - var/name // Process schedule interval // This controls how often the process would run under ideal conditions. diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm index b7c45ba91a..6fa6d43237 100644 --- a/code/controllers/Processes/ticker.dm +++ b/code/controllers/Processes/ticker.dm @@ -33,3 +33,6 @@ var/global/datum/controller/process/ticker/tickerProcess /datum/controller/process/ticker/proc/getLastTickerTimeDuration() return lastTickerTimeDuration + +/world/proc/has_round_started() + return (ticker && ticker.current_state >= GAME_STATE_PLAYING) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 5021453462..64ae30116a 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -46,7 +46,8 @@ var/list/gamemode_cache = list() var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke. var/allow_Metadata = 0 // Metadata is supported. var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. - var/Ticklag = 0.9 + var/fps = 20 + var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling var/Tickcomp = 0 var/socket_talk = 0 // use socket_talk to communicate with other processes var/list/resource_urls = null @@ -564,7 +565,12 @@ var/list/gamemode_cache = list() irc_bot_export = 1 if("ticklag") - Ticklag = text2num(value) + var/ticklag = text2num(value) + if(ticklag > 0) + fps = 10 / ticklag + + if("tick_limit_mc_init") + tick_limit_mc_init = text2num(value) if("allow_antag_hud") config.antag_hud_allowed = 1 diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm new file mode 100644 index 0000000000..c9d5f1e565 --- /dev/null +++ b/code/controllers/controller.dm @@ -0,0 +1,19 @@ +/datum/controller + var/name + // The object used for the clickable stat() button. + var/obj/effect/statclick/statclick + +/datum/controller/proc/Initialize() + +//cleanup actions +/datum/controller/proc/Shutdown() + +//when we enter dmm_suite.load_map +/datum/controller/proc/StartLoadingMap() + +//when we exit dmm_suite.load_map +/datum/controller/proc/StopLoadingMap() + +/datum/controller/proc/Recover() + +/datum/controller/proc/stat_entry() diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm new file mode 100644 index 0000000000..98c6a5d89d --- /dev/null +++ b/code/controllers/failsafe.dm @@ -0,0 +1,102 @@ + /** + * Failsafe + * + * Pretty much pokes the MC to make sure it's still alive. + **/ + +var/datum/controller/failsafe/Failsafe + +/datum/controller/failsafe // This thing pretty much just keeps poking the master controller + name = "Failsafe" + + // The length of time to check on the MC (in deciseconds). + // Set to 0 to disable. + var/processing_interval = 20 + // The alert level. For every failed poke, we drop a DEFCON level. Once we hit DEFCON 1, restart the MC. + var/defcon = 5 + //the world.time of the last check, so the mc can restart US if we hang. + // (Real friends look out for *eachother*) + var/lasttick = 0 + + // Track the MC iteration to make sure its still on track. + var/master_iteration = 0 + var/running = TRUE + +/datum/controller/failsafe/New() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + if(Failsafe != src) + if(istype(Failsafe)) + qdel(Failsafe) + Failsafe = src + Initialize() + +/datum/controller/failsafe/Initialize() + set waitfor = 0 + Failsafe.Loop() + if(!deleted(src)) + qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us + +/datum/controller/failsafe/Destroy() + running = FALSE + ..() + // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + +/datum/controller/failsafe/proc/Loop() + while(running) + lasttick = world.time + if(!Master) + // Replace the missing Master! This should never, ever happen. + new /datum/controller/master() + // Only poke it if overrides are not in effect. + if(processing_interval > 0) + if(Master.processing && Master.iteration) + // Check if processing is done yet. + if(Master.iteration == master_iteration) + switch(defcon) + if(4,5) + --defcon + if(3) + to_chat(admins, "Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.") + --defcon + if(2) + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.") + --defcon + if(1) + + to_chat(admins, "Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...") + --defcon + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + to_chat(admins, "MC restarted successfully") + else if(rtn < 0) + log_game("FailSafe: Could not restart MC, runtime encountered. Entering defcon 0") + to_chat(admins, "ERROR: DEFCON [defcon_pretty()]. Could not restart MC, runtime encountered. I will silently keep retrying.") + //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again + //no need to handle that specially when defcon 0 can handle it + if(0) //DEFCON 0! (mc failed to restart) + var/rtn = Recreate_MC() + if(rtn > 0) + defcon = 4 + master_iteration = 0 + to_chat(admins, "MC restarted successfully") + else + defcon = min(defcon + 1,5) + master_iteration = Master.iteration + if (defcon <= 1) + sleep(processing_interval*2) + else + sleep(processing_interval) + else + defcon = 5 + sleep(initial(processing_interval)) + +/datum/controller/failsafe/proc/defcon_pretty() + return defcon + +/datum/controller/failsafe/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + stat("Failsafe Controller:", statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])")) diff --git a/code/controllers/master.dm b/code/controllers/master.dm new file mode 100644 index 0000000000..4dcf58d45e --- /dev/null +++ b/code/controllers/master.dm @@ -0,0 +1,519 @@ + /** + * StonedMC + * + * Designed to properly split up a given tick among subsystems + * Note: if you read parts of this code and think "why is it doing it that way" + * Odds are, there is a reason + * + **/ +var/datum/controller/master/Master = new() +var/MC_restart_clear = 0 +var/MC_restart_timeout = 0 +var/MC_restart_count = 0 + + +//current tick limit, assigned by the queue controller before running a subsystem. +//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits +var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + +/datum/controller/master + name = "Master" + + // Are we processing (higher values increase the processing delay by n ticks) + var/processing = 1 + // How many times have we ran + var/iteration = 0 + + // world.time of last fire, for tracking lag outside of the mc + var/last_run + + // List of subsystems to process(). + var/list/subsystems + + // Vars for keeping track of tick drift. + var/init_timeofday + var/init_time + var/tickdrift = 0 + + var/sleep_delta + + var/make_runtime = 0 + + var/initializations_finished_with_no_players_logged_in //I wonder what this could be? + // Has round started? (So we know what subsystems to run) + var/round_started = 0 + + // The type of the last subsystem to be process()'d. + var/last_type_processed + + var/datum/controller/subsystem/queue_head //Start of queue linked list + var/datum/controller/subsystem/queue_tail //End of queue linked list (used for appending to the list) + var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick + var/queue_priority_count_bg = 0 //Same, but for background subsystems + var/map_loading = FALSE //Are we loading in a new map? + +/datum/controller/master/New() + // Highlander-style: there can only be one! Kill off the old and replace it with the new. + subsystems = list() + if (Master != src) + if (istype(Master)) + Recover() + qdel(Master) + else + init_subtypes(/datum/controller/subsystem, subsystems) + Master = src + +/datum/controller/master/Destroy() + ..() + // Tell qdel() to Del() this object. + // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + +/datum/controller/master/Shutdown() + processing = FALSE + for(var/datum/controller/subsystem/ss in subsystems) + ss.Shutdown() + +// Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart, +// -1 if we encountered a runtime trying to recreate it +/proc/Recreate_MC() + . = -1 //so if we runtime, things know we failed + if (world.time < MC_restart_timeout) + return 0 + if (world.time < MC_restart_clear) + MC_restart_count *= 0.5 + + var/delay = 50 * ++MC_restart_count + MC_restart_timeout = world.time + delay + MC_restart_clear = world.time + (delay * 2) + Master.processing = 0 //stop ticking this one + try + new/datum/controller/master() + catch + return -1 + return 1 + + +/datum/controller/master/Recover() + var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" + for (var/varname in Master.vars) + switch (varname) + if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk. + continue + else + var/varval = Master.vars[varname] + if (istype(varval, /datum)) // Check if it has a type var. + var/datum/D = varval + msg += "\t [varname] = [D]([D.type])\n" + else + msg += "\t [varname] = [varval]\n" + log_world(msg) + if (istype(Master.subsystems)) + subsystems = Master.subsystems + StartProcessing(10) + else + to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") + Initialize(20, TRUE) + + +// Please don't stuff random bullshit here, +// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize() +/datum/controller/master/Initialize(delay, init_sss) + set waitfor = 0 + + if(delay) + sleep(delay) + + if(init_sss) + init_subtypes(/datum/controller/subsystem, subsystems) + + to_chat(world, "Initializing subsystems...") + + // Sort subsystems by init_order, so they initialize in the correct order. + sortTim(subsystems, /proc/cmp_subsystem_init) + + var/start_timeofday = REALTIMEOFDAY + // Initialize subsystems. + CURRENT_TICKLIMIT = config.tick_limit_mc_init + for (var/datum/controller/subsystem/SS in subsystems) + if (SS.flags & SS_NO_INIT) + continue + SS.Initialize(REALTIMEOFDAY) + CHECK_TICK + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + + var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" + to_chat(world, "[msg]") + log_world(msg) + + // Sort subsystems by display setting for easy access. + sortTim(subsystems, /proc/cmp_subsystem_display) + // Set world options. + world.sleep_offline = 1 + world.fps = config.fps + var/initialized_tod = REALTIMEOFDAY + sleep(1) + initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10 + // Loop. + Master.StartProcessing(0) + +// Notify the MC that the round has started. +/datum/controller/master/proc/RoundStart() + round_started = 1 + var/timer = world.time + for (var/datum/controller/subsystem/SS in subsystems) + if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER) + continue //already firing + // Stagger subsystems. + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + +// Starts the mc, and sticks around to restart it if the loop ever ends. +/datum/controller/master/proc/StartProcessing(delay) + set waitfor = 0 + if(delay) + sleep(delay) + var/rtn = Loop() + if (rtn > 0 || processing < 0) + return //this was suppose to happen. + //loop ended, restart the mc + log_game("MC crashed or runtimed, restarting") + message_admins("MC crashed or runtimed, restarting") + var/rtn2 = Recreate_MC() + if (rtn2 <= 0) + log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now") + Failsafe.defcon = 2 + +// Main loop. +/datum/controller/master/proc/Loop() + . = -1 + //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because + // local vars rock + + // Schedule the first run of the Subsystems. + round_started = world.has_round_started() + //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) + var/list/tickersubsystems = list() + var/list/normalsubsystems = list() + var/list/lobbysubsystems = list() + var/timer = world.time + for (var/thing in subsystems) + var/datum/controller/subsystem/SS = thing + if (SS.flags & SS_NO_FIRE) + continue + SS.queued_time = 0 + SS.queue_next = null + SS.queue_prev = null + SS.state = SS_IDLE + if (SS.flags & SS_TICKER) + tickersubsystems += SS + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + continue + if (SS.flags & SS_FIRE_IN_LOBBY) + lobbysubsystems += SS + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + else if (round_started) + timer += world.tick_lag * rand(1, 5) + SS.next_fire = timer + normalsubsystems += SS + + queue_head = null + queue_tail = null + //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue + //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) + sortTim(tickersubsystems, /proc/cmp_subsystem_priority) + sortTim(normalsubsystems, /proc/cmp_subsystem_priority) + sortTim(lobbysubsystems, /proc/cmp_subsystem_priority) + + normalsubsystems += tickersubsystems + lobbysubsystems += tickersubsystems + + init_timeofday = REALTIMEOFDAY + init_time = world.time + + iteration = 1 + var/error_level = 0 + var/sleep_delta = 0 + var/list/subsystems_to_check + //the actual loop. + while (1) + tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) + if (processing <= 0) + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + + //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later + // because sleeps are processed in the order received, so longer sleeps are more likely to run first + if (world.tick_usage > TICK_LIMIT_MC) + sleep_delta += 2 + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) + sleep(world.tick_lag * (processing + sleep_delta)) + continue + + sleep_delta = MC_AVERAGE_FAST(sleep_delta, 0) + if (last_run + (world.tick_lag * processing) > world.time) + sleep_delta += 1 + if (world.tick_usage > (TICK_LIMIT_MC*0.5)) + sleep_delta += 1 + + if (make_runtime) + var/datum/controller/subsystem/SS + SS.can_fire = 0 + if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) + new/datum/controller/failsafe() // (re)Start the failsafe. + if (!queue_head || !(iteration % 3)) + if (round_started) + subsystems_to_check = normalsubsystems + else + subsystems_to_check = lobbysubsystems + else + subsystems_to_check = tickersubsystems + if (CheckQueue(subsystems_to_check) <= 0) + if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + log_world("MC: SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + + if (queue_head) + if (RunQueue() <= 0) + if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + log_world("MC: SoftReset() failed, crashing") + return + if (!error_level) + iteration++ + error_level++ + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + sleep(10) + continue + error_level-- + if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync + queue_priority_count = 0 + queue_priority_count_bg = 0 + + iteration++ + last_run = world.time + src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) + CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. + sleep(world.tick_lag * (processing + sleep_delta)) + + + + +// This is what decides if something should run. +/datum/controller/master/proc/CheckQueue(list/subsystemstocheck) + . = 0 //so the mc knows if we runtimed + + //we create our variables outside of the loops to save on overhead + var/datum/controller/subsystem/SS + var/SS_flags + + for (var/thing in subsystemstocheck) + if (!thing) + subsystemstocheck -= thing + SS = thing + if (SS.state != SS_IDLE) + continue + if (SS.can_fire <= 0) + continue + if (SS.next_fire > world.time) + continue + SS_flags = SS.flags + if (SS_flags & SS_NO_FIRE) + subsystemstocheck -= SS + continue + if (!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time) + continue + SS.enqueue() + . = 1 + + +// Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage +/datum/controller/master/proc/RunQueue() + . = 0 + var/datum/controller/subsystem/queue_node + var/queue_node_flags + var/queue_node_priority + var/queue_node_paused + + var/current_tick_budget + var/tick_precentage + var/tick_remaining + var/ran = TRUE //this is right + var/ran_non_ticker = FALSE + var/bg_calc //have we swtiched current_tick_budget to background mode yet? + var/tick_usage + + //keep running while we have stuff to run and we haven't gone over a tick + // this is so subsystems paused eariler can use tick time that later subsystems never used + while (ran && queue_head && world.tick_usage < TICK_LIMIT_MC) + ran = FALSE + bg_calc = FALSE + current_tick_budget = queue_priority_count + queue_node = queue_head + while (queue_node) + if (ran && world.tick_usage > TICK_LIMIT_RUNNING) + break + + queue_node_flags = queue_node.flags + queue_node_priority = queue_node.queued_priority + + //super special case, subsystems where we can't make them pause mid way through + //if we can't run them this tick (without going over a tick) + //we bump up their priority and attempt to run them next tick + //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run + // in those cases, so we just let them run) + if (queue_node_flags & SS_NO_TICK_CHECK) + if (queue_node.tick_usage > TICK_LIMIT_RUNNING - world.tick_usage && ran_non_ticker) + queue_node.queued_priority += queue_priority_count * 0.10 + queue_priority_count -= queue_node_priority + queue_priority_count += queue_node.queued_priority + current_tick_budget -= queue_node_priority + queue_node = queue_node.queue_next + continue + + if ((queue_node_flags & SS_BACKGROUND) && !bg_calc) + current_tick_budget = queue_priority_count_bg + bg_calc = TRUE + + tick_remaining = TICK_LIMIT_RUNNING - world.tick_usage + + if (current_tick_budget > 0 && queue_node_priority > 0) + tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority) + else + tick_precentage = tick_remaining + + CURRENT_TICKLIMIT = world.tick_usage + tick_precentage + + if (!(queue_node_flags & SS_TICKER)) + ran_non_ticker = TRUE + ran = TRUE + tick_usage = world.tick_usage + queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING) + last_type_processed = queue_node + + queue_node.state = SS_RUNNING + + var/state = queue_node.ignite(queue_node_paused) + if (state == SS_RUNNING) + state = SS_IDLE + current_tick_budget -= queue_node_priority + tick_usage = world.tick_usage - tick_usage + + if (tick_usage < 0) + tick_usage = 0 + + queue_node.state = state + + if (state == SS_PAUSED) + queue_node.paused_ticks++ + queue_node.paused_tick_usage += tick_usage + queue_node = queue_node.queue_next + continue + + queue_node.ticks = MC_AVERAGE(queue_node.ticks, queue_node.paused_ticks) + tick_usage += queue_node.paused_tick_usage + + queue_node.tick_usage = MC_AVERAGE_FAST(queue_node.tick_usage, tick_usage) + + queue_node.cost = MC_AVERAGE_FAST(queue_node.cost, TICK_DELTA_TO_MS(tick_usage)) + queue_node.paused_ticks = 0 + queue_node.paused_tick_usage = 0 + + if (queue_node_flags & SS_BACKGROUND) //update our running total + queue_priority_count_bg -= queue_node_priority + else + queue_priority_count -= queue_node_priority + + queue_node.last_fire = world.time + queue_node.times_fired++ + + if (queue_node_flags & SS_TICKER) + queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) + else if (queue_node_flags & SS_POST_FIRE_TIMING) + queue_node.next_fire = world.time + queue_node.wait + else if (queue_node_flags & SS_KEEP_TIMING) + queue_node.next_fire += queue_node.wait + else + queue_node.next_fire = queue_node.queued_time + queue_node.wait + + queue_node.queued_time = 0 + + //remove from queue + queue_node.dequeue() + + queue_node = queue_node.queue_next + + . = 1 + +//resets the queue, and all subsystems, while filtering out the subsystem lists +// called if any mc's queue procs runtime or exit improperly. +/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS) + . = 0 + log_world("MC: SoftReset called, resetting MC queue state.") + if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS)) + log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!") + return + var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS + + for (var/thing in subsystemstocheck) + var/datum/controller/subsystem/SS = thing + if (!SS || !istype(SS)) + //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents + subsystems -= list(SS) + ticker_SS -= list(SS) + normal_SS -= list(SS) + lobby_SS -= list(SS) + log_world("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") + continue + if (SS.queue_next && !istype(SS.queue_next)) + log_world("MC: SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'") + SS.queue_next = null + if (SS.queue_prev && !istype(SS.queue_prev)) + log_world("MC: SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'") + SS.queue_prev = null + SS.queued_priority = 0 + SS.queued_time = 0 + SS.state = SS_IDLE + if (queue_head && !istype(queue_head)) + log_world("MC: SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'") + queue_head = null + if (queue_tail && !istype(queue_tail)) + log_world("MC: SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'") + queue_tail = null + queue_priority_count = 0 + queue_priority_count_bg = 0 + log_world("MC: SoftReset: Finished.") + . = 1 + + + +/datum/controller/master/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))") + stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])")) + +/datum/controller/master/StartLoadingMap() + //disallow more than one map to load at once, multithreading it will just cause race conditions + while(map_loading) + stoplag() + for(var/S in subsystems) + var/datum/controller/subsystem/SS = S + SS.StartLoadingMap() + map_loading = TRUE + +/datum/controller/master/StopLoadingMap(bounds = null) + map_loading = FALSE + for(var/S in subsystems) + var/datum/controller/subsystem/SS = S + SS.StopLoadingMap() diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 62209a1014..3075682438 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -2,6 +2,10 @@ //It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs) //WIP, needs lots of work still +// +// TODO - This will be completely replaced by master.dm in time. +// + var/global/datum/controller/game_controller/master_controller //Set in world.New() var/global/controller_iteration = 0 @@ -31,8 +35,6 @@ datum/controller/game_controller/New() if(!syndicate_code_response) syndicate_code_response = generate_code_phrase() datum/controller/game_controller/proc/setup() - world.tick_lag = config.Ticklag - spawn(20) createRandomZlevel() diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm new file mode 100644 index 0000000000..ce9558ca4f --- /dev/null +++ b/code/controllers/subsystem.dm @@ -0,0 +1,192 @@ +/datum/controller/subsystem + // Metadata; you should define these. + name = "fire coderbus" //name of the subsystem + var/init_order = 0 //order of initialization. Higher numbers are initialized first, lower numbers later. Can be decimal and negative values. + var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. + var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + + var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) + + //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later + // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list + var/can_fire = TRUE + + // Bookkeeping variables; probably shouldn't mess with these. + var/last_fire = 0 //last world.time we called fire() + var/next_fire = 0 //scheduled world.time for next fire() + var/cost = 0 //average time to execute + var/tick_usage = 0 //average tick usage + var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc. + var/paused_ticks = 0 //ticks this ss is taking to run right now. + var/paused_tick_usage //total tick_usage of all of our runs while pausing this run + var/ticks = 1 //how many ticks does this ss take to run on avg. + var/times_fired = 0 //number of times we have called fire() + var/queued_time = 0 //time we entered the queue, (for timing and priority reasons) + var/queued_priority //we keep a running total to make the math easier, if priority changes mid-fire that would break our running total, so we store it here + //linked list stuff for the queue + var/datum/controller/subsystem/queue_next + var/datum/controller/subsystem/queue_prev + +// Used to initialize the subsystem BEFORE the map has loaded +/datum/controller/subsystem/New() + +//This is used so the mc knows when the subsystem sleeps. do not override. +/datum/controller/subsystem/proc/ignite(resumed = 0) + set waitfor = 0 + . = SS_SLEEPING + fire(resumed) + . = state + if (state == SS_SLEEPING) + state = SS_IDLE + if (state == SS_PAUSING) + var/QT = queued_time + enqueue() + state = SS_PAUSED + queued_time = QT + +//previously, this would have been named 'process()' but that name is used everywhere for different things! +//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. +//Sleeping in here prevents future fires until returned. +/datum/controller/subsystem/proc/fire(resumed = 0) + flags |= SS_NO_FIRE + throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.") + +/datum/controller/subsystem/Destroy() + dequeue() + can_fire = 0 + flags |= SS_NO_FIRE + Master.subsystems -= src + + +//Queue it to run. +// (we loop thru a linked list until we get to the end or find the right point) +// (this lets us sort our run order correctly without having to re-sort the entire already sorted list) +/datum/controller/subsystem/proc/enqueue() + var/SS_priority = priority + var/SS_flags = flags + var/datum/controller/subsystem/queue_node + var/queue_node_priority + var/queue_node_flags + + for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next) + queue_node_priority = queue_node.queued_priority + queue_node_flags = queue_node.flags + + if (queue_node_flags & SS_TICKER) + if (!(SS_flags & SS_TICKER)) + continue + if (queue_node_priority < SS_priority) + break + + else if (queue_node_flags & SS_BACKGROUND) + if (!(SS_flags & SS_BACKGROUND)) + break + if (queue_node_priority < SS_priority) + break + + else + if (SS_flags & SS_BACKGROUND) + continue + if (SS_flags & SS_TICKER) + break + if (queue_node_priority < SS_priority) + break + + queued_time = world.time + queued_priority = SS_priority + state = SS_QUEUED + if (SS_flags & SS_BACKGROUND) //update our running total + Master.queue_priority_count_bg += SS_priority + else + Master.queue_priority_count += SS_priority + + queue_next = queue_node + if (!queue_node)//we stopped at the end, add to tail + queue_prev = Master.queue_tail + if (Master.queue_tail) + Master.queue_tail.queue_next = src + else //empty queue, we also need to set the head + Master.queue_head = src + Master.queue_tail = src + + else if (queue_node == Master.queue_head)//insert at start of list + Master.queue_head.queue_prev = src + Master.queue_head = src + queue_prev = null + else + queue_node.queue_prev.queue_next = src + queue_prev = queue_node.queue_prev + queue_node.queue_prev = src + + +/datum/controller/subsystem/proc/dequeue() + if (queue_next) + queue_next.queue_prev = queue_prev + if (queue_prev) + queue_prev.queue_next = queue_next + if (src == Master.queue_tail) + Master.queue_tail = queue_prev + if (src == Master.queue_head) + Master.queue_head = queue_next + queued_time = 0 + if (state == SS_QUEUED) + state = SS_IDLE + + +/datum/controller/subsystem/proc/pause() + . = 1 + switch(state) + if(SS_RUNNING) + state = SS_PAUSED + if(SS_SLEEPING) + state = SS_PAUSING + + +//used to initialize the subsystem AFTER the map has loaded +/datum/controller/subsystem/Initialize(start_timeofday) + var/time = (REALTIMEOFDAY - start_timeofday) / 10 + var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!" + to_chat(world, "[msg]") + log_world(msg) + return time + +//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. +/datum/controller/subsystem/stat_entry(msg) + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) + + + + if(can_fire && !(SS_NO_FIRE in flags)) + msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]" + else + msg = "OFFLINE\t[msg]" + + var/title = name + if (can_fire) + title = "\[[state_letter()]][title]" + + stat(title, statclick.update(msg)) + +/datum/controller/subsystem/proc/state_letter() + switch (state) + if (SS_RUNNING) + . = "R" + if (SS_QUEUED) + . = "Q" + if (SS_PAUSED, SS_PAUSING) + . = "P" + if (SS_SLEEPING) + . = "S" + if (SS_IDLE) + . = " " + +//could be used to postpone a costly subsystem for (default one) var/cycles, cycles +//for instance, during cpu intensive operations like explosions +/datum/controller/subsystem/proc/postpone(cycles = 1) + if(next_fire - world.time < wait) + next_fire += (wait*cycles) + +//usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) +//should attempt to salvage what it can from the old instance of subsystem +/datum/controller/subsystem/Recover() diff --git a/code/controllers/subsystems.dm b/code/controllers/subsystems.dm deleted file mode 100644 index 11025d8d53..0000000000 --- a/code/controllers/subsystems.dm +++ /dev/null @@ -1,46 +0,0 @@ -#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} - -/datum/subsystem - //things you will want to define - var/name //name of the subsystem - var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values. - var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - - //things you will probably want to leave alone - var/can_fire = 0 //prevent fire() calls - var/last_fire = 0 //last world.time we called fire() - var/next_fire = 0 //scheduled world.time for next fire() - var/cpu = 0 //cpu-usage stats (somewhat vague) - var/cost = 0 //average time to execute - var/times_fired = 0 //number of times we have called fire() - -//used to initialize the subsystem BEFORE the map has loaded -/datum/subsystem/New() - -//previously, this would have been named 'process()' but that name is used everywhere for different things! -//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds. -//fire(), and the procs it calls, SHOULD NOT HAVE ANY SLEEP OPERATIONS in them! -//YE BE WARNED! -/datum/subsystem/proc/fire() - can_fire = 0 - -//used to initialize the subsystem AFTER the map has loaded -/datum/subsystem/proc/Initialize(start_timeofday) - var/time = (world.timeofday - start_timeofday) / 10 - var/msg = "Initialized [name] SubSystem within [time] seconds" - world << "[msg]" - world.log << msg - -//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc. -/datum/subsystem/proc/stat_entry() - stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)") - -//could be used to postpone a costly subsystem for one cycle -//for instance, during cpu intensive operations like explosions -/datum/subsystem/proc/postpone() - if(next_fire - world.time < wait) - next_fire += wait - -//usually called via datum/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash) -//should attempt to salvage what it can from the old instance of subsystem -/datum/subsystem/proc/Recover() diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index f0d3cc3341..fcf239c88f 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -1,19 +1,57 @@ //TODO: rewrite and standardise all controller datums to the datum/controller type //TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done -/client/proc/restart_controller(controller in list("Supply")) + +// Clickable stat() button. +/obj/effect/statclick + name = "Initializing..." + var/target + +/obj/effect/statclick/New(loc, text, target) //Don't port this to Initialize it's too critical + ..() + name = text + src.target = target + +/obj/effect/statclick/proc/update(text) + name = text + return src + +/obj/effect/statclick/debug + var/class + +/obj/effect/statclick/debug/Click() + if(!usr.client.holder || !target) + return + if(!class) + if(istype(target, /datum/controller/subsystem)) + class = "subsystem" + else if(istype(target, /datum/controller)) + class = "controller" + else if(istype(target, /datum)) + class = "datum" + else + class = "unknown" + + usr.client.debug_variables(target) + message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") + + +// Debug verbs. +/client/proc/restart_controller(controller in list("Master", "Failsafe")) set category = "Debug" set name = "Restart Controller" set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" - if(!holder) return - usr = null - src = null + if(!holder) + return switch(controller) - if("Supply") - supply_controller.process() - feedback_add_details("admin_verb","RSupply") + if("Master") + Recreate_MC() + feedback_add_details("admin_verb","RMC") + if("Failsafe") + new /datum/controller/failsafe() + feedback_add_details("admin_verb","RFailsafe") + message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") - return /client/proc/debug_antagonist_template(antag_type in all_antag_types) set category = "Debug" diff --git a/polaris.dme b/polaris.dme index 9f075b1d76..a60f9ef6e8 100644 --- a/polaris.dme +++ b/polaris.dme @@ -30,7 +30,9 @@ #include "code\__defines\lighting.dm" #include "code\__defines\machinery.dm" #include "code\__defines\map.dm" +#include "code\__defines\math.dm" #include "code\__defines\math_physics.dm" +#include "code\__defines\MC.dm" #include "code\__defines\misc.dm" #include "code\__defines\mobs.dm" #include "code\__defines\planets.dm" @@ -38,6 +40,7 @@ #include "code\__defines\research.dm" #include "code\__defines\species_languages.dm" #include "code\__defines\targeting.dm" +#include "code\__defines\tick.dm" #include "code\__defines\turfs.dm" #include "code\__defines\unit_tests.dm" #include "code\__defines\xenoarcheaology.dm" @@ -66,6 +69,9 @@ #include "code\_helpers\type2type.dm" #include "code\_helpers\unsorted.dm" #include "code\_helpers\vector.dm" +#include "code\_helpers\sorts\__main.dm" +#include "code\_helpers\sorts\comparators.dm" +#include "code\_helpers\sorts\TimSort.dm" #include "code\_onclick\_defines.dm" #include "code\_onclick\adjacent.dm" #include "code\_onclick\ai.dm" @@ -128,12 +134,15 @@ #include "code\controllers\autotransfer.dm" #include "code\controllers\communications.dm" #include "code\controllers\configuration.dm" +#include "code\controllers\controller.dm" #include "code\controllers\emergency_shuttle_controller.dm" +#include "code\controllers\failsafe.dm" #include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" +#include "code\controllers\master.dm" #include "code\controllers\master_controller.dm" #include "code\controllers\shuttle_controller.dm" -#include "code\controllers\subsystems.dm" +#include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" #include "code\controllers\voting.dm" #include "code\controllers\observer_listener\atom\observer.dm" From b339dd502cdc6f9fa18f8dda00e8a23e7b69c082 Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Tue, 30 May 2017 23:20:45 -0300 Subject: [PATCH 053/261] Not so smol foxes, I mean fixes, Changes base_turf of tram to be same as the surrounding turfs. Adds defibs to emergency shuttles. Does stuff in colony map with the turrets. --- maps/tether/tether-01-surface.dmm | 4 +- maps/tether/tether-03-station.dmm | 4 +- maps/tether/tether-06-colony.dmm | 262 ++++++++++++++++-------------- 3 files changed, 147 insertions(+), 123 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 8209efe78c..7c602728a0 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -909,8 +909,8 @@ "ary" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "arz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "arA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) -"arB" = (/turf/simulated/floor/maglev,/area/shuttle/escape/station) -"arC" = (/turf/simulated/floor/tiled/techfloor/grid,/area/shuttle/escape/station) +"arB" = (/turf/simulated/floor/maglev,/area/shuttle/escape/station{base_turf = /turf/simulated/floor/tiled/techfloor/grid}) +"arC" = (/turf/simulated/floor/tiled/techfloor/grid,/area/shuttle/escape/station{base_turf = /turf/simulated/floor/tiled/techfloor/grid}) "arD" = (/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/monotile,/area/rnd/anomaly_lab) "arE" = (/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/tiled/monotile,/area/rnd/anomaly_lab) "arF" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/white{dir = 9},/obj/effect/floor_decal/corner/white{dir = 6},/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index de7e7a1a20..10e00cfdb6 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -12,7 +12,7 @@ "aal" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aam" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aan" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) -"aao" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) +"aao" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aap" = (/obj/structure/bed/chair,/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aaq" = (/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) "aar" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) @@ -3353,7 +3353,7 @@ "bmy" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/station) "bmz" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "bmA" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) -"bmB" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) +"bmB" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "bmC" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "bmD" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "bmE" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index 7391e2a3d9..692c9c2e78 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -164,6 +164,7 @@ "dh" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "di" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "dj" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"dk" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) "dl" = (/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "dm" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/sign/nanotrasen,/turf/unsimulated/floor/steel,/area/centcom/control) "dn" = (/obj/structure/sign/department/armory,/turf/unsimulated/wall,/area/centcom/control) @@ -178,6 +179,7 @@ "dw" = (/obj/structure/railing{dir = 1},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "dx" = (/obj/effect/floor_decal/corner_steel_grid{dir = 9},/turf/simulated/floor/outdoors/grass/sif/virgo3b,/area/centcom/evac) "dy" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"dz" = (/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper CentCom Control"; pixel_x = -28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) "dA" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/unsimulated/floor/steel,/area/centcom/control) "dB" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "dC" = (/obj/machinery/computer/secure_data{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) @@ -203,6 +205,7 @@ "dW" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 8},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "dX" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "dY" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"dZ" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper Main Hallway"; pixel_y = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "ea" = (/obj/machinery/computer/security{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) "eb" = (/obj/machinery/computer/crew{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "ec" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) @@ -251,6 +254,7 @@ "eT" = (/obj/effect/floor_decal/rust,/obj/effect/floor_decal/industrial/warning/dust{dir = 4},/obj/structure/railing{dir = 8},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "eU" = (/obj/effect/floor_decal/corner_steel_grid/diagonal,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod2/centcom) "eV" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"eW" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "eX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel,/area/centcom/control) "eY" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -278,6 +282,7 @@ "fv" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 9},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fw" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 1},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fx" = (/obj/machinery/door/blast/regular{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"fy" = (/turf/simulated/shuttle/wall,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "fz" = (/obj/machinery/computer/ordercomp{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) "fA" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fB" = (/obj/effect/floor_decal/corner_steel_grid/diagonal,/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 4},/obj/structure/railing{dir = 8},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) @@ -296,8 +301,9 @@ "fO" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fP" = (/obj/effect/floor_decal/rust,/obj/effect/floor_decal/corner_steel_grid/diagonal,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) "fQ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) +"fR" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/structure/bed/chair/shuttle,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "fS" = (/obj/machinery/computer/robotics{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/control) -"fT" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/obj/machinery/turretid{pixel_x = 28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) +"fT" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "fU" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fV" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/heavysniper,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -358,7 +364,7 @@ "gZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "ha" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/wt550/lethal,/obj/item/weapon/gun/projectile/automatic/wt550/lethal,/obj/item/weapon/gun/projectile/automatic/wt550/lethal,/obj/item/weapon/gun/projectile/automatic/wt550/lethal,/obj/item/weapon/gun/projectile/automatic/wt550/lethal,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "hb" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"hc" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) +"hc" = (/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "hd" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/structure/closet/secure_closet/nanotrasen_commander,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/head/helmet/space/deathsquad{name = "swat helmet"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "he" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "hf" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/structure/table/woodentable,/obj/item/device/radio/off,/obj/item/device/megaphone,/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) @@ -423,7 +429,7 @@ "im" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 8},/obj/machinery/computer/centrifuge,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "in" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "io" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"ip" = (/obj/machinery/turretid{pixel_x = -28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) +"ip" = (/obj/structure/bed/chair/shuttle,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "iq" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/control) "ir" = (/obj/machinery/camera/network/crescent{dir = 8},/obj/machinery/computer/secure_data{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/control) "is" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/rack{dir = 4},/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/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/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -550,6 +556,7 @@ "kJ" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/security) "kK" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) "kL" = (/obj/machinery/door/airlock/external{locked = 1; name = "Emergency Airlock"; req_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/evac) +"kM" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "kN" = (/obj/structure/table/standard,/obj/item/weapon/surgical/hemostat,/obj/item/weapon/surgical/cautery,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kO" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/retractor,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kP" = (/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/obj/item/weapon/surgical/scalpel,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) @@ -774,8 +781,8 @@ "pa" = (/obj/structure/flora/pottedplant{icon_state = "plant-21"},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "pb" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/machinery/shower{pixel_y = 13},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "pc" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor/steel,/area/centcom/security) -"pd" = (/turf/simulated/shuttle/wall,/area/shuttle/escape/centcom) -"pe" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"pd" = (/obj/structure/table/standard,/obj/random/maintenance/clean,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"pe" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "pf" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/simulated/floor/tiled,/area/centcom/terminal) "pg" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/computer/crew{dir = 4},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "ph" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 3},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) @@ -792,10 +799,10 @@ "ps" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor/steel,/area/centcom/security) "pt" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor/steel,/area/centcom/security) "pu" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/turf/unsimulated/floor/steel,/area/centcom/security) -"pv" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/escape/centcom) -"pw" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/structure/bed/chair/shuttle,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"px" = (/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"py" = (/obj/structure/bed/chair/shuttle,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"pv" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/sign/warning/lethal_turrets{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"pw" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper CentCom Security"; pixel_y = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/security) +"px" = (/obj/structure/bed/chair/shuttle{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"py" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch_station"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "pz" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/terminal) "pA" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/item/weapon/backup_implanter{pixel_y = -8},/obj/item/weapon/backup_implanter{pixel_y = 8},/obj/item/weapon/backup_implanter,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "pB" = (/obj/structure/table/glass,/obj/machinery/computer/med_data{icon_keyboard = "laptop_key"; icon_screen = "medlaptop"; icon_state = "laptop"; light_color = "#00b000"},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) @@ -813,22 +820,22 @@ "pN" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/security) "pO" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/vending/security,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/turf/unsimulated/floor/steel,/area/centcom/security) "pP" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/techfloor_grid,/area/centcom/terminal) -"pQ" = (/obj/structure/table/standard,/obj/random/maintenance/clean,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"pR" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"pS" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"pQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch_offsite"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"pR" = (/obj/structure/bed/chair/shuttle,/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"pS" = (/obj/structure/bed/chair/shuttle,/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "pT" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "pU" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel,/area/centcom/security) "pV" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor/steel,/area/centcom/security) "pW" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4; icon_state = "borderfloorcorner2"; pixel_y = 0; tag = "icon-borderfloorcorner2 (EAST)"},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) "pX" = (/obj/machinery/computer/card,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/turf/unsimulated/floor/steel,/area/centcom/security) "pY" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor/steel,/area/centcom/security) -"pZ" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/sign/warning/lethal_turrets{pixel_y = 32},/turf/unsimulated/floor/steel,/area/centcom/security) -"qa" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/security) +"pZ" = (/obj/structure/table/standard,/obj/random/junk,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"qa" = (/obj/structure/table/standard,/obj/random/maintenance/clean,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "qb" = (/obj/machinery/computer/card{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4; icon_state = "borderfloorcorner2"; pixel_y = 0; tag = "icon-borderfloorcorner2 (EAST)"},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) "qc" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) "qd" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor/steel,/area/centcom/security) "qe" = (/obj/item/weapon/stool/padded,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) -"qf" = (/obj/structure/bed/chair/shuttle{dir = 1},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"qf" = (/obj/structure/sign/nanotrasen,/turf/simulated/shuttle/wall,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "qg" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/structure/closet/crate/bin,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "qh" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) "qi" = (/obj/machinery/punching_clown,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) @@ -844,8 +851,8 @@ "qs" = (/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor/steel,/area/centcom/security) "qt" = (/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) "qu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/unsimulated/wall,/area/centcom/terminal) -"qv" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch_station"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom) -"qw" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch_offsite"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom) +"qv" = (/obj/structure/table/standard,/obj/item/clothing/head/beret/nanotrasen,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"qw" = (/obj/structure/table/standard,/obj/random/plushie,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "qx" = (/obj/structure/table/glass,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "qy" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "qz" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) @@ -869,8 +876,8 @@ "qR" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor{tag = "icon-leftsecure"; icon_state = "leftsecure"; dir = 2},/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/turf/unsimulated/floor/steel,/area/centcom/security) "qS" = (/obj/effect/floor_decal/industrial/outline,/obj/structure/closet/secure_closet/nanotrasen_security,/turf/unsimulated/floor/steel,/area/centcom/security) "qT" = (/obj/effect/floor_decal/industrial/outline,/obj/structure/closet/secure_closet/nanotrasen_security{desc = "This locker is filled silly stickers and some other serious NanoTrasen ones. It is lazily labeled 'The big cat'."},/turf/unsimulated/floor/steel,/area/centcom/security) -"qU" = (/obj/structure/bed/chair/shuttle,/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"qV" = (/obj/structure/bed/chair/shuttle,/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"qU" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "FrontlockBD"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/main_hall) +"qV" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "qW" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor/steel,/area/centcom/main_hall) "qX" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) "qY" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/sign/department/medbay,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical) @@ -881,8 +888,8 @@ "rd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass,/turf/unsimulated/floor/steel,/area/centcom/command) "re" = (/obj/structure/sign/nanotrasen,/turf/unsimulated/wall,/area/centcom/command) "rf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Locker Room"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) -"rg" = (/obj/structure/table/standard,/obj/random/junk,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"rh" = (/obj/structure/table/standard,/obj/random/maintenance/clean,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"rg" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"rh" = (/turf/unsimulated/wall,/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "ri" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rj" = (/obj/machinery/newscaster{pixel_y = 32},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rk" = (/obj/structure/bed/chair,/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -910,7 +917,7 @@ "rG" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) "rH" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/structure/reagent_dispensers/water_cooler/full,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) "rI" = (/turf/unsimulated/wall/planetary/virgo3b,/area/centcom/living) -"rJ" = (/obj/structure/sign/nanotrasen,/turf/simulated/shuttle/wall,/area/shuttle/escape/centcom) +"rJ" = (/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "rK" = (/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rL" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rM" = (/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -922,16 +929,16 @@ "rS" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) "rT" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rU" = (/obj/machinery/cryopod/robot/door/dorms{base_icon_state = "door_closed"; desc = "A small elevator"; dir = 2; icon = 'icons/obj/doors/Door2x1glass.dmi'; icon_state = "door_closed"; name = "Elevator"; on_enter_occupant_message = "The elevator door closes slowly, You can now head for residential, comercial and several other floors."; on_store_message = "has departed for one of the various colony floors"; on_store_name = "Colonial Oversight"; on_store_visible_message_2 = "to the colonial districts."; time_till_despawn = 5},/turf/unsimulated/floor/steel,/area/centcom/living) -"rV" = (/obj/structure/table/standard,/obj/item/clothing/head/beret/nanotrasen,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"rW" = (/obj/structure/table/standard,/obj/random/plushie,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"rV" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"rW" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/machinery/door/window/brigdoor/northleft{req_access = list(63); req_one_access = list(1)},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/remote/blast_door{id = "FrontlockC"; name = "Colony Entrance Lockdown"; pixel_x = 6; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/obj/machinery/button/remote/blast_door{id = "FrontlockBD"; name = "Colony Entrance Bottom"; pixel_x = -3; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "rX" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rY" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "rZ" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "sa" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) "sb" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) "sc" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/living) -"sd" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"se" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) +"sd" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"se" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/door/window/brigdoor/northright{req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "sf" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "sg" = (/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "sh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass,/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -941,9 +948,9 @@ "sl" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) "sm" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/turf/unsimulated/floor/steel,/area/centcom/bathroom) "sn" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "turrets"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/security) -"so" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"sp" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/machinery/door/window/brigdoor/northleft{req_access = list(63); req_one_access = list(1)},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/remote/blast_door{id = "FrontlockC"; name = "Colony Entrance Lockdown"; pixel_x = 6; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"sq" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/door/window/brigdoor/northright{req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "FrontlockC2"; name = "Security Door"; opacity = 0},/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"so" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"sp" = (/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"sq" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/obj/machinery/button/remote/blast_door{id = "FrontlockC2"; name = "Checkpoint Shielding"; pixel_x = -35; pixel_y = -8; req_access = list(63); req_one_access = list(1)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "sr" = (/obj/structure/bed/chair,/turf/unsimulated/floor/steel,/area/centcom/main_hall) "ss" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "st" = (/obj/structure/flora/pottedplant,/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -974,12 +981,12 @@ "sS" = (/obj/structure/closet{name = "Evidence Closet"},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "sT" = (/obj/structure/closet{name = "Evidence Closet"},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "sU" = (/obj/structure/closet{name = "Evidence Closet"},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"sV" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom) -"sW" = (/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"sX" = (/obj/machinery/computer/card{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"sY" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/obj/machinery/button/remote/blast_door{id = "FrontlockC2"; name = "Checkpoint Shielding"; pixel_x = -35; pixel_y = -8; req_access = list(63); req_one_access = list(1)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"sZ" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"ta" = (/obj/machinery/computer/security{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"sV" = (/obj/machinery/computer/card{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"sW" = (/obj/machinery/computer/security{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"sX" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"sY" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"sZ" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/light,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"ta" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "tb" = (/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/unsimulated/floor/steel,/area/centcom/main_hall) "tc" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/unsimulated/floor/steel,/area/centcom/main_hall) "td" = (/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -997,10 +1004,10 @@ "tp" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/button/remote/blast_door{name = "Turret Doors"; pixel_x = -23; req_access = list(63); req_one_access = list(1); id = "turrets"},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 10},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tq" = (/obj/machinery/door/airlock/glass_security{name = "Confiscated Items"; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tr" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"ts" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"tt" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/light,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"tu" = (/obj/machinery/computer/secure_data{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"tv" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"ts" = (/obj/machinery/computer/secure_data{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"tt" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"tu" = (/obj/random/junk,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) +"tv" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/random/soap,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "tw" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "tx" = (/turf/unsimulated/floor/steel{icon = 'icons/turf/outdoors.dmi'; icon_state = "grass"},/area/centcom/main_hall) "ty" = (/obj/structure/table/bench/wooden,/turf/unsimulated/floor/steel{icon = 'icons/turf/outdoors.dmi'; icon_state = "grass"},/area/centcom/main_hall) @@ -1019,9 +1026,9 @@ "tL" = (/obj/machinery/door/window/brigdoor{req_access = list(63); req_one_access = list(1)},/obj/machinery/button/remote/airlock{id = "front"; name = "Front doors"; pixel_x = 5; pixel_y = 25; req_access = list(63); req_one_access = list(1)},/obj/machinery/button/remote/airlock{id = "innerS"; name = "Inner doors"; pixel_x = -5; pixel_y = 25; req_access = list(63); req_one_access = list(1)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tM" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tN" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 8},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"tO" = (/obj/random/junk,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"tP" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/random/soap,/turf/simulated/shuttle/floor/white{color = "#cccccc"},/area/shuttle/escape/centcom) -"tQ" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"tO" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"tP" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"tQ" = (/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; check_synth = 0; check_weapons = 0; control_area = "\improper CentCom Security Arrivals"; pixel_x = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "tR" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tS" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "tT" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/main_hall) @@ -1064,9 +1071,9 @@ "uE" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/restaurant) "uF" = (/obj/machinery/door/airlock/glass_security{id_tag = "innerS"; name = "Colonial Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "uG" = (/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"uH" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_y = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"uI" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"uJ" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"uH" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"uI" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"uJ" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "uK" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/main_hall) "uL" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/restaurant) "uM" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/carpet{dir = 8},/obj/item/weapon/material/ashtray/glass,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/restaurant) @@ -1080,8 +1087,8 @@ "uU" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "uV" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 4},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "uW" = (/obj/machinery/vending/security,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"uX" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"uY" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 6},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"uX" = (/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_y = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"uY" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "uZ" = (/obj/structure/table/standard,/obj/item/weapon/soap,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bathroom) "va" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bathroom) "vb" = (/obj/machinery/door/airlock{name = "Unit 4"},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bathroom) @@ -1090,9 +1097,9 @@ "ve" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "vf" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2,/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "vg" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/sign/department/interrogation,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"vh" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/table/reinforced,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/gun/energy/taser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"vi" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/structure/closet/secure_closet/nanotrasen_security,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/shield/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"vj" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/structure/closet/secure_closet/nanotrasen_security,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/shield/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"vh" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper CentCom Security"; pixel_y = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"vi" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"vj" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 6},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "vk" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/restaurant) "vl" = (/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/restaurant) "vm" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/restaurant) @@ -1198,7 +1205,7 @@ "xi" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/bar) "xj" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/bar) "xk" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/reagent_containers/glass/rag,/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/bar) -"xl" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "residential"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/main_hall) +"xl" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/structure/closet/secure_closet/nanotrasen_security,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/shield/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) "xm" = (/obj/machinery/newscaster{pixel_x = -27},/turf/unsimulated/floor/steel,/area/centcom/security) "xn" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/unsimulated/floor/steel,/area/centcom/security) "xo" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security) @@ -1207,11 +1214,11 @@ "xr" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xs" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xt" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access = list(28)},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) -"xu" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10,/turf/unsimulated/floor/steel,/area/centcom/security) -"xv" = (/obj/machinery/computer/card,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xw" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xx" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xy" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"xu" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/table/reinforced,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/gun/energy/taser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"xv" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/structure/closet/secure_closet/nanotrasen_security,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/shield/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Security Arrivals"}) +"xw" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "residential"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xx" = (/turf/unsimulated/wall,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xy" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) "xz" = (/obj/machinery/status_display{pixel_x = -31},/turf/unsimulated/floor/steel,/area/centcom/security) "xA" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xB" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -1221,20 +1228,20 @@ "xF" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/machinery/reagentgrinder,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) "xG" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/vending/dinnerware,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) "xH" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) -"xI" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/door/window/brigdoor{dir = 8; icon_state = "leftsecure"; req_access = list(63); req_one_access = list(1); tag = "icon-leftsecure (WEST)"},/obj/machinery/button/remote/blast_door{id = "residential"; name = "Security Doors"; req_access = list(63); req_one_access = list(1); pixel_x = 6; pixel_y = -5},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xJ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xK" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"xI" = (/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xJ" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10,/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xK" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/security{name = "\improper CentCom Residential Security"}) "xL" = (/obj/machinery/computer/arcade/orion_trail,/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/orange/border{dir = 10},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 8},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xM" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/orange/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xN" = (/obj/machinery/camera/network/crescent{dir = 10},/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/orange/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xO" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/orange/border,/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/orange/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xP" = (/obj/machinery/computer/arcade/battle,/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/orange/border{dir = 6},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/corner/orange/bordercorner2{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xQ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/tiled/white,/area/centcom/bar) -"xR" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xS" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloorblack/corner{dir = 8},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xT" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xU" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xV" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"xR" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xS" = (/obj/machinery/computer/card,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xT" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xU" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"xV" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "xW" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor/steel,/area/centcom/living) "xX" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel,/area/centcom/living) "xY" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/turf/unsimulated/floor/steel,/area/centcom/living) @@ -1247,13 +1254,13 @@ "yf" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/oven,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) "yg" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/grill,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) "yh" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/fryer,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) -"yi" = (/obj/machinery/computer/security{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yj" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/item/device/taperecorder,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yk" = (/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yl" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/closet/secure_closet/nanotrasen_security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"ym" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yn" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yo" = (/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/obj/structure/closet/secure_closet/nanotrasen_security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"yi" = (/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper CentCom Residential Security"; pixel_y = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"yj" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"yk" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"yl" = (/obj/machinery/camera/network/crescent{dir = 4},/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"ym" = (/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"yn" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/door/window/brigdoor{dir = 8; icon_state = "leftsecure"; req_access = list(63); req_one_access = list(1); tag = "icon-leftsecure (WEST)"},/obj/machinery/button/remote/blast_door{id = "residential"; name = "Security Doors"; req_access = list(63); req_one_access = list(1); pixel_x = 6; pixel_y = -5},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"yo" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "yp" = (/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/living) "yq" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/living) "yr" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/living) @@ -1264,7 +1271,7 @@ "yw" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 13},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/security) "yx" = (/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "freezer"},/area/centcom/security) "yy" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room"; req_access = list(28)},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/bar) -"yz" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "residential"; name = "Security Door"; opacity = 0},/obj/machinery/door/firedoor,/turf/unsimulated/floor/steel,/area/centcom/main_hall) +"yz" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "yA" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/living) "yB" = (/obj/effect/floor_decal/industrial/outline,/turf/unsimulated/floor/steel,/area/centcom/living) "yC" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/living) @@ -1287,16 +1294,16 @@ "yT" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/unsimulated/floor/steel,/area/centcom/living) "yU" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/living) "yV" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/living) -"yW" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/remote/blast_door{id = "TelelockdownC"; name = "Teleporter Entrance Lockdown"; pixel_x = 6; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Door"; opacity = 0},/obj/machinery/door/window/brigdoor/northleft{req_access = list(63); req_one_access = list(1)},/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"yW" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 8},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "yX" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Door"; opacity = 0},/turf/unsimulated/floor/steel,/area/centcom/command) "yY" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "yZ" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "za" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zb" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zc" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) -"zd" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"ze" = (/obj/machinery/computer/secure_data{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zf" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/unsimulated/floor/steel,/area/centcom/command) +"zd" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"ze" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloorblack/corner{dir = 8},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"zf" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "zg" = (/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0; tag = "icon-borderfloor (NORTH)"},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/computer/card,/turf/unsimulated/floor/steel,/area/centcom/command) "zh" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0; tag = "icon-borderfloor (NORTH)"},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/button/remote/blast_door{id = "TelelockdownC"; name = "Teleporter Full Lockdown"; pixel_x = 6; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel,/area/centcom/command) "zi" = (/obj/machinery/computer/security,/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0; tag = "icon-borderfloor (NORTH)"},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/command) @@ -1306,14 +1313,14 @@ "zm" = (/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0; tag = "icon-borderfloor (NORTH)"},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel,/area/centcom/command) "zn" = (/obj/effect/floor_decal/borderfloor{dir = 1; icon_state = "borderfloor"; pixel_y = 0; tag = "icon-borderfloor (NORTH)"},/obj/effect/floor_decal/corner/blue/border{dir = 1},/obj/structure/closet/crate/bin,/turf/unsimulated/floor/steel,/area/centcom/command) "zo" = (/obj/structure/filingcabinet/filingcabinet,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/turf/unsimulated/floor/steel,/area/centcom/command) -"zp" = (/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 10},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zq" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zp" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"zq" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "zr" = (/obj/effect/floor_decal/borderfloor{dir = 8; icon_state = "borderfloor"; pixel_x = 0; tag = "icon-borderfloor (WEST)"},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10; icon_state = "borderfloorcorner2"; pixel_x = 0; tag = "icon-borderfloorcorner2 (SOUTHWEST)"},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 10},/turf/unsimulated/floor/steel,/area/centcom/command) "zs" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/command) "zt" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor/steel,/area/centcom/command) "zu" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zv" = (/obj/structure/toilet,/turf/unsimulated/floor{icon_state = "freezer"},/area/centcom/bathroom) -"zw" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zw" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/item/device/taperecorder,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "zx" = (/obj/machinery/door/airlock/security{name = "Security"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "zy" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor/steel,/area/centcom/command) "zz" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor/steel,/area/centcom/command) @@ -1339,6 +1346,23 @@ "zT" = (/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "freezer"},/area/centcom/bathroom) "zU" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 29},/turf/unsimulated/floor{icon_state = "freezer"},/area/centcom/bathroom) "zV" = (/turf/unsimulated/wall/planetary/virgo3b,/area/centcom/bathroom) +"zW" = (/obj/machinery/computer/security{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"zX" = (/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"zY" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"zZ" = (/obj/effect/floor_decal/borderfloorblack{dir = 10},/obj/effect/floor_decal/corner/blue/border{dir = 10},/obj/structure/closet/secure_closet/nanotrasen_security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Aa" = (/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/obj/structure/closet/secure_closet/nanotrasen_security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ab" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ac" = (/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "residential"; name = "Security Door"; opacity = 0},/obj/machinery/door/firedoor,/turf/unsimulated/floor/steel,/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ad" = (/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ae" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Af" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/button/remote/blast_door{id = "TelelockdownC"; name = "Teleporter Entrance Lockdown"; pixel_x = 6; pixel_y = -5; req_access = list(63); req_one_access = list(1)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "TelelockdownC"; name = "Security Door"; opacity = 0},/obj/machinery/door/window/brigdoor/northleft{req_access = list(63); req_one_access = list(1)},/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ag" = (/obj/machinery/computer/card{dir = 4},/obj/effect/floor_decal/borderfloorblack{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 27},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ah" = (/obj/machinery/computer/secure_data{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/effect/floor_decal/corner/blue/border{dir = 5},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Ai" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Aj" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/obj/machinery/turretid/stun{check_access = 0; check_anomalies = 0; check_records = 0; control_area = "\improper CentCom Living Quarters"; pixel_y = 32; req_access = list(101); req_one_access = list(101)},/turf/unsimulated/floor/steel,/area/centcom/living) +"Ak" = (/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 10},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Al" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"Am" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1395,19 +1419,19 @@ aaababababababababababdrdSdTdTdTdTdTdTdTdTdUdTdTdTepdxababababababacacacacaZddde aaababababababababababdrdSdTdTdUdUdTdTdTdTdTdTdTdTeJdxabababababeKacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIdhcIdhcIdecPadahahahaebdbdbdeLbdbdbdbdeMeNeObdbdcrbdbdbdePejejejeQeQejejejejejejejejejejejejejejeRejejejejejejejeS aaababababababababababdreTdTdTdTdTdTdTdTdTeUdTdUdUepdxababababababacacacacaZeVdedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIcIcIcIcIdeeVadahahahcrbdbdbdcrcxbdbdbdeXeXeYbdbdcrbdbdbdejeZfafbfcfcfdfefffgfcfhfifjfkfcflfmfnfofcfpfqfrfsftfufueS aaababababababababababdrdSdTdTdTdTdTdTdTdTdTdTdTfvfwdxababababababacacacacaZaZaZfxfxfxfxfxaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNaZfxfxfxfxfxaZaZadahahahcrdlbdbdcrfzdEbdbdbdbdbdbdbdcrbdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS -aaababababababababababdrfBfCfDfEfFfGfHfIfJfKfLfCfMfNfNfNfNfOfPababacacacacacacaZfQfQfQfQfQaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZdjdjdjdjdjaZacadahahahaebdbdbdaefSdEbdfTbdbdbdbdcvcrbdbdbdejfUfVfbfcfWfXfcfcfYfZgafcfcgbgcgdfcfcgegegefcfcgfgfgfgfeS +aaababababababababababdrfBfCfDfEfFfGfHfIfJfKfLfCfMfNfNfNfNfOfPababacacacacacacaZfQfQfQfQfQaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZdjdjdjdjdjaZacadahahahaebdbdbdaefSdEbddkbddzbdbdcvcrbdbdbdejfUfVfbfcfWfXfcfcfYfZgafcfcgbgcgdfcfcgegegefcfcgfgfgfgfeS aaababababababababababdrggghgigjgkglgmgngogpgqgqdWfNfNfNfNfNfNababacacacacacacaZaZaZaZaZaZaZacacacacacacacacacacacacacacacaZaZaZaZaZaZaZacadahahahcrbdbdbdaeaeaeaeaeaeaecreLcraebdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS aaababababababababababdrdSgrgsgtgtgtgtgugtgtgtgtdVgvdxababfNfNababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahahahcrbdbdbdbdbdbdbdcwbdbdbdbdbdbdbdbdbdejgwgxfbgyfcfcfcfcfcgzgAgBgBgBgBgBgCgCgAgzgDfcfcfcgEgEgEeS aaababababababababababdrdSgtgtgFgtgugtgtgtgtgugtgtepdxababfNfNababacacacacacacacacacgGgGgGgGgGgGgGgGgGgGgGgGgGgGgGgGacacacacacacacacacacacadahahahaebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdejejejejejejejfcfcejejejejejejejejejejejejejgHgHePejejejeS -aaababababababababababdrdSgtgugtgtgtgtgtgIgtgtgtgtgJdxababfOfNabeKacacacacacacacacacgGgKgLgMgNgNgOgGgPgQgRgSgTgUgVgGacacacacacacacacacacacadahahahaecvbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcvejgWfcgXejgYgZfcfchahbejhchdhehfhghhhiejhjhjhkhlhmhnhohpeS +aaababababababababababdrdSgtgugtgtgtgtgtgIgtgtgtgtgJdxababfOfNabeKacacacacacacacacacgGgKgLgMgNgNgOgGgPgQgRgSgTgUgVgGacacacacacacacacacacacadahahahaecvbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcvejgWfcgXejgYgZfcfchahbejdZhdhehfhghhhiejhjhjhkhlhmhnhohpeS aaababababababababababdrdSgtgugtgtgtgtgtgtgtgtgtgtepdxabfNfNfNfNabacacacacacacacacacgGhqhrhrhrhrhshthuhrhrhvhwhrhxgGacacacacacacacacacacacadbHahahaecrhyeLhycraecreLcraehzeLhAaeaeeLaeejgWfchBhChDfcfcfcfchEejhFhGhGhGhGhGhHejhIhIhlhlhlhlhJhKeS aaababababababababababdrdSgtgtgtgIgtgtgtgugtgtgIfvfMdxabfNfNhLfNabacacacacacacacacacgGhqhrhrhrhrhrhMhrhrhrhNhOhrhPgGacacacacacacacacacacacadahahahaehQhRbdhShTaebdbdbdaebdbdcweLbdbdhUejhVfcfchWfcfcfcfcfcfchXhGhGhYhZiahGhGibhlhlhlhlhlhlicideS -aaababababababababababdrieififififigififihifififiiijdxabfOfNfNfNabacacacacacacacacacgGhqhrikhrhrilhtimhrhrhNinhriogGacacacacacacacacacacacadahahahaedlbdbdbdbdaedlbdbdaecvbdcvcripiqirejhVfcishCitfcfcfcfciuePivhGiwixiyhGizejiAiAhlhlhlhlhlhleS +aaababababababababababdrieififififigififihifififiiijdxabfOfNfNfNabacacacacacacacacacgGhqhrikhrhrilhtimhrhrhNinhriogGacacacacacacacacacacacadahahahaedlbdbdbdbdaedlbdbdaecvbdcvcrdziqirejhVfcishCitfcfcfcfciuePivhGiwixiyhGizejiAiAhlhlhlhlhlhleS aaababababababababababiBiCiCiCiCiCiCiCiCiCiCiCiCiCiCiDabfNfNfNfNabacacacacacacacacacgGiEiFiGiHiHiIhtiJhwhrhxiKiLiMgGacacacacacacacacacacacadahahahaeiNiOiPiQiRaeiSiTiUaeiViWcraeiXiYaeejhVfciZejjafcfcfcfcjbejjchGjdjejfhGjgejjhjhhlhlhlhljijieS aaabababababababababababababababababababababababababababfNfNfNfOababababacacacacacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGgGgGgGgGgGgGgGgGgGgGadadadjkjkjkaeaeaeaeaeaeaeaeaeaeefcvbdcvefcrcraeejejejejejjlfcfcfcfcjmejjnjojphGjqjojrejjhjhhlhlhlhlhljseS -aaabababababababababababababababababababababababababababfNfNfNfNababababababacacacacacacacacacacacacgGjthrjugGjvjwjxjygGjzjAjBjAjAjCgGahahahahahahjDahahahahahahahahahahahahahahahahahjDahahagejjEfcfcfcfcjFejjGjGjHjIjHjGjGejjJjJjKjKjLjJjJjJeS +aaabababababababababababababababababababababababababababfNfNfNfNababababababacacacacacacacacacacacacgGjthrjugGjvjwjxjygGjzjAjBjAjAjCgGagahahahahahjDahahahahahahahahahahahahahahahahahjDahahagejjEfcfcfcfcjFejjGjGjHjIjHjGjGejjJjJjKjKjLjJjJjJeS aaababababababababababababababababababababababababababjMjMjNjNjMjMjMjMababababacacacacacacacacacacacgGjOhrjPgGjQjRjSjTjUjVjWjXjWjWjYgGahahahahahahjDahahahahahahahahahahahahahahahahahjDahahahejjEfcfcfcfcjZkakbkckdhlkckekekekekdhlhlkckekekfeS -aaababababababababababababababababababababababababababjMkgkhkhkikjkkjMabababababacacacacacacacacacacgGklhrkmgGknkohrkpgGkqkrksktkukvgGahahahahkwahjDahahahahahahahahahahahahahahahahahjDahahahejkxfcfcfcfckykzkAkBkChlkBkDkDkDkDkDkEkFkDkDkDkGeS +aaababababababababababababababababababababababababababjMkgkhkhkikjkkjMabababababacacacacacacacacacacgGklhrkmgGknkohrkpgGkqkrksktkukvgGagahahahkwahjDahahahahahahahahahahahahahahahahahjDahahahejkxfcfcfcfckykzkAkBkChlkBkDkDkDkDkDkEkFkDkDkDkGeS aaababababababababababababababababababababababababababjMkikhkhkikjkkjMabababababacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGhrgGkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHjDjDjDejejejejejejejejejejePhlkIejejejejejkJkKejejejejeS aaababababababababababababababababababababababababababjMjMkLkLjMjMjMjMabababababacacgGkNkOkPkQkRgGkSkTkUhrkVkWkXkYhrkZkHlalblcldlelflglhliljlelklllblmkHlnlololplolqlrlslrlqlolplololtkHahahahejlulvlwlvlxlwlvlyejlzhllAejlBlClDlElFlGlHlIlJlKeS aaababababababababababababababababababababababababababjMkikhkhkikilLjMabababababacacgGlMhrhrhrlNgGlOlPhrhrlQlRlQlQhrlNkHlSlTlUlUlVlUlWlWlWlUlVlUlUlXlYkHlolZmamamamambmbmbmamamamamclokHbHahahejmdmdlwmdmdlwmdmdejkJhlkKejkJhlhlhlhlhlhlhlhlkKeS @@ -1417,47 +1441,47 @@ aaababababababababababababababababababababababababababjMkikhkhkikjkkjMababababab aaababababababababababababababababababababababababababjMlLkhkhkikjkkjMababababababacgGgGgGgGgGgGgGnHnInJnKnLhrhrnMnNnOkHnPnQnRlUlUnSnTlUnSnTlUlUnUnVnWkHltlololololonXnYnZlololololooakHahahahejobocodoeofogmdmdejkJhlhlhlhlnEohnFohnFnFoinGkKeS aaabababababababababababababababojokokokokokokokokokokolomononomomomomababababababacacacacacacacgGgGgGgGhthtoohrgGgGgGkHkHkHkHopoqkHkHorkHkHosoqkHkHkHotototototototototototototototototahahahouejejejejejovjKjKejkJhlkFkDkEhlowowowowowowhlkKeS aaabababababababababababababababomoxoyozoyoyoyoyozoyoAoBoCoCoCoDoEabababababababababacacacacacacgGoFoGoHoGoIhrhroJoGoKkHoLoMoNlUlUoOoPlUoQoRlUlUoSoToLotoUoVoWoXotoYoZpaoZoYotpbpbpbpbotahahahpclGkekelHkekdhlhlkclFhlkKejkJhlhlhlhlhlhlhlhlkKeS -aaabababababababababababababababomoxoypdpepepepepdoyoAoBoCoCoCpfoEabababababababababacacacacacacgGpglPhrlPphhrhrhrhrpikHpjlUlUlUlUpklTnwlXpllUlUlUlUpmotoUpnoWoXotpopopopopootppppppppotahahahpckFkChlkBkDkDkChlkBkChlpqejprkDkDkDkEkFkDpsptpueS -aaabababababababababababababababomoxpdpvpwpxpxpypvpdoAoBoCoCoCpzoEabababababababababacacacacacacgGpAmkpBpCmkhrhrhrhrpDkHpjlUlUlUlUpEpFpFpFpGlUlUlUlUpHotoUpnoWpnpIpopopopopopJpopopopKotahahahouejejpcejejejejpLejejpcejejpMpNpNpNlFlGpNpNpNpOeS -aaabababababababababababababababompPpepQpRpxpxpRpSpeoAoBoCoCoCpzoEabababababababababacacacacacacgGmKhrhrhrhrhrhrhrhrpTkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnpnpIpopopopopopJpopopopKotbHahahjJpUpVhlpWpXjJpYhlpZqahlqbejqcqdqdqdhlhlqdqdqdqeeS -aaabababababababababababababababomoxpeqfqfpxpxqfqfpeoAoBoCoCoCpzoEabababababababababababacacacacgGmKhrhrhrhrhrhrhrhrqgkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnqhotpoqipoqipootqjqjqjqjotahahahjJqknGhlhlqlqmqnhlhlqoqpqqejqrqsqsqsqsqsqsqsqsqteS -aaabababababababababababababababquoxqvpxpxpxpxpxpxqwoAoBoCoCoCoDoEabababababababababababacacacacgGqxqyqyqyqzhrhrnMnpqAkHqBqClUlUlUlUlUlUlUlUlUlUlUqDqEotqFpnpnqGotqHpoqIpoqJotqKqKqKqKotahahahjJqLqMqNqOqPjJqnhlhlqQqRjJejqSqSqSqSqSqSqTqSqSqSeS -aaabababababababababababababababomoxpdqUpypxpxpyqVpdoAoBoCoCqWqXqXqXqXqXqXqXqXqXqXqXqXqXadadadadgGgGgGgGhtqYqZrarbgGgGkHrcrcrcrdoqrcrercrercrdoqrcrcrcotototrfotototototototototototototjDjDjDejjJjJjJjJjJouqnhlhlqnqnqnouejejejejejejejejejejeS -aaabababababababababababababababomoxpepRrgpxpxpRrhpeoAoBoCoCadriahahahahahahahahairjrkrlrmrlrnroahrprqahahahahahahrrahrsahahahahahahahaiahahahahahahahrortahahahahaiahruahahahahahahahjDahahahrvahahaiahahrwrxrxrxrxrxrxryrzrArBrzrCrDrErFrGrHrI -aaabababababababababababababababomoxrJqfqfpxpxqfqfrJoAoBoCoCahrKahahahahahahahahahahahahahahahahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrLahrMrMrMrMahrNrzrzrzrzrOrPrQrRrRrSrI -aaabababababababababababababababomoxrJpypypxpxpypyrJoAoBoCoCrTrKahahahahahahahahahahahahahahahahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrLahrMrMrMrMahrNrzrzrzrzrOrUrQrRrRrSrI -aaabababababababababababababababomoxperVpRpxpxpRrWpeoAoBoCoCadriahahahahahahahahahrMrMrMrMrMrMahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrXrYrYrYrYrYrYrZrzrzrzrzrCrDsasbsbscrI -aaabababababababababababababababomoxpdsdqfpxpxqfsepdoAoBoCoCqWqXqXqXqXqXqXqXqXqXqXqXqXqXejsfsgsgsfejqXqXqXqXshjDqXqXshjDqXqXqXqXsisjsksjsisislslsisislslsijDjDjDotototsmototototslslslsijDjDjDejejejejejejousnsnsnsnsnsnouejejejejejejejejejejeS -aaabababababababababababababababquoxqvpxpxpxpxpxpxqwoAoBoCoCoCoDoEabababababababababababejsospsqsoejsrsrsraiahahssstahahaisrsrsrsisisisisisusvswsxswsyszsisAahahotsBsCsDsDsEsFotsGsHsIslahahahejsJsKsKsKsLejhlpYhlhlpYhlejsMsNsOsPsQejsRsSsTsUeS -aaabababababababababababababababomoxsVqfpxpypypxsWsVoAoBoCoCoCpzoEabababababababababababejsXsYsZtaejahtbtctctctctctctctctctctdahsiszsytetfswswswswswswswsiahahahottgsDsDthototottitjtkslahahahejtltmtmtmtnejejovtotoovejejtpfcfcfcfctqfcfcfctreS -aaabababababababababababababababompPsVtspxpypypxttsVoAoBoCoCoCpzoEabababababababababababejtufcfctvejahtwtxtxtxtytxtxtytxtxtxtzahsiswswtAtAswswswtAtAswswsiahahahottgsDsDsDtBsFottCtDtEslahahahejtFfcfcfcfctGtHtIfcfctJtKtLfcfcfcfctMejtNfcfctreS -aaabababababababababababababababomoxpdpvtOqftPpxpvpdoAoBoCoCoCpzoEabababababababababababejtQtRtSfcejtTtwtxtUtVtVtVtVtVtVtUtxtztWslswtXtYtZuaswtXubucuaswslahahahotudsDsDthotototuetDtEsiahahahejufugfcuhuiujukulfcfculumunuoupfcuqurejusututuueS -aaabababababababababababababababomoxoypdpepepepepdoyoAoBoCoCoCpfoEabababababababababababejejejejuvejtTtwtxuwtxtxtxtxtxtxuwtxtztWslswtXuxuyuaswtXuzuAuaswslahahahotuBsDsDsDuCsFotuDuEtEsiahahahejejejuvejejejejejuFuFejejejululuGululejejejejejeS -aaabababababababababababababababomoxoyozoyoyoyoyozoyoAoBoCoCoCoDoEabababababababababababejuHuIuJfcejuKtwtxuwtxtxtxtxuwtxuwtxtztWslswswuLuLswswswuLuLswswslahahahsmsDsDsDthotototuMuEtEsiahahahjJuNuOfcuPuQuRuRuOfcfcuSuQuTuRuOfcfcfcuUfcuVuWsUeS -aaabababababababababababababababojokokokokokokokokokokolomomomomomababababababababababacejuXfcfcuYejtTtwtxuwtxuwtxtxtxtxuwtxtztWslswswswswswswswswswswswsibHahahotuZvasDsDvbvcotuMuEtEslahahahjJvdtSfcvetRtSfcvffcfcvetRtRtRtRtRtRuivgtNfcfctreS -aaababababababababababababababababababababababababababababababababababababababababababacejvhvivjfcuvahtwtyuwtxtxtxtVtxtxuwtytzahsiswswtAtAswswswswswswswsiahahahotototsmototototvkvlvmslahahahejejovuvovejejuvejvnvnejulululululululejvofcvptreS -aaababababababababababababababababababababababababababababababababababababababababababacejejejejejejahtwtyuwtxtxtxtxtxtxuwtytzahsivqtXvrvsuaswswswswswswvtahahahsiszvuswvvvwvxtfswswswslahahahouvyvzhlvAvBvCfcejfcfculvDvEvFvGvHvIvJejvKvLvMvNeS +aaabababababababababababababababomoxoyfyeWeWeWeWfyoyoAoBoCoCoCpfoEabababababababababacacacacacacgGpglPhrlPphhrhrhrhrpikHpjlUlUlUlUpklTnwlXpllUlUlUlUpmotoUpnoWoXotpopopopopootppppppppotahahahpckFkChlkBkDkDkChlkBkChlpqejprkDkDkDkEkFkDpsptpueS +aaabababababababababababababababomoxfyfTfRhchcipfTfyoAoBoCoCoCpzoEabababababababababacacacacacacgGpAmkpBpCmkhrhrhrhrpDkHpjlUlUlUlUpEpFpFpFpGlUlUlUlUpHotoUpnoWpnpIpopopopopopJpopopopKotahahahouejejpcejejejejpLejejpcejejpMpNpNpNlFlGpNpNpNpOeS +aaabababababababababababababababompPeWpdkMhchckMpeeWoAoBoCoCoCpzoEabababababababababacacacacacacgGmKhrhrhrhrhrhrhrhrpTkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnpnpIpopopopopopJpopopopKotbHahahjJpUpVhlpWpXjJsfhlpvpwhlqbejqcqdqdqdhlhlqdqdqdqeeS +aaabababababababababababababababomoxeWpxpxhchcpxpxeWoAoBoCoCoCpzoEabababababababababababacacacacgGmKhrhrhrhrhrhrhrhrqgkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnqhotpoqipoqipootqjqjqjqjotahahahjJqknGhlhlqlqmqnhlhlqoqpqqejqrqsqsqsqsqsqsqsqsqteS +aaabababababababababababababababquoxpyhchchchchchcpQoAoBoCoCoCoDoEabababababababababababacacacacgGqxqyqyqyqzhrhrnMnpqAkHqBqClUlUlUlUlUlUlUlUlUlUlUqDqEotqFpnpnqGotqHpoqIpoqJotqKqKqKqKotahahahjJqLqMqNqOqPjJqnhlhlqQqRjJejqSqSqSqSqSqSqTqSqSqSeS +aaabababababababababababababababomoxfypRiphchcippSfyoAoBoCoCqWqXqXqXqXqXqXqXqXqXqXqXqXqXadadadadgGgGgGgGhtqYqZrarbgGgGkHrcrcrcrdoqrcrercrercrdoqrcrcrcotototrfotototototototototototototjDjDjDejjJjJjJjJjJouqnhlhlqnqnqnouejejejejejejejejejejeS +aaabababababababababababababababomoxeWkMpZhchckMqaeWoAoBoCoCadriahahahahahahahahairjrkrlrmrlrnroahrprqahahahahahahrrahrsahahahahahahahaiahahahahahahahrortahahahahaiahruahahahahahahahjDahahahrvahahaiahahrwrxrxrxrxrxrxryrzrArBrzrCrDrErFrGrHrI +aaabababababababababababababababomoxqfpxpxhchcpxpxqfoAoBoCoCahrKahahahahahahahahahahahahahahahahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrLahrMrMrMrMahrNrzrzrzrzrOrPrQrRrRrSrI +aaabababababababababababababababomoxqfipiphchcipipqfoAoBoCoCrTrKahahahahahahahahahahahahahahahahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrLahrMrMrMrMahrNrzrzrzrzrOrUrQrRrRrSrI +aaabababababababababababababababomoxeWqvkMhchckMqweWoAoBoCoCadriahahahahahahahahahrMrMrMrMrMrMahahqUahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrXrYrYrYrYrYrYrZrzrzrzrzrCrDsasbsbscrI +aaabababababababababababababababomoxfyqVpxhchcpxrgfyoAoBoCoCqWqXqXqXqXqXqXqXqXqXqXqXqXqXrhrVrJrJrVrhqXqXqXqXshjDqXqXshjDqXqXqXqXsisjsksjsisislslsisislslsijDjDjDotototsmototototslslslsijDjDjDejejejejejejousnsnsnsnsnsnouejejejejejejejejejejeS +aaabababababababababababababababquoxpyhchchchchchcpQoAoBoCoCoCoDoEabababababababababababrhsdrWsesdrhsrsrsraiahahssstahahaisrsrsrsisisisisisusvswsxswsyszsisAahahotsBsCsDsDsEsFotsGsHsIslahahahejsJsKsKsKsLejhlpYhlhlpYhlejsMsNsOsPsQejsRsSsTsUeS +aaabababababababababababababababomoxsopxhcipiphcspsooAoBoCoCoCpzoEabababababababababababrhsVsqsXsWrhahtbtctctctctctctctctctctdahsiszsytetfswswswswswswswsiahahahottgsDsDthototottitjtkslahahahejtltmtmtmtnejejovtotoovejejtpfcfcfcfctqfcfcfctreS +aaabababababababababababababababompPsosYhcipiphcsZsooAoBoCoCoCpzoEabababababababababababrhtstatattrhahtwtxtxtxtytxtxtytxtxtxtzahsiswswtAtAswswswtAtAswswsiahahahottgsDsDsDtBsFottCtDtEslahahahejtFfcfcfcfctGtHtIfcfctJtKtLfcfcfcfctMejtNfcfctreS +aaabababababababababababababababomoxfyfTtupxtvhcfTfyoAoBoCoCoCpzoEabababababababababababrhtPtOuHtQrhtTtwtxtUtVtVtVtVtVtVtUtxtztWslswtXtYtZuaswtXubucuaswslahahahotudsDsDthotototuetDtEsiahahahejufugfcuhuiujukulfcfculumunuoupfcuqurejusututuueS +aaabababababababababababababababomoxoyfyeWeWeWeWfyoyoAoBoCoCoCpfoEabababababababababababrhrhrhrhuIrhtTtwtxuwtxtxtxtxtxtxuwtxtztWslswtXuxuyuaswtXuzuAuaswslahahahotuBsDsDsDuCsFotuDuEtEsiahahahejejejuvejejejejejuFuFejejejululuGululejejejejejeS +aaabababababababababababababababomoxoyozoyoyoyoyozoyoAoBoCoCoCoDoEabababababababababababrhuXuJuYtarhuKtwtxuwtxtxtxtxuwtxuwtxtztWslswswuLuLswswswuLuLswswslahahahsmsDsDsDthotototuMuEtEsiahahahjJuNuOfcuPuQuRuRvhfcfcuSuQuTuRuOfcfcfcuUfcuVuWsUeS +aaabababababababababababababababojokokokokokokokokokokolomomomomomababababababababababacrhvitatavjrhtTtwtxuwtxuwtxtxtxtxuwtxtztWslswswswswswswswswswswswsibHahahotuZvasDsDvbvcotuMuEtEslahahahjJvdtSfcvetRtSfcvffcfcvetRtRtRtRtRtRuivgtNfcfctreS +aaababababababababababababababababababababababababababababababababababababababababababacrhxuxlxvtauIahtwtyuwtxtxtxtVtxtxuwtytzahsiswswtAtAswswswswswswswsiahahahotototsmototototvkvlvmslahahahejejovuvovejejuvejvnvnejulululululululejvofcvptreS +aaababababababababababababababababababababababababababababababababababababababababababacrhrhrhrhrhrhahtwtyuwtxtxtxtxtxtxuwtytzahsivqtXvrvsuaswswswswswswvtahahahsiszvuswvvvwvxtfswswswslahahahouvyvzhlvAvBvCfcejfcfculvDvEvFvGvHvIvJejvKvLvMvNeS aaababababababababababababababababababababababababababababababababababababababababababacacacacacacadtTtwtxuwtxvOtxtxtxtxuwtxtztWslswtXvPvQuaswswswswswswvRahahahvRswswswswswswswswswswsiahahahhlhlhlhlvSvTvUvVejfcfcvnfcfcfcfcfcfcvWejvXvYvZwaeS aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacadtTtwtxuwtxtxtxvOtxtxuwtxtztWslswswuLuLswswswswswswswwbahahahwbswswswswswswswswswswwcahahahwdhlhlhlvSwevUwfejfcfcvnfcsgsgsgsgsgwgejejejejejeS aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacadtTtwtxtUtVtVtVtVtVtVtUtxtztWslswswswswswswswswswswswslahahahslswtAtAswswtAtAswswswsiahahahouwhwihlwjwkwlfcejwmwmulwnfcfcfcfcfcwowpwqwrwrwseS aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacadtTtwtxtxtxtytxtxtytxtxtxtztWwtwuwuwuwuwuwuswswswswswslahahahslswwvwvswswwvwvswswswslahahahejejejwwejejejuvejejejejwxfcfcwywyfcfcwzfcfcfcwgeS aaabababababababababababababababababababababababababababababababababababababababacacacacacacacacacadbHwAwBwBwBwBwBwBwBwBwBwBwCahwDwEwFwGwHwIwJswswswswswsiahahahsiswwvwvswswwvwvswswswslahahahejwKwLhlwMejwNfcwOwPfcejwQfcvLwRvMwSwTwpwUwVwVwWeS aaabababababababababababababababababababababababababababababababababababababababacacacacacacacacacadwXahahahahsjsjsjsjahahahahwXwDwYwYwYwYwYwYswwZxaxbxcsiahahahsiszuLuLswswuLuLswsvwZslahahahejxdhlhlhlejulululululejxefcvLvMvMwSxfejejejejejeS -aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacadadadadadadadadadadadadadadadwDxgxhxixjxkwYsisisisisisixlxlxlejejejejejejejejejejejejbHahahejxmhlhlhlejxnxoulwSxpejxqfcvLxrxswSwowpwqwrwrwseS -aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDwDwDwDwDwDxtwDacacacadagahahahxupYwpxvxwxxuvfcuPxyfcuvahahahejxzhlhlhlwwhlhlulfcfcxAfcfcfcxBxBfcfcwzfcfcfcwgeS -aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDxCxDxExFxGxHwDacacacadbHrMrMrMxuqnxIxJfcxKejtNfcfcxKejahahahejejejejejejejejejejejejxLxMxNfcxOxMxPwpwUwVwVwWeS -aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDxQxHxHxHxHxHwDacacacadahrMrMrMxuqnxRxSfcxTejxUfcfcxVejahahahrDxWxXxYxZxYxXxWyaybybejejejejycejejejejejejejejeS -aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacwDydxHyeyfygyhwDacacacadagahahahxupYwpyiyjykejylymynyoejahahahrDyprzrzrzrzrzypyqyryrejysytyuyuyvyvejywyuywyxyweS -aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDwDyywDwDwDwDwDacacrDrDrDyzyzyzejejejejejejejejejejejejahahahyAyprzyByByBrzypyCyryDejejejyuyuyuyuyEyFyFyFyFyFeS -aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDyGyHyIwDacacacacacrDyJyKyLrzyMyKyJrDacacacacacacejwPuvahahahyAyprzrzrzrzrzypyCyryrejysyNyuyOyuyPejyQyuyQyuyQeS -aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDyRyHySwDacacacacacrDrDrDyLrzyMrDrDrDacacacacacacejfcejrMahahyAyprzyByByBrzypyCyryDejejejejejejejejejejejejejeS -aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDwDwDwDwDacacacacacrDyJyKyLrzyMyKyJrDacacacacacacejfcejrMahahrDyprzrzrzrzrzypyqyryrrDacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDrDrDyLrzyMrDrDrDacacacacacacejfcejrMrMagrDxWyTyTyTyTyTxWyUyVyVrDkHkHkHkHkHkHacacacacacacaa -aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDyJyKyLrzyMyKyJrDacacacacacacejfcejulyWulkHkHyXyXyXyXyXyXyXyXkHkHyYyZzazbzckHacacacacacacaa -aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDrDrDyLrzyMrDrDrDacacacacacacejfcejsXzdzekHzfzgzhzizjzkzlzmznzokHzazazazazakHacacacacacacaa -aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacototototrDyJyKyLrzyMyKyJrDototototacacejfcejzpfczqkHzrlUzsztzslUlUlUlUlUzuzazazazazakHacacacacacacaa -aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzvotzvrDrDrDyLrzyMrDrDrDzvotzvotacacejfcuvfczwfczxlUzyzzzzzzzzzAzBzBzCkHzDzEzFzGzHkHacacacacacacaa -aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzIotzJrDyJyKzKzLzMyKyJrDzJotzIotacacejejejejejejkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHacacacacacacaa +aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacadadadadadadadadadadadadadadadwDxgxhxixjxkwYsisisisisisixwxwxwxxxxxxxxxxxxxxxxxxxxxxxxbHahahejxmhlhlhlejxnxoulwSxpejxqfcvLxrxswSwowpwqwrwrwseS +aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDwDwDwDwDwDxtwDacacacxxxyxIxIxIxJxyxKxSxRxUxTyixVykyjxTahahahejxzhlhlhlwwhlhlulfcfcxAfcfcfcxBxBfcfcwzfcfcfcwgeS +aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDxCxDxExFxGxHwDacacacxxylymymymxJymynyoyjyzxxyWyjyjyzxxahahahejejejejejejejejejejejejxLxMxNfcxOxMxPwpwUwVwVwWeS +aaababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacwDxQxHxHxHxHxHwDacacacxxxIymymymxJymzdzeyjzfxxzpyjyjzqxxahahahrDxWxXxYxZxYxXxWyaybybejejejejycejejejejejejejejeS +aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacwDydxHyeyfygyhwDacacacxxxyxIxIxIxJxyxKzWzwzXxxzZzYAbAaxxahahahrDyprzrzrzrzrzypyqyryrejysytyuyuyvyvejywyuywyxyweS +aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDwDyywDwDwDwDwDacacrDrDrDAcAcAcxxxxxxxxxxxxxxxxxxxxxxxxahahahyAyprzyByByBrzypyCyryDejejejyuyuyuyuyEyFyFyFyFyFeS +aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDyGyHyIwDacacacacacrDyJyKyLrzyMyKyJrDacacacacacacxxAdxTahahahyAyprzrzrzrzrzypyCyryrejysyNyuyOyuyPejyQyuyQyuyQeS +aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDyRyHySwDacacacacacrDrDrDyLrzyMrDrDrDacacacacacacxxyjxxrMahahyAyprzyByByBrzypyCyryDejejejejejejejejejejejejejeS +aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacwDwDwDwDwDacacacacacrDyJyKyLrzyMyKyJrDacacacacacacxxyjxxrMahahrDyprzrzrzrzrzypyqyryrrDacacacacacacacacacacacacaa +aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDrDrDyLrzyMrDrDrDacacacacacacxxyjxxrMrMxWrDxWyTyTyTyTyTxWyUyVyVrDkHkHkHkHkHkHacacacacacacaa +aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDyJyKyLrzyMyKyJrDacacacacacacxxyjxxAeAfAekHrDyXyXyXyXyXyXyXyXkHkHyYyZzazbzckHacacacacacacaa +aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacrDrDrDyLrzyMrDrDrDacacacacacacxxyjxxAgAiAhkHAjzgzhzizjzkzlzmznzokHzazazazazakHacacacacacacaa +aaabababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacototototrDyJyKyLrzyMyKyJrDototototacacxxyjxxAkyjAlkHzrlUzsztzslUlUlUlUlUzuzazazazazakHacacacacacacaa +aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzvotzvrDrDrDyLrzyMrDrDrDzvotzvotacacxxyjxTyjAmyjzxlUzyzzzzzzzzzAzBzBzCkHzDzEzFzGzHkHacacacacacacaa +aaababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzIotzJrDyJyKzKzLzMyKyJrDzJotzIotacacxxxxxxxxxxxxkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHacacacacacacaa aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzNzOzNrDrDrDzPrDzQrDrDrDzNzRzNotacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa aaabababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacotzSzNzNzTzNzNzNotzNzNzNzTzNzNzUotacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazVzVzVzVzVzVzVzVzVzVzVzVzVzVzVzVzVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 0ffbfdb208a63ba2f8d68ffdd4cafb1cede35c68 Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 31 May 2017 19:02:09 +0300 Subject: [PATCH 054/261] Adds the Rahboop synth limb set. Also fixes the white stray pixel in ponytail 6 hair. --- code/modules/organs/robolimbs_vr.dm | 12 ++++++++++++ icons/mob/human_face.dmi | Bin 80370 -> 80362 bytes .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 0 -> 10543 bytes 3 files changed, 12 insertions(+) create mode 100644 icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 43551f4b20..4c43e850da 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -31,6 +31,18 @@ /obj/item/weapon/disk/limb/white_kryten company = "White Kryten Cybernetics" +// verkister : Rahwoof Boop +/datum/robolimb/eggnerdltd + company = "Eggnerd Prototyping Ltd." + desc = "This limb has a slight salvaged handicraft vibe to it. The CE-marking on it is definitely not the standardized one, it looks more like a hand-written sharpie monogram." + icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi' + blood_color = "#5e280d" + unavailable_to_build = 1 + whitelisted_to = list("verkister") + +/obj/item/weapon/disk/limb/eggnerdltd + company = "Eggnerd Prototyping Ltd." + //////////////// General VS-only ones ///////////////// /datum/robolimb/talon //They're buildable by default due to being extremely basic. company = "Talon LLC" diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 253821118ee558901e6c40089121ebb266590488..16a65b16f2ae5d5c4ab1e260732d45afa994b4e6 100644 GIT binary patch delta 33424 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

    iOju=*kJ6g~^W`5f8~sPycn-xB;1i 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 VVR__aCk8%Foj7Yys_$_3e*v&zklz3R diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi new file mode 100644 index 0000000000000000000000000000000000000000..88030f9b1e048a9d85589d2c8f37ea5f6839a892 GIT binary patch literal 10543 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 PKmv-gDl(N)CL#X@&(w%| literal 0 HcmV?d00001 From 8c5301d5347198138c099ffeb5fb7adaa084febe Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 31 May 2017 19:19:19 +0300 Subject: [PATCH 055/261] combined rahboop tail to the groin component I have no idea whether the loose tail icon would've showed up at all :v --- .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 10543 -> 11508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi index 88030f9b1e048a9d85589d2c8f37ea5f6839a892..a83bbbdc3c1a583e7dc2cbee0c52b5efea5e26db 100644 GIT binary patch literal 11508 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 literal 10543 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 PKmv-gDl(N)CL#X@&(w%| From 23faf0e4532086db0efa68527fa2587dab4f6533 Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 31 May 2017 20:07:13 +0300 Subject: [PATCH 056/261] fixed slight pixel offset in left side limbs. --- .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 11508 -> 11507 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi index a83bbbdc3c1a583e7dc2cbee0c52b5efea5e26db..ddeb8d12ee71155f189c6083eabc692c3e72b3ea 100644 GIT binary patch literal 11507 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 literal 11508 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 From ad8c4868b5b14bf8361b763bd0a47824c6b4dfd9 Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 31 May 2017 20:17:05 +0300 Subject: [PATCH 057/261] more pixel adjustment smh --- .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 11507 -> 11505 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi index ddeb8d12ee71155f189c6083eabc692c3e72b3ea..940bd92d7b057918d80e4cdd10defb3f32bf4b63 100644 GIT binary patch literal 11505 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 From 10846b66ae7f0e1289fe2a4235751fac31e03885 Mon Sep 17 00:00:00 2001 From: Verkister Date: Wed, 31 May 2017 20:27:22 +0300 Subject: [PATCH 058/261] an attempt. --- icons/mob/human_face.dmi | Bin 80362 -> 80370 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 16a65b16f2ae5d5c4ab1e260732d45afa994b4e6..253821118ee558901e6c40089121ebb266590488 100644 GIT binary patch delta 33455 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 VVR__aCk8%Foj7Yys_$_3e*v&zklz3R delta 33424 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

    iOju=*kJ6g~^W`5f8~sPycn-xB;1i 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 Date: Wed, 31 May 2017 20:38:04 +0300 Subject: [PATCH 059/261] Figured out the tail stuff. --- code/modules/organs/robolimbs_vr.dm | 1 + .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 11505 -> 10697 bytes 2 files changed, 1 insertion(+) diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 4c43e850da..78380352de 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -37,6 +37,7 @@ desc = "This limb has a slight salvaged handicraft vibe to it. The CE-marking on it is definitely not the standardized one, it looks more like a hand-written sharpie monogram." icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi' blood_color = "#5e280d" + includes_tail = 1 unavailable_to_build = 1 whitelisted_to = list("verkister") diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi index 940bd92d7b057918d80e4cdd10defb3f32bf4b63..ea30fe3b1a57299f632fe85130050d8942e8ee54 100644 GIT binary patch literal 10697 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 M%34ab3YL-o4dufxbN~PV literal 11505 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 Date: Wed, 31 May 2017 22:10:26 +0300 Subject: [PATCH 060/261] Fuck it. Sharing is caring. --- code/modules/organs/robolimbs_vr.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 78380352de..4bcd25e35c 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -39,7 +39,6 @@ blood_color = "#5e280d" includes_tail = 1 unavailable_to_build = 1 - whitelisted_to = list("verkister") /obj/item/weapon/disk/limb/eggnerdltd company = "Eggnerd Prototyping Ltd." From a0a390e8875908ba440588e58908bbecd0656e9b Mon Sep 17 00:00:00 2001 From: Neerti Date: Wed, 31 May 2017 17:41:02 -0400 Subject: [PATCH 061/261] 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 6ada64082b4a3344905047bb27ac95bf8fccb1b2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Wed, 31 May 2017 16:03:34 -0400 Subject: [PATCH 062/261] Adds Trash Piles Replaces some lockers and racks in maintenance with trash piles. They are presistent loot piles for people who just can't help but greytide. It allows people who join later in the shift to still get goodies. Each is searchable once per shift by each ckey. They have three loot lists: alpha, beta, and gamma. Alpha has the highest chance and just random maint stuff. All usable items (no random empty beer cans) but nothing you couldn't find elsewhere. Beta has a lower chance of spawning and is usually contraband, mechaically useful stuff. Radio jammers and the like. Gamma is dangerous or highly illegal contraband, and is unique. Guns (nonlethal!), teleporters, syndicate IDs, etc. Gamma items have special handling: all of the trash piles share a gamma list, and when an item is given out from the gamma list to someone, it's de-pooled so that another trash pile won't hand it out. The pile-collective maintains a reference to it as an 'allocated' gamma item though. Then, when the gamma list runs out, it reviews allocated gamma items to find any that it might be able to 're'-distribute. Namely ones that have been deleted, or are in cryopod computers because the user left with them. It can then hand that item out again. If it cannot hand out a new gamma item, it gives beta instead. You can also just manually put gamma-list items back into the piles if you're leaving. Or, if you find a translocator, but already made yourself one in R&D (or later make one), or you're the RD and find a bluespace harpoon, you can stuff the translocator/whatever back into any trash pile and it'll be re-pooled into all of them. You can only return gamma items this way, not beta/alpha. Additionally, if you find yourself playing a simple animal mob for an event (or you're a mouse), you can hide in trash piles by clicking them. There's a 50% chance you're revealed if the pile is searched. You can climb out by clicking the pile again. I dunno if that'll ever get used but it was easy to code, so eh. --- code/game/machinery/cryopod.dm | 2 +- code/game/objects/random/random_vr.dm | 22 +- code/game/objects/structures/trash_pile.dm | 238 ++++++++++++++++ .../projectiles/guns/projectile/dartgun.dm | 2 +- icons/obj/trash_piles.dmi | Bin 0 -> 1588 bytes maps/tether/tether-01-surface.dmm | 258 +++++++++--------- maps/tether/tether-03-station.dmm | 151 +++++----- vorestation.dme | 1 + 8 files changed, 451 insertions(+), 223 deletions(-) create mode 100644 code/game/objects/structures/trash_pile.dm create mode 100644 icons/obj/trash_piles.dmi diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index a11e94c451..6f9c37ef66 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -432,7 +432,7 @@ else if(control_computer && control_computer.allow_items) control_computer.frozen_items += W - W.loc = null + W.loc = control_computer //VOREStation Edit else W.forceMove(src.loc) diff --git a/code/game/objects/random/random_vr.dm b/code/game/objects/random/random_vr.dm index 072b853445..cad9efe36e 100644 --- a/code/game/objects/random/random_vr.dm +++ b/code/game/objects/random/random_vr.dm @@ -157,16 +157,12 @@ prob(2);/obj/item/weapon/reagent_containers/syringe/drugs, prob(1);/obj/item/weapon/reagent_containers/syringe/steroid) -/obj/random_multi/single_item/teleport - name = "Multi Point - Random Teleport Item" - id = "Single Teleporter" - item_path = null - - New() - item_path = pick(list(/obj/item/device/perfect_tele,/obj/item/weapon/bluespace_harpoon)) - ..() - -/obj/random_multi/single_item/netgun - name = "Multi Point - Random Hunter Netgun" - id = "Single Netgun" - item_path = /obj/item/weapon/gun/energy/netgun +//A random thing so that the spawn_nothing_percentage can be used w/o duplicating code. +/obj/random/trash_pile + name = "Random Trash Pile" + desc = "Hot Garbage." + icon = 'icons/obj/trash_piles.dmi' + icon_state = "randompile" + spawn_nothing_percentage = 0 +/obj/random/trash_pile/item_to_spawn() + return /obj/structure/trash_pile \ No newline at end of file diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm new file mode 100644 index 0000000000..434b4cc852 --- /dev/null +++ b/code/game/objects/structures/trash_pile.dm @@ -0,0 +1,238 @@ +/obj/structure/trash_pile + name = "trash pile" + desc = "A heap of garbage, but maybe there's something interesting inside?" + icon = 'icons/obj/trash_piles.dmi' + icon_state = "randompile" + density = 1 + anchored = 1.0 + + var/list/searchedby = list()// Characters that have searched this trashpile, with values of searched time. + var/mob/living/hider // A simple animal that might be hiding in the pile + + var/chance_alpha = 79 // Alpha list is junk items and normal random stuff. + var/chance_beta = 20 // Beta list is actually maybe some useful illegal items. If it's not alpha or gamma, it's beta. + var/chance_gamma = 1 // Gamma list is unique items only, and will only spawn one of each. This is a sub-chance of beta chance. + + //These are types that can only spawn once, and then will be removed from this list. + //Alpha and beta lists are in their respective procs. + var/global/list/unique_gamma = list( + /obj/item/device/perfect_tele, + /obj/item/weapon/bluespace_harpoon, + /obj/item/weapon/gun/energy/netgun, + /obj/item/weapon/card/id/syndicate, + /obj/item/weapon/moneybag/vault, + /obj/item/weapon/permit, + /obj/item/weapon/gun/projectile/dartgun + ) + + var/global/list/allocated_gamma = list() + +/obj/structure/trash_pile/initialize() + ..() + icon_state = pick("pile1","pile2","pilechair","piletable","pilevending") + +/obj/structure/trash_pile/attackby(obj/item/W as obj, mob/user as mob) + var/w_type = W.type + if(w_type in allocated_gamma) + to_chat(user,"You feel \the [W] slip from your hand, and disappear into the trash pile.") + user.unEquip(W) + W.forceMove(src) + allocated_gamma -= w_type + unique_gamma += w_type + qdel(W) + + else + return ..() + +/obj/structure/trash_pile/attack_generic(mob/user) + //Simple Animal + if(isanimal(user)) + var/mob/living/L = user + //They're in it, and want to get out. + if(L.loc == src) + var/choice = alert("Do you want to exit \the [src]?","Un-Hide?","Exit","Stay") + if(choice == "Exit") + if(L == hider) + hider = null + L.forceMove(get_turf(src)) + else if(!hider) + var/choice = alert("Do you want to hide in \the [src]?","Un-Hide?","Hide","Stay") + if(choice == "Hide" && !hider) //Check again because PROMPT + L.forceMove(src) + hider = L + else + return ..() + +/obj/structure/trash_pile/attack_hand(mob/user) + //Human mob + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.visible_message("[user] searches through \the [src].","You search through \the [src].") + if(hider) + to_chat(hider,"[user] is searching the trash pile you're in!") + + //Do the searching + if(do_after(user,rand(4 SECONDS,6 SECONDS),src)) + + //If there was a hider, chance to reveal them + if(hider && prob(50)) + to_chat(hider,"You've been discovered!") + hider.forceMove(get_turf(src)) + hider = null + to_chat(user,"Some sort of creature leaps out of \the [src]!") + + //You already searched this one bruh + else if(user.ckey in searchedby) + to_chat(H,"There's nothing else for you in \the [src]!") + + //You found an item! + else + var/luck = rand(1,100) + var/obj/item/I + if(luck <= chance_alpha) + I = produce_alpha_item() + else if(luck <= chance_alpha+chance_beta) + I = produce_beta_item() + else if(luck <= chance_alpha+chance_beta+chance_gamma) + I = produce_gamma_item() + + //We either have an item to hand over or we don't, at this point! + if(I) + searchedby += user.ckey + I.forceMove(get_turf(src)) + to_chat(H,"You found \a [I]!") + + else + return ..() + +//Random lists +/obj/structure/trash_pile/proc/produce_alpha_item() + var/path = pick(prob(4);/obj/item/broken_device, + prob(2);/obj/item/weapon/contraband/poster, + prob(2);/obj/item/device/flashlight/flare, + prob(2);/obj/item/device/flashlight/glowstick, + prob(2);/obj/item/device/flashlight/glowstick/blue, + prob(1);/obj/item/device/flashlight/glowstick/orange, + prob(1);/obj/item/device/flashlight/glowstick/red, + prob(1);/obj/item/device/flashlight/glowstick/yellow, + prob(1);/obj/item/device/flashlight/pen, + prob(4);/obj/item/weapon/cell, + prob(4);/obj/item/weapon/cell/device, + prob(3);/obj/item/weapon/cell/high, + prob(2);/obj/item/weapon/cell/super, + prob(5);/obj/random/cigarettes, + prob(3);/obj/item/clothing/mask/gas, + prob(2);/obj/item/clothing/mask/gas/half, + prob(4);/obj/item/clothing/mask/breath, + prob(2);/obj/item/weapon/reagent_containers/glass/rag, + prob(4);/obj/item/weapon/reagent_containers/food/snacks/liquidfood, + prob(2);/obj/item/weapon/storage/secure/briefcase, + prob(4);/obj/item/weapon/storage/briefcase, + prob(5);/obj/item/weapon/storage/backpack, + prob(5);/obj/item/weapon/storage/backpack/satchel/norm, + prob(4);/obj/item/weapon/storage/backpack/satchel, + prob(3);/obj/item/weapon/storage/backpack/dufflebag, + prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie, + prob(5);/obj/item/weapon/storage/box, + prob(3);/obj/item/weapon/storage/box/donkpockets, + prob(2);/obj/item/weapon/storage/box/sinpockets, + prob(1);/obj/item/weapon/storage/box/cups, + prob(3);/obj/item/weapon/storage/box/mousetraps, + prob(3);/obj/item/weapon/storage/box/engineer, + prob(3);/obj/item/weapon/storage/wallet, + prob(1);/obj/item/device/paicard, + prob(2);/obj/item/clothing/shoes/galoshes, + prob(1);/obj/item/clothing/shoes/syndigaloshes, + prob(4);/obj/item/clothing/shoes/black, + prob(4);/obj/item/clothing/shoes/laceup, + prob(4);/obj/item/clothing/shoes/black, + prob(4);/obj/item/clothing/shoes/leather, + prob(1);/obj/item/clothing/gloves/yellow, + prob(3);/obj/item/clothing/gloves/botanic_leather, + prob(2);/obj/item/clothing/gloves/sterile/latex, + prob(5);/obj/item/clothing/gloves/white, + prob(5);/obj/item/clothing/gloves/rainbow, + prob(2);/obj/item/clothing/gloves/fyellow, + prob(1);/obj/item/clothing/glasses/sunglasses, + prob(3);/obj/item/clothing/glasses/meson, + prob(2);/obj/item/clothing/glasses/meson/prescription, + prob(1);/obj/item/clothing/glasses/welding, + prob(1);/obj/item/clothing/head/bio_hood/general, + prob(4);/obj/item/clothing/head/hardhat, + prob(3);/obj/item/clothing/head/hardhat/red, + prob(1);/obj/item/clothing/head/ushanka, + prob(2);/obj/item/clothing/head/welding, + prob(4);/obj/item/clothing/suit/storage/hazardvest, + prob(1);/obj/item/clothing/suit/space/emergency, + prob(3);/obj/item/clothing/suit/storage/toggle/bomber, + prob(1);/obj/item/clothing/suit/bio_suit/general, + prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/black, + prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/blue, + prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/red, + prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/yellow, + prob(3);/obj/item/clothing/suit/storage/toggle/brown_jacket, + prob(3);/obj/item/clothing/suit/storage/toggle/leather_jacket, + prob(1);/obj/item/clothing/suit/storage/vest/press, + prob(3);/obj/item/clothing/suit/storage/apron, + prob(4);/obj/item/clothing/under/color/grey, + prob(2);/obj/item/clothing/under/syndicate/tacticool, + prob(2);/obj/item/clothing/under/pants/camo, + prob(1);/obj/item/clothing/under/harness, + prob(1);/obj/item/clothing/under/tactical, + prob(3);/obj/item/clothing/accessory/storage/webbing, + prob(4);/obj/item/weapon/spacecash/c1, + prob(3);/obj/item/weapon/spacecash/c10, + prob(3);/obj/item/weapon/spacecash/c20, + prob(1);/obj/item/weapon/spacecash/c50, + prob(1);/obj/item/weapon/spacecash/c100, + prob(3);/obj/item/weapon/camera_assembly, + prob(4);/obj/item/weapon/caution, + prob(3);/obj/item/weapon/caution/cone, + prob(2);/obj/item/weapon/card/emag_broken, + prob(1);/obj/item/weapon/card/emag, + prob(2);/obj/item/device/camera, + prob(3);/obj/item/device/pda, + prob(3);/obj/item/device/radio/headset) + + var/obj/item/I = new path() + return I + +/obj/structure/trash_pile/proc/produce_beta_item() + var/path = pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol, + prob(4);/obj/item/weapon/storage/pill_bottle/happy, + prob(4);/obj/item/weapon/storage/pill_bottle/zoom, + prob(4);/obj/item/weapon/material/butterfly, + prob(2);/obj/item/weapon/material/butterfly/switchblade, + prob(2);/obj/item/weapon/material/knuckledusters, + prob(1);/obj/item/weapon/material/hatchet/tacknife, + prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc, + prob(1);/obj/item/weapon/beartrap, + prob(1);/obj/item/weapon/handcuffs/fuzzy, + prob(1);/obj/item/weapon/legcuffs, + prob(2);/obj/item/weapon/reagent_containers/syringe/drugs, + prob(1);/obj/item/weapon/reagent_containers/syringe/steroid, + prob(4);/obj/item/device/radio_jammer, + prob(2);/obj/item/weapon/storage/box/syndie_kit/spy, + prob(2);/obj/item/weapon/grenade/anti_photon, + prob(1);/obj/item/weapon/cell/hyper/empty) + + var/obj/item/I = new path() + return I + +/obj/structure/trash_pile/proc/produce_gamma_item() + var/path = pick_n_take(unique_gamma) + if(!path) //Tapped out, reallocate? + for(var/P in allocated_gamma) + var/obj/item/I = allocated_gamma[P] + if(!I || istype(I.loc,/obj/machinery/computer/cryopod) || I.gcDestroyed) + allocated_gamma -= P + path = P + break + + if(path) + var/obj/item/I = new path() + allocated_gamma[path] = I + return I + else + return produce_beta_item() + diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index 8c64b297d1..c998e152f1 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -62,7 +62,7 @@ var/container_type = /obj/item/weapon/reagent_containers/glass/beaker var/list/starting_chems = null -/obj/item/weapon/gun/projectile/dartgun/dartgun/New() +/obj/item/weapon/gun/projectile/dartgun/New() //VOREStation Edit - Think this was a typo ..() if(starting_chems) for(var/chem in starting_chems) diff --git a/icons/obj/trash_piles.dmi b/icons/obj/trash_piles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e1b3527c652892d3eb5ed84fc7771631a307b4ce GIT binary patch literal 1588 zcmV-42Fv-0P) zae#;b9C(bJGc*6}>)(%bWB&j%sE&YuaB3qQ7-j$z&&{vB$Ihp;zK@@+oRoubgqC}A zVq3(-qjF9&G)-JyiC$x-oSnRzj89%yN=P{|d2K#sFpGWw0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6# za*U0*I5Sc+(=$pSoZ^zil2jm5sVFfoB|op^*4;psmy+=^+3kaQbcAHdZ(O+iOSw zfX3)hHwl1V2EhKL*47ibX(oacmDH*Ht%saOaa2`igCyKaMa{%in(H$?L z4S?mm036bVh6Y&T6(9uK3u;-TMo+Qh&zDh!4({+<05t>F;Xw$fW1PQuuXwUYe%Ilb zHUWTufb&E1FA4(G>+URz6m_zvsB@j&Ir^7?)0Y5-K{h)J;1s^Zei(*a@B5z3>Foue z4g|o_!$G!dGyszU>f<=Fez1B^aq=++i46c+j0hM<9IgN`8IX=ntb3~qKw~(c59jka zha>?ymqsr~xfg8jmGni)ysv zWtocq6cL&3*qqutoU>SS@Rdt|2>~uQ;2lo^sE>v2;~Fgi>Hgrc>eNBWpeF#1_txJ@ zhuJ?SV0156f*X$NOmRF8832GRVh;d(30QSk=UtI9{0|BGbcW$?Xoa5u z@AYIG!|lX4?kS(??xp+x@m~&j|CPUq_11!`km6qeKy>F#Q6Qf@^?eo~0JWzr^Ku#S zZ}39^&H$X+({`hPAL@+(^btTc`Z$H_b{K$DKp!J^`ok2ixBLBuuRJmWr7$M@UUy}) zyk7aU`|V~J^Gt*y1qEoMKL^Za{&S2H;4(nW!0Yj`sDBVp4a*26LV2Sfbge<0Y&RGg#zXAZ44Fc|S z1pHG1(A;C$ziIOLTEe3MM9*d1VCqL0;EGw1Hcd7afvEOo6H@M z`rj6x1Ykm%0RkwgT>uz@ z`FKs|GC2`qNfhvSJifm@oumZ-Xx=7(D*-V!u4Drkxe>8MxQwXjmw5MV\[View\] \[Add comment\]\n" - if(print_flavor_text()) msg += "[print_flavor_text()]\n" + if(print_flavor_text() && !cloaked) + msg += "[print_flavor_text()]\n" msg += "*---------*
    " msg += applying_pressure - if (pose) + if (pose && !cloaked) if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "[T.He] [pose]" user << jointext(msg, null) + +/mob/living/carbon/human/get_description_fluff() + if(mind.changeling && mind.changeling.cloaked) + return "" + else + return ..() + //Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. /proc/hasHUD(mob/M as mob, hudtype) if(istype(M, /mob/living/carbon/human)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 66abc50cab..856cf3aa04 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -305,6 +305,8 @@ //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere /mob/living/carbon/human/proc/get_visible_name() + if( mind.changeling && mind.changeling.cloaked) + return "Unknown" if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible return get_id_name("Unknown") if( head && (head.flags_inv&HIDEFACE) ) From 81c2d1ab40de25d24c5a5e0458b689a148f6e31b Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 31 May 2017 20:23:17 -0700 Subject: [PATCH 065/261] Added some shading to the trash pile sprites. It was bothering me. --- html/changelogs/chao-chainsawsinmyeyes.yml | 36 +++++++++++++++++++++ icons/obj/trash_piles.dmi | Bin 1588 -> 1768 bytes 2 files changed, 36 insertions(+) create mode 100644 html/changelogs/chao-chainsawsinmyeyes.yml diff --git a/html/changelogs/chao-chainsawsinmyeyes.yml b/html/changelogs/chao-chainsawsinmyeyes.yml new file mode 100644 index 0000000000..be5cc12789 --- /dev/null +++ b/html/changelogs/chao-chainsawsinmyeyes.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: Chaoko99 + +# 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: "Added some shading to the trashpile sprrites. diff --git a/icons/obj/trash_piles.dmi b/icons/obj/trash_piles.dmi index e1b3527c652892d3eb5ed84fc7771631a307b4ce..b87fdc16df760d1c6c5b7c2fb8561bc8053c938b 100644 GIT binary patch delta 1584 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 Date: Thu, 1 Jun 2017 15:05:51 -0400 Subject: [PATCH 066/261] 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 From 44b3822d8abc68e17ebcadf0068d6f974de6b150 Mon Sep 17 00:00:00 2001 From: PontifexMinimus <2vs_5fetab8ix85s@byom.de> Date: Thu, 1 Jun 2017 21:16:33 +0200 Subject: [PATCH 067/261] Adds Test Subject alt-title to assistants. (#1605) * Update assistant.dm * vorestation edit note * Update assistant.dm --- code/game/jobs/job/assistant.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index cc0faede19..22c4efd7f1 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -11,7 +11,7 @@ economic_modifier = 1 access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access() - alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor", "Resident") + alt_titles = list("Technical Assistant","Test Subject","Medical Intern","Research Assistant","Visitor", "Resident") // Test Subject is a VOREStation edit. /datum/job/assistant/equip(var/mob/living/carbon/human/H, var/alt_title) if(!H) return 0 From b88deb8b00532c0f854c52ad6b857abad061d8c8 Mon Sep 17 00:00:00 2001 From: PontifexMinimus <2vs_5fetab8ix85s@byom.de> Date: Thu, 1 Jun 2017 21:29:34 +0200 Subject: [PATCH 068/261] One more jobslot for librarians. Request of Benemuel. --- code/game/jobs/job/civilian.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 5d105d6e87..59f365dac2 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -231,8 +231,8 @@ department = "Civilian" department_flag = CIVILIAN faction = "Station" - total_positions = 1 - spawn_positions = 1 + total_positions = 2 // VOREStation Edit. Original number is 1. + spawn_positions = 2 // VOREStation Edit. Original number is 1. supervisors = "the head of personnel" selection_color = "#515151" idtype = /obj/item/weapon/card/id/civilian From 8b3403d54f5674574a386ae5b121e57f9501f9b3 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 1 Jun 2017 15:52:38 -0400 Subject: [PATCH 069/261] Prevent returning null from get_authentification_rank() Make sure we return the no job value if they have an id without a rank that is in a PDA. Should fix https://github.com/PolarisSS13/Polaris/issues/3486 --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 66abc50cab..83ce56e29e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -261,7 +261,7 @@ var/obj/item/device/pda/pda = wear_id if (istype(pda)) if (pda.id) - return pda.id.rank + return pda.id.rank ? pda.id.rank : if_no_job else return pda.ownrank else From b17fb867214eb740c78671862d3a1c4d2ad1fad9 Mon Sep 17 00:00:00 2001 From: Leshana Date: Tue, 30 May 2017 23:54:59 -0400 Subject: [PATCH 070/261] Tweaks Statpanel and System Initialization --- code/controllers/master.dm | 4 ++++ code/modules/admin/verbs/modifyvariables.dm | 2 +- code/modules/client/client procs.dm | 12 ++++++++++++ code/modules/examine/examine.dm | 5 +++-- code/modules/mob/mob.dm | 17 +++++++++++++++++ code/world.dm | 3 +-- 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 4dcf58d45e..981cf6d2bb 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -149,7 +149,11 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) // Set world options. + #ifdef UNIT_TEST + world.sleep_offline = 0 + #else world.sleep_offline = 1 + #endif world.fps = config.fps var/initialized_tod = REALTIMEOFDAY sleep(1) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 51f1fbceb3..ecd26e9b56 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -4,7 +4,7 @@ var/list/forbidden_varedit_object_types = list( /datum/feedback_variable //Prevents people messing with feedback gathering, ) -var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending") +var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending", "queued_priority") var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays") var/list/VVckey_edit = list("key", "ckey") diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 212e7a49e8..d908df1b3d 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -284,6 +284,18 @@ if(inactivity > duration) return inactivity return 0 +// Byond seemingly calls stat, each tick. +// Calling things each tick can get expensive real quick. +// So we slow this down a little. +// See: http://www.byond.com/docs/ref/info.html#/client/proc/Stat +/client/Stat() + . = ..() + if (holder) + sleep(1) + else + sleep(5) + stoplag() + /client/proc/last_activity_seconds() return inactivity / 10 diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index f09fce6cf3..ec64ffbe41 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -49,9 +49,10 @@ description_holders["icon"] = "\icon[A]" description_holders["desc"] = A.desc -/client/Stat() +/mob/Stat() . = ..() - if(usr && statpanel("Examine")) + if(client && statpanel("Examine")) + var/description_holders = client.description_holders stat(null,"[description_holders["icon"]] [description_holders["name"]]") //The name, written in big letters. stat(null,"[description_holders["desc"]]") //the default examine text. if(description_holders["info"]) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f16af92a74..7574bb4c77 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -672,6 +672,23 @@ if(processScheduler) processScheduler.statProcesses() + if(statpanel("MC")) + stat("CPU:","[world.cpu]") + stat("Instances:","[world.contents.len]") + stat(null) + if(Master) + Master.stat_entry() + else + stat("Master Controller:", "ERROR") + if(Failsafe) + Failsafe.stat_entry() + else + stat("Failsafe Controller:", "ERROR") + if(Master) + stat(null) + for(var/datum/controller/subsystem/SS in Master.subsystems) + SS.stat_entry() + if(listed_turf && client) if(!TurfAdjacent(listed_turf)) listed_turf = null diff --git a/code/world.dm b/code/world.dm index 02ec2669a9..8d51f84b47 100644 --- a/code/world.dm +++ b/code/world.dm @@ -70,8 +70,6 @@ var/global/datum/global_init/init = new () #if UNIT_TEST log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") log_unit_test("If you did not intend to enable this please check code/__defines/unit_testing.dm") -#else - sleep_offline = 1 #endif // Set up roundstart seed list. @@ -116,6 +114,7 @@ var/global/datum/global_init/init = new () processScheduler = new master_controller = new /datum/controller/game_controller() + Master.Initialize(10, FALSE) spawn(1) processScheduler.deferSetupFor(/datum/controller/process/ticker) processScheduler.setup() From 8315abb352a612b269b0b3458493f94eaee1bc77 Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 2 Jun 2017 07:56:09 -0400 Subject: [PATCH 071/261] Fix issues with radiation controller on multi-z maps. Radiation sources are by design z-level specific, the ray trace check needs to respect this. --- code/datums/repositories/radiation.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 5471282026..0245bb801c 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -46,6 +46,8 @@ var/global/repository/radiation/radiation_repository = new() var/datum/radiation_source/source = value if(source.rad_power < .) continue // Already being affected by a stronger source + if(source.source_turf.z != T.z) + continue // Radiation is not multi-z var/dist = get_dist(source.source_turf, T) if(dist > source.range) continue // Too far to possibly affect From 8af7fe67be19d4c1d032c1d2e8ba6e6cfc29012f Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 2 Jun 2017 16:08:38 +0300 Subject: [PATCH 072/261] Verk's synthfluff stuff for possible easylazy approval. (#1600) * Adds the Rahboop synth limb set. Also fixes the white stray pixel in ponytail 6 hair. * combined rahboop tail to the groin component I have no idea whether the loose tail icon would've showed up at all :v * fixed slight pixel offset in left side limbs. * more pixel adjustment smh * an attempt. * Figured out the tail stuff. * Fuck it. Sharing is caring. --- code/modules/organs/robolimbs_vr.dm | 12 ++++++++++++ .../cyberlimbs/_fluff_vr/rahboop.dmi | Bin 0 -> 10697 bytes 2 files changed, 12 insertions(+) create mode 100644 icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 43551f4b20..4bcd25e35c 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -31,6 +31,18 @@ /obj/item/weapon/disk/limb/white_kryten company = "White Kryten Cybernetics" +// verkister : Rahwoof Boop +/datum/robolimb/eggnerdltd + company = "Eggnerd Prototyping Ltd." + desc = "This limb has a slight salvaged handicraft vibe to it. The CE-marking on it is definitely not the standardized one, it looks more like a hand-written sharpie monogram." + icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi' + blood_color = "#5e280d" + includes_tail = 1 + unavailable_to_build = 1 + +/obj/item/weapon/disk/limb/eggnerdltd + company = "Eggnerd Prototyping Ltd." + //////////////// General VS-only ones ///////////////// /datum/robolimb/talon //They're buildable by default due to being extremely basic. company = "Talon LLC" diff --git a/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi b/icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ea30fe3b1a57299f632fe85130050d8942e8ee54 GIT binary patch literal 10697 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 M%34ab3YL-o4dufxbN~PV literal 0 HcmV?d00001 From c4bdc4c02705e6061f8255c4ffe1c6fde9b5b544 Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 2 Jun 2017 12:01:49 -0400 Subject: [PATCH 073/261] Updated VOREStation specific files for the ammo path reorganization. * Updated paths in dm files * Updated references in all dmm files for tether, virgo, and randomz --- code/datums/autolathe/arms_vr.dm | 14 +-- code/game/machinery/autolathe_vr.dm | 8 +- code/game/machinery/vending_vr.dm | 2 +- code/game/objects/random/random_vr.dm | 54 +++++------ .../crates_lockers/closets/secure/security.dm | 7 +- code/modules/awaymissions/loot_vr.dm | 54 +++++------ .../guns/projectile/automatic_vr.dm | 2 +- .../projectiles/guns/projectile/sniper_vr.dm | 6 +- .../vore/fluffstuff/custom_boxes_vr.dm | 4 +- .../modules/vore/fluffstuff/custom_guns_vr.dm | 92 +++++++++---------- maps/RandomZLevels/carpfarm.dmm | 2 +- maps/RandomZLevels/listeningpost.dmm | 2 +- maps/RandomZLevels/snowfield.dmm | 2 +- maps/RandomZLevels/zresearchlabs.dmm | 20 ++-- maps/tether/tether-03-station.dmm | 12 +-- maps/tether/tether-06-colony.dmm | 14 +-- maps/tether/tether-07-misc.dmm | 12 +-- maps/virgo/virgo-1.dmm | 10 +- maps/virgo/virgo-2.dmm | 18 ++-- 19 files changed, 168 insertions(+), 167 deletions(-) diff --git a/code/datums/autolathe/arms_vr.dm b/code/datums/autolathe/arms_vr.dm index 9db276b678..e517c557e0 100644 --- a/code/datums/autolathe/arms_vr.dm +++ b/code/datums/autolathe/arms_vr.dm @@ -1,34 +1,34 @@ /datum/category_item/autolathe/arms/speedloader_357_flash name = "speedloader (.357 flash)" - path =/obj/item/ammo_magazine/a357/flash + path =/obj/item/ammo_magazine/m357/flash hidden = 1 /datum/category_item/autolathe/arms/speedloader_357_stun name = "speedloader (.357 stun)" - path =/obj/item/ammo_magazine/a357/stun + path =/obj/item/ammo_magazine/m357/stun hidden = 1 /datum/category_item/autolathe/arms/speedloader_357_rubber name = "speedloader (.357 rubber)" - path =/obj/item/ammo_magazine/a357/rubber + path =/obj/item/ammo_magazine/m357/rubber hidden = 1 /datum/category_item/autolathe/arms/speedloader_44 name = "speedloader (.44)" - path =/obj/item/ammo_magazine/a44sl + path =/obj/item/ammo_magazine/m44sl hidden = 1 /datum/category_item/autolathe/arms/speedloader_44_rubber name = "speedloader (.44 rubber)" - path =/obj/item/ammo_magazine/a44sl/rubber + path =/obj/item/ammo_magazine/m44sl/rubber hidden = 1 /datum/category_item/autolathe/arms/mag_44 name = "magazine (.44)" - path =/obj/item/ammo_magazine/a44 + path =/obj/item/ammo_magazine/m44 hidden = 1 /datum/category_item/autolathe/arms/mag_44_rubber name = "magazine (.44 rubber)" - path =/obj/item/ammo_magazine/a44/rubber + path =/obj/item/ammo_magazine/m44/rubber hidden = 1 diff --git a/code/game/machinery/autolathe_vr.dm b/code/game/machinery/autolathe_vr.dm index 0a22326d44..252a31e6af 100644 --- a/code/game/machinery/autolathe_vr.dm +++ b/code/game/machinery/autolathe_vr.dm @@ -1,16 +1,16 @@ /datum/category_item/autolathe/arms/classic_smg_9mm name = "SMG magazine (9mm)" - path = /obj/item/ammo_magazine/mc9mml + path = /obj/item/ammo_magazine/m9mml hidden = 1 /datum/category_item/autolathe/arms/classic_smg_9mmr name = "SMG magazine (9mm rubber)" - path = /obj/item/ammo_magazine/mc9mml/rubber + path = /obj/item/ammo_magazine/m9mml/rubber /datum/category_item/autolathe/arms/classic_smg_9mmp name = "SMG magazine (9mm practice)" - path = /obj/item/ammo_magazine/mc9mml/practice + path = /obj/item/ammo_magazine/m9mml/practice /datum/category_item/autolathe/arms/classic_smg_9mmf name = "SMG magazine (9mm flash)" - path = /obj/item/ammo_magazine/mc9mml/flash + path = /obj/item/ammo_magazine/m9mml/flash diff --git a/code/game/machinery/vending_vr.dm b/code/game/machinery/vending_vr.dm index e7541bc5b1..dd51fc712d 100644 --- a/code/game/machinery/vending_vr.dm +++ b/code/game/machinery/vending_vr.dm @@ -6,7 +6,7 @@ /obj/machinery/vending/security/New() products += list(/obj/item/weapon/gun/energy/taser = 8,/obj/item/weapon/gun/energy/stunrevolver = 4, /obj/item/weapon/reagent_containers/spray/pepper = 6,/obj/item/taperoll/police = 6, - /obj/item/weapon/gun/projectile/sec/flash = 4, /obj/item/ammo_magazine/c45m/flash = 8, + /obj/item/weapon/gun/projectile/sec/flash = 4, /obj/item/ammo_magazine/m45/flash = 8, /obj/item/clothing/glasses/omnihud/sec = 6) ..() diff --git a/code/game/objects/random/random_vr.dm b/code/game/objects/random/random_vr.dm index cad9efe36e..dd873ddd24 100644 --- a/code/game/objects/random/random_vr.dm +++ b/code/game/objects/random/random_vr.dm @@ -88,35 +88,35 @@ item_to_spawn() return pick(prob(5);/obj/item/weapon/storage/box/shotgunammo,\ prob(5);/obj/item/weapon/storage/box/shotgunshells,\ - prob(5);/obj/item/ammo_magazine/a357,\ - prob(5);/obj/item/ammo_magazine/clip/a762,\ - prob(5);/obj/item/ammo_magazine/c45m,\ - prob(5);/obj/item/ammo_magazine/c45m/rubber,\ - prob(5);/obj/item/ammo_magazine/c38,\ - prob(5);/obj/item/ammo_magazine/c38/rubber,\ + prob(5);/obj/item/ammo_magazine/m357,\ + prob(5);/obj/item/ammo_magazine/clip/c762,\ + prob(5);/obj/item/ammo_magazine/m45,\ + prob(5);/obj/item/ammo_magazine/m45/rubber,\ + prob(5);/obj/item/ammo_magazine/s38,\ + prob(5);/obj/item/ammo_magazine/s38/rubber,\ prob(5);/obj/item/weapon/storage/box/flashbangs,\ - prob(5);/obj/item/ammo_magazine/c556,\ - prob(4);/obj/item/ammo_magazine/clip/a556,\ + prob(5);/obj/item/ammo_magazine/m556,\ + prob(4);/obj/item/ammo_magazine/clip/c556,\ prob(4);/obj/item/ammo_magazine/clip/c45,\ prob(4);/obj/item/ammo_magazine/clip/c9mm,\ - prob(4);/obj/item/ammo_magazine/c45uzi,\ - prob(4);/obj/item/ammo_magazine/c556/ext,\ - prob(4);/obj/item/ammo_magazine/mc9mm,\ - prob(4);/obj/item/ammo_magazine/mc9mml,\ - prob(4);/obj/item/ammo_magazine/mc9mmt,\ - prob(4);/obj/item/ammo_magazine/mc9mmt/rubber,\ - prob(4);/obj/item/ammo_magazine/a10mm,\ - prob(4);/obj/item/ammo_magazine/p90,\ + prob(4);/obj/item/ammo_magazine/m45uzi,\ + prob(4);/obj/item/ammo_magazine/m556/ext,\ + prob(4);/obj/item/ammo_magazine/m9mm,\ + prob(4);/obj/item/ammo_magazine/m9mml,\ + prob(4);/obj/item/ammo_magazine/m9mmt,\ + prob(4);/obj/item/ammo_magazine/m9mmt/rubber,\ + prob(4);/obj/item/ammo_magazine/m10mm,\ + prob(4);/obj/item/ammo_magazine/m9mmp90,\ /* prob(4);/obj/item/ammo_magazine/m14,\ prob(4);/obj/item/ammo_magazine/m14/large,\ */ - prob(4);/obj/item/ammo_magazine/c556/ext,\ - prob(4);/obj/item/ammo_magazine/s762,\ - prob(4);/obj/item/ammo_magazine/c762,\ - prob(3);/obj/item/ammo_magazine/clip/a10mm,\ - prob(3);/obj/item/ammo_magazine/clip/a50,\ - prob(3);/obj/item/ammo_magazine/c556,\ - prob(2);/obj/item/ammo_magazine/a50,\ - prob(2);/obj/item/ammo_magazine/a556,\ + prob(4);/obj/item/ammo_magazine/m556/ext,\ + prob(4);/obj/item/ammo_magazine/m762,\ + prob(4);/obj/item/ammo_magazine/m762,\ + prob(3);/obj/item/ammo_magazine/clip/c10mm,\ + prob(3);/obj/item/ammo_magazine/clip/c50,\ + prob(3);/obj/item/ammo_magazine/m556,\ + prob(2);/obj/item/ammo_magazine/m50,\ + prob(2);/obj/item/ammo_magazine/m556,\ prob(1);/obj/item/weapon/storage/box/frags,\ /* prob(1);/obj/item/ammo_magazine/battlerifle,\ */ prob(1);/obj/item/ammo_casing/rocket,\ @@ -126,9 +126,9 @@ prob(1);/obj/item/weapon/storage/box/practiceshells,\ prob(1);/obj/item/weapon/storage/box/stunshells,\ prob(1);/obj/item/weapon/storage/box/blanks,\ - prob(1);/obj/item/ammo_magazine/stg,\ - prob(1);/obj/item/ammo_magazine/tommydrum,\ - prob(1);/obj/item/ammo_magazine/tommymag + prob(1);/obj/item/ammo_magazine/mtg,\ + prob(1);/obj/item/ammo_magazine/m45tommydrum,\ + prob(1);/obj/item/ammo_magazine/m45tommy ) /obj/random/cargopod 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 e8c6713582..e4c9aa7320 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -143,14 +143,15 @@ new /obj/item/device/flash(src) new /obj/item/weapon/melee/baton/loaded(src) new /obj/item/weapon/gun/projectile/lamia(src) - new /obj/item/ammo_magazine/a44/rubber(src) - new /obj/item/ammo_magazine/a44(src) - new /obj/item/ammo_magazine/a44(src) + new /obj/item/ammo_magazine/m44/rubber(src) + new /obj/item/ammo_magazine/m44(src) + new /obj/item/ammo_magazine/m44(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/cell/device/weapon(src) new /obj/item/weapon/melee/telebaton(src) new /obj/item/device/flashlight/maglight(src) return +//VOREStation Edit End /obj/structure/closet/secure_closet/warden name = "warden's locker" diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index 5d22422513..b6be0c0b5d 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -185,35 +185,35 @@ var/new_ammo = pick( // Copied from Random.dm prob(5);/obj/item/weapon/storage/box/shotgunammo,\ prob(5);/obj/item/weapon/storage/box/shotgunshells,\ - prob(5);/obj/item/ammo_magazine/a357,\ - prob(5);/obj/item/ammo_magazine/clip/a762,\ - prob(5);/obj/item/ammo_magazine/c45m,\ - prob(5);/obj/item/ammo_magazine/c45m/rubber,\ - prob(5);/obj/item/ammo_magazine/c38,\ - prob(5);/obj/item/ammo_magazine/c38/rubber,\ + prob(5);/obj/item/ammo_magazine/m357,\ + prob(5);/obj/item/ammo_magazine/clip/c762,\ + prob(5);/obj/item/ammo_magazine/m45,\ + prob(5);/obj/item/ammo_magazine/m45/rubber,\ + prob(5);/obj/item/ammo_magazine/s38,\ + prob(5);/obj/item/ammo_magazine/s38/rubber,\ prob(5);/obj/item/weapon/storage/box/flashbangs,\ - prob(5);/obj/item/ammo_magazine/c556,\ - prob(4);/obj/item/ammo_magazine/clip/a556,\ + prob(5);/obj/item/ammo_magazine/m556,\ + prob(4);/obj/item/ammo_magazine/clip/c556,\ prob(4);/obj/item/ammo_magazine/clip/c45,\ prob(4);/obj/item/ammo_magazine/clip/c9mm,\ - prob(4);/obj/item/ammo_magazine/c45uzi,\ - prob(4);/obj/item/ammo_magazine/c556/ext,\ - prob(4);/obj/item/ammo_magazine/mc9mm,\ - prob(4);/obj/item/ammo_magazine/mc9mml,\ - prob(4);/obj/item/ammo_magazine/mc9mmt,\ - prob(4);/obj/item/ammo_magazine/mc9mmt/rubber,\ - prob(4);/obj/item/ammo_magazine/a10mm,\ - prob(4);/obj/item/ammo_magazine/p90,\ + prob(4);/obj/item/ammo_magazine/m45uzi,\ + prob(4);/obj/item/ammo_magazine/m556/ext,\ + prob(4);/obj/item/ammo_magazine/m9mm,\ + prob(4);/obj/item/ammo_magazine/m9mml,\ + prob(4);/obj/item/ammo_magazine/m9mmt,\ + prob(4);/obj/item/ammo_magazine/m9mmt/rubber,\ + prob(4);/obj/item/ammo_magazine/m10mm,\ + prob(4);/obj/item/ammo_magazine/m9mmp90,\ /* prob(4);/obj/item/ammo_magazine/m14,\ prob(4);/obj/item/ammo_magazine/m14/large,\ */ - prob(4);/obj/item/ammo_magazine/c556/ext,\ - prob(4);/obj/item/ammo_magazine/s762,\ - prob(4);/obj/item/ammo_magazine/c556/ext,\ - prob(3);/obj/item/ammo_magazine/clip/a10mm,\ - prob(3);/obj/item/ammo_magazine/clip/a50,\ - prob(3);/obj/item/ammo_magazine/c556,\ - prob(2);/obj/item/ammo_magazine/a50,\ - prob(2);/obj/item/ammo_magazine/a556,\ + prob(4);/obj/item/ammo_magazine/m556/ext,\ + prob(4);/obj/item/ammo_magazine/m762,\ + prob(4);/obj/item/ammo_magazine/m556/ext,\ + prob(3);/obj/item/ammo_magazine/clip/c10mm,\ + prob(3);/obj/item/ammo_magazine/clip/c50,\ + prob(3);/obj/item/ammo_magazine/m556,\ + prob(2);/obj/item/ammo_magazine/m50,\ + prob(2);/obj/item/ammo_magazine/m556,\ prob(1);/obj/item/weapon/storage/box/frags,\ /* prob(1);/obj/item/ammo_magazine/battlerifle,\ */ prob(1);/obj/item/ammo_casing/rocket,\ @@ -223,9 +223,9 @@ prob(1);/obj/item/weapon/storage/box/practiceshells,\ prob(1);/obj/item/weapon/storage/box/stunshells,\ prob(1);/obj/item/weapon/storage/box/blanks,\ - prob(1);/obj/item/ammo_magazine/stg,\ - prob(1);/obj/item/ammo_magazine/tommydrum,\ - prob(1);/obj/item/ammo_magazine/tommymag) + prob(1);/obj/item/ammo_magazine/mtg,\ + prob(1);/obj/item/ammo_magazine/m45tommydrum,\ + prob(1);/obj/item/ammo_magazine/m45tommy) new new_ammo(C) if("spacesuit") var/obj/structure/closet/syndicate/C = new(src.loc) diff --git a/code/modules/projectiles/guns/projectile/automatic_vr.dm b/code/modules/projectiles/guns/projectile/automatic_vr.dm index 9b7fc0c726..79789292ee 100644 --- a/code/modules/projectiles/guns/projectile/automatic_vr.dm +++ b/code/modules/projectiles/guns/projectile/automatic_vr.dm @@ -1,2 +1,2 @@ /obj/item/weapon/gun/projectile/automatic/wt550/lethal - magazine_type = /obj/item/ammo_magazine/mc9mmt \ No newline at end of file + magazine_type = /obj/item/ammo_magazine/m9mmt \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/sniper_vr.dm b/code/modules/projectiles/guns/projectile/sniper_vr.dm index ecfe070eca..8ed8962319 100644 --- a/code/modules/projectiles/guns/projectile/sniper_vr.dm +++ b/code/modules/projectiles/guns/projectile/sniper_vr.dm @@ -17,12 +17,12 @@ // requires_two_hands = 1 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/s762 - allowed_magazines = list(/obj/item/ammo_magazine/s762, /obj/item/ammo_magazine/c762) + magazine_type = /obj/item/ammo_magazine/m762 + allowed_magazines = list(/obj/item/ammo_magazine/m762, /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/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 5681714595..92ec145d5f 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -181,8 +181,8 @@ name = "Sebastian's Lumoco Arms P3 Box" has_items = list( /obj/item/weapon/gun/projectile/pistol, - /obj/item/ammo_magazine/mc9mm/flash, - /obj/item/ammo_magazine/mc9mm/flash, + /obj/item/ammo_magazine/m9mm/flash, + /obj/item/ammo_magazine/m9mm/flash, /obj/item/fluff/permit/sebastian_aji) /obj/item/weapon/storage/box/fluff/briana_moore diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 3d72379097..e6f562987a 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -67,7 +67,7 @@ item_state = "haloshotgun_i" item_icons = null - ammo_type = /obj/item/ammo_casing/shotgun + ammo_type = /obj/item/ammo_casing/a12g max_shells = 12 // jertheace : Jeremiah 'Ace' Acacius @@ -75,7 +75,7 @@ name = "Ace's M45D Tactical Shotgun" // D-model holds half as many shells as the normal version so as not to be OP as shit. Better than shotgun, worse than combat shotgun. desc = "Owned by the respected (or feared?) veteran Captain of VORE Station. Inscribed on the barrel are the words \"Speak softly, and carry a big stick.\" It has a folding stock so it can fit into bags." w_class = ITEMSIZE_NORMAL // Because collapsable stock so it fits in backpacks. - ammo_type = /obj/item/ammo_casing/shotgun/stunshell + ammo_type = /obj/item/ammo_casing/a12g/stunshell max_shells = 6 // bwoincognito:Tasald Corlethian @@ -146,7 +146,7 @@ icon_state = "jury" item_state = "gun" accuracy = 0 // Because I know you're not an idiot who needs to be nerfed. -Ace - ammo_type = /obj/item/ammo_casing/shotgun/beanbag + ammo_type = /obj/item/ammo_casing/a12g/beanbag // Dhaeleena : Dhaeleena M'iar /obj/item/weapon/gun/projectile/revolver/mateba/fluff/dhael @@ -166,7 +166,7 @@ icon_state = "model10" fire_sound = 'sound/weapons/deagle.ogg' origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) - ammo_type = /obj/item/ammo_casing/c38r //Rubber rounds. + ammo_type = /obj/item/ammo_casing/a38r //Rubber rounds. // For general use @@ -180,8 +180,8 @@ max_shells = 30 caliber = "kurz" origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ILLEGAL = 6) - magazine_type = /obj/item/ammo_magazine/stg - allowed_magazines = list(/obj/item/ammo_magazine/stg) + magazine_type = /obj/item/ammo_magazine/mtg + allowed_magazines = list(/obj/item/ammo_magazine/mtg) load_method = MAGAZINE /obj/item/weapon/gun/projectile/automatic/stg/update_icon(var/ignore_inhands) @@ -238,8 +238,8 @@ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) slot_flags = SLOT_BELT load_method = MAGAZINE - magazine_type = /obj/item/ammo_magazine/mc9mml - allowed_magazines = list(/obj/item/ammo_magazine/mc9mm, /obj/item/ammo_magazine/mc9mml) + magazine_type = /obj/item/ammo_magazine/m9mml + allowed_magazines = list(/obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mml) firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), @@ -248,7 +248,7 @@ /obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands) ..() - if(istype(ammo_magazine,/obj/item/ammo_magazine/mc9mm)) + if(istype(ammo_magazine,/obj/item/ammo_magazine/m9mm)) icon_state = "pdw-short" else icon_state = (ammo_magazine)? "pdw" : "pdw-empty" @@ -279,8 +279,8 @@ auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' hitsound = null caliber = "s762" - magazine_type = /obj/item/ammo_magazine/s762 - allowed_magazines = list(/obj/item/ammo_magazine/s762) + magazine_type = /obj/item/ammo_magazine/m762 + allowed_magazines = list(/obj/item/ammo_magazine/m762) /obj/item/weapon/gun/projectile/automatic/fluff/crestrose/attack_self(mob/user as mob) on = !on @@ -379,7 +379,7 @@ /obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44/update_icon(var/ignore_inhands) ..() - // TODO - Fix this for spriting different size magazines + // TODO - Fix this for spriting different size magazines icon_state = (ammo_magazine)? "g44" : "g44-empty" item_state = (ammo_magazine)? "bullpup" : "bullpup-empty" if(!ignore_inhands) update_held_icon() @@ -462,8 +462,8 @@ icon = 'icons/obj/gun_vr.dmi' icon_state = "khipistol" item_state = "gun" // Placeholder - magazine_type = /obj/item/ammo_magazine/c45m/flash //Dun wanna KILL all the people. - allowed_magazines = list(/obj/item/ammo_magazine/c45m) + magazine_type = /obj/item/ammo_magazine/m45/flash //Dun wanna KILL all the people. + allowed_magazines = list(/obj/item/ammo_magazine/m45) caliber = ".45" handle_casings = CYCLE_CASINGS origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5) @@ -485,8 +485,8 @@ slot_flags = SLOT_BELT load_method = MAGAZINE handle_casings = CYCLE_CASINGS - magazine_type = /obj/item/ammo_magazine/mc9mml - allowed_magazines = list(/obj/item/ammo_magazine/mc9mm, /obj/item/ammo_magazine/mc9mml) + magazine_type = /obj/item/ammo_magazine/m9mml + allowed_magazines = list(/obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mml) dna_lock = 1 firemodes = list( @@ -583,8 +583,8 @@ caliber = ".44" ammo_type = /obj/item/ammo_casing/a44/rubber - magazine_type = /obj/item/ammo_magazine/a44/rubber - allowed_magazines = list(/obj/item/ammo_magazine/a44,/obj/item/ammo_magazine/a44/rubber) + magazine_type = /obj/item/ammo_magazine/m44/rubber + allowed_magazines = list(/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44/rubber) load_method = MAGAZINE auto_eject = 1 auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' @@ -610,8 +610,8 @@ caliber = ".32" ammo_type = /obj/item/ammo_casing/a32 - magazine_type = /obj/item/ammo_magazine/a32 - allowed_magazines = list(/obj/item/ammo_magazine/a32) + magazine_type = /obj/item/ammo_magazine/m32 + allowed_magazines = list(/obj/item/ammo_magazine/m32) load_method = MAGAZINE fire_delay = 0.6 accuracy = 1 @@ -639,8 +639,8 @@ caliber = ".32" ammo_type = /obj/item/ammo_casing/a32 - magazine_type = /obj/item/ammo_magazine/a32 - allowed_magazines = list(/obj/item/ammo_magazine/a32) + magazine_type = /obj/item/ammo_magazine/m32 + allowed_magazines = list(/obj/item/ammo_magazine/m32) fire_delay = 1.2 load_method = MAGAZINE accuracy = 2 @@ -699,9 +699,9 @@ slot_flags = SLOT_BELT caliber = "9mm" - ammo_type = /obj/item/ammo_casing/c9mm - magazine_type = /obj/item/ammo_magazine/c9mm - allowed_magazines = list(/obj/item/ammo_magazine/c9mm) + ammo_type = /obj/item/ammo_casing/a9mm + magazine_type = /obj/item/ammo_magazine/m9mm + allowed_magazines = list(/obj/item/ammo_magazine/m9mm) load_method = MAGAZINE multi_aim = 1 burst_delay = 2 @@ -866,7 +866,7 @@ impact_type = /obj/effect/projectile/laser_omni/impact //--------------- StG-60 ---------------- -/obj/item/ammo_magazine/stg +/obj/item/ammo_magazine/mtg name = "box mag (7.92x33mm Kurz)" icon = 'icons/obj/ammo_vr.dmi' icon_state = "stg_30rnd" @@ -881,7 +881,7 @@ caliber = "kurz" projectile_type = /obj/item/projectile/bullet/rifle/a762 -/obj/item/ammo_magazine/stg/empty +/obj/item/ammo_magazine/mtg/empty initial_ammo = 0 //------------- Battlerifle ------------- @@ -909,7 +909,7 @@ initial_ammo = 0 //---------------- PDW ------------------ -/obj/item/ammo_magazine/mc9mml +/obj/item/ammo_magazine/m9mml name = "\improper SMG magazine (9mm)" icon = 'icons/obj/ammo_vr.dmi' icon_state = "smg" @@ -917,31 +917,31 @@ mag_type = MAGAZINE 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 multiple_sprites = 1 -/obj/item/ammo_magazine/mc9mml/empty +/obj/item/ammo_magazine/m9mml/empty initial_ammo = 0 -/obj/item/ammo_magazine/mc9mml/ap +/obj/item/ammo_magazine/m9mml/ap name = "\improper SMG magazine (9mm armor-piercing)" - ammo_type = /obj/item/ammo_casing/c9mm/ap + ammo_type = /obj/item/ammo_casing/a9mm/ap -/obj/item/ammo_magazine/mc9mml/flash +/obj/item/ammo_magazine/m9mml/flash name = "\improper SMG magazine (9mm flash)" - ammo_type = /obj/item/ammo_casing/c9mmf + ammo_type = /obj/item/ammo_casing/a9mmf -/obj/item/ammo_magazine/mc9mml/rubber +/obj/item/ammo_magazine/m9mml/rubber name = "\improper SMG magazine (9mm rubber)" - ammo_type = /obj/item/ammo_casing/c9mmr + ammo_type = /obj/item/ammo_casing/a9mmr -/obj/item/ammo_magazine/mc9mml/practice +/obj/item/ammo_magazine/m9mml/practice name = "\improper SMG magazine (9mm practice)" - ammo_type = /obj/item/ammo_casing/c9mmp + ammo_type = /obj/item/ammo_casing/a9mmp //.357 special ammo -/obj/item/ammo_magazine/a357/stun +/obj/item/ammo_magazine/m357/stun name = "speedloader (.357 stun)" desc = "A speedloader for .357 revolvers." icon = 'icons/obj/ammo_vr.dmi' @@ -957,7 +957,7 @@ icon_state = "stun357" projectile_type = /obj/item/projectile/energy/electrode/stunshot/strong -/obj/item/ammo_magazine/a357/rubber +/obj/item/ammo_magazine/m357/rubber name = "speedloader (.357 rubber)" desc = "A speedloader for .357 revolvers." icon = 'icons/obj/ammo_vr.dmi' @@ -973,7 +973,7 @@ icon_state = "rubber357" projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong -/obj/item/ammo_magazine/a357/flash +/obj/item/ammo_magazine/m357/flash name = "speedloader (.357 flash)" desc = "A speedloader for .357 revolvers." icon = 'icons/obj/ammo_vr.dmi' @@ -995,7 +995,7 @@ caliber = ".32" projectile_type = /obj/item/projectile/bullet/pistol -/obj/item/ammo_magazine/a32 +/obj/item/ammo_magazine/m32 icon_state = "a762" caliber = ".32" ammo_type = /obj/item/ammo_casing/a32 @@ -1016,7 +1016,7 @@ desc = "A .44 rubber bullet casing." projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong -/obj/item/ammo_magazine/a44 +/obj/item/ammo_magazine/m44 desc = "A magazine for .44 ammo." icon = 'icons/obj/ammo_vr.dmi' icon_state = "44lethal" @@ -1026,13 +1026,13 @@ max_ammo = 8 mag_type = MAGAZINE -/obj/item/ammo_magazine/a44/rubber +/obj/item/ammo_magazine/m44/rubber desc = "A magazine for .44 less-than-lethal ammo." icon_state = "44rubber" ammo_type = /obj/item/ammo_casing/a44/rubber //.44 speedloaders -/obj/item/ammo_magazine/a44sl +/obj/item/ammo_magazine/m44sl name = "speedloader (.44)" desc = "A speedloader for .44 revolvers." icon = 'icons/obj/ammo_vr.dmi' @@ -1044,7 +1044,7 @@ multiple_sprites = 1 mag_type = SPEEDLOADER -/obj/item/ammo_magazine/a44sl/rubber +/obj/item/ammo_magazine/m44sl/rubber name = "speedloader (.44 rubber)" icon_state = "r357" ammo_type = /obj/item/ammo_casing/a44/rubber diff --git a/maps/RandomZLevels/carpfarm.dmm b/maps/RandomZLevels/carpfarm.dmm index 612ac1f7e3..8d32d655b9 100644 --- a/maps/RandomZLevels/carpfarm.dmm +++ b/maps/RandomZLevels/carpfarm.dmm @@ -80,7 +80,7 @@ "bB" = (/obj/machinery/vending/cigarette{prices = list()},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/awaymission/carpfarm/base) "bC" = (/obj/machinery/vending/dinnerware,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/awaymission/carpfarm/base) "bD" = (/obj/structure/closet/crate/secure/weapon,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/awaymission/carpfarm/base) -"bE" = (/obj/structure/closet/crate/secure/weapon,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/awaymission/carpfarm/base) +"bE" = (/obj/structure/closet/crate/secure/weapon,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/awaymission/carpfarm/base) "bF" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/awaymission/carpfarm/base) "bG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/carpfarm/base) "bH" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/carpfarm/base) diff --git a/maps/RandomZLevels/listeningpost.dmm b/maps/RandomZLevels/listeningpost.dmm index 287066256e..5bd0a74608 100644 --- a/maps/RandomZLevels/listeningpost.dmm +++ b/maps/RandomZLevels/listeningpost.dmm @@ -50,7 +50,7 @@ "aX" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/awaymission/listeningpost) "aY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/mineral,/area/mine/unexplored) "aZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral,/area/mine/unexplored) -"ba" = (/obj/structure/closet,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/silencer,/obj/item/ammo_magazine/mc9mm,/obj/item/ammo_magazine/mc9mm,/obj/item/weapon/paper/listneningpost/reciept,/turf/simulated/floor/tiled,/area/awaymission/listeningpost) +"ba" = (/obj/structure/closet,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/silencer,/obj/item/ammo_magazine/m9mm,/obj/item/ammo_magazine/m9mm,/obj/item/weapon/paper/listneningpost/reciept,/turf/simulated/floor/tiled,/area/awaymission/listeningpost) "bb" = (/obj/structure/filingcabinet,/obj/item/weapon/paper/listneningpost/mission,/obj/item/weapon/paper/listneningpost/year2558/april,/obj/item/weapon/paper/listneningpost/year2558/may,/obj/item/weapon/paper/listneningpost/year2558/june,/obj/item/weapon/paper/listneningpost/year2558/july,/obj/item/weapon/paper/listneningpost/year2558/august,/obj/item/weapon/paper/listneningpost/year2558/september,/obj/item/weapon/paper/listneningpost/year2558/october,/obj/item/weapon/paper/listneningpost/year2558/november,/obj/item/weapon/paper/listneningpost/year2558/december,/obj/item/weapon/paper/listneningpost/year2559/january,/obj/item/weapon/paper/listneningpost/year2559/february,/obj/item/weapon/paper/listneningpost/year2559/march,/obj/item/weapon/paper/listneningpost/year2559/april,/obj/item/weapon/paper/listneningpost/year2559/may,/obj/item/weapon/paper/listneningpost/year2559/june,/obj/item/weapon/paper/listneningpost/year2559/july,/obj/item/weapon/paper/listneningpost/year2559/august,/obj/item/weapon/paper/listneningpost/year2559/september,/obj/item/weapon/paper/listneningpost/year2559/october,/obj/item/weapon/paper/listneningpost/year2559/november,/obj/item/weapon/paper/listneningpost/year2559/december,/obj/item/weapon/paper/listneningpost/year2560/january,/obj/item/weapon/paper/listneningpost/year2560/february,/obj/item/weapon/paper/listneningpost/year2560/march,/obj/item/weapon/paper/listneningpost/year2560/april,/turf/simulated/floor/tiled,/area/awaymission/listeningpost) "bc" = (/obj/effect/landmark/loot_spawn{live_cargo = 0; name = "loot spawner (no live cargo)"},/turf/simulated/floor/tiled,/area/awaymission/listeningpost) "bd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/listeningpost) diff --git a/maps/RandomZLevels/snowfield.dmm b/maps/RandomZLevels/snowfield.dmm index ddff964834..6c13854f49 100644 --- a/maps/RandomZLevels/snowfield.dmm +++ b/maps/RandomZLevels/snowfield.dmm @@ -204,7 +204,7 @@ "dV" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/tiled/neutral,/area/awaymission/snowfield/base) "dW" = (/obj/machinery/door/airlock/highsecurity{locked = 1; name = "Secure Armoury Section"; req_access = list(150)},/turf/simulated/floor/tiled/dark,/area/awaymission/snowfield/base) "dX" = (/obj/structure/closet,/obj/item/clothing/under/soviet,/obj/item/clothing/shoes/boots/jackboots,/obj/item/clothing/head/ushanka,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/simulated/floor/tiled/dark,/area/awaymission/snowfield/base) -"dY" = (/obj/structure/closet/crate/secure/gear,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/obj/item/ammo_magazine/clip/a762,/turf/simulated/floor/tiled/dark,/area/awaymission/snowfield/base) +"dY" = (/obj/structure/closet/crate/secure/gear,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/obj/item/ammo_magazine/clip/c762,/turf/simulated/floor/tiled/dark,/area/awaymission/snowfield/base) "dZ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/simulated/floor/tiled/neutral,/area/awaymission/snowfield/base) "ea" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/structure/closet/crate/internals,/turf/simulated/floor/tiled/neutral,/area/awaymission/snowfield/base) "eb" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/suit/hgpirate,/obj/item/clothing/head/hgpiratecap,/obj/structure/closet/crate/secure/gear,/turf/simulated/floor/tiled/neutral,/area/awaymission/snowfield/base) diff --git a/maps/RandomZLevels/zresearchlabs.dmm b/maps/RandomZLevels/zresearchlabs.dmm index bf373d621e..90faea3d06 100644 --- a/maps/RandomZLevels/zresearchlabs.dmm +++ b/maps/RandomZLevels/zresearchlabs.dmm @@ -287,7 +287,7 @@ "fA" = (/obj/machinery/chem_dispenser,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) "fB" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) "fC" = (/obj/machinery/sleep_console,/obj/machinery/camera{c_tag = "North Solars"; dir = 8; network = "Tcomsat"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) -"fD" = (/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/closet/crate/secure/weapon,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/ammo_magazine/c45,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) +"fD" = (/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/closet/crate/secure/weapon,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/ammo_magazine/m45,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fF" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 2},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fG" = (/obj/machinery/door_control{id = "miningdorm2"; name = "Gateway Door Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/structure/table/reinforced,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) @@ -302,7 +302,7 @@ "fP" = (/obj/effect/landmark/corpse/doctor{mobname = "Amando Cruz"; name = "Amando Cruz"},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) "fQ" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) "fR" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{icon_state = "paper_words"; info = "As per your request, Director, I have documented my findings on the odd mutation growing from Commander Karl's arm. First of all, in this state he cannot go on any kind of missions. The alien flesh is incredibly painful to him and he can barely hold a rifle properly, no less fit into a tight hardsuit. Early analysis of the tissue shows a DNA structure unlike anything I've seen in my fourty-some odd years of medical practice. It's neither human nor Soghun, I can tell you that much. It has a quality you would expect from the lining of internal organs and is incredibly sensitive. Yet, it is also very resilient. It took me about five tries before I was able to stick a syringe through it. And even then I got just enough blood for a test, not a drop more. The wound healed quickly afterwards, as well. Whatever you boys in science are doing, you've stumbled across something, that's for sure."; name = "Unfinished Form"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/militarydivision) -"fS" = (/obj/structure/closet/crate/secure/weapon,/obj/item/ammo_magazine/a357,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) +"fS" = (/obj/structure/closet/crate/secure/weapon,/obj/item/ammo_magazine/m357,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fU" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) "fV" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/militarydivision) @@ -434,7 +434,7 @@ "ir" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/classic_baton,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision) "is" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision) "it" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/awaymission/labs/militarydivision) -"iu" = (/obj/item/ammo_casing/c9mm{pixel_x = 25; pixel_y = -60},/turf/simulated/floor,/area/awaymission/labs/militarydivision) +"iu" = (/obj/item/ammo_casing/a9mm{pixel_x = 25; pixel_y = -60},/turf/simulated/floor,/area/awaymission/labs/militarydivision) "iv" = (/obj/structure/stool/bed/chair/comfy/beige,/turf/simulated/floor,/area/awaymission/labs/militarydivision) "iw" = (/obj/structure/bookcase,/turf/simulated/floor,/area/awaymission/labs/militarydivision) "ix" = (/obj/machinery/camera{c_tag = "Dormitory South"; c_tag_order = 999; dir = 4},/turf/simulated/floor,/area/awaymission/labs/command) @@ -460,7 +460,7 @@ "iR" = (/obj/structure/table/woodentable,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision) "iS" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision) "iT" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/labs/militarydivision) -"iU" = (/obj/item/ammo_casing/c9mm{pixel_x = 3; pixel_y = -22},/turf/simulated/floor,/area/awaymission/labs/militarydivision) +"iU" = (/obj/item/ammo_casing/a9mm{pixel_x = 3; pixel_y = -22},/turf/simulated/floor,/area/awaymission/labs/militarydivision) "iV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/labs/command) "iW" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor,/area/awaymission/labs/command) "iX" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/awaymission/labs/command) @@ -486,8 +486,8 @@ "jr" = (/obj/machinery/camera{c_tag = "Central Hallway South-West"; dir = 8},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision) "js" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision) "jt" = (/obj/structure/table/standard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "We got back from another ship-out today. Those idiots on the NSV Icarus somehow managed to land themselves in the middle of a fleet of pirates. Frigates were downed easily, and they boarded with the intent to take the artillery cannon. Thankfully, those implants the doctors gave us worked like a charm. I think they made me sick, though, I've got this terrible rash on my arm that is a pain to scratch. Making my skin look all pink and nasty. Gonna go see Doc Brown in the monring, I need some rest after all we've been through."; name = "Journal Page"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision) -"ju" = (/obj/item/ammo_casing/c9mm{pixel_y = -8},/turf/simulated/floor,/area/awaymission/labs/militarydivision) -"jv" = (/obj/item/ammo_casing/c9mm{pixel_x = -28; pixel_y = -4},/turf/simulated/floor,/area/awaymission/labs/militarydivision) +"ju" = (/obj/item/ammo_casing/a9mm{pixel_y = -8},/turf/simulated/floor,/area/awaymission/labs/militarydivision) +"jv" = (/obj/item/ammo_casing/a9mm{pixel_x = -28; pixel_y = -4},/turf/simulated/floor,/area/awaymission/labs/militarydivision) "jw" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hos,/turf/simulated/floor,/area/awaymission/labs/militarydivision) "jx" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/labs/command) "jy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/command) @@ -856,7 +856,7 @@ "qx" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian) "qy" = (/obj/structure/barricade/wooden,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian) "qz" = (/obj/machinery/door/airlock/glass{name = "Mess Hall"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian) -"qA" = (/obj/effect/decal/cleanable/blood,/obj/item/ammo_casing/c9mm{pixel_x = 0; pixel_y = -4},/turf/simulated/floor,/area/awaymission/labs/command) +"qA" = (/obj/effect/decal/cleanable/blood,/obj/item/ammo_casing/a9mm{pixel_x = 0; pixel_y = -4},/turf/simulated/floor,/area/awaymission/labs/command) "qB" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/command) "qC" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{icon_state = "paper_words"; info = "

    Research Weekly Report


    As of this day (Dec 26, 2556), the research division of Outpost Zeta has made signifcant strides in the development of safe-to-use nanoaugmentations based upon Soghun genetic structure. Though the unfortunate death of Commander Karl was a result of an earlier, more potent batch, his passing has brought great wisdom to our division and through his dead, infected tissue, we are very close to isolating the gene responsible for the fatal abnormal mutation.

    Should current schedules and effort remain steady, we are expected to produce a far safer serum in no less than seven days. All data has been saved and uploaded to the main company development server via the nearby telecommunications satellite.

    In our firearms department, development of a weapon that fires x-ray beams has proved successful. The weapon is not to be confused with a laser weapon - lasers are primitive tools that simply burn flesh. This weapon is capable of firing toxic beams that poison and harm the target's biological functions, much more painful than a laser burn. Similarly, even after the firefight is over with, or in the event of a retreat, the harmful toxins will remain in the affected individual's bloodstream and cause great discomfort. Your signature and stamp will be required for field tests with the emergency response commandos, Overseer.

    End report.

    -Doctor Jenkins"; name = "Report"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/command) "qD" = (/obj/effect/decal/cleanable/blood/tracks,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/command) @@ -866,7 +866,7 @@ "qH" = (/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/labs/command) "qI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/awaymission/labs/command) "qJ" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/awaymission/labs/command) -"qK" = (/obj/item/ammo_casing/c9mm{pixel_x = 1; pixel_y = 0},/turf/simulated/floor,/area/awaymission/labs/command) +"qK" = (/obj/item/ammo_casing/a9mm{pixel_x = 1; pixel_y = 0},/turf/simulated/floor,/area/awaymission/labs/command) "qL" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/unsimulated/desert,/area/awaymission/labs/cave) "qM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian) "qN" = (/obj/structure/stool/bed/chair,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian) @@ -1047,8 +1047,8 @@ "ug" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security) "uh" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security) "ui" = (/obj/structure/closet/secure_closet/warden,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security) -"uj" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security) -"uk" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/obj/item/weapon/gun/projectile/silenced/sc_silenced{desc = "A sidearm commonly favored by terrestrial security forces."; icon_state = "g115 Pistol"; name = "Pistol"; silenced = 0},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security) +"uj" = (/obj/structure/rack,/obj/item/ammo_magazine/m45,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security) +"uk" = (/obj/structure/rack,/obj/item/ammo_magazine/m45,/obj/item/weapon/gun/projectile/silenced/sc_silenced{desc = "A sidearm commonly favored by terrestrial security forces."; icon_state = "g115 Pistol"; name = "Pistol"; silenced = 0},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security) "ul" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel/med,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical) "um" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security) "un" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security) diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 9f2500853e..221a24b85b 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -3368,7 +3368,7 @@ "bmN" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/flasher/portable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "bmO" = (/obj/machinery/camera/network/security,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "bmP" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) -"bmQ" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/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/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) +"bmQ" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/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/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "bmR" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "bmS" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/security/lobby) "bmT" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) @@ -3460,9 +3460,9 @@ "boB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "boC" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) "boD" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/security/security_equiptment_storage) -"boE" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/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(1)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"boE" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/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(1)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/security/armoury) "boF" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/obj/structure/table/rack,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"boG" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/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/structure/window/reinforced{dir = 8},/obj/item/ammo_magazine/mc9mmt,/obj/machinery/door/window/brigdoor/northleft{name = "LETHALS"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"boG" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/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/structure/window/reinforced{dir = 8},/obj/item/ammo_magazine/m9mmt,/obj/machinery/door/window/brigdoor/northleft{name = "LETHALS"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "boH" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/weapon/storage/box/shotgunshells,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunammo,/obj/machinery/door/window/brigdoor/northright{name = "LETHALS"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "boI" = (/obj/machinery/light,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/door/window/brigdoor/eastleft{dir = 1},/obj/item/weapon/gun/projectile/shotgun/pump{pixel_x = -3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/dark,/area/security/armoury) "boJ" = (/obj/machinery/camera/network/security{dir = 1},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/door/window/brigdoor/northright,/obj/item/weapon/gun/projectile/automatic/wt550,/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -3888,7 +3888,7 @@ "bwN" = (/obj/machinery/door/airlock/maintenance/cargo{req_access = list(50); req_one_access = list(48)},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/quartermaster/delivery) "bwO" = (/turf/simulated/wall,/area/quartermaster/office) "bwP" = (/obj/machinery/door/window/northright,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/camera/network/security{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/range) -"bwQ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/ammo_magazine/clip/a762/practice,/obj/item/ammo_magazine/clip/a762/practice,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/range) +"bwQ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/ammo_magazine/clip/c762/practice,/obj/item/ammo_magazine/clip/c762/practice,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/range) "bwR" = (/obj/machinery/door/window/northright,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/security/range) "bwS" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/range) "bwT" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/tiled/dark,/area/security/range) @@ -4000,8 +4000,8 @@ "byV" = (/obj/structure/bed/chair/comfy/brown,/obj/structure/noticeboard{pixel_y = 27},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/brown/border{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/office) "byW" = (/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 8},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled/white,/area/medical/reception) "byX" = (/obj/structure/table/reinforced,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/tiled,/area/security/range) -"byY" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/blanks{pixel_x = 2; pixel_y = -2},/obj/item/weapon/storage/box/blanks,/obj/item/ammo_magazine/clip/a762/practice,/turf/simulated/floor/tiled,/area/security/range) -"byZ" = (/obj/structure/table/reinforced,/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,/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/security/range) +"byY" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/blanks{pixel_x = 2; pixel_y = -2},/obj/item/weapon/storage/box/blanks,/obj/item/ammo_magazine/clip/c762/practice,/turf/simulated/floor/tiled,/area/security/range) +"byZ" = (/obj/structure/table/reinforced,/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,/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/security/range) "bza" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled,/area/security/range) "bzb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/security/range) "bzc" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/hallway) diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index 692c9c2e78..9c04bd82cf 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -257,12 +257,12 @@ "eW" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "eX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel,/area/centcom/control) "eY" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor/steel,/area/centcom/control) -"eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556/ap,/obj/item/ammo_magazine/m556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fa" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fb" = (/obj/machinery/door/blast/regular{id = "HEAVY"; name = "HEAVY ORDINANCE"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fc" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"fd" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml,/obj/item/ammo_magazine/mc9mml/ap,/obj/item/ammo_magazine/mc9mml/ap,/obj/item/ammo_magazine/mc9mml/ap,/obj/item/ammo_magazine/mc9mml/ap,/obj/machinery/button/remote/blast_door{id = "ArmouryC4"; name = "Armoury Access"; pixel_x = 0; pixel_y = 28; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"fe" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/item/ammo_magazine/p90,/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"fd" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml,/obj/item/ammo_magazine/m9mml/ap,/obj/item/ammo_magazine/m9mml/ap,/obj/item/ammo_magazine/m9mml/ap,/obj/item/ammo_magazine/m9mml/ap,/obj/machinery/button/remote/blast_door{id = "ArmouryC4"; name = "Armoury Access"; pixel_x = 0; pixel_y = 28; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"fe" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "ff" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/obj/item/ammo_magazine/battlerifle,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fg" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/shotgunammo/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fh" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/item/weapon/storage/box/beanbags/large,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -306,9 +306,9 @@ "fT" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "fU" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fV" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/heavysniper,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"fW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"fX" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"fY" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"fW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"fX" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"fY" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/obj/item/weapon/storage/box/shotgunshells/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "ga" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/energy/netgun,/obj/item/weapon/gun/energy/netgun,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "gb" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/frags,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -332,7 +332,7 @@ "gt" = (/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod1/centcom) "gu" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/shuttle/large_escape_pod1/centcom) "gv" = (/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 8},/obj/machinery/light/flamp/noshade,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/centcom/evac) -"gw" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/obj/item/ammo_magazine/s762/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"gw" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/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/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "gx" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "gy" = (/obj/machinery/button/remote/blast_door{id = "HEAVY"; name = "SHIT IS LIT"; pixel_x = 0; pixel_y = -28; req_access = list(3)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "gz" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/obj/item/weapon/cell/device/weapon{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) diff --git a/maps/tether/tether-07-misc.dmm b/maps/tether/tether-07-misc.dmm index 3b9a89a288..49ebea0ce3 100644 --- a/maps/tether/tether-07-misc.dmm +++ b/maps/tether/tether-07-misc.dmm @@ -785,14 +785,14 @@ "pe" = (/turf/unsimulated/mineral{icon = 'icons/turf/transit_vr.dmi'; icon_state = "rock"},/area/space) "pf" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pg" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/xray,/obj/item/weapon/gun/energy/xray,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"ph" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/effect/floor_decal/corner/red{dir = 5},/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/ap,/obj/item/ammo_magazine/c762/ap,/obj/item/ammo_magazine/c762/ap,/obj/item/ammo_magazine/c762/ap,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"ph" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/effect/floor_decal/corner/red{dir = 5},/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/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pi" = (/obj/structure/table/glass,/obj/item/weapon/handcuffs/fuzzy,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "pj" = (/turf/unsimulated/wall{icon = 'icons/turf/transit_vr.dmi'},/area/space) "pk" = (/obj/effect/floor_decal/transit/orange{dir = 8},/turf/unsimulated/floor/techfloor_grid{icon = 'icons/turf/transit_vr.dmi'},/area/space) "pl" = (/turf/unsimulated/floor/techfloor_grid{icon = 'icons/turf/transit_vr.dmi'},/area/space) "pm" = (/obj/effect/floor_decal/transit/orange{dir = 4},/turf/unsimulated/floor/techfloor_grid{icon = 'icons/turf/transit_vr.dmi'},/area/space) "pn" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red{dir = 10},/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"po" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/gyropistol,/obj/item/weapon/gun/projectile/gyropistol,/obj/item/ammo_magazine/a75,/obj/item/ammo_magazine/a75,/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"po" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/gyropistol,/obj/item/weapon/gun/projectile/gyropistol,/obj/item/ammo_magazine/m75,/obj/item/ammo_magazine/m75,/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pp" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/effect/floor_decal/corner/red{dir = 10},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pq" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) "pr" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/turf/unsimulated/floor{icon_state = "lino"},/area/antag/antag_base) @@ -814,7 +814,7 @@ "pH" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/antag_space/transit) "pI" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pJ" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/table/rack,/obj/item/weapon/gun/launcher/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"pK" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/effect/floor_decal/corner/red{dir = 5},/obj/item/ammo_magazine/a556/ap,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"pK" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/effect/floor_decal/corner/red{dir = 5},/obj/item/ammo_magazine/m556/ap,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pL" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pM" = (/obj/structure/flora/pottedplant{icon_state = "plant-21"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pN" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; req_one_access = list(150)},/turf/unsimulated/floor{icon_state = "lino"},/area/antag/antag_base) @@ -825,7 +825,7 @@ "pS" = (/turf/space/transit/north/shuttlespace_ns1,/area/shuttle/antag_space/transit) "pT" = (/obj/effect/floor_decal/transit/orange{dir = 8},/obj/effect/transit/light{dir = 8},/turf/unsimulated/floor/techfloor_grid{icon = 'icons/turf/transit_vr.dmi'},/area/space) "pU" = (/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"pV" = (/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/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,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"pV" = (/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/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,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pW" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/item/weapon/gun/projectile/silenced,/obj/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pX" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "pY" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/obj/effect/floor_decal/borderfloorblack{dir = 9},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) @@ -837,7 +837,7 @@ "qe" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/antag_ground/base) "qf" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/antag_space/base) "qg" = (/obj/effect/floor_decal/transit/orange{dir = 4},/obj/effect/transit/light{dir = 4},/turf/unsimulated/floor/techfloor_grid{icon = 'icons/turf/transit_vr.dmi'},/area/space) -"qh" = (/obj/structure/table/rack,/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/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/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"qh" = (/obj/structure/table/rack,/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/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/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "qi" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/effect/floor_decal/corner/red{dir = 9},/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "qj" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "qk" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) @@ -973,7 +973,7 @@ "sK" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "sL" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "sM" = (/obj/machinery/atmospherics/unary/freezer,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"sN" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/deagle,/obj/item/ammo_magazine/a50,/obj/item/ammo_magazine/a50,/obj/item/ammo_magazine/a50,/obj/item/ammo_magazine/a50,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"sN" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/deagle,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "sO" = (/obj/machinery/chemical_dispenser/full,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "sP" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "sQ" = (/obj/structure/closet/athletic_mixed,/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base) diff --git a/maps/virgo/virgo-1.dmm b/maps/virgo/virgo-1.dmm index 80a0a1ccf0..77cc044fa7 100644 --- a/maps/virgo/virgo-1.dmm +++ b/maps/virgo/virgo-1.dmm @@ -1274,7 +1274,7 @@ "ayz" = (/turf/simulated/wall,/area/maintenance/pool) "ayA" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) "ayB" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/effect/decal/cleanable/cobweb2,/obj/effect/landmark{name = "blobstart"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/pool) -"ayC" = (/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) +"ayC" = (/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) "ayD" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/turf/simulated/floor/tiled/dark,/area/security/armoury) "ayE" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Fore"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury) "ayF" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) @@ -1358,7 +1358,7 @@ "aAf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig) "aAg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig) "aAh" = (/obj/effect/floor_decal/corner/red,/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/tiled,/area/security/brig) -"aAi" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/machinery/door/window/brigdoor/eastright{name = "Spare Equipment"; req_access = list(3)},/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/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"aAi" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/machinery/door/window/brigdoor/eastright{name = "Spare Equipment"; req_access = list(3)},/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/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/obj/item/clothing/suit/armor/vest/alt,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "aAj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) "aAk" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/brigdoor/southleft{id = "Cell 1"; name = "Cell 1"; req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) "aAl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/prison) @@ -1797,7 +1797,7 @@ "aIC" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/item/weapon/gun/energy/laser/practice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/range) "aID" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/security/range) "aIE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/range) -"aIF" = (/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) +"aIF" = (/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) "aIG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/lobby) "aIH" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/security{c_tag = "SEC - Lobby"; dir = 4},/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/tiled,/area/security/lobby) "aII" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/lobby) @@ -2493,7 +2493,7 @@ "aVW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_two) "aVX" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/machinery/atm{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "aVY" = (/turf/simulated/wall,/area/crew_quarters/coffee_shop) -"aVZ" = (/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"; req_access = list(3)},/obj/structure/window/reinforced{dir = 8},/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical) +"aVZ" = (/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"; req_access = list(3)},/obj/structure/window/reinforced{dir = 8},/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical) "aWa" = (/turf/simulated/wall,/area/ai_monitored/storage/emergency/eva) "aWb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/ai_monitored/storage/emergency/eva) "aWc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/ai_monitored/storage/emergency/eva) @@ -3110,7 +3110,7 @@ "bhP" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bhQ" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bhR" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) -"bhS" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/ammo_magazine/clip/a762/practice,/obj/item/ammo_magazine/clip/a762/practice,/obj/item/ammo_magazine/clip/a762/practice,/obj/item/ammo_magazine/clip/a762/practice,/turf/simulated/floor/tiled,/area/security/range) +"bhS" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice,/obj/item/ammo_magazine/clip/c762/practice,/obj/item/ammo_magazine/clip/c762/practice,/obj/item/ammo_magazine/clip/c762/practice,/obj/item/ammo_magazine/clip/c762/practice,/turf/simulated/floor/tiled,/area/security/range) "bhT" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/britcup,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/medical,/obj/item/weapon/reagent_containers/food/drinks/britcup,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bhU" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bhV" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) diff --git a/maps/virgo/virgo-2.dmm b/maps/virgo/virgo-2.dmm index f9b08bf922..659333b29d 100644 --- a/maps/virgo/virgo-2.dmm +++ b/maps/virgo/virgo-2.dmm @@ -918,7 +918,7 @@ "arH" = (/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) "arI" = (/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) "arJ" = (/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) -"arK" = (/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) +"arK" = (/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) "arL" = (/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) "arM" = (/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) "arN" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -934,11 +934,11 @@ "arX" = (/obj/machinery/door/airlock/centcom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "arY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_fore"; name = "forward docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) "arZ" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) -"asa" = (/obj/structure/table/rack,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"asa" = (/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) "asb" = (/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) "asc" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"asd" = (/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) -"ase" = (/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) +"asd" = (/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) +"ase" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "asf" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "asg" = (/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) "ash" = (/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) @@ -964,7 +964,7 @@ "asB" = (/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) "asC" = (/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) "asD" = (/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) -"asE" = (/obj/structure/table/rack,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/s762,/obj/item/ammo_magazine/s762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"asE" = (/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/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "asF" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "asG" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "asH" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -1022,7 +1022,7 @@ "atH" = (/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) "atI" = (/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) "atJ" = (/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) -"atK" = (/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) +"atK" = (/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) "atL" = (/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) "atM" = (/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) "atN" = (/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) @@ -1142,7 +1142,7 @@ "avX" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "avY" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "avZ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) -"awa" = (/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) +"awa" = (/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) "awb" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "awc" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "awd" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) @@ -1294,8 +1294,8 @@ "ayT" = (/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) "ayU" = (/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) "ayV" = (/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) -"ayW" = (/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) -"ayX" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c556/ext,/obj/item/ammo_magazine/c556/ext,/obj/item/ammo_magazine/c556/ext,/obj/item/ammo_magazine/c556/ext,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"ayW" = (/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) +"ayX" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m556/ext,/obj/item/ammo_magazine/m556/ext,/obj/item/ammo_magazine/m556/ext,/obj/item/ammo_magazine/m556/ext,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ayY" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "ayZ" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) "aza" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start) From 56268171d4ba1a259967b0bba0876befd595ab24 Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 2 Jun 2017 07:56:09 -0400 Subject: [PATCH 074/261] Fix issues with radiation controller on multi-z maps. Radiation sources are by design z-level specific, the ray trace check needs to respect this. --- code/datums/repositories/radiation.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 5471282026..0245bb801c 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -46,6 +46,8 @@ var/global/repository/radiation/radiation_repository = new() var/datum/radiation_source/source = value if(source.rad_power < .) continue // Already being affected by a stronger source + if(source.source_turf.z != T.z) + continue // Radiation is not multi-z var/dist = get_dist(source.source_turf, T) if(dist > source.range) continue // Too far to possibly affect From de30b00c9e685ee1a5cdd2128e8c2f0ef4688b1d Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 2 Jun 2017 13:39:44 -0400 Subject: [PATCH 075/261] Fixed damaged and burnt plating icons. * We are using eris sprites, which have a shared overlay for broken/burnt between all tile types. --- code/game/turfs/simulated/floor_icon.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm index 007108c72e..dadb173d99 100644 --- a/code/game/turfs/simulated/floor_icon.dm +++ b/code/game/turfs/simulated/floor_icon.dm @@ -71,9 +71,9 @@ var/list/flooring_cache = list() icon_state = "dmg[rand(1,4)]" else if(flooring) if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK)) - overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]") + overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]") // VOREStation Edit - Eris overlays if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN)) - overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]") + overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]") // VOREStation Edit - Eris overlays if(weather_overlay) overlays += weather_overlay From 72c8b745ddcf2a640f397685e2ec3c597ae93402 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 2 Jun 2017 19:18:29 +0100 Subject: [PATCH 076/261] Fixes an advanced medical scanner bug --- code/game/machinery/adv_med.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index b1cf9bac08..ed3ea420b3 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -287,8 +287,9 @@ var/bloodData[0] if(H.vessel) var/blood_volume = round(H.vessel.get_reagent_amount("blood")) + var/blood_max = H.species.blood_volume bloodData["volume"] = blood_volume - bloodData["percent"] = round(((blood_volume / 560)*100)) + bloodData["percent"] = round(((blood_volume / blood_max)*100)) occupantData["blood"] = bloodData From 7a9a12959269d1c54f2532c618f366d4c1e80523 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 2 Jun 2017 19:08:30 +0100 Subject: [PATCH 077/261] Adds a set of new traits regarding susceptibility to electric shocks --- .../human/species/station/traits_vr/negative.dm | 12 ++++++++++++ .../human/species/station/traits_vr/positive.dm | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 647a070dff..704cd21199 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -56,6 +56,18 @@ cost = -2 var_changes = list("burn_mod" = 1.30) +/datum/trait/conductive + name = "Conductive (Minor)" + desc = "Increases your susceptibility to electric shocks by a small amount." + cost = -1 + var_changes = list("siemens_coefficient" = 1.15) + +/datum/trait/conductiveplus + name = "Non-Conductive (Major)" + desc = "Increases your susceptibility to electric shocks by a moderate amount." + cost = -2 + var_changes = list("siemens_coefficient" = 1.3) + /datum/trait/photosensitive name = "Photosensitive" desc = "Increases stun duration from flashes and other light-based stuns." diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 93a9d1911f..e92f667867 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -32,6 +32,18 @@ ..(S,H) H.setMaxHealth(S.total_health) +/datum/trait/nonconductive + name = "Non-Conductive (Minor)" + desc = "Decreases your susceptibility to electric shocks by a small amount." + cost = 1 + var_changes = list("siemens_coefficient" = 0.85) + +/datum/trait/nonconductiveplus + name = "Non-Conductive (Major)" + desc = "Decreases your susceptibility to electric shocks by a moderate amount." + cost = 2 + var_changes = list("siemens_coefficient" = 0.7) + /datum/trait/darksight name = "Darksight" desc = "Allows you to see a short distance in the dark." From 57354a539bcc3f48fb6b4d930365bf90cb745159 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 3 Jun 2017 00:36:30 -0400 Subject: [PATCH 078/261] Fix Airlock Pills Copy-paste error! --- maps/tether/tether_things.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index 3c2cc0ad02..7652317582 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -307,7 +307,7 @@ var/global/list/latejoin_tram = list() desc = "Neutralizes toxins and provides a mild alangesic effect." icon_state = "pill2" -/obj/item/weapon/reagent_containers/pill/antitox/New() +/obj/item/weapon/reagent_containers/pill/airlock/New() ..() reagents.add_reagent("anti_toxin", 15) reagents.add_reagent("paracetamol", 5) From 4e6a5ab55b1e51daa4172537463e08d2cfa9377f Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 3 Jun 2017 01:15:27 -0400 Subject: [PATCH 079/261] Adds "treadwell" engiborg sprite. --- .../mob/living/silicon/robot/robot_modules.dm | 3 ++- icons/mob/robots.dmi | Bin 362727 -> 363965 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 4b2c7f6f79..1dc391f478 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -334,7 +334,8 @@ var/global/list/robot_modules = list( "Antique" = "engineerrobot", "Landmate" = "landmate", "Landmate - Treaded" = "engiborg+tread", - "Drone" = "drone-engineer" + "Drone" = "drone-engineer", + "Treadwell" = "treadwell" ) /obj/item/weapon/robot_module/robot/engineering/construction diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 2b3dfe51d82b11cd8275bbcc5f1b0a06d6a8fabc..e742bdc8040bcca702513ab219e717d6cecc0d53 100644 GIT binary patch delta 17860 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 CEY*1c delta 16613 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 IH%xs04?MVJ6aWAK From 5ce5f87d4efa42c007a3a0acccf3381ff9957978 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 2 Jun 2017 19:28:20 +0100 Subject: [PATCH 080/261] Fixes the printout too --- code/game/machinery/adv_med.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index ed3ea420b3..f980cfd0b1 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -460,7 +460,8 @@ if(occupant.vessel) var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) - var/blood_percent = blood_volume / 560 + var/blood_max = occupant.species.blood_volume + var/blood_percent = blood_volume / blood_max blood_percent *= 100 extra_font = " 448 ? "blue" : "red"]>" From fc1bffdfb6c2fcab4f4c87043fd5dc8a7cd6cd81 Mon Sep 17 00:00:00 2001 From: SpoopyLizz Date: Sat, 3 Jun 2017 15:59:45 +0200 Subject: [PATCH 081/261] Egg laying implant, yo! --- code/modules/food/recipes_microwave_vr.dm | 21 +++ .../vore/fluffstuff/custom_items_vr.dm | 134 ++++++++++++++++++ icons/vore/custom_items_vr.dmi | Bin 39226 -> 40277 bytes 3 files changed, 155 insertions(+) diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm index 641f02d31f..8375e4e964 100644 --- a/code/modules/food/recipes_microwave_vr.dm +++ b/code/modules/food/recipes_microwave_vr.dm @@ -93,3 +93,24 @@ /obj/item/weapon/reagent_containers/food/snacks/meat ) result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken + +/datum/recipe/chocroizegg + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/egg/roiz + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz + +/datum/recipe/friedroizegg + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg/roiz + ) + result = /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz + +/datum/recipe/boiledroizegg + reagents = list("water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg/roiz + ) + result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 12ba4639a1..9a93138c23 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -710,6 +710,140 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie do_reagent_implant(usr) +//SpoopyLizz: Roiz Lizden +//I made this! Woo! +//implant +//-------------------- +/obj/item/weapon/implant/reagent_generator/roiz + name = "egg laying implant" + desc = "This is an implant that allows the user to lay eggs." + generated_reagent = "egg" + usable_volume = 500 + transfer_amount = 50 + + empty_message = list("Your lower belly feels smooth and empty. Sorry, we're out of eggs!", "The reduced pressure in your lower belly tells you there are no more eggs.") + full_message = list("Your lower belly looks swollen with irregular bumps, and it feels heavy.", "Your lower abdomen feels really heavy, making it a bit hard to walk.") + emote_descriptor = list("an egg right out of Roiz's lower belly!", "into Roiz' belly firmly, forcing him to lay an egg!", "Roiz really tight, who promptly lays an egg!") + var/verb_descriptor = list("squeezes", "pushes", "hugs") + var/self_verb_descriptor = list("squeeze", "push", "hug") + var/short_emote_descriptor = list("lays", "forces out", "pushes out") + self_emote_descriptor = list("lay", "force out", "push out") + random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little") + assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_roiz + +/obj/item/weapon/implanter/reagent_generator/roiz + implant_type = /obj/item/weapon/implant/reagent_generator/roiz + +/mob/living/carbon/human/proc/use_reagent_implant_roiz() + set name = "Lay Egg" + set desc = "Force Roiz to lay an egg by squeezing into his lower body! This makes the lizard extremely embarrassed, and it looks funny." + set category = "Object" + set src in view(1) + + //do_reagent_implant(usr) + if(!isliving(usr) || !usr.canClick()) + return + + if(usr.incapacitated() || usr.stat > CONSCIOUS) + return + + var/obj/item/weapon/implant/reagent_generator/roiz/rimplant + for(var/I in src.contents) + if(istype(I, /obj/item/weapon/implant/reagent_generator)) + rimplant = I + break + if (rimplant) + if(rimplant.reagents.total_volume <= rimplant.transfer_amount) + to_chat(src, "[pick(rimplant.empty_message)]") + return + + var/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/egg = new(get_turf(src)) + + var/index = rand(0,3) + + if (usr != src) + var/emote = rimplant.emote_descriptor[index] + var/verb_desc = rimplant.verb_descriptor[index] + var/self_verb_desc = rimplant.self_verb_descriptor[index] + usr.visible_message("[usr] [verb_desc] [emote]", + "You [self_verb_desc] [emote]") + else + src.visible_message("[src] [pick(rimplant.short_emote_descriptor)] an egg.", + "You [pick(rimplant.self_emote_descriptor)] an egg.") + if(prob(15)) + src.visible_message("[src] [pick(rimplant.random_emote)].") // M-mlem. + + rimplant.reagents.remove_reagent(rimplant.generated_reagent, rimplant.transfer_amount) + +//Egg item +//------------- +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz + name = "lizard egg" + desc = "It's a large lizard egg." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "egg_roiz" + filling_color = "#FDFFD1" + volume = 12 + center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/New() + ..() + reagents.add_reagent("egg", 9) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/afterattack(obj/O as obj, mob/user as mob, proximity) + if(istype(O,/obj/machinery/microwave)) + return ..() + if(!(proximity && O.is_open_container())) + return + user << "You crack \the [src] into \the [O]." + reagents.trans_to(O, reagents.total_volume) + user.drop_from_inventory(src) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/throw_impact(atom/hit_atom) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz + name = "fried lizard egg" + desc = "A large, fried lizard egg, with a touch of salt and pepper. It looks rather chewy." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "friedegg" + center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz/New() + ..() + reagents.add_reagent("protein", 9) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz + name = "boiled lizard egg" + desc = "A hard boiled lizard egg. Be careful, a lizard detective may hatch!" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "egg_roiz" + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz/New() + ..() + reagents.add_reagent("protein", 6) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz + name = "chocolate lizard egg" + desc = "Such huge, sweet, fattening food." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "chocolateegg_roiz" + filling_color = "#7D5F46" + center_of_mass = list("x"=16, "y"=13) + nutriment_amt = 3 + nutriment_desc = list("chocolate" = 5) + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz/New() + ..() + reagents.add_reagent("sugar", 6) + reagents.add_reagent("coco", 6) + reagents.add_reagent("milk", 2) + bitesize = 6 + //PontifexMinimus: Lucius/Lucia Null /obj/item/weapon/fluff/dragor_dot name = "supplemental battery" diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 1131ce4a1a337797609fb40b71fccf5df99e48bb..2212f07472d60339888878abf1489101dcaa8fb8 100644 GIT binary patch delta 19836 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 From 3a751fd403cf9befe59d6e579c3e9f2c4b6609cc Mon Sep 17 00:00:00 2001 From: Anewbe Date: Sat, 3 Jun 2017 18:30:16 -0500 Subject: [PATCH 082/261] Teshari can now be cloned properly --- code/game/machinery/cloning.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 1c3d957b98..1a1bd9a463 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -181,7 +181,7 @@ use_power(7500) //This might need tweaking. return - else if((occupant.health >= heal_level) && (!eject_wait)) + else if((occupant.health >= heal_level || occupant.health == occupant.maxHealth) && (!eject_wait)) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) audible_message("\The [src] signals that the cloning process is complete.") connected_message("Cloning Process Complete.") From e2860b30b3465e47b00d7fa5ae1083a18be8a5df Mon Sep 17 00:00:00 2001 From: Anewbe Date: Sat, 3 Jun 2017 19:42:17 -0500 Subject: [PATCH 083/261] Fixes a runtime --- code/modules/mob/living/carbon/human/human.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6edc754447..ba7aed0250 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -305,7 +305,7 @@ //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere /mob/living/carbon/human/proc/get_visible_name() - if( mind.changeling && mind.changeling.cloaked) + if( mind && mind.changeling && mind.changeling.cloaked) return "Unknown" if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible return get_id_name("Unknown") From 5daea1a43d7ae19278fa8c64db7dae14c657d773 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 4 Jun 2017 02:40:58 +0100 Subject: [PATCH 084/261] Lazyports artifact containers from Bay --- code/_onclick/drag_drop.dm | 10 +++++ .../xenoarcheaology/anomaly_container.dm | 43 +++++++++++++++++++ polaris.dme | 1 + 3 files changed, 54 insertions(+) create mode 100644 code/modules/xenoarcheaology/anomaly_container.dm diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 42a0574f4d..65974fe009 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -5,6 +5,16 @@ recieving object instead, so that's the default action. This allows you to drag almost anything into a trash can. */ + +/atom/proc/CanMouseDrop(atom/over, var/mob/user = usr) + if(!user || !over) + return FALSE + if(user.incapacitated()) + return FALSE + if(!src.Adjacent(user) || !over.Adjacent(user)) + return FALSE // should stop you from dragging through windows + return TRUE + /atom/MouseDrop(atom/over) if(!usr || !over) return if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm new file mode 100644 index 0000000000..616b04b10d --- /dev/null +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -0,0 +1,43 @@ +/obj/structure/anomaly_container + name = "anomaly container" + desc = "Used to safely contain and move anomalies." + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "anomaly_container" + density = 1 + + var/obj/machinery/artifact/contained + +/obj/structure/anomaly_container/initialize() + ..() + + var/obj/machinery/artifact/A = locate() in loc + if(A) + contain(A) + +/obj/structure/anomaly_container/attack_hand(var/mob/user) + release() + +/obj/structure/anomaly_container/attack_robot(var/mob/user) + if(Adjacent(user)) + release() + +/obj/structure/anomaly_container/proc/contain(var/obj/machinery/artifact/artifact) + if(contained) + return + contained = artifact + artifact.forceMove(src) + underlays += image(artifact) + desc = "Used to safely contain and move anomalies. \The [contained] is kept inside." + +/obj/structure/anomaly_container/proc/release() + if(!contained) + return + contained.dropInto(src) + contained = null + underlays.Cut() + desc = initial(desc) + +/obj/machinery/artifact/MouseDrop(var/obj/structure/anomaly_container/over_object) + if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) + Bumped(usr) + over_object.contain(src) \ No newline at end of file diff --git a/polaris.dme b/polaris.dme index 3d82655c4e..59cf36b9e8 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2120,6 +2120,7 @@ #include "code\modules\virus2\helpers.dm" #include "code\modules\virus2\isolator.dm" #include "code\modules\virus2\items_devices.dm" +#include "code\modules\xenoarcheaology\anomaly_container.dm" #include "code\modules\xenoarcheaology\boulder.dm" #include "code\modules\xenoarcheaology\effect.dm" #include "code\modules\xenoarcheaology\manuals.dm" From 70dc75496deda712019628314e8e5bfa3f5566bf Mon Sep 17 00:00:00 2001 From: Dhaeleena Date: Sun, 4 Jun 2017 10:55:32 -0300 Subject: [PATCH 085/261] Fixes pipes on the recreation area showers. Adds extra mining locker to mining, Fixes telecom access areas and areas naming also fixes one turret that was lethal instead of stun. Syndi-fox is now called Rick, Aronai is butted. --- maps/tether/tether-01-surface.dmm | 216 +++++++++++++++--------------- maps/tether/tether-04-mining.dmm | 8 +- maps/tether/tether-07-misc.dmm | 2 +- 3 files changed, 113 insertions(+), 113 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 582960bcc9..a9046f15e7 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -101,7 +101,7 @@ "abW" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "abX" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "abY" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) -"abZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) +"abZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "aca" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/machinery/alarm{pixel_y = 22},/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "acb" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/item/device/radio/intercom{pixel_y = 24; req_access = list()},/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "acc" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) @@ -1727,8 +1727,8 @@ "aHk" = (/obj/structure/ladder/up,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/maintenance/lower/research) "aHl" = (/obj/structure/railing{dir = 8},/obj/structure/railing,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/random/junk,/obj/random/junk,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "aHm" = (/turf/simulated/mineral,/area/rnd/external) -"aHn" = (/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/turf/simulated/floor/outdoors/grass/sif/virgo3b,/area/rnd/external) -"aHo" = (/obj/machinery/camera/network/research{dir = 2},/obj/machinery/floodlight,/turf/simulated/floor/outdoors/grass/sif/virgo3b,/area/rnd/external) +"aHn" = (/turf/simulated/wall,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"aHo" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "aHp" = (/obj/structure/railing,/obj/structure/railing{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "aHq" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "aHr" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/processing) @@ -2740,7 +2740,7 @@ "baJ" = (/obj/structure/cable{icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/rnd) "baK" = (/obj/effect/floor_decal/corner_techfloor_grid/full{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "baL" = (/obj/effect/floor_decal/corner_techfloor_grid{dir = 5},/obj/structure/cable{icon_state = "2-4"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) -"baM" = (/obj/effect/floor_decal/corner_techfloor_grid{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) +"baM" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "baN" = (/obj/effect/floor_decal/corner_techfloor_grid{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/mob/living/simple_animal/mouse,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "baO" = (/obj/structure/railing{dir = 4},/obj/effect/floor_decal/corner_techfloor_grid{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "baP" = (/obj/structure/catwalk,/obj/structure/cable{icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) @@ -2874,7 +2874,7 @@ "bdn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/command{name = "Server Room"; req_access = list(30)},/turf/simulated/floor/tiled/steel_grid,/area/server) "bdo" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/yellow/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bdp" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/machinery/light_switch{pixel_x = 25},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) -"bdq" = (/turf/simulated/wall,/area/engineering/drone_fabrication) +"bdq" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bdr" = (/obj/effect/floor_decal/corner/yellow{dir = 6},/obj/effect/floor_decal/corner/yellow{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/engivend,/turf/simulated/floor/tiled/monotile,/area/engineering/atmos/hallway) "bds" = (/obj/effect/floor_decal/corner/yellow{dir = 6},/obj/effect/floor_decal/corner/yellow{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/tool,/turf/simulated/floor/tiled/monotile,/area/engineering/atmos/hallway) "bdt" = (/turf/simulated/wall,/area/engineering/lower/atmos_lockers) @@ -3327,7 +3327,7 @@ "blY" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Telecomms Subgrid"; name_tag = "Telecomms Subgrid"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/tcomms) "blZ" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/substation/tcomms) "bma" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/tcomms) -"bmb" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"bmb" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bmc" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmd" = (/obj/structure/filingcabinet,/obj/machinery/status_display{pixel_y = 30},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bme" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) @@ -3335,27 +3335,27 @@ "bmg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmh" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmi" = (/obj/effect/floor_decal/techfloor,/obj/machinery/camera/network/engineering{dir = 1},/obj/structure/dispenser{phorontanks = 0},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) -"bmj" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) +"bmj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bmk" = (/turf/simulated/mineral,/area/space) -"bml" = (/turf/simulated/wall/r_wall,/area/tcomfoyer) -"bmm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcomfoyer) +"bml" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable{icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bmn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmp" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmr" = (/obj/machinery/computer/telecomms/monitor{dir = 8; network = "tcommsat"},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bms" = (/obj/machinery/door/airlock/maintenance/rnd{name = "Elavator Maintenance Access"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/rnd/breakroom) -"bmt" = (/obj/structure/sign/department/telecoms,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) -"bmu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/decal/cleanable/cobweb,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmv" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmw" = (/obj/machinery/porta_turret{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/tcomfoyer) -"bmx" = (/obj/machinery/camera/network/telecom,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) -"bmy" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcomfoyer) -"bmz" = (/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecomms Central Compartment"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) -"bmA" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61)},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmB" = (/obj/machinery/camera/network/telecom,/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmD" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "1-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmx" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmy" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) +"bmz" = (/obj/effect/floor_decal/corner_techfloor_grid{dir = 5},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/rack,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) +"bmA" = (/turf/simulated/wall/r_wall,/area/engineering/drone_fabrication) +"bmB" = (/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/rnd/external) +"bmC" = (/obj/machinery/camera/network/research{dir = 2},/obj/machinery/floodlight,/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/rnd/external) +"bmD" = (/turf/simulated/wall/r_wall,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bmE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera/network/telecom{dir = 4},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmG" = (/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -3364,18 +3364,18 @@ "bmJ" = (/obj/machinery/computer/telecomms/server{dir = 8; network = "tcommsat"},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmK" = (/obj/structure/catwalk,/obj/effect/floor_decal/techfloor/corner,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bmL" = (/obj/structure/catwalk,/obj/effect/floor_decal/techfloor{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) -"bmM" = (/obj/machinery/door/airlock/highsecurity{name = "Telecomms Access"; req_one_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmO" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmP" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecomms Foyer"; req_one_access = list(61)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bmR" = (/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmT" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/tcomfoyer) -"bmU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tcomfoyer) -"bmX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bmM" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bmN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmO" = (/obj/machinery/porta_turret{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmP" = (/obj/machinery/camera/network/telecom,/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmQ" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmR" = (/obj/machinery/turretid/lethal{ailock = 1; check_synth = 1; control_area = "\improper Telecomms Central Compartment"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms lethal turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61); req_one_access = list(12)},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber) +"bmS" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bmT" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_x = 29; pixel_y = 0; req_access = list(61); req_one_access = list(12)},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmU" = (/obj/structure/sign/department/telecoms,/turf/simulated/wall/r_wall,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bmV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/decal/cleanable/cobweb,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bmW" = (/obj/machinery/camera/network/telecom,/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bmX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bmY" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bmZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "bna" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -3385,15 +3385,15 @@ "bne" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "bnf" = (/obj/structure/railing{dir = 1},/obj/effect/floor_decal/techfloor{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bng" = (/obj/structure/railing{dir = 1},/obj/effect/floor_decal/techfloor{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) -"bnh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bni" = (/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnj" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled,/area/tcommsat/entrance) -"bnk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnl" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{req_access = list(61)},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bno" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnp" = (/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,/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnh" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bni" = (/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnk" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnm" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bnn" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bno" = (/obj/machinery/door/airlock/highsecurity{name = "Telecomms Access"; req_one_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bnp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) "bnq" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bnr" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer_1"; set_temperature = 73; use_power = 1},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bns" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) @@ -3401,20 +3401,20 @@ "bnu" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_outer"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/chamber) "bnv" = (/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "server_access_sensor"; pixel_x = 12; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1381; id_tag = "server_access_pump"},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{frequency = 1381; id_tag = "server_access_airlock"; name = "Server Access Airlock"; pixel_x = 0; pixel_y = 25; tag_airpump = "server_access_pump"; tag_chamber_sensor = "server_access_sensor"; tag_exterior_door = "server_access_outer"; tag_exterior_sensor = "server_access_ex_sensor"; tag_interior_door = "server_access_inner"; tag_interior_sensor = "server_access_in_sensor"; tag_secure = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"bnx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bny" = (/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnz" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -28},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/tcomfoyer) -"bnA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/tcomfoyer) +"bnx" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bny" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnz" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecomms Foyer"; req_access = list(61); req_one_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bnB" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnC" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/manifold/hidden/black,/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnD" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnE" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/chamber) "bnF" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/plating,/area/tcommsat/chamber) -"bnG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/tcomfoyer) +"bnG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bnH" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 10},/obj/effect/floor_decal/industrial/warning/dust/corner{dir = 4},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake) "bnI" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/effect/floor_decal/industrial/warning/dust{dir = 1},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake) -"bnJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance) -"bnK" = (/obj/machinery/door/airlock/glass{name = "Telecomms Storage"; req_access = list(61); req_one_access = newlist()},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) +"bnJ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bnL" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnM" = (/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc/super/critical{dir = 1; name = "north bump"; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnN" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -3426,30 +3426,30 @@ "bnT" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381; id_tag = "server_access_in_sensor"; name = "interior sensor"; pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnU" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bnV" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bnW" = (/turf/simulated/floor/tiled/dark,/area/tcomfoyer) -"bnX" = (/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,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) -"bnY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcomfoyer) -"bnZ" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/tiled/dark,/area/tcomfoyer) +"bnW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{req_access = list(61)},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bnY" = (/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bnZ" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) "boa" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bob" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boc" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/molten_item,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"boe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bof" = (/turf/simulated/wall/r_wall,/area/tcomsat) +"bod" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"boe" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled,/area/tcommsat/entrance{name = "\improper Telecomms Entrance"}) +"bof" = (/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,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bog" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boh" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boi" = (/obj/machinery/telecomms/server/presets/unused,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boj" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bok" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bol" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bom" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bon" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bol" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bom" = (/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bon" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -28},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) "boo" = (/obj/machinery/camera/network/telecom{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bop" = (/obj/machinery/exonet_node{anchored = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "boq" = (/obj/machinery/camera/network/telecom{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"bor" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bos" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bot" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bor" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bos" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bot" = (/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bou" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bov" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "bow" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -4239,9 +4239,9 @@ "bDA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) -"bDD" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bDE" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bDF" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) +"bDD" = (/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,/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bDE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) +"bDF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bDG" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bDH" = (/turf/simulated/floor/plating,/area/tether/surfacebase/atrium_three) "bDI" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) @@ -4263,9 +4263,9 @@ "bDY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bEa" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) -"bEb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable{icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bEc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bEd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) +"bEb" = (/obj/machinery/door/airlock/glass{name = "Telecomms Storage"; req_access = list(61); req_one_access = newlist()},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bEc" = (/turf/simulated/wall/r_wall,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bEd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/molten_item,/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bEe" = (/obj/structure/cable{icon_state = "32-4"},/obj/structure/lattice,/obj/machinery/light/small{dir = 8; pixel_x = 0},/obj/machinery/door/firedoor/glass,/turf/simulated/open,/area/tether/surfacebase/atrium_three) "bEf" = (/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/tether/surfacebase/atrium_three) "bEg" = (/obj/machinery/door/airlock/maintenance/engi,/obj/machinery/door/firedoor/glass,/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/plating,/area/tether/surfacebase/atrium_three) @@ -4304,10 +4304,10 @@ "bEN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bEO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bEP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) -"bEQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/structure/cable{icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/recreation_area_restroom) -"bER" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "1-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bES" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bET" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) +"bEQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bER" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bES" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bET" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bEU" = (/turf/simulated/wall/r_wall,/area/maintenance/lower/atmos) "bEV" = (/obj/structure/extinguisher_cabinet{dir = 4; icon_state = "extinguisher_closed"; pixel_x = -30; tag = "icon-extinguisher_closed (EAST)"},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bEW" = (/obj/structure/cable{icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) @@ -4332,8 +4332,8 @@ "bFp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor/tiled,/area/crew_quarters/pool) "bFq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bFr" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) -"bFs" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) -"bFt" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom) +"bFs" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bFt" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bFu" = (/obj/machinery/camera/network/northern_star{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bFv" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bFw" = (/obj/structure/railing{dir = 8},/obj/effect/floor_decal/techfloor{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/structure/table/rack,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/drinkbottle,/turf/simulated/floor/tiled/techfloor,/area/maintenance/asmaint2) @@ -4895,8 +4895,8 @@ "bQg" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bQh" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bQi" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 10},/obj/structure/railing{dir = 1},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) -"bQj" = (/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bQk" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bQj" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bQk" = (/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bQl" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Surface Civilian Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) "bQm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/locker_room) "bQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/junk,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/lower/rnd) @@ -5142,7 +5142,7 @@ "bUT" = (/obj/structure/table/glass,/obj/machinery/computer/skills,/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUU" = (/turf/simulated/floor/tiled,/area/rnd/rdoffice) "bUV" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/mauve/border{dir = 4},/turf/simulated/floor/tiled,/area/rnd/rdoffice) -"bUW" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) +"bUW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bUX" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 10},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bUZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) @@ -5302,7 +5302,7 @@ "bXX" = (/obj/effect/decal/cleanable/dirt,/obj/random/trash_pile,/turf/simulated/floor,/area/maintenance/lower/south) "bXY" = (/obj/effect/floor_decal/corner_techfloor_grid/full{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/random/trash_pile,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bXZ" = (/obj/structure/closet/firecloset,/obj/structure/sign/warning/high_voltage{pixel_x = -32},/obj/random/maintenance/clean,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) -"bYa" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) +"bYa" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/exonet_node,/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bYb" = (/obj/machinery/door/airlock/maintenance/engi{name = "Engineering Pump Station"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/maintenance/engineering/pumpstation) "bYc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) "bYd" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Surface Civilian Subgrid"; name_tag = "Surface Civilian Subgrid"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/bar{name = "\improper Surface Civilian Substation"}) @@ -5329,10 +5329,13 @@ "bYy" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/obj/structure/catwalk,/obj/structure/closet/crate,/obj/random/maintenance/engineering,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/junk,/turf/simulated/floor,/area/maintenance/lower/south) "bYz" = (/obj/structure/railing{dir = 4},/obj/effect/floor_decal/techfloor,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/random/trash_pile,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYA" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack,/obj/structure/catwalk,/obj/random/maintenance/research,/obj/random/maintenance/clean,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) +"bYB" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bYC" = (/obj/structure/railing{dir = 8},/obj/effect/floor_decal/corner_techfloor_grid{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYD" = (/obj/structure/catwalk,/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/research) "bYE" = (/turf/simulated/wall/r_wall,/area/maintenance/lower/south) "bYF" = (/obj/machinery/door/airlock/multi_tile/metal/mait,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/turf/simulated/floor/tiled/techfloor/grid,/area/maintenance/lower/south) +"bYG" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) +"bYH" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled/techmaint,/area/tcomfoyer{name = "\improper Telecomms Storage"}) "bYI" = (/obj/effect/floor_decal/techfloor{dir = 4},/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/railing,/obj/structure/railing{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/obj/random/maintenance/research,/turf/simulated/floor/tiled/techfloor,/area/maintenance/asmaint2) "bYJ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/maintenance/rnd{name = "Science Maintenance"},/obj/structure/catwalk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/research) "bYK" = (/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/tiled/steel_dirty,/area/maintenance/lower/research) @@ -5357,7 +5360,6 @@ "bZg" = (/obj/structure/railing,/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) "bZh" = (/obj/structure/railing{dir = 8},/obj/structure/railing,/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) "bZi" = (/obj/structure/railing,/obj/structure/railing{dir = 4},/turf/simulated/floor/water/pool,/area/tether/surfacebase/atrium_one) -"bZj" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/camera/network/telecom{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/tcomsat) "bZk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/crew_quarters/bar) "bZl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bZm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/crew_quarters/locker/laundry_arrival) @@ -5396,8 +5398,6 @@ "bZT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_stairs_one) "bZU" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_stairs_three) "bZV" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/north_staires_two) -"bZW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) -"bZX" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled/techmaint,/area/tcomsat) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaacaacaacaacaacaacaacaacaacaacaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -5423,7 +5423,7 @@ aaaaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaa aaaaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagabTacQacRacSabnajZabnacUacVacWacXacYacZadaacWadbadcaddadeadfadfadgadfadhadiadjadkadladmabPacOadnabHabHabHabHabHaaUaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagabTacQacRadoabTadpabnadqadracxadsadradtaduacxadvabMadwadxadxadyadzadAadBadxadCadDadEadFabPadGadHadIadIadIadJabHaaUaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagabTadKadLadMadNadOabnadPadQadRadSadTadUadVadWadXabLadYadZadZaeaabLaebaecaedaeeabLaefaegabPamWamFanoanmaelaemabHaaUaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa -aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagabTabTabTabTabTaenabnabnaeoaeoaepaeoaeoaeqaeoaeoabLabLabLabLabLabLabMaeraesabMabLabPabPabPaaUaaUaaUaaUaaUaaUaetaaUaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagabTabTabTabTabTaenabnabnaeoaeoaepaeoaeoaeqaeoaeoabLabLabLabLabLabLabLaeraesabLabLabPabPabPaaUaaUaaUaaUaaUaaUaetaaUaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaeuaeuaeuaeuaevaewaexaoJaeoaezaeAaeBaeCaeDaeEaeFaeGaeHaeIaeIaeJaeKaeLaeMaeNaeOaePaeQaeRaeGaagaagaagaagaagaaUabHaaUaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaeSaeSaeSaeSaeSaeSaeSaeSaeSaagaagaagaeuaeTaeUaeVaeWaeXapsapoaeoafaafbaeCaeCafcaeCaeCafdafeaffafgafhafiafiafjafkafkafkafkaflaeGaagaagaagaagaagaaUafmaaUaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaeSafnafoafpafqafrafsafnaeSaagaagaagaeuaftafuafvaeuafwasFaqJaeoafaafzaeCaeCafAafBafCafDafEafFafFafGafFafHafIafJafJafKafkafLaeGaagaagaagaagaagaaUasGaaUaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaa @@ -5471,13 +5471,13 @@ aEzaadaadaadaadaadaadaadaadaadaadaadaadaagayTazsazsaEAaEBaECaClaAWaEDaEEayTayTaE aEWaEXaadaadaadaadaadaadaadaadaadaadaadaagayTazsazsazsaEYaAjaAkaCTaEZaFaaFbaFcaFdaFeaFfaFgaFhaFiatmaFjaFkaEJaFlaFmaFnaFoaFpaFqaFqaEJaagaEpaFraEpaagaagaEpaFsaEOaEpaEpaEpaEpaEpaEpbEUaFtaFuaFvaFwaFxbYoaFxaFzbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTaARaASaASaFAaAUaAVaAWaEZaAmaAmaAmaFBaFCaFDaCVaFEbYsatmaFFaFGaEJaEJaEJaEJaEKaELaFqaFqaEJaagaEpaFHaEpaagaagaEpbMraEQaEOaEpaagaagaagaagbEUbEUbEUbYvbYxbEUbEUbEUbEUbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTayTayTayTayTayTaFLaAWaFMaFNaFNaFNaFOaFPaFQazAaFRaFSaFTaFUaFVaFWaFXaEJaFYaFZaGaaGbaGcaEJaagaEpaFraEpaagaagaEpaEpaEpaEOaEpaagaagaagaagaagaagbEUaGdaEqbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTazsazsaEAaGeaECaClaAWaAmaAmaAmaGfaGgaGhaGiayTaGjaGkatmaGlaGlaGmaGmaEJaGnaGoaGpaGqaGraEJaagaEpaFraEpaEpaagaagaagaEpbYDbgibdqbdqbdqbdqbdqaagbEUaGdaEqbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTazsazsazsaGsaAjaAkaGtaAmaAmaGuaGvayTaGwaGwaGwaGxaGyaGzaGzaGzaGzaGzaEJaGAaGBaGCaGDaGDaEJaagaEpaGEaGFaEpaagaagaagaEpaEObgibdqbdVbgGbdXbdqbdqbEUaGGaGHbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTaARaASaASaGIaAUaGJaGKaGLaGMaGNaGOayTaGPaGQaGRaGSaGTaGUaGVaGPaGzaagaEJaGWaGWaGCaGXaGXaEJaGYaEpaEpaGZaEpaEpaEpaagaEpaEObgibdqbeEbhibeGbeHbeIbEUaGdaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaadaadaadaadaadaadaadaadaadaadaadaagaagayTayTayTayTayTayTayTayTayTayTayTayTayTaGzaGzaHaaHbaHcaHdaGVaGPaGzaagaEJaGWaGWaHeaGXaGXaEJaGYaGYaGYaHfaHfaHgaEpaEpaEpaEQbgibdqbhAbhIbhCbhMbhLbiybYlaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaEXaEXaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaGzaGzaHhaHiaGzaGzaGzaGzaagaEJaEJaHjaEJaHjaEJaEJaGYaGYaGZaHfaHkaHfbYJaEOaEQaEQbgibdqbfKbfLbfMbfNbfObEUaGdaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaEXaEXaEXaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaHmaHnaHnaHoaagaagaagaagaagaEJaFlaEJaFlaEJaagaGYbYMbYKaHfaGZbYNaEpaEpaEpaEpaEpbdqbdqaHraHraHraHraHrbYObYPaHraHraHraHraHraHraHraHraHraHraHraHraHraHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa -aEWaadaadaadaadaEXaadaEXaadaadaadaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaEJaEJaEJaEJaEJaagaEpaEpaEpaEpaEpaEpaEpaagaagaagaagaagaagaHraHuaHvaHwaHxaHyaHzaHAaHBaHCaHDaHEaHFaHGaHHaHxaHIaHEaHEaHJaHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTazsazsaEAaGeaECaClaAWaAmaAmaAmaGfaGgaGhaGiayTaGjaGkatmaGlaGlaGmaGmaEJaGnaGoaGpaGqaGraEJaagaEpaFraEpaEpaagaagaagaEpbYDaEpbmAbmAbmAbmAbmAaagbEUaGdaEqbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTazsazsazsaGsaAjaAkaGtaAmaAmaGuaGvayTaGwaGwaGwaGxaGyaGzaGzaGzaGzaGzaEJaGAaGBaGCaGDaGDaEJaagaEpaGEaGFaEpaagaagaagaEpaEObgibmAbdVbgGbdXbmAbmAbEUaGGaGHbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaEXaadaadaadaadaadaadaadaadaadaadaagaagayTaARaASaASaGIaAUaGJaGKaGLaGMaGNaGOayTaGPaGQaGRaGSaGTaGUaGVaGPaGzaagaEJaGWaGWaGCaGXaGXaEJaGYaEpaEpaGZaEpaEpaEpaagaEpaEObgibmAbeEbhibeGbeHbeIbEUaGdaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaadaadaadaadaadaadaadaadaadaadaadaagaagayTayTayTayTayTayTayTayTayTayTayTayTayTaGzaGzaHaaHbaHcaHdaGVaGPaGzaagaEJaGWaGWaHeaGXaGXaEJaGYaGYaGYaHfaHfaHgaEpaEpaEpaEQbgibmAbhAbhIbhCbhMbhLbiybYlaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaEXaEXaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaGzaGzaHhaHiaGzaGzaGzaGzaagaEJaEJaHjaEJaHjaEJaEJaGYaGYaGZaHfaHkaHfbYJaEOaEQaEQbgibmAbfKbfLbfMbfNbfObEUaGdaDfbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaEXaEXaEXaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaHmbmBbmBbmCaagaagaagaagaagaEJaFlaEJaFlaEJaagaGYbYMbYKaHfaGZbYNaEpaEpaEpaEpaEpbmAbmAaHraHraHraHraHrbYObYPaHraHraHraHraHraHraHraHraHraHraHraHraHraHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa +aEWaadaadaadaadaEXaadaEXaadaadaadaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadajUajUajUajUaagaagaagaagaagaEJaEJaEJaEJaEJaagaEpaEpaEpaEpaEpaEpaEpaagaagaagaagaagaagaHraHuaHvaHwaHxaHyaHzaHAaHBaHCaHDaHEaHFaHGaHHaHxaHIaHEaHEaHJaHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aEWaEXaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaHraHKaHLaHMaHNaHOaHNaHPaHQaHRaHSaHSaHSaHTaHNaHNaHNaHUaHVaHWaHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aEzaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaHraHXaHYaHYaHYaHZaHYaHYaIaaIbaIcaIcaIcaIdaIeaIfaIgaIhaIiaIjaHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaHraHKaHYaHraHraIkaHYaHYaIlaImaInaIoaIcaIdaIpaIqaIraIhaIiaIsaHraagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaaa @@ -5587,8 +5587,8 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbFwaVtaXSaXTaXUaXVaXWaXXaXYaXZaXZaYaaYbaYcaYdaYeaYfaYgaYhaYiaYiaYjaVaaYkaYlaQMaJJaJJaJJaJJaVyaYmaWRaYnaYoaYpaXDaYqaWhaYraXGaXGaXIaWWaYsaVCaYtaVEaYuaYvaYvaYwaYxaYyaYzaYAaVEaXdaYBaPHaPHaYCaYCbKWbKZaYCaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaYFaSUaSUaTjaVtaYGaYHaYIaYJaYKaYLaYMaYNaYOaYaaYPaYQaYRaYSaYTaYUaYVaYWaYiaYXaVabLcaYZaQMaJJaJJaJJaJJaVyaZaaZbaZcaWRaZdaWRaZeaWTaZfaZgaZgaWUaZhaZiaVCaYtaVEaVEaVEaVEaVEaVEaVEaZjaVEaVEbNDaZlaMWaMWaYCaZmaZnaZoaZpaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaZqaTFaTGaVtaZraYHaZsaZtaZuaZvaZwaYNaYOaYaaYPaZxaZyaZzaZAaZBaZCaZBaZDaZEaVaaZFaZGaQMaJJaJJaJJaJJaVyaZaaZHaZIaZJaZKaZLaZMaZNaZOaZPaZQaZRaZSaZTaVCbPIaZUaZUaZVaYtaYtaYtaYtaYtaZWaYCaYCaYCaYCaYCaYCaZXaZYaZZbaaaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbabaUSaSUaTjaVtbacbadbaeaVtbafbagbahbaibajbakaYPbalaUYbambanbaobapbaqbarbasaVabatbQnaQMbavbavbavbavaVyaZabawbaxbaybazbaAbaBaVCbaCbaDbaEbaFbaGbaHaVCahvahvahvahvaYCaYCaYCaYCaYCbaIbtqaYCbaKbaLbaMbaNbaObaPaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbtraSUaTFbaSaVtbaTbaUbaVaVtbaWbaXbaYbaZbaZbaZbbabbbaUYbbcbanbbdbbebbfbarbbgaVabbhbavbavbavbbibavbavbavbavbavbbjbbkbblbavbavbbmbbnbbobbpbbmbbmbbmbbmbbqaisbbrahvaJJaJJaJJaJJaYCaZUaZVaYCbbsbbtbYaaYtbbvbbwbbxbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbabaUSaSUaTjaVtbacbadbaeaVtbafbagbahbaibajbakaYPbalaUYbambanbaobapbaqbarbasaVabatbQnaQMbavbavbavbavaVyaZabawbaxbaybazbaAbaBaVCbaCbaDbaEbaFbaGbaHaVCahvahvahvahvaYCaYCaYCaYCaYCbaIbtqaYCbaKbaLbmzbaNbaObaPaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbtraSUaTFbaSaVtbaTbaUbaVaVtbaWbaXbaYbaZbaZbaZbbabbbaUYbbcbanbbdbbebbfbarbbgaVabbhbavbavbavbbibavbavbavbavbavbbjbbkbblbavbavbbmbbnbbobbpbbmbbmbbmbbmbbqaisbbrahvaJJaJJaJJaJJaYCaZUaZVaYCbbsbbtaYtaYtbbvbbwbbxbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbbyaVtbbzbbAbbBaVtbbCbbDbbEbbFbbGbbHbbEbbIaUYbbJbbKbbLbbMbbNbbObbPaVabbQbbRbbTbbVbbUbbSbbWbbXbbYbbZbcabcbbccbcdbcebbmbcfbcgbchbcibcjbckbclbcmbcnbcoahvaJJaJJaJJaJJaYCaZUbaIbcpbbsbcqbcrbcsbctbbwaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbcuaSUaSUbwkaVtbcwbcxbcyaVtaUXbYfaUXaUXaUXaUXaUXaUXaUYbcAbcBbcCbcDbcEbcFbcGaVabcHbcIbcJbcKbcLbcMbcPbcObcNbcQbcRbiObcTbcUbcVbcWbcXbcYbcZbdabcgbdbbbmajRbdcbddahvaJJaJJaJJaJJaYCbdebYnaYCbbsbcqbdgbdhbdhbdiaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbcvaVtaVtaVtaVtaVtaGmbdjbdkaGmaJJaJJaJJaJJaUYbdlbdlbdmbdnbdmbdlbdlbdlbdobdpbavbavbdtbdvbdWbdvbdtbdrbdsbeFbdYbdZbeJbbobdwbdxbdybdzbdxbdAbbmahvahvahvahvaYCaYCaYCaYCaYCbYraZZaYCbdBbdCbdDaZZbbxaZZaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5615,18 +5615,18 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggblublwbmiblxblyblzblAblBblCblDblEbkKbkLbkMblFbkObkPbkQblGblHbYVaZZblIaZZaZZaZZaZZaZZblJblKaZZaZZbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbYEaZZblLbYEbYEbYEbYEbYZblNbYYbmabmabmaaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbYEaJJaJJaJJbmablRblSblTblUbmaaJJaJJaJJblVblVblVblVblVblVblVblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJbmkaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmlbmlbmlblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbmbbmbbmbbmbbmbbmlbmlbmmbmybmlbmwbmxbmzblVbmnbmobmpbmobmqbmrblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZbbmtbmubmvbmAbmlbmDbmBbmCbmSbmTbmRbmRbmUblVbmEbmFbmGbmHbmIbmJblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbmKbmLbmMbmNbmObmPbmQbmXbmVbmWbnmbnnbnkbnlbnobmYbmZbnabnbbncbndbnebnebnebneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbnfbngbmjbnhbnibnjbmbbnxbmRbnpbmRbnAbnybnzbnGblVbnqbnrbnsbmGbntbnubnvbnwbneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYEbYEbmbbmbbmbbmbbmbbnYbnWbnXbnZbnebnebnebnebnebnBbnCbnDbnEbnFbnebnebocbnebneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbnHbnIbnIbnIbnIbnIbnIbnIbnIbnIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbmbbnJbnJbnKbnJbnebnLbnLbnLbnMbnNbnObnPbnQbnRbnSbnTbnUbnVbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbolbodboebombnebnLbnUbnUbnUboabnUbobbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbosbonborbotbnebnLbogbohboiboabnUbnLbnUboabnUbojbokbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbQkbQjbQjbUWbneboobnUbnUbnUboabnUbopbnUboabnUbnUbnUboqbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbZXbZjbZWbofbneboubovbowboxbnRboybozboAbnRboBboCboDboEbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbofbofbofbofbofbnebnLboFboGbnUboabnUbnLbnUboabnUboHboIbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJbmkaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmDbmDbmDblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbmMbmMbmMbmMbmDbmDbmDbmNbmQbmDbmObmPbmRblVbmnbmobmpbmobmqbmrblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZbbmUbmVbmSbmTbmDbnhbmWbmXbnjbnkbnibnibnlblVbmEbmFbmGbmHbmIbmJblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbmKbmLbnobnpbnmbnnbnzbnAbnxbnybnKbnWbnGbnJbnXbmYbmZbnabnbbncbndbnebnebnebneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbnfbngbodboebnYbnZbmDbolbnibofbniborbombonbosblVbnqbnrbnsbmGbntbnubnvbnwbneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbYEbYEbmMbmMbmMbmMbmDbDEbotbDDbDEbnebnebnebnebnebnBbnCbnDbnEbnFbnebnebocbnebneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbnHbnIbnIbnIbnIbnIbnIbnIbnIbnIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbDFbDFbEbbDFbnebnLbnLbnLbnMbnNbnObnPbnQbnRbnSbnTbnUbnVbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbERbEdbEQbESbnebnLbnUbnUbnUboabnUbobbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbFtbETbFsbQjbnebnLbogbohboiboabnUbnLbnUboabnUbojbokbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbUWbQkbQkbYabneboobnUbnUbnUboabnUbopbnUboabnUbnUbnUboqbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbYHbYBbYGbEcbneboubovbowboxbnRboybozboAbnRboBboCboDboEbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbEcbEcbEcbEcbEcbnebnLboFboGbnUboabnUbnLbnUboabnUboHboIbnLbneaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbneboJbnUbnUbnUboabnUboKbnUboabnUbnUbnUbnLbneaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbnebnLboLboMboNboObnUboPbnUboQboRboSboTbnLbneaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbnebnQboUbnLboVbnLbnLboWbnLbnLboXbnLboUbnQbneaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5686,12 +5686,12 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbBEbAWbBFbBGbBGbBHbBHbBHbBHbBHbBIbBJbAFbAGbBKbBLbAHbAHbAHbPybAHbBNbBObBkbpabpabBPbpabzrbBQbBRbBSbBnbBnbzrbBTbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbBVbwSbBWbBXbBYbBZbCabCbbCcbCdbCebCdbCfbCgbChbwSbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqfbzhbCibAWbBFbBGbBGbBHbBHbBHbBHbBHbBIbBJbAFbAGbCjbznbCkbClbClbCmbCnbAHbCobznbpabpabpabpabzrbBnbCpbzrbCqbCqbzrbCrbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbCsbCtbCubCubCubCvbCubCwbCxbCwbCwbCwbCwbCybCybCybCybpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbCzbAWbBFbBGbBGbCAbzObCBbBHbBHbBIbBJbAFbAGbCCbznbCDbCEbCFbCGbCHbAHbCIbznbpabpabpabpabzrbCJbCKbzrbCqbCqbzrbCLbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbCMbCNaMZaNybCQbCRbCSbCTbCUbCVbCWbCSbCXbCYbCZbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbBFbBGbBGbDbbDcbDdbBHbBHbBIbBJbAFbAGbCjbznbznbznbznbDebDfbzobznbznbwObwObtSbtSbzrbzrbzrbzrbzrbzrbzrbDgbDhbzwbIIbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbDibDjbDkbDlbDmbDnbDobCSbDpbCTbCTbDqbCSbDrbDsbDtbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAbDBbDCbtSbDDbvibDEbDFbwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEabtSbEbbEcbEcbEdbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSbEsbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbEybDQbEzbEAbEAbEAbEAbEAbEBbEBbECbEDbEEbEFbEGbEHbEIbEJbEJbEJbEKbELbEMbENbEObEPbEQbERbESbESbETbwsaRZbDHbwsbEVbzvaSdaSabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbEYbEZbwsaSCbCQaSBbCSbFcbFdbFebFfbCSbFgbFhbFibDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFjbFkbFlbFlbFlbFlbFlbFlbFlbFlbFlbFmbFnbFobFpbzhbwsbzZbzZbzZbwsbwsbvEbyVbFqbFrbtSbDDbFsbFtbDFbwsbwsbwsbwsbFubzvaTeaTabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFvbDkbDkbDkaTybDkbCSbCSbFxbFybCSbCSbFzbFAbFzbFBbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFCbFDbFDbFDbFDbFEbFDbFDbFDbFFbFDbFGbFHbFIbFJbFKbpabpabpabpabpabuVbvEbyVbFqbvGbtSbtSbtSbtSbtSbtSbFLbFMbwsbDIbzvbEWbzxbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFNbFObFPbFQbFRbFSbFTbFBbFUbFVbFWbFXbFYbFZbGabFBbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbBFbBGbBGbDbbDcbDdbBHbBHbBIbBJbAFbAGbCjbznbznbznbznbDebDfbzobznbznbwObwOaHnaHnbzrbzrbzrbzrbzrbzrbzrbDgbDhbzwbIIbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbDibDjbDkbDlbDmbDnbDobCSbDpbCTbCTbDqbCSbDrbDsbDtbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAbDBbDCaHnbmbbdqbaMaHobwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEaaHnbmmbmlbmlbmjbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSbEsbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbEybDQbEzbEAbEAbEAbEAbEAbEBbEBbECbEDbEEbEFbEGbEHbEIbEJbEJbEJbEKbELbEMbENbEObEPbmtbmwbmvbmvbmubwsaRZbDHbwsbEVbzvaSdaSabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbEYbEZbwsaSCbCQaSBbCSbFcbFdbFebFfbCSbFgbFhbFibDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFjbFkbFlbFlbFlbFlbFlbFlbFlbFlbFlbFmbFnbFobFpbzhbwsbzZbzZbzZbwsbwsbvEbyVbFqbFraHnbmbbmybmxaHobwsbwsbwsbwsbFubzvaTeaTabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFvbDkbDkbDkaTybDkbCSbCSbFxbFybCSbCSbFzbFAbFzbFBbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFCbFDbFDbFDbFDbFEbFDbFDbFDbFFbFDbFGbFHbFIbFJbFKbpabpabpabpabpabuVbvEbyVbFqbvGaHnaHnaHnaHnaHnaHnbFLbFMbwsbDIbzvbEWbzxbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFNbFObFPbFQbFRbFSbFTbFBbFUbFVbFWbFXbFYbFZbGabFBbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabGbbGcbzhbzhbzhbGcbGcbGcbzhbzhbzhbGcbGcbGcbzhbzhbzhbpabpabpabpabpabuVbvEbyVbGdbGebGfbGgbxjbGhbGibGjbGibGibGkbGlbGmbGnbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbGobBUbygbGpbGqbFQbGrbGsbGubFBbGtbGvbGwbGwbGxbGybGzbFBbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabwsbGAbGBbyobGCbGDbyubGEbGFbyobyobyobyobGGbyobGHbEWbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbGIbGJbyubGKbGLbGMbGNbGObGObGPbGQbGRbGSbGTbGUbGVbGWbGXbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabwsbGYbyQbyQbyQbyQbyQbyQbyQbyQbyQbyQbyQbyTbGZbzvbEWbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbHabBUbygbygbHbbHcbHdbHebHebHfbHgbFVbHhbFBbHibGVbHjbGXbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-04-mining.dmm b/maps/tether/tether-04-mining.dmm index 8cf511d3ed..0846dea547 100644 --- a/maps/tether/tether-04-mining.dmm +++ b/maps/tether/tether-04-mining.dmm @@ -74,7 +74,7 @@ "bv" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/steel_grid,/area/outpost/mining_main/break_room) "bw" = (/turf/simulated/wall/r_wall,/area/outpost/mining_main/dorms) "bx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/mining_main/break_room) -"by" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/structure/closet/excavation,/obj/item/weapon/storage/bag/ore,/turf/simulated/floor/tiled,/area/outpost/mining_main/break_room) +"by" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/item/weapon/storage/bag/ore,/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/tiled,/area/outpost/mining_main/break_room) "bz" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{frequency = 1379; scrub_id = "mining_outpost_airlock_scrubber"},/turf/simulated/floor/tiled/techfloor/grid,/area/outpost/mining_main/airlock) "bA" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{icon_state = "0-2"},/turf/simulated/floor/bluegrid,/area/outpost/mining_main/airlock) "bB" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/outpost/mining_main/airlock) @@ -88,7 +88,7 @@ "bJ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/outpost/engineering/atmospherics) "bK" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/outpost/mining_main/dorms) "bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{dir = 1; pixel_x = 12; pixel_y = 24},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/wood,/area/outpost/mining_main/dorms) -"bM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/structure/closet/excavation,/obj/item/weapon/storage/bag/ore,/turf/simulated/floor/tiled,/area/outpost/mining_main/break_room) +"bM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/item/weapon/storage/bag/ore,/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/tiled,/area/outpost/mining_main/break_room) "bN" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/steel_grid,/area/outpost/mining_main/break_room) "bO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/outpost/mining_main/break_room) "bP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/techfloor{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/outpost/engineering/atmospherics) @@ -236,8 +236,8 @@ aaababababababababababaxawaDaCaoabababababababababababalalalabababababababacacac aaababayayayayayayayayazazazaEaAaAaBabababababababababalalafabababababababacacacacababababacababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababaa aaababayaFaHaGaLaJaVayaIaYaKbgaMaNaOabababababababababalalalabababababababababababababababacababababababababababababababababababababababababacababababababababababababababababababababababababababababababababababababababababababababababababaa aaababayaPaQaRaSaTaUbmaWaWaXbvaZbaaOabababababababababafalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa -aaababaybbbcbdbebfbJaybhbibjbkblbMbnbnbnbnbnbnbnabababalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa -aaabbobpbqbrbsbtbubPaybwbwbwbxblbybnbzbzbAbBbCbnbDalalalalalalalalalafalalbEafababababafabababababababababababafabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaababaybbbcbdbebfbJaybhbibjbkblbybnbnbnbnbnbnbnabababalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaabbobpbqbrbsbtbubPaybwbwbwbxblbMbnbzbzbAbBbCbnbDalalalalalalalalalafalalbEafababababafabababababababababababafabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa aaababaybFbGbHbIbIbWaybKbLbXbNbObObYbQbRbSbTbUbVbDalafalalalalalalafafalalababafabafababababafababababafabafafabafafabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa aaababaybZcacacscrctaycbccbwcdcecfbnbzbzcgchcibncjalalalckclalalafalalababababababababababafabababafabababababababababafafababafabababababababababababababababababababababababababababababababababababababababababababababababababababababababaa aaababayayayayayayayaybwbwbwazazazbnbnbnbnbnbnbnababababalalabababalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa diff --git a/maps/tether/tether-07-misc.dmm b/maps/tether/tether-07-misc.dmm index 49ebea0ce3..9f4b9f4d35 100644 --- a/maps/tether/tether-07-misc.dmm +++ b/maps/tether/tether-07-misc.dmm @@ -1028,7 +1028,7 @@ "tN" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/ewar_voice,/obj/item/weapon/storage/box/syndie_kit/ewar_voice,/obj/item/weapon/storage/box/syndie_kit/ewar_voice,/obj/item/weapon/storage/box/syndie_kit/ewar_voice,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/obj/item/weapon/card/emag,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "tO" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "tP" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/spy,/obj/item/weapon/storage/box/syndie_kit/spy,/obj/item/weapon/storage/box/syndie_kit/spy,/obj/item/weapon/storage/box/syndie_kit/spy,/obj/item/weapon/storage/box/syndie_kit/spy,/obj/item/device/radio_jammer,/obj/item/device/radio_jammer,/obj/item/device/radio_jammer,/obj/item/device/radio_jammer,/obj/item/device/radio_jammer,/obj/item/device/chameleon,/obj/item/device/chameleon,/obj/item/device/chameleon,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"tQ" = (/mob/living/simple_animal/fox/syndicate,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"tQ" = (/mob/living/simple_animal/fox/syndicate{name = "Rick"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "tR" = (/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base) "tS" = (/obj/machinery/washing_machine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/antag/antag_base) "tT" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/antag/antag_base) From a9851ace2d1357c8d6e57e49862d930c5b00bfaa Mon Sep 17 00:00:00 2001 From: PontifexMinimus <2vs_5fetab8ix85s@byom.de> Date: Sun, 4 Jun 2017 17:26:43 +0200 Subject: [PATCH 086/261] Update giant_spider.dm With the normal spider toxin. Because right now, every bite causes 7 units pumped into a person. That brings it to 21 units with only three bites, enough to knock down a person for +20 minutes. Which won't fucking do. --- code/modules/mob/living/simple_animal/animals/giant_spider.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/animals/giant_spider.dm b/code/modules/mob/living/simple_animal/animals/giant_spider.dm index e2c833000e..e0a8b130d6 100644 --- a/code/modules/mob/living/simple_animal/animals/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/animals/giant_spider.dm @@ -56,7 +56,7 @@ melee_damage_lower = 5 melee_damage_upper = 10 poison_per_bite = 7 - poison_type = "stoxin" + poison_type = "spidertoxin" // VOREStation edit, original is stoxin. (sleep toxins) var/fed = 0 var/atom/cocoon_target From 3634624a8e235b4b7edd8cec354dcccb0efa47c2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 4 Jun 2017 12:09:49 -0400 Subject: [PATCH 087/261] More trash pile sprites What it says yo --- code/game/objects/structures/trash_pile.dm | 13 ++++++++++++- icons/obj/trash_piles.dmi | Bin 1768 -> 9367 bytes 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index 434b4cc852..5490251280 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -29,7 +29,18 @@ /obj/structure/trash_pile/initialize() ..() - icon_state = pick("pile1","pile2","pilechair","piletable","pilevending") + icon_state = pick( + "pile1", + "pile2", + "pilechair", + "piletable", + "pilevending", + "brtrashpile", + "microwavepile", + "rackpile", + "boxfort", + "trashbag", + "brokecomp") /obj/structure/trash_pile/attackby(obj/item/W as obj, mob/user as mob) var/w_type = W.type diff --git a/icons/obj/trash_piles.dmi b/icons/obj/trash_piles.dmi index b87fdc16df760d1c6c5b7c2fb8561bc8053c938b..a8eea0b14edc146e39f605fd4bf1603d538b2c6f 100644 GIT binary patch literal 9367 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 IUe-M9e}GSu-v9sr literal 1768 zcmVP){YvQo0004WQchCV=-0C=2J zR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5 zsVFfoB|oil=+!$a4PCv^s%gFOL0052AA?%MR0&skkfk}D<$Q-~HC^b0& zfDi;2bp&WNHsd7a3@~|o1OeC*ah%xbpQjnpz%Za=iExT$JWhCq_>{C zV2QF%luR!jjXDFA#u3SwWY=m8;5diJeU%SKp9X&)Q23380Bk`65JG_(js};P1h~5T z{J9%|wo!r(s`w&+lmX37H9}Bdzn~`5;c#%7kJ|Rgr~i%v009Q)hvrif0n+AlmPLwj zvY%dGUk?Yvt6_M0kFCnHfbmoSvzZ)rA%Ihuiv73m--k4PA1}+2&FSF`ATp_6CDAdMTLN>DhlNQ5M+ScxI(9@LVF#?1>iKBOp3{5 z5<@%yhm(Z>G(gycyno^2I*MDsyr2Xo0uV+EfaB|$Ef@eFLqI>jXyR2IxBi9rI{+b^ z0WDMV#}ctcQibDHA9Zo@8~N835ycgDpqLlf=Gi1tlY>r_2h<2qu>sXY5?})PM{$iy zc#i%pzzw$3jZYMHP%|)zW2W!AlN@DP7r^3dSd@L?sl;*XsOyE zk-dMHU4n-IAOHEsAs|rUrB0}-PDMnIkLTm+to#4^FAH9O%X`#(wBRZw{R057?)P-MBEr4p&Ifdur3INIhN-Nvxjww8^ zH=8y7#EJ-%LgnpCcWMXA>zqHkuh#)%yCp&^1qX1A?he=n^WR#v0V)F6476Lnk$@Ee zwnr)y0(1=UCDQWY+cKvI6*8W;#}xp0Q?+}5(s7OaFJNKE0kDHZ0GScs#f!FGRYBkm zZIXR>mWqI@(hhd567d$U2!O_TkKFBc2%uhgK&$Lg3Iy2Fq}MomZuAC2n;-+(Vww`z z+4&BiuF2d1ssB0z=mx+yTU<#t0|wx$_>cWF$XGqs+BN{(+Fyq~ z@aH{QmDFjjjs;*sE&~KmQYQfr5Q3-A{$3_GMl6W~?DzYZ7fm;50RWn39-!I)t0Ox( z094!vTOwRW)by48^z6xBqq6;Oxm*HWbHSz3G#!qd*S Date: Sun, 4 Jun 2017 12:31:05 -0400 Subject: [PATCH 088/261] Modify fluff gun to 10mm Instead of mateba megarounds. --- code/modules/vore/fluffstuff/custom_boxes_vr.dm | 2 +- code/modules/vore/fluffstuff/custom_guns_vr.dm | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 92ec145d5f..6908a68e95 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -188,7 +188,7 @@ /obj/item/weapon/storage/box/fluff/briana_moore name = "Briana's Derringer Box" has_items = list( - /obj/item/weapon/gun/projectile/derringer, + /obj/item/weapon/gun/projectile/derringer/fluff/briana, /obj/item/fluff/permit/briana_moore) diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index e6f562987a..400c327c75 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -168,6 +168,12 @@ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) ammo_type = /obj/item/ammo_casing/a38r //Rubber rounds. +// LuminescentRing : Briana Moore +/obj/item/weapon/gun/projectile/derringer/fluff/briana + name = "second-hand derringer" + desc = "It's a palm sized gun. One of the few things that won't break an angel's wrists." + caliber = "10mm" + ammo_type = /obj/item/ammo_casing/a10mm // For general use /obj/item/weapon/gun/projectile/automatic/stg From 7e253921d4dfca0f2ff14ac43df3159356598c56 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 3 Jun 2017 13:06:37 +0100 Subject: [PATCH 089/261] Fixes the stuff --- .../carbon/human/species/station/traits_vr/negative.dm | 6 +++--- .../carbon/human/species/station/traits_vr/positive.dm | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 704cd21199..ed66abb5aa 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -57,13 +57,13 @@ var_changes = list("burn_mod" = 1.30) /datum/trait/conductive - name = "Conductive (Minor)" + name = "Conductive" desc = "Increases your susceptibility to electric shocks by a small amount." cost = -1 var_changes = list("siemens_coefficient" = 1.15) -/datum/trait/conductiveplus - name = "Non-Conductive (Major)" +/datum/trait/conductive_plus + name = "Conductive (Plus)" desc = "Increases your susceptibility to electric shocks by a moderate amount." cost = -2 var_changes = list("siemens_coefficient" = 1.3) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index e92f667867..984f886acb 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -33,13 +33,13 @@ H.setMaxHealth(S.total_health) /datum/trait/nonconductive - name = "Non-Conductive (Minor)" + name = "Non-Conductive" desc = "Decreases your susceptibility to electric shocks by a small amount." cost = 1 var_changes = list("siemens_coefficient" = 0.85) -/datum/trait/nonconductiveplus - name = "Non-Conductive (Major)" +/datum/trait/nonconductive_plus + name = "Non-Conductive (Plus)" desc = "Decreases your susceptibility to electric shocks by a moderate amount." cost = 2 var_changes = list("siemens_coefficient" = 0.7) From 5fbb93551dcb0a00f60a19f71a9287f2fff2dec6 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 17:41:41 -0400 Subject: [PATCH 090/261] Allows soap and rags to be wet using buckets --- code/modules/reagents/reagent_containers/glass.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index bd670cc8bc..7fccddecd1 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -249,7 +249,7 @@ user.drop_from_inventory(src) qdel(src) return - else if(istype(D, /obj/item/weapon/mop)) + else if(istype(D, /obj/item/weapon/mop) || istype(D, /obj/item/weapon/soap) || istype(D, /obj/item/weapon/reagent_containers/glass/rag)) if(reagents.total_volume < 1) user << "\The [src] is empty!" else From ae1d77cad00ffc84c7f9ecf2aeaab383d8760157 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 17:43:38 -0400 Subject: [PATCH 091/261] Allows soap and rags to be wet using mopbuckets --- code/game/objects/structures/mop_bucket.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 5e0c0d5abb..6093dd497f 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -20,7 +20,7 @@ user << "[src] \icon[src] contains [reagents.total_volume] unit\s of water!" /obj/structure/mopbucket/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop)) + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) if(reagents.total_volume < 1) user << "\The [src] is out of water!" else From 84f17a4b006e8cfba01ea907fc60a47a68a6e050 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 17:47:28 -0400 Subject: [PATCH 092/261] Rags clean dirt from floors now And can be wet from buckets --- code/modules/detectivework/tools/rag.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 57af12525d..a09e2db571 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -102,6 +102,10 @@ if(do_after(user,30)) user.visible_message("\The [user] finishes wiping off the [A]!") A.clean_blood() + if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) + var/turf/T = get_turf(A) + if(T) + T.clean(src, user) /obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) if(isliving(target)) @@ -132,7 +136,7 @@ if(!proximity) return - if(istype(A, /obj/structure/reagent_dispensers)) + if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/item/weapon/reagent_containers/glass/bucket) || istype(A, /obj/structure/mopbucket)) if(!reagents.get_free_space()) user << "\The [src] is already soaked." return From 8d04339b1ca68b8a0f311bcddec57683e2e102c5 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 4 Jun 2017 22:49:28 +0100 Subject: [PATCH 093/261] Commits missed file --- icons/obj/xenoarchaeology.dmi | Bin 63847 -> 64398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/xenoarchaeology.dmi b/icons/obj/xenoarchaeology.dmi index a074f17c3f9cf368da35947f86207a09870dad38..24ebc6ef6cbea5362bf1c262be31a93dbadf2991 100644 GIT binary patch delta 23734 zcmZ^~1z1$w+c!EiC@I~kh#;VJ4oE6WOGqQ#4N`kZrAxX&1f)Z{Q9$W#X@(fO83w-X z^SuA}yzh6;xtNQoJ!|c~*1GTYi+jV5F`_RpV%gB{;vPbQm$o6VL-pyF<6>gISpBX? zz}Lo4c+L-x#TQ{Gb2N3vKV$4fXLm$v?K)jVGHY|v1rfKGIp~#G&1yXsvx9Exw(!}& zu!imEA{K)SNc)+DVSZzt5B{cE5s(*w+_048{R#P*L)t@P^%jF)+F)4P2y zF|W=rvBGiyMdASkJb9~E58kBakgRrS_-|fy2`IS~{1)y$Nj?dr6o+H+D8D{X?Am{T zxnZ6Ei|5@w&y-7c&Xee3m#mW;Kwpu&alP=PxALo>86zds$@&Otb?JL^_$0;5#~&Vi zAzjoHtHerAG&l5rp2z-V&%EFTIE)m9>2Ja)fz zC3=Y5lC=6noEy58dA;ys(V!YEa+YA2XMmt&LjyLclj%5hvw#=%xl{|W50hcI1Thab ze;hFrKM+Su55Az`kE5dW@5&9c2+dP`@bcbE^q1FK=S1NjTp*!m&JsBzOJ&~m!GiTw z7o9X61zKg#3550B8>S5%J61UUtT^q^6ROk_DW`_=HsmvQc-hB9Xh-t6v)ei4!Ec4aH$nFRcgVrAol$LJX&j-)XJO>OT=fe5w6y`S~?{i;rjbcf3KpZ#{ z@bV9egUUs_&~r+n4{xX6DtMuGzjfm*<&+RIBET6 zrq!L5-eR@B#LsoTsF*gqstYU5&CERY>A^~VNZGO;*dKZScH1=JI!CJQ;Qrjli0?Z~ zNr?i|+k7vZ%wyUaX1e=NPI(4!DJ8eRzbL3-#*oSe92ptqKJ4EC*a5F&KfZb4HVb)2~BH+^&|_^9E11kr%$0d%apd9b*DwRihedK_sWbm$Yg6@ z2q|D#x7#Vc<#ke3XEtGGv-47XgqgC$SaY$SHJiHl_wS8Mt5Jp7W>#kE@Pg~$fID=_ z#j+5n$(J;@v|Ov|Wr!%=6-s$0_~-j0m)Cg>&VKyFIMT$j*ee%E^TNzeajd-gH8rHu zMu3Eit7}|x^2e4Iad*Fw9O4mRIkTSjV%lgE~_#0)K`rLCJ+b z_)+h{gl_iTsUe%bYlPplnQ&QHy@(nc;vo=#3Gz}_TGMw^J1=84M(A!f&Qa6ax_GnO zP)#jP^O?ijw}~BM=$y(=#Kh*4x@%u}cz7)Mp$EX0FOVC?yr0I##)^D84|c(G%pU$& z^}aVRKOdtvnqEd%H}zY$%Mlm6jEHu-SIlB(qIe5|kaczClaHdoq9`vaiY@u}Ew3CP z`sC4e?PXSrferf_vql@ugxh7GwB(nM57CY$bDAxn!|$grzV#?RYq;r3PPyGmFIz>o4b2%UYBp*yZp7m z%GF?$f4jbxR_Ja;JA=EsJ1%z6a<`NU!2O5IPPXN}4i)4aF`I8wZM#}Q^y$DiK$!4y z%4f6R@n(AN^QNR@tEInY_`#HqU_XR-_uZxKn_hQP%uykeXwLH`3MRsNrQbr23>xXJ&3qo0uAs z`shB=x2f<#sVL6fPPA8xcpTyU-Mbk)iM3uDJ!JIUI;+zyp|F6xcN+Dcs~C2 zIE%;=?UP4Oy{~)^pVHN z@4^pI)3(PL7Yo$WPQQeA8}HiQxwlON{#-^n~t<|NKnU+0! zJAZ|aO?yW@8+>EUVEiB4lKxxBk_{e19~_ABM54&y2iLa>{ap~^Qs@_kwMJhye||V# zBxe(LvVSubD*)X1AksXcJ>+ih*JFU7Yi$>&?y32HU-gRC;>PB8&q;7q?g3QvxdDmUvJ9F&5@@?|FFZr}FEURAf zMZbwuaHJCh@8xSwLoXK&<@)b=yS1=7Zff=PRi_WV0H?H+KMAqq(|ly@nL>bwiGO

    jv-I`zlel;9-pIs6a9|+% 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 KwM#S|qy7gYhL-~X From 7a875b796b81ea76fad5da0bd8e832f75bf1f688 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 18:24:13 -0400 Subject: [PATCH 094/261] Update mop_bucket.dm --- code/game/objects/structures/mop_bucket.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 6093dd497f..54218cc847 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -20,7 +20,7 @@ user << "[src] \icon[src] contains [reagents.total_volume] unit\s of water!" /obj/structure/mopbucket/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) + if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) //VOREStation Edit - "Allows soap and rags to be used on mopbuckets" if(reagents.total_volume < 1) user << "\The [src] is out of water!" else From cf2195f3701e41503cc17ea1f2ed05e1505a7b94 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 18:26:28 -0400 Subject: [PATCH 095/261] Update rag.dm --- code/modules/detectivework/tools/rag.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index a09e2db571..bafdddf4ff 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -102,10 +102,10 @@ if(do_after(user,30)) user.visible_message("\The [user] finishes wiping off the [A]!") A.clean_blood() - if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) + if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune)) //VOREStation Edit - "Allows rags to clean dirt from turfs" var/turf/T = get_turf(A) if(T) - T.clean(src, user) + T.clean(src, user) //VOREStation Edit End /obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) if(isliving(target)) @@ -136,7 +136,7 @@ if(!proximity) return - if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/item/weapon/reagent_containers/glass/bucket) || istype(A, /obj/structure/mopbucket)) + if(istype(A, /obj/structure/reagent_dispensers) || istype(A, /obj/item/weapon/reagent_containers/glass/bucket) || istype(A, /obj/structure/mopbucket)) //VOREStation Edit - "Allows rags to be used on buckets and mopbuckets" if(!reagents.get_free_space()) user << "\The [src] is already soaked." return From 7b65a8836faecd6e66b250916da179d9e84c6358 Mon Sep 17 00:00:00 2001 From: Pear120 Date: Sun, 4 Jun 2017 18:26:59 -0400 Subject: [PATCH 096/261] Update glass.dm --- code/modules/reagents/reagent_containers/glass.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 7fccddecd1..f84a6ff407 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -249,7 +249,7 @@ user.drop_from_inventory(src) qdel(src) return - else if(istype(D, /obj/item/weapon/mop) || istype(D, /obj/item/weapon/soap) || istype(D, /obj/item/weapon/reagent_containers/glass/rag)) + else if(istype(D, /obj/item/weapon/mop) || istype(D, /obj/item/weapon/soap) || istype(D, /obj/item/weapon/reagent_containers/glass/rag)) //VOREStation Edit - "Allows soap and rags to be used on buckets" if(reagents.total_volume < 1) user << "\The [src] is empty!" else From 13c431a84951fa6c131b99128277c15568dd57ef Mon Sep 17 00:00:00 2001 From: SpoopyLizz Date: Mon, 5 Jun 2017 00:47:50 +0200 Subject: [PATCH 097/261] Changes as requested by Aronai fulfilled. https://github.com/VOREStation/VOREStation/pull/1614 --- .../vore/fluffstuff/custom_items_vr.dm | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 9a93138c23..f0c21ce237 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -784,32 +784,18 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie icon_state = "egg_roiz" filling_color = "#FDFFD1" volume = 12 - center_of_mass = list("x"=16, "y"=13) /obj/item/weapon/reagent_containers/food/snacks/egg/roiz/New() ..() reagents.add_reagent("egg", 9) bitesize = 4 -/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/afterattack(obj/O as obj, mob/user as mob, proximity) - if(istype(O,/obj/machinery/microwave)) - return ..() - if(!(proximity && O.is_open_container())) - return - user << "You crack \the [src] into \the [O]." - reagents.trans_to(O, reagents.total_volume) - user.drop_from_inventory(src) - qdel(src) - -/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/throw_impact(atom/hit_atom) - ..() - /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz name = "fried lizard egg" desc = "A large, fried lizard egg, with a touch of salt and pepper. It looks rather chewy." icon = 'icons/vore/custom_items_vr.dmi' icon_state = "friedegg" - center_of_mass = list("x"=16, "y"=14) + volume = 12 /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz/New() ..() @@ -821,6 +807,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie desc = "A hard boiled lizard egg. Be careful, a lizard detective may hatch!" icon = 'icons/vore/custom_items_vr.dmi' icon_state = "egg_roiz" + volume = 12 /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz/New() ..() @@ -833,9 +820,9 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie icon = 'icons/vore/custom_items_vr.dmi' icon_state = "chocolateegg_roiz" filling_color = "#7D5F46" - center_of_mass = list("x"=16, "y"=13) nutriment_amt = 3 nutriment_desc = list("chocolate" = 5) + volume = 18 /obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz/New() ..() From 9f2292ce36c5822717b5562cba90f8fbc8dd0eba Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sun, 4 Jun 2017 20:33:49 -0400 Subject: [PATCH 098/261] Update rig.dm --- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 403e29f662..b586f04d27 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -199,7 +199,7 @@ if(!piece) continue piece.icon_state = "[initial(icon_state)]" if(airtight) - piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT|PHORONGUARD) //VOREStation edit + piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT) update_icon(1) /obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant) From 8889eb485de79fe311d220b2bf1555b706a4bc88 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Sun, 4 Jun 2017 20:34:30 -0400 Subject: [PATCH 099/261] Update rig_pieces_vr.dm --- code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm index 4724ebce5e..ec36224801 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm @@ -322,4 +322,13 @@ update_icon() return 1 else - return 1 \ No newline at end of file + return 1 + +/obj/item/clothing/head/helmet/space/rig + phoronproof = 1 +/obj/item/clothing/gloves/gauntlets/rig + phoronproof = 1 +/obj/item/clothing/shoes/magboots/rig + phoronproof = 1 +/obj/item/clothing/suit/space/rig + phoronproof = 1 From 4ca9cdb49103ed0339a051be85152060070a2545 Mon Sep 17 00:00:00 2001 From: SpoopyLizz Date: Mon, 5 Jun 2017 16:07:22 +0200 Subject: [PATCH 100/261] custom_items.txt file updated to include the implanter --- config/custom_items.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/custom_items.txt b/config/custom_items.txt index 5e142ea5eb..e59e46dc6d 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -539,6 +539,12 @@ character_name: Fortune Bloise item_path: /obj/item/weapon/storage/backpack/satchel/fluff/swat43bag } +{ +ckey: SpoopyLizz +character_name: Roiz Lizden +item_path: /obj/item/weapon/implanter/reagent_generator/roiz +} + # ######## T CKEYS { ckey: tonyvld From c0bce69b7ae95489f50cc21ff800b3ae8dce37d5 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 25 May 2017 15:43:59 -0400 Subject: [PATCH 101/261] Fixes a typo in Guest Pass UI template. Fixes https://github.com/VOREStation/VOREStation/issues/1441 --- nano/templates/guest_pass.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/templates/guest_pass.tmpl b/nano/templates/guest_pass.tmpl index 80525f5331..821ba0a474 100644 --- a/nano/templates/guest_pass.tmpl +++ b/nano/templates/guest_pass.tmpl @@ -19,7 +19,7 @@ {{else}}

    Guest pass terminal #{{:data.uid}}

    - {{:helper.link('View activity log', 'list', {'mode' : 1})}} {{:helper.link('Issure Pass', 'eject', {'action' : 'issue'})}} + {{:helper.link('View activity log', 'list', {'mode' : 1})}} {{:helper.link('Issue Pass', 'eject', {'action' : 'issue'})}}

    -
    {{:value.address}}
    {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} +
    {{:value.address}}
    + {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Call', 'phone', {'dial' : value.address, 'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Msg', 'mail-closed', {'copy' : value.address, 'copy_name' : value.name, 'switch_tab' : 40})}}
    {{/for}} From ade7f6c1cd04c3deda193df8b86d5f974d3fc8ed Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 4 Jun 2017 18:00:16 -0400 Subject: [PATCH 116/261] Communicator QOL Tweak Call/Msg buttons on contacts list --- code/game/objects/items/devices/communicator/communicator.dm | 4 ++-- nano/templates/communicator.tmpl | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 018be58705..5df911cba8 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -261,7 +261,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Proc: ui_interact() // Parameters: 4 (standard NanoUI arguments) // Description: Uses a bunch of for loops to turn lists into lists of lists, so they can be displayed in nanoUI, then displays various buttons to the user. -/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) // this is the data which will be sent to the ui var/data[0] //General nanoUI information var/communicators[0] //List of communicators @@ -356,7 +356,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700) + ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700, state = key_state) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 58b86a30d7..6157f45d61 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -152,7 +152,10 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{:value.name}}
    -
    {{:value.address}}
    {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} +
    {{:value.address}}
    + {{:helper.link('Copy', 'pencil', {'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Call', 'phone', {'dial' : value.address, 'copy' : value.address, 'switch_tab' : 2})}} + {{:helper.link('Msg', 'mail-closed', {'copy' : value.address, 'copy_name' : value.name, 'switch_tab' : 40})}}
    {{/for}} From c829a195e1c24b9e0d15c5d3d0c03ceb6667d4f2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 3 Jun 2017 00:36:03 -0400 Subject: [PATCH 117/261] Polaris-able surgery fix --- code/modules/surgery/implant.dm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 3e49482c75..48aca377ee 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -13,22 +13,22 @@ return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) proc/get_max_wclass(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") - return 1 - if ("upper body") - return 3 - if ("lower body") - return 2 + switch (affected.organ_tag) + if (BP_HEAD) + return ITEMSIZE_TINY + if (BP_TORSO) + return ITEMSIZE_NORMAL + if (BP_GROIN) + return ITEMSIZE_SMALL return 0 proc/get_cavity(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") + switch (affected.organ_tag) + if (BP_HEAD) return "cranial" - if ("upper body") + if (BP_TORSO) return "thoracic" - if ("lower body") + if (BP_GROIN) return "abdominal" return "" From 53069d1dcb6b4e3bcd42d2cad5095b31612fd55f Mon Sep 17 00:00:00 2001 From: Verkister Date: Tue, 6 Jun 2017 12:38:32 +0300 Subject: [PATCH 118/261] Adds fluff science goggles that actually do nothing. --- code/modules/vore/fluffstuff/custom_items_vr.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 12ba4639a1..6cb35d6688 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -771,6 +771,14 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie accessset = 1 ..() +//verkister: Cameron Eggbert - Science goggles that ACTUALLY do nothing. +/obj/item/clothing/glasses/science_proper + name = "Aesthetic Science Goggles" + desc = "The goggles really do nothing this time!" + icon_state = "purple" + item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses") + item_flags = AIRTIGHT + //The perfect adminboos device? /obj/item/device/perfect_tele name = "personal translocator" From 26e817981a7ce2fb2592075c0316a6b82dc84bb5 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Tue, 6 Jun 2017 12:23:03 +0100 Subject: [PATCH 119/261] chimera bugfixes and tweaks --- .../mob/living/carbon/human/human_damage.dm | 6 ++++-- .../station/station_special_abilities_vr.dm | 21 +++++++++++++------ .../species/station/station_special_vr.dm | 21 +++++++++---------- .../Chemistry-Reagents-Food-Drinks.dm | 3 +++ 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 30ee7c64d6..cca82b578b 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -186,13 +186,15 @@ ..() /mob/living/carbon/human/proc/Stasis(amount) - if((species.flags & NO_SCAN) || isSynthetic()) + //if((species.flags & NO_SCAN) || isSynthetic()) vorestation removal + if(((species.flags & NO_SCAN) && !istype(species, /datum/species/xenochimera)) || isSynthetic()) //vorestation addition in_stasis = 0 else in_stasis = amount /mob/living/carbon/human/proc/getStasis() - if((species.flags & NO_SCAN) || isSynthetic()) + //if((species.flags & NO_SCAN) || isSynthetic()) vorestation removal + if(((species.flags & NO_SCAN) && !istype(species, /datum/species/xenochimera)) || isSynthetic()) //vorestation addition return 0 return in_stasis diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 8feb3e5b97..acb293fef0 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -17,13 +17,13 @@ return if(C.stat == DEAD) //Uh oh, you died! - if(C.reagents.has_reagent("nutriment")) //Let's hope you have nutriment in you.... If not + if(C.hasnutriment()) //Let's hope you have nutriment in you.... If not var/time = (500+1/((nutrition_used/100+1)/1300)) C.weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that. C.reviving = 1 C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.in_stasis = 1 + C.Stasis(10000) //ensure complete stasis. This will put them to sleep as well. spawn(time SECONDS) if(C) //Runtime prevention. @@ -42,7 +42,7 @@ C.reviving = 1 C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.in_stasis = 1 + C.Stasis(10000) spawn(time SECONDS) if(C.stat != DEAD) //If they're still alive after regenning. @@ -50,11 +50,12 @@ C.verbs += /mob/living/carbon/human/proc/hatch return else if(C.stat == DEAD) - if(C.reagents.has_reagent("nutriment")) //Let's hope you have nutriment in you.... If not + if(C.hasnutriment()) //Let's hope you have nutriment in you.... If not C << "Consciousness begins to stir as your new body awakens, ready to hatch.." C.verbs += /mob/living/carbon/human/proc/hatch else //Dead until nutrition injected. C << "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process." + C.reviving = 0 // so they can try again when they're given a kickstart return else return //Something went wrong @@ -63,6 +64,14 @@ +/mob/living/carbon/human/proc/hasnutriment() + if (src.bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein. + return 1 + else if (src.ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective. + return 1 + else return 0 + + /mob/living/carbon/human/proc/hatch() set name = "Hatch" set category = "Abilities" @@ -85,7 +94,7 @@ var/T = get_turf(src) new /obj/effect/gibspawner/human/scree(T) var/braindamage = C.brainloss/2 //If you have 100 brainloss, it gives you 50. - C.in_stasis = 0 + C.Stasis(0) C.revive() // I did have special snowflake code, but this is easier. C.weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken. C.nutrition = old_nutrition @@ -119,7 +128,7 @@ C.drop_from_inventory(W) spawn(3600 SECONDS) //1 hour wait until you can revive again. C.reviving = 0 - C.in_stasis = 0 + C.Stasis(0) C.verbs -= /mob/living/carbon/human/proc/hatch return else diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 4301f45ccd..e785518b17 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -73,7 +73,7 @@ H.feral = min(150-H.nutrition, H.feral+1) //Feralness increases while this hungry, capped at 50-150 depending on hunger. // If they're hurt, chance of snapping. Not if they're straight-up KO'd though. - if (H.stat == CONSCIOUS && H.traumatic_shock >=36 && H.in_stasis == 0) //30 brute/burn, or 18 halloss. + if (H.stat == CONSCIOUS && H.traumatic_shock >=36 && !H.inStasisNow()) //30 brute/burn, or 18 halloss. if (2.5*H.halloss >= H.traumatic_shock) //If the majority of their shock is due to halloss, greater chance of snapping. if(prob(min(10,(0.2 * H.traumatic_shock)))) if(H.feral == 0) @@ -111,6 +111,8 @@ if(H.feral > 0) //do the following if feral, otherwise no effects. var/light_amount = H.getlightlevel() //how much light there is in the place + H.shock_stage = max(H.shock_stage-(H.feral/20), 0) //if they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it. + for(var/mob/living/M in viewers(H)) if(M != H) // someone in view if(prob(0.5)) // 1 in 200 chance of doing something so as not to interrupt scenes @@ -160,28 +162,25 @@ var/pressure2 = environment.return_pressure() var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2) - if(adjusted_pressure2 <= 20 && H.in_stasis == 1) //If they're in a enviroment with no pressure and are in stasis (See: regenerating), don't kill them. + if(adjusted_pressure2 <= 20 && H.inStasisNow()) //If they're in a enviroment with no pressure and are in stasis (See: regenerating), don't kill them. //This is just to prevent them from taking damage if they're in stasis. else if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, damage them. H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") - if(H.bodytemperature <= 260 && H.in_stasis == 1) //If they're in stasis, don't give them them the negative cold effects + if(H.bodytemperature <= 260 && H.inStasisNow()) //If they're in stasis, don't give them them the negative cold effects //This is just here to prevent them from getting cold effects else if(H.bodytemperature <= 260) //If they're not in stasis and are cold. Don't really have to add in an exception to cryo cells, as the effects aren't anything /too/ horrible. - var/colddamage = 0 + var/coldshock = 0 if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly. - colddamage = 4 //This will begin to knock them out until they run out of oxygen and suffocate or until someone finds them. + coldshock = 4 //This will begin to knock them out until they run out of oxygen and suffocate or until someone finds them. H.eye_blurry = 5 //Blurry vision in the cold. if(H.bodytemperature <= 199 && H.bodytemperature >= 100) //Extremely cold. Even in somewhere like the server room it takes a while for bodytemp to drop this low. - colddamage = 8 + coldshock = 8 H.eye_blurry = 5 if(H.bodytemperature <= 99) //Insanely cold. - colddamage = 20 + coldshock = 16 H.eye_blurry = 5 - if(H.paralysis) //stops weaken spam from being repeatedly taken over max halloss when already KO'd. - H.halloss = min(H.halloss+colddamage, H.species.total_health - 1) //if already stunned, only take them up to the point of restunning - else - H.halloss += colddamage //Harsh punishment for staying in space, and it'll take them a while to fully thaw out when they get retrieved. + H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral. return diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 88d059ed96..a847a5e222 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -77,6 +77,9 @@ if(alien && alien == IS_SKRELL) M.adjustToxLoss(2 * removed) return + else if(istype(M.species, /datum/species/xenochimera)) //vorestation addition + affect_ingest(M, alien, removed) //like hell are chimera of all things going to be poisoned by injecting them with meat + return ..() /datum/reagent/nutriment/protein/egg // Also bad for skrell. From b481482a62e76f0174c04899cf79cb9ec0035a0b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 12:17:06 -0400 Subject: [PATCH 120/261] Removes access restrictions on maintenance airlocks The non-department ones. All the department-specific ones stay locked for obvious reasons. Allows preds to nom more people in private, and exploring the z2 maintenance labyrinth, which, honestly, I'll probably add more to. Instead of adding access_maint_tunnels to every job (thus making the access almost pointless), we can leave access_maint_tunnels on super deep dark maint areas or something. --- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/multi_tile.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b1cbd21dfd..fbef08cd30 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -103,7 +103,7 @@ /obj/machinery/door/airlock/maintenance name = "Maintenance Access" icon = 'icons/obj/doors/Doormaint.dmi' - req_one_access = list(access_maint_tunnels) + //req_one_access = list(access_maint_tunnels) //VOREStation Edit - Maintenance is open access assembly_type = /obj/structure/door_assembly/door_assembly_mai /obj/machinery/door/airlock/maintenance/cargo diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index a7c75e6253..aef0fbe7a4 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -82,4 +82,4 @@ /obj/machinery/door/airlock/multi_tile/metal/mait icon = 'icons/obj/doors/Door2x1_Maint.dmi' - req_one_access = list(access_maint_tunnels) + //req_one_access = list(access_maint_tunnels) //VOREStaiton Edit - Maintenance is open access From c45ddb6d27110bfeba7ef7bb12dc85adb10bc9a5 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Tue, 6 Jun 2017 21:04:51 +0100 Subject: [PATCH 121/261] further fixes --- code/modules/mob/living/carbon/human/human_damage.dm | 6 ++---- .../species/station/station_special_abilities_vr.dm | 8 ++++---- .../carbon/human/species/station/station_special_vr.dm | 6 +++--- .../Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm | 9 ++++----- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index cca82b578b..30ee7c64d6 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -186,15 +186,13 @@ ..() /mob/living/carbon/human/proc/Stasis(amount) - //if((species.flags & NO_SCAN) || isSynthetic()) vorestation removal - if(((species.flags & NO_SCAN) && !istype(species, /datum/species/xenochimera)) || isSynthetic()) //vorestation addition + if((species.flags & NO_SCAN) || isSynthetic()) in_stasis = 0 else in_stasis = amount /mob/living/carbon/human/proc/getStasis() - //if((species.flags & NO_SCAN) || isSynthetic()) vorestation removal - if(((species.flags & NO_SCAN) && !istype(species, /datum/species/xenochimera)) || isSynthetic()) //vorestation addition + if((species.flags & NO_SCAN) || isSynthetic()) return 0 return in_stasis diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index acb293fef0..d65519f15f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -23,7 +23,7 @@ C.reviving = 1 C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.Stasis(10000) //ensure complete stasis. This will put them to sleep as well. + C.does_not_breathe = 1 //effectively makes them spaceworthy while regenning spawn(time SECONDS) if(C) //Runtime prevention. @@ -42,7 +42,7 @@ C.reviving = 1 C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.Stasis(10000) + C.does_not_breathe = 1 //effectively makes them spaceworthy while regenning spawn(time SECONDS) if(C.stat != DEAD) //If they're still alive after regenning. @@ -94,7 +94,7 @@ var/T = get_turf(src) new /obj/effect/gibspawner/human/scree(T) var/braindamage = C.brainloss/2 //If you have 100 brainloss, it gives you 50. - C.Stasis(0) + C.does_not_breathe = 0 //start breathing again C.revive() // I did have special snowflake code, but this is easier. C.weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken. C.nutrition = old_nutrition @@ -128,7 +128,7 @@ C.drop_from_inventory(W) spawn(3600 SECONDS) //1 hour wait until you can revive again. C.reviving = 0 - C.Stasis(0) + C.does_not_breathe = 0 //start breathing again C.verbs -= /mob/living/carbon/human/proc/hatch return else diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index e785518b17..d1ad3dce6f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -73,7 +73,7 @@ H.feral = min(150-H.nutrition, H.feral+1) //Feralness increases while this hungry, capped at 50-150 depending on hunger. // If they're hurt, chance of snapping. Not if they're straight-up KO'd though. - if (H.stat == CONSCIOUS && H.traumatic_shock >=36 && !H.inStasisNow()) //30 brute/burn, or 18 halloss. + if (H.stat == CONSCIOUS && H.traumatic_shock >=36) //30 brute/burn, or 18 halloss. if (2.5*H.halloss >= H.traumatic_shock) //If the majority of their shock is due to halloss, greater chance of snapping. if(prob(min(10,(0.2 * H.traumatic_shock)))) if(H.feral == 0) @@ -162,13 +162,13 @@ var/pressure2 = environment.return_pressure() var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2) - if(adjusted_pressure2 <= 20 && H.inStasisNow()) //If they're in a enviroment with no pressure and are in stasis (See: regenerating), don't kill them. + if(adjusted_pressure2 <= 20 && H.does_not_breathe) //If they're in a enviroment with no pressure and are not breathing (See: regenerating), don't kill them. //This is just to prevent them from taking damage if they're in stasis. else if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, damage them. H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") - if(H.bodytemperature <= 260 && H.inStasisNow()) //If they're in stasis, don't give them them the negative cold effects + if(H.bodytemperature <= 260 && H.does_not_breathe) //If they're regenerating, don't give them them the negative cold effects //This is just here to prevent them from getting cold effects else if(H.bodytemperature <= 260) //If they're not in stasis and are cold. Don't really have to add in an exception to cryo cells, as the effects aren't anything /too/ horrible. diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index a847a5e222..0a208fd0a3 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -34,10 +34,12 @@ data -= taste /datum/reagent/nutriment/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) - if(!injectable) + /* if(!injectable) vorestation removal M.adjustToxLoss(0.1 * removed) return - affect_ingest(M, alien, removed) + affect_ingest(M, alien, removed) */ + if(injectable) //vorestation addition/replacement + affect_ingest(M, alien, removed) /datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) switch(alien) @@ -77,9 +79,6 @@ if(alien && alien == IS_SKRELL) M.adjustToxLoss(2 * removed) return - else if(istype(M.species, /datum/species/xenochimera)) //vorestation addition - affect_ingest(M, alien, removed) //like hell are chimera of all things going to be poisoned by injecting them with meat - return ..() /datum/reagent/nutriment/protein/egg // Also bad for skrell. From 08e7703e4f1d77592d7cc43e00c3f32b297ab484 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Mon, 5 Jun 2017 00:11:48 -0400 Subject: [PATCH 122/261] Finishing Up NIFs Squashed commit: [4b18ca1] Finishing up NIFs [e4adb4a] Tons more NIF work All the implants are done! --- code/__defines/nifsoft.dm | 37 ++-- code/game/objects/structures/trash_pile.dm | 3 +- .../client/preference_setup/vore/08_nif.dm | 45 +++++ .../living/carbon/human/human_attackhand.dm | 1 + .../mob/living/carbon/human/human_damage.dm | 4 + code/modules/mob/living/carbon/human/life.dm | 6 +- code/modules/nano/interaction/inventory_vr.dm | 22 +- code/modules/nifsoft/nif.dm | 140 ++++++++++--- code/modules/nifsoft/nif_softshop.dm | 108 +++++++++- code/modules/nifsoft/nif_statpanel.dm | 9 +- code/modules/nifsoft/nifsoft.dm | 75 ++++++- code/modules/nifsoft/software/01_vision.dm | 84 ++++---- code/modules/nifsoft/software/05_health.dm | 63 ++++-- code/modules/nifsoft/software/10_combat.dm | 143 ++++++++++++- code/modules/nifsoft/software/14_commlink.dm | 132 ++++++++++++ code/modules/nifsoft/software/15_misc.dm | 191 +++++++++++++++++- code/modules/organs/organ_external.dm | 2 + code/modules/research/designs_vr.dm | 8 + code/modules/resleeving/implant.dm | 3 +- code/modules/resleeving/infocore.dm | 20 +- code/modules/resleeving/machines.dm | 6 + code/modules/vore/persist/persist_vr.dm | 30 ++- icons/obj/vending_vr.dmi | Bin 67288 -> 67274 bytes maps/tether/tether-01-surface.dmm | 8 +- maps/tether/tether-03-station.dmm | 2 +- maps/tether/tether-06-colony.dmm | 6 +- maps/tether/tether-07-misc.dmm | 2 +- sound/items/nif_click.ogg | Bin 0 -> 7990 bytes sound/items/nif_tone_bad.ogg | Bin 0 -> 11552 bytes sound/items/nif_tone_good.ogg | Bin 0 -> 33960 bytes vorestation.dme | 2 + 31 files changed, 1003 insertions(+), 149 deletions(-) create mode 100644 code/modules/client/preference_setup/vore/08_nif.dm create mode 100644 code/modules/nifsoft/software/14_commlink.dm create mode 100644 sound/items/nif_click.ogg create mode 100644 sound/items/nif_tone_bad.ogg create mode 100644 sound/items/nif_tone_good.ogg diff --git a/code/__defines/nifsoft.dm b/code/__defines/nifsoft.dm index e4d4f12293..06d1b0c7aa 100644 --- a/code/__defines/nifsoft.dm +++ b/code/__defines/nifsoft.dm @@ -16,27 +16,29 @@ #define NIF_UVFILTER 12 #define NIF_FLASHPROT 13 //Health-related -#define NIF_ORGANIC_HEAL 14 -#define NIF_SYNTH_HEAL 15 -#define NIF_AUTOSTASIS 16 //These two are just part of -#define NIF_MED_ALARM 17 //medichines right now -#define NIF_TOXHEAL 18 -#define NIF_SPAREBREATH 19 +#define NIF_CREWMONITOR 14 +#define NIF_ORGANIC_HEAL 15 +#define NIF_SYNTH_HEAL 16 +#define NIF_AUTOSTASIS 17 //These two are just part of +#define NIF_MED_ALARM 18 //medichines right now +#define NIF_TOXHEAL 19 //And this, for organics +#define NIF_SPAREBREATH 20 //Combat Related -#define NIF_BRUTEARMOR 20 -#define NIF_BURNARMOR 21 -#define NIF_PAINKILLERS 22 -#define NIF_HARDCLAWS 23 -#define NIF_HIDDENLASER 24 +#define NIF_BRUTEARMOR 21 +#define NIF_BURNARMOR 22 +#define NIF_PAINKILLERS 23 +#define NIF_HARDCLAWS 24 +#define NIF_HIDDENLASER 25 //Other -#define NIF_COMMLINK 25 -#define NIF_SUITSENSORS 26 +#define NIF_COMMLINK 26 #define NIF_APCCHARGE 27 #define NIF_PRESSURE 28 #define NIF_HEATSINK 29 +#define NIF_COMPLIANCE 30 +#define NIF_SIZECHANGE 31 // Must be equal to the highest number above -#define TOTAL_NIF_SOFTWARE 29 +#define TOTAL_NIF_SOFTWARE 31 ////////////////////// // NIF flag list hints @@ -78,10 +80,9 @@ //Other #define NIF_O_COMMLINK 0x1 -#define NIF_O_SENSORS 0x2 -#define NIF_O_APCCHARGE 0x4 -#define NIF_O_PRESSURESEAL 0x8 -#define NIF_O_HEATSINKS 0x10 +#define NIF_O_APCCHARGE 0x2 +#define NIF_O_PRESSURESEAL 0x4 +#define NIF_O_HEATSINKS 0x8 /////////////////// // applies_to flags diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index 5490251280..0959f93004 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -225,7 +225,8 @@ prob(4);/obj/item/device/radio_jammer, prob(2);/obj/item/weapon/storage/box/syndie_kit/spy, prob(2);/obj/item/weapon/grenade/anti_photon, - prob(1);/obj/item/weapon/cell/hyper/empty) + prob(1);/obj/item/weapon/cell/hyper/empty, + prob(1);/obj/item/weapon/disk/nifsoft/compliance) var/obj/item/I = new path() return I diff --git a/code/modules/client/preference_setup/vore/08_nif.dm b/code/modules/client/preference_setup/vore/08_nif.dm new file mode 100644 index 0000000000..52586d3bcf --- /dev/null +++ b/code/modules/client/preference_setup/vore/08_nif.dm @@ -0,0 +1,45 @@ +//Pretty small file, mostly just for storage. +/datum/preferences + var/obj/item/device/nif/nif_path + var/nif_durability + +// Definition of the stuff for NIFs +/datum/category_item/player_setup_item/vore/nif + name = "NIF Data" + sort_order = 8 + +/datum/category_item/player_setup_item/vore/nif/load_character(var/savefile/S) + S["nif_path"] >> pref.nif_path + S["nif_durability"] >> pref.nif_durability + +/datum/category_item/player_setup_item/vore/nif/save_character(var/savefile/S) + S["nif_path"] << pref.nif_path + S["nif_durability"] << pref.nif_durability + +/datum/category_item/player_setup_item/vore/nif/sanitize_character() + if(pref.nif_path && !ispath(pref.nif_path)) //We have at least a text string that should be a path. + pref.nif_path = text2path(pref.nif_path) //Try to convert it to a hard path. + if(!pref.nif_path) //If we couldn't, kill it. + pref.nif_path = null //Kill! + WARNING("Loaded a NIF but it was an invalid path, [pref.real_name]") + + if(ispath(pref.nif_path) && !pref.nif_durability) //How'd you lose this? + pref.nif_durability = initial(pref.nif_path.durability) //Well, have a new one, my bad. + WARNING("Loaded a NIF but with no durability, [pref.real_name]") + +/datum/category_item/player_setup_item/vore/nif/copy_to_mob(var/mob/living/carbon/human/character) + //If you had a NIF... + if((character.type == /mob/living/carbon/human) && ispath(pref.nif_path) && pref.nif_durability) + new pref.nif_path(character,pref.nif_durability) + + //And now here's the trick. We wipe these so that if they die, they lose the NIF. + //Backup implants will start saving this again periodically, and so will cryo'ing out. + pref.nif_path = null + pref.nif_durability = null + var/savefile/S = new /savefile(pref.path) + if(!S) WARNING ("Couldn't load NIF save savefile? [pref.real_name]") + S.cd = "/character[pref.default_slot]" + save_character(S) + +/datum/category_item/player_setup_item/vore/nif/content(var/mob/user) + . += "NIF: [ispath(pref.nif_path) ? "Present" : "None"]" diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 3af1a52bf6..b321d288fb 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,5 +1,6 @@ /mob/living/carbon/human/proc/get_unarmed_attack(var/mob/living/carbon/human/target, var/hit_zone) // VOREStation Edit - Begin + if(nif && nif.flag_check(NIF_C_HARDCLAWS,NIF_FLAGS_COMBAT)){return unarmed_hardclaws} if(src.default_attack && src.default_attack.is_usable(src, target, hit_zone)) if(pulling_punches) var/datum/unarmed_attack/soft_type = src.default_attack.get_sparring_variant() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 30ee7c64d6..d1f468500b 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -104,6 +104,7 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_brute_damage_percent)) amount *= M.incoming_brute_damage_percent + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage take_overall_damage(amount, 0) else for(var/datum/modifier/M in modifiers) @@ -120,6 +121,7 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage take_overall_damage(0, amount) else for(var/datum/modifier/M in modifiers) @@ -139,6 +141,7 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_brute_damage_percent)) amount *= M.incoming_brute_damage_percent + if(nif && nif.flag_check(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage O.take_damage(amount, 0, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) else for(var/datum/modifier/M in modifiers) @@ -160,6 +163,7 @@ amount *= M.incoming_damage_percent if(!isnull(M.incoming_fire_damage_percent)) amount *= M.incoming_fire_damage_percent + if(nif && nif.flag_check(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT)){amount *= 0.7} //VOREStation Edit - NIF mod for damage resistance for this type of damage O.take_damage(0, amount, sharp=is_sharp(damage_source), edge=has_edge(damage_source), used_weapon=damage_source) else for(var/datum/modifier/M in modifiers) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 75d598fb69..fd21301044 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -666,7 +666,8 @@ pressure_alert = -1 else if( !(COLD_RESISTANCE in mutations)) - take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + if(!isSynthetic() || !nif || !nif.flag_check(NIF_O_PRESSURESEAL,NIF_FLAGS_OTHER)) //VOREStation Edit - NIF pressure seals + take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") if(getOxyLoss() < 55) // 11 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute adjustOxyLoss(4) // 16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, roughly twenty seconds pressure_alert = -2 @@ -703,7 +704,8 @@ // FBPs will overheat, prosthetic limbs are fine. if(robobody_count) - bodytemperature += round(robobody_count*1.75) + if(!nif || !nif.flag_check(NIF_O_HEATSINKS,NIF_FLAGS_OTHER)) //VOREStation Edit - NIF heatsinks + bodytemperature += round(robobody_count*1.75) var/body_temperature_difference = species.body_temperature - bodytemperature diff --git a/code/modules/nano/interaction/inventory_vr.dm b/code/modules/nano/interaction/inventory_vr.dm index 373e9f382b..21ee1ca590 100644 --- a/code/modules/nano/interaction/inventory_vr.dm +++ b/code/modules/nano/interaction/inventory_vr.dm @@ -1,7 +1,7 @@ /* This state checks that the src_object is on the user's glasses slot. */ -/var/global/datum/topic_state/inventory_state/glasses_state = new() +/var/global/datum/topic_state/glasses_state/glasses_state = new() /datum/topic_state/glasses_state/can_use_topic(var/src_object, var/mob/user) if(ishuman(user)) @@ -10,3 +10,23 @@ return user.shared_nano_interaction() return STATUS_CLOSE + +/var/global/datum/topic_state/nif_state/nif_state = new() + +/datum/topic_state/nif_state/can_use_topic(var/src_object, var/mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.nif && H.nif.stat == NIF_WORKING && src_object == H.nif) + return user.shared_nano_interaction() + + return STATUS_CLOSE + +/var/global/datum/topic_state/commlink_state/commlink_state = new() + +/datum/topic_state/commlink_state/can_use_topic(var/src_object, var/mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.nif && H.nif.stat == NIF_WORKING && H.nif.comm == src_object) + return user.shared_nano_interaction() + + return STATUS_CLOSE diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index b4ef9eafd7..dc958718cc 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -3,8 +3,8 @@ //Nanotech Implant Foundation /obj/item/device/nif - name = "nanotech implant foundation" - desc = "A somewhat degraded copy of a Kitsuhana working surface, in a box. Can print new \ + name = "nanite implant framework" + desc = "A somewhat diminished knockoff of a Kitsuhana nano working surface, in a box. Can print new \ implants inside living hosts on the fly based on software uploads. Must be surgically \ implanted in the head to work. May eventually wear out and break." @@ -14,7 +14,7 @@ w_class = ITEMSIZE_TINY var/durability = 100 // Durability remaining - var/burn_factor = 100 // Divisor for power charge from nutrition (efficiency basically) + var/bioadap = FALSE // If it'll work in fancy species var/tmp/power_usage = 0 // Nifsoft adds to this var/tmp/mob/living/carbon/human/human // Our owner! @@ -31,31 +31,51 @@ var/tmp/install_done // Time when install will finish var/tmp/open = FALSE // If it's open for maintenance (1-3) - var/obj/item/clothing/glasses/hud/nif_hud/nif_hud + var/obj/item/clothing/glasses/hud/nif_hud/nif_hud // The AR ones require this + var/obj/item/device/communicator/commlink/comm // The commlink requires this var/global/icon/big_icon - var/global/click_sound = 'sound/effects/pop.ogg' + var/global/click_sound = 'sound/items/nif_click.ogg' + var/global/bad_sound = 'sound/items/nif_tone_bad.ogg' + var/global/good_sound = 'sound/items/nif_tone_good.ogg' + var/global/list/look_messages = list( + "flicks their eyes around", + "looks at something unseen", + "reads some invisible text", + "seems to be daydreaming", + "focuses elsewhere for a moment") //Constructor comes with a free AR HUD /obj/item/device/nif/New(var/newloc,var/wear) ..(newloc) - new /datum/nifsoft/ar_civ(src) + + //Required for AR stuff. nif_hud = new(src) + //First one to spawn in the game, make a big icon if(!big_icon) big_icon = new(icon,icon_state = "nif_full") - //Probably loading from a save + //If given a human on spawn (probably from persistence) if(ishuman(newloc)) var/mob/living/carbon/human/H = newloc - implant(H) - owner = H.mind.name - name = initial(name) + " ([owner])" - stat = NIF_WORKING + if(!quick_implant(H)) + WARNING("NIF spawned in [H] failed to implant") + spawn(0) + qdel(src) + else + //Free commlink for return customers + new /datum/nifsoft/commlink(src) + //Free civilian AR included + new /datum/nifsoft/ar_civ(src) + + //If given wear (like when spawned) then done if(wear) durability = wear + wear(0) //Just make it update. + //Draw me yo. update_icon() //Destructor cleans up references @@ -66,12 +86,20 @@ for(var/S in nifsofts) if(S) qdel(S) + if(nif_hud) + qdel(nif_hud) + if(comm) + qdel(comm) + nifsofts.Cut() ..() //Being implanted in some mob /obj/item/device/nif/proc/implant(var/mob/living/carbon/human/H) - if(istype(H) && !H.nif && H.species && !(H.species.flags & NO_SCAN) && (loc == H.get_organ(BP_HEAD))) //NO_SCAN is the default 'too complicated' flag. + if(istype(H) && !H.nif && H.species && (loc == H.get_organ(BP_HEAD))) + if(!bioadap && (H.species.flags & NO_SCAN)) //NO_SCAN is the default 'too complicated' flag + return FALSE + human = H human.nif = src stat = NIF_INSTALLING @@ -87,8 +115,10 @@ return FALSE src.forceMove(head) head.implants += src - owner = H.real_name - return implant(H) + spawn(0) //Let the character finish spawning yo. + owner = H.mind.name + implant(H) + return TRUE return FALSE @@ -121,20 +151,20 @@ //Wear update/check proc /obj/item/device/nif/proc/wear(var/wear = 0) - if(wear) - durability -= wear * rand(0.85,1.15) // Also +/- 15% + wear *= (rand(85,115) / 100) //Apparently rand() only takes integers. + durability -= wear if(durability <= 0) - stat = NIF_TEMPFAIL - update_icon() notify("Danger! General system insta#^!($",TRUE) to_chat(human,"Your NIF vision overlays disappear and your head suddenly seems very quiet...") + stat = NIF_TEMPFAIL + update_icon() //Attackby proc, for maintenance /obj/item/device/nif/attackby(obj/item/weapon/W, mob/user as mob) if(open == 0 && istype(W,/obj/item/weapon/screwdriver)) if(do_after(user, 4 SECONDS, src) && open == 0) - user.visible_message("[user] unscrews and pries open \the [src].","You unscrew and pry open \the [src].") + user.visible_message("[user] unscrews and pries open \the [src].","You unscrew and pry open \the [src].") playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) open = 1 update_icon() @@ -144,25 +174,25 @@ to_chat(user,"You need at least three coils of wire to add them to \the [src].") return if(do_after(user, 6 SECONDS, src) && open == 1 && C.use(3)) - user.visible_message("[user] replaces some wiring in \the [src].","You replace any burned out wiring in \the [src].") + user.visible_message("[user] replaces some wiring in \the [src].","You replace any burned out wiring in \the [src].") playsound(user, 'sound/items/Deconstruct.ogg', 50, 1) open = 2 update_icon() else if(open == 2 && istype(W,/obj/item/device/multitool)) if(do_after(user, 8 SECONDS, src) && open == 2) - user.visible_message("[user] resets several circuits in \the [src].","You find and repair any faulty circuits in \the [src].") + user.visible_message("[user] resets several circuits in \the [src].","You find and repair any faulty circuits in \the [src].") open = 3 update_icon() else if(open == 3 && istype(W,/obj/item/weapon/screwdriver)) if(do_after(user, 3 SECONDS, src) && open == 3) - user.visible_message("[user] closes up \the [src].","You re-seal \the [src] for use once more.") + user.visible_message("[user] closes up \the [src].","You re-seal \the [src] for use once more.") playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) open = FALSE durability = initial(durability) stat = NIF_PREINSTALL update_icon() -//Wear update/check proc +//Icon updating /obj/item/device/nif/update_icon() if(open) icon_state = "nif_open[open]" @@ -181,19 +211,24 @@ //The (dramatic) install process /obj/item/device/nif/proc/handle_install() - if(human.stat) //No stuff while KO. Sleeping it off is viable, and doesn't start until you wake up from surgery + if(human.stat || !human.mind) //No stuff while KO or not sleeved return FALSE //Firsties if(!install_done) - if(human.real_name == owner) + if(human.mind.name == owner) install_done = world.time + 1 MINUTE notify("Welcome back, [owner]! Performing quick-calibration...") - else + else if(!owner) install_done = world.time + 30 MINUTES notify("Adapting to new user...") sleep(5 SECONDS) notify("Adjoining optic [human.isSynthetic() ? "interface" : "nerve"], please be patient.",TRUE) + else + notify("You are not an authorized user for this device. Please contact [owner].",TRUE) + unimplant() + stat = NIF_TEMPFAIL + return FALSE var/percent_done = (world.time - (install_done - (30 MINUTES))) / (30 MINUTES) @@ -229,7 +264,7 @@ //Finishing up if(1.0 to INFINITY) stat = NIF_WORKING - owner = human.real_name + owner = human.mind.name name = initial(name) + " ([owner])" notify("Calibration complete! User data stored!") @@ -272,12 +307,19 @@ //Prints 'AR' messages to the user /obj/item/device/nif/proc/notify(var/message,var/alert = 0) - if(!human) return + if(!human || stat == NIF_TEMPFAIL) return to_chat(human,"\[\icon[src.big_icon]NIF\] displays, \"[message]\"") + if(prob(1)) human.visible_message("\The [human] [pick(look_messages)].") + if(alert) + human << bad_sound + else + human << good_sound //Called to spend nutrition, returns 1 if it was able to /obj/item/device/nif/proc/use_charge(var/use_charge) + if(stat != NIF_WORKING) return FALSE + //You don't want us to take any? Well okay. if(!use_charge) return TRUE @@ -292,6 +334,8 @@ //Install a piece of software /obj/item/device/nif/proc/install(var/datum/nifsoft/new_soft) + if(stat == NIF_TEMPFAIL) return FALSE + if(nifsofts[new_soft.list_pos]) return FALSE @@ -305,6 +349,7 @@ notify("The software \"[new_soft]\" is not supported in organic life.",TRUE) return FALSE + wear(new_soft.wear) nifsofts[new_soft.list_pos] = new_soft power_usage += new_soft.p_drain @@ -320,7 +365,6 @@ if(new_soft.other_flags) other_flags |= new_soft.other_flags - wear(new_soft.wear) return TRUE //Uninstall a piece of software @@ -353,7 +397,10 @@ //Activate a nifsoft /obj/item/device/nif/proc/activate(var/datum/nifsoft/soft) + if(stat != NIF_WORKING) return FALSE + if(human) + if(prob(5)) human.visible_message("\The [human] [pick(look_messages)].") var/applies_to = soft.applies_to var/synth = human.isSynthetic() if(synth && !(applies_to & NIF_SYNTHETIC)) @@ -366,6 +413,7 @@ return FALSE if(!use_charge(soft.a_drain)) + notify("Not enough power to activate \"[soft]\" NIFsoft!",TRUE) return FALSE if(soft.tick_flags == NIF_ACTIVETICK) @@ -378,6 +426,9 @@ //Deactivate a nifsoft /obj/item/device/nif/proc/deactivate(var/datum/nifsoft/soft) + if(human) + if(prob(5)) human.visible_message("\The [human] [pick(look_messages)].") + if(soft.tick_flags == NIF_ACTIVETICK) nifsofts_life -= soft @@ -427,7 +478,7 @@ //Check for an installed implant /obj/item/device/nif/proc/imp_check(var/soft) - if(!stat == NIF_WORKING) return FALSE + if(stat != NIF_WORKING) return FALSE ASSERT(soft) if(ispath(soft)) @@ -439,7 +490,8 @@ //Check for a set flag /obj/item/device/nif/proc/flag_check(var/flag,var/hint) - if(!stat == NIF_WORKING) return FALSE + if(stat != NIF_WORKING) return FALSE + ASSERT(flag && hint) var/result = FALSE @@ -457,6 +509,7 @@ return result +/////////////////////////////////////////////////////////////////////////////////////// //NIF HUD object becasue HUD handling is trash and should be rewritten /obj/item/clothing/glasses/hud/nif_hud/var/obj/item/device/nif/nif @@ -464,6 +517,12 @@ ..(newloc) nif = newloc +/obj/item/clothing/glasses/hud/nif_hud/Destroy() + if(nif) + nif.nif_hud = null + nif = null + ..() + /obj/item/clothing/glasses/hud/nif_hud/process_hud(M,var/thing) //Faster checking with local var, and this is called often so I want fast. var/visflags = nif.vision_flags @@ -479,3 +538,22 @@ process_omni_hud(nif.human, "sci") else if(NIF_V_AR_CIVILIAN & visflags) process_omni_hud(nif.human, "civ") + +// Alternate NIFs +/obj/item/device/nif/bad + name = "second-hand NIF" + desc = "A copy of a copy of a copy of a copy of... this can't be any good, right? Surely?" + durability = 10 + +/obj/item/device/nif/authentic + name = "\improper Kitsuhana NIF" + desc = "An actual Kitsuhana working surface, in a box. From a society slightly less afraid \ + of self-replicating nanotechnology. Basically just a high-endurance NIF." + durability = 1000 + +/obj/item/device/nif/bioadap + name = "bioadaptive NIF" + desc = "A NIF that goes out of it's way to accomidate strange body types. \ + Will function in species where it normally wouldn't." + durability = 25 + bioadap = TRUE diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 3680b47786..4d0da46843 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -20,7 +20,7 @@ starting_illegal_nifsoft = list() for(var/P in subtypesof(/datum/nifsoft) - /datum/nifsoft/package) var/datum/nifsoft/NS = P - if(initial(NS.initial)) + if(initial(NS.vended)) switch(initial(NS.illegal)) if(TRUE) starting_illegal_nifsoft += NS @@ -40,7 +40,13 @@ for(var/entry in current_list[1]) var/datum/nifsoft/NS = entry - var/name = initial(NS.name) + var/applies_to = initial(NS.applies_to) + var/context = "" + if(!(applies_to & NIF_SYNTHETIC)) + context = " (Org Only)" + else if(!(applies_to & NIF_ORGANIC)) + context = " (Syn Only)" + var/name = "[initial(NS.name)][context]" var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name) product.price = initial(NS.cost) @@ -61,6 +67,104 @@ return ..() +/* +/obj/proc/allowed(mob/M) + //check if it doesn't require any access at all + if(src.check_access(null)) + return 1 + + var/id = M.GetIdCard() + if(id) + return check_access(id) + return 0 + +///obj/item/proc/GetAccess() +// return list() + +/atom/movable/proc/GetAccess() + var/obj/item/weapon/card/id/id = GetIdCard() + return id ? id.GetAccess() : list() + +/obj/proc/GetID() + return null + +/obj/proc/check_access(obj/item/I) + return check_access_list(I ? I.GetAccess() : list()) + +/obj/proc/check_access_list(var/list/L) + if(!req_access) req_access = list() + if(!req_one_access) req_one_access = list() + if(!L) return 0 + if(!istype(L, /list)) return 0 + return has_access(req_access, req_one_access, L) +*/ + +//Had to override this too +/obj/machinery/vending/nifsoft_shop/Topic(href, href_list) + if(stat & (BROKEN|NOPOWER)) + return + if(usr.stat || usr.restrained()) + return + + if(href_list["remove_coin"] && !istype(usr,/mob/living/silicon)) + if(!coin) + usr << "There is no coin in this machine." + return + + coin.forceMove(src.loc) + if(!usr.get_active_hand()) + usr.put_in_hands(coin) + usr << "You remove \the [coin] from \the [src]" + coin = null + categories &= ~CAT_COIN + + if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)))) + if((href_list["vend"]) && (vend_ready) && (!currently_vending)) + if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH + usr << "Access denied." //Unless emagged of course + flick(icon_deny,src) + return + + var/key = text2num(href_list["vend"]) + var/datum/stored_item/vending_product/R = product_records[key] + + // This should not happen unless the request from NanoUI was bad + if(!(R.category & categories)) + return + + //Specific soft access checking + var/datum/nifsoft/path = R.item_path + if(initial(path.access)) + var/list/soft_access = list(initial(path.access)) + var/list/usr_access = usr.GetAccess() + if(!has_access(soft_access, list(), usr_access) && !emagged) + usr << "You aren't authorized to buy [initial(path.name)]." + flick(icon_deny,src) + return + + if(R.price <= 0) + vend(R, usr) + else if(istype(usr,/mob/living/silicon)) //If the item is not free, provide feedback if a synth is trying to buy something. + usr << "Artificial unit recognized. Artificial units cannot complete this transaction. Purchase canceled." + return + else + currently_vending = R + if(!vendor_account || vendor_account.suspended) + status_message = "This machine is currently unable to process payments due to problems with the associated account." + status_error = 1 + else + status_message = "[initial(path.desc)]

    Please swipe a card or insert cash to pay for the item." + status_error = 0 + + else if(href_list["cancelpurchase"]) + currently_vending = null + + else if((href_list["togglevoice"]) && (panel_open)) + shut_up = !shut_up + + add_fingerprint(usr) + nanomanager.update_uis(src) + // Also special treatment! /obj/machinery/vending/nifsoft_shop/vend(datum/stored_item/vending_product/R, mob/user) var/mob/living/carbon/human/H = user diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm index 990bf43565..4ddba7a3c9 100644 --- a/code/modules/nifsoft/nif_statpanel.dm +++ b/code/modules/nifsoft/nif_statpanel.dm @@ -4,7 +4,7 @@ SetupNifStat() /mob/living/carbon/human/proc/SetupNifStat() - var/nif_status + var/nif_status = "" switch(nif.stat) if(NIF_WORKING) nif_status = "Operating Normally" @@ -16,6 +16,7 @@ nif_status = "Adapting To User" else nif_status = "Unknown - Error" + nif_status += " ([round((nif.durability/initial(nif.durability))*100)]%)" stat("NIF Status", nif_status) if(!nif.stat) @@ -39,17 +40,13 @@ nifsoft = new_soft nifsoft_name = new_soft.name name = new_soft.name - toggleable = new_soft.activates /obj/effect/nif_stat/Destroy() nifsoft = null ..() /obj/effect/nif_stat/proc/atom_button_text() - if(!toggleable) - name = "Always On" - else - name = "[nifsoft.active ? "Active" : "Disabled"]" + name = nifsoft.stat_text() return src /obj/effect/nif_stat/Click(var/location, var/control, var/params) diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 453e00d79b..f86e0150e3 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -9,9 +9,9 @@ var/cost = 1000 // Cost in cash of buying this software from a terminal //TODO - While coding - var/initial = TRUE // This is available in NIFSoft Shops at the start of the game + var/vended = TRUE // This is available in NIFSoft Shops at the start of the game var/wear = 1 // The wear (+/- 10% when applied) that this causes to the NIF - var/list/req_one_access // What access they need to buy it + var/access // What access they need to buy it, can only set one for ~reasons~ var/illegal = FALSE // If this is a black-market nifsoft (emag option) var/active = FALSE // Whether the active mode of this implant is on @@ -63,6 +63,7 @@ deactivate() if(nif) . = nif.uninstall(src) + nif = null qdel(src) //Called every life() tick on a mob on active implants @@ -88,6 +89,17 @@ uninstall() return +//Called when installed from a disk +/datum/nifsoft/proc/disk_install(var/mob/living/carbon/human/target,var/mob/living/carbon/human/user) + return TRUE + +//Stat-line clickable text +/datum/nifsoft/proc/stat_text() + if(activates) + return "[active ? "Active" : "Disabled"]" + + return "Always On" + ////////////////////// //A package of NIF software /datum/nifsoft/package @@ -108,3 +120,62 @@ software.Cut() software = null ..() + +///////////////// +// A NIFSoft Disk +/obj/item/weapon/disk/nifsoft + name = "NIFSoft Disk" + desc = "It has a small label: \n\ + \"Portable NIFSoft Disk. \n\ + Insert directly into brain.\"" + icon = 'icons/obj/cloning.dmi' + icon_state = "datadisk2" + item_state = "card-id" + w_class = ITEMSIZE_SMALL + var/datum/nifsoft/stored = null + var/laws = "" + +/obj/item/weapon/disk/nifsoft/afterattack(var/A, mob/user, flag, params) + if(!in_range(user, A)) + return + + if(!ishuman(user) || !ishuman(A)) + return + + var/mob/living/carbon/human/Ht = A + var/mob/living/carbon/human/Hu = user + + if(!Ht.nif || Ht.nif.stat != NIF_WORKING) + to_chat(user,"Either they don't have a NIF, or the disk can't connect.") + return + + Ht.visible_message("[Hu] begins uploading new NIFSoft into [Ht]!","[Hu] is uploading new NIFSoft into you!") + if(do_after(Ht,10 SECONDS,Hu)) + var/extra = extra_params() + new stored(Ht.nif,extra) + qdel(src) + +//So disks can pass fancier stuff. +/obj/item/weapon/disk/nifsoft/proc/extra_params() + return null + +/obj/item/weapon/disk/nifsoft/compliance + name = "NIFSoft Disk (Compliance)" + desc = "Wow, adding laws to people? That seems illegal. It probably is. Okay, it really is." + stored = /datum/nifsoft/compliance + +/obj/item/weapon/disk/nifsoft/compliance/afterattack(var/A, mob/user, flag, params) + if(!laws) + to_chat(user,"You haven't set any laws yet. Use the disk in-hand first.") + return + ..(A,user,flag,params) + +/obj/item/weapon/disk/nifsoft/compliance/attack_self(mob/user) + var/newlaws = input(user,"Please Input Laws","Compliance Laws",laws) as message + newlaws = sanitize(newlaws,2048) + if(newlaws) + to_chat(user,"You set the laws to:
    [newlaws]") + laws = newlaws + +/obj/item/weapon/disk/nifsoft/compliance/extra_params() + return laws diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm index 15f253d9b2..d222cd67dd 100644 --- a/code/modules/nifsoft/software/01_vision.dm +++ b/code/modules/nifsoft/software/01_vision.dm @@ -5,16 +5,15 @@ desc = "Provides a general identification and health status overlay on your vision with no frills." list_pos = NIF_CIVILIAN_AR cost = 500 - initial = TRUE a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) nif.set_flag(NIF_V_AR_CIVILIAN,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_CIVILIAN,NIF_FLAGS_VISION) /datum/nifsoft/ar_med @@ -22,17 +21,16 @@ desc = "Like the civilian model, but provides medical records access and virus database lookup." list_pos = NIF_MEDICAL_AR cost = 750 - initial = TRUE - req_one_access = list(access_medical) + access = access_medical a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_CIVILIAN_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) nif.set_flag(NIF_V_AR_MEDICAL,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_MEDICAL,NIF_FLAGS_VISION) /datum/nifsoft/ar_sec @@ -40,17 +38,16 @@ desc = "Like the civilian model, but provides access to arrest status and security records." list_pos = NIF_SECURITY_AR cost = 750 - initial = TRUE - req_one_access = list(access_security) + access = access_security a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) nif.set_flag(NIF_V_AR_SECURITY,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_SECURITY,NIF_FLAGS_VISION) /datum/nifsoft/ar_eng @@ -58,17 +55,16 @@ desc = "Like the civilian model, but provides station alert notices." list_pos = NIF_ENGINE_AR cost = 750 - initial = TRUE - req_one_access = list(access_engine) + access = access_engine a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) nif.set_flag(NIF_V_AR_ENGINE,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_ENGINE,NIF_FLAGS_VISION) /datum/nifsoft/ar_science @@ -76,17 +72,16 @@ desc = "Like the civilian model, but provides ... well, nothing. For now." list_pos = NIF_SCIENCE_AR cost = 750 - initial = TRUE - req_one_access = list(access_research) + access = access_research a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_OMNI_AR) nif.set_flag(NIF_V_AR_SCIENCE,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_SCIENCE,NIF_FLAGS_VISION) /datum/nifsoft/ar_omni @@ -94,17 +89,16 @@ desc = "Like the civilian model, but provides most of the features of the medical and security overlays as well." list_pos = NIF_OMNI_AR cost = 750 - initial = TRUE - req_one_access = list(access_captain) + access = access_captain a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR) nif.set_flag(NIF_V_AR_OMNI,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_AR_OMNI,NIF_FLAGS_VISION) ////////////// @@ -117,11 +111,11 @@ a_drain = 0.025 activate() - if(..()) + if((. = ..())) nif.set_flag(NIF_V_CORRECTIVE,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_CORRECTIVE,NIF_FLAGS_VISION) /datum/nifsoft/uvblocker @@ -132,11 +126,11 @@ a_drain = 0.2 activate() - if(..()) + if((. = ..())) nif.set_flag(NIF_V_UVFILTER,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_UVFILTER,NIF_FLAGS_VISION) /datum/nifsoft/flashprot @@ -144,15 +138,15 @@ desc = "Enables a high-speed shielding response to intense light, such as flashes, to block them." list_pos = NIF_FLASHPROT cost = 600 - req_one_access = list(access_security) + access = access_security a_drain = 0.05 activate() - if(..()) + if((. = ..())) nif.set_flag(NIF_V_FLASHPROT,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_FLASHPROT,NIF_FLAGS_VISION) //////////////// @@ -163,19 +157,20 @@ list_pos = NIF_MESONS cost = 1000 a_drain = 0.1 + access = access_engine tick_flags = NIF_ACTIVETICK activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_MATERIAL,NIF_THERMALS,NIF_NIGHTVIS) nif.set_flag(NIF_V_MESONS,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_MESONS,NIF_FLAGS_VISION) life() - if(..()) + if((. = ..())) var/mob/living/carbon/human/H = nif.human H.client.screen |= global_hud.meson H.sight |= SEE_TURFS @@ -186,19 +181,20 @@ list_pos = NIF_MATERIAL cost = 1000 a_drain = 0.1 + access = access_research tick_flags = NIF_ACTIVETICK activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_MESONS,NIF_THERMALS,NIF_NIGHTVIS) nif.set_flag(NIF_V_MATERIAL,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_MATERIAL,NIF_FLAGS_VISION) life() - if(..()) + if((. = ..())) nif.human.sight |= SEE_OBJS /datum/nifsoft/thermals @@ -206,21 +202,21 @@ desc = "Similar to the worn Thermal Goggles, these allow you to see heat-emitting creatures through walls." list_pos = NIF_THERMALS cost = 1000 - req_one_access = list(access_security) a_drain = 0.1 + access = access_captain tick_flags = NIF_ACTIVETICK activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_MESONS,NIF_MATERIAL,NIF_NIGHTVIS) nif.set_flag(NIF_V_THERMALS,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_THERMALS,NIF_FLAGS_VISION) life() - if(..()) + if((. = ..())) var/mob/living/carbon/human/H = nif.human H.sight |= SEE_MOBS H.client.screen |= global_hud.thermal @@ -231,21 +227,21 @@ desc = "Similar to the worn Night Vision Goggles, these allow you to see in complete darkness." list_pos = NIF_NIGHTVIS cost = 1000 - req_one_access = list(access_security) a_drain = 0.1 + access = access_security tick_flags = NIF_ACTIVETICK activate() - if(..()) + if((. = ..())) nif.deactivate_these(NIF_MESONS,NIF_MATERIAL,NIF_THERMALS) nif.set_flag(NIF_V_NIGHTVIS,NIF_FLAGS_VISION) deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_V_NIGHTVIS,NIF_FLAGS_VISION) life() - if(..()) + if((. = ..())) var/mob/living/carbon/human/H = nif.human H.see_in_dark += 7 H.client.screen |= global_hud.nvg diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm index 4bc83c407f..1d606d2653 100644 --- a/code/modules/nifsoft/software/05_health.dm +++ b/code/modules/nifsoft/software/05_health.dm @@ -1,14 +1,41 @@ -/* -#define NIF_SPAREBREATH 17 -*/ +// #define NIF_CREWMONITOR 14 +/datum/nifsoft/crewmonitor + name = "Crew Monitor" + desc = "A link to the local crew monitor sensors. Useful for finding people in trouble." + list_pos = NIF_CREWMONITOR + access = access_medical + cost = 1250 + p_drain = 0.025 + var/datum/nano_module/crew_monitor/arscreen + + New() + ..() + arscreen = new(nif) + + Destroy() + qdel(arscreen) + ..() + + activate() + if((. = ..())) + arscreen.ui_interact(nif.human,"main",null,1,nif_state) + return TRUE + + deactivate() + if((. = ..())) + return TRUE + + stat_text() + return "Show Monitor" /datum/nifsoft/medichines_org - name = "Medichines (Org)" + name = "Medichines" desc = "An internal swarm of nanites to make sure you stay in good shape and to promote healing, or to preserve you if you are critically injured." list_pos = NIF_ORGANIC_HEAL cost = 2500 p_drain = 0.05 a_drain = 0.1 //This is messed with manually below. + wear = 2 activates = FALSE //It is automatic in emergencies, not manually controllable. tick_flags = NIF_ALWAYSTICK applies_to = NIF_ORGANIC @@ -16,19 +43,19 @@ //These self-activate on their own, these aren't user-settable to on/off. activate() - if(..()) + if((. = ..())) nif.set_flag(NIF_H_ORGREPAIR,NIF_FLAGS_HEALTH) mode = 1 deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_H_ORGREPAIR,NIF_FLAGS_HEALTH) a_drain = initial(a_drain) mode = initial(mode) - nif.human.in_stasis = 0 + nif.human.Stasis(0) life() - if(..()) + if((. = ..())) var/mob/living/carbon/human/H = nif.human var/HP_percent = H.health/H.getMaxHealth() @@ -67,21 +94,22 @@ //Patient critical - emergency stasis if(mode >= 3) if(HP_percent <= 0) - H.in_stasis = 3 + H.Stasis(3) if(HP_percent > 0.2) - H.in_stasis = 0 + H.Stasis(0) nif.notify("Ending emergency stasis.",TRUE) mode = 2 return TRUE /datum/nifsoft/medichines_syn - name = "Medichines (Syn)" + name = "Medichines" desc = "A swarm of mechanical repair nanites, able to repair relatively minor damage to synthetic bodies. Large repairs must still be performed manually." list_pos = NIF_SYNTH_HEAL cost = 2500 p_drain = 0.05 a_drain = 0.00 //This is manually drained below. + wear = 2 activates = FALSE //It is automatic in emergencies, not manually controllable. tick_flags = NIF_ALWAYSTICK applies_to = NIF_SYNTHETIC @@ -89,17 +117,17 @@ //These self-activate on their own, these aren't user-settable to on/off. activate() - if(..()) + if((. = ..())) nif.set_flag(NIF_H_SYNTHREPAIR,NIF_FLAGS_HEALTH) mode = 1 deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_H_SYNTHREPAIR,NIF_FLAGS_HEALTH) mode = 0 life() - if(..()) + if((. = ..())) //We're good! if(!nif.human.bad_external_organs.len) if(mode || active) @@ -135,6 +163,7 @@ cost = 650 p_drain = 0.05 a_drain = 0.1 + wear = 2 tick_flags = NIF_ALWAYSTICK applies_to = NIF_ORGANIC var/filled = 100 //Tracks the internal tank 'refilling', which still uses power @@ -143,17 +172,17 @@ if(!(filled > 50)) nif.notify("Respirocytes not saturated!",TRUE) return FALSE - if(..()) + if((. = ..())) nif.set_flag(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH) nif.notify("Now taking air from reserves.") deactivate() - if(..()) + if((. = ..())) nif.clear_flag(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH) nif.notify("Now taking air from environment and refilling reserves.") life() - if(..()) + if((. = ..())) if(active) //Supplying air, not recharging it switch(filled) //Text warnings if(75) diff --git a/code/modules/nifsoft/software/10_combat.dm b/code/modules/nifsoft/software/10_combat.dm index 64f3ae9a25..38fe1b86e2 100644 --- a/code/modules/nifsoft/software/10_combat.dm +++ b/code/modules/nifsoft/software/10_combat.dm @@ -1,7 +1,140 @@ /* -#define NIF_BRUTEARMOR 18 -#define NIF_BURNARMOR 19 -#define NIF_PAINKILLERS 20 -#define NIF_HARDCLAWS 21 #define NIF_HIDDENLASER 22 -*/ \ No newline at end of file +*/ + +/datum/nifsoft/brute_armor + name = "Bullhide Mod" + desc = "A difficult-to-produce thickening of the dermis and skeletal structure, allowing a user to absorb more external trauma from physical sources." + list_pos = NIF_BRUTEARMOR + cost = 3200 + p_drain = 0.05 + illegal = TRUE + wear = 3 + access = 999 //Prevents anyone from buying it without an emag. + activates = FALSE //It's armor. + + install() + if((. = ..())) + nif.set_flag(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT) + + uninstall() + . = ..() + nif.clear_flag(NIF_C_BRUTEARMOR,NIF_FLAGS_COMBAT) + +/datum/nifsoft/burn_armor + name = "Dragon's Skin" + desc = "A thin layer of material under the skin provides heat disappation for burns, reducing the trauma from lasers and fire. Not effective against ongoing environmental heat." + list_pos = NIF_BURNARMOR + cost = 3200 + p_drain = 0.05 + illegal = TRUE + wear = 3 + access = 999 //Prevents anyone from buying it without an emag. + activates = FALSE //It's armor. + + install() + if((. = ..())) + nif.set_flag(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT) + + uninstall() + . = ..() + nif.clear_flag(NIF_C_BURNARMOR,NIF_FLAGS_COMBAT) + +/datum/nifsoft/painkillers + name = "Nova Shock" + desc = "A constant stream of high-grade painkillers numb the user's body to all pain. Generally results in extreme addiction or overdose." + list_pos = NIF_PAINKILLERS + cost = 2600 + a_drain = 1 //Gotta produce them drugs, yo. + illegal = TRUE + wear = 2 + access = 999 //Prevents anyone from buying it without an emag. + tick_flags = NIF_ACTIVETICK + + activate() + if((. = ..())) + nif.set_flag(NIF_C_PAINKILLERS,NIF_FLAGS_COMBAT) + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_C_PAINKILLERS,NIF_FLAGS_COMBAT) + + life() + if((. = ..())) + var/mob/living/carbon/human/H = nif.human + H.bloodstr.add_reagent("numbenzyme",0.5) + +/datum/nifsoft/hardclaws + name = "Bloodletters" + desc = "Generates monofilament wires from one's fingertips, allowing one to slash through almost any armor with relative ease. The monofilaments need to be replaced constantly, though, which does use power." + list_pos = NIF_HARDCLAWS + cost = 2200 + a_drain = 0.5 + illegal = TRUE + wear = 4 + access = 999 //Prevents anyone from buying it without an emag. + + activate() + if((. = ..())) + nif.set_flag(NIF_C_HARDCLAWS,NIF_FLAGS_COMBAT) + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_C_HARDCLAWS,NIF_FLAGS_COMBAT) + +// The unarmed attack to go with the hardclaws +var/global/datum/unarmed_attack/hardclaws/unarmed_hardclaws = new() +/datum/unarmed_attack/hardclaws + attack_verb = list("claws") + attack_noun = list("talons") + damage = 15 + attack_sound = "punch" + miss_sound = 'sound/weapons/punchmiss.ogg' + sharp = 1 + edge = 1 + sparring_variant_type = /datum/unarmed_attack/hardclaws + +/datum/nifsoft/hidelaser + name = "Dazzle" + desc = "Fabricates a 2-shot holdout laser inside your body, which can be deployed (somewhat painfully) on demand. Only enough materials to generate one." + list_pos = NIF_HIDDENLASER + cost = 2200 + //a_drain = 50 //Done manually below. + illegal = TRUE + wear = 6 + access = 999 //Prevents anyone from buying it without an emag. + var/used = FALSE + + activate() + if((. = ..())) + nif.set_flag(NIF_C_HIDELASER,NIF_FLAGS_COMBAT) + if(used) + nif.notify("You do not have a hidden weapon to deploy anymore!",TRUE) + deactivate() + return FALSE + if(!nif.use_charge(50)) + nif.notify("Insufficient energy to deploy weapon!",TRUE) + deactivate() + return FALSE + + var/mob/living/carbon/human/H = nif.human + H.adjustHalLoss(30) + var/obj/item/weapon/gun/energy/gun/martin/dazzle/dgun = new(get_turf(H)) + H.put_in_hands(dgun) + nif.notify("Weapon deployed!",TRUE) + used = TRUE + spawn(0) + uninstall() + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_C_HIDELASER,NIF_FLAGS_COMBAT) + +//The gun to go with this implant +/obj/item/weapon/gun/energy/gun/martin/dazzle + name = "Microlaser" + desc = "A tiny nanofabricated laser." + + icon = 'icons/obj/gun_vr.dmi' + icon_state = "PDW" + item_state = "gun" diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm new file mode 100644 index 0000000000..4380c53952 --- /dev/null +++ b/code/modules/nifsoft/software/14_commlink.dm @@ -0,0 +1,132 @@ +/////////// +// Commlink - Has a bunch of extra stuff due to communicator defines. +/datum/nifsoft/commlink + name = "Commlink" + desc = "An internal communicator for keeping in touch with people." + list_pos = NIF_COMMLINK + cost = 500 + wear = 0 + p_drain = 0.01 + + install() + if((. = ..())) + nif.comm = new(nif,src) + + activate() + if((. = ..())) + nif.set_flag(NIF_O_COMMLINK,NIF_FLAGS_OTHER) + nif.comm.initialize_exonet(nif.human) + nif.comm.ui_interact(nif.human,key_state = commlink_state) + spawn(0) + deactivate() + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_O_COMMLINK,NIF_FLAGS_OTHER) + + stat_text() + return "Show Commlink" + +/datum/nifsoft/commlink/Topic(href, href_list) + if(href_list["open"]) + activate() + +/obj/item/device/communicator/commlink + name = "commlink" + desc = "An internal communicator, basically." + occupation = "\[Commlink\]" + var/obj/item/device/nif/nif + var/datum/nifsoft/commlink/nifsoft + + New(var/newloc,var/soft) + ..() + nif = newloc + nifsoft = soft + register_device(nif.human) + qdel(camera) //Not supported on internal one. + + Destroy() + if(nif) + nif.comm = null + nif = null + ..() + +//So that only the owner's chat is relayed to others. +/obj/item/device/communicator/commlink/hear_talk(mob/living/M, text, verb, datum/language/speaking) + if(M != nif.human) return + for(var/obj/item/device/communicator/comm in communicating) + + var/turf/T = get_turf(comm) + if(!T) return + + var/icon_object = src + + var/list/mobs_to_relay + if(istype(comm,/obj/item/device/communicator/commlink)) + var/obj/item/device/communicator/commlink/CL = comm + mobs_to_relay = list(CL.nif.human) + icon_object = CL.nif.big_icon + else + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) + mobs_to_relay = in_range["mobs"] + + for(var/mob/mob in mobs_to_relay) + //Can whoever is hearing us understand? + if(!mob.say_understands(M, speaking)) + if(speaking) + text = speaking.scramble(text) + else + text = stars(text) + var/name_used = M.GetVoice() + var/rendered = null + if(speaking) //Language being used + rendered = "\icon[icon_object] [name_used] [speaking.format_message(text, verb)]" + else + rendered = "\icon[icon_object] [name_used] [verb], \"[text]\"" + mob.show_message(rendered, 2) + +//Not supported by the internal one +/obj/item/device/communicator/commlink/show_message(msg, type, alt, alt_type) + return + +//The silent treatment +/obj/item/device/communicator/commlink/request(var/atom/candidate) + if(candidate in voice_requests) + return + var/who = null + if(isobserver(candidate)) + who = candidate.name + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.voice_invites |= src + + if(!who) + return + + voice_requests |= candidate + + if(ringer && nif.human) + nif.notify("New commlink call from [who]. (
    Open)") + +//Similar reason +/obj/item/device/communicator/commlink/request_im(var/atom/candidate, var/origin_address, var/text) + var/who = null + if(isobserver(candidate)) + var/mob/observer/dead/ghost = candidate + who = ghost + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else if(istype(candidate, /obj/item/device/communicator)) + var/obj/item/device/communicator/comm = candidate + who = comm.owner + comm.im_contacts |= src + im_list += list(list("address" = origin_address, "to_address" = exonet.address, "im" = text)) + else return + + im_contacts |= candidate + + if(!who) + return + + if(ringer && nif.human) + nif.notify("Commlink message from [who]: \"[text]\" (Open)") diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm index a20e26c3a6..cc8d6b8b10 100644 --- a/code/modules/nifsoft/software/15_misc.dm +++ b/code/modules/nifsoft/software/15_misc.dm @@ -1,9 +1,182 @@ -/* -#define NIF_COMMLINK 23 -#define NIF_SUITSENSORS 24 -#define NIF_APCCHARGE 25 -#define NIF_PRESSURE 26 -#define NIF_HEATSINK 27 -#define NIF_UVFILTER 28 -#define NIF_FLASHPROT 29 -*/ \ No newline at end of file +/datum/nifsoft/apc_recharge + name = "APC Connector" + desc = "A small attachment that allows synthmorphs to recharge themselves from APCs." + list_pos = NIF_APCCHARGE + cost = 1250 + wear = 2 + applies_to = NIF_SYNTHETIC + tick_flags = NIF_ACTIVETICK + var/obj/machinery/power/apc/apc + + activate() + if((. = ..())) + var/mob/living/carbon/human/H = nif.human + nif.set_flag(NIF_O_APCCHARGE,NIF_FLAGS_OTHER) + apc = locate(/obj/machinery/power/apc) in get_step(H,H.dir) + if(!apc) + apc = locate(/obj/machinery/power/apc) in get_step(H,0) + if(!apc) + nif.notify("You must be facing an APC to connect to.",TRUE) + spawn(0) + deactivate() + return FALSE + + H.visible_message("Thin snakelike tendrils grow from [H] and connect to \the [apc].","Thin snakelike tendrils grow from you and connect to \the [apc].") + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_O_APCCHARGE,NIF_FLAGS_OTHER) + apc = null + + life() + if((. = ..())) + var/mob/living/carbon/human/H = nif.human + if(apc && (get_dist(H,apc) <= 1) && H.nutrition < 450) + H.nutrition = min(H.nutrition+10, 450) + apc.drain_power(7000/450*10) //This is from the large rechargers. No idea what the math is. + return TRUE + else + nif.notify("APC charging has ended.") + H.visible_message("[H]'s snakelike tendrils whip back into their body from \the [apc].","The APC connector tendrils return to your body.") + deactivate() + return FALSE + +/datum/nifsoft/pressure + name = "Pressure Seals" + desc = "Creates pressure seals around important synthetic components to protect them from vacuum. Almost impossible on organics." + list_pos = NIF_PRESSURE + cost = 1750 + a_drain = 0.5 + wear = 3 + applies_to = NIF_SYNTHETIC + + activate() + if((. = ..())) + nif.set_flag(NIF_O_PRESSURESEAL,NIF_FLAGS_OTHER) + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_O_PRESSURESEAL,NIF_FLAGS_OTHER) + +/datum/nifsoft/heatsinks + name = "Heat Sinks" + desc = "Advanced heat sinks for internal heat storage of heat on a synth until able to vent it in atmosphere." + list_pos = NIF_HEATSINK + cost = 1450 + a_drain = 0.25 + wear = 3 + var/used = 0 + tick_flags = NIF_ALWAYSTICK + applies_to = NIF_SYNTHETIC + + activate() + if((. = ..())) + if(used >= 50) + nif.notify("Heat sinks not safe to operate again yet!",TRUE) + spawn(0) + deactivate() + return FALSE + nif.set_flag(NIF_O_HEATSINKS,NIF_FLAGS_OTHER) + + deactivate() + if((. = ..())) + nif.clear_flag(NIF_O_HEATSINKS,NIF_FLAGS_OTHER) + + life() + if((. = ..())) + //Not being used, all clean. + if(!active && !used) + return TRUE + + //Being used, and running out. + else if(active && ++used == 100) + nif.notify("Heat sinks overloaded! Shutting down!",TRUE) + deactivate() + + //Being cleaned, and finishing empty. + else if(!active && --used == 0) + nif.notify("Heat sinks re-chilled.") + +/datum/nifsoft/compliance + name = "Compliance Module" + desc = "A system that allows one to apply 'laws' to sapient life. Extremely illegal, of course." + list_pos = NIF_COMPLIANCE + cost = 8200 + wear = 4 + illegal = TRUE + vended = FALSE + access = 999 //Prevents anyone from buying it without an emag. + var/laws = "Be nice to people!" + + New(var/newloc,var/newlaws) + laws = newlaws //Sanitize before this (the disk does) + ..(newloc) + + activate() + if((. = ..())) + to_chat(nif.human,"You are compelled to follow these rules: \n[laws]") + + install() + if((. = ..())) + to_chat(nif.human,"You feel suddenly compelled to follow these rules: \n[laws]") + + uninstall() + nif.notify("ERROR! Unable to comply!",TRUE) + return FALSE //NOPE. + + stat_text() + return "Show Laws" + +/datum/nifsoft/sizechange + name = "Mass Alteration" + desc = "A system that allows one to change their size, through drastic mass rearrangement. Causes significant wear when installed." + list_pos = NIF_SIZECHANGE + cost = 750 + wear = 6 + + activate() + if((. = ..())) + var/choice = alert(nif.human,"Change which way?","Mass Alteration","Size Up","Cancel", "Size Down") + if(choice == "Cancel") + spawn(0) deactivate() + return FALSE + + if(!nif.use_charge(100)) + nif.notify("Insufficient energy to resize!",TRUE) + spawn(0) deactivate() + return FALSE + + if(choice == "Size Up") + switch(nif.human.size_multiplier) + if(RESIZE_BIG to RESIZE_HUGE) + nif.human.resize(RESIZE_HUGE) + if(RESIZE_NORMAL to RESIZE_BIG) + nif.human.resize(RESIZE_BIG) + if(RESIZE_SMALL to RESIZE_NORMAL) + nif.human.resize(RESIZE_NORMAL) + if((0 - INFINITY) to RESIZE_TINY) + nif.human.resize(RESIZE_SMALL) + + else if(choice == "Size Down") + switch(nif.human.size_multiplier) + if(RESIZE_HUGE to INFINITY) + nif.human.resize(RESIZE_BIG) + if(RESIZE_BIG to RESIZE_HUGE) + nif.human.resize(RESIZE_NORMAL) + if(RESIZE_NORMAL to RESIZE_BIG) + nif.human.resize(RESIZE_SMALL) + if((0 - INFINITY) to RESIZE_NORMAL) + nif.human.resize(RESIZE_TINY) + + nif.human.visible_message("Swirling grey mist envelops [nif.human] as they change size!","Swirling streams of nanites wrap around you as you change size!") + nif.human.update_icons() + + spawn(0) + deactivate() + + deactivate() + if((. = ..())) + return TRUE + + stat_text() + return "Change Size" \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 63a1d2ff50..478ebc4d38 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,6 +98,8 @@ while(null in owner.organs) owner.organs -= null + implants.Cut() //VOREStation Add - Remove these too! + return ..() /obj/item/organ/external/emp_act(severity) diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 07285cf921..64ed9b5d30 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -77,6 +77,14 @@ build_path = /obj/item/device/universal_translator/ear sort_string = "HABBB" +/datum/design/item/nif + name = "nanite implant framework" + id = "nif" + req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 8000, "uranium" = 6000, "diamond" = 6000) + build_path = /obj/item/device/nif + sort_string = "HABBC" + // Resleeving Circuitboards /datum/design/circuit/transhuman_clonepod diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm index d5e2dfac6a..e6dd47b705 100644 --- a/code/modules/resleeving/implant.dm +++ b/code/modules/resleeving/implant.dm @@ -49,7 +49,8 @@ BITSET(H.hud_updateflag, BACKUP_HUD) //Okay we've got a mind at least if(H == imp_in && H.mind && H.stat < DEAD) - transcore.m_backup(H.mind) + transcore.m_backup(H.mind,H.nif) + persist_nif_data(H) spawn(attempt_delay) backup() diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index e03e3291a9..dc0b06d8bd 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -40,7 +40,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore spawn(process_time) process() -/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind) +/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind,var/obj/item/device/nif/nif) ASSERT(mind) if(!mind.name || core_dumped) return 0 @@ -50,6 +50,20 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(mind.name in backed_up) MR = backed_up[mind.name] MR.last_update = world.time + if(nif) + MR.nif_path = nif.type + MR.nif_durability = nif.durability + var/list/nifsofts = list() + for(var/N in nif.nifsofts) + if(N) + var/datum/nifsoft/nifsoft = N + nifsofts += nifsoft.type + MR.nif_software = nifsofts + else + MR.nif_path = null + MR.nif_durability = null + MR.nif_software = null + else MR = new(mind, mind.current, 1) @@ -114,6 +128,10 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/languages var/mind_oocnotes + var/nif_path + var/nif_durability + var/list/nif_software + /datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1) ASSERT(mind && M && imp) diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index abab41e929..4216f6fb0a 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -504,6 +504,12 @@ occupant.ooc_notes = MR.mind_oocnotes occupant.apply_vore_prefs() //Cheap hack for now to give them SOME bellies. + //Re-supply a NIF if one was backed up with them. + if(MR.nif_path) + var/obj/item/device/nif/nif = new MR.nif_path(occupant,MR.nif_durability) + for(var/path in MR.nif_software) + new path(nif) + // If it was a custom sleeve (not owned by anyone), update namification sequences if(!occupant.original_player) occupant.real_name = occupant.mind.name diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index 977473812a..bddd9bc7b9 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -78,6 +78,10 @@ WARNING("persist_interround_data failed to prep [occupant] for persisting") return + //This one doesn't rely on persistence prefs + if(ishuman(occupant) && occupant.stat != DEAD) + persist_nif_data(occupant, prefs) + if(!prefs.persistence_settings) return // Persistence disabled by preference settings @@ -94,6 +98,7 @@ if(prefs.persistence_settings & PERSIST_WEIGHT) resolve_excess_nutrition(H) prefs.weight_vr = H.weight + prefs.save_character() // Saves mob's current coloration state to prefs @@ -212,7 +217,30 @@ * towards future shenanigans such as upgradable NIFs or different types or things of that nature, * without invoking the need for a bunch of different save file variables. */ -/proc/persist_nif_data(var/mob/living/carbon/human/H) +/proc/persist_nif_data(var/mob/living/carbon/human/H,var/datum/preferences/prefs) if(!istype(H)) CRASH("persist_nif_data given a nonhuman: [H]") + if(!prefs) + prefs = prep_for_persist(H) + + if(!prefs) + WARNING("persist_nif_data failed to prep [H] for persisting") + return + + var/obj/item/device/nif/nif = H.nif + + if(nif) + prefs.nif_path = nif.type + prefs.nif_durability = nif.durability + else + prefs.nif_path = null + prefs.nif_durability = null + + var/datum/category_group/player_setup_category/vore_cat = prefs.player_setup.categories_by_name["VORE"] + var/datum/category_item/player_setup_item/vore/nif/nif_prefs = vore_cat.items_by_name["NIF Data"] + + var/savefile/S = new /savefile(prefs.path) + if(!S) WARNING ("Couldn't load NIF save savefile? [prefs.real_name]") + S.cd = "/character[prefs.default_slot]" + nif_prefs.save_character(S) diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi index b6c7cbb8e6c6294aa6a2d7c84a3cb0f334d672d9..e7f1f48d3235d93a22fbe92a9fb9ac67b7b31279 100644 GIT binary patch delta 8490 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 diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index a9046f15e7..564f67fe31 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -1152,7 +1152,7 @@ "awh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_one) "awi" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/effect/floor_decal/industrial/danger{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_one) "awj" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/vending/fitness,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/turf/simulated/floor/tiled/monotile,/area/crew_quarters/locker/laundry_arrival) -"awk" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/turf/simulated/floor/tiled/monotile,/area/crew_quarters/locker/laundry_arrival) +"awk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/machinery/vending/nifsoft_shop,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "awl" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/turf/simulated/floor/tiled/monotile,/area/crew_quarters/locker/laundry_arrival) "awm" = (/obj/machinery/camera/network/civilian,/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/turf/simulated/floor/tiled/monotile,/area/crew_quarters/locker/laundry_arrival) "awn" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/locker/laundry_arrival) @@ -4237,7 +4237,7 @@ "bDy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDz" = (/obj/structure/cable{icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) -"bDB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7,/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) +"bDB" = (/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/machinery/vending/nifsoft_shop,/turf/simulated/floor/tiled/monotile,/area/crew_quarters/locker/laundry_arrival) "bDC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bDD" = (/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,/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) "bDE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/porta_turret{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcomsat{name = "\improper Telecomms Lobby"}) @@ -5455,7 +5455,7 @@ aaaaadaadaadaadaadaadaadaadaadaagaagamGasrassastasuasuasuasuasuasuasvaswasxasyas aaaaadaadaadaadaadaadaadaadaadaagamGamGamGamGatcaoZaoZatdateatfatgathaoZatiatjatkatlatmatnatoatparpatqatratratratratsasLattatuatvatwatxatxatxatyasLatzatAasOatBatCatCatCatCatCatCagIagIagIaagaagaagaagaagaagaagagIatDatEatFatGatGatGatGatGatHatGatGatGatGatGatGatIatJanRatKaoTaoTatLatMatNatOaoTaoWaslanRaagapCapCapCapCatPataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGatQatRatSatTaoZaquaotatQamGatUatVatWamGatXatYarparparparparparpatZauaauaauaauaauaasLaubaucaudaueaufaufaufaugasLbeQauibeSaukatCaulaulaulaulatCaumaunagIagIagIagIauoagIagIagIagIaupakuauqaurausautautauuauvauwauxautautautauyajPajQanRauzauzauAauBauCauDauEauFauGauHanRaagapCauIauIapCauJataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGauKaoZaoZatTaoZauLaotauMamGatUauNauOamGauPauQbfxarXarXarXarXauSauTauaauUauVauWauXauYauZavaavbavcavdavdavdaveasLaZkavgasOavhatCaulaulaulaulaulaviavjavkavlavmavnavnavoavpavqavravsavtavuagIagIavvavvavvavvavvavvavwavvavvavxajPajQanRanRanRanRavyavzanRanRanRanRanRavAagIapCavBavBapCavCavDaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa -aaaaadaadaadaadaadaadaadaadaadaagamGavEavFavGavHbhtavJaotatQamGavKavLavMamGavNavOauaauaauaauaauaauaauaauaavPavQavRavSavTavUavVavWavXavYavYavZawaasLawbavgasOavhatCaulaulaulaulaulaviaviaviawcaviaviawdaviaweatGawfawgawhawiamgagXavvawjawkawlawmawnawoawpavvawqawrawsawtawuawvawwawxawyawzawAawBawCawDawEawuawFawGawGawHawIawJaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa +aaaaadaadaadaadaadaadaadaadaadaagamGavEavFavGavHbhtavJaotatQamGavKavLavMamGavNavOauaauaauaauaauaauaauaauaavPavQavRavSavTavUavVavWavXavYavYavZawaasLawbavgasOavhatCaulaulaulaulaulaviaviaviawcaviaviawdaviaweatGawfawgawhawiamgagXavvawjbDBawlawmawnawoawpavvawqawrawsawtawuawvawwawxawyawzawAawBawCawDawEawuawFawGawGawHawIawJaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagawKawKawKawKawKawKawKawKawKawKawKawKawKawKawLavOauaawMawNawOawPawQawRawSawTawUawVawWauYawXawYawZaxaaxbaxcaxdaxeblMaxgblPasOavhatCaxiaulaulaulatCaxjaxkaxlaxmaxnaxoaxpaxqaxraxsaxtaxuaxvaxwagIagIavvaxxaxyaxzaxzaxAbZmaxCaxDaxEasRawgaxFatGatGaxGatGaxHaxIatGatGawgatGatGaxJaxKaxLaxMaxNaxKaxOaqWaqnaqoarCarBarCarCarCarCarBarCaqratbaaa aaaaadaadaadaadaadaadaadaadaadaagarpaxPaxQaxRaxRaxSaxRaxTaxUaxRaxRaxUaxRbphaxWavOauaaxXaxYaxZayaaybayaayaayaayaaycaydauYayeayfaygayhayiayjaykaylasLakYaymasObpiatCatCatCatCatCatCayoaypagIagIagIagIagIagIayqagIagIagIagIagIagIaagavvayraysaytayuayvaywayxayyayzayAayBayCayDayEayFayDayGayHayHayIayJayKayHayHayLayMayNayOayPayQaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagarpayRaySayTayTayTayTayTayTayTayTayTayTayTayUayVauaayWawUayXayYayZayZayZazaazbazcazdasLasLasLauYauYazeasLasLasLasLaagazfasOasOasPasPasPasPasPasPagIagIagIaagaagaagaagazgazhazgaagaagaagaagaagaagavvaziazjazkazkavvazlazmavvagIagIaznagIagIagIagIagIazoagIagIagIagIagIauoagIapCazpazpapCavCazqaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa @@ -5687,7 +5687,7 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqfbzhbCibAWbBFbBGbBGbBHbBHbBHbBHbBHbBIbBJbAFbAGbCjbznbCkbClbClbCmbCnbAHbCobznbpabpabpabpabzrbBnbCpbzrbCqbCqbzrbCrbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbCsbCtbCubCubCubCvbCubCwbCxbCwbCwbCwbCwbCybCybCybCybpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbCzbAWbBFbBGbBGbCAbzObCBbBHbBHbBIbBJbAFbAGbCCbznbCDbCEbCFbCGbCHbAHbCIbznbpabpabpabpabzrbCJbCKbzrbCqbCqbzrbCLbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbCMbCNaMZaNybCQbCRbCSbCTbCUbCVbCWbCSbCXbCYbCZbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbBFbBGbBGbDbbDcbDdbBHbBHbBIbBJbAFbAGbCjbznbznbznbznbDebDfbzobznbznbwObwOaHnaHnbzrbzrbzrbzrbzrbzrbzrbDgbDhbzwbIIbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbDibDjbDkbDlbDmbDnbDobCSbDpbCTbCTbDqbCSbDrbDsbDtbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAbDBbDCaHnbmbbdqbaMaHobwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAawkbDCaHnbmbbdqbaMaHobwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEaaHnbmmbmlbmlbmjbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSbEsbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbEybDQbEzbEAbEAbEAbEAbEAbEBbEBbECbEDbEEbEFbEGbEHbEIbEJbEJbEJbEKbELbEMbENbEObEPbmtbmwbmvbmvbmubwsaRZbDHbwsbEVbzvaSdaSabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbEYbEZbwsaSCbCQaSBbCSbFcbFdbFebFfbCSbFgbFhbFibDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFjbFkbFlbFlbFlbFlbFlbFlbFlbFlbFlbFmbFnbFobFpbzhbwsbzZbzZbzZbwsbwsbvEbyVbFqbFraHnbmbbmybmxaHobwsbwsbwsbwsbFubzvaTeaTabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFvbDkbDkbDkaTybDkbCSbCSbFxbFybCSbCSbFzbFAbFzbFBbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 221a24b85b..3c0a2abc28 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -2680,7 +2680,7 @@ "aZB" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "englockdown"; name = "Engineering Lockdown"; opacity = 0},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Mezzenine"; req_one_access = list()},/turf/simulated/floor/tiled/steel_grid,/area/engineering/foyer_mezzenine) "aZC" = (/obj/machinery/door/airlock/maintenance/engi,/obj/structure/cable{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/hallway/station/port) "aZD" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/simulated/floor/tiled,/area/hallway/station/port) -"aZE" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/simulated/floor/tiled,/area/hallway/station/starboard) +"aZE" = (/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/machinery/vending/nifsoft_shop,/turf/simulated/floor/tiled,/area/hallway/station/starboard) "aZF" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/lightgrey{dir = 9},/obj/effect/floor_decal/corner/lightgrey{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/simulated/floor/tiled,/area/hallway/station/starboard) "aZG" = (/turf/simulated/wall/r_wall,/area/hallway/station/starboard) "aZH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/turf/simulated/floor/tiled,/area/hallway/station/starboard) diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index 9c04bd82cf..45192898b2 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -1363,6 +1363,8 @@ "Ak" = (/obj/structure/table/reinforced,/obj/item/device/camera,/obj/item/weapon/storage/box/ids,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 10},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "Al" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "Am" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) +"An" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/obj/machinery/vending/nifsoft_shop,/turf/unsimulated/floor/steel,/area/centcom/security) +"Ao" = (/obj/machinery/vending/nifsoft_shop,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/restaurant) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1441,7 +1443,7 @@ aaababababababababababababababababababababababababababjMkikhkhkikjkkjMababababab aaababababababababababababababababababababababababababjMlLkhkhkikjkkjMababababababacgGgGgGgGgGgGgGnHnInJnKnLhrhrnMnNnOkHnPnQnRlUlUnSnTlUnSnTlUlUnUnVnWkHltlololololonXnYnZlololololooakHahahahejobocodoeofogmdmdejkJhlhlhlhlnEohnFohnFnFoinGkKeS aaabababababababababababababababojokokokokokokokokokokolomononomomomomababababababacacacacacacacgGgGgGgGhthtoohrgGgGgGkHkHkHkHopoqkHkHorkHkHosoqkHkHkHotototototototototototototototototahahahouejejejejejovjKjKejkJhlkFkDkEhlowowowowowowhlkKeS aaabababababababababababababababomoxoyozoyoyoyoyozoyoAoBoCoCoCoDoEabababababababababacacacacacacgGoFoGoHoGoIhrhroJoGoKkHoLoMoNlUlUoOoPlUoQoRlUlUoSoToLotoUoVoWoXotoYoZpaoZoYotpbpbpbpbotahahahpclGkekelHkekdhlhlkclFhlkKejkJhlhlhlhlhlhlhlhlkKeS -aaabababababababababababababababomoxoyfyeWeWeWeWfyoyoAoBoCoCoCpfoEabababababababababacacacacacacgGpglPhrlPphhrhrhrhrpikHpjlUlUlUlUpklTnwlXpllUlUlUlUpmotoUpnoWoXotpopopopopootppppppppotahahahpckFkChlkBkDkDkChlkBkChlpqejprkDkDkDkEkFkDpsptpueS +aaabababababababababababababababomoxoyfyeWeWeWeWfyoyoAoBoCoCoCpfoEabababababababababacacacacacacgGpglPhrlPphhrhrhrhrpikHpjlUlUlUlUpklTnwlXpllUlUlUlUpmotoUpnoWoXotpopopopopootppppppppotahahahpckFkChlkBkDkDkChlkBkChlpqejprAnkDkDkEkFkDpsptpueS aaabababababababababababababababomoxfyfTfRhchcipfTfyoAoBoCoCoCpzoEabababababababababacacacacacacgGpAmkpBpCmkhrhrhrhrpDkHpjlUlUlUlUpEpFpFpFpGlUlUlUlUpHotoUpnoWpnpIpopopopopopJpopopopKotahahahouejejpcejejejejpLejejpcejejpMpNpNpNlFlGpNpNpNpOeS aaabababababababababababababababompPeWpdkMhchckMpeeWoAoBoCoCoCpzoEabababababababababacacacacacacgGmKhrhrhrhrhrhrhrhrpTkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnpnpIpopopopopopJpopopopKotbHahahjJpUpVhlpWpXjJsfhlpvpwhlqbejqcqdqdqdhlhlqdqdqdqeeS aaabababababababababababababababomoxeWpxpxhchcpxpxeWoAoBoCoCoCpzoEabababababababababababacacacacgGmKhrhrhrhrhrhrhrhrqgkHpjlUlUlUlUlUlUlUlUlUlUlUlUlUpmotoUpnpnqhotpoqipoqipootqjqjqjqjotahahahjJqknGhlhlqlqmqnhlhlqoqpqqejqrqsqsqsqsqsqsqsqsqteS @@ -1452,7 +1454,7 @@ aaabababababababababababababababomoxqfpxpxhchcpxpxqfoAoBoCoCahrKahahahahahahahah aaabababababababababababababababomoxqfipiphchcipipqfoAoBoCoCrTrKahahahahahahahahahahahahahahahahahrpahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrLahrMrMrMrMahrNrzrzrzrzrOrUrQrRrRrSrI aaabababababababababababababababomoxeWqvkMhchckMqweWoAoBoCoCadriahahahahahahahahahrMrMrMrMrMrMahahqUahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahjDahahahjDahahahahahrXrYrYrYrYrYrYrZrzrzrzrzrCrDsasbsbscrI aaabababababababababababababababomoxfyqVpxhchcpxrgfyoAoBoCoCqWqXqXqXqXqXqXqXqXqXqXqXqXqXrhrVrJrJrVrhqXqXqXqXshjDqXqXshjDqXqXqXqXsisjsksjsisislslsisislslsijDjDjDotototsmototototslslslsijDjDjDejejejejejejousnsnsnsnsnsnouejejejejejejejejejejeS -aaabababababababababababababababquoxpyhchchchchchcpQoAoBoCoCoCoDoEabababababababababababrhsdrWsesdrhsrsrsraiahahssstahahaisrsrsrsisisisisisusvswsxswsyszsisAahahotsBsCsDsDsEsFotsGsHsIslahahahejsJsKsKsKsLejhlpYhlhlpYhlejsMsNsOsPsQejsRsSsTsUeS +aaabababababababababababababababquoxpyhchchchchchcpQoAoBoCoCoCoDoEabababababababababababrhsdrWsesdrhsrsrsraiahahssstahahaisrsrsrsisisisisisusvAosxswsyszsisAahahotsBsCsDsDsEsFotsGsHsIslahahahejsJsKsKsKsLejhlpYhlhlpYhlejsMsNsOsPsQejsRsSsTsUeS aaabababababababababababababababomoxsopxhcipiphcspsooAoBoCoCoCpzoEabababababababababababrhsVsqsXsWrhahtbtctctctctctctctctctctdahsiszsytetfswswswswswswswsiahahahottgsDsDthototottitjtkslahahahejtltmtmtmtnejejovtotoovejejtpfcfcfcfctqfcfcfctreS aaabababababababababababababababompPsosYhcipiphcsZsooAoBoCoCoCpzoEabababababababababababrhtstatattrhahtwtxtxtxtytxtxtytxtxtxtzahsiswswtAtAswswswtAtAswswsiahahahottgsDsDsDtBsFottCtDtEslahahahejtFfcfcfcfctGtHtIfcfctJtKtLfcfcfcfctMejtNfcfctreS aaabababababababababababababababomoxfyfTtupxtvhcfTfyoAoBoCoCoCpzoEabababababababababababrhtPtOuHtQrhtTtwtxtUtVtVtVtVtVtVtUtxtztWslswtXtYtZuaswtXubucuaswslahahahotudsDsDthotototuetDtEsiahahahejufugfcuhuiujukulfcfculumunuoupfcuqurejusututuueS diff --git a/maps/tether/tether-07-misc.dmm b/maps/tether/tether-07-misc.dmm index 9f4b9f4d35..c1189bb371 100644 --- a/maps/tether/tether-07-misc.dmm +++ b/maps/tether/tether-07-misc.dmm @@ -930,7 +930,7 @@ "rT" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/effect/floor_decal/borderfloorblack,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rU" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/effect/floor_decal/borderfloorblack,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rV" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/borderfloorblack{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) -"rW" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) +"rW" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/machinery/vending/nifsoft_shop{categories = 111; emagged = 1; name = "Hacked NIFSoft Shop"; prices = list()},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rX" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rY" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "antag_ground_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/antag_ground/base) "rZ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "antag_space_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/antag_space/base) diff --git a/sound/items/nif_click.ogg b/sound/items/nif_click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4bb8db9f30f9ac5c90086780b30d30e3f6400b00 GIT binary patch literal 7990 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 literal 0 HcmV?d00001 diff --git a/sound/items/nif_tone_bad.ogg b/sound/items/nif_tone_bad.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d2c237acf3f35e4f70c759e2795d1a3ba926d9d2 GIT binary patch literal 11552 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 z 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 Date: Tue, 6 Jun 2017 02:02:28 -0400 Subject: [PATCH 123/261] Make NIFs survive Rejuve --- code/modules/organs/organ_external.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 478ebc4d38..638d2354b2 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -450,7 +450,7 @@ This function completely restores a damaged organ to perfect condition. // remove embedded objects and drop them on the floor for(var/obj/implanted_object in implants) - if(!istype(implanted_object,/obj/item/weapon/implant)) // We don't want to remove REAL implants. Just shrapnel etc. + if(!istype(implanted_object,/obj/item/weapon/implant) && !istype(implanted_object,/obj/item/device/nif)) // We don't want to remove REAL implants. Just shrapnel etc. //VOREStation Edit - NIFs pls implanted_object.loc = get_turf(src) implants -= implanted_object From be62d7693eebd87fcb55b459dbac7e9078ccc0bd Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 15:13:36 -0400 Subject: [PATCH 124/261] Make syndie NIFSoft Shop free And remove a silly old comment I was referencing. --- code/modules/nifsoft/nif_softshop.dm | 32 ---------------------------- 1 file changed, 32 deletions(-) diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 4d0da46843..67e786bf18 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -67,38 +67,6 @@ return ..() -/* -/obj/proc/allowed(mob/M) - //check if it doesn't require any access at all - if(src.check_access(null)) - return 1 - - var/id = M.GetIdCard() - if(id) - return check_access(id) - return 0 - -///obj/item/proc/GetAccess() -// return list() - -/atom/movable/proc/GetAccess() - var/obj/item/weapon/card/id/id = GetIdCard() - return id ? id.GetAccess() : list() - -/obj/proc/GetID() - return null - -/obj/proc/check_access(obj/item/I) - return check_access_list(I ? I.GetAccess() : list()) - -/obj/proc/check_access_list(var/list/L) - if(!req_access) req_access = list() - if(!req_one_access) req_one_access = list() - if(!L) return 0 - if(!istype(L, /list)) return 0 - return has_access(req_access, req_one_access, L) -*/ - //Had to override this too /obj/machinery/vending/nifsoft_shop/Topic(href, href_list) if(stat & (BROKEN|NOPOWER)) From c9915cca56f12ef827676e74091d46faec259da3 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 15:15:23 -0400 Subject: [PATCH 125/261] Adds the terrible quality NIF to trash piles --- code/game/objects/structures/trash_pile.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index 0959f93004..c05c22d84f 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -226,7 +226,8 @@ prob(2);/obj/item/weapon/storage/box/syndie_kit/spy, prob(2);/obj/item/weapon/grenade/anti_photon, prob(1);/obj/item/weapon/cell/hyper/empty, - prob(1);/obj/item/weapon/disk/nifsoft/compliance) + prob(1);/obj/item/weapon/disk/nifsoft/compliance, + prob(1);/obj/item/device/nif/bad) var/obj/item/I = new path() return I From a333c8131b3b4d1a0ad3b013599072c3a22b4af8 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 19:51:00 -0400 Subject: [PATCH 126/261] Workaround for openspace turf corruption. It's an unresolved byond bug. --- code/modules/multiz/turf.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 0b637d90bf..68c002b0b9 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -104,7 +104,12 @@ temp2.overlays += O.overlays // TODO Is pixelx/y needed? o_img += temp2 + var/overlay_count = overlays.len overlays += o_img + if(overlays.len != overlay_count + 1) //Here we go! + world.log << "Corrupted openspace turf at [x],[y],[z] being replaced." + new /turf/simulated/open(src) + return //Let's get out of here. if(!below_is_open) overlays += over_OS_darkness From 379e1ad12d46b9814d940d0b9cc8e23df5cccc0f Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 20:18:57 -0400 Subject: [PATCH 127/261] Roiz Egg Tweak Stahp giving me compile warnings --- code/modules/vore/fluffstuff/custom_items_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index f0c21ce237..43fab87519 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -757,7 +757,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie to_chat(src, "[pick(rimplant.empty_message)]") return - var/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/egg = new(get_turf(src)) + new /obj/item/weapon/reagent_containers/food/snacks/egg/roiz(get_turf(src)) var/index = rand(0,3) From 5ea2e30234c81f4f56d6a6c8eb0a353efd722f25 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 21:11:25 -0400 Subject: [PATCH 128/261] Leshana-suggested changes --- code/modules/mob/living/carbon/breathe.dm | 2 +- code/modules/nifsoft/nif.dm | 7 ++++--- code/modules/nifsoft/nif_statpanel.dm | 2 +- code/modules/nifsoft/nifsoft.dm | 8 ++++++-- code/modules/nifsoft/software/05_health.dm | 1 - code/modules/nifsoft/software/10_combat.dm | 4 ---- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index 403088dc4b..8dffa60d1e 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -23,7 +23,7 @@ //Okay, we can breathe, now check if we can get air breath = get_breath_from_internal() //First, check for air from internals //VOREStation Add - Respirocytes as a NIF implant - if(ishuman(src)) + if(!breath && ishuman(src)) var/mob/living/carbon/human/H = src if(H.nif && H.nif.flag_check(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH)) var/datum/nifsoft/spare_breath/SB = H.nif.imp_check(NIF_SPAREBREATH) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index dc958718cc..e8f4976f48 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -63,6 +63,7 @@ WARNING("NIF spawned in [H] failed to implant") spawn(0) qdel(src) + return FALSE else //Free commlink for return customers new /datum/nifsoft/commlink(src) @@ -122,7 +123,7 @@ return FALSE -//Being implanted in some mob +//Being removed from some mob /obj/item/device/nif/proc/unimplant(var/mob/living/carbon/human/H) human = null stat = NIF_PREINSTALL @@ -232,7 +233,7 @@ var/percent_done = (world.time - (install_done - (30 MINUTES))) / (30 MINUTES) - human.client.screen.Add(global_hud.whitense) + human.client.screen.Add(global_hud.whitense) //This is the camera static switch(percent_done) //This is 0.0 to 1.0 kinda percent. //Connecting to optical nerves @@ -369,7 +370,7 @@ //Uninstall a piece of software /obj/item/device/nif/proc/uninstall(var/datum/nifsoft/old_soft) - var/datum/nifsoft/NS = old_soft.list_pos + var/datum/nifsoft/NS = nifsofts[old_soft.list_pos] if(!NS || NS != old_soft) return FALSE //what?? diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm index 4ddba7a3c9..23b5aca0b1 100644 --- a/code/modules/nifsoft/nif_statpanel.dm +++ b/code/modules/nifsoft/nif_statpanel.dm @@ -19,7 +19,7 @@ nif_status += " ([round((nif.durability/initial(nif.durability))*100)]%)" stat("NIF Status", nif_status) - if(!nif.stat) + if(nif.stat == NIF_WORKING) stat("- Modules -", "LMB: Toggle, Shift+LMB: Info/Uninstall") for(var/nifsoft in nif.nifsofts) if(!nifsoft) continue diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index f86e0150e3..0703adfab4 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -8,7 +8,7 @@ var/list_pos // List position in the nifsoft list var/cost = 1000 // Cost in cash of buying this software from a terminal - //TODO - While coding + var/vended = TRUE // This is available in NIFSoft Shops at the start of the game var/wear = 1 // The wear (+/- 10% when applied) that this causes to the NIF var/access // What access they need to buy it, can only set one for ~reasons~ @@ -72,6 +72,8 @@ //Called when attempting to activate an implant (could be a 'pulse' activation or toggling it on) /datum/nifsoft/proc/activate() + if(active) + return var/nif_result = nif.activate(src) if(nif_result) active = TRUE @@ -79,6 +81,8 @@ //Called when attempting to deactivate an implant /datum/nifsoft/proc/deactivate() + if(!active) + return var/nif_result = nif.deactivate(src) if(nif_result) active = FALSE @@ -150,7 +154,7 @@ return Ht.visible_message("[Hu] begins uploading new NIFSoft into [Ht]!","[Hu] is uploading new NIFSoft into you!") - if(do_after(Ht,10 SECONDS,Hu)) + if(do_after(Hu,10 SECONDS,Ht)) var/extra = extra_params() new stored(Ht.nif,extra) qdel(src) diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm index 1d606d2653..70b28bce52 100644 --- a/code/modules/nifsoft/software/05_health.dm +++ b/code/modules/nifsoft/software/05_health.dm @@ -1,4 +1,3 @@ -// #define NIF_CREWMONITOR 14 /datum/nifsoft/crewmonitor name = "Crew Monitor" desc = "A link to the local crew monitor sensors. Useful for finding people in trouble." diff --git a/code/modules/nifsoft/software/10_combat.dm b/code/modules/nifsoft/software/10_combat.dm index 38fe1b86e2..fa5e40f393 100644 --- a/code/modules/nifsoft/software/10_combat.dm +++ b/code/modules/nifsoft/software/10_combat.dm @@ -1,7 +1,3 @@ -/* -#define NIF_HIDDENLASER 22 -*/ - /datum/nifsoft/brute_armor name = "Bullhide Mod" desc = "A difficult-to-produce thickening of the dermis and skeletal structure, allowing a user to absorb more external trauma from physical sources." From 2a19272f4a9bc2ab20a88f7f61321ed2756ccbf3 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 6 Jun 2017 21:25:24 -0400 Subject: [PATCH 129/261] Openspace Bass Ackwards That math, yo. It's hard. --- code/modules/multiz/turf.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 68c002b0b9..6248eb8993 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -94,7 +94,7 @@ // VOREStation Edit End // get objects (not mobs, they are handled by /obj/zshadow) - var/image/o_img = list() + var/list/o_img = list() for(var/obj/O in below) if(O.invisibility) continue // Ignore objects that have any form of invisibility if(O.loc != below) continue // Ignore multi-turf objects not directly below @@ -104,10 +104,11 @@ temp2.overlays += O.overlays // TODO Is pixelx/y needed? o_img += temp2 - var/overlay_count = overlays.len + var/overlays_pre = overlays.len overlays += o_img - if(overlays.len != overlay_count + 1) //Here we go! - world.log << "Corrupted openspace turf at [x],[y],[z] being replaced." + var/overlays_post = overlays.len + if(overlays_post != (overlays_pre + o_img.len)) //Here we go! + world.log << "Corrupted openspace turf at [x],[y],[z] being replaced. Pre: [overlays_pre], Post: [overlays_post]" new /turf/simulated/open(src) return //Let's get out of here. From 5b9d37ffec2f8dabaab830410b2a9473105c1af4 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Tue, 6 Jun 2017 21:57:51 -0400 Subject: [PATCH 130/261] Fluff item - Ruda Lizden (Hisstective's Badge) (#1632) * Adds Roiz's items * Adds Item --- .../vore/fluffstuff/custom_items_vr.dm | 27 ++++++++++++++++++ config/custom_items.txt | 6 ++++ icons/vore/custom_items_vr.dmi | Bin 40277 -> 40486 bytes 3 files changed, 33 insertions(+) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 43fab87519..50179ed45e 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1202,3 +1202,30 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie B.internal_contents |= src user.visible_message("[user] eats a telebeacon!","You eat the the beacon!") playsound(user, B.vore_sound, 70, 1) + +//InterroLouis: Ruda Lizden +/obj/item/clothing/accessory/badge/holo/detective/ruda + name = "Hisstective's Badge" + desc = "This is Ruda Lizden's personal Detective's badge. The polish is dull, as if it's simply been huffed upon and wiped against a coat. Labeled 'Hisstective.'" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "hisstective_badge" + //slot_flags = SLOT_TIE | SLOT_BELT + +/obj/item/clothing/accessory/badge/holo/detective/ruda/attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message("[user] invades [M]'s personal space, thrusting [src] into their face with an insistent huff.","You invade [M]'s personal space, thrusting [src] into their face with an insistent huff.") + user.do_attack_animation(M) + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam + +/obj/item/clothing/accessory/badge/holo/detective/ruda/attack_self(mob/user as mob) + + if(!stored_name) + user << "You huff along the front of your badge, then rub your sleeve on it to polish it up." + set_name(user.real_name) + return + + if(isliving(user)) + if(stored_name) + user.visible_message("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].","You display your [src.name].\nIt reads: [stored_name], [badge_string].") + else + user.visible_message("[user] displays their [src.name].\nIt reads: [badge_string].","You display your [src.name]. It reads: [badge_string].") \ No newline at end of file diff --git a/config/custom_items.txt b/config/custom_items.txt index 9c85df2394..7609e02719 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -219,6 +219,12 @@ item_path: /obj/item/weapon/implanter/reagent_generator/belle # ######## I CKEYS +{ +ckey: interrolouis +character_name: Ruda Lizden +item_path:/obj/item/clothing/accessory/badge/holo/detective/ruda +} + { ckey: ivymoomoo character_name: Ivy Baladeva diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 2212f07472d60339888878abf1489101dcaa8fb8..dcf96c8d47ed1bb0a767b8027040c3f78d7ce52d 100644 GIT binary patch delta 19781 zcmZ5{1yoc~*Y+JiIz{PLDd|Q!6cHo@q?C{pq(PcH2oh3)DBTiDN+U5ti*zG3bPY(? z0K(~X_o#D zzaNWKAi4?8lM(#xc+S^hEmd?!O125{!x87&L0LdeJ}T5cn}W&yiBtAnnpYw`oTw;K zQ?lXs-PzQVW6t@v`%Y3i_Bqrf!pyXvMm-wBZ|b*qv)+oHzzZ-^Y9(yiat;}-l9Rh- zXv-g(9kbj2>&BZp1A(96MvwMBypMbRnemg+MEvj8Akf%;MbzgBmC4Gep{c!f4Dp@2 zpN1bYDBXCc;<<#`bcSChz2CdV!-g)ckLtV?k{1qCW`x;JNt}^sT5p&!6=f1*%Yjwpz?#uEuMJmUvv;$;6LmjHf zM(QncTnaKthR&9r-+moqkSmq@bB$s_A=Ny;ek?3K-VdP3j zZcrPusZvlav!c8+0ki7RTMECLzWN>Q^-j;XEctm(QI*lv>w?yHC1ZpiVsO$PJrXHz zGEoa5W(+dYPvx!rC^SnZc}yM(5cU^7v$#UW~=lsC)qH7^}1696Fa@uAepmI zt9_jyjZi4~#QA!}Hl;_b|6-Lop-*#7S~O$DchLV!%9stmjL<8*o7B`flW3}oUcvs< z@~gYDmX?-J{dRHR37@{6q8&Uu^Oyyt3NeKx@^`khUvCg@l(n4E>zZ$CEc65dBBK)S z_wLI0 za>eWYWtv0O(YDon$)*a|dqA{l<*NZZ?LL#9YLksIhoaxVkr#W@d^|k9N$cmB#Kgqk zN+I|*jx{DUH*e-@X=tP!tX*|yV46%}$mRCB^RM{Ds&T&N*<)_%`S%Uaxx9>fRjULA z1ZwGahVvdU$?<*_-07#K3|j){{CAsyp^i{mak{-;vYG<~tIV2b0dmKedTM32rTuid zYccWjM50wUC3%iH{5~d*NhZvV(w6Mj=+y)!?(}brOFAAK|Bus=(HD+oS5eVS^mjC3 z0yGw7|L%g5xo>_^YG%nZ+o*&sq_l?I?un2RJy(A@QAq~&>uSTn1p0}0F+;U4lI!1HkPk9R!RzUcOr^2R|CZ3-i`fqzk10Dt=kqO=S;=g zC)(J>Dap2DPJGzJEVN{F5^w0j$QW&fE#s-k1_e!T!1_0%%EMje-{esc9%5uhvfQ`n zs^jFhbXX}1aNa&d@c+P$d1?)KUVdrwO+Q{n=XT#Z&v3N`51ynV zMD1K>2(FJS6P?=|L~d8CJ@tzV-Ux|)ruRf#z=J=gmbIzYQrsfJ) zk|^VZ7yC@iH+%wW#60#eR7YrL+$wRDzNY~ z!tM{^`eU7K(94dhZ4|1me;Vhi%RQCw z@`qoJ{(>_k&|1U}nJ4OF1 zDL|e7ODJ1Ydkb#%m=Y3EOzSb338uO+g)eKzgpJPI++5}+bba@AO|Y_Qol`)1G5;#{ zhZVT2tkOy!BNP^@Xkbjl-<=~bMaO6kTH0KF;Ri#aKCqq|Z=o`O3_iLf9=pW!Y%4V0 z(^tT?PI0K+qIn{W;4|nYeifw^?Y~k;JPsV z>|F~VGE)#2zYSPSHPP2ezBx2e0RhEdlo2McSc4q^#*#i%dt=e||9MM3Rs0ItLIgSn-ph2=p8xr3Kg*6jWMyP#a?VX$>|C$| zM|pX9{AlOuEn0xk_Bu8L8CMMazyp563Ae&2$TL5J#{%}O8j9x$8-nY@%C%HL4D`N^VS*BizmCmQvL9
    SQ<20L0&~DX$?~Fh6BV(S82>B;Bk$Ze5DpubE|W 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 delta 19553 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 From c8cd2fd6b9788540d549b0d38bc083aa907bf5c4 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Wed, 7 Jun 2017 16:40:29 +0100 Subject: [PATCH 131/261] Updates, fixes, and corrects allowed items on voidsuits and rigsuits --- .../spacesuits/rig/suits/station_vr.dm | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm index d3a1a0ad91..efd1d606c6 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm @@ -20,26 +20,16 @@ ) //Area allowing backpacks to be placed on rigsuits. -/obj/item/weapon/rig/industrial - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) -/obj/item/weapon/rig/eva - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) -/obj/item/weapon/rig/hazmat - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack) -/obj/item/weapon/rig/ce - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) -/obj/item/weapon/rig/medical - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack) -/obj/item/weapon/rig/hazard +/obj/item/weapon/rig/vox + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/combat allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack) - -//Area allowing backpacks to be placed on hardsuits. - -/obj/item/clothing/suit/space/void/engineering - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe,/obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) -/obj/item/clothing/suit/space/void/medical - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/weapon/storage/backpack) -/obj/item/clothing/suit/space/void/security - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack) -/obj/item/clothing/suit/space/void - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack) \ No newline at end of file +/obj/item/weapon/rig/ert + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \ + /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ + /obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \ + /obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/light/ninja + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/merc + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack) From a4d426e91d8257dcaef36a9d587614563f99e320 Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Wed, 7 Jun 2017 20:32:57 -0400 Subject: [PATCH 132/261] Adding Harpywings! FINALLY --- .../vore/appearance/sprite_accessories_vr.dm | 7 +++++++ icons/mob/vore/tails_vr.dmi | Bin 57104 -> 57080 bytes 2 files changed, 7 insertions(+) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 114e87cae0..f1175a6fcc 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -518,6 +518,13 @@ icon_state = "molenar-kitsune" ckeys_allowed = list("molenar") +/datum/sprite_accessory/tail/harpywings + name = "harpy wings, colorable" + desc = "" + icon_state = "harpywings" + do_colouration = 1 + show_species_tail = 1 + /datum/sprite_accessory/tail/liquidfirefly_gazer name = "gazer eyestalks (Liquidfirefly)" desc = "" diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index 1282e0811938d45425556efb178afcc1b073f479..88c9d4139e516d890063155299a02a0f528bb29f 100644 GIT binary patch literal 57080 zcmc$`2UJu|6E--AWXS>o5*3joC`mz*lA~k+Wl$tX2}7PCM-fqiWF+SyBXJ0?faIKp zC^=^sV3^rEzTdau-#vRaoIT4qCs)8n<7Om;G*Kc&wUY<6Q_21ia~aKYw+>yHvJ;? ztQcbJqi>lKF*8)0)=)nnCiQi%<1mbp>ecR82<-DepYoh<87wQ*+C((Z6gt#y-XTPv zHY?y)%@h{#AM?VGY&mY4Ur}HCR1=ZDbDaB-_^Zz9Pm}TOu0yF2Stc(d&pm#j=%+-P zbgsSj+Q&uN2s?JW*!=W%)ouEV8Ch55Bll{ErYHK3cET z)J^%v3RFgXcl<-s&eMD}JQe~qUj#+5M#b7UcmzdBOHqsFF|wsRm>7mTozw8AlrNy} zc!>mha}eK~q>?9~9LOYiWE?ysPMEjCRV{FQwDn*i!OP42$|)0{fX!isREbREs|0&? zh?~$l!POsT`V;0Uqs;pg9KozyO6bUm2*=j85YwBxjn*SecaYTfd{3n+jrGjf`!||D z5j^Rbd7Ac7W@t-#58pS@ep}waC%{!A$Ki_F__?%rRyUDo|#LpNd_|4EO z-r){+(vj(qlB{D^^HsJUa^^7mNTDl@WtVBBeE(Fq_BJ4i)dPR}!S zXAb6j`!r4F;QS7O$_>1)%IsgLhzr8sFy{*BcNc+;DIA6qc-iGnE(x^A!r0FOVoc$N z`=5@4fSQZ=$g7$HN#r zZDg9`6gJG{u!^!9c_#MYEx6@<)EDIT;z*&&GWc0uIMW_Xu^Zzl*DmM$u>R z@#O^3o+q&c38cG9=+OwF`;C2yqM)XR1Tw{SfwV`KWpldx*QUTs9-N<=shj-*h+_iu z%ws-IhF!yc(#c%;tILaI-51=14Yo9Ze^U86Z|YrOcnrDUVh@MKI5~qC)r1HF_1ctP z>b@f&ztY`8-uzuIBQQ39aai|w!*wc$6d`}uz zsZneP+YucCmO9s}PbQR>G5o$OdT>#nyp(7)wq7no=g)U05U=2QSa%Y&5?R#vg~(yvt7)_x(|M)MN-|s6Jeu_TvB0|)G7}xp2%U(!7Ux=oFUXpz7)P@mCB^Dm7TElcID>HnJ%!x2_?LQrwDm$MvAH z)7)7`03)o_mRqvBSC#5A=Q?M};dPD3#xhQ0Pj-s0$erx+2DbonfECtx#oOu_-MnTq zR1JA3hdj)EK61S%DZfe^$C9aS{cHpkyGF63ysT7KBc670Y4H7zw91mW?DGEFl<+%d zY}JFHN*XBs6AX{cpPFZ9@`vJ-xVf92T*!Xok#l$t7@TgP7?QB-$Vy@}kQ>!f$tz$d zDTA?EfN`v*Jni2#k>(Iuh9?}^6FvAlj1f`>InoySLj0jFC8V{y3hSKAs;xI&r8g$Qb58|%>0 zePxI*5C$f7L}*B{sz0YM$71(GrvtF&Liw=~Sg*)S5+nqD6abl-*KGQ3C^ zT6S{XVXT!xbp;d%`tKa}<&hkiJJqng_#`89MiH~J&PJ3}PHDF6bbiS94=VqC7R{$? zL<@Te+r4|LM_&WKFs|~|D(@FaKQSayjMexFA#OfiiU{8BBlOnpT-cl19>Al|nlzpw z%lyUA-e6~-Y@a`*_gb!lG^}y1vYOH0>6_^v$Jc#N#k$hFYWw5OTh>&+1^SRY!Ct_vuNw z-$({uT9{Dk%8d&)YLJ}x$_PiNRZNn%K8ZNqLwGJyF&Vsi@e5zD*=`x)50MZmaem5T zC$Xc73|xFY`p!hsjk*)exy9(gIT`pWFB-wZd2=oJ(Btt~g@P{_bMiUYz1skJ7Z&SDzd)bKRI2V-43bvy>R^Gg{()uS3QQC4i ze5=)1=_`fgY17>}-NgdrWIdKnV!}60vpSVM;^7iaI3bxb3pDTvW~)Nbx+ps|0o5hB zRY8faGGv##11r7ODLN#&3T(m}j+PFDEky}De+8_h989+_UB;D<^9F!pVKImTSOCH^wiZzdmLw zlj{=IC>myzb66*NCO;!*lJo3`0i~w}3L51ml$uhGjTycC{@j{Qjy`y=!GQ|U3liJs zvGHz?C8pF$eSgt!*1WZ%DLX!DYBwE{c(nuE-DT?r>?(I;47pDgP}FJE4eH@7+4H(Z}W0PpJPp)CSnf4Hx^G3F$?&a z3wz1PYH|gKIy&$CGM6fNmZOsR49h?8W&_=QY>npmud+HJBh)CF{3y^2LT z5|YUPEiizLg?ykHHgOr*{>{$G3Yey2BmJ@O>-nPBYu#5*fnKU ztG6sT^DL!JLih@M4<;Gj^&)iS>d8$`4}77U--b~pj6S2T{&=7f0o|6&8%-exWFW<0 z^47vLdnGJns173QowFTZTIr)=mLV+Xn3Ce0EZmBbnbk>KI6ore_OmC+2};sUO?rpY z@0Jt&X-J>8v!mJ2Qd~1Xj{k%GyG}GBvDTurX=9W0F0l)8w!NkHEb`A`@-pR;KY(Rw zSe>{=P-T&4%cr;J79ut&8OuHnVs(b65Lyi_euG$JWd zY@LDi4%S&WMy6Bx%>kNHyi_n>7DY}e-U;3S-NIo(GyR7Y$#{QDRDd`D?5g*F_xfnE zp%OJswBq2yOj|~~%WN>VK%?^?1Xv)Qlj6-Bd31-WW^Oa@w27O>n#F$?afhVsIRX-g7Wb27hr15eaqotk9n(VBW(*w z8Stt&$}Ml{&J<712sob;>O?nB{N&SR*9if0W?kjKDK*k2VQOZOZqf1ub7&ViWY@e6 zdZ5qzcyH!YZ7;x3UclfWoh6do7h1L^?H|_lf>Ih~&BM$4q)FpTU$Us0FuKTTS=TlA z3on}H7aP7Y-D&2q&vM5(i8)+wy!NrTCV^a$nCh%35p;klt_3CKU4BZQm!+bL?@2%UW?$b?VSt2LL!dtme}_Cn!um z?zw9wEC|H`-1N5+`V?DTKfK4mtlRk$ZQfRBHAsJ9U^+Bog)av)YB3nPfitwdNn(oxr)G*G6vVf`_=Nei+V;kJJAC-X- zrcZR|gh#DT&;0i4*K;!U{O6c__yVC+anlubkq+CLpJdp48R7p$!*gOhy6n}aRApO| zuP^)nOd{E<73HTivza{7(z9S`x_DadOdYrQZR_5AOib-?_}Awqy81na_OUo^Xt~aV z_P7IRQXLmvk<8dL$1SWCkflGwNnv|rzeKfnW*`Q;#*&feOPgQg2jFW0OZ2!-+HUKP z`Hx(##Bd!MtU}%?I_CUBw;yR262(pc&Kkoj`0*nkGAc>~_F-;%x{#6h_~?nb=1+qK z2}w!ad8KB*AQ6n?XDM?LjE07WX7WyPUfu&FUSwEUzoc|7?gwDx)plN< ztIyS=l5FY3Zl{TVCw0ApR@Dp!Of8Au`)d(NBE8^)-i$x}DqP=TckSm7ZC;@0hH>lH z3OuLfn^6)9<|OSy6*Ee)_C2ScItH>gh16HO_hdLUiHnNqC}!gv8fcT4X3N z{DfLViHa^^vYqJYXq6Z{cjA$Is;E`1!?hfmJ{bytkft3T9vK-~P*D+!k}m9eTL`LR z2=e&JpnCR)R~2P}o6313U@G%YY`Jb8Vyh}kGDF$sfqCZIc`Efa!+}khh&IAM8Zp-e zCtl8oOi~r{X*rk#pmI1Y`eX_~@I!!W5LuWd}I_G~`ZJPfrgg zg#F&V_b82DdsD*pJ_j-Q^iX*c#4W6+B}X_mBi14yBmHN$|#2MUQQPw z`ra($dl7mUj$C7&V2FLur0eL0@C-bc-IFr&YRwvnhE+FfQcso8CNhwl$7vqO~NyV-v$rE!7^M! z0Dc#N{KfD7c=)q6dZ6-_4_iNJ>wRV_aaKqQW7=1G7THjWPk3vnG<2KwCJrC>_N%fr z`cZQT{Rbn5ch6CMI%H_P>}4f`u+m;vBA+;-O9?NvWUlqXw2@>@qF z+WnTJ1V@J-C7rR@R?n5-I zc3&7z(fV~1e@Nad8~}+DzGLQ?ow>p{VlAl3U1>W4huAgzVx%nueeo|&#_5kK(*41b z#Bc^yULL+HVZM2hseesktnj7z4#gcIe?WORN3~=$8eXR%>H)W1SW_bkP!9+ci^3{u zYQ{e*2wE>|-DYDxv(%6}gItwR7-z*GOo%>4ieNNZ_l*H$e$l#BYn+T9!D3a!pqt*iIIG{tMW!ocw4SV<&@eS*{SiXC;ou(xA zaCy+&L7#1-@Yhy~?5P;KFMQr@xv>VI1MskhH%8LyxsaUC;j+g@v(LG~i}K6&=L)ah z$}tIZ=44Tb%eX>xl%5jHvN4|+!!v%XX zl#kMin!ck~mycicMR3v7%^6th*Uw77jW0kBM?;7X?cn3D^%JBhPBcxd)<3p6z2yAZ zm7!cxYtqKHsX0b_GFt#Cq743Mo&=??-!&-UO9PbIqXv$K+_qtkoN?rHXacI}t{oVc)a@#sUDCtm^(*Q~Y0)Y`!CGQgq0$t7bPsZWTbKp64q^ z;7PW`0AjED(8Hj2Gh`L?X1e))`HyGa4z9GCu7ri1GTe1zT?w)hITAz5J$&$!3a&2{ zn-cxwsn1+*Trn}P)Yg;aKXV;i?G#t37O-1Y5M=rj%3jwmfD7K4f#lUa!}F}H3K;w& z*~gX&@*TU`V?^@uLd!aAv+fETxaAZY_3M4|B>1PZTmim8Yr5X@ey;oW1i_i87{CJA zRq{Gt*-y?njo-xI@%ama5?=_pVk&QFX~GEGazruBf?~REFm6_Sj!YUB9lPZ4x8LL?LqFz> zWPDuf!ylBbzEopH7)z#>n13HodIP>4DsR`m06x_@X`)<;ou}zSh_0BC5yA zA3B)bUcmu3=4)#jpcC254Fmt_yCZvhj;lI)dh&pkBL6V{r6v(!P2ico)|W&(Rpj*r ziQ8kLx}8jCh5;4*`SX6YwUCa_;AZ7zp+_qNS(~ChvbI*Nr?*$Fo`RYp*rd*JPJ#35 zNi7k)w6s4%5f_KtRM+|Sitjlc0|U`n37(>rq>wJj-p)==ZEbCiTHer>3E*BEQV0Ob zFZ3jMuLad34K6H}Ce?{e5zywbxjBurv^0{$&z~t)#W?j~UN~2ax@cx$VNto>-rJ)u z(gL0YIX+GmW*R%NONgiH16Q|Dz0@-@GRoOwYZn9>gY^}mw0C8krupfK0f@WuA7{hu zpcV$bz8ucafJQEo0d%s2bY`)|h#fsJWMCKhAD4jCP)z|`f|Xt-PCuMqh=Ym;sTqqj(QUe%EVtJ4PPZr3N=r*gCcWG>-@&a}?oQ3jL~c^z z$a1vt3^L^WN#3I@90Y(60&O5%Y~}J4hVgA*0K8dd2pI#R^i9DxKVPv5naQ@hZ?$}g zRKCxt#7PbATp9iq=i2bvyjiS~p4#{Y=s+qPB+Zj z$)8yOitC_wm?TbyuG|XiIJg+ z=oUB78;UU~B}JpK*5kaJosp!2bt+$;ZWiy|UCbnUP#SY#gv)lEgoKzuNG{J7BW59d zQ{U3MuhQ6WQp#XJRFBZdGPeTQXzCwhLf7#qIHl1=FP$@_{R*@)qKfWwnzN{#DZ~ zN#w~PH*H>wTr(8!w#_9zZJrGkj^A`CpOLv+-LE(`U}o)4$=e^j!*?#iZ!Bv%Qe`s% z<`YWG6X!2Zb=2O!i6XnwaISc*etb#B@aV%ylOYJ?Uv9pnR81=Ivm^SD;Ry&10Q@2# zcDkVQJ^Z84uv6JvP+Uy5B>q7j{Tt|(bBl3Bf0V$qYX-c=srC4{!p_LtT=W6+ zlbz>Zps6IXIWaTxw#B;dw)i%Vw?4Ke@Xg$H&gz3Xda^(j9+iAJdcMfa#~T+lT0vcT zqmO+jl$or>bT1QHZ5y8ho#eTp?J;Xm9@Nx6WH{8Bo*{qO%Bk~;;L7>3!`a10M$iou z>U=DG5??yB?iHS(K(7Lc{})9=!x!_!zQFLsD-7;7CdxSsx$^6 zir7HDIynnE2aNdIIxQMdLK%Z)(%6};F&}sLl~Z%se|9$&QWlDfvz71D{AAD*!e&$aJDOq`V=&2D9nxKR3msA0^UTyTU>T0=@1CWI4N9I?C2BzHflyJhDP7_|m?s?f)z3KsjOx@lOa> z+|7;lDAw@TY53=6=rlRd0LZk3s#4{Qa{%wwR)Cu0k;KjG|E#~IPHbmnXVFvlbC-6ble4RubujPlXQv3d0_8M88p0q59Iy-UR`T7aipWD3AHaykd1oX$jL zBNelGoLX65aW)r(Pg&x0?I3KEhl-OxC3Xh4} zWNFFDsXBK9{eEI}E!~f3$2(Hq)z7_8HeQ|3eU(Bj1|0=aN{1g3DN*?gkh-+q0&=Mn zv$N`eCu%9H%FJXR!o&4hnc+k{vN;&Wv{8C~e$_BA_?e%=t+k{mnd9mrls%2&?o)P_ zr_Qo3h$->`uWjsoxtY%uZ039e?~c8i)twJ?i)(9^3zN)x&^m#%cVG1VvAzXu=ck1F zUyy6@_(T+Dmulfs*C(TQVC5R!puRQiW%B@g7+YRuW^0|Qb3<(xPAtM!1E?87Xqp^k zt&eeG{(BDJKk5-;|2+%ftgqkyg?SKi^_OJAvsQ9Q-&Q+9&xXFRG>fWmgkQ&G6xTP( z50tv_14%(WvvHfOnOigUp!7!T#HPouY0?QX>iL3aZ7=o(!3&B}h`N!)L#yqR#y|E1 zb|!g-fuqz1Q*Kf0VQLdC>hQ??dy5sD^l}u5C4L2wDco;BnuezyE8Vef8$&;2Gd^+x zW+;q;B`fxxlI4!?;^t_6Z?pGl79Kt!s%0QGH5DLvKbohZqp3-8x;4%>zYrO3K{rj-`GUc;-!%`a&TinH2Wl=e}&2RiXp&KSWwrKn6 z!@Iqzdr=V@FCX>{9Q{lA4%h1IW2FDIyKU~1o1U2PkK|+$KlaG|N%Z`=gX-0FDg*jtR7=eT;O^kuVV-E%-kbbzHnO$`VwD)biP3%|>g!%`qG>%+$-KA6xtaPD)S z$ZIp!?ZU|^;Z-?&e6W2kF;@vR=YHd6jtB?j=+bbd7BAxItgWaQJo@;Wy<3;{(+428 zGxDD@JDQ31Pn6IYkpE>*24tafa(0Ze<&Tw7!sMB!Ilh;4MDVqmE*4kFuc%RJbVY5-s;fr1+*_gs+IobsT*hRiw2nW*jW4#3lZfA<7_1pfbYb@6Io z225aEwaw^*q-(&?xbdVpJXZThjA&eZ%}-%E0b8|J_rhL{8hKYwz=X4>_U=~k6vO|sCa1)#_=uPvQg4Wg6dP6D=0AS=frL-s<|kt(j+h41Hd7i)si1{h4oHqi~XhYI$tuWIZgx;->_^)Q&z zv%J0(A%qvakR5L-l-UXZ?7hT>ED}Zrif`gID#~yBH-3E z7rNuOpD9NI6XvV%tvjPAuUk%MrPgkVFIgU=_g>)^;!}KWO7acrXhp7;N*cGMyHGs# zyRQ$TBgXLUIZocItu^~n44-Dg?1Nt07jRy9(@ zes7VMQA0A6@4tvu4jxE-_RX152KqdjO-8!#$qv0cfxermBVP@hlW|tbIv6Sr#&kBp zyZ?RWu?OW3+%F*CmG+T1%tmAmoja@&|E{ipuORE##iUTbv*kxgex*;uY$X?GG2c(c zDZjnTBl5!own&RMbR78Z-sFBL(~)K^r&E14vt;#?c9-0u z0onV)SyS_~PV-!~%{TkJ_q~CFK<=NhA6b800W~s8dIJUvjy*-Lx`X4XW)b<`SJ7VJ z*nT~GqXP@V^nvlFG$h+L)@|SRBE_6O^gX(Hub3wAD(>Mp66_SwZOL29kK&d1Y&$=& z%R}8;vLY8NI`=Z(o0P1Z{5q{q2BxVqJ!}6$E-TUGK_W zm`@2LQ9@l@T+{_$3ZiK0W%d)B*{P`CUM5ut1{(XhH*TGVO;UdGzHDtBtsfg%K;M4S zyr{Ne@+zZ55}#>Kc^)IE(*7kZU6+qa;UlIh zZOOWE3$*wZ@C<7FB}c#%n*&?QVXMzv*S<{P_Q~0w#IpHaWr!l;U%y@@f1YOdxB2ol zpN+sEA3wV#r_808v#s9yccOA#+Q<54() zlgwn8V5O*`5e@%=w3GDMJ8{3Fj{7zn4sh*0 zKirS?-6p?1nLEvagcqJ($}K0}R;W*UHK#Ng)E_FIE7t#Vy#`+P=xi zuY3QC)VR)(g<89PP+gKN*nrKjDsE-B(>DYkhiHvsGFKF9xR6@?CE{mDd$_58OkFrxAl*I0fg*r@$kzZP)*jew>8G zbK(XX($6zqGy}xL9nYFZ^R={4E}ZmJcLXU6e*gZhLK^;jxJCJe6BFrz5}#{jshO*4 zO;N26%&Xm*Vjo*_QCfYT$Q_3;GBa;_>R+4-73W{<$Z$Z=N!GW$eNmvZBbuPgrD)SGHT;X3Lsm##c*l1Tvg=O0z;fP5hE zy4*kf58WHFm`Tm>6~0!b7}nfurI@cNM2>~{9msJ*_aXV1=hq z{WkRPg6;{6oVjLjh*Qq$5bc!<9b5iW=76kKL14~u6&5fNPhutw!dG}(O`l`G-SAK@ z7r*yo_5u&&87;HeZ#y*uEXY2?FAV&z7j5VgoVHPi%ir>x!u9YTsA4Xy-80Y|l(5#6 z@$ysLio76o=|F0v8@#)yoyVDpQE~YqU}qcVSKXimJqg2gh;o>w0qBn42mvqSkX5Aj zWKMg|CNrnLf5caWwDBDG1RId7^9Q-mWTurFR=3*8|0Dg3WJq(8&v;Rk^L<9@P3!z^ zI)MYG;ceP~p>Z(j8Zd7_UZ;Tl|G`!Et7QJbm;F?UmtrlsjpyV&mw4<|96(31fw+dN zbAhZQJ16#HxubzX;T52miSdi#UodROnB?@I4cq~?^|PRG_f_l-{USRHZsFdlv{t! z|CP@%S&obWD);`p-o1yj2w5?Fb~*jzyEwS?0jJ9tgG@zh@m|owU7`ar+|aGxbGYr2 zjpucY&ic^**6e_LUvE)iHonri93K+$-Z55}F|OAmK{$pvab`WvxaOp$Zf?Fd44{nl z&`jfieH@t#54YaWSOB_i5&%7+!*%Hyh(*oW6BzmVxD!8!G!);4*y|N_$jfVXI2F0m z#^#FSZHkfQKhdS^oF2 z_Jx1v4FPJNaZ`8EGdG`m6-E5iJTN3V!g4}@mmV@*P0X3aSEUwCd>n}P3J*X=lRWWA zwUZaQmylazHO6&(!1(Pc4mK&79khIgjKw8`2oR3372;%0PFVf+Q(^=a1Q$pxG71w7 z7xJ~2xcFXnC?@+1awg4Ta|M`l$BP%@FKl;9b?JGm0?LEH=QtVncQMnf(MOg2$z#;3 zGrvd87&hM?6V|P9PxHeYp@A`IeQ7~~vZK9y-_PBgNx_?D_yBMyq>#_n=3u=8gsbe~ z542M9o+s9}pev~cbJ=T>`lo9G^(~B6zrz2i#Bch(woE?e>wB+%u0k8K%w7Wss|OE~ z^un(^Grh@=z-3f4iIFBnG4%^opl&(tlCPJ;+j!#jA)Z zOMmv{=MKrKX=xhM)6;IK!>VeJmj@YYKH~B#9WfcXxZlpsPOuO^shD7$nf2pC*YJox zR__ab+7Qy+5_ph>(hHAFvHa;BO4xkB*B;>P?a-Gan?d1qMY;ko6Tk-3o?*QG;^ra{ zrXDjOCXx~p^U-q?6A$D?MS*Yyz~DU##BJ;izen?aqkqBOEv>9*sfXtk`cICO-ila4 z4l=OjmP)yaGFv(rdeNJR3)|D&EytH5*eyWkC<^#^(l)$*n*T_a8Ty>0XF#2zXsWFfi~N22o|?jMzP6# zr$m^skrf$Kkd{mQ>~FS;eIr!;9pLOfCg0mOn3gM-Hh#2(nk%E9a{~p3TjobrNm9Ja zW+)o0$vAH0sZFz!Q34_~)rR>k=1?JLKZ=9q^Lak(9|pvi@bEm1lm}I|Iq_ROWOcuO z9j1Z#>D5p&#eIsL)YDN#B@LH+5(WhHKLW|$GoN<-K2pk9V1i)=Q+YC^d=kP-`V}me zCLRX2G;whHXveP>BRG+b1xcNH3=f@{(CL&rA9_G!wYEFkF<))NmyYCrY#!R_6hofDVCbgGJegO#q?9*>8SAZIm9>W9S?4wL@_EEG}3`KdxiUunO2{eo>{-w6|R#qnV&|{jrkf zeW~xQL4Zyt7@U}Y-wZwHin9VRs+94o%Htz3HYa7&rMV?wxpXdS#2>l_H={zu+>vu- zPkci3yS*Ttcz>o&!ti0&59c%<@3w+vvb5<|3sA|6o43P(i3Gw-F3xRNZS#unmM8}R zkl#m#T9ny;zqB>L0Yx1hnnQn=mMd&cOa;>>l}xhOW#_S5n4 zu|V|t!u8xjt^*oi7#A)xiCBNxtZy~0bCm*#i`<9l{qv&SNU?1)>Od{-g6LC7A>6V; zR#rZ4lcPJP<%r1avBCN<69HJTT~PZ-?04`5!k2B96;^ui8`i(qM(MH1+MO4oAAQP; z0D3f;`y3s*%|IeUp-4oQC*i5Oed%VXFwXJ)ZMCBb>X545%|2r3iSUJpjiMi)px`8V zoAD%@gj;uM-gFj4+fJ4{GAoO-zPegu(|Z!%S%fM6T2_z6WwT zDNSLd-KgTpZK$nfy89iLnm=Ha}@IUN8!*kjJU$9;X^SC`D(_`Keu5Hkz3(&xJ> z^74kJ)4~|zrNr(a(gPsi{y^^w9J$m)T~ss|1ZYQP`0?=ZeVe;wg0933s!paB4u>bc zp3=wm-8c3tfx|tTGb}7Do{*I|>N$ozpKuj9mci8RTvkW-YsHO3uytxN{)2svMj444 zelrMTlPR9=>esptyT6eDz?}m040AYEOgy{1hc_NDec$#52R=AAG;1fNFIu83whiji z(xlbnc&P2b1qrXsCTBh?F1PZw?YJz$*@goU(A%hkDPYv^873@S*c5juy|J@#MYvNy zk8nw?mthnHSu-iB{Pf?ZLTZxs!%VMotwpxH&8HaI$C#Ly)LEJ=-I$(;QwEw_r430U zgOS_EQNv<={r#d+tOkca#-oJ_DaHUe%q7^){4*%SuIB~=_3#0k{))VA+I_?Ct@uhW#*8|D&J{0?6Nj-*}-!nR5# z*r%RGTx9D0?C56-JU?cOg7^A2(vaOFb(gA4(Ddj&i1zfRTBqvN2$>UPfM@4}AKF`3 z0CY9XEgmR@_ymA+8fp$SsXt|#{NW~{$aH%in56FKkIi46)Vm{azH5zG=dO zXlCZ@(Ie$_D#nzM_Ng;l(X5jx<_v|4+h-nQi ztus9DjXNa@V0JKsk=ITB_lCj!D&OZ?Zcz~l>_|G+fF{lUOnM$d5T z#BI)f@&dY`{u)O0)B$UldvT&~)AApRja{OB4iMRgi=$NpxW)HkzZ5eV13a0sdjECLg=a(&VMu_<%`K9W9 z-_;>ouCd?$C9zMT_9v+Dy*OG(jEnmOJsmfsEOAM)@p?&`~0^uDdN zpB6CXUm!1W(5!2NX{7UGj~CnI<^O>ulk4q3(AT>+r`*cGbA)_=SXxRUm)N0~l)n`e z6#h?05KoR$eFtCaMudl7i!c{V?V_%bB;}iL5Dnx8K=kBmvU>u`@m&n|E z5Hv3)qz1fnX2w`|8Ej(0_qVUD|9xK@av+MQ^wR77DIQ(PqIRZ9Pb_-ojO$Wx7rTiP zFN^smFOQ#$ffuKZ70+d+<_I-A1V<|!-;V6|-|W`IJB#?nE&8%t0$qumHbPJrBRN=7 ztA}k+7A;qE`w!;k)&14!%m8Hge@GKLKPR(!W_ja75$LL2*F@z1sGsU|>|X-p&`>60 z;P_JF+`zzP^y@i_O|zP4;#QuguM05vetHB|JSj@i1ip`&xCoXd>ey^1DSx^BtFQNpak$t~qR>0p$jaP2+p50ZecrKh}IOnEwDpEDTkUsNg`e-ii{6XvIOeySXQHnuPI%HycXlU`@YFV-y z<)2r36S4D~N|@dRfyQ5spixo;vzUD*V6`4-D7?n0Enrfm%HMSmy71jBp2UvBp{LT4 zy((eAwfNjin_MgZij*{tsz~%#;6qmQ9^XUfrbqds#DR)&o6Lo`?mm4*^21n{Km1Rd z(_(AD=gCz!Cb^;TCw}+h1^srTREfuv-^<;mgn}<;7+B!Fn<9ak)E1YDydfbW|8pBq z{yb^n4m_7z1ic5c8%lOHF*2&3?DHG1tDH*G_=X56+z&o;&=HbzR2`VB*#X&DUqhT*vu=NWk)?>IiyVb%ysn+BzLf5?+rp z*>2fynLbXCZYVgP^ME?0oAjQ{;0p62N(`sCwz8UwGy*bpeX2g7hwQg+PoQ#mQcdo~ zz%}4VlA7!7IZ)AFMno@Q{K583KR`4vpc(n={mGcFmI`n@;UX>kYZ-8+%Cq9QRS1~I4>OV6WBIU532+GaO z_2S~f1qy{O$|yR|Xf_A6G&D50^v#0(B#Y^ko4597YV5SCynZ6Z6<6R3s{cIVzX><0 zT8po-n@or35Lj+wyS%E_=XAW5zf4SsC40`P@a`;BrL!Yj9&<9BapNj%9UQVvc%AMZ z#T;7>3OAC!_S6gOCJ`0Qo9{1n%CCE#Ep~A3gUFOM+6zu*Qfa2ZGyshx98>Dj&mICaqkI< zVz!W*0)qwQ=xb^FnQZ=Zpz_Pu_9DFTDngRxMS0Se&`ImD%o}xrMI6L!YD(2ilb}Oo zgS65lxZ)ENzY)KiyVY_jY0(omEFRxXKiw3x5y0*JD8++nPVdb4Lr)w}c0{US!1lbc zFx*L#{(5t6x7zdYo*VLnO;Fc? z=_dL;L{ogKw7c^3cxjTKKJa4o_2I!pDGh80xz_aD+jHAMCD^MPE9zB=2C7GZy4415 z&Gc#!mXPL+pKXo`p`{tHL*b}q;-lV*KZW_}Ur|Bx#>U1QxT5@br7N80(2_ch8ygwP zdNVmSWo;utN|xqWZW3#;z1{&g;=g&^Tk&4SE#V)wle4ocSSHu7(O2SQYn-!7l($lG zLSTtj8vx_+-bO-oDg#?nQv)z(qNWx_W#w-M?ETTEV}Y}44ZB*Tt$>G0raS`nVd^Jj z;Xv~IbJ@>7kvZF^mz}SlEtKh7@_zB&#)Z3{!PhNkBlUOEFV@q^V9l3j29q%G_#`Kt zxl6(J3vpoUt%1|)LauA3XJ+30M+$G}%8;KvIO==h4J1jLH%iDhq2W)lM`NEc z0g`4lSS^2f^1yrZ+-jpSMm_6Z7jk2!jcAi;(n{24KUpWsj)*M>SBYy(gu+5EPd=Y( z?@LoU&GBA0)lb(P^r{yW#zN<3?O%uJ!DYsGvF=A7rXNmJUZuQ+6|II-K^Yr&E#hC+ zd7#F}$7zbQjDbNR0n?*2(BH37Zwi4`ZEMxsrEV8AuWMGzs>+#!odSDMiS@uL_*;HQ zr_+qltBZjyzx6U4?c$m2-E)Fm7be_$fwI`Ct*fmyu(h>4TDe#l8~gBDK_9+Q8g$TC zCiCeQzEBFr838dp8*_6UF9Z$VxD@^6K?=;m0IFg#RAs2 z+2v$oc!x(f?~^Icowy42tFPtDQc?Fe--Ak2!RKD>O?PsCW7ZRUWq+uK; z_)gOHv2l@?J2_TjH({6f$9m^Q z(WcJ3SL+^C{J6B|p*A9Zt1#)b>c9??1SzgVcZFwF&JYPoZ`J8YiB>`Bq5Y3W9ZwT7 z6xn%;{eaLgeiqYNb#c7jYtW+dC~bQ^WT{|F)Azq;0WLDA{AT7zmQ)ybYG zyJuays-6;4n?cBN&Ej5R-HVz^^~P)J!)z^4Nk8Yt85?&mOJ0OQf=!)_qhb4Knlox$xb3R> zvJ=}&N(Ie?s-V!BAPFkTx7Z0osH)HQpSE+pD3yXOL1DnSUH0sRzj^9!y!jx7DOzj`FSBj}iMZKT zwx!JkAdh1N&)PjfE~Gx{-H;x%4_7S-ylAC8WcR(&$ngpV;4t`#ba;&g_#Pi7&5HN~ z*)&e!4TurR};-d_P?~v^RC}%q_O9 zrdtK}Qdyy9!$^1-rMoGiUM;Kk%kqug$&N4yL4015m;#R1xD#%1&swtx-f+wB^N~3@ zhCHK(PCo(r3bXnuP$J}|u00R?({~l(rmTh!tezcIwkMIaJ*K_P?95ng?IpE(aI;H& zBZvu>fG^0GnnZP1_y^@;TJSU6LC<_N+BZo*ASyC)Wn@HWL^6|qLsd4o zz{Ps|tw}1E)`Wa6k>&QFT&?O#WC7zL`|NRDH{SP;SD)yh`U#^Pv{!3qjC|-K{`{8@ z&iZ$S4N&? z3jlM72vGKr+&RiVN+CJ6>JTDtcYx|8UekoyP&poFH|#K|2l?v(LU<05O$~1|RLeUh zYK=1MqVVp`u`O&6Oma43ixqGC%yN>TGOpteezMdm&FK`#BDo>(ttb~bAln|`x5(NL zY!$X8sBqAg^yYjaov_eRCQxPoLPX$?n63l<;_n%W?)(2&&vu34{j97UnW$@T@0oKps>Z{RkU{8MxY7dMUYt-U8eCS(wozfouSJSH<@_flnX zK|Op(Q9GjCLBTq^Kz<51F{Q1?X>US3bLV~o-p{oONg&|tcXnCGECD-tW#N*n4yINA zOiHiK9|-*3cQ>x^>Zf^j9_kdbW~coa1ALb=-;N?8>y*)+>RcdC{@cUqKE=R2PR_GY z`^@)s%ll5;t$D83TVk(`U{nVVHAoos%KGV{!`l=C?6)SMw~I3`KK#a@dcXPqiL&MicW<6vm~ zhlZm!_USeMBsJ}K{lln0)`sG4L)B9)v8prT%t2QPNiHI@+=T?|%Z{NKdxv`ubI8h& z(5amN-8Eu+#5C)4(GWMvu#1-L*-AAVhMxaJ-lz78(a(<2&;1o9@Y+%-Ki`r=meaOz zn{fT#bz;L;6Oj`zj4=llPY&PmJCi;7>cOjN#Vsb=&;2LddbyG(`Mw+-oe$$bQ8R7( zrwR1S8MAGcmK_UMYrS8H?~VBM$$jcQhNR>;@3xvO!N1fv`Sl}&2ViVmi$q8OIx7+Q0ze=oSSlSTuKq|3-`Ib3dqhDK z`)lvEk=^rK{;9+{R~?$TMjFoy3J6#c!_Sojhn}MSL?@?eDZ+x~M;fPve@0J4;fhmp z1TpWwyAwCetQE&f6l1wP*S|M`P?pZ)QHrHfilsfuNWZdIm?}WC)_9bCN0i>8LdWtZ zJn{V8s}^L!Yms56o`+>EBw>`fyAc~?`$pspJ#>0{OcMRuJ4I6PAIY1<^ur$*Bpy5P z8*|ao@O!)pRK7tqg>l8d9z!N+g;;f8uNgAR@5ebga}Oz;FD4iq{jv3Ip^_y1NvB|qot7_5mbPdMg1)En|YeB)pjBB*+K2jd2w^qK8 z%l;!{`-pqw)zS*rRWscHd2lICzqSTK3{Q4YD~TP*_+VJIaj_eyfHO8J4l+9_XFDoO zjZJ2KdBEy>p#10Bgq(!z23>-BF@)w7W?Tq6_zKezaG<$7j;c4IaC??o$-A)kicV$; z!K|R}Ix0}`S)BN5rso~An=&TW^WO=K*kg-ZjAkpnxmQQC5-8>#lt>JQc>{GOUttv1 z6*YC>KAm3n32}cPGr4Mx+1lD#0fRBgDl4x=OBpk92o6}t_6;mgBW3@x}wc4*n= z-Uwl7Ojjm@>UP3n;Q`Vhqi=ME5U@O4%Gyhub=tyCYMpAvVwcc+pJvG7$Ly~5ZG2j_ zDB*Je!uJHfi8^n`>5cAOAj__$_Ff*hIs%bd8{}%FKCOeF?am&n9*Jbb-d(%mffvn? zScfq=qQ8B7d{p$ga2rpS*JTNFkmalYfXPa|ES8`c_hrLN^^?}FiIamC#LHnQmV?7^ zzl~zFiv*WrbXDkxgVDuQ#~c)UCyHU;5)O|neVUUPWiMRvJNC$2z!tmWww!u~Io=K3 zN)YME`#C>Ua&~~h~fD1_)&JX1F|XSjwr?#wQ`^{rM;PDqP&;J zz5)s!U;S!oGL>K&1WW&OW#yW`P7&pDuHQ8ZAm0DtL~DSPY69_4P{NmUcE@oBT-oZh z#*?jJ%|?Nd^(yJ{i0`Bep+9A?s_c&iAwONiRSO3aY5l|g`eG;LB#h?vD_rY9tD{?f z8K^gAZ9@|qP12o5(3By+?5Ez=WG(wz7Gm~)r7Sif>mE=bT#Uwl5w%An|u2LJSx2Wc+P)jQjb) zPphTUuKN&+QB*G3!)=`M>K&$xNL)yIF=yr)syPFD%u2pDVyt`b6C!zB3-n(hO~Zvp zr7{;|6u`xEa13k^8jjHcXOmXo9k`@>SQiU*kZo%Z-EO55rF$euUY1|vi!U|>1puJZ$p0`-xt$0w-NPS3z!~qVKb2T`*hry+Pn!kJrRnTz0j3F9)bx zZj^dQS+;}9L!CmX2i69P69q*pptQMW$AH%^LM2-=DPiPPUu@wz*;DEjF$&MQf9j80 z1=}78kt3ANc~G<`+QFe<-VINXp^2yOM2s>G^jR74@#Jf^gg~wE*OJ~cr~NSKdvFPzMwYHkD8%)m?(i&y%L5)0?oPC-qdV`vAL7XpX^EKyzEF9 zM=8ja;jw=i9emcE-A2CAy>O4paEA&$Q?}DKH@wku1U*3GCgr-au~di0#t|A>??iDma~hv@yu-ZQg0?N6 zEm{9iz%CxJE*wF_@2`-v!`KI74Gy?G3|J7bqVxEE z9t1}S><+@NKZ-RC7ksUhFhhYjMGl7!T-1lyIXGzkf+3rHElylHr`LK6wK$0>nSpQc zyNnFaFhn}_@jua-11b#~pa9E=pSX81<<&aflGGHe8en>6s}IbVj$Lq25t$8V!4JsK zkb)~t3N`9aE?&i z0MUH!->?S$o6j5Uw~Y<9Vl6cYg~%&xd5Bp*+;aQQL?HBwXI&8fPGjaGLI?R(1$mG! zjV>52`vip?Q}3X;47~$C;yT4$hwqM3Hg9`zJUxFzCJGvmEV6%t1}Z%oZoKhf{EEIP z#UVR=8cei2LCDCpFLG}ZHLBdFn6Dght+o86Hjdg4*qWK>BVdQ z7L^C#T>pWhGbi3p_=-3G{sf+fcVwlL@*F*N+ca3;^u+E7A7M8yAdGUb%DwGjVBGZ)5O|1SWX6rZSy zl0gZBu-Vtd3s3|8bo0XK+AFWEwS*t0H~kt%e0ON?KHjt=gouLNiNXHrvz#;>`JB&_ z|DF}OulSDx6U6GtEq~swK?)4v++)Bl!z_qlM39%e?*9SPAQqRzuFnFW+Sx8bhK=uh zrUZV+4N08|GQ?ixC<%bxw|=4}pVUawv1wiXGr*Ey9b)E+vZ$%3fOG2BD9Heyg)}M% z(jVH<`_p;l&ED}LLPbFKRHHNto?Ri&cC%P$YvnR>T}QI9$gA9ppR7^xN@926XD=;_ z;=gX2o`N@b3ahn-WT#aDApft#gqOjId5hrHZPp_lxBrUB?m8s`56+Ydoz zVII+5;~GjuHIrz|h{>D!BBP^p30q2TWr~3*J=UcQW(mCyg{TJq)R# zD|IO~J9ufd{JW(>rRkf?f4zq-G8TgWrU9nw$-{WvZ`~on!?{;(QqO?M2*%D=x*%!?>Y8)m+1hN=hVj243O=^!fYrCLoyMR9IMe7qp?8|(ro`PGXB;|iP+?jSSK@mCQ3 znB3O6ROCmP^vmHk5#*_MjSj*7^jZ4dj5O*Z?1QA)dUsx5j;BTEhm#~K%dGJG zV?SAxGZCtM{vv>gPxZt8>L|D=i`#B=BW1~9_D1=9$yc9nWQ^q|SuG{av%VUdmcsVA z4{vBa4{y1wj%z=+zVQK2b$EAv;^XGg9j{%E1|&goO|rS0aGfA|3&yDkA2R%}*t^x? za*r6O8flKkfuf@9o)~T|5H5EzQBn%r*tm}$zVD&(H}{L?xOEU3sULBbS}gQeSQiao zCuPGM#P#$B)o=w&QpY191T*i=2J}}DnV%4HBH{=BI6fI54jfBC@I3$3GU-Ykn86my zQ|ytgsWB@WX%f%xi1-ju@Z5PC_%ZY!J-q~m!b4^7FuKd$ruL$Mt;pMIZFjalE8c%}h#TzPtFnQ#5rE6Vn5z+uuEuJk=Usygo44|hz$9vil`#66Rz zFbMfZ)=MB0kuyWWy>%F9&!pzZ|1&vu}QC?$J z@Lv=wK4+8vNnrVsa z>zl=W2Rd^>yU1#M%3{G(>~l~f!m3NhjEciPirRV6DnK(bIBELi7eG2nE)&SC^_sqH z{4BYzpu?Hp_yN7%2)(BrP%7ORAGYWl0k1dyICyR}I@s`Ev2&*z@Muta5$WgbT+smP zV$iF}4mqGnP8$!G5ws9h-nE}7YDp`w)D@k3u++r_|2s6HXJW#iXaJ1~A0zEQ4j*8$ zV32M3f{12fPr9m)eO<+`d(qx1K;8mO0!z9^zhIFcgVjBg?}@!)VOqJ7ZF_htFemL^ z3&Q+~zv>LV*8Z-9=sZ3-*P3lAco%~C^Cn`spx{>Bo7Vq3(%)d^F#Hi3)44j#zaqTp zr$ckH1@-TTFQ=1{BS1m_aIL=V%JEIVO?8dE2p53~4RFjVWWEnXP`?D5ic2KK2bo9-3wiSC&g1!_1fOb@P!{lzE+N$7Eah9M7@FQRg<5;cD5>cbvlW z*0$;R?!UX{bzc`T@&`T5d(95}6dkJkdrWV_-4qzb<>OcbzwPVMzLHL-x>Ou{u^v@r{h!MQBK2a=L&LZs5_Ku;w-WP>pt0@hooBkd|10lLe=-o;hjrvfWWOk zxiR;QU4uGL<<%KvhP2$=s-0fxyyAW30rc3(%}pXz&gXIdX_~a(t>;W*8ih?>U*nPR z(Tb*DcIX{$>v28J(MsVRmsOvJPH!M@ZYtIcJU5rxC(#s@>V0|XML)&{z4lL27!{LG za}Bk+@-@XcsuqGWO<+|xi(P~{`2Dw0(XJn)nX``)3aL}OpR|9{PNxpq;r05zC7!U>ydB$_to-MsGUm9Mfp(^=wJedkzqNGwlhV*j3(v?w zce+oBEcB~%{=yZRqiFk#-b2P&sbk|&9D3)g*wxn{Tp@Gh&t?zGlPkZPSwi&I+W%Z z;8lQ7EFstm_JN-(!JE8&AOBnG3S~V!Wx74SFs0rhZSvdB`5!ck^s3kG)XAr3vA&OE zo>nr%>;|^(>6fXT{}N9w=gLq+IL6=k=rYnj%pAk6->2hSA4HD0PTrz-^4xbn zjn?1D&@lG9KKIT)1P-Z{5l^2!1Jm-@O0iR~7(_`@so{91l6&W{l9g%l_fs$SZv!*p zUW+LT<5^6xQ#fPq!~7xH{?@X2_2-lO^C^9xN+tnM6y?E}a2;NN>K!qqDn0#&{mS|0 z)t1p%jkzaQ>&QG%!{p?&Tyujg5MP+wSuxvG9RRcZ zES|RGcH9{hta201*;et_CWT}d+#pXaH%}v=X`0L+60y>wPu@ff^5PQ0)%8AjUY0aG zrc-MVx{m1oHuchaF^ut~{vSVqBa0e(zT5?0habSZUwI0jD>4KPL(C)}<6{>fYSH9H z(nPW6O+Kqz_P3&1KlP}O3AZAf=Li2m>xS;@6tDU^xhKb@CNOU6H>??)bG8~7Mq7wb zaOABlF{+6InbN$RoX)tF#FtuHOE&AL(}St9zO(RmUd|3x`_5l>irOePHzftfnSxzr zD!6%m4)=X1T@NrNCvQaf_%iWh=bpkk1B=JDK332HdKmIXBv|8oi@Ag`3bmJHYJJDI z$qPy+-ACFNShCBzkT9NxM%zq`={yt)@PBmZ@7FNMG7aBMdc$QSvsPZuUR9?DQlas|E)~xpFxwV zHyt18D?xo2M@CROSlis4#jVBR7>@yk68#_YvsOcCdB5Fw4j?=giXVdoYYYqokh&7S z>^hD*dNnf|@}+!%v#>0-eEUM(?^K7{QQ8FsZ@V*9!N>6=LRi+Fo;g_AwO~geo z#7myu!Hk!jeJq-qJ-g%1XG*>}s@W4(5|)}Fn|f$Zj;!DC)AWnpn(#0{`|ugT++uk< z>r7RA-a>WXd)_glFJyFoq3v-NHDHQ!P_ZgRu9yFam3NfFpI|j1e`YmzS{{8-@+Iss zx>}5bmS=m@Gt=|d&RnC>HH0Dix0BiD+sB4{WxHEYJv0*F1mWvn@RLLq=B*9zP^ph%1JsiR$}iw_NVc1(MqfUGeE%f#s!kV zA}uZb{Bc$n2+NW>y)=F=>R2Q@yr-DD! zJFfc&ZS++jccHDsslGPtmclmA*Q~xcMCrQgUA*YT9K3J6)TC}GHmh~og{}UPZOj9K z{Yvk%-G`cfW`D#$wN5PzJ&B3~uG>pFqP@AsWP4uy-6trE45UB;>Iee_nsDknI;49w zj%s+@sK0XXmCYp1au1uCnMd2O;787BkD>|V^7Ut9giFy;PkuS@h?nH0AnWsgJGDkC z63AIM)Ud2_%dA71GOeuM(##@-2Ijc0_Q%q_%f$8bfn1+*=HR-OX!-8@#7NP$Xuglt ziUe{SK@Z`d^&%%O)Yf$E^$O|>>kA9E+8&0 zmXRj2`NJM-lS)S0FJp zRm-A-ebq_;0{KJQvnI&F&pTV;RjWslz8IBgP6uLmu|Kh*M8mgREm6aBe$U;?atPYq(hH14f%FF|V+5%KzhXi75DtD8Fl6l{C2H|vx%Z5qVmVFdm z<9j%p;|lQ~f?n{gSk5vbP{D2oi}NO2rXB|!KQwRaiX96h%JT~U=0q?EE`EYx9ufKn zQ6chYZH{3z4ic*VeVTq+`TM*Ps+s5f7Blb1gQ)g55^W;=uDGkhi@RagwoN;U#go0r z?p4Qq@fe2&5U5Q2@zUj?Gs{Lbo;uC6z9OSV2q&Pkb{ zhdkwMZXOnF5~}I3_bzFaDB>o6cC;D{0uB02cl9I|MtsZMKl-CEz2VE+C7GT)yCQOLn!BPi~ zRiR;n;_kG9!(0P9yWe(uII3d^{|>>&lwRzWi|FxJprAc}*n(}CV#m|~DwOX2)htTBO$fNn|t zxDI*4M&6$s@Ump3;HJme`^@M0tv^w+pMB@Q3MPpPw)rTgqPz}S(B`U zlD61jcP%WcnWTvJt54;cZ{=vBKO@^k>R$a)A_i9#Q zCfX1r5Eso$4O0!8Xe`Qa1M))n!t2+RTgIb~2h_?z2BJ9>wf>9ip{y$y_IK{J!G=w& z%hT1#ovdSmE?uRx42p#+Mpg~*kJu2(_CN+m9{r)ftS?%?x!5+qZ#(c&zs*<`=2e>e{LCCIXsp zxblM6xM3Kbg?=yDdlslZ5n$5uAztqa-~aNtSrpAjs{>;*Gc$H11?uSz?uqsa$U+NG z{)9R~qw;?kptTJOGlxejgGmV8^0^H@a12qgS{hT$t8KcgPpUx=f6mzwLi6S+3;B=y z59xAbo4RQD=K&cu4l-IJhL(=krwFo|#zvN(`qx4EhJoJGdnE5OJ=c1{Y zrS|2y6J$|QAG6aD;-~8rq+%avrB~pZ$U(Hmr-P#Z8vKI$&o#Jx{2oa# zEu2>Y`@>XQx(n3^oerAFN1mCp7Nbz1b$S*SJPCE#GV4Ppm$EPsJFW6H2Ez+cYwz;4 z!e$LXoG_!g2gU3wEuCrqZ~`1{FK1^_1@JmHAwl-$BNd1y!y}b_XCD8EQ!2haMaWYS zN2PkY)$hiNmllKKhIyZ?)W~0=6oMSRfuAhqEBoF}7q)}4L*;jQPqY<{OGF_JC+8YV z@9Qm+XD&BF2S`69e=KaG#jQT1;nKO*n$hIEDnJbJ@xl;dx{|#e$0G}Z*!U(i>xO4; zMgS^-bzLetqvEal*vxC;px#jU)syC963AnecinK}b2MjXEG0VGc<_D#PyySC0G17c z_?d;W#U<8Fh>+K5F{7wg&;cs=WpRC`qz68(_*DHO*0QV^r@#S z$lH;|x9tIRF)}d`?@TIA;>g5)+@jC7Y6Wqyv1tpZUCOqsz=vJsGZp^eHcbb7 ze!DbX6zx!NyP%%uX?>JQvGwdiAxJ$qNG-KPvWl19%zI#P9FNcCNsX?;*yiGg&IK2h zowYFEiNn=S2pJk~EkEQlp$-LBVMqRaL5(*i4r(#$$|J}svS=fGZbKw|l$XUk z+MZ`Il#Q)q*G@TQ70z+#w#x13&Rtr$P^{i!V-emwAOC_FkC_W8a*DEH*N=tC6^OB8 z2o7Xf%}$Hgw>DhFgBWxMTY`5ZzKPWk1G42}VP?@}a6K z_Jay4F0d3+volk(1^At(z84An2Kh!+Di}n0Ij!U+I(@Ox9SdRWFkw?h`2dEuu=}oY zWmOgX&4_H1D=RB2UiWW^nCj{3hS(}CHFzE!zv+s)0?|m33b-Zu_Ip7=uaoC0gc1UJ z5B2BUj$lEzhNaACg;p?HF<^?lW=WBHPXI!V_)&7&By_%CDNA5`R+~7X5=oS9WnX^1 zIB`PU#K70r1mZvZD<5JONs72g#_iOPJ;KlMwK)tF!bJ>&+!qjd;`vZSsB2t=sBb|^ z2Nf6ZnqC>nO%gB6<}cz>}| z%(w;6`YY`YT@vs|Dvug98fVPv1)TH={N*|BQ(^>26cHrz+MH7yxMJZ?L=kIyUkEa+ zDm>n4(K*^U7w*j+#n1%Iks=7A``A4OQd&;?I1wBUprIt;V`k|SZ-|EY*V)NQ61KE! z!Dn-5rOk+W(B?{n3<05z=nzA@PSIXDZV#s;4Sw`Z!B++^bI_@Xox#1Q#R0UO0*9sE zFA_O5GHOR;+bT619^{(y1J~kP>kt!aLow|3}KV#StP~*Z(K5)GO&qJokq{Y%jn=F zX_8!Qy;`i>k0tK1&uRzT!Yt3wa4N*ZLzz{Xnp)S*v#Q-ThYSzx2j^Zg2Y9u2xb3HY z#(^PdCP&DHYwbyx^{>+aoo5yylY>9HT1SNlXMlT-ep^t!b852SNTd!a;>VM_*T(KZ*nq?q7#M9c zttwV-kUFC(nc%_td^y37*iFFlmQU#P`DQBnb2Zd^C8aj#3xYWq+RJPSc{G|T@rP|DrBmlAp4pef!>F|rgs}Coy8Lu~4MSAoG zXkxs<0T1-X#j&SNx>Jz=Nm`R8;sS@}edAJ9Z!TksMH``R&MCuIn2*(x@fP1e6WSg0 zEo1}?zzvGn%T__n#nTmX$IV${^(3Rfre0~O&kHhE?+Apr??fdfeHQZilld4$uY9S3 zVj9ii`r$UnJg;m0u02zS-VvcTJN}zU?zh~Z9Lc@gGDEk*NLpXq4+7Na@7dW`wQ|(2 zP*X*MQq?10Twjai?N1qit4LbED$%3G`4w!B!+y9vl4&501%Idi);gcqKFZU9Ts6b^ znQ80?LMX)~C876okmK2 zE4^W--g)=#Bh_|a`nT6Xl|VX>;n@S}D3_GxDoJ%c4ouP-=Je!b;m^-Es`K)P^{DUG z8E%ko|Ci&|lfbpVwVnP|#}R&?sJ-lS5or!o-OHhFL5v z{W(gs21bMoK)2s23BU+V$|fsNFKj3~#|X9wLNLc2snhcA_P?*Jm1xr+`K2~|7KAB- zETWfOXVjf^Czc-MN8&Lbv(PNes&Ju$#WV4b)~*bp+MG2TP3V4I^jf`$owI4!`P({5 zkp-P~`Tb+x^Kp8;dvf=3j3Ed4RF*?rA#sJgCH)>mVkYRzk$Yn9#*nW;wxttl1x|I( zax&4~!jZc&Uq)o~MM`4WFzNo-n)m2JNt(w(Xn0(=pkfK z5jXtT`mdOIl_0}kIw;!Dq~Nf7L2JF9S0Jj<^~}v?j@l|fI*(+5ih7#^5wrtH!7dDm z*ympTv?_yiojuR$}?Au%xaRWfBBCIufPubGoqL`2;Z<7mulJ zJ|xXUUIGzyKDI1j|3$3|9}u~9?PkkkqLzRMSE^UB_YCH=UK_YQN~raDu$n0%^W#=V{YP+4JVxRjYe*y7Uu=OFEOTXcD` z5gqMXFc#5xP*&*|ic|AL78MAodauaJLYiG+(XdKPa$yMp1T)axGS6MUfYm#DSMyZs zzDBx&UBl@QB;3sS#iXa+)!&TR+YO{I)HizBV9q#aN=Vt6SNe7sRuXe{^B(@b0BU&6*X%5#8BE0} zO@7B@(w162rOJBh*3vTEc;j^V>b;qxU(s;Xm$#J907jj$S*toUVf)I@n|v66>b3=7 z>S9J6)<1SL;+9`UeUWXiUL4&{t>bdK?T(&Xx@9P%Z>s#6m$97R1ZmCUhhJdLx$SHg z&;pV2-aY9g&C_z-5JyzvR(`)`IXWCdicGw`r=@s`sMD)IshwbVHi2FqYgzKH zi_pM}1wKgBSWptH){vyt;4iOupjgWHT&xMTNbYmc!GKzFfHvc0z51f~>u7)k_MnE9 zaYqL9g==Nu$A6;iVLctAw3B(Oji6~i=5?##}Z2(*|e9Z@W8HW6cI|xnMxgMdcA+*Iqhh3(qOBU#|#f> zar8#bBA0;G7qYgeFh#9A!CU^B1i|J7cfWM%uc@RhPAtp&_=ROkU{t(D5C%H7h*~3P zj*}KM5j;V#LhrNQbR7=VwRHHowU2qdwGd+x;B@5{wFAu zyp;nQD|2;Er&7Lxr+IpUa?bJTnHkm?CH(@3z*W=!6zQX%pk1aFAr9{Fyx^IYN z`>LZSi+&XXxSRz(6e83x?wy^T&ON8(q6q}O=Z)Wc3!1;j!u>7B?P;RAqTJ4o3+RB^ zb0{LLMYi8}tahrUFqD{nE&NRo9@ADz>c;Uc3DK$FFd=7{@(f+j#H7kMWs@OLqpDYd12uFj141#GskDs{6Jhdw5#lT`?1 zzH?c!qpdfJWw6`WMKR;n#>kb@jJQZ9z*>tJK*ieur){R8<&^=j%MZx-OM!-_XF~g* z?EgVwOhKWOK&ZGdJ;%)mYaomB=B<#Rm(tgVlEk-K0%qbi9==9_0-LsxOtmUt0WS5^ z==f^JjbTvanI!%Dhi}GjdR`h?L&s&f9-qJ0C}ZATt}U7RCwtbd+c{Ci8{-7JhZG4| zRdDvOP>WFheA27;n$l5V>men4hnwkmA;zXscoM6*)B444w9EJcs@23mnQk1j-|!6l zcgnexWbU$YhrImjCrq!iQDMpR2C4eZ>BP?UT()Q;%YT|`DSLX)X2inGx7cD%3!SQ| z7*p!&@e>y-HsoAXWX!Pq#THSiRE4c^9?+~qaQo1NkUpQ9JLgN(?vr<%_rLd{m~?*C zPc%QqBW>KNJ?{|QB_e_6PaVK>>|@nof&ma>HM&cwL(id9rcY(O(W7sf_W!9e@(C_O z)u)FGlG9{1u2$zcT1I5D!n4B3Yav@RG2sp(G3k~k7=C z%Ur%X<&VSPp)cDa(!@ed(ZZfQ%GE7`I%uA5H21&talE~&Hj@u=`KMsE*_#M2-3h014FMg|DLO3;7#bFgHk$J zV9J{lAI^m8>p_zY+4J7q+q1MgJ-{mu$5Ejts?~cF*3P1Cn;tLcaUmDq797PqJ}7=) z8%w2<^Dy$Z>2kNseSrsRFg+ivBTVmln_Yvd9IQcs;n1$J9kIGW^{Bv_TH|xy*;Zb` zxC~pyvX3}{x_N@!X#OZ^amH>X(|6*uwe{dPuWyK&u(UfD<)}!#Y>Me~(URDD*tBm4 z7VclZXo6$c4o8gp0IHWl$78DsS6P)(V|tzKl9alPupqCIG(bp`jNn^Sm0MTjK+7> zZe}(guG>^Qd#ucS^E7E#OJos7o>KvN@e|pFOqr~-gyiR zxpE$Ig7ZXnr?%b-J=IaA2JtoH=|llDPx|JfUGwI7HRZ%bX0r_cBOXlnO0r-l*;5c1 zwPpFkZcjseJ>-RSWUrt57+x%^teRx^GCs5dO#nY+H=-bPAkh8tyU_pfxL^1=9FijM z?bfZL2y&EqtBbeCw=|WNm+umrku_9U4sG)D^P{FGnA2B4<3^mG-l$xqW%`72L9U)=0RTy7H3j>32{ELF%PW%HtHU+vw8)BbV zoxXsFSyRJPp4o_>O@><}u^zpd*}0!pO-=Kq;v-~hA0Pv33@!(X)5?C7Ns4GTlU-(G zPSVcM_U@Lw`$qLm3&v>J6KmX5`1R-2BL~HvZzBc>?DkYeo#(PQ4tweUfnhA1oM~W8 zan29tyE6SqS$UA@Uh8WZEd79vEO>Zk#zwB^-Hq|RWf_2>Ic|{Mt$Z1DE~op&=QRd( zFx_lIH|+XDcBrc7Qy%VO50O4%l`D;LGg^&nyObY64<9?Utr@yE98~Z?u7JGHEe{uX5%{5SzoeYKAt* z#IMbat%6~m987hFXVq;za&IwK=N7QlzHAQpV2A%S%``bQ*qX-glJF=LbGkEwgkPRa zLchs*9*Wyvz47z!K(geJ`x~?dwd;}d&H=z;(>@XK4iAXA0lfc}(HlDUR2 ziKQWgglqU4zcW1YfmQE~GJ}Ag-9U*D2G@ zeTwi+JjDsIDf}}Hz#Di+=DZD`{KWjif?}gGXx~-cr5# zCG4%?lYI+opnb-GT@1Holhw&zKyZX%1{~nd$uaER#&ChY!>?Lf{+BS+CDayI=v`H< zWztE=AZXeSE=<_#@5(xWsH9&POUQUW??Fa@!;Zf{tAt^?_k>($l`+D zT~*RMd4BgYQ-WP+%y_0u*&er4_+FfXCTT16Ah&^@3ZX9CKldu)3Lh3eeN5|0&#qtDc8w?UgVFmf0!1Dl zU1tG&=b8RNn}MOedqLmYy4;(NQpW-P@#v~-X(QnI3Hq$bB6}V{41?1{LP9J>4OA7x z#l+;2pOL=Bk>uh&f!z-7e`J+r1HEOlSNoH;k_+sVWAi@eKuLrD+&dhs-)pkj+O)18 z>T92MN6vnEf_6vxx`%36MC@lylYSp_rF@4IEHtQF9U*b3e{C=@Dz3plW|#O|`W59q z-sxIYgR7@;{2)8JU#c?`=HK!Fa`*1t`~3U^?yjR>b0v)HT%IKO3G(x+0N#j3E?NhS zb=)IcI%&Zv6==F27X4VZR1zvU_VSl`rXTcjLvtuMIkeVtC`}K3K9-&~WO3ugxMzBg zc^%~+T;K|Bzyy{~YQ?B4#_S)mBpBrDx8T?i73hjhu5VHh9+zQ!`!kYVo4f^{wn$BR z;m1imZPC&X~_*bk$me)UgmfR zEhQIysV6Bw&2{)y?!3n1VA1C5z_VEpRmTA3f)PqdlHHHavY)Qp&~!3M)0429KIZ0$ zGB&Ec*sYg6{rye{Hi><|m}Y11u+*p#z3iuYwW%+zUij_s?7OX+H}p#%0P_ z{CjSJuugn*E_v5m_rLE$u{#caMu?>-S!OibP^Axjw$0M|SK3%pgO7vGsq1onl&Nbn z!cNPiEMd{VybLB?BK-@tuAT5Vmfy&H_O#qEXI#Z!6?LMsH8xBF*nJG7t7BB~eL@q= za=kz>Ao$3a_9si0nqmZSQ2HaA@>EqeggvlRZ?*+2=PS<`3s?T=+#h2l5~gPxn=~K8 z(czZ0-uN;5d1~YEDgz1?yhW0r^|`u6N3J`ppXM*nmh#u2Z4q5&9tVtl53Xq(<1TG< ziw*pSTGe5zMq7IZVHcA{<=ceBW>j%;aX&!r)0$M{^j93<+A_;|2xU$#_vV-F-o3z*hm4zCq0aydBxQ?&z`+B^t$_0 zbxi^{`7x*Ks1!*_0Q!LoDNepbRj^=p1m_elP1+6|{0^clEefcsQ%mq^p3NEuqk3I88p7;)`M^V6N2u`Wy`ykm%DSfyQ=eRazyi;jZkv zrl0M;4^`r7F4u3#ovurm5G}k?X%jB8lG+ZLm#><>P2+QA{%FXHFWo(Vul4hTYqiII zpb6toWKq4%9mxF19x}ksqv#I#JxR;*`!Ic>+FQ7Nefc|=SQZHJ3=vm#+!ZO3DWcY` zlKR2J1DAzAwxCZ+UP(!(pdY$Vz3_7-#xni6Z*B~WtQ$&(2>7+n5G(P^Fb^Tu&EHvD ztc=%NSbbdxSpAM^@C*J@mqQH!ohv;Qe?Z}UU0K)lxjW5#?VyI0Ax5DNo+jgXx^2)1 zdb^16n_7x;3s7G#_q&L2e{pa?i-d`}+v@yi?D zGH~aAPBSe<3b*~uTNwOz$VawM5u^wR+oSz9WFujlK)w3LK5rN`W`zM}Hk6jo>ST0f z{d%)BQ05fGj<2`1g_$0c)un7WOmM6k0h_ z@Ioau^%N-@0Ak7J;1_nY1rG6i1|I;gdZ~IQ7H#OPnJ7rmUWUTFCK1haC*G8^JFoO$ z96Tgw(QaxOCWv&leP2D`;qU|gGX=J@P0XzXlj!SpM{7*BP>EP;me}EXYdEHXeX1jE zDIbDH49z@ecrA!{9ZU0JZ_4wI_qz&j!oeJV04_QQmZ)BN9DF<0)NTLJGw|!TyJFBB zNck_6<8Q{n+IpmebPF&``2s6Q%UxYvt#faMt=%)yl>l}>wrtzn;^P|nWt~LW1`XU^ zNx{H`NZ(NA=H0tk5KbV@b&gcE-q7z7pgzu|`3YNUOP<@$($u~-%h2c05_xv>+%1Xt zs?r`>S1tZ%?9-c{Ii_7nUV9Q7;wN>&i^ilt#~#;V8U0yqQih%Ym}WwR1Uuw`y}f`o z+RcO{n0oab654!Es+hk7)A|N`~5UpmUZa4x( z(VDgHRoSqpuuB;Si`=EPx|c%Qy1JVjw$lGfat?({@{(U55a4dWQfcjjo4CTZfP8fO z${ka=&hk&CxV9TsZW^^QzDVq8%}F2$RYqOiZC_tst9S22Rx#7pqJiV%CB>}j>MHK< zVKrB2O$T<93K%ccTPi3l5xL_o(_K|rx$dOTz?lv9y#=qaaaCOygq(OG^wtX$rwPtV9XA7@ZbEWlG*w66Sl*FG8H zn6NjT%I{2i6JzSY!`B5P-8!^BldnqJp?(l5DUC^!^Q46^lOuFj3?8&Y_@>(-+i!p* z>qti)%Dt$mso|u3@BYRX=q^|vqE1iUATLCu@Vi7Kfq?PT3>^CFxt7X|zI!)ut#~n1vy|xyYmWik0XP~G}Jyf-_$ST ze{#s4Oxy$R^uG@9+|>_w(icJSm2dxFAOGn+t?x=bA9T{`J0pzS(!jnjGD;qoh~3#D z%l3i3sNGdIHG|}2f!?wwoN7_#C)42XGIO)G0Fo+2pX7#dEpgs=#2gjb4+>>_`~`Aw zWIP0q&l(#WJJ&5892`_LNf*(euA>K41%CkIO383?8pE_iV|b@NSsV6><~zLdio8}vI#_Wy}%}$nLBiS^iU0fnP$j9^6szpz9uD4ya_O-7)6IZ^ltj=@) zo}8SS#({!A@uMx#Yp;5G6B1sT#$!C{Cf`1bV@tGUx$zaG#nYvoiRtdCLmbBYB_^|scEfj*^j_|!>7%x#L@atv#incIY_YRy=Vj_q zvMQu#`K_IMLA$dkYC~WP4!Bc?P&uRqzDcE#krBUAnKb6(nuQizCb1;c=f#hxS{^|` z$?5x#K4bK&m#M34CP9r6MiN2iDqf?AP44~oyPx*(^w**5T)uv?uan+<@S%$5D+`hN z(_qNAf+(Q4x2hE3y9;f2D;IBEm;mP3XY2oqyY~)?YHQv`ha?CJ7!Z`KNK}F-NrD7H zktjJMl5@^E2LTn43<@YY3rHMt4k7}QC1=SQX1<dibdy3->8`!hf z+P%7abwB-dnr4s&uU?#7>3}S+l+e>+)u*KazG8~X%9--YS&Gk){Du{whm`Xl_g`A{$#IsrjQ;Y)l5Y3heWWN)B5pT!M*fRFRUgRJ|3mhG=qrZQhqM%-4U8kB!|6kSoj@#Mez* z!L!Arp1P3ZZawSGBqB0LLMk;ZG<-h$d3yZS-mu{LSwuss{Tkm)-_ZbeAr%J^EqubP zTBv=Ij%L-mW`k$W3Cv`8z00O9;tA}If(pTt_ac90@Xn4sGz(yUMU#C^iO%pgF0G)e zLg&C9fWwn7G6%l1Oo%z}zw*bI5;9|ApB2VPazI&V(Hc6Z#f42x=~6v*zJ%Ewkc|xn zjM2>*PmBb+%A8HIlFEZUSJSq`gZfxmvQjff%mf@DYF>TeA1&)7A%PB;qGU!vS6j;wfeNyoCUOj3zfJnnUccCy-F^3AcAAtKn?SI)uIw8B5(va)B1{yv8e_58^G-X2BwWR*h}48z+J3Z^d7tLv&3 zsupN2oLW5z5?IWwt<{c^_khjMxa7;Kiv;3SM1UU`74e$=Tji$=R|i@=KAJ|DCP}}V z3WsNlpt8l;6~9*hKrK*?iGlK6`K|z0Ixx^59v*7dk4BK*)8+6y7&U=*M85!(qom8g z1O3-zi93KXyQzFcH?M{IMvK)l*fm2z9^1DWSSwPnZu|+^MMWd?5mOLX%lb7*hI#Nn{&*7!jDf5wJ~b_8@>!kq z-@&Vxu~k=FL8$+#tgd!{c66UXZV&kr>*#OIrn6T@?PmR{Iz5Ydz;B9lV-1aEyB$d$qI1u?aa6ajnJBM1h>VeJf z5R&$V=8!pu5XoMNtz@p(l3hze+b!3A*SK&1QRViSMbS+qc8H(dOS4#j=$JT7nR^}e zZBkG)gwUBH{vl_a>LaDX`ddjfo z`Q`DDkM~_ktX6c2=GP;1@MX$3Kh$+}B3D<J3j$U0uYB-3K(^IULkt#>giMRV4(0**y`pu0o9qan;xHJxHA5aGYc5`i?Gcs@x zTW7odr}mVj^g6$seq}4R-Jc+|!&UD&brkq@H%UHM+Euv@<;*{TmX1Prka>rY&=y)A zK}6T(Xltg!a8KY?r1_2`0h8g?++D?bH=2i}BvA&d0dA~8(_t&L_LPXV0h?D~Oin-< zzG1-y3CWIs*cpHI-QRCjoC~XYcKt$!%ZC#V(ZY7KEtyJJUtSCn`wso&-#&H;RYbD=AvL9CkYzW*jn4Z#p~ zHNpr8afhH1LGVm2@nNU^ShH2-DZ$j-V>-T zrg@IAQLC(_aCG767d6?CemQBv&1>HkVl^jjoNZsNf+zWW>2ufar&dS8%KA=r+Vu*f zgZ0rd5b-Q8@0F{4X(DM`ym?M0srGN>a+Nj_ZxmJYwvwUJ+C zJb&%ZGFAXRU)(1qT@lOQoR=th?$IB4!x6$2b-eTlDd&UG|0VxR?U&v+rjdPdWz!Et z4TuK;#}JnGiF&9$XHhXyC&OP!Z0>ueNmPE*l${9-`?kC`UCK(WvCN+j(o+*nP$nS$;DsLce%d3Gt;cd zW%jZuS_gv8!|x|&FBSW|;O1wJzR7(d&2#5@7sn1~$fCUPaSO#o8gAoD02wRzW%Z+H zP5ZAD{ZOcP>3{-qHk9d#k$BY={RE0HPUdbqrG)fnT@TEXrkkw=Mu(9_MI;DEF8Oar zq#mzNPN1}LPrM%-mnb$?Ha3P%PfmVDp%yfa*{7R6z7Zt5J!)$EH3RwNY_{fU#EljE z@2V{8Uw^u&fiLBrYp~=*Gt)col(eOxe|kg*lhr?z(`(iK&FbBm95)Dy>-0_C)!aK}kF@0x92x z3w39U0asmVseQ+skdP4GfbfvpqpSD2M$0YYwtr)M6SRqzH&9OyBOvyV@HHF!`Wc8| z!>sZEeT`nuh(;g)!-Vk7&1Jp2YE6EK{&V&8Eb!trTVPd~vtydFAY5=LQy8N!6X=MP z%qT2>t{akDz+2-aPtdRvkuR*EqH)nW2wQ|}^U{FnbqKrjZ;}Q%vkIkcgtZz}$6={k z;ykfFwS><{wTqyxAd2-HvFGemD)6fMr`^}?12%I+M@@k~{uC(`G)x0k6D$8cC%0{H zb@%)DT*0s1@u>X+ErEux0$JDY$5d;{`H@n}J-p@g&ES}BjBfK%kk~ibDVBW6pmqCQ zWq0AD&qBH%Or|O_2C}!+c^0&SrY++Z9yw4yrIbh_ym*NIMOYvt1}A@ZNuT~?{(y_u z7#ljxNYBm=Y2DBt4?TFVHwhbj%$IHMkteDYA&e^MaVGxIPziF_1u2Ca2RPwm}518-soIHZQkHN>JsH6hx->* zR}1L;z2=6T{%)6HvG8}Sy!%Koa{!X(}ZW72Tn;e>3j8?5I#dgCt|rS!}S zYxcC3a@WV`>`eYce}qh>)%aJ9x-1)*#5=Faa4IU54Ig?Hf{IHGJ6*u3p=n`}_h459 zaVX|D9ZDj~D;Gv3>`4J+Qquc18h~~i{_(@NIfTSR^{dJJo5UnSWJ6oI2W)wl6KcDKKyo5AnEqq+##DiV@yP*|7OZ^ES)$qdQ z=VaDF{*Htztn1+W_DelX`DQ-E+Re5wIX{&2o)n_0wtV?&YHB2-eJOPK&&Y&v7X%jX zoY|ufqdnKry38>Bc{36@ZQS;Lc${X)zCeP>?l_Kq2if&&PUYNm`uy1UHgSOuy)7g^ zz{xRo{Br}x>guZF0QIrlKo)MZ?KERd`CM&f*VjwbI z{7PKa;hg*KaN5xuMZfI4lz{0#8-Gk=t(KhYC5`K2V#ds5u$Z5hsfsMD)^nS~=w%1BovdxwC$Fk=^Y3DLwUQ1fj zXJ3V##vabmv^^1Q$$RNj^Bv8kwtR|iU@p!$ytTB1M24ZRoYrWKJO4BE<_kJQUelJ% z!Iz((dO_VMVs%AO(U=dcU$8;*&_59CS=g3vr#^$<<7Dy$&@YOz`!Y zmzk9B`3>(FA<0Hg^Iyz>U;ft^z|VeVfNsz9*;6{2#OUuM(BBAK20l~C$XkyXwg4tD zQi0=ks$`|51o2miW1w@-!fAkcYHt{?pZQGy+9vCkRiQOJ+U-Pmkl*{5OQ)Xn9!+lzA2Kc zSoPOA>`J1x6mQdvZR4Ax%sXQ@i9=$2^z_jtg>O$pVztMauwT=6sA<6(eO++SDl01( zufMD*EML%_RR#UOhsVZNHTcvXN$}~|4LDMl1(Z7h(_xM zZ%R}YF)$qUxyE!mJzid2eeh8$G>fp+Oh>=Cfb})nq%98>)?s`O&YR$r0{Yf*f;zeWGL@islUmPX`^@Us;c55u>ZxGYUUXO_dJcjC?O+sMzVrv%2PH%`FN3=r z7cj%ik5m4rIK4kWq8IVAgm=(K{_7CEM9)xu;YGZttEmpar3x7!FsI% z$5t3~vNa&iqqsN)!)cLlB8>7wSoh#f6~Ds4DCkNTzAJPpV~Y|xL|jnjNm3aePADZ` z)Jf}&fX{!wWnAsNp;=c|HF|i*1ma4Sx6XHV#D7?=qv!p9pv6kf5~{u_TH-Hmy!b*| z3%@y8YcroWJ$Y|1%xZE3i{ja(#s+=TgC-D$hq3a0h}B5#%-a=scK8I96+y5~tzenl zKg-Z=uST)xz7xqz_I_<+W#uHO?RH;d5<=`kg<+3>qjSjI(L|kNF>43lV!|M0H+SctCp@Q%OMt&kp<5SBWwtCb|`@Y0e$ zmbLxRvDVicOz5N>DSfD-no|f`?)bl2&frwI0i*ULf_(qaQ$7EuDWU&Qe($aoq7aPk z8a!BWw?6G0>UDuR`J7e( zdH=fQ1e!ap@cz>r-Fsqhb1@}&EQYs97p}f(nkm-R(Xl!!JZU3o8K>LC#e^*vp0M9M z{_`t`_o-V#(5+k*s|?EXlpbh?PQ21^fruRMY%4fqC)Z3yTOCjfq`*aK> z-lHoH$XQfclH)1T2qEmc^{E6a=Y}`l6@R~@KHIH7qViq6OMQziNyZOvJwoXb;9p+M z5e!O)NE|3S?i0Zg5(~TH-|)Gl=ho0uDJ#NDT$rY{++p(iq-N)}~{KP$=+ z=N%LG#h&8*TH!3Sq=204Hdh)K%QsAhilp?16?Ox|Mf2U1bWD%9L-cm6i6Tj*+Ycy`}bFk z7-NdSh{cJMC{Q#X8|SGOlnP$$d9)l>W7?s-;qzIciG%Z-PqKMZt@gGtn}xOY!MVVt zkml;4QIc2^|NH}~nd7B2mv8qC&U4(iV-h^MJ`j#WLi{wN3XSDdiM1mT7*>*o{H`sXdw~=o@t?DknSJR`5r8Ma8W<#JSR{ zhlZyS({6Pl;rqO>8}9aF$ID-d;AUjqargN!ttBljeYFCM>~FSyD)QcmZYz$S->HxB zgHg1SoFC%Xr6yLJ^#t28U^^~DpSQ0($(pUVZY{uR_T0(+yJ)7sT3Y>kD6Gst*GA-c zj8BOxvvrDIf z2O?yQ2R_AB1L#MO9=XfPMlS5U7y2ueGxq7_v+;$*%-(t1T$aG_ zuV2fb6*|g!qn*}|9pZ+D(c`TV-_q4iuR+rDu>}U!SU@1j71{8_pSL_4UF>$Ktk_+3D%&)#uHGL7!c# zwc!GUz0b9tz_bG{Zjq5*GZ;wLFBmuEs(v1BjEBI;kG;|4_(5=iHGV*t%^J{5Vd&Tq)LnHU+HL&D8<{+*QI`167( zeG7B*y|y;V5tr{@Uc{MW5X1}CPy}`ld&Z{uKlXkwTjAFC@#GcyS9x?#wF-29?MYDua z*R$>RfvKq|7~$fVGib~cC`RAk72~p}z&x*cJd0SK38C#9ua=b(M(oT+3QYSIfBr0b zZ4+;{d8)t}$fE%`{|ZP9>o@7` zNz=#-eklGY_$)D94tp($Q^*TuVj{Qo))CaRb<-DT>m<(D{WoDcc5{)u=5W}L`Y=}k z4=+Ox3eZB5@u2^=jH{dg=808WPln&us%WU~owq={JV3Ju;muBYZ1!ezrxe@GNpeJV zhmJVCsQe4b^#@Zk5AN$xZ5OJS7<43kj#=28sJa#{f^sd4u$u(-$kdUt>pRb4j*v+U zfP^+RXn76f>rrtWY1q?s9xl4#dIIq9e#2WjIX|3$3}3AZOS^^q5umNL+pIf;^ugdE zgaiAcCZYX!Vd~x9rFyz(guo*_Y0p%_)Ace<6O$~0`mVhi4dB~##!L)u=L%WV@&c{O zG1R^5n;xB#@BGe4eEHs?AvkYfy#!BAkca_x*DqSP`74534LJ4QcK{llbI^c8^5>lt zP3QRDb-Q2pgda|L+P9oU`!P%B9LJ8Y*ntD%+P zQxd*|94S7|to{#A!ifk0S1(QFZ;wXIIC-aBGZ;_QWiYZN!AGU~02i|iGq%5f)6Dz% zTT1$z^Bj&wvT!#1`4koIl`2zcCC&2_wO-cmULTd*=ff}S2hWf`WkM%?-J_I)1q91>?XBMDXUPIGQ#H^FEJ?%Gx{R^hv8GEb`86V$GH9OuJ`njW=2qc+z zg|9D|(Lb4G*#d<&*~!D8HM}~M=fojQ)oa!3#GoKU|JJ+T%*~tbggLH);c;=t2!TGd z7h|7Vs;wnve%7NTw!=TRX^e94#8vlP7I=isBKc~bgrQPI`ROF^tt;y3MT2&MyrICY z)ybVUN*mMkdcaEncgcl6MdKMcpJ0Z1-)%on!M={b`4mFy{d{Mk~3Vgq>ZLgi zWKBgfxVi%uhE~($(>Ggl%JFGj5eNug#j1yZ--557d^@+GV1ehYA1qg0MaA&QV9J95 z7<=9W|CAiqvtA(jZJW8&`3lDKSA6UmO+K$@8TR&`Wl10ycW#mRhW^s0**8M4%iKN# za!KMRXO}LYCfYatC!Uc$p+kpp$V314mH(ar{zqR~AcO=s$F<`^DS_NyN{@2$)l^n< zZmA4geBC!hFqRg(@2}Qwu4B{+DD53xlASb&^%ZHBOBdzkIh+Tuz~92b6I?UjG!fip z@X8ex{UEchH!^q;TyprO*XS3&(SKuAvH>!Y?4Q;w1xB;pec!yUq-3DdNm;|h#6*nX zK!B8&hi4T!lSrDG8|Z;s}D&h+oTS^?Nr$N!NqK zHhspizJrt9jwgQ%@|#3ItyEG6j!u6!2zoiWS08hv~_1=ZsA_ zQtEJUtEEQ)mls(7OO5;lV(6^P4e2D0jvfB z7{{LqOOC$8+X6`f>AC?^J*d`n(;#=|*Qf+NE*scQ#-^$dGA4I_?BjpTV%sKUwZV3` zAu+#Ri-z2jClYaQr*LZ*+447y_>7PNgR zx^?ro;QJpNjF=sK2pU*W=~HFoqOX>BO11gIQ?=&!CR=!RyB^e_QTE z3%)-ryKWtHHE(MWPI}TB>4LFYSLZEgvRBVJqETIEf@meqk%2Wu{h~fZs1@C<$m&wh zlFJ>+>u5)>G<(99|I0vL^Cqr0p55E7JDf_|H#68}F=eyHBR$?b1w$8{e4<-vonnIZ zEET&990fITpTd7e7A#gBAObvATCP%oL98ZDt;oV#Py#QEGR}tRKkx zD8{CkaY`cUx7#Qm?Gh+KO%EJ%7x&FnnI8UQ{M6Uh*B^eBgoZg_+$zTINcy*0)G!xMva1s%JO7x`4>dBsv?>7g(h^iykb*hz7lV4cfrEn`O#|?Cubj>kd07&_j zK#XSuHcPF!DBhS}-Ve(c%%on3-e)jMF-vUSO8USE>_|5Dhxfn!1){A{E!D!XpuV2Q zAp8e_&Gx|~Xx^>&2K;~y%b?)SQftV2^BFaW6ePy&G8hH@K(|NJ@?vL5pIb9l;8ZRa zF>3M3i=2NmS?ej-c#?XWH_JnZ#LrA5$_Hz;Y5ugH3A;G{FL*H|f8YTE4Nezk2#PLt zqBF3Ru@+MG4?!3jPY0I8u5V@R`fKJpnuIu7UJJ#b|Wz?Ui3RH0i6)rO*v&Kr36Q3d z_h7iTjsJTftUwYbVC-Br>Ho8Q_kZsD@$3KQsFrGIR;4`QgtX>sh&3+$8w3Au#5-}^=xK)Hw~C5tO;vVG@CnQuVR@BzX!~}f`zjx(yT4Nop{~AqRnC_|e1P^QuE|t^>Vbfv8s3Xx=oBz806o~reImETKQq?IGjW)^WdNJpsaL#5V5}-i~VpD#|)K8y%DZdPVm(Ab5`2Y~vx_ zLy>Qgix}Vboqqud;yilhWlYFJEk@~lQw=hg_i4{JhdhFo9ZD`6zF0xXOqB@Cc9|f; z{|Ta5h*1-sUlyT-l*Jp`GKf(L{$iHX-WnJhiY4{0y8Jx=X55(%$4*J(y7zF1JS2Fl zjbAD0({e^DGL4d86sB-@cYo8lRaF=VF{|#3bUb+p+41z?Y zBC0<9Ilfd7Lax2ccdSb~k0Sq$#;-xg%q$_%-?xv`-VCAip!OPW!yAtCmhZeVY=a{U zk-T|@u5zg+yJDMYF@;VIvuBOQckATdz;orH2VH!W?^w9-TFCjP(?NhU^_&o{a$jsH(EK)THKZRp>IDU1In z7?Y0W(ez5l{&a(1NAO0~xwDu2NAgb#HD}u02QkW4|04Hq6*FEP5MKV-f zB{kmsaRVqFfcTPMITO{ePrdDD;!DBP+5vjJSH-vb$=PMx6%(~lQMT%73fjr9SM08Z zM?{h)=XzH4rLR*%DE2a)p!>HwPTMbC_e>pMZz1%>>`IJ$9$=D*9@a`x)_5;#e*iD1QGaFA!yL@r6`SHau!=HSMyeu@`>it4JposB&Sg$it~lIw#{o;XI{ZGo14wAywdkhmpPCv_maq4B2hctfjdPk z?0vas7MTqux?gqdO_lHB0*o;8aj5>kH+ih49QgOuwmO5@Tryi>F*V9Lu=xbuJ#+Os zEPlnOrVL~m_QyhAUh1x+M!&BRudS@orIu}#cK?89sZf9IjK;rrW`y|PsW2R4Kh$4l z+2v023SQ$tP7Ie8qS50ur@wjn9?Sok4r!iAdRF%`%1BDufbApHs#4)=g{?iAXmP%l z_wgNWk|pl%-y)iKdT&l$f9iLTh=XnEqD04U$noTw_De?(yTrBBr19ScufN3(a3#iQ zkA%G*v6mU)vh04(qLle8yy$l866$R*jp7HsJMXTtoD2JYBJUUM=cdv)+i5pRz4CM- zs(o;pEsGv8$|2D` zKp&X@YzNO&x{C!z93bK6n<@nXr!AX4{U02>xU*;sYe;2Bkw)eoTCA~!6I~85;z|yh z+~Qk4E&^4TpD^D_;Tdt2$$D|fQJJ?W#`i^_>?V&);b#k+E%Pfy_-DBcTnp+$J)gfK zWZ;9|l35VM>{`VR;#s%PWpm$p6jHBtH*Dx;tzIs_)oJwJ$LRKL8KF{ap&<$N&ul0_5G zpA=@q5OY7aX~XooN_g7F@rKP3*~y1fl~?9Z{i(>)Cu3v`9L+rz`ekyiI}>8Jao*f| zfODMpzNMb+IT#r^QD2tWCZX_}R23|W6!RAm$J%^qmiE**|1K3N;;Ud$b6&a7!a=hV zdA|l8y~*7ZmFEV-IYW%WWaN{*ORn?gW-I{NUw7yw_;=Q%{xyxyyR}Cx=g)_NpT!uU zY@8m131rwo4GEoo_ojE2`8_S~!^g%cnt17brV>sM68=tS+EabJN?cc#uo3^Os8O4o7D$=UXmP=M7u&`6LN-UR@XG@^xLd2JF8wQEvJvh1 z@ch!Ws*|`l`Ix2iK9id~3#c7?Ylr=`=em*wADWBJR^{A>`Ps3R$$V4fnBesEc(_m} z!ho1uE(?>IxB(m)9IJMV0fQ^^m|{*$VICpP(efD#S;Kn1CcRUX!=c`?zGI{7yyLuY z7%ltp@$O&X*;sN&p6IhYHxb}0e=orTYt;Esx{;MYBgvf3DwklOF7q=vs8-Sj-2M*4_UY8DXv_2KCv#~#k9X^bVL zk&1QL@8>d< z3|_movPtRco%Z0vMoMaYJlB_*np>xF&70#k$bwvo*ioOt$JL!LaysYDxAN|8X|qNv zYBZ)=+^k9_(@*OU0bVZ!<`0#kHxdPP)A}oyy*T3dv+a+Zs_e3ZuHxKy97}ml)SpzS-s0}Iv>n)TRCO$%RlRf!j zkcwvMrkZ=Hj36SDE(@9l40S2pdB>367r47J9wY1m?OLc>j@Z#YXcZ@sJ*_`&xu_bq zG%m5Elrs9}?=_~cLTD2j@vr$ZD2%Jg8z_EK~Jes6ry7c@S94%i4b|qn~q9^qkJcx(y^zc@sJ5YO|BW(fP%L zv#t;H-zzGdB_Ab$a$YuS!g$L_3s)la{Y>-}{yDC$rAjj+u2126C1m#ERq`(}=_rMg&mY=LoHxe&gQs5#PmkWKoWm%RQcU5u_FAiLm0?At zx~JX|-~qr4u9$zl z|90YE3Ax;x-#@5#T=D(5hR+r$Dc0Wow-3ZAXGX=HOeVelN7ufD~7B zt#I((!%&VdFKJE<(*LnWq@Jf*)1_T{YDLFb2Ae1n<)UN1)pO_v)SCu%EX0U6T%Hhk z?cv?i>|+?K-}l!*jq&a!{&2D8#z81vFEQz-nHnAKM56YKb|Idyle6JOEn>GiUa1>D z;LLCp3n3#T!yNr$_vNdd?dkEOeoYr0`$Ha7*`h<`)qlrNkY4gT{;Z;Ez_caNspvKp zagxJERtrS{9RY^98OOKYAxVkV`9+sr$2fYC7x^ko0{aaY+_k}=1imom-zBdlo-Da@ za+XmS>s^VD6~i5Ru*9m+^>HUDAi%thvln`G1V(C2OQ@&}z43uK#J%tpyt2rQ++0G+ z%K9)U0lt@islKPzoy`#Q-1DglBc{cjCJ(pIxchAb8WAaS_&i)!oCH#g-ZMP4-++c^ zfv0P0WkEmPatd?B5;}3&2_z9Y5D#e4b_j>WN&(r8?zbXT7nZ1a%0?-pTL09Xzurq3 z96p2+p(NobOZq`r!bKh+irBlAJ90+1cI4an8dJkG$^80;GS)xxmB>>^%y~hvNb24V z97L$U?^sutZJ}3+Tvnf^DvzCqD+P>k@R!YWRd1N32zsq`bEd68iy$(xwfVCGHsWQ@ zbpWZh-i+<_aXrw`HGUYyC8JvOR54I43x@(TwMUUm*W`Qe(UCXr`CGp3;8A@~t>SwT zgcZB2(~u8Z_+TS2bxeH};`eTdt7vHSdEI?3?eupl(&=zA=>oE) zrF;ozSnb4Bb5}26AVWwN`o7|nUyv8jzZoJ&s-UPFHS^fT_WWdjK7ym(^d<$xAB6s+ zg!E*GWha3*t#ifW8(Z#mM+-&Xt%yJ4(28yy22aSDYv_S8?}9>b(Al@{%Hgb9tX2GCCta|B~Mm1aNE0MjxjfPIZGB>ODH* z<6C-4?p<~~-*T}H8YUdMPL1uk*O}Vbs6Cpls;f)!sGF+Yzl;FHpc9%nB%pg!J6jYh z9)?Lj`0V`$0q--u)A<VNxn%ttWjC*ZJ-pldOOBjC>NY`8GsU($7w5ykKffs$ zU$Ox2DIVnAGE5L+pGnsrJ%R-Zz01h>35Roie|4eDhLa+2WKCyFma}Q5vqw-+@KWV? z5Ic2G9R;N4_qhSa*JGP(tB-+^yF~u*KEw`;XVg_B+LowsEUh{5uRdG@TD>1?9Jx(md^_ z$mE~DZ-aFhe$S!}Q~vK9qggSelwXdHVFJ;?yfy{;vRPgTSXg2z}%+ z0VaVU$w|=ysWhTeFLw7jnv9GLOvys-2BuPmqy7jxojG^xU!mQ7|}ej(vA9@e~Q$KW-CUB`hOLCjOk>^&CC7q-CHQ%$jCIiC?tD?2(h(2 zkbx=tHso)zxr|8hBr-~&YoH4U1wsmCh{~$zW`k=OV;R%kN_KG}-kg<*PT|=pI4w+p7}wKlWA1A$o}AwYAsD4&SxeA*rN|^ri-I_m92D0}~TH z*TQh$cQSYi(=swLDhKHyiZu&*tSg)6wtXF<0DA?U%)EzDEdK~6Zo~XIN-CNX`mpP7%$nDZ)Z(kLa#A=Y`hF( ze6Nd*<{@gPd40L$HOplstTu@{VO9d{+XKwljdYTp!f!5Mhqld;$}-M?x-J7tI@(V{ z%O1YUfnaWDNR$zKNYidg=X)iM#802}o#}Odx+lNZG7xR{_5+&h&%;pNTf0bC||#Ropv|oIYngKp4CSvfQu@(7^Zvo3{oRvMI(1&rDwXk z<6iM3f#e-*j%Tgd@g1z`MN?k75HHJ!;ABNdas`7`uAQ7IR0w9|xYcu3GGO@t#O6uw z^-z^O)mQrZ2tXQ3yncOW!kQO?jLJeEsi~C}?OftUKE)S!qx@Vm-X^f*rwh^tuOy&C1-d!Wwi9G>| z*POR53FHkCCiPx`xkKppP2{8(zDTSzJx$s@cHT#i=xL&xjmsK04>7=@#5lxhI}ZL! zwB0K{sw_sj7{zUrlm@@`Bj{{mHsL74?so6k@^RXH z$$d#WZNe~#+g>z?OdneCKiTIaXa&%%t=5&|?-`2kZ5}SfPVyiFj6*sV zha|MdAtFbeR+W?pQj*#ri{e~6fT+dv<`Sp^ZQ_I~5JE>s$1P7GtkZMv!b|m#P~mQZRlNqe zg|B!sp8FWmKF3zB>B=KE+@g`B!tm6`F6=hwS3|<7L4>*>q`;Pdjd1tyushx{LNtI$ z92g%bLYP`v^?INkQ5O+ss~zvY(D<8wc{u#i4v5h(?~f_+23HCXik996^ zLk@tD!)z4|oD&9fb93vB__R>1%v21_5gL^#+z6BU$>dH;o_<&V-lg%MU0q3n7u-$) z1Zk>}!1a)cys)E$w|jbiwh*T$7m@}T3hgR;BYN2zzhc?c;OWK?i$XxeUKjiG$4WHO z_Kn&JBy4qHD2GBhy67xmqWQ_a3UxYEEM(rX+b$IH#yQ*lpIe-&+FOgd};Zm!L=yC2RITl2Bz<|Lla zU;}vZFX)$PZnqxqa;nM{`dH-i1?qE#0&I>>;KXJ{p_X)KBWWaG!k2X;f%>vV1uuoX;oR0%hBc1%VJb+i=FKB(O^ ztR5jBw_!x`P48G6-fn}E-*3`b0+z+ZOe?mu^z=mT5U`!*6&3Ys5vbB2N7jOxXBrwB zd{WXmM|4>f>To+ee`1x&yO^1qi*5X>jyz6ZN5VqQ*z%owfgnR& zjR5IVo{s>!ip-!o=GGf7#^+a)Uib z0mqITQ4(~|ua=Eky6&cQ1gwn|G%qhR>$=Va*&8wIhQevG4D&z0xHyI;CwsB|o+NZH zBpyqsGibA`DbbNKul@aN3@|}mX&U6PGo0G~BGKO9gLzH8HZwDu0Y?O=c7q2@d+GxG zb&J});JgZcSFZ&u7cDjQQz(}nCbucgN58-6y@2jVX5nMIe_G3 z&_xWqmirMHRf_deJ}_aTbY&eu)Wp*vVLEov)71u-!#VB6pdR&;oHmMY!h6l<^SMdVfl}@gZO7(^Oqs_OHoYbeiH;)Zd(M{A;eVIX?z_^45Z9|03llE< zXe1{>9o=)0%y^emckqRxN}C-#M*s84L^k~{G|x0C>+_#NWkJ6yDk@5H`g5RTo)4h1 zz~Wd5zDB=4_Rx7_JyqKYXHiyG*2Quk6%{gI7pB2bhU+fP0Ox__##s5TH*Y1xi=YIc ziCoW<%LL7hZL6U%`i;qx-_d+Un>eFkl4%YgnJT9|yu4Y>m1kuVx8GUITZ@z-t132D zR{X{=K9mu7DSU1_h9_LiU$*WjMV$k!F+_j`#kC>|a&+dZ{+Js}_|L_-4KmdPc= zlNdp)0Hvt@={^Ahs>=pO8Q0+LS-CPXh7@2jSy`!$XIv(xgq) zq;+L3%CGZ>c8`Nlxw)Cyb7W}eJ_U1UQ9TS)=~Ox&j*UA+Z-e?;d)M{&@x-c#AKJPQ zws@Yxggk9+NgE88t*xwrfbc%&f6YrpXwBBGrhl6f3JMJJ6@N^X-#fEE?b*`5`Em!f z?W=^})-Qg`m8=_A@lNvJ{eMsI-{3xP8(gF>NKIw>wQFJXUh5un0v;(-16&sT12{UsE%)U~ z<<_MFTHcv!T6DHf+9@m(S+ny{^19MOaiO}+Z`boI1(p@SVXn*16w}+nxb~N;3UOY$ zeY+cI3kwtDDlVZ#PAgfxb|%GYiN6)xGzBv%?E}WyZFFXpFoj^pMQeZXe9uJtz>ocz!R8Gn}Vl` z$nvr8FM7%aEM|e-K%gBeo=)!W$0zxlzIgHC!6X&O_16!-|9%)ax_xS@w(HIyR>-_U z)hebBz(e#FUVbUS!}jp|??Pac7PxLlX{wiKRgLA+AWa|#cssQ5hu?oW*qSfAECHUl z{U(UN7ve<4P)5-B&5oL%M!jr=@L{YyxG5#S0fQ z0!trP;R~QqYbTG70k!7cz%#Wr084k^sI`TR-jf;6RE0Vp0QWGkK9>QW1hedeH#n(m zy0j-j@3{={Ksb$E4VAzXc8*!Dt%0PxXUjAh=G)cIQk{I#sWqC^Qw&Ow48(11h%5haS`oO2FMQgRLr zG);q&vt*hM@AUWH-+lAu&6_oE%^x$a)$V=Hsk3*T+O?}bRlA7PgeXx_+@=75KvXKq zU~LeHsDtn$zY5$*6X@9oE?)WS8hC)M-dVWYxq8^SID5@$=w<}FJ; zzv*Z=W1_kFx#i z?fen=F1L+%Ts}Fc11Z&5 z`@K3PMM}G;>!e4&S(v6+W(_m%&2WU=y|0A%G!rSZv?MPO>}4WkC-%#W1VI6bEoCCT zsVwL#U=cJ_IR&v}~x)9_PiQvbPQAla$>1kqs%( zl-7X~$DhyRoKS;pV8KtA^p5)tDCQc;(RYid=ofu9y-^lI>Z6U{)L)QQL;U|(W;68Z z{bJ!}aC+@)cKn%?xg~2|*-0rnP3*>dS+-DquO?_dj-!P`?|~ZK4PJH%V29u6$Ky|3XV%c%#WFzFzlfiFEDj+HC$; zvL82giKUGiZ$$eqm%#Q;nwX6#M3ZWz!w?jt#j{cT^O7$D zoI6WGr;+=+fcFj9yWX)IqH<6t%jay)q1$)AMn?R)v3d{Vg5)I&rR)snwdtdQz{Hnv zIo$IR5wyVqoj1s}N!h4kF06#MpkHMkC@W$|-|l{7!{7WU60Tl-pgMJVXY97twcAK$ z>2mdr5B~l2G2_yVB>h_v0r0Rt(8j8RlJ(9_{mHTQb;_EyFliYxLCj(F{2iuzBGJ8vj<-9xcMs(Hy5yuxE;E#;>pcRfU7b|dakYaR>R&1k)|8k(<9|`>k9?_< zhG>xaRZic=s*C!ul!c%@cA?!ov{qz~R)5tW4WQ&O8{qAq3p+}B&0N;E!RHT$qD~J+ zgECKG-`dyVanz$%DiB&;ncCDw2;}#DdoM)VP#QzwX-SNIz~VvZz(7DnyMQfrwC3ow za*}_BTZxs^(drHe%inD0t##QiieE5$mrpEQf`cdUJ32hDOKIC)neuGL*s0hQ3ij&2pU`v||im5<|o=|@dsw-v(TU(wP@zo?Q3 z$@*qyz(s0Da&PV$n;v!GPtrfv*}50`_lFET$9>hYRe~1NKj$6vUS7o1g~bX_TA!Rs zU4#m2YbpjJw?6O&OA}ev@0Yzrh(E-RhO>tD`d2(g4W1yDtr!GO8(6Vue*Vm*3_G6VxyYAk~@rlec=;pxgM6*8i zZRr`c)M-QmuG1zjGaA$~efB*`Zc;pxWVa*fSnaHPpEd!aMIES^wfeqW={s4-A1byc zJ(TW*gK@xDEBY>%Ks0K&-KJ{>Z=-(I>OSUbF8*6Uk3-FVq%TS`p0zMuu%bo3X&-nu z9%WEM;#5xsSsQViAkjE*vdXC~-Sfj|_~S!!U49ESxNOFE9K(zzN?4Qq9xt7WBL+t)5RLS5Hp8C*DlSW2ePU^O;7)IL_;k0#O{<|sg544p%oQ?C3 zs^8Nciw`+X%sL<)pGs2pd*Nz*;{vDC8&NXcWCPk(}SsoB3(FLk~iR45R*b1{^E?ZDrqj#d6x z26aX~y0V@@w&{A^9P4s+!3)N7TfDt@vlr?wM(ye-Blrkf>n^*F zNbzz!m5Oyr<>mGpPIyFm#X)ucR3fepb2DRlXaLCNC1If!e$I!SWSBL6mo>D=NeEoz*~>5=-Wl(5 zCw7Ch3?KP>y`kt*dUS0;$#aap4UhcZ&8Lk=?0(?f&E%i>p;^M+`pmCILHyQ;`g7db z1UgyLmMfT#9O;jELQsq;*GF8-)*jVKMg%iZ@t~G>N+UeO z$tl%`8ZSTmUL#_S+3cBP%_b!`+3r&B{?N0NQ1g@Fy{M&#PW_))|DTPUx;Mt?Xic?_ zjt&|BY z+*9mkn70G)s%Wb*7t~7)-*`FYRK=x?t+-2S%`po>u>>%>e<>0$`DwImc^qyg3T5BK zZ7_1If$1Ynym_a%Sm~Q4&oJmYuN!tOpNw31j~|nPv!2zJ0QK zjU{l7G83JtFIgHN5izoNS;xzfjD0+R1-#On8dr)(ZhUCJ!}+&9tMEibb-Q^Oycl8* zT;>oiUGVVR*XmoSz|vu#UV94~oEx4E$o+ny`Asq~A|e34W%l}7=Z^O{QEs27D3>AL zc=H1Xv1_%1NAs;fj^t=Gn}5dQ*Atj6-0|x6&>eg%e)mZ_rQOT@LE4A~st#H;MXXES zzWV5ut03h%kBeZ61Ewwk&`mlK5Vu5i+BxD4YU@f-T(N%rVY*ci(kA$|sOa)D8^G{2 z-fwB&UuA||8Zao63MM@l>^>;@^3nc1?7BE|`kO1%+aaxlTVC$T{cWhgF2T7?65Szp zM=o@=*Pnjs>i>?VStg897qIX$_pb@#E*o6y*qk|ECbucfAFn{lfR|pzo%-Xg?4;yJ zt~_Y=$ah$_T;10(krK)_yXpzw|J5l#GKOEypT?ihN=R1X!x75^x7=5@0tQg)0)sg? z=2Y5%7hPpIW)Tp>&y3B1r6uOO8+ccpGa0n>Yk)j;CP{}K6Bf>b74QHNA|g=bqZ{1A zgbwJ*f1$$v-8RVqY1p{O;j@klYrF(shB2Nrgv4t+%tVuAFcwo4F2 z&%nQ(Wy)MAy4++@3r+7RHejzhMgy&1k5!-@&-Hrl$FMGCP3} z>+@GKzY4axb(Dlb;lGNs9m6`?+Qm!@sF z%sOP5PqXzYOI#5OQ@I;bBAe_1aP(R_i~R{#1OaF4{7i@WNL5RnoVbu>V~rL{SrGLE z#EbYiSwZc1iS>OPf5u0-^R#=nxr$jAw`6E&c&iX+X%H=q|kWoD3A{Ra+{nf=;s*H7ACMekM`b6Zh_%usf{ zA`a(;u{~dOw!!kaExng8(UH`=Knzi~-er0mOz-#Azvsg-m?eg1pi1~v9^kv}OjfU7 zoU)MdoS6u_J}>*Qnn_3sw1u$4NXjRik8e2;}wFw0T2gZqg!{r#mFnV7!g`kG5hR0V0* zR&slPxR%v>dV1bBQEc=7IE8mUm9m(^$Hc@yig!wW{Zbql9o5H)99b*TAZFw?@s^X4 zJEu}w`>El;PW9;syfWY~CMGsDHU=Q{Oh;mVKjS&&Cj{Qo($d^w+oB6aB^?nbJWjx` zuGW%QROG8WAcMA}QqXj79q{q0y)~Jv z=fgvuLK2*{ZhsVu3JSuTo11?-13V2_1WO+lSKa zM%%{5rpxOsqOz)LeB$)w{Zl{dpth_mj%A-RYB^uF`0y9n!Ha%4NddIOU9si)JOJi=91+)VJ?lw(NeXgMZ3ggrOA>!cVd0l)?EcRM`-;MCamzkh`yag@VBxPE_k~*h>V(F((kL?1T6IgV}vA+jQP+;yX+y9@yr$gE_6acgSb~exOl_1N)pKQd8gfB<&w|1=29X{gaUCn$=q%752 zS67!Hjji<_5n&4(&5)^BpqVM`*3d+oRqV5{urQ!ar!<}hKP1OicqT+yVrhN}5m$=a zMji_HMf>84jk*7lxPcFVyaw+POYAvA?f=@a>ltA9b3&t--%1t zYb?-{>jJHJ&(oHUm`#&pBz|F+FEc~f+Fa2DEp&F)K%F0DSqL><(gf|}`;pKuc)yM0 z-PQl#<6@2DskbNUnZ7ImUTVv{y(B}<#=2}HB5EfR`)Ce@H`I% z9uQD&gjf~$_Y8ufOzUxjfd2h0FOQr>In2C+u*jpqbTZ$hvYMmTr3Q|;My$p?J!IL^ zs0a5JrLS|eSFuKjn?+gxUDKXkp^`YTiu?A)7rPH9L~hhA>e>1aET67Y0Ki*sD@_Q* zaMITI>6D1mzHL}Lob6W>t=hdsFM!UvN>p}htVEdJ(VOL9@-7(hnG=q@eo9o>uE*W7 z(K6?db~~XnfO++2EHI7ry=|x{I$a=Kxz*_*VI>5OGJNnjN{Bh?r_eskbvam*yEIU$AB|Ea_{<##M}P&UQ{hql*KP{MC107I zkQr!(3xt}lVXS=8U*oO^tCZj`%^b5gIv-1t$;)Cn-~aus(7aPUSlH6SvMl;Aa{S46-l1qDh?j5ls*T3K1KD^VHxU!>{56mzp*9Y_eegPoFCjtVu;(L&VMiwyMls~Clmb9Xrbc!!ft#TW4rJ~OkX zkwh$rYlM59|y&*=W{e>q`IC&I_LMlJss&kQrG zDGf2l<)4J!%pU0LWB0tI4IoIfbmA~|>D*_~x=Pjn0J%1nmSdT6A0>;7A6>sK6d{d0 z)*&$?u=?!g6(*nKB$KVdkve}es@q`f<(YTOOP)y>6kkhmOdx@5Ts1!te#=X+>83>L z`@Z#W&fgN42UR|J3_9Z0h$L8G5g-(*tFQlsT%Q&WZOis_H+OL0&6gpNefdRRiKZY@ zqwN+bagdV>T5kAm*!H#i;%NO3?(Q>7a(>g+=LZ~sPX9do!tvtwo=(Gk6EG*87=7gV z1a~aI$(FGp1h~Ga%2Opa(-1wM%h%JN3E+SV*OzxK?)uC#O7NhZ&MR^}zY>!VW^)>7R38qVWlI0QB!4biZrd ztQ$~KpO`&vyVUST=yt+lN!fim>KSJ_{Mj`N{D&APRV{Qzg#0)@fECXb7vcB9@D|qc zWD79c8hRCp&JTHy{8C9GztwMzT%qz0b2Dcy|Z9$VS5P z{v1aZ=(>D{e?k%vv95?`F(rE*aeh!j-AR1)dgc}4s}Ij4u0dHuo#SVR5V2WaMw#U$$5NEdaQ0fj^=YX)gany~R z)6+aMT@?`sogQ(-Px(q_Cng^WAUDGmaOZOJ&1K#TmezX;Ipex;VB-L+i*}6w*%jbl zCGnM;gjSyP|9yL1s@|grGdq#zUcCJ#(e|WnFxKl+Ge5H2d#vH3{t2aT%SnXMK0BR1 z%O_Ll!Cj)t4$ML)s-)~B=cayyu6_YQA1gA5Ih{2GwlJnn{0f|L9c`J_xU=HnZ2G1> zMa=Wlg6>n*aFN`vg)W>!Gnei%kBAq|B}BJ3GD=PPn@oOLs3r|?-US;xIewc;@{=G$ z&bWv>VfFb&nhpFgsAA5z>h?4Ji3~)53 zd-&(tqlu^zWlzsXYEGp7rcyMsz8{|-mW59XBhRQRWUy~4__IHQ+Vzc76Gwy2>>UzP zll-~1mY6N9FWEr_SK?@NK_GJ~O0Va8;e!M=W;>YUWUvCiQ^{*Q6$z;w+UxSJjam4# z7r+HAt?99B&$yT?4H|WeWJzdgm69XXQsDQUj?DDNl?N3s#{Rwk7|QW34|ypS@GyO2 zRR(T|nx`M;1=3I(q0YSvn^7yo|+hi(i(<0fgZu%mI!y) zb!h_$TL1s|R`wgt8wTB%_T5zI-UFo#82wEj!JskgAdvtyQvm7eYp zHKv|1>$CGsnSfTw0L-~&EhD`Y=Aiqqn?@!YN2Wv@$WP(kaUIB}&P+{#%gV~y6H}6s zm^T8&9A^0DMny@Aj@P+Pj%O~({P~aGSx^$QKH&ve3uxz1&U+C~trAYn`js}gdo#r* zJucm6?bbDpn?GbhR}tE`uFjFW>gasiU%i@u@>I3DY01?AmDb+>&?LvW((JQ3mh~bT zNB?$I^5{C6&5_|5sOAC|kaTP1pnC=QBoX=_#k)@d7MgN$y5ZsnR#y#`l)_zH)Rf^c z6F?{asRhtxY$S+@%I1S#8L^r57vUef*Nz|76@qWuF%^|()7s@4<~HYl|8gby?@PA{28b z;<%J-cV?^XB-q~1lp4Cj0wVbtLX2tU=V8x5r1wa0Z;aA_*TG9>G64{>}eO5;9i(U9y{A6H__0lk( zQLe&_wkhD25L4^I^-q4u7R&JMakKWJDvMriV`CO!VPR5nAm&k@?(6T*;!^tj@a*!{ zemGlzfwR56yYR#6CrL?3N{+YX_4E=8a$rRdC#h&;FqK2_q!@}z#sz)6YYGNf`SPm@ zOlt(CniUEO9=fif1l7^XXVC+m{zFM7)|eXiDQ?)~rn-8#2<^#TI7a$3zuVScytY%d zJQh@wxjI9BkL9nGC?~Yb#nkj}46B4*Ay6~Wf=&JYy|AoIy$F_Z6r2HQPXBPp{mO0Z z=bKN1(I?wVU@(y7Ne?%J4SEa;j!JTQdU?^)X%VE^6G10r-T^`>h9u!!6IRxy>1R&@ z_AlJUVpxn{g24qEqVMkpU>{HNt3n%Jiu*SQMMMCC%=^&(8UpO7+@BGykMh|_dMOwMU$6T9nD})m$RJ>GVwAQI&4{jxIlfYoPv)IM<_|`dV!p zp4&0sjqCuMmZSAlBv9G2&Y?fJf;a7T-Kl~GV#~%55~-`t%^BC8wy?e4oM9z)U)$uP z^I#(X;Y$Cv1eo{!BI~&<&)c+*TP&3Ak5I>}e+N)dzg^8G;=Bk?>f*#*x{JNkqXZcA z(%NF_Mdh@3Dn$oiP62Qg9Z>D-naMILNdPCNPEPafpvQ&>o<4`?j;s5~@VDuqQthRe zcQ5m35l8wmKC%xEy;^d$0Y=}syT`*2^YfA)%8#ttjwe**9S2hcZ3e)L&df4@xxRyO z(e|J2+yhSCm;%7x`ZBcC<30ihUhuA1Tlxz@dfvC^R;5$OsT&ctLXZA(@yaEQEHi_; zf=E%y_p*IpeOc7eRZ9}f>2%-EqV8;U+@x&xhOVL;FQFec1GI?jzNAQBgXGHcXq)U7 z8eL}BUTQ|q4i9QU+WEB3t4y>3alQmXtsZAnY1BnEc)8bW{2k`p%_=jqs7Ph8+A6B_ zZl`cpVkDUJMkKf}Cx>fK#OKiRyQGhMS6`*^6jx#Pk-Kpb_A=4xrI^flxBLY`tR+gW zF_l&i76gL{zp(WF&n-wm(jJpZz1-2)TNI>%ABhVzBpCVZu)Gvol^R?D#BL}R>=45L z?o7XYp9+@7{oC0a^+N;rWjuMd!*oJkyz$kE_Xi30Lz(V0TRH7o^!&0-Bf~D0Rq^(q zyenWbp82)_x->Tw!B5$)2AJlxKMObmSZ*%3yrhJoIAiy)x$GtR-33wK%NSC#gyHDf z>ZQT!Qs2rho;S$M;4g5(hoank)C%|yNWJ?cG!L~EU7#&eoT;~}tUC3_edLeaoHbO) zw{fw9nO8vX17l|CPaqbR&nWr@1`%x^8n~Am3JW7%zI+*yvSyu>;bg^C4{np29e8*T z#dG9a5`7Dv8r-g0O{@4H7fXvvsWfE(5jY;qUjWDhIYVHl9dP427=(shqeObZeI>`$Qa@)8%L#EXlxNl}hTH zlkbgWnnBMhy$PcXeFIrFrGQ$ejp)LjF8d!N3~Ne37nOdO+__ECu^~=)CBXE!rWj{= zc85{vnwY3hPfwSZjz({7*_*v+fP3vP?rxuQal+*tR8DChVYHD) z=h@68RtV3}gCMkAV5P0!493ukxhzVq zo&n>-*Eh>vH+>axoRtONI1@yc6J<^RO5oLRHk|=hAprOl*3^=z{`IxE252_M_bk>DeukHl;e9ag^=hAOVbr6A zB1Dhn3{!d&hH$TF57-cvj}{!o0pR~7mD{<9*xMl4NARuwG{zE{=t6FsBQ#05z=Ro2GtuAx-A7O%Yp9_*<^lAix1H$Z62@s;Ju>07)8 z`2t7hVsyyi5*cVo7#AX1^2Px$yw7BUTW!ZVHI&|5G(*xQ#onO9l({;cjGST zR!{*-haNW)E4GoM>)dK6T04^Dhkv(ork&pI5L2xJVd76F>m46O=>lUFE^vKShuSJv78!V+qK>f z27_H-7pWcLeJ$2Qi7<~NK$^Dr4AcWo_f~$;1S8QCpu9R5e~#QCuSWmfqE(xcXf|wd zsCg!?23`@uJm5`@;A^|4oOf~dI4<({$BO9y5c$VJ9TNbKD9daWk?@7skv=Jl-QEBG z)OfMkzoypn(t5M}R*e<9QFP@l&Xp$ZIgTmK&Lxwf7sbhGvkWhE#69KIbRp)&f@mMy zBrGAkiszb|)?Z!Dmp@_$$b^_|Bb9IMzKZ>oZs)=-@<Gc&w;+(`@UJ)*ymxPMrFN#0Pcy9oezam)fY(FCJdLGcP8;aJGEZk z6$Pr4WV!@GSpWIrUqdP$TXb(k-2K+NuYQN_)2Hym0M6}(zk6E+)Sk|4s>YYd&UPkA z;TP|_PxhX;y^B)N_xj@qtWHWq^a~fe{|Sx0$g zR`wpfmLgg9cp{DU**waV{$O8s>XrT&c&?4I_FtshufTTfJRk4)gyJ5foeE}!~()1Rvn zekmy_Zf^{3IGQ>y_R0TVr)4-Xjm+BlH5V^h{UyS;Kt3M%95Kx+v=M4X2ML)hu@EOk z>-LF#;as_EPxA_jLwG6zDxX6!|nRhJYrXPtAl~Ows_U1aUq2^6eBk@J)x0k_ylCC~; z07vTAkc;ECOXl)^@0`Av-3Z-!x4Vuh|KzkjKS~HJ==U1XVI0?AXAt|L{LlJf=;?}k zoY@5E=qNNXu)#yw5E|M>1~cGeI)jQlV~GS?3Mg7l=fJWpaymGp%|Fim!rFbuj5B*3 z@8RFA_1TQ3-{*9Ar)AhEOpztv^r_D@df+ez#)*LCMn2G8<#D- zLB2=aI4&)XpN2&wI-+m9)k;G#aKB|=`l9`E?^|Tw;cMN1o}`CQG0zBKYBIt-dEQ=6 zMMcH7J`(Q4dRAa}*eIi}BVU>jyL>@smVIv-zRGiL1A4Xq*w>+q9&1lSFOx+;%m1|F zk`3|l3A(a`{&om1 z&|$Bxso{~3NR22RRfqvnw#yA=Wy9YNSQ4A6-`JNJ-oJm}T}w;rq5PK&CnPLabe>5pKy5VNDyT7%S-3Il` zXdVy`xj3#ZDSa`2*?T68Pb!Ul_wF74$vO&)MCFy@Evk||R{H2}i#R54Hgy=qzLNsM z;oJebJ@S=?ikmCo9%>TXdK4Rk*p= zq^~2vR{iba?Dot*vYLpV*E2FIW(ls_lW|{(Fn(2|z#2TKzFkF1O6uzBk^>ze+#6jOc9< zdQqo8hF{zCuN?_r65OR4AkR(FGB4w0s^nqBOi`3Eto&FKX!{i_SpxHUym209UluUN zLTa58wv+Sj#A&KA?wS?p8{K%C&Yk>M_}`HVDoXCVuUX}FjhuiLpCDuNlg-P^b9?g@ zsrXrK2XDZac!*nn@ubCW8rImDEPcN8F+}{sslv^ZlM?{j6d1T3@sh8vtY`wJ=}VAS zRG-sa)4PHm`2zq|`Ohs63=Ues1`eZ8F82T>Nwxmm()HIDf^B5OX5cr<(D+Lf&O-&B zA~@x8U~V>W*gaQcQ?xyF3l1+4J=5de`A!v!>34Bt#W3D9=$O1Tvf@4-u(pako$fQj zesR2Uu1%iEjr2%!XKO)s5)@f?O-q4w>(TZX>gj;o+IJXK3>RlMFPUkPq++ez^&(du zlEI9NA)ENik+khyyl(92gLgb6yjU5p9Rp6z=EH$@9Gn6Mz8ei1{UN4f-KphR1G< znaNQ2z25;odp2e|1*m?*eq59mz3;%wa?QE{NFR-0nU|>+ zI!A@Af}$d9k73r|oA1omrU+U|2Oe@H_aSjMsJ%qTTBCS@&ZS+{jkuV3FgU$db(_nJ zcX@pC5RzN%*pR1Vj2WvCQN8;`O!lISQc#CGxY*1oQF1eXdn0GQ`{f6MD^9bK2z7`` zlDyUd_V4^!MPGm1m73;2A;A+XAc`caWOH%{e8~25x8EdmbX^soa{`?5?{u8~P5gu{ zplu5(_~t1qaiy&j(E)ubiv;^S5FMRo`tChWH>L2&GAYvoKA=cDlr?YxQ8rP76bG(t9BDVJlfZW-k3OOQ?Gj~C- z%BAGTa!---e;#NMSL#5BYA4+l$RqS}EmA?Pm8cw-WYs(mM+Q(JLlAWb0GvS}=cD7) zrGI+CSO1@%0zRS%dyyp6Z3%k|J{2tb6yweN#Jtwo%Jls{vX(NJAvL)$Y11 zZ@gXE^13;mjl_EEGw6C|w_PB`<)PeCE)~Q~w!7Vr_PO1Q;)aZkL9(E4BG0LyZ_K30 zqvrzw%0H9^8k5YBj8p$PkB2hkKW6ZP85h_6*90^E{^t(FjswZVfBdg&Alvqy=86G3 zuU_f-J|nLlrePX?p#^Yc2+L4Uec*uIJE@lAF>~?Hb~Rd8y6Xd;K_j=VK5DlwqQT3x zBPE=p{YJ14ZH}4)aN~@JKW0+c#A?Oqw=Cx}<0~4ZwUWyOi7MIkN)7&^6ciNxnE9+G zyx98E@b>2?d;oC9NDZ9I$DBRNtUh^c){bEknAyLoCt845vYE{9N3lr%h=`cgs0sQc z_1SC@5~yx`v27+Ij3A8 z%0SZBg0a&Sea;DND+hyo1V*_LvaFb7CGVXtLwxv+&#Yg4eRw(4D*OUiw>jT<4yT!sG&!BuIb`S@=4wdvv6M%3|4V)e)X3) zCbNNRNSjP1KR^GME*?HLrM$IT7NXg9c;Q(H|A}&`Ej4j2?WXZX$kGtGc2pfSnRfAw+;sH+7$S4={3A~^t>o%@?g*pF!37iTT?(Od>tY}LbhS%p66DvH9GBdB?u12 zA5-IY=T?e~g3p)#S`%4TgD$%!5yCGj#WB^rb3CYs>D@0BkgW|N%rm1)*gs>;z~K)6 z;~1qgbXT5VE8v)jS-m*8TuXIX)Y8@U(A%y86vqbTcQh=q05Eo#RywHR>`YwtWP8HP$DPX%0Agp@J z6*XRr^L%Y24CyZ|{4p$p~0LE)9Up=+2jJEVKenev5uVchld-VBl=iqG;3Ou2wpjRQaG~fq6|4A^n<1otjwI&cr0Ca+ zLwI{`h-MiN6S%E&f6(mm>!0c$5H9lDTKO*bzGY-o{MR!985xwDp&sy_N%go3i8+I6Ez-ub?MvUL63#0T0B_GQF!WQSGeZ-Bd+z8sSlX&F z%g9Zf8TMw`WobDxy%@F+HF7wM$A*F&ClD?$lby9crO7~va!tbF`fw_IM{kY~^GSqg z$14qGSlc&69z54;=$74*x;Q$RL)c0{s}sPT9dZeDUd*0!e7&!#c2WWmjRR#eRR+=N z0cblOrYIg5gI1S+mBDoZue;|bXQm?471nGv3J%@3(3Ng%{81wb(vAxS7zp^Z%lr<0loU0293mwqtrP_2~Zhud2Z<`cDQ|$8+t}nhh zux)sSO!sKF|GRf!Yf&%Me4T@tDG;dK;?C*tJqozLwK9Hpt9u{cPE zv_Ix>btI1XJ)YY=$9Nru?m zZV)%gIcpE#9aoi^g$VAq`ghXs?r*r*+(-_Eh|aRcS*;!|!}*wkFHQ{p0_Kn&I)SMF zamUxAms%ynr&cCaL_GlL+ZjVXyQ97pXc&M0+-2&qVD1eLOBjWnr~EV}A-oBcVya?P zT=@C;Km9{cwqunW)})O_-A4 zmj<)nHtOE3kBl?wzm9W-nIdlT!Vz@?L*%)p7iQ>*q|Y@d!}HZD+R~HvEvp$a z@Tb3j|4heO!D(ae%qw5U(hHk1Qehxt?_cT8Lu(sGfCnb6vy*sC(`P#H+PVeeTAJ_q z6Z=Hp9{qhceEhvH#Y!P*g;K7v*AhSLtq?O!IndmxY@?PC5cfT2=8{+2`c^Rbrok?|Eu+&Zad5I;G1GX=Tm-=f3*YH0@kP>Rm$_lj}Gqt1!(PktT2 z=>7)jx;AR9Q)rI+Zem5lNV|g5&Pq@2xO;R+e;YBW)}?k* z#aJk?z?(_x>gAzk)-OHljtBD}bZaSlUi9C^YXII{u_}?@r5wWEE?K@<5z79iyZDtDDeOC!{TPY21u8nalp-6 zSItGR%YAWN0aLwpxWC*eFUlG&~n> zfwbf_V1$UY44pnQvz-{8pH9UT@`bl^Q>*F z1#}Su_AK`H_V*fKe;t>*LaP&8zN%VXv_9FvyInDGSakIE7WF^qB)bvyGsNeNHtJ_C zjr6(f5ww5p>d}#HifZS(h#BD^Sk1$~xs|JfNvLYTAaICptN5C{sadTVD>-TScId+A zBdmRa&0wI@a-eCi2TD->RSO_7{y7N>VI6LXEEF}53ZAaZ@e$p9f3ZF_zj*1rdIp7v zCbr&wYP7gJ4k_6d6g+gWO7lYeIaPlDXx8o{A}37`ZezUy9}wTISL%tCp5CeL{J*B; z%F}}eA7JZ-FkGE}tdANW8)J9;7$YPkq-+iO{HNQZdhC4XEaJ8&&YNdw z9!(TxxjG8-aH0s9@2){@x1j7U0A@GqKSY%CJn%g}MS>f8lkR_A6usKA*@9Q|SbEO$ z#?(@;yF!Ok-CvWTY0tMb%&Y+X9i92W9eH9v1%pHioye)LG#7mD>(u8rG|sgZ0uI0D z=H}di;%tWU<1eYHycsf3(?UA)?8Q?{8yjvCUs1$2ybAdAvZpe9FShUE1^vE@<9%PR zZ`fu@4=7l=I$Z=YB2r!3uIu_@ zrm9I^PaJ(i;L9Tw?yZTBcg<&y$t$|k%vRs?o6KKX>|lQL{L4U`*2x`n{nt;QIs0dS z#vD#@t$O_Ii=X~U#n*>*oEMrK9Q^us_5G_b_yj+O{)DuNfb35Xt1bP+OcR#tJSbsc ze>vw@D`NkhkT#$*f<91zW!Y1HrCz#)=Mgf%Vt=1+0U3~UL^pilO}i^|?&fmqH92le z`>!H2(svs(o#zj&5h2{~@}L_(&=))4B8lQ-ozMJbw%QR(%UA7T`|&n3fmlYqvTq`b zYALNztYdvNqhMj-b&C4Ohd`1zDk@54KcqU7_wnQWy*=kVDM$22(wq76Pe@%zofP7?lH~~mFx#|a+&nB>+pElkK(20yW6{-J)-|ays{UP3ua%mK- z{_)bW_6IBk@j~O1rvjx^GR_<#4*AG_XtScfvPq-%f9PM&my>-qpyJvJWK&a=cZ!H4 zE9Q>?C;MYy^9l`;Ee=UuNP|Rqi#1?4+B)@n>}dL1o5VO>5YuP*LCQO>`wEp7a7swQ zxVEP;_(D;F%alaIt8K~SHvg*zg?N`*!QcNUf`f2t(A9Sf6q!YjWu|wPNyiaCARLUP zss&#tX7Y5DNtGG@>-^{SRVqTz`ahM6{jVw+e?9>Ll`06d$jz32B35>HB%!FH^{Ws_ zf=ZJRa{`M-7||IhOtZ1No@IFJg=5)lfAywj0BwXRJ~MLn!fpwr7NM!662f+6({0_n*LkcIdN{9$bgA!8GDJT+(2qF?v1B!%n_Y6{kv~&rA(y7uh zbP7l}LwEPU#9jQ(`Jey2_dMr5m*;_**|VA1`&-}o)>rSlF8s6xE6RJ8_^hykd>8uH zG0YU0UB)B$UIuP4un0F3Md>@z6#3?;U0ah8u@+wR--9=<$FJ<@zh|vfsCk|S?t0F0 zmOYe?cS6cp`0TF0J(6@z_s+=#><8%(rS?G=;8-|+?H0aKu^yf%JAO?Ay71?tf zJ$JeUvb3LH+|yS(Q8epV2NB!pPo;Uwv3%#0l*cLB{9aXP{nfvdYU`%p_8o2eAeWyw z7L)d{Vm0TWq2>DU^yo9Tx(oAhWs_=20*kknct19qC^041F}vhP@X~L%^6C-XGWBYY z^l1@=b8XDX{*p8%*IVU4jPA-@hC7#>{#Dlv`;O*axpdpCPY1sk6XI-#NE+m1K4DR# zwM)+QjAq35N>!W~>_3HjKGqob%CgfL{Mz%`V>atVU+&+PCNg^Sc;C(#4j{mDXlg=Mr+&t*r7$ z900%F!g*y-T&bI)E&TG&crTTH1gWd=sPA|F5gH>9+7q0WQx+~QK;@yCQfzO8)UUms z;gOLpkQD58d^btknH9v$CKX@Dm#yrJ)T>kYT9e&f`W8eOZ5_0pxvsiQe4ZvTN23e( zgs28GX~mu?)U&1_c8l7co1W`y4pLrUp9cdUi-OuRElnsx(NYD>2&mD~;tP2O!VwoA zpeNnyXBu4pT+Qtx1l?cUWZfEE9KUQJHsB!Sa5-l8i2aU*tzlNsDRx$3!6P%fUL@P+ zqtLk22Nl`@!NuddgvMg{7yE%s-3vS7^dCkd7st$R;dF1oCOpeGK%C+7A`YPHH~o%U z$Y0sQ6x!fNZPfEDx|lP})%2?Gn)rr{Aw7DmLtzt_1h!P~D*@{fyOm}ixL7v@oLtG-NYVU-TY??%Gs`L5t@ z_xrz>ht3Uck>ZV*!}W^aby9?gUtW@O1?T%0%Yr{z>h$V2+hfUxWGJ)gj}T%x7`f7S zC6xV)zc9PMADV2!HH>j%E8lUO8yibCHBw{g(mt9uB0yUPIAAK}8m4qz?xy&c6lcTx zv?X5QYvY3VE|)FSdRNOU#?s$3DVUXdh3@Q&>KD%(j9`E6CjQGw#=S?Dz1C^d+{(Ba zL{OiuKq{ww4vlsFC~35XDg*%8&x{+^CI zzEs3W@cS$J&2cbaB*tzymjAtE{R0D@?Pt0=AdGCrc%AP27)y!g*?tvD))+cFe*fVV zof98gNOSDOqF&i6Ui*X9xH5%`H7RM(_RluQB8dwm#ZM({TzlD@9!`xEU8Tx-YmppME>|B^06 zcCy@uR<8`0b2M?4<}bc{R=P!b0=F?i;@-Su6#Ws(7X5Vk>2~8sf)@|X&)%OM?`Qq& z8dmWNp5117FPT~Oz(7ZbGv)d!xPg0YnfkWXif_`TUUG&(y!JH^aRWoI6Z*&e)0J56 zi}|pR9NSL~w7{LVGrk`;=kPxl@pMr;VdIiNGbublXpjt&Ju2iKuo#gv#HWm|y?`Gt zp7x}`${wH6Me$?Q0a4NTQRwv=yNEK}CnubalBK{4R=ODj`52BDud>NYAAml$ke3b) zWd;TYyr-((aUUWP<6gp4u%yZPl9${2wClj&1P90Nb>r{zRZeGCGoL#ri= zgnUj>0A8l^X1CLFm6UOkK&k7yau3-*D21~ zdU0>Rj3hBGrNO*;^>CYlq>q4mh{rcohl^m>_ z)6wf#thgUWZnkS^F%HT3B3VJX+V?5Mc~dG<1;p@n_KUg*sQ3r>fY0jz=+=1 zK>}GNN78OD3bb3?A&hoSnIUaA`ZbB$!gVR3%JE-Hoq!zLZ*Yb9m`uBJTnCs|GaVD> z^%Ud%qIk^50@P<(S<(N;D;YTtAThjmSR`eHLmmrNlS!_`%w|a<3|G>iVPgQJfN9Fb)Yc zhk8NRco-x+kOC31SD6IJSXY8_iie{hU^4h^fH4MrmzFA#S7;0IY(MUUJ3LA0)=C_+A_>+ z80Tmm3!~g9-KoqRZuP^mPX?^v7fgJTwiMT~i`!WBdz!j~b1g0HL9Regjhmmjcy0iL zw(My3-KU&5b2i!#7En`VDbkDEkh4@9d8!0J0P(kckJ@*+6nu!Qf!&m;AI+rh+W3Pj za-%fOdI*lnpZxkUANGrhTiVuB4hZ^~9em>UbC2HmAQMlB zevSe{xF?@L%e*K95$G$7v8!H=573weN*o-#2J}G0a`5gw^v{~Ot}*IxrWc&Z^&HjS zx!s`)HVQ)Hzu#f|WalzZi_V42Hj7*!b$09O1XE_hm!8~|BqXQ|cl(y_U=c2jFfjv8 z7Vo(v(CI>hcY?Fu#hKyTd$=mh0aArle$EUz53Z04(MD!0ARJyWI*0rwcu<=je4`<%`40n#!zlki zn^^hRj7Xa{AcePK0yF7bR;mAi6JY7PykjHZVY0?8_?BB1WxkH>^cW*lD%u9jlp86} zWpFjbamS#cJCbGNdZSr){j|zIh&~p~J+dfH^+?V;iA!*f(dggPLq21-W$$e2D?fV% zx^s0n3wpS2KaGWdh)`8<{_-c#_Ok8q5>+`TWO3;?|C_n)U---a$Kx|zgQ}Neuvo8u z`{IrI;C!jnE4ift%!KQIL2Hmb^JTY=ugY#=hWK_GA) z-T7@qLxHpB$`9}Q;}Fot@Wg(vsp~_qEdtT~JY#rJE7ZcrhUA z(jY0_2O}<}pkTG8;I2*4#NgEB~R@|~_f2OvH3KRD8m z#Bb!VKbhhc$&)x*;7q&{u)7zq9@k&;q@EuO%X+_knf}=) zF<-gVAn3{k5(oQFN4f%}^MnZtS_HgO(+gx>hhjCv%Qk!XK{o=8Y9)0fpSzIq%WC2!wKWGu@YubwK9?wym46Lp;Eay!5G zn-5?)x<>3!wf>>jkae#=K}MRzbs7Ik z{M&WM(K7twXoFe;9yS!N@3uupWk?#_5itO05(3CW|I3+m4QmJAss5EIeehfX<~(k% zuk@9kW9vjsTun}`@|QPAD$WDTJW$iW;rW=C7j&%z&4p02A1oiqEU(nm8X;b!(nUKt zg`91h1`b6IZSx}8I4QpJ9kd1fM~MJp@||!FEESfr#=twu2YtvpEV@AbBa<^RnI&V| za(Bs^qE~~uj?RVT3f@_q_yr2p{;1(M^Uzqm_dGsPFX7)gevriauFISKPxij;tzf_m zQU|bx3?>e-IV03gdp4MQeVhL3Z{5$)O1$Q+7=;pA;F`!6gvDyPvz1B zbBT|?|4*49?Z*$2S_ns5IAjd?J^$D)A2_qL5^y|j+$S6Zem{7|1{};$1R`R*a~DXC zEAB9vETZu49ha=UXk&yT%vm=Ay;jPA`o!E54L>VW9j3oayt+bN8$#*#CM|@kxUbN# zFwL{)*Iq7pG)UcND>)5=5&%>P9n4RLu&xJ(zSLa9Hst5$S5aD5goB>pb*Ad?21r-_%uDFFw#1_E38mR3-l- zeJ^4&DFOhs+H)6hfW#U6Z8?s#UY>LcgjpHopOTKxigwm-%gP9soO`a{R7? z>(pkmj+d{5+~np?YM~qG@~d1}IaNdgU;tCtZG}J9%lq z-PMAvq$fWCLw}H4GYcSL!ywYik30Db1gNnXJe)f52Y*>~7iYJqF*l{%7C74lt@b~o zuSJGyyt#+|Iz8e>j}x5{li=>5sBvMym7j@mtP{XmN4RCflH0n|#cb}(0Pz4I!Gf)s zU#X|Uc!(YRVk#nDohZkJ+>=DC$2P;9wXC}Ov|XK(vWw_*NoA5axvP8*6ZrohO#9{k zV;BP(BV#|&M0`(jTA_<@)HB>2zdAPXw;*UBN&QZ4eR<%dzW$m);Y<;mj2r)G@$khT z&g&va`6eQ+%`VAybRq=ycWdt9IgQ1Takj7PpL1DI+zy zHq>ObyoA6IICx76B1%sTGbEiqu5b;pB&US8>|W}}Zffl`C>*F7YTm1N+Hw5Pas*UE zP#=cgzvrmfW<4Wo(v!j`H{q#3f(WBMzCJnE-%I^#Eq;*hdPBbNmFrCMW^xDWL4nB8 zY;_>mw4djpaxNSNI7KO1z%!MtF7jmWy+ZxB=s+V;u>>#+s8m5bqNk?^)IBhWoH2j8 ze}g$hK_+boy?3zN%}esD)HAz!U{Ffdb5~s@SQ9ypo2JC5tyw z)}@@K;N?e8*fy+qtfWh_vy~h@y9yUOB71mAKp*L3**oGFDPq0DKZmkkXwKGwrWj{u z3t3x$r^wE^`;VVMiU9eHt2Qg3G@w#&UC-wI{Hdd-QFU2lZxLaC>a?UYSP%a+XU0$# z(il%5%@W=_nM}OkAuLd*TP$0CLvjlbX$B)qq&V`#Ec|D=0U(vi0!5B%3f7(8g$w9d zm>+3B4EN0ych-NSd_Q-yGuv+b4J}!0LAvMb;<~b?G}0Q=HDCT@#}S8Qi9I^QH7Rw_ z+S(l+PO5*kg@xCT%GkRt>^e|A7Apa+dOoX`dJY$s{gVq7G?nSuBW_=_lc*>2 z7QJ`rcB^%z(_~!(goK3`<@eru&bwhhFGjX~ zMRwHh*eh@c0=P_7!_u0<$(@;6K0uAOcoG{M+X;FQt~TvWA+cf)_gksWLa(NBesyOv zxgTJp?}26*FwF|mWBp7dz~(6P<FhIaRoh||<(66f zR)Bg|2O9PCVf``ov3j@pF#CKuy*}L+cJ3#_} zcXXiHL1l6EZgc_0Q_DNEY4+)}T*XXTbDJw&7QB=y)F3lCRPiBs3n~n7a4)&$h z6MG&{YZOH#@-h_omyYC-Y5SEJVdzHV)1_)$`^%6P(jK7J zDXOb?%30$~qQW6KRB$EoZ!USinNq5zqM2-}j_% z*(5|%n7s;8I2xzzA7qcVO+K7ZUu24TFGOfn{lU1>em=p3^(_Bmm-?(GzWwv(p*LhQo})z>e!Hpuk%b}v)=2pJrJp9Nim}0C1caEQZD+%h{WvBHQY57tdKR2 zlK`wGP2Fe4-o`G=Yy;xU7-qE_+WL18`u-~9c1ZbW~IxVrFbuRx+!=h#A5%A`K&PS#BenjNWKMeL4GlYiso4Anxj7D2LF)8-M7Xmlczx zI5JJqCDeuwGxdOL^ zskM)le{DQ?WC}t@BoTF&>)(~t6&{lWgpH9ty9cK4mx=WcGmJlsTclo`S>dMK`6fZ7 z{ASQ~`rMkDWZ(iCzDd6gFi;Iawk6xM^;2WpIoY5SluV9xLhZKg%ShPamwJt-5$RUO&Xf6WzCLm3UqFS*{rDk zsY3#lMsvawg)EI^5z8AOa@BmZKgRtIsS{9hZSwoGn1yB=aDbX=afJ4*0`QLkg7z*U z^>M^ov9O}B+GCo36{3z zgsH;9gc6>VhA7^ueC5ii-tG;97caqLN-KTjM~mHoK1!af4O08SYY ztT2p^`2s49=R`@jMQp9}7T39xFz2`Ag!bSAGdRz22TWbXX^d*kW}fyrS_klx-=y_h z4qYi(dvH4IWqGWruCelWKp`Rg`#_d*^i$RWu;-S zfW|K^!pthXp%^>=^LqlvudK|s6_<9^2-EWZU~iu25>CIK#s2Bx^(?*jpBIWwDF(q& z73lbSWD)aGc%oXv?wil5cXmE7*6$6Myc3Zye=viYqp%p;6{pg$BWcKl!|yz>k6J%2 zgl%xwWFq6bkzbr8!(-!&{o`zRuKE=6l8dm@zCz~T;O+wvsh4~QXw zbGd2>vVDHRkB5$EdlZcNfjpp4)S-f#xzsy7Qz1E-)Bx_a6;hr*@TUqnV^ zs_X^f_`<5@m07+V;rSV#&8t3|zI{8w+~e0^M(H(+c%KLsVTsI(KhKR~@w8JH=dRXz zUD0m8y-!385Abnyo7N(}-TzBfWFss>jD3?Sp-Vy--I-}Yf44D4jbw?~gE;FLJ5U`r z6}Pdov6H`1V~FgRl#EhyoAKJzc7bn>7JWdw=|9tE&vo>@g?ww~LNR5XMBtXcDydc7 zB*OQvUVvWJpWs4nQA%2x z=z5%z@5gUYZxh>?nG*xJkFNTy_?3Q&%`U$(@8`wV%~>dUF+o2RGqIH@iV5)+<%eP` zRqZabo+d$sNry-Dz|mP$Fg#7jtyYYK9rx5nXt|vRKbn+{kj#h(nzM8x!>R0p zO;NGl+zaJ4v1Ra*Pp7;wC4$~Yg(jj6`EiRN!FwRp5W|jz$bzcuIvMLzUwe5MBterP$n=)jVxj z{&FP~iV>3GwNZKK_}Tra1NWTR_wxkwV~P#u{nx4Zj};O{-%Uo5aYgu?Y4kB?x+du7 zE?+z@wyCv5J7C_rq3=6T{nq=f*uI&wX1Df8#vQLQae#eqwmK=IsMb5d4t)BY)>H^7 z=wH|HeKy}&rLL;a>uR1`hgO8Rt=zyTj`xA<^PZT31F&^BNUvb;M!bdMxZ~w1moVBPq5D{Z-@LhRzmiv>H`Ts)h~>VGZ5S+tgiH zUxgG&HfmRn*&m=_Id8pQ7YZ-;hT4=Rj_54cS%`XCd?G=tbWFW1+9=hTr;|lP_7B-jN}8`gA!*~4X& z$@kB?vNCMrc8Mnn3D`1O%3P=nc+GGH_ES?+RH1Dz0VLk#hpA&m#i0#vk}NXf<1%J# zuE`(i^47yPMGlUQoSd5awLu_>4rhGG^giZ(srUMQOk=@`-Q5Q8%*S(t;di=i?^$`? zMy$1@_D9hnp*Epg{1b#MOaX03BkMEsd&;^?V!^II^b)w`?fYH@LRsICxcH^bt(u`= zFS+I`7Z#b<6yu!2kQZ4mEYi*&s-Fyej)Z4;X=!IW=IQ7AV-1jq!+S$w_q<@=%H?7z zIK3K3w|;ZKhuku`Jf1+MXci7*3j zTkK{0?z28^x|ASQtXg@Ue@yR-MoVLG3saA^$q}?Q{mXTSywDmIb(+>?DS}4*l3gLD zO8tuJnRM8A*x#zWs+H&acH}o7zlvkw-H@{4AKIOcx1d(E9wDeIHS6i2d#%+E^?1SGm7oMBGj9?4T35HlsWn zkgK1)`G_#Eul9aeM{@EN9ISxApU&vUw#Tmzr4OC1L?*mEpZ@zXY5BR%`oZDySlsh*H+oo>zI8%!l8e-D`h$Al_1c+P51n_Ja}6*2<~{ z^u7-T8B3x;_bVgdfROz3(g{*YCC?nz_BP_m9w6>ZmGKzNjYJ}-4R(kP$AmZh2}*W` z{wTiy5}hD#Qu~Aqkou9^k{9n5h70xO^s`rb|8!DH_KI37PQdRw(!W$|k7&UL^$vG0 z)!Ozm^DxVPE^N+E+@B%%2id{{tM=bM9kOT(t)BTJNBKhs@-*hPFIv`nB#_#M(h6tGhanHf2D6KvRKElugV3{}q zpe(Refddwawl*X(_%dN>8detG<$)15=%tejLe z%}om;U_D9!8^S?9@%k}Gjo;eGNjfcTbNdvF&Wo<>@er>7>Bf>a9Y|4bM~$_mXwf{8 zFC{@Z?#1CM-gS`s0HAw=9qv*E3o3$fI@;O`*>X6|Iv{Sm?^R?0B$XlC@CR>P~H)zfrL@byTLICA2&S<)S%XRT?&raw{?yT($;p5o8sw}l`1`;3=BD> zh{2ybG4cCLjY2_$0+LVldUa@6hZ!cn%p|cUyf;0VjE|4c2@;u9&Q?uwOh7N0>)mcR%-)GqcA~oQAI8`F-0bR~kv0X=??VHV-<&m_9n0>xWN8R%_Y* ztO@(-!{d9lJ>IUK`!siK-HqOQOp*LKq*RBn?IUuTW$hG_`r)qr5~4gi+ISyb|LW0A zn_KEOAMkB$Y>#KWU_xwv>F3?%93%-#(uBuh9-!r{XkprnkFEY&4T&xF%~J0Np=3 z%9nidHNgs%S!iYUdOrEKmc`~7oed-N;t)0SnGhO(UkY)ti3?X(_ck8Z8I~Iwa4+Dd za&6viJPaaK@YwKY?8?6TJtaSCdvi+`xjRq$)TqN?Rjg7C^L5l`>BY^+`-)I?&IX|N z=Pwo`H;n?I5chf79Q*T`D`B@E;$IGc(#H<<+()O;;`_}4YSkJtzV3gSggpssBI`ni zcE#wj2Hq(}HUjl;zj<9egoVGGk4ft@cq8MYGlfprQ=u8p&u}Hm0u3$OyD-xt3Q~QS z_-=sz8soZ{{BCONs$O_-L1rFz*|xR~;gu(E?d(eSb)isZ`EODCwWRanB6)XBCJ7*y z5<}zr+uXFNNX0iHPY1Aj&|CZaCD-@RF>`5`N92Qow;56H%?ty_yJ1WxTsL4u z8gMFX&~NT%xoN`0Ra(h+_ARuCrgt^mL`Cr^L@6rPduxOGoUSZ=v+7YD<^-<^CFgJl2=R687iK@-J5SNX#f$`3S; z@aS;NiPUHoU;p0TUW(6_6bDWpr<>C)5V^Gyq8Wa`TD{AaOCZ2=Q2B;&=7Ak7@FTYg z4`N9;L#qEkg2E&UBSN1TtW^yO=NeL#zNV<+JaVgPEFwPLqiHVj=qsVCrunE7FsW?92xtT! zN>P4a{;Nx(P@9~*KyY!unN7!PV`+&8adz_#%3|bnz=RLQ0sl=B;o}4L>_b;kxkqBf zWGyEB;#o_WZ}=|narY;5DuL|;W_?a)3gvSd9x3`tU!Lb!ke|Ods&Cg@l9%_fc(c88 z_fL{=_^LTI_RltLlbf-uLy#4V+@IsVYzhT;sfp>Oo;@;%oQFe#Ykyjbb7M7+RvQ}1 zDX`Q-OXb%Q!4z4R)sbVMd{CL$B*Hw-%8l^&v!OrnD*Ub9OdIP+r%jEW>@O{BV6o~{ zDs5&%QnA0PJB=rWtWP@3rfuYEWC%CyBkzrt>R%xy%aflAgqiSO=)mB=ul6$1e!R;% zRd5`gpSts9-9pxrA*)u+>^J#n-{WQmU8;CnpJE!~hV@539tw2~le3@cP0yHYGt7Nk zY3+bvmIWxVY(#UCPLRZ}n{IE1^`oZ5RuMSq`D#Zai0{B+G2sI`1}%*@Z<79!YrqGX zCV&X`FU{+4$Yf4n)T?;E1OFS!ChZk_^#Nwz8$gwf8Aq0y=>>C>RZ1ON+k>unvv2gwO2s(u48d9&}j`!z5y`fZdb8vPfv`V<*q$?z$oZi z$9cS$WxY8X(CYCGXJ;qF%Q(J{8$gN|+z%TtLiLeD>|4ebX!&sG$yN{uT-fo!S%|ee zFzk~>gEv15oA=R`_^gRD)6ovQ%xd9@1|hBp;NR4gvOSx0QL5!oOC>Sh%WSyx!hlQP zZo&P)eQE-JQR#_1g==J}(EL*(lZgQ#=O?JcK$0~`=~Srw zN=)a>=J;J+{-d6&m!Xl!0dDS)ox44$a5pbv5d>$JL{( zPKE%_scFu$CPW1*;`bA)d{2Hwsgn4s+dnexEs}6rxh9K4J9%SKt7k2CvW*{gPAykn z7JV7~D2AN}lHQhbT2XCgGP==I!Q;1i9zzI{S*+avtXqT7OxP|tBSoMerVPDGxa`{NUe}SQpQN;T;0>*na8BP z)p4EmlUxSa$0mEPr5WV>2@RQ`rO|bxvo>zkWF7x09p2VxH+TZ&mo$o}2%JF`dFtIrIua9nR?2`zfT?>gj?lR3!j<7--k{7rVQ2_UCNs$MXcR7XKX` z4LY4g)$dQ65H#%yI+W=HgLjE^yW2ULMs5Q8>fzB5!8im$MCO<$y7>@(BBMX4l80rN z*((AZ%q^pCw>z?@pLmPN-h)xM98q7-nD2dEh!V=Vy}jMO>zGnFilFhhIlMcsK0FlS zYd&I2710sldU}*k-5$YYS4dEeY~`}AaIC(rCpP(3Fi`*&(^5j>%9fanXxFV9mC;Lm zj>_+HWz_AhCGuVPGK^#}KR&gV&*j2p|9F0biCNH9M%MD79V%H}ub(0bYdXW^q-XaV1DfBk$OPa2o0Ulz+rCda?7bUM|`*p&YlKqE^NR24XZF97y zOfMa{^0b|19O{UzMq1XNfeBN*?W{A1rL|e#IlG2i9SVK&RsSyWD6nUj0{CUt>$pYV zzqH(&EczT&{3Tqs#@z(>!fjujp>08w%Ku4JkcRD6s3nladE;hKfQIC?{$$b3rjJu` z>yO@^S%J_CaAN)j9IKe8U#WR3M+~4~?>liChez*5Zh2tzE#+pU?mj(tP%CBFS*k9c zc=cn(wbLm{(F^SekYI)U7QfiL7%7Fw%bs=Xyd}5i-+V+4+s?UjG#_L2TW}1gzP&I2 zAM7x|$!RvwlBXNQ?A7&vcP9=T@arz5r)W*@(WBy4E3^&M-5p#=oy}Ou=%n#`3$42p@5+QWvX-OHZnDzL**H%$-bK$HS`vnl2@;d#(du`5EnkBrgg*{t>mOensUhX zZ=jN3i%ByF82&LA2qauUYz~1ve$4n(?wluh6*GpA%@uDLkFt!uYJ~2f-J2~aAqf5? z>2cnKtrsu`j@oaG7Zmb9g6I(;^3=$OQ2@J0CK-pjG+*(o2?E`Hmh{bNK;c{IU)EVpYO(>jM zS7Szn7>t?Pl-2UC?~uMRBurSZ(@bKJU(N%CL)wRy~zvtzlI1lvL(`BFpNaS6o+w5E)d41qOwN15AA$kN#H<1P({*Q|~`Fe2AIiW5mq zMDHzh)*@QAJfMR3CLEf03XEVfL;`~%vO=pLx6QdC6;eG2%t$bp9nvrj77f;?=ZbVU ztzqO|3!~->r)0gWVequGJ4*}&tMt{s-?P*;a1kM;O?Klg)ccYJU!dWgl@;$_HOL^` zE>ma9_fWUQHPg}+KHG)&{P5-yB6>T#$EG~`*x{MvdCkJ%r;D1mbheA43#f(T>L|O- zdstC*IOVGs{`P(b4NzsRqES4md#eRh#%#4q(Q0u@7Bnt7GZ4`|8D#+m>a4`|4VJI( zMEROS4$=&=Q+~c7J_xj9Z;$BM=DC$w!V^S|uxSVKY1S{ntl2f-y(JOMKYy)IRUxCl6b0>|>jM-N7bzs)??0}Zwa z2(<>j;JNf(!S)`{Q)IrY+)p~9cxC9Xv=$y@`=8AN49k?u10e1&k4i|`UhUo{+^k?a z5Q-CCMA6DdEHroc_mn4hM-_WZdUMcYXj+kNhsy_B@pi>ez!yFK=@RwqBE-)R5Zsw| zilRxgqvtNR`-olddv|ALut7ZEG%%ailH2Ol5dK>AAp*Z`B)?YHui>y+cAEzXd534! zRDNwje=3E0zI#(GDTOgc#t-GK&Q_$#+J!NNYW%hCPS}ikhJqQFlmE1o)1Z6+p^lC# zY$=KAaR&P(&uAulvyKFpE$(k2T9qFoJ-6jdP9w;{)S(-?_Z5>c zM!hl*8}yW2pP?@7rggGet`)pX_HDrd)kl25NHrLjUP!)jpv6++uR5uIQ$+9XjV?FF z;7;Q21IW~tk~YU(;wYilp9geuT5@KVYqT1e$8Az%l!qDOu^46KC~l(`$Fpu#g#G%# zBPkxfw|?O)n65?s{otK;N!NGu>k_JE{kRyru8sH?m(s#Z3^pJ`WG{1GZ?gT=@7yD> zw8wK(o_?8<_watK*+JkPqeG{eV017zFU;$t=62YtIH~|JQVFivWV%K~U|Xo$56-AG zvL%QUx#sFf;crnZp=Exr8kq0u6T1fM2jKa$z9!E)K+cFfVNaNNnc~I| z1Y>oX^ya$ue?6k_o3cSx`_kwgHU6IMFUD0@DIK3vQ&D+@;3eYkf_*wXpFbyS0Hj>x z9tMGw9snSX*(jhcX@ui2r+AM-{y8;VlO-4es4*CJ5ja_u4)QBq1tkrWj;15(f95Nl zw?^E-xn%%VDl_^yIJgr@=Noe6@@%_$OhEu;;g`WOoyDR`c-v)zL99~q&0yebzKL*U z1kT=<91XIfhf58CWVTKEcDN6n&LlK-$0sGF_Dy`K;ww~C(Yv?t+(Dwp)8bWE6z6Mg z?YH1X&4+Iem&ubN%Dy!j%$SJK&>lrK(}h{ma~yW`fk3d^}L_{OCdAo z(Goegom5*Ul&t+6BxA14d7)Y9&^hW935Ql!P*O!728EQ4kByn5L89R3?~Mer;@O}p$C}8-Qymb3%PRZ4RZrR@%P=a z0q~FR_OAueqyrWrteyJh(V(?)wg2MeHwp}M`Qd6BbKXwPxZwlZp%5~9ExFQf##5J{ z2GVT}JI7;CTqBwl0hYE(C>(Q4!J+=uJ53)?k=G5R0Li9x8>kg#&Q-~ zvI=~cUZY^-a?PNX@K#kB`9TQA4w{XTyA~W7TTx#A?Z*$ItPaBv5Ry4p#)ECUM+OHk zgY_TE6-;1JO<-U zVNty*r6qu`ntj;pG0PMo6mJ!5zi{k$hB_{R`%D3{Wq~&j-9X=30t~YWMXs2V2qmQV z{H$9VmNLfC!f+JQdmFMv+s+C5jldVAzNSCA^T}JHS{zNA4 z{Z89i!1!K$v_N73V8g!dXIddte#9H;U0mj@hJ=YK6|^L;_5j8C;d-e8;BfSUutn2`W zJ`{;PsdOUs)t=A!_HBMbH9lJX`t|GmD>wWma82v*cccL%pBI$Lg8?04p5(8U^Xw1w zRQK+GU#E~~tq7?*+^OB2tnr-OITUg@opEzBeTAKIL(a^`-s><`{hlXjt zm-4PB2tY@dkpRD=@#@u=AxqfhSOaQng}&#m1O4XdK4OD?o4x%#&Nuld){yG3gBY^) z6%)`Kb{dzCUgD&6yiN4lW!79MshHpdXN-b7jg4{O-wC3*PMk5{N@jwDN-&fx8mHk_ zic4OomXim);eAIkB43)GBN5PoMF#tURvCK0x1K2GA_XeDITt83JZcWrzhJss4`15e z^WS+x0}~S=#l;LO`yACIfBQF^Rfk8y$p}O0?nYwy-uzsuF+F@$3E1t8f!2@V^@Zbi zv*)FV+hJo25?14SQ^av0pV`N>cK|hEM18s5$k=aqYE`AS{)JpNn$7xHCg%dDa-=qW zpi97nnPqfeBNi}O4^Z-6PoaXE-JeKkxIGZBX3_dY&i!g6Y?s{HqYzIg)9vlg)hW_O zh&Me~(OG#h8yf7ZgCg(H*z1Y;S1$mHA4!%snQJnq-r}s9BE>kAt$vuVcl$Olc7T4v zZ?NFGhNla6_KWl&OU)dDmW5;SNfXVQP)Pr!6kH5-lf-=V?|+t$8(DU7#tp~|3w`HY;4 z95qpHtq}R4jsX4$N-Kvde$EP7YIk{n%`Krt^x)Ln(8<<0RGlUIz)k^7^=*mmhwUFE zU1_>6`x}Tlk3=VqaIJEv;c?~;=G&FuKHv84 zL7jWpax5X|ISyN1FlJk2u8}QpSakiAw;5xlqkn=&Q2Gf}T>j3^eib3)^qN-D)TAb7 zl!_g&a$J5r?m7fEuK1asB}n1!4CX>f`}p81)g&RJd-vWwFli<7a(C%hni|5ZO5$+wogtSPe z)W#e@$H1|)>(<)MoP?n_KTW$_E?@knPaLd9t)xIDfw>BPJ;Y4ta0d;#2G}pTHVO#} zNnTu9hDq+R$krN4H-S#Ezvh#;DfrnnCNJk&e!soa%y~L(5eC;Md$W2rMI;T7y$NP7 z-gLL>-GwObtJO#F_wRp{Aqx>!vXHrf-I}Tu@z!>f5+I-G`S-4z|f4 zyju~6CqXx>QpPGdp zTDAuERmvVXPW78_#YOmx%!N7mDX;y6Uxd27+~240p2E>E;~w=d`#$=r%zcfp@l`FW z{pBiKVLkCG*;KLuzYyB31H9~{ijI(Dg!?(Cu4wJ;OR)qQY6O_*+{A;pZk^NKO+oM^ z2w(+3aLIpa`1=~-KuBmC*WIn+1D2=pS~ojgSX%zP4kfFu?&WxZh4H%jSD6WtCPj|| zL%i{7C-e4xicc+x!sZdnNV}@}E2)xB9E<-j`QILC0Scr!xf;-7A|fh^I*E4&?b+No ztQ-8)ZM@FIsoVcroL}^iOPl~cdTlXA3S!`MJi^83C90wndE#Tw0A~HkKnLgIVG<%( zN0ad6jL2^lPeKP{B?ZfeOYP7%7&6B)N)npVLx`JSYeVIu`VW@J@)%%&){`+k=ezZP zKS#ggDFt^vj%_g)D%kQhZKCzvCL7o~L69IIEb@CT$ZCR?;wt&|J)U4nblYnByWQD@ zW=DOzwQG%%i9+u`Z&M(ocdDKU@bk9=Xxo=7s|irp?dYei(eK~izY&sAT+DANar3<` zvVl=ETLM<_L|HXef~utMfOHmiVKb9&7te3_nTYJxT*Xu@O3z6>NdUjK^bGx$SUAh= z%7%>1`EPf+z61QG*9}$U_+d`g4i&xbcG0lBROt5B70xG6v7T->l-gJmg^;Csu?=oe zoP9Ecwz-C+>1RKdF1<2^ztzZNgo~XJ`D+vZWYp~RO6m)J;BtkfbTGH?EeNis7X}B$ zq&QUXW|Gujl^|+6o5X?AchGn8sn(rHEaiaC`jz)BCQ2~+mJs3^3yo~@HKnds`i z*?*YjY(qK3j-C$k{#ip(`rDaTMFkD=3D?wC>B0vG%OVU})|A=bBAP#m*Uvvo&%IG2 z5Qp@;y~}s7EpnYSXqK!ff_IfOrTwiW{uG6ORI?P()BPGcWJz+uJLvGY%b$o)Qd~BfwB}`dpy? zJEN2{$-KS$Q%FLOsy1Bia->`r!^Ias!W|TQo>@ErO}Vg@Kewmd7sDeMMQ(n1O^cU* z0~QEuEtbg7%(g$e*Nu{q>OyO_TdkwtCCeBTgN7By9oa4=>9>z7KlW@UGEj5JFlWz! zo4|k6j0hCLmjTA}Jv|iniTm$Xsw3w`!*P+_I@nQ1-o-`q{QUgy@UZD0R5>-1zMkHZ zy~HJpKV<(eU|}-bny#h>eD_VFV+QYJcATTEEG-9?OZk;lQj(Kj8X9h^B&ki6n)qY8 zc}nKm>FpGpoP>>hj>PztgoNhNp{kXx{y^`FE?kKi+dA z7*F?i2;O)H07W=cWqx$eu(h*OzPqpkR-D1i-SIL4kUWHBnA%SRsWkur^BUIN1c#~) z`=ligo~sD;TOPBaSJ<7U6_3v~O`;IFY(tQw=e~VG24i3m4ElqoEePpBq)gqNY=NjM zC|s>0pHb7S$0}44t{L=b@$F^D6u$UZz*|QKXhx~1h)4+@{Qo}wh~0LJls-;d&X3doq^=R7`bW0(mE-l7 zkKy&qAjl7%Zoa%g1%;2`G2YY5D}11Tc6K&QiK_K5lIdacz7^(GgS(Fy$l}zI2MgVc zWH6KZoY(`7!hSC2$+t;SdxYa92CZ#xkCY&=o)F)&F8-%rGyuC>c`7OrK^~#4#9xN2c9ryVG_L#tc~2qWEiKiUO~DXgx6MI-=VA(NJIc&t zQ=a0C=YgdfR3wo8VAM|CfL}3IF(!vK1GX$t=@Mp1$M0q^9}ZUDH>d-lKRsWV)lVm_ z^KRUYDI#E#{?nwMTT)V4jvE7%jw@s4H=4i12?(^*@uK#fOM2t)KNgyh;<{U=t19Pp z!V7!`2t)!rNhNjH?$HpGxuqgqC^3P%*7#2vX~4p{^KhH6^EKYd+CWx3>o^0f?eHhJ zT$<|G6WQFC$|Ve-B$9*eJ3fX*J)?KLj%Y?=w~^!?4QY_1`;8S96`-}l>5QhoCmZc7 zWJrO^kY{w#GBUFLtr5V2Dzoll{QxjB?U5)u80W?ZTYt1T*lhxQckCCfM3+OC^}B#J z(rH+e&`RsBG)ZSHDc%DuMqmPjKKP@j0srnAuyWPf0$`4@49S+0{<3Z0PczL*vHf4% zy>(EO?fW;pG=ek;0+I@dQi_O(l$3}d0wRqlAV^Esk^%yPN+}H@(%qd(iF9{&H_N`q z-uL(W&h!5F%sbD_Z|1p&xp&>Y_PWkE&LciYeRTO?kp1B`0hV7fgij~%zr_9%|A1J4 za%oPGkOD#xeyRp_Fm&VJ!_EBDdTxT?xCS5vJ!_xY2RwtZgByzlL>BatB`K4ICS3=e zZ+d2$gY382neIcmX)*g1wW^)A8~2b$fktEYgSs_js9{QrcZTlH*;Q3zgh|g;Z+bdy z-QeTvD$kONk%d@0lFGR$c7i0G-zh&9rZNqk1PAZYhj8EfX3^Yw&SzU@`8^uK6H1GV zHSyzgl+(zn#CnOR_-*HYha*dOqlckORrHo?hJ&i8_4!Uzt(_eT7F=4HHX}Q}&}rN7 z0X5MzQ33>$`<_acRxy!;Xy3TQs71@Fp7T77`(%wf!V^x1wuLi9@A!uwHc=@H*DzHT zurLnX;CO~4^y%dY*W(?di_Bu8^ONhMk)7}4NuaHo7L+D$ z5Piz|L*lnIp_tuL*yohx?l*nHR8I-nhi`G7Ca~9G-L;*Q_mxU2Vtxk9qD1WXniwAy zz$)PA7S4gw0s00bpd3O8bVD~9`Z@6(;%Z%cZfJj(m# zU_e?cA^NkVsAww5pQ)k7{WQ;@9$OUhd@iIkp@W8B9VyN1M{^1Sb|_og8rlQ49F zT=V&J<5iNnv#Qtak5fxa?@rsp%;dm?xfCK>3=Y0do%c?PXS$^II|aT_Almp&nnpyW z#CO+^aX3tcZo%Gd(}ysvTTJ@JW;CG88wL*z3=GgCV+3B|8+Sx|1<~>u>*g>f^6FIu zJo>_MoyNQQ_hxetZMVybpq6q1K0BKr!l9hR0?A+CCA=xY)v<|yuu;4M<3>~ z=PD_j#b?dB1}$Y@OqN z=;%%tv(Wtqf z$>;Z>wd}U*+qap|_DdgkpzXdfdS_;4Qjq%FN055TxWjvY-$|(%Y4nXNo)9c&Ie542 zbfZ$4R@^dbK3s8y5q1@}k;Au7E$Ox@Td=VdulT6T@7$<%+IPY8m1@7)lbk?4& zH-Y)&?Cj2+^5?v|6@qgDnS-OO*xSp!Y2Dx}eT4JQRQ>k+$lLtmdV&y~03wF<-yC)v z?EWg19qcv3kues>&)c7wzP8_A>90^lEovB2KRugFH~N6K8Y}B241tUvu%H~036+2E zM~q_q1T|B*9}S?oO@>l@1x#~aB}H~RJuTig`=N}dUE#&MM$ga(2M*O)S&EsUxQ&gw9P)5_`OI<+^c>o}e&4j7r~Xf5!f=C^b6ttkcBY03=k z5$%_HufRQ7^bV)}nWa2*%w9>ALx^Z(DAx9;=^LQ3iJwiAZEGO+H6nZOHB9I6N?EF? zP>3DRQO#P3pKpiegUSNv?vN(I@m1NuG#ytSL}G0%vxHmRW7;MX=-pspk-gFKCTV(a_yXNsOGXh95d@-399_j%ibc^QqbnCeZ#34BO)lrzT&0}$P`BXtdxo!E z|Eg6K6)Ja*Fi&IJ@n~zh?Y%w=lbb&o^G8M5To5cA%Kp|;97!U~^D&E(INMWPKg6Qb zo*l(SpR<-?{GxP9e1fVVef9-}ud=(c-)^SAK;s_yhZdn#yclcWjk`b1caId|aYPW669ee2ZAP z7kxgN@}!EeR*E%Nw(UE~3^sS=%l?gKwXYw!MxAS-NBC`Kn!dmD>TG{}Ae!m?H~Auq z7{O5bbyhvD8#j8J7!ArNfOjg3pk6{wRttJQkyDl=x2Wt+M1QOnMO9O%WIn*_Mc3TigwQ+pNav^eAiN^EvWVu4-#`=2y1}(Jp^PIx_ECl)9Sx2h^{)C3E~Sr z`EYW$w}(43Bg`3SZFJu1Sly#iJaL??gE-(m!&k}RQ_OP_olHpvjoTwDespp&!Hy|I zluS!8&3ZLvZKvK++qf$}`vGj|h)ERRY=a;11!SR?0vi^5`F4xb8c4HxOqvN|SXXU6V&ba(mo#xT*wIU-F8;dD zu`&t^Z_myP&wo)C6Yyr@r}KVy!DVJ27P2w#Wh15cCau1k*J1)vZ+CT%03nN#c9%iP zxZ3K9OZ&-|BQCO}sGe|#&vH~+kf*#K)JM8YMN^AEKcv`e{P~m7yE#-HWzrG-$@c0Y zaPCMiz0_O@q1(!=;(oa+miJ{uV|NoCuR592=j;EHHZDTF@L(p=Q^ zxAs|v<+mXF@Gn4%n9N+(SSZ{oFzx(Yzoi=pA7Wn_QfhvEKlosu)PORY4;pK7DSbDs zean_hu>COL=e?ysiY{~S_%pYB9d+;AulERpn7vq|xs=MSyj@q)(*%!62`oeK+vk6Z z%)~B>&=c0505%))t7)7Jf1_hc_Rc#Ya_^A4`_QunEX*ps{vQHA+styTo4-He;^tN; zllWuK621cJW6OF6E`_&hh%i`L7l0d&g#AtU15*|N70h>M&biRoqlR;7^iu$b@>_Wt zw_bOOV8Tb~3)Ks^soRW#Dn4`@sF-Y*#kpiqTd#9B2~pg8)Jidx7Vn}!mGq}mMN8c$ z_hzq90E7{<*BEtfPOG?GeosdM@l?Wd4&O78pfo(!(OFZs-{l^!aJo;~4T#qlev-Nk zu9=8N{}jWX@4n2H7*e`c*?idm9cgU)l z@o$jGTFdii7a}^M1#rMzx--%{I+}U7zn^*q)n448Q{%^T*_m6qpnFPD4(WB&>|oy$l>No7*2Wm} zm^&XFtU#Urrw%K=bgfaNx5>9Gj_3K1>8)Np8z?K7(WCao)-7jJJUWH_@pog7EhEE-N%sdRNzBsC<%;2Z<|0w6h#B_!87qeqZ%h`^ zsSKSZ?tOvD(lA+X2=Q=MD%5C_G33VAzfoRf0?q7Q3J_mc+66W$R(W4lLV(O;2C3{e znwJj!8R`Ii5P2R6Ua&bWw$l&$WLl1yH^vVDA%LHZA<I!d&2tlHyS~ zS)JzzYlOT^dPBZj=#*k(ZdEV|gAgb*c>I$!9d2ZXD(|W0-xD;(n{34oLr&MX(4yrMT;JCB*pkkbbSIrB#U8c@!kgc7g1wc6vq#7o>uH4s14b zF*2GD`{nB5LX_;Dv1@kqMR=j>q2+8oq{q^uyGqU$7K~wJZEXky)J=GZDWyFMU6}&U zyXBa%5D)`~g#b`fp>Ldb16_aZ;P?U+$JE+zVau#i)gX1-qH$8uLu30eh7eiZw_mDA z)wQi0R^!P%=V>+F6Eg}Z$B6Je3@0upcXM&yxbbd+m1tefMQoHRsM(GWCvOPfbL?Ok zo{u6!9^oJipte%WY=$|pZ9?t-fHuMtFzBR2DgHyGD^d0XshgL2IsaoPXU$GWC7{pQ zNS)>no$5n;^fGY>)d#@4RT_)UDijONU*0tDNES&>Tqg2+6H}%7B7|soej$C&ZR??H z6<1f4g82zb3HAetykuDXQd;T{~Q4`eoidxc!dKuPr z{uTPr+l?ajXs}h~iO2crm#T!y%O0I-I*tyj=C}s=UO{9^`JSLawKII?2BKM}?ol6t zbjkS8HzKB>B}8hpRkmi{y~YZt>a_KX+?*Vyg1GyVq+#4{gl+a6a!2#$o6N^hr}8OG zzqOYswv6y&0&HiGN8AO93XQB6pBBFj0lHx#QD=+$V&Vcg7(>W3309Z5OCNgaL#5N@ zWZmS#xDl24{bHAWvj;KGe#hY8O>1W!^BX$E0HE*-tftYgtNnk(#jOo~hkJ!E2ysz( z_`w=j%wjr)jKfMF9ed$8XMDO}hSnx-JGY9*pQeV%h7RR6d(_y>wqz}wm?&h4Z(mNq zR?)amP- zfg1BtKU$9y)%BRkqxUtZftwSh$| zV5HU94hE`jrZ0TTevyxz5lcku-+0pHaZvaj>G*L4MXmFH9=JMrZXxAq zXEtmJ!BaYJvgo`O^6>x?u)7+oj<32=SeJZR`F=wU4FjeG%zC} zC1YT;OYKCqOmX#_Ac89Wghv5B32o9~!&z~Q%llw|z^;DCuD<$2dcqLF0Sr7@;t_G5mWQ_&4^Hy!GE;`a5RwQ;_hHV?nTUkTz2C1Mt^? zo%Ea>B?8a&(b5~J2~Dnb>&GJ$29US>VGCIGu2v{8i&Kv#6+aQc;U-j9qscLcd;UI$$Zu{P>a7&dyF)CA*4ped^qhXPGchUls}Nv_swq zegM#6R-Z+TXia8Zjq#Cc{-5RFDYXmhNoi@nx`jB1gEO)o_pc^=JPsKP>?U#k>L;T0 zjLYIR+9WM(bP1F-QvdybJPA`r(B6W!NkpsEGEU5LOc+rI1VRpVf=o5UZ zgtCi^`wOje%mS<{CZ6wFRsYL&Ga8|-jn4gwaDW}tCSE_xDf}>MC35A;6)<08w>hF# z9sc(B8{I4=SEl*UTTy4At=@9p6|8}(wH&Xg%D!)ctDFDdSO88^!@0vwsUgxip}E<2 zH<>r@d^KNvgp+sApyJNpE#2c8@4G4!CQ`sbbV+KB^{h^np637g zN@-JN8#ou|9RK`W>)u=MOjCwPJ4T}vSe@X?3g^k+8nu<0 zKd444a&h>>=)Aq^S=RjEz`W&7z{cuhD3_NpC!QfCx3nOJV>$xMv@i8lY^MK;Y84w& z{vN7jVq|2+scc89prW*-#6^e7F%PYJWAB{yb1~=Odc7O}cY2!@{pVZ+4~)xUwQ;QB zEbs2KnvvG)4Va!DtVbH1YO*3#j>Agf?RBK-|InYbTr2(yP`NJYZ(Cy=nt8>Vuu+x(GotP=EPlItWBs42O z=_58Wv!3Y&1_bQ*{fEmnAGmwMzXJk@u>SX5J^#Bdq5mV-DU2YX_;MN)AY9f{Yk33= zosY-}1$rzD`u9Bm%<|8C80kTo{1+P*%;k;@0-ZraO)U{f*U21KRiWT$x&)t>q&dDL$&MVrx%|JpNc1XXmbsfp-p&o zwLd(oe&Nfa9(WS8rTSZ%rR^G>U*pT_ii(jV-Te^efKthc3qW2uZC*OJcIwkrtv>AB zBEF-RIU;-aSR)rAa9%jR*cNLZbm+ zcFM&sNs+fL)N#^mpv@FY(VW$UN^72AMp*WD+9z)ud)$5(b2d%dLNdLGcpu}t#1_7Y_mIWNpIQ4Extnvh6+2_*>M%-{$~3W zVC>PQF`pG0d|F%i><`w)%8C@Ulbu+6Xw)X^*Z5ek>+UV)uOAMK-}NyCN(*jtu%76J zCyj`5J68wTCqLVIlnO&$N`M##4cRvxRz(?Wr{28;;>RQB&>jlBEuZql;ZbEJ$`1DS zG;85WI%32-)u_d{NHv>14d8X}-JU$=EkkE^nW2?kXbCBNxw*L!2u#I%MGk!sV!ZxL ziTv+(JD=z3SvX&fe*2fou{$gswCf~aeS;eH|K@|n)(17l-rr}lJ!gl85qb2H;= zu7@`4c0sLF?WPme{Ta^N$A(-qCEyT0kb8&5S+T@f@G_c?N>jHFIEH>89%f9Lp zL${}m89LjI(WjxkUP{gG;~%sM-XG7Yk9YPas=c<)&!jSGuA1=JDHhMDA^~b9Nq@)c z#$=5y<@mDT)A9|EV|X3O4LxcNpf3Y7YTJWK z!R_jgyd{ug2#FRWX3`m zhL^%G94pTvZfH~#=x{pe-W7MNbGbuwQ`YP3kJ;WYp5u!?Gd^9dlH@iYgojUm!=T-2 z(Lp{^2wCCq(Yd)26?qh2?%kxKB5Ig={mK3+CK}aZwB#j(A8Y;bD}N2In5q7SkM~yx z83+iCpIdawik(iTpJ~iV=!!;#lBMWYIwWOfb@bjU+&-EOO@TBz7-9S4W9U-{k?`>m zoSRFK1Yf+@;D$5rgJWZ(!yXs?d^$>+7-m>#q0*FUoCGa~sLX$t2)eK2>^iB>@Ll#N1va z+;_~$9X0fK+H~}G;-jbynyR!I73zq)uL1q#tiLms-Vqd}LyZg%->m6xxRLuE88*|=q2D8}imsUusJqg`P?IWQ2pO&Vo-JQLtJ z-xl$3;$qxQP^>H*-u_)WS+vG z(BZ^&hL(%4tq+K=23_LmVRoLQ5Z$W7sqtXfDKY65f(0#LVPFo2bKzB@%tL`YooRK=go!Z(@07?1aApktx)F^9 zi8#4ysTJKBH01{`M87n1P&z4$3tZ|7?-QX-Cl4bj!>Etw)3DB^+{p#8N&!54I>tVg z{H`yp#ZOvgM-to*G`j{r^}=DePHt7T-4aH_;vLmLS#WJ)$n5Rg5a)ZANIIxAy8;gC z2C!V9Fp#k#4@8aK9pmnyAQM012jmY^E$A}>W|Wf&-1JaM5k4_o?pxBv?hoOuF=wpS5Vd0&u#Kg7UjW}7sZ3Zwkh|A-@k6x zDl`t+X!cJj&o2Ln`{6on&*nXzE;4E6`JTwv1ecEKvCPfQ`>JDsfwpXB5%NX#nIh40u~j8j1*2NrL0*>hZWLk(_|;`6yECgg$^dcw@NGe|pepX3b12 z&ATiPT_k^XrpZ?4T5WnYfO=fKybjg3FY#!7w;CyGjaE(vfIqPA#z>+TYWLAzwQw

    nqIi(~mmnwp%V8V}M2^do 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 LNkvXXu0mjfH Date: Wed, 7 Jun 2017 23:07:02 -0400 Subject: [PATCH 133/261] Adding a double kitsune tail! Why not! --- .../vore/appearance/sprite_accessories_vr.dm | 6 ++++++ icons/mob/vore/tails_vr.dmi | Bin 57080 -> 57629 bytes 2 files changed, 6 insertions(+) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index f1175a6fcc..8f125de983 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -471,6 +471,12 @@ desc = "" icon_state = "succubus-black" +/datum/sprite_accessory/tail/doublekitsune + name = "double kitsune tail, colorable" + desc = "" + icon_state = "doublekitsune" + do_colouration = 1 + /datum/sprite_accessory/tail/succubus_color name = "succubus, colorable (+wings)" desc = "" diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index 88c9d4139e516d890063155299a02a0f528bb29f..284ffd87666cd84256a3932e0a9efab8ce75582f 100644 GIT binary patch delta 9730 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 delta 9176 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 AApigX From f2847f502344e61cc25e68aefa6aed3c73ceb3c5 Mon Sep 17 00:00:00 2001 From: Layla Crosse/Occula Drenn Date: Wed, 7 Jun 2017 23:15:52 -0400 Subject: [PATCH 134/261] Adding Seiga's Gazer whitelist! --- code/modules/vore/appearance/sprite_accessories_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index 8f125de983..c0b3898823 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -535,7 +535,7 @@ name = "gazer eyestalks (Liquidfirefly)" desc = "" icon_state = "liquidfirefly-eyestalks" - ckeys_allowed = list("liquidfirefly") + ckeys_allowed = list("liquidfirefly","seiga") /datum/sprite_accessory/tail/miria_fluffdragon name = "fluffdragon wings+tail (Miria Masters)" @@ -898,4 +898,4 @@ name = "Centipede (liquidfirefly)" icon_state = "ariana_s" ckeys_allowed = list("liquidfirefly") - do_colouration = 0 \ No newline at end of file + do_colouration = 0 From d6b68dabdb5cec31ebc4de1d8a60f63956d6d904 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 19:45:01 -0400 Subject: [PATCH 135/261] Standardize MC subsystem initialization boilerplate * Based on https://github.com/tgstation/tgstation/pull/25386 * Create macro for defining new subsystem types. * Create PreInit proc to handle setup that needs to be done before the map loads * Rename garbage_controller subsystem to garbage so it matches its global SSgarbage variable name. --- code/__defines/MC.dm | 8 ++++++++ code/controllers/subsystem.dm | 9 ++++++++- code/controllers/subsystems/garbage.dm | 26 ++++++++++++-------------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 90724a2f98..08b8d223ec 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -51,3 +51,11 @@ #define SS_PAUSED 3 //paused by mc_tick_check #define SS_SLEEPING 4 //fire() slept. #define SS_PAUSING 5 //in the middle of pausing + +// Standard way to define a global subsystem, keep boilerplate organized here! +#define SUBSYSTEM_DEF(X) var/datum/controller/subsystem/##X/SS##X;\ +/datum/controller/subsystem/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/##X diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index ce9558ca4f..ff81fdc23e 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -27,8 +27,15 @@ var/datum/controller/subsystem/queue_next var/datum/controller/subsystem/queue_prev -// Used to initialize the subsystem BEFORE the map has loaded +//Do not override /datum/controller/subsystem/New() + return + +// Used to initialize the subsystem BEFORE the map has loaded +// Called AFTER Recover if that is called +// Prefer to use Initialize if possible +/datum/controller/subsystem/proc/PreInit() + return //This is used so the mc knows when the subsystem sleeps. do not override. /datum/controller/subsystem/proc/ignite(resumed = 0) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index e849b64be6..117786c40c 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -1,6 +1,7 @@ -var/datum/controller/subsystem/garbage_collector/SSgarbage - -/datum/controller/subsystem/garbage_collector +// +// Garbage Collector Subsystem - Implements qdel() and the GC queue +// +SUBSYSTEM_DEF(garbage) name = "Garbage" priority = 15 wait = 5 @@ -34,10 +35,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage var/list/qdel_list = list() // list of all types that have been qdel()eted #endif -/datum/controller/subsystem/garbage_collector/New() - NEW_SS_GLOBAL(SSgarbage) - -/datum/controller/subsystem/garbage_collector/stat_entry(msg) +/datum/controller/subsystem/garbage/stat_entry(msg) msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" msg += "GR:" if (!(delslasttick+gcedlasttick)) @@ -52,14 +50,14 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" ..(msg) -/datum/controller/subsystem/garbage_collector/fire() +/datum/controller/subsystem/garbage/fire() HandleToBeQueued() if(state == SS_RUNNING) HandleQueue() //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. //Don't attempt to optimize, not worth the effort. -/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() +/datum/controller/subsystem/garbage/proc/HandleToBeQueued() var/list/tobequeued = src.tobequeued var/starttime = world.time var/starttimeofday = world.timeofday @@ -70,7 +68,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage Queue(ref) tobequeued.Cut(1, 2) -/datum/controller/subsystem/garbage_collector/proc/HandleQueue() +/datum/controller/subsystem/garbage/proc/HandleQueue() delslasttick = 0 gcedlasttick = 0 var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() @@ -124,12 +122,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage ++gcedlasttick ++totalgcs -/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) +/datum/controller/subsystem/garbage/proc/QueueForQueuing(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_QUEUING -/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) +/datum/controller/subsystem/garbage/proc/Queue(datum/A) if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) @@ -145,12 +143,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage queue[refid] = gctime -/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) +/datum/controller/subsystem/garbage/proc/HardQueue(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_HARD_DEL -/datum/controller/subsystem/garbage_collector/Recover() +/datum/controller/subsystem/garbage/Recover() if (istype(SSgarbage.queue)) queue |= SSgarbage.queue if (istype(SSgarbage.tobequeued)) From 60ffe4b00f13fc618bc44c73b82c921482d1d25e Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 23:27:27 -0400 Subject: [PATCH 136/261] Ports garbage collector improvements and bugfixes from tg * Writes a log of qdel() problems in a condensed format at the end of each round - tgstation/tgstation/pull/26135 * Moves hard dels into their own proc so that it can be profiled more easily, and uses it for the various types. Includes bugfixes too * https://github.com/tgstation/tgstation/pull/26210 * https://github.com/tgstation/tgstation/pull/26570 * Fix a bug with qdeling non-datums - https://github.com/tgstation/tgstation/pull/27434 * Fix typo - https://github.com/tgstation/tgstation/pull/27730 --- code/controllers/subsystems/garbage.dm | 75 +++++++++++++++++--------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 117786c40c..b07337e803 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -50,10 +50,28 @@ SUBSYSTEM_DEF(garbage) msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" ..(msg) +/datum/controller/subsystem/garbage/Shutdown() + //Adds the del() log to world.log in a format condensable by the runtime condenser found in tools + if(didntgc.len || sleptDestroy.len) + var/list/dellog = list() + for(var/path in didntgc) + dellog += "Path : [path] \n" + dellog += "Failures : [didntgc[path]] \n" + if(path in sleptDestroy) + dellog += "Sleeps : [sleptDestroy[path]] \n" + sleptDestroy -= path + for(var/path in sleptDestroy) + dellog += "Path : [path] \n" + dellog += "Sleeps : [sleptDestroy[path]] \n" + log_misc(dellog.Join()) + /datum/controller/subsystem/garbage/fire() HandleToBeQueued() if(state == SS_RUNNING) HandleQueue() + + if (state == SS_PAUSED) //make us wait again before the next run. + state = SS_RUNNING //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. //Don't attempt to optimize, not worth the effort. @@ -98,24 +116,9 @@ SUBSYSTEM_DEF(garbage) var/type = A.type testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --") didntgc["[type]"]++ - var/time = world.timeofday - var/tick = world.tick_usage - var/ticktime = world.time - del(A) - tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + + HardDelete(A) - if (tick > highest_del_tickusage) - highest_del_tickusage = tick - time = world.timeofday - time - if (!time && TICK_DELTA_TO_MS(tick) > 1) - time = TICK_DELTA_TO_MS(tick)/100 - if (time > highest_del_time) - highest_del_time = time - if (time > 10) - log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") - postpone(time/5) - break ++delslasttick ++totaldels else @@ -128,10 +131,10 @@ SUBSYSTEM_DEF(garbage) A.gc_destroyed = GC_QUEUED_FOR_QUEUING /datum/controller/subsystem/garbage/proc/Queue(datum/A) - if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) + if (isnull(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) - del(A) + HardDelete(A) return var/gctime = world.time var/refid = "\ref[A]" @@ -143,6 +146,30 @@ SUBSYSTEM_DEF(garbage) queue[refid] = gctime +//this is purely to seperate things profile wise. +/datum/controller/subsystem/garbage/proc/HardDelete(datum/A) + var/time = world.timeofday + var/tick = world.tick_usage + var/ticktime = world.time + + var/type = A.type + var/refID = "\ref[A]" + + del(A) + + tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + if (tick > highest_del_tickusage) + highest_del_tickusage = tick + time = world.timeofday - time + if (!time && TICK_DELTA_TO_MS(tick) > 1) + time = TICK_DELTA_TO_MS(tick)/100 + if (time > highest_del_time) + highest_del_time = time + if (time > 10) + log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") + message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") + postpone(time/5) + /datum/controller/subsystem/garbage/proc/HardQueue(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A @@ -157,15 +184,13 @@ SUBSYSTEM_DEF(garbage) // Should be treated as a replacement for the 'del' keyword. // Datums passed to this will be given a chance to clean up references to allow the GC to collect them. /proc/qdel(datum/D, force=FALSE) - if(!D) + if(!istype(D)) + del(D) return #ifdef TESTING SSgarbage.qdel_list += D.type #endif - if(!istype(D)) - log_debug("qdel() was passed [log_info_line(D)]. qdel() can only handle instances of (sub)type /datum.") - del(D) - else if(isnull(D.gc_destroyed)) + if(isnull(D.gc_destroyed)) D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. @@ -196,7 +221,7 @@ SUBSYSTEM_DEF(garbage) if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() SSgarbage.HardQueue(D) if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - del(D) + SSgarbage.HardDelete(D) if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. SSgarbage.QueueForQueuing(D) #ifdef TESTING From 4e8d1c3cba2e2e88d7215f3f804dba304619a3db Mon Sep 17 00:00:00 2001 From: Belsima Date: Thu, 8 Jun 2017 09:23:25 -0400 Subject: [PATCH 137/261] Replaces lantern sprites. --- icons/obj/lighting.dmi | Bin 41526 -> 42859 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 736308440d23204a1f3eed1699680a47946d600f..cb4d4042c60c088428b2df0559a075e38f2a7689 100644 GIT binary patch delta 25689 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 delta 24345 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 Q-8po| Date: Thu, 8 Jun 2017 16:37:26 -0300 Subject: [PATCH 138/261] Adds ERT place and shuttle. Fixes minor things in both Tether 1 and 3 such as some weird air alamrs set to 0C and some consoles in atmos. --- maps/tether/tether-01-surface.dmm | 63 ++++---- maps/tether/tether-03-station.dmm | 2 +- maps/tether/tether-06-colony.dmm | 256 +++++++++++++++++++++++++----- maps/tether/tether-07-misc.dmm | 7 +- 4 files changed, 249 insertions(+), 79 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 564f67fe31..e91f617d03 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -119,7 +119,7 @@ "aco" = (/obj/structure/catwalk,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "acp" = (/obj/structure/catwalk,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "acq" = (/obj/machinery/door/airlock/maintenance/medical{name = "Medical Maintenance Access"},/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/mining) -"acr" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/maintenance/lower/mining_eva) +"acr" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/maintenance/lower/mining_eva) "acs" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/maintenance/lower/mining_eva) "act" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/brown/border{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "acu" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) @@ -401,7 +401,7 @@ "ahK" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) "ahL" = (/obj/machinery/atm{pixel_y = 31},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) "ahM" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/machinery/station_map{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) -"ahN" = (/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) +"ahN" = (/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) "ahO" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) "ahP" = (/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) "ahQ" = (/obj/machinery/camera/network/northern_star,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/turf/simulated/floor/tiled,/area/hallway/lower/first_west) @@ -741,7 +741,7 @@ "aom" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aon" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aoo" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) -"aop" = (/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) +"aop" = (/obj/structure/kitchenspike,/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "aoq" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) "aor" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) "aos" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) @@ -930,7 +930,7 @@ "arT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/maintenance/lower/solars) "arU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/engineering{name = "Civilian West Substation"; req_one_access = list(11)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "arV" = (/obj/machinery/light/small{dir = 1},/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/maintenance/lower/solars) -"arW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/lower/solars) +"arW" = (/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) "arX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "arY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "arZ" = (/obj/machinery/door/airlock/maintenance/common{name = "Solars Maintenance Access"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/maintenance/lower/xenoflora) @@ -1236,7 +1236,7 @@ "axN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/landmark/tram,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "axO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/camera/network/northern_star{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "axP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/maintenance/lower/solars) -"axQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/solars) +"axQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "axR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/lower/solars) "axS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance/common,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "axT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/maintenance/lower/solars) @@ -2716,7 +2716,7 @@ "bal" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/mauve/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = 25},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/rnd/lockers) "bam" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/mauve/bordercorner2{dir = 8},/obj/machinery/camera/network/research{dir = 4},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/turf/simulated/floor/tiled,/area/rnd/research) "ban" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research) -"bao" = (/obj/machinery/computer/rdconsole/core{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/research) +"bao" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 22; target_temperature = 293.15},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/solars) "bap" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/rnd/research) "baq" = (/obj/machinery/r_n_d/protolathe,/turf/simulated/floor/tiled/dark,/area/rnd/research) "bar" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research) @@ -2880,11 +2880,11 @@ "bdt" = (/turf/simulated/wall,/area/engineering/lower/atmos_lockers) "bdu" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bdv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/lower/atmos_lockers) -"bdw" = (/obj/machinery/computer/atmos_alert{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"bdw" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bdx" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) -"bdy" = (/obj/machinery/computer/security/engineering{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) -"bdz" = (/obj/machinery/computer/rcon{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) -"bdA" = (/obj/machinery/computer/power_monitor{dir = 8},/obj/item/device/radio/intercom{dir = 8; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"bdy" = (/obj/machinery/computer/rdconsole/core{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/research) +"bdz" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bdA" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/structure/table/bench/wooden,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bdB" = (/obj/effect/floor_decal/corner_techfloor_grid{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bdC" = (/obj/structure/railing{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bdD" = (/obj/structure/catwalk,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) @@ -2912,7 +2912,7 @@ "bdZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bea" = (/obj/structure/table/glass,/obj/item/weapon/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "beb" = (/obj/machinery/computer/atmoscontrol{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) -"bec" = (/obj/structure/table/glass,/obj/machinery/camera/network/engineering{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) +"bec" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = 24},/obj/structure/table/glass,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bed" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bee" = (/obj/machinery/computer/station_alert{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bef" = (/obj/structure/table/glass,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) @@ -3336,7 +3336,7 @@ "bmh" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "bmi" = (/obj/effect/floor_decal/techfloor,/obj/machinery/camera/network/engineering{dir = 1},/obj/structure/dispenser{phorontanks = 0},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos) "bmj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) -"bmk" = (/turf/simulated/mineral,/area/space) +"bmk" = (/obj/machinery/computer/atmos_alert{tag = "icon-computer (NORTH)"; icon_state = "computer"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bml" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bmm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable{icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/recreation_area_restroom{name = "\improper Recreation Area Showers"}) "bmn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) @@ -4205,7 +4205,7 @@ "bCS" = (/turf/simulated/wall,/area/crew_quarters/freezer) "bCT" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bCU" = (/obj/structure/closet/crate/freezer,/obj/machinery/camera/network/civilian,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) -"bCV" = (/obj/structure/kitchenspike,/obj/machinery/alarm{pixel_y = 22; target_temperature = 273.15},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) +"bCV" = (/obj/machinery/computer/power_monitor{tag = "icon-computer (NORTH)"; icon_state = "computer"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bCW" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bCX" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass,/area/hydroponics/cafegarden) "bCY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grass,/area/hydroponics/cafegarden) @@ -4926,7 +4926,7 @@ "bQL" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bQM" = (/obj/machinery/camera/network/civilian{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bQN" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bQO" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bQO" = (/obj/machinery/camera/network/engineering{dir = 1},/obj/machinery/computer/security/engineering{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bQP" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/mauve/border{dir = 8},/obj/item/device/radio/intercom{dir = 4; pixel_x = -24},/turf/simulated/floor/tiled,/area/rnd/research) "bQQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/rnd/research) "bQR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/rnd/research) @@ -5202,7 +5202,7 @@ "bWb" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/mauve/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bWc" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/mauve/border,/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bWd" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/mauve/border,/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) -"bWe" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/mauve/border{dir = 6},/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) +"bWe" = (/obj/machinery/computer/rcon{tag = "icon-computer (NORTH)"; icon_state = "computer"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "bWf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/hallway/lower/third_south) "bWg" = (/turf/simulated/wall,/area/tether/surfacebase/shuttle_pad) "bWh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/tether/surfacebase/shuttle_pad) @@ -5346,8 +5346,11 @@ "bYP" = (/obj/machinery/door/firedoor/glass,/obj/structure/catwalk,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "bYQ" = (/obj/structure/catwalk,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYR" = (/obj/structure/catwalk,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) +"bYS" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/item/weapon/wrench,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) +"bYT" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals7,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 4},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/tiled,/area/engineering/atmos/hallway) "bYU" = (/obj/structure/railing{dir = 1},/obj/structure/railing{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYV" = (/turf/simulated/wall/r_wall,/area/engineering/atmos) +"bYW" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/mauve/border{dir = 6},/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics) "bYX" = (/obj/structure/railing,/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/structure/cable{icon_state = "2-4"},/obj/random/junk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/south) "bYY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/substation/tcomms) "bYZ" = (/obj/structure/sign/department/telecoms,/turf/simulated/wall/r_wall,/area/maintenance/substation/tcomms) @@ -5444,20 +5447,20 @@ aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagammammammammammamnamnamnamnamoamoam aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGamHamIamJamGamKamLamMamGamNamOamPamQamRamSaiCakhahhakMakOalzakOakOanIanIakOakOakOakTaagaagaagaagaagaagaagaagaagaklaklamTamUamVakYaPdalEalEakYaagaagaagaagaagaagagIamXakuajOamzbZdalfalfbZgbZgbZgalfalfbZeamzajOajPamYagIaagaagaagalhamZamZalhalhalhalhalhalhalhalhalhalhalhalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGanaanbancamGandaneanfamGanganhanhanianjankaiFanlahhaRkakOakRakOakOakOakOalzalzakRakTaagaagaagaagaagaagaagaagaagaagaklaklaklaklakYannaPsalEakYaagaagaagaagaagaagagIanpakuajOamzbZdalfbZeanqanqanrbZdalfbZeamzajOajPansagIaagaagaagalhantalhalhaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagamGamGamGanuanvanwamGanxanyanzamGanAanBanCanDanEanFaiCanGanHakOakOakOakOakOalzakOakOakOanJakTaagaagaagaagaagaagaagaagaagaagaagaagaagaagakYanKanLanMakYaagaagaagaagaagaaganNalGanOajOamzbZdalfbZeanqakvanqbZdalfbZeamzajOanPajQanQanRanRanRanRaSqanRanRanRanRanRanRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa -aaaaadaadaadaadaadaadaadaadaadaadaadaagamGanUamGanVanWanXamGanYanZaoaamGamoamoamoamoamoaobaocaodaoeaofalzanIakOakOakOakOakOaogaohakTaagaagaagaagakYakYakYakYakYakYakYakYakYakYakYakYakYaSWakYakYakYakYakYakYakYagIalGakuajOamzbZdalfbZeanranqanrbZdalfbZeamzajOajPajQanRaojaokaolaomaonanRaooaopaoqaoranRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa +aaaaadaadaadaadaadaadaadaadaadaadaadaagamGanUamGanVanWanXamGanYanZaoaamGamoamoamoamoamoaobaocaodaoeaofalzanIakOakOakOakOakOaogaohakTaagaagaagaagakYakYakYakYakYakYakYakYakYakYakYakYakYaSWakYakYakYakYakYakYakYagIalGakuajOamzbZdalfbZeanranqanrbZdalfbZeamzajOajPajQanRaojaokaolaomaonanRaooarWaoqaoranRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaosaotaouaovaowaoxaoyaozaoAamGaoBaoCaoDaoEahhaoFaiCaoGahhaoHakOakOakOalzalzaUrakMakMakMakTaagaagaagaagakYaUsaoKaoLalEalEaoMalEalEalEalEalEalEaoNaoOaoOaoOaoOaoOaoOaoOaoPaoQakuajOamzbZdalfalfbVubVubVualfalfbZeamzajOajPaoRanRaoSaoTaoUaoVaoWanRaoXaoYanRanRanRaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaoZaotaouapaapbapcapdapaaoAamGapeapfapgaphahhapiapjakhahhaUNakOakOalzaUQakMakMakMakMakMakTaagaagaagaagakYapmalEapnappappappannannannannaRLaVJakYakYakYakYakYakYakYakYagIaptakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPapuanRaoSapvapwapxapyanRapzapAapBaoranRaagapCapCapCapCapCapCapCapDapEapEapFapGapGapGapGapFapEapEapHaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGapIapJapKapLapMapNapOapPapQamGapRapfapgapSahhapTaiCapUapVapWapWapWapWakTakTakTakTakTakTakTaagaagaagaagakYapXalEapYaTrakYakYakYakYakYakYakYakYakYaagaagaagaagaagaagaagagIaqaakuajOalebZdalfalfalfalfalfalfbZfbZealeajOajPaqbanRaqcapvaqdaqeaoWanRaqfaqganRanRanRaagapCaqhaqiaqjaqkaqlaqmaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaadaagamGamGamGaqsaqtaquaqvaqwaqxaqyaqzamGapRaqAaqBaqCahhaqDaiCaqEaqFaqGaqHaqIapWaagaagaagaagaagaagaagaagaagaagaagakYaYDaqKaqLaqMakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIaptakuajOalebZdalfalfalfalfalfalfalfbZealeajOajPajQanRaqNaqOaqPaqQaqRanRaqSaqTaqUaoranRaagapCaqVaqWaqWaqWaqXaqWaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaadaagamGaqZaraarbaoZarcaoZardarearfargamGarhariarjarjahharkaiCarlapWarmarnaroapWarparparparparparparparparparparpakYarqalEakYakYakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIarrakuajOalebZhbZgbZgbZgbZgbZgbZgbZgbZialeajOajParsanRartaoTaoTaruarvanRarwanRanRanRanRaagapCarxaqWaryarzarAaqWaqnaqoaqparBarCarCarCarCarBaqpaqrapCaaa -aaaaadaadaadaadaadaadaadaadaadaagaagamGarDarEarbarFarGarHarIarJarKarKarLarMarNarOarParQarRaiCarSarparparTarUarparVarWarXarYarXarXarXarXarXarXarXarZasaasbakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIascakuajOakvakwakwakwakwakwakwakwakwakwakvajOajPasdaseasfaoTaoTaruasgashasiasjaskaslanRaagapCasmaqWasnasoaspaqWaqnaqoarCarBarCarCarCarCarBarCasqapCaaa +aaaaadaadaadaadaadaadaadaadaadaagaagamGarDarEarbarFarGarHarIarJarKarKarLarMarNarOarParQarRaiCarSarparparTarUarparVaxQarXarYarXarXarXarXarXarXarXarZasaasbakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIascakuajOakvakwakwakwakwakwakwakwakwakwakvajOajPasdaseasfaoTaoTaruasgashasiasjaskaslanRaagapCasmaqWasnasoaspaqWaqnaqoarCarBarCarCarCarCarBarCasqapCaaa aaaaadaadaadaadaadaadaadaadaadaagaagamGasrassastasuasuasuasuasuasuasvaswasxasyaszasAasBasCasDasEarpbegbdUasHasIasJasKasLasLasLasLasLasLasLasLasLasLasMasNasOasOasPasPasPasPasPasPagIagIaagaagaagaagaagaagaagaagagIasQakuajOajOajOajOajOajOajOajOajOajOajOajOajOasRasSasTasUasVasVasWasXaoTasYaoTaoWaslanRaagapCaqhasZasZaqWataaqWaqnaqoarCarBarCarCarCarCarBarCaqYatbaaa aaaaadaadaadaadaadaadaadaadaadaagamGamGamGamGatcaoZaoZatdateatfatgathaoZatiatjatkatlatmatnatoatparpatqatratratratratsasLattatuatvatwatxatxatxatyasLatzatAasOatBatCatCatCatCatCatCagIagIagIaagaagaagaagaagaagaagagIatDatEatFatGatGatGatGatGatHatGatGatGatGatGatGatIatJanRatKaoTaoTatLatMatNatOaoTaoWaslanRaagapCapCapCapCatPataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGatQatRatSatTaoZaquaotatQamGatUatVatWamGatXatYarparparparparparpatZauaauaauaauaauaasLaubaucaudaueaufaufaufaugasLbeQauibeSaukatCaulaulaulaulatCaumaunagIagIagIagIauoagIagIagIagIaupakuauqaurausautautauuauvauwauxautautautauyajPajQanRauzauzauAauBauCauDauEauFauGauHanRaagapCauIauIapCauJataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGauKaoZaoZatTaoZauLaotauMamGatUauNauOamGauPauQbfxarXarXarXarXauSauTauaauUauVauWauXauYauZavaavbavcavdavdavdaveasLaZkavgasOavhatCaulaulaulaulaulaviavjavkavlavmavnavnavoavpavqavravsavtavuagIagIavvavvavvavvavvavvavwavvavvavxajPajQanRanRanRanRavyavzanRanRanRanRanRavAagIapCavBavBapCavCavDaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaagamGavEavFavGavHbhtavJaotatQamGavKavLavMamGavNavOauaauaauaauaauaauaauaauaavPavQavRavSavTavUavVavWavXavYavYavZawaasLawbavgasOavhatCaulaulaulaulaulaviaviaviawcaviaviawdaviaweatGawfawgawhawiamgagXavvawjbDBawlawmawnawoawpavvawqawrawsawtawuawvawwawxawyawzawAawBawCawDawEawuawFawGawGawHawIawJaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagawKawKawKawKawKawKawKawKawKawKawKawKawKawKawLavOauaawMawNawOawPawQawRawSawTawUawVawWauYawXawYawZaxaaxbaxcaxdaxeblMaxgblPasOavhatCaxiaulaulaulatCaxjaxkaxlaxmaxnaxoaxpaxqaxraxsaxtaxuaxvaxwagIagIavvaxxaxyaxzaxzaxAbZmaxCaxDaxEasRawgaxFatGatGaxGatGaxHaxIatGatGawgatGatGaxJaxKaxLaxMaxNaxKaxOaqWaqnaqoarCarBarCarCarCarCarBarCaqratbaaa -aaaaadaadaadaadaadaadaadaadaadaagarpaxPaxQaxRaxRaxSaxRaxTaxUaxRaxRaxUaxRbphaxWavOauaaxXaxYaxZayaaybayaayaayaayaaycaydauYayeayfaygayhayiayjaykaylasLakYaymasObpiatCatCatCatCatCatCayoaypagIagIagIagIagIagIayqagIagIagIagIagIagIaagavvayraysaytayuayvaywayxayyayzayAayBayCayDayEayFayDayGayHayHayIayJayKayHayHayLayMayNayOayPayQaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa +aaaaadaadaadaadaadaadaadaadaadaagarpaxPbaoaxRaxRaxSaxRaxTaxUaxRaxRaxUaxRbphaxWavOauaaxXaxYaxZayaaybayaayaayaayaaycaydauYayeayfaygayhayiayjaykaylasLakYaymasObpiatCatCatCatCatCatCayoaypagIagIagIagIagIagIayqagIagIagIagIagIagIaagavvayraysaytayuayvaywayxayyayzayAayBayCayDayEayFayDayGayHayHayIayJayKayHayHayLayMayNayOayPayQaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagarpayRaySayTayTayTayTayTayTayTayTayTayTayTayUayVauaayWawUayXayYayZayZayZazaazbazcazdasLasLasLauYauYazeasLasLasLasLaagazfasOasOasPasPasPasPasPasPagIagIagIaagaagaagaagazgazhazgaagaagaagaagaagaagavvaziazjazkazkavvazlazmavvagIagIaznagIagIagIagIagIazoagIagIagIagIagIauoagIapCazpazpapCavCazqaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaagarpazraySayTazsazsaztazuazvazwazxazyazzazAazBazCazDazEawUawUazFazGazGazGazHawUawVazIauaazJazKazLazMazNazOazPazQatmaagazRazSazTazTazTazTazUazUazUbCOazSazSazVbCPazUazUazWazXazgazgazgazgaagaagaagavvazYazZaAaaAbavvaAcaAdavvaagagIagXaAeaAeaAeaagaAeaAfaAeaagaagaagaagaagaagapCauIauIapCaAgaAhaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaadarpazraySayTazsazsazsaAiaAjaAkaAlaAmaAnazAaAoaApaAqaArawUawUazFazGaAsazGazHawUawVaAtauaaAuaAvaAwaAxaAyaAzaAxaAAatmaABaABaABaABaagaagaagaagaagaagaagaagaagaagaagaagaagbEUbFaaADaAEaAFazgaagaagaagavvaAGaAHaAIaAJavvaAKaALavvaagagIaAMaANaAOaAeaagaAeaAfaAeaagaagaagaagaagaagapCapCapCapCaAPaAhaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa @@ -5587,14 +5590,14 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbFwaVtaXSaXTaXUaXVaXWaXXaXYaXZaXZaYaaYbaYcaYdaYeaYfaYgaYhaYiaYiaYjaVaaYkaYlaQMaJJaJJaJJaJJaVyaYmaWRaYnaYoaYpaXDaYqaWhaYraXGaXGaXIaWWaYsaVCaYtaVEaYuaYvaYvaYwaYxaYyaYzaYAaVEaXdaYBaPHaPHaYCaYCbKWbKZaYCaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaYFaSUaSUaTjaVtaYGaYHaYIaYJaYKaYLaYMaYNaYOaYaaYPaYQaYRaYSaYTaYUaYVaYWaYiaYXaVabLcaYZaQMaJJaJJaJJaJJaVyaZaaZbaZcaWRaZdaWRaZeaWTaZfaZgaZgaWUaZhaZiaVCaYtaVEaVEaVEaVEaVEaVEaVEaZjaVEaVEbNDaZlaMWaMWaYCaZmaZnaZoaZpaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaZqaTFaTGaVtaZraYHaZsaZtaZuaZvaZwaYNaYOaYaaYPaZxaZyaZzaZAaZBaZCaZBaZDaZEaVaaZFaZGaQMaJJaJJaJJaJJaVyaZaaZHaZIaZJaZKaZLaZMaZNaZOaZPaZQaZRaZSaZTaVCbPIaZUaZUaZVaYtaYtaYtaYtaYtaZWaYCaYCaYCaYCaYCaYCaZXaZYaZZbaaaYCaJJaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbabaUSaSUaTjaVtbacbadbaeaVtbafbagbahbaibajbakaYPbalaUYbambanbaobapbaqbarbasaVabatbQnaQMbavbavbavbavaVyaZabawbaxbaybazbaAbaBaVCbaCbaDbaEbaFbaGbaHaVCahvahvahvahvaYCaYCaYCaYCaYCbaIbtqaYCbaKbaLbmzbaNbaObaPaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbabaUSaSUaTjaVtbacbadbaeaVtbafbagbahbaibajbakaYPbalaUYbambanbdybapbaqbarbasaVabatbQnaQMbavbavbavbavaVyaZabawbaxbaybazbaAbaBaVCbaCbaDbaEbaFbaGbaHaVCahvahvahvahvaYCaYCaYCaYCaYCbaIbtqaYCbaKbaLbmzbaNbaObaPaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbtraSUaTFbaSaVtbaTbaUbaVaVtbaWbaXbaYbaZbaZbaZbbabbbaUYbbcbanbbdbbebbfbarbbgaVabbhbavbavbavbbibavbavbavbavbavbbjbbkbblbavbavbbmbbnbbobbpbbmbbmbbmbbmbbqaisbbrahvaJJaJJaJJaJJaYCaZUaZVaYCbbsbbtaYtaYtbbvbbwbbxbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbbyaVtbbzbbAbbBaVtbbCbbDbbEbbFbbGbbHbbEbbIaUYbbJbbKbbLbbMbbNbbObbPaVabbQbbRbbTbbVbbUbbSbbWbbXbbYbbZbcabcbbccbcdbcebbmbcfbcgbchbcibcjbckbclbcmbcnbcoahvaJJaJJaJJaJJaYCaZUbaIbcpbbsbcqbcrbcsbctbbwaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaSgaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbcuaSUaSUbwkaVtbcwbcxbcyaVtaUXbYfaUXaUXaUXaUXaUXaUXaUYbcAbcBbcCbcDbcEbcFbcGaVabcHbcIbcJbcKbcLbcMbcPbcObcNbcQbcRbiObcTbcUbcVbcWbcXbcYbcZbdabcgbdbbbmajRbdcbddahvaJJaJJaJJaJJaYCbdebYnaYCbbsbcqbdgbdhbdhbdiaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbcvaVtaVtaVtaVtaVtaGmbdjbdkaGmaJJaJJaJJaJJaUYbdlbdlbdmbdnbdmbdlbdlbdlbdobdpbavbavbdtbdvbdWbdvbdtbdrbdsbeFbdYbdZbeJbbobdwbdxbdybdzbdxbdAbbmahvahvahvahvaYCaYCaYCaYCaYCbYraZZaYCbdBbdCbdDaZZbbxaZZaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbYtaGmbdFbdGbdHbdIbdJbdKbdLaGmaJJaJJaJJaJJaJJbdlbdMbdNbdObdPbdQbdRbdlbdSbdTbavbOVbdtbeKbeLbeMbdtbdtbdtbfgbdubcUbfhbbmbeabebbecbedbeebefbbmbXXbYybejbejbejbekbejbdebdebdebYAaYCbembenbeoaZZbepbeqberbesaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbcvaVtaVtaVtaVtaVtaGmbdjbdkaGmaJJaJJaJJaJJaUYbdlbdlbdmbdnbdmbdlbdlbdlbdobdpbavbavbdtbdvbdWbdvbdtbdrbdsbeFbdYbdZbeJbbobeabdxbefbedbdxbecbbmahvahvahvahvaYCaYCaYCaYCaYCbYraZZaYCbdBbdCbdDaZZbbxaZZaZZbaQaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaSUaSUbYtaGmbdFbdGbdHbdIbdJbdKbdLaGmaJJaJJaJJaJJaJJbdlbdMbdNbdObdPbdQbdRbdlbdSbdTbavbOVbdtbeKbeLbeMbdtbdtbdtbfgbdubcUbfhbbmbmkbebbQObWebeebCVbbmbXXbYybejbejbejbekbejbdebdebdebYAaYCbembenbeoaZZbepbeqberbesaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaThaTqaUSaSUaGmbetaGmaGmaGmaGmbdjbeuaGmaJJaJJaJJaJJaJJbdlbevbewbexbeybezbeAbdlbeBbeCbavbeDbdtbfibflbfobfjbfkbdtbfRbfpbcUbfSbbmbbmbbobbobbobbobbmbbmbeNbeNbeNbeNbeNbeNaYCaYCaYCaYCaYCaYCaYCaYCbeObePbYCbeRbXYaYCaYCaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbeTaSUaSUbeUaGmaGmaGmaJJaJJaGmbeVbeWaGmaJJaJJaJJaJJaJJbdlbeXbeYbeZbfabfbbfcbdlbfdbfebavbffbdtbgjbgtbgybgrbgsbgEbfmbfnbgDbgFbfqbfrbfsbfsbfsbfsbfsbftbeNbfubfvbfwbfwbeNaJJaJJaJJaJJaJJaJJaJJbYEbYFbKZbYEaYCaYCaYCaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbeTaSUaSUbeUaGmaGmaGmaJJaJJaGmbeVbeWaGmaJJaJJaJJaJJaJJbdlbeXbeYbeZbfabfbbfcbdlbfdbfebavbffbdtbgjbgtbgybgrbgsbgEbfmbfnbgDbgFbfqbfrbYSbfsbYTbfsbfsbftbeNbfubfvbfwbfwbeNaJJaJJaJJaJJaJJaJJaJJbYEbYFbKZbYEaYCaYCaYCaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbfybYebfAbfAaGmaJJaJJaJJaJJaGmbdjbeuaGmaJJaJJaJJaJJaJJbdlbfBbfCbfDbfEbfFbfGbdlbfHbfIbavbYibdtbgHbgKbhbbgIbgJbdtbfPbfQbhdbhebfTbfTbfTbfTbfUbfUbfVbfWbfXbfYbfZbgabgbbeNaJJaJJaJJaJJaJJaJJaJJbYEbgcaZZbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmaGmaGmaGmaGmaGmaJJaJJaJJaJJaGmbdjbeubgdbgdbgdbgdbgdbgdbdlbdlbdlbdlbdlbdlbdlbdlbgebgfbggbggbggbggbggbggbggbggbggbggbghbhjbhkbggbggbggbggbggbggbggbavbeNbgkbfZbgabgabeNaJJaJJaJJaJJaJJaJJaJJbYEbgcbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaGmbdjbeubgdbglbgmbgnbgobgpbgdaJJbggbgqbhlbhzbhHbgubgvbgwbgxbiDbgzbgAbgBbgCbjfbjhbjTbkobjPbhcbZvbZwbgLbgMbgNbgObgPbggaJJbeNbgQbfZbgRbgSbeNaJJaJJaJJaJJaJJaJJaJJbYEbgcbYEbgTaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5615,7 +5618,7 @@ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJ aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJJaJJaJJaJJaJJbggblublwbmiblxblyblzblAblBblCblDblEbkKbkLbkMblFbkObkPbkQblGblHbYVaZZblIaZZaZZaZZaZZaZZblJblKaZZaZZbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEbYEaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbggbYEaZZblLbYEbYEbYEbYEbYZblNbYYbmabmabmaaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbYEaJJaJJaJJbmablRblSblTblUbmaaJJaJJaJJblVblVblVblVblVblVblVblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH -aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJbmkaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmDbmDbmDblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH +aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZabYEaJJaJJaJJbmablWblXblYblZbmabmDbmDbmDblVbmcbmdbmebmfbmgbmhblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZblQbmMbmMbmMbmMbmDbmDbmDbmNbmQbmDbmObmPbmRblVbmnbmobmpbmobmqbmrblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEaZZbZbbmUbmVbmSbmTbmDbnhbmWbmXbnjbnkbnibnibnlblVbmEbmFbmGbmHbmIbmJblVaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH aJHaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIbjAaJIaJIaJIaJIaJIaJIaJIaJIaJIaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJaJJbYEbmKbmLbnobnpbnmbnnbnzbnAbnxbnybnKbnWbnGbnJbnXbmYbmZbnabnbbncbndbnebnebnebneaJJaJJaJJaJJaJJaJJaJJaJJaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJIaJH @@ -5685,7 +5688,7 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbAXbAYbAYbAZbAZbAZbAZbAZbBabBbbBcbBdbBebBfbBgbBgbBgbBhbBgbBibBjbBkbpabpabpabpabzrbzrbBlbzrbBmbBnbBobBpbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBrbBsbBtbBubBvbBwbwSbBxbBybBzbBAbwSbBBbBCbBDbxSbwSbpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbBEbAWbBFbBGbBGbBHbBHbBHbBHbBHbBIbBJbAFbAGbBKbBLbAHbAHbAHbPybAHbBNbBObBkbpabpabBPbpabzrbBQbBRbBSbBnbBnbzrbBTbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbBVbwSbBWbBXbBYbBZbCabCbbCcbCdbCebCdbCfbCgbChbwSbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqfbzhbCibAWbBFbBGbBGbBHbBHbBHbBHbBHbBIbBJbAFbAGbCjbznbCkbClbClbCmbCnbAHbCobznbpabpabpabpabzrbBnbCpbzrbCqbCqbzrbCrbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbCsbCtbCubCubCubCvbCubCwbCxbCwbCwbCwbCwbCybCybCybCybpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbCzbAWbBFbBGbBGbCAbzObCBbBHbBHbBIbBJbAFbAGbCCbznbCDbCEbCFbCGbCHbAHbCIbznbpabpabpabpabzrbCJbCKbzrbCqbCqbzrbCLbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbCMbCNaMZaNybCQbCRbCSbCTbCUbCVbCWbCSbCXbCYbCZbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbCzbAWbBFbBGbBGbCAbzObCBbBHbBHbBIbBJbAFbAGbCCbznbCDbCEbCFbCGbCHbAHbCIbznbpabpabpabpabzrbCJbCKbzrbCqbCqbzrbCLbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbCMbCNaMZaNybCQbCRbCSbCTbCUaopbCWbCSbCXbCYbCZbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbBFbBGbBGbDbbDcbDdbBHbBHbBIbBJbAFbAGbCjbznbznbznbznbDebDfbzobznbznbwObwOaHnaHnbzrbzrbzrbzrbzrbzrbzrbDgbDhbzwbIIbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbDibDjbDkbDlbDmbDnbDobCSbDpbCTbCTbDqbCSbDrbDsbDtbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAawkbDCaHnbmbbdqbaMaHobwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEaaHnbmmbmlbmlbmjbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSbEsbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY @@ -5709,11 +5712,11 @@ boYboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbbcbLYbLZbLZbLZbLZbMabLZbMbbMcbMdbMebLzbMfbMgbMhbMibMhbMjbKSbLGbJVbMkbMlbMlbMlbMlbMlbMlbMlbLbbMmbKBbMnbMobMpbKBbDGbLfbKHbMqbNdbMsbMtbLObLQbKJbLnbIZbKLbFQbMubHebMvbMwbMwbMwbMxbZQbIlbHebHebHebMybFQbpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbMzbMAbMBbMCbMCbMDbMEaYibMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbKSbMQbJVbMRbMlbMSbMTbMUbMSbMSbMlbMVbMWbKBbMXbMYbMZbKBbNabNbbKHbNcbNdbMsbMtbLObNebNfbNgbIZbKLbNhbNibHebJobHebHebHebIlbIQbIlbHebHebHebNjbFQbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNkbMAbNlbNmbNmbNnbNoaYibNpbNqbMAbNraUYbNsbNtbNtbNubNvbNwbNxbMQbNybNzbMlbNAbNBbNBbNBbNCbMlbLKbNEbKBbNFbNGbNHbKBbNIbNJbKHbNKbNdbMsbMtbNLbNMbNNbNObNPbNQbFQbNRbHebJobHebHebHebHebZnbHebHebHebHebNTbFQbJGbFQbpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNUbMAbZSbNmbNmbNnaYUbNVbNWbNXbNYbbgaUYbNZbNZbNZbKSbOabNZbKSbMQbJVbObbMlbOcbOdbOebOfbOgbOUbLIbNEanTanTanTanTanTbOjbOkbOlbOmbOnbOobOpbOqbOrbKJbOsbIZbKLbJGbOtbOtbJobHebHebHebIlbIQbIlbHebHebHebHebOubLobJLbpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabOvaUYbOwbMAbZSbOxbOybOzbZobOBbOCbNqbODbOEaUYbOFbOGbOHbOIbOJbOKbOLbOMbJVbONbMlbOObOPbOQbORbOSbMlbOTbRkbOWbOibcSbOXanTbKBbOZbKHbPabNdbMsbMtbPbbPcbPdbPebIZbKLbJGbPfbPgbPhbLVbLVbLVbLWbZRbIlbHebHebHebHebIlbKmbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPibMAbPjaYibPkbPlbPmbPlbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPxbJdbZpbPzbMlbOObPAbOQbPBbPCbMlbLIbPDbPFbPEbOYbPGanTbXZbOZbKHbPJbNdbMsbMtbLObPKbNfbPLbIZbKLbJGbPgbPgbPMbMwbMwbMwbMxbIPbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDanTbQlbPHbYdbRgbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbQrbQsaYiaYibNqaYibQtbQubQubQvbQwbQxbQubQubQybQybQybQybQybQybQzbQAbQBbMlbQCbQDbQEbQDbQFbMlbErbPDanTanTanTanTanTbQHbfzbKHbQJbLNbLObLObLPbLQbKJbLnbIZbKLbJGbQKbQKbJobHebHebHebHebHebHebHebQLbQMbQNbQObLobJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbNUbMAbZSbNmbNmbNnaYUbNVbNWbNXbNYbbgaUYbNZbNZbNZbKSbOabNZbKSbMQbJVbObbMlbOcbOdbOebOfbOgbOUbLIbNEanTanTanTanTanTbOjbOkbOlbOmbOnbOobOpbOqbOrbKJbOsbIZbKLbJGbOtbOtbJobHebHebHebIlbIQbIlbHebHebHebHebOubdwbJLbpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabOvaUYbOwbMAbZSbOxbOybOzbZobOBbOCbNqbODbOEaUYbOFbOGbOHbOIbOJbOKbOLbOMbJVbONbMlbOObOPbOQbORbOSbMlbOTbRkbOWbOibcSbOXanTbKBbOZbKHbPabNdbMsbMtbPbbPcbPdbPebIZbKLbJGbPfbPgbPhbLVbLVbLVbLWbZRbIlbHebHebHebHebHebdzbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPibMAbPjaYibPkbPlbPmbPlbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPxbJdbZpbPzbMlbOObPAbOQbPBbPCbMlbLIbPDbPFbPEbOYbPGanTbXZbOZbKHbPJbNdbMsbMtbLObPKbNfbPLbIZbKLbJGbPgbPgbPMbMwbMwbMwbMxbIPbIlbHebHebHebHebHebLobJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbPNbPOaYiaYibNqaYibPPbPQbPRbPSbPTbPUaUYbPVbPWbPXbOIbPYbPZbQabQbbQcbQdbMlbQebQfbQgbQhbQibYbbLIbPDanTbQlbPHbYdbRgbYcbQobKHbMqbNdbMsbMtbLObQpbKJbLnbIZbKLbJGbPgbPgbQqbHebHebHebIlbKmbIlbHebHebHebHebIlbKmbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbQrbQsaYiaYibNqaYibQtbQubQubQvbQwbQxbQubQubQybQybQybQybQybQybQzbQAbQBbMlbQCbQDbQEbQDbQFbMlbErbPDanTanTanTanTanTbQHbfzbKHbQJbLNbLObLObLPbLQbKJbLnbIZbKLbJGbQKbQKbJobHebHebHebHebHebHebHebQLbQMbQNbdAbIQbJLbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYaUYbQPbQsaYibQQbQRaYibQSbQubQTbQUbQVbQWbQXbQubQYbQZbRabRbbRcbQybRdbQcbQdbMlbRebRebRfbRebRebMlbYpbPDbKBbRhbKBbRibKBbRjbFbbKHbRlbRmbRnbRobRpbRqbKHbKKbIZbRrbFQbRsbHobRtbHebHebHebHebHebHebHebFQbFQbFQbFQbFQbFQbpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYbRubRvbRwbRxbRybRzbRAaYibRBbRCbRDbREbRFbRGbRHbQubRIbRJbRKbRLbRMbQybRNbQcbQdbRObMlbMlbMlbMlbMlbRPbKBbRQbKBbRRbKBbKBbKBbRSbKBbRTbKHbKJbKJbKJbKJbKHbKHbLnbRUbRVbFQbRWbHebZqbRYbRZbRZbRZbRZbRZbSabFQbSbbScbSdbFQbpabpaboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaaUYaUYaUYbSebSfbSfbcCbSgbShbSibRCbSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubSvbSwbSxbSybSzbSAbSBbSCbSDbSybSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbSObSPbSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbHebSXbSYbSZbTabTabTabTbbTcbFQbTdbHebTebFQbpabpaboZboZboZboZboZboZboZboZboZboZboZboY @@ -5723,7 +5726,7 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbURbUSbUTbUUbUVbTgbUXbUYbUZbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabUQbVobVpbVqbUUbVrbTgbVsbTnbVtbZrbVvbVwbVvbVvbVvbVvbVvbVxbTnbTnbVybQubpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpaboZboZboZboZbpabpabpabpabpabpaboZboZboZbpabpabpabpabpabpabpabpabUQbVzbVAbUUbUUbVBbTgbVCbTnbTnbTnbTnbVDbVEbVEbVEbVEbVEbVFbTnbVGbVHbQubpabpabpabHzbVIbVJbVKbHzbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZbpabpabpabpabpabpabpabpabTfbVLbVMbVNbVObVPbTfbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebQubpabpabpabHzbWfbIZbUNbHzbpabpabpabpabpabpabpabpabpabpabpabWgbWgbWhbWhbWhbWhbWhbWgbWgbWgbWhbWhbWhbWhbWhbWgbWgbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZbpabpabpabpabpabpabpabpabTfbVLbVMbVNbVObVPbTfbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbYWbQubpabpabpabHzbWfbIZbUNbHzbpabpabpabpabpabpabpabpabpabpabpabWgbWgbWhbWhbWhbWhbWhbWgbWgbWgbWhbWhbWhbWhbWhbWgbWgbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpaboZboZboZboZboZboZbpabpaboZbpaboZboZboZboZboZboZboZboZboZboZbpabpabpabTfbTfbWibWibWibTfbTfbQubWjbWjbWjbQubQubWjbWjbWjbQubQubWjbWjbWjbQubQubpabpabpabHzbWkbIZbWlbHzbpabpabpabpabpabpabpabpabpabpabpabWgbWmbWnbWnbWnbWnbWnbWobWpbWqbWnbWnbWnbWnbWnbWmbWgbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabWrbWsbWtbWtbWtbWtbWtbWubWnbWsbWtbWtbWtbWtbWtbWubWvbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabVmbUMbIZbUNbVnbpabpabpabpabpabpabpabpabpabpabpabWrbWwbWxbWybWybWybWxbWzbWnbWwbWnbWnbWnbWnbWnbWzbWvbpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 3c0a2abc28..4af06a94b1 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -4812,7 +4812,7 @@ "bOB" = (/obj/structure/table/standard,/obj/item/stack/nanopaste,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/white/border,/turf/simulated/floor/tiled/white,/area/medical/surgery) "bOC" = (/obj/structure/table/standard,/obj/item/weapon/surgical/cautery,/obj/item/weapon/surgical/FixOVein,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/white/border,/obj/machinery/button/windowtint{id = "surgeryobs"; pixel_y = -26},/turf/simulated/floor/tiled/white,/area/medical/surgery) "bOD" = (/obj/structure/table/standard,/obj/item/weapon/surgical/retractor,/obj/item/weapon/surgical/bonesetter,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/white/border,/turf/simulated/floor/tiled/white,/area/medical/surgery) -"bOE" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/random/medical,/obj/random/medical,/obj/item/device/glasses_kit,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bOE" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/random/medical,/obj/random/medical,/obj/item/device/glasses_kit,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 28},/obj/item/weapon/storage/box/rxglasses,/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bOF" = (/obj/structure/lattice,/obj/structure/cable/green{icon_state = "32-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/open,/area/maintenance/station/medbay) "bOG" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/station/medbay) "bOH" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/engineering,/turf/simulated/floor,/area/hallway/station/docks) diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index 45192898b2..9ef0c13a94 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -257,7 +257,7 @@ "eW" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom{base_turf = /turf/unsimulated/floor/techfloor_grid}) "eX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel,/area/centcom/control) "eY" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor/steel,/area/centcom/control) -"eZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556,/obj/item/ammo_magazine/m556/ap,/obj/item/ammo_magazine/m556/ap,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"eZ" = (/turf/unsimulated/wall/planetary/virgo3b,/area/centcom/specops) "fa" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/gun/projectile/automatic/l6_saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fb" = (/obj/machinery/door/blast/regular{id = "HEAVY"; name = "HEAVY ORDINANCE"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "fc" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -490,7 +490,7 @@ "jv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "jw" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "jx" = (/obj/machinery/atmospherics/unary/freezer,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"jy" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"jy" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/specops/centcom) "jz" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "jA" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "jB" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) @@ -511,7 +511,7 @@ "jQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "jR" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "jS" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"jT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"jT" = (/turf/simulated/shuttle/wall/dark{join_group = "shuttle_ert"},/area/shuttle/specops/centcom) "jU" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "jV" = (/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "jW" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) @@ -532,8 +532,8 @@ "kl" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "km" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kn" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"ko" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"kp" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"ko" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"kp" = (/turf/unsimulated/wall{icon = 'icons/turf/transit_vr.dmi'},/area/centcom/specops) "kq" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "kr" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/cautery,/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "ks" = (/obj/machinery/optable,/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) @@ -567,9 +567,9 @@ "kU" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 1},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kV" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5; icon_state = "borderfloorcorner2_white"; pixel_x = 0; pixel_y = 0; tag = "icon-borderfloorcorner2_white (NORTHEAST)"},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/obj/machinery/computer/transhuman,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kW" = (/obj/machinery/transhuman/synthprinter,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"kX" = (/obj/machinery/clonepod/transhuman,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"kY" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 1},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/obj/machinery/transhuman/resleever,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"kZ" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 4},/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"kX" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/specops/centcom) +"kY" = (/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("NETWORK_ERT"); pixel_y = 30},/obj/machinery/computer/shuttle_control/specops,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"kZ" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/specops/centcom) "la" = (/obj/structure/table/standard,/obj/machinery/computer/skills{pixel_y = 2},/obj/effect/floor_decal/borderfloor{dir = 9},/turf/unsimulated/floor/steel,/area/centcom/command) "lb" = (/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/unsimulated/floor/steel,/area/centcom/command) "lc" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/structure/reagent_dispensers/water_cooler/full,/obj/machinery/camera/network/crescent,/turf/unsimulated/floor/steel,/area/centcom/command) @@ -694,7 +694,7 @@ "nr" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "ns" = (/obj/structure/sign/department/operational,/turf/unsimulated/wall,/area/centcom/medical) "nt" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 8},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"nu" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"nu" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) "nv" = (/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/structure/flora/pottedplant{icon_state = "plant-01"; pixel_y = 10; tag = "icon-plant-01"},/turf/unsimulated/floor/steel,/area/centcom/command) "nw" = (/obj/structure/bed/chair/office/light,/turf/unsimulated/floor/steel,/area/centcom/command) "nx" = (/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/turf/unsimulated/floor/steel,/area/centcom/command) @@ -713,8 +713,8 @@ "nK" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/closet/secure_closet/medical3,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "nL" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/obj/structure/closet/secure_closet/paramedic,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "nM" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"nN" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) -"nO" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"nN" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"nO" = (/turf/simulated/shuttle/wall/dark{hard_corner = 1; join_group = "shuttle_ert"},/area/shuttle/specops/centcom) "nP" = (/obj/structure/table/standard,/obj/machinery/computer/skills{pixel_y = 2},/obj/effect/floor_decal/borderfloor{dir = 10},/turf/unsimulated/floor/steel,/area/centcom/command) "nQ" = (/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor,/turf/unsimulated/floor/steel,/area/centcom/command) "nR" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/structure/closet/crate/bin,/turf/unsimulated/floor/steel,/area/centcom/command) @@ -1365,6 +1365,174 @@ "Am" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/corner/blue/border,/obj/effect/floor_decal/borderfloorblack/corner2{dir = 9},/obj/effect/floor_decal/borderfloorblack/corner2,/obj/effect/floor_decal/corner/blue/bordercorner2{dir = 9},/obj/effect/floor_decal/corner/blue/bordercorner2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security{name = "\improper CentCom Residential Security"}) "An" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/obj/machinery/vending/nifsoft_shop,/turf/unsimulated/floor/steel,/area/centcom/security) "Ao" = (/obj/machinery/vending/nifsoft_shop,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/restaurant) +"Ap" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"Aq" = (/turf/unsimulated/wall,/area/centcom/specops) +"Ar" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"As" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"At" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Au" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/energy/netgun,/obj/item/weapon/gun/energy/netgun,/obj/item/weapon/gun/energy/netgun,/obj/item/weapon/gun/energy/netgun,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Av" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/obj/item/ammo_magazine/m762/ap,/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,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Aw" = (/obj/structure/window/reinforced{dir = 1},/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/item/ammo_magazine/m556saw/ap,/obj/item/ammo_magazine/m556saw/ap,/obj/item/ammo_magazine/m556saw/ap,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Ax" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/carbine,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/item/ammo_magazine/m762m,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Ay" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/storage/box/sniperammo,/obj/item/weapon/gun/projectile/heavysniper,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Az" = (/obj/structure/table/rack,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/effect/floor_decal/industrial/outline/yellow,/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,/obj/item/weapon/melee/energy/sword/blue,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/item/weapon/gun/energy/xray,/obj/item/weapon/gun/energy/xray,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AB" = (/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,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AC" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/grenade,/obj/item/weapon/gun/launcher/grenade,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AD" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AE" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/specops/centcom) +"AF" = (/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AG" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_fore"; name = "forward docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AH" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_shuttle_fore_hatch"; locked = 1; name = "Forward Docking Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) +"AI" = (/obj/structure/table/rack,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/weapon/gun/launcher/rocket,/obj/item/weapon/gun/launcher/rocket,/obj/item/weapon/gun/launcher/rocket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AJ" = (/obj/structure/closet/crate/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AK" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AL" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AM" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AN" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AO" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AP" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AQ" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AR" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AS" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = -28},/obj/machinery/computer/communications{tag = "icon-computer (NORTH)"; icon_state = "computer"; dir = 1},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AT" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AU" = (/obj/machinery/computer/prisoner{tag = "icon-computer (NORTH)"; name = "Implant Management"; icon_state = "computer"; dir = 1},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AV" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_port_hatch"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AW" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) +"AX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AY" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"AZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Ba" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bb" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bc" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/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) +"Bd" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Be" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bf" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/SVD,/obj/item/weapon/gun/projectile/SVD,/obj/item/weapon/gun/projectile/SVD,/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) +"Bg" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/shotgun/pump/unsc,/obj/item/weapon/gun/projectile/shotgun/pump/unsc,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bh" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/m357,/obj/item/ammo_magazine/m357,/obj/item/ammo_magazine/m357,/obj/item/ammo_magazine/m357,/obj/item/ammo_magazine/s357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/item/weapon/gun/projectile/revolver/mateba,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bi" = (/obj/structure/table/rack,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bj" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/specops/centcom) +"Bk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_shuttle_port_hatch"; locked = 1; name = "Port Docking Hatch"; req_access = list(13)},/turf/unsimulated/floor{icon_state = "dark"},/area/shuttle/specops/centcom) +"Bl" = (/obj/structure/table/rack,/obj/item/clothing/gloves/swat{armor = list("melee" = 80, "bullet" = 80, "laser" = 80, "energy" = 80, "bomb" = 80, "bio" = 80, "rad" = 80)},/obj/item/clothing/gloves/swat{armor = list("melee" = 80, "bullet" = 80, "laser" = 80, "energy" = 80, "bomb" = 80, "bio" = 80, "rad" = 80)},/obj/item/clothing/gloves/swat{armor = list("melee" = 80, "bullet" = 80, "laser" = 80, "energy" = 80, "bomb" = 80, "bio" = 80, "rad" = 80)},/obj/item/clothing/gloves/swat{armor = list("melee" = 80, "bullet" = 80, "laser" = 80, "energy" = 80, "bomb" = 80, "bio" = 80, "rad" = 80)},/obj/item/clothing/gloves/swat{armor = list("melee" = 80, "bullet" = 80, "laser" = 80, "energy" = 80, "bomb" = 80, "bio" = 80, "rad" = 80)},/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/shoes/boots/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/suit/armor/swat,/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/mask/gas/death_commando{armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 75, "rad" = 0); name = "Commando Mask"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/obj/item/clothing/head/helmet/space/deathsquad{armor = list("melee" = 80, "bullet" = 80, "laser" = 60, "energy" = 70, "bomb" = 50, "bio" = 100, "rad" = 60); name = "swat helmet"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bm" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bn" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/hud/health{pixel_x = 4; pixel_y = 4},/obj/item/clothing/glasses/hud/health{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bo" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bp" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bq" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Br" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bs" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Bt" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bu" = (/obj/structure/table/reinforced,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bw" = (/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) +"Bx" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"By" = (/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,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Bz" = (/obj/structure/table/rack,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_centcom_dock_door"; locked = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BC" = (/obj/structure/table/reinforced,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BD" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/bodybags,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/fire{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BG" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BI" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/obj/item/weapon/storage/backpack/dufflebag/syndie/med,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BJ" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BK" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BL" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BM" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BN" = (/obj/structure/closet/wardrobe/ert,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BO" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BP" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = 25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BQ" = (/obj/structure/sign/nanotrasen,/turf/unsimulated/wall{icon = 'icons/turf/transit_vr.dmi'},/area/centcom/specops) +"BR" = (/obj/machinery/door/blast/regular{name = "When Everything else fails."},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BS" = (/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (SOUTHWEST)"; icon_state = "corner_white"; dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"BT" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"BU" = (/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BV" = (/obj/effect/landmark{name = "Response Team"},/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BW" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BY" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"BZ" = (/obj/structure/sign/redcross{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Ca" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Cb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cc" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor/steel,/area/centcom/specops) +"Cd" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Ce" = (/obj/machinery/door/airlock/centcom{name = "Commander"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cf" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/deagle/camo,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cg" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"; pixel_y = -32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Ch" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Ci" = (/obj/effect/floor_decal/corner/yellow{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cj" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Ck" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cl" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cm" = (/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cn" = (/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Co" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/weapon/material/hatchet/tacknife/combatknife,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cp" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cq" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cr" = (/obj/machinery/vending/engivend,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cs" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Ct" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cu" = (/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cv" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cw" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cx" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) +"Cy" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Cz" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CA" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CB" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CC" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CD" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CE" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CF" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CG" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CH" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CI" = (/obj/machinery/pipedispenser/disposal/orderable,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CJ" = (/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CK" = (/obj/item/weapon/circuitboard/aiupload,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CL" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CM" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CN" = (/obj/machinery/shieldwallgen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CO" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CP" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CQ" = (/obj/machinery/door/airlock/centcom{name = "Teleporter"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"CR" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CS" = (/obj/machinery/vending/tool,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CT" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CU" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/engineer,/obj/item/weapon/rig/ert/engineer,/obj/item/weapon/rig/ert/engineer,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CV" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CW" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CX" = (/obj/structure/table/rack,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CY" = (/obj/structure/table/rack,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/plasmacutter,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"CZ" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Da" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/egun,/obj/item/rig_module/mounted/egun,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Db" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Dc" = (/obj/structure/table/rack,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/drill,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Dd" = (/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,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"De" = (/obj/structure/table/rack,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/grenade_launcher,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Df" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Dg" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Dh" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Di" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"Dj" = (/obj/machinery/door/airlock/centcom{name = "Commander"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Dk" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Dl" = (/turf/unsimulated/floor/steel,/area/centcom/specops) +"Dm" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor/steel,/area/centcom/specops) +"Dn" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor/steel,/area/centcom/specops) +"Do" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/ammo_magazine/m556saw/ap,/obj/item/ammo_magazine/m556saw/ap,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/obj/item/ammo_magazine/m556saw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"Dp" = (/obj/structure/sign/nanotrasen,/turf/unsimulated/wall,/area/centcom/main_hall) +"Dq" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5; icon_state = "borderfloorcorner2_white"; pixel_x = 0; pixel_y = 0; tag = "icon-borderfloorcorner2_white (NORTHEAST)"},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Ds" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dt" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/obj/machinery/transhuman/resleever,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Du" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/obj/machinery/computer/transhuman/resleeving,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dv" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 1},/obj/machinery/camera/network/crescent,/obj/effect/floor_decal/corner_steel_grid{dir = 10},/obj/machinery/clonepod/transhuman,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dw" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dx" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dy" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"Dz" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) +"DA" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1386,27 +1554,27 @@ aaababababababababababababababababababababababababababababababababababababababab aaababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa aaababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaf -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadagahahahaiahahahahahahahahahahaiahahahahagadacacacacacacacacacaeajakakakalamanaoapapaeaqarasatauavawaxayaeazaAaBaCaDaEaFaeaGaHaIaJaKaLaf -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadahahahahahahahahahahahahahahahahahahahahahadacacacacacacacacacaeajakakakakakakakakakaeaMaraNaNaraMaMaMaMaeaOaPaQaQaQaRaSaTaUaVaWaXaYaYaf -aaabababababababababababababababababababababababababababababababababababacacaZaZaZaZaZaZaZaZacacacacacadahahahahahahahahahahahahahahahahahahahahahadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebaaeaeakakaeaMaMaMaMaMaMaMaMaMaeaObbbcbdbebfbgaTbdbdbdbdbdbdaf +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaceZeZeZeZeZeZeZeZeZeZeZeZeZeZeZ +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaceZjyjTjTjTjTjTjTjTjTjTjTkokoeZ +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpkpkpkpkpkpkpkpkpkpkpkpkpkpkXkZkYnunununununNApnOjTkoeZ +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpkpkpkpkpkpkpkpkpkpkpkpkpAqAsArAuAtAwAvAyAxAAAzACABkpkXAEADAFAFAFAFAFAFAFAGAHkoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpAIkokpAKAJAMALAOANAQAPARAqkokokokokokokokokokokokokpkXAEASAUATATAVAFAFAWnOjTkoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpAXkokpAZAYAYAYAYAYAYAYBaAqBbkokoBcBeBdBgBfBhkokoBikpBjjTjTjTjTjTjTBkBkjTjTkokoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBlkoAqBmAYBoBnBqBpBrAYBskpkokokoBtBvBuBxBwBykokoBzkpkpkpkpkpkpkpkpBABAkpkokokoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBBkoAqBCAYBEBDBGBFBHAYBIkpBKBJkokokokokokokokokoBLkpBMBNBNBNBOkpBPAYAYkpkpkpkpeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBQBRAqAqBSBSBSBSBSBSBSAqkpkpkpBTBTBTBTBTBTBTBTkpkpkpBUBVBVBVBUkpAYAYAYkpBWBYBXeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYBZAYAYAYAYAYAYAYBZAYAYCaAYAYAYAYAYAYAYAYCaAYBUBUCbCbCbBUBUAYAYAYCcBUBUCdeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYBUBUBUBUBUBUBUAYAYAYCeBUBUCfeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYCgAYAYAYAYAYAYAYCgAYAYAYAYAYAYAYAYAYAYAYAYAYBUBUCbCbCbBUBUAYAYAYCcBUBUCheZ +aaabababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqAqCiCiCiCiCiCiCiAqAqAqAqCjCjClCkCnCmCjCjAqAqAqBUBVBVBVBUkpAYAYAYkpCoCqCpeZ +aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCrkokokokokokokokokpkokokokoCtCsCvCukokokokoAqCwBNBNBNCxkpAYAYAYkpkpkpkpeZ +aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCykokokoCACzCCCBCBkpCDkokokokokokokokokokoCEAqkpkpkpkpkpkpAYAYAYkpCFCHCGeZ +aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCIkokokoCKCJCMCLCNkpCOkokokokokokokokokokoCPAqacacacacackpAYAYAYCQkokokoeZ +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadadAqacacacacacAqAYAYAqCSCRCUCTCWCVCMCLCNkpCYCXDaCZDcDbDeDdDgDfDiDhAqacacacacackpAYAYAYDjkokokoeZ +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadagahagAqkpkpkpkpkpBQDkDkAqaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaf +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadagahahahaiahahahahahahahahahahaiahahahahahDmDlDlDlDlDlDlDlDlDnaeajakakakalamanaoapapaeaqarasatauavawaxayaeazaAaBaCaDaEaFaeaGaHaIaJaKaLaf +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadahahahahahahahahahahahahahahahahahahahahahDmDlDlDlDlDlDlDlDlDnaeajakakakakakakakakakaeaMaraNaNaraMaMaMaMaeaOaPaQaQaQaRaSaTaUaVaWaXaYaYaf +aaabababababababababababababababababababababababababababababababababababacacaZaZaZaZaZaZaZaZacacacacacadahahahahahahahahahahahahahahahahahahahahahAqaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebaaeaeakakaeaMaMaMaMaMaMaMaMaMaeaObbbcbdbebfbgaTbdbdbdbdbdbdaf aaabababababababababababababababababababababababababababababababababababacacaZbhbibibibibjaZaZaZaZaZaZaZaZbkblblblaZaZaZaZaZaZaZaZaZaZaZaZadahahahaebmbnaebmbnaebmbnaebmbnaebmbnaebmboaeakakaeaMaraNataraMaMbparaeaObbbqbrbsbfbtaTbubdbdbdbdbvaf aaabababababababababababababababababababababababababababababababababababacacaZbhbibibibibjaZbwbxbybxbzbAbAbAbAbAbzbAbzbAbBaZbCbDbEbFbGbFbFadbHahahaebIbJaebIbJaebIbJaebIbJaebIbJaebIbJaeakbKaeaMaraNbLaraMaMaMaMaeaObMbNbNbNbObtaTbPbdbdbdbdbQaf aaabababababababababababababababababababababababababababababababababacacacacaZbRbibibibibSaZbAbTbTbTbTbTbAbAbAbTbTbTbTbAbUaZbFbFbFbFbFbFbFadahahahaebVbWaebXbYaebXbYaebXbYaebXbYaebXbYaebZbZaeaMaMaMaMaMaMaMaMcaaecbcccdcecfcgchaecibdbdbdbdcjaf @@ -1419,7 +1587,7 @@ aaababababababababababdrdsdtdtdtdtdudtdtdtdtdtdtdvdwdxababababababacacacacaZddde aaababababababababababdrdSdTdTdTdTdUdTdTdTdTdTdTdVdWdxababababababacacacacaZdddedfdfdXdfdfdgcOcOcOcOcOcOcOdYcOcOcOcOcOcOcOdgcIcIdicIcIdecPadahahahcrbdbdbdcrbddBeaebdEbdecedeecrbdbdbddJdKdKdKdKdKefegdOdOdOdOdOehcgcgeiaeacejejejekbNelemeneoaf aaababababababababababdrdSdTdTdTdTdTdTdTdTdUdTdTdTepdxababababababacacacacaZdddedfdfdfdfdfdgcOcOcOcOcOcOcOeqcOcOcOcOcOcOcOdgcIcIcIcIcIdecPadahahahcrbdbdbdcrbdbdbdbdbdbdbdbdercrbdbdbddJesdKetdKdKaeeuevewexeyezaeeAcVeBaeacejeCejeDeEeFeGeHeIaf aaababababababababababdrdSdTdTdUdUdTdTdTdTdTdTdTdTeJdxabababababeKacacacacaZdddedfdydfdydfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIdhcIdhcIdecPadahahahaebdbdbdeLbdbdbdbdeMeNeObdbdcrbdbdbdePejejejeQeQejejejejejejejejejejejejejejeRejejejejejejejeS -aaababababababababababdreTdTdTdTdTdTdTdTdTeUdTdUdUepdxababababababacacacacaZeVdedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIcIcIcIcIdeeVadahahahcrbdbdbdcrcxbdbdbdeXeXeYbdbdcrbdbdbdejeZfafbfcfcfdfefffgfcfhfifjfkfcflfmfnfofcfpfqfrfsftfufueS +aaababababababababababdreTdTdTdTdTdTdTdTdTeUdTdUdUepdxababababababacacacacaZeVdedfdfdfdfdfdgcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOdgcIcIcIcIcIdeeVadahahahcrbdbdbdcrcxbdbdbdeXeXeYbdbdcrbdbdbdejDofafbfcfcfdfefffgfcfhfifjfkfcflfmfnfofcfpfqfrfsftfufueS aaababababababababababdrdSdTdTdTdTdTdTdTdTdTdTdTfvfwdxababababababacacacacaZaZaZfxfxfxfxfxaZcNcOcOcOcOcOcOcOcOcOcOcOcOcOcNaZfxfxfxfxfxaZaZadahahahcrdlbdbdcrfzdEbdbdbdbdbdbdbdcrbdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS aaababababababababababdrfBfCfDfEfFfGfHfIfJfKfLfCfMfNfNfNfNfOfPababacacacacacacaZfQfQfQfQfQaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZdjdjdjdjdjaZacadahahahaebdbdbdaefSdEbddkbddzbdbdcvcrbdbdbdejfUfVfbfcfWfXfcfcfYfZgafcfcgbgcgdfcfcgegegefcfcgfgfgfgfeS aaababababababababababdrggghgigjgkglgmgngogpgqgqdWfNfNfNfNfNfNababacacacacacacaZaZaZaZaZaZaZacacacacacacacacacacacacacacacaZaZaZaZaZaZaZacadahahahcrbdbdbdaeaeaeaeaeaeaecreLcraebdbdbdejfAfcfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceS @@ -1430,17 +1598,17 @@ aaababababababababababdrdSgtgugtgtgtgtgtgtgtgtgtgtepdxabfNfNfNfNabacacacacacacac aaababababababababababdrdSgtgtgtgIgtgtgtgugtgtgIfvfMdxabfNfNhLfNabacacacacacacacacacgGhqhrhrhrhrhrhMhrhrhrhNhOhrhPgGacacacacacacacacacacacadahahahaehQhRbdhShTaebdbdbdaebdbdcweLbdbdhUejhVfcfchWfcfcfcfcfcfchXhGhGhYhZiahGhGibhlhlhlhlhlhlicideS aaababababababababababdrieififififigififihifififiiijdxabfOfNfNfNabacacacacacacacacacgGhqhrikhrhrilhtimhrhrhNinhriogGacacacacacacacacacacacadahahahaedlbdbdbdbdaedlbdbdaecvbdcvcrdziqirejhVfcishCitfcfcfcfciuePivhGiwixiyhGizejiAiAhlhlhlhlhlhleS aaababababababababababiBiCiCiCiCiCiCiCiCiCiCiCiCiCiCiDabfNfNfNfNabacacacacacacacacacgGiEiFiGiHiHiIhtiJhwhrhxiKiLiMgGacacacacacacacacacacacadahahahaeiNiOiPiQiRaeiSiTiUaeiViWcraeiXiYaeejhVfciZejjafcfcfcfcjbejjchGjdjejfhGjgejjhjhhlhlhlhljijieS -aaabababababababababababababababababababababababababababfNfNfNfOababababacacacacacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGgGgGgGgGgGgGgGgGgGgGadadadjkjkjkaeaeaeaeaeaeaeaeaeaeefcvbdcvefcrcraeejejejejejjlfcfcfcfcjmejjnjojphGjqjojrejjhjhhlhlhlhlhljseS -aaabababababababababababababababababababababababababababfNfNfNfNababababababacacacacacacacacacacacacgGjthrjugGjvjwjxjygGjzjAjBjAjAjCgGagahahahahahjDahahahahahahahahahahahahahahahahahjDahahagejjEfcfcfcfcjFejjGjGjHjIjHjGjGejjJjJjKjKjLjJjJjJeS -aaababababababababababababababababababababababababababjMjMjNjNjMjMjMjMababababacacacacacacacacacacacgGjOhrjPgGjQjRjSjTjUjVjWjXjWjWjYgGahahahahahahjDahahahahahahahahahahahahahahahahahjDahahahejjEfcfcfcfcjZkakbkckdhlkckekekekekdhlhlkckekekfeS -aaababababababababababababababababababababababababababjMkgkhkhkikjkkjMabababababacacacacacacacacacacgGklhrkmgGknkohrkpgGkqkrksktkukvgGagahahahkwahjDahahahahahahahahahahahahahahahahahjDahahahejkxfcfcfcfckykzkAkBkChlkBkDkDkDkDkDkEkFkDkDkDkGeS -aaababababababababababababababababababababababababababjMkikhkhkikjkkjMabababababacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGhrgGkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHjDjDjDejejejejejejejejejejePhlkIejejejejejkJkKejejejejeS -aaababababababababababababababababababababababababababjMjMkLkLjMjMjMjMabababababacacgGkNkOkPkQkRgGkSkTkUhrkVkWkXkYhrkZkHlalblcldlelflglhliljlelklllblmkHlnlololplolqlrlslrlqlolplololtkHahahahejlulvlwlvlxlwlvlyejlzhllAejlBlClDlElFlGlHlIlJlKeS -aaababababababababababababababababababababababababababjMkikhkhkikilLjMabababababacacgGlMhrhrhrlNgGlOlPhrhrlQlRlQlQhrlNkHlSlTlUlUlVlUlWlWlWlUlVlUlUlXlYkHlolZmamamamambmbmbmamamamamclokHbHahahejmdmdlwmdmdlwmdmdejkJhlkKejkJhlhlhlhlhlhlhlhlkKeS -aaababababababababababababababababababababababababababjMkikhkhkikilLjMababababababacgGmemfmgmhmigGmjmkmlhrhrhrhrhrhrmmkHmnlUlUlUlUmompmqmrmslUlUlUlUlUlUlomtmumvmwmxmymzmAmumBmCmDmElokHahahahejmFmGlwmGmHlwmGmIejkJhlkKejkJhlhlhlmJmJhlhlhlkKeS -aaababababababababababababababababababababababababababjMkikhkhkijMjMjMababababababacgGmKmLlQlQmMmNhrhrhrhrmfmOmPmQhrmRkHmSlUlUlUlUmTmUmVmWmXlUlUlUlUlUmYlomtmZnamunbmymzmAncmxndnemElokHahahahejmdnfngnhmdninhnjejnkhlkKejkJhlhlhlnlnmhlhlhlkKeS -aaababababababababababababababababababababababababababjMkikhkhkikjkkjMababababababacgGnnnonpnqnrnsnthrhrhrmLlQlQmMhrnukHnvnwlUlUlUlUlUlUlUlUlUlUlUlXnxkHlonynznznznznAnAnAnznznznznBlokHahahahejnCmdmdmdmdmdmdnDejkJhllGkelFnEnFhlhlhlhlnFnGkKeS -aaababababababababababababababababababababababababababjMlLkhkhkikjkkjMababababababacgGgGgGgGgGgGgGnHnInJnKnLhrhrnMnNnOkHnPnQnRlUlUnSnTlUnSnTlUlUnUnVnWkHltlololololonXnYnZlololololooakHahahahejobocodoeofogmdmdejkJhlhlhlhlnEohnFohnFnFoinGkKeS +aaabababababababababababababababababababababababababababfNfNfNfOababababacacacacacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGgGgGgGgGgGgGgGgGgGgGadadDpjkjkjkefaeaeaeaeaeaeaeaeaeefcvbdcvefcrcraeejejejejejjlfcfcfcfcjmejjnjojphGjqjojrejjhjhhlhlhlhlhljseS +aaabababababababababababababababababababababababababababfNfNfNfNababababababacacacacacacacacacacacacgGjthrjugGjvjwjxDqgGjzjAjBjAjAjCgGagahahahahahjDahahahahahahahahahahahahahahahahahjDahahagejjEfcfcfcfcjFejjGjGjHjIjHjGjGejjJjJjKjKjLjJjJjJeS +aaababababababababababababababababababababababababababjMjMjNjNjMjMjMjMababababacacacacacacacacacacacgGjOhrjPgGjQjRjSDrjUjVjWjXjWjWjYgGahahahahahahjDahahahahahahahahahahahahahahahahahjDahahahejjEfcfcfcfcjZkakbkckdhlkckekekekekdhlhlkckekekfeS +aaababababababababababababababababababababababababababjMkgkhkhkikjkkjMabababababacacacacacacacacacacgGklhrkmgGknDsqzhrgGkqkrksktkukvgGagahahahkwahjDahahahahahahahahahahahahahahahahahjDahahahejkxfcfcfcfckykzkAkBkChlkBkDkDkDkDkDkEkFkDkDkDkGeS +aaababababababababababababababababababababababababababjMkikhkhkikjkkjMabababababacacgGgGgGgGgGgGgGgGgGgGjjgGgGgGgGgGhrkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHkHjDjDjDejejejejejejejejejejePhlkIejejejejejkJkKejejejejeS +aaababababababababababababababababababababababababababjMjMkLkLjMjMjMjMabababababacacgGkNkOkPkQkRgGkSkTkUhrkVkWDuDtDvhrkHlalblcldlelflglhliljlelklllblmkHlnlololplolqlrlslrlqlolplololtkHahahahejlulvlwlvlxlwlvlyejlzhllAejlBlClDlElFlGlHlIlJlKeS +aaababababababababababababababababababababababababababjMkikhkhkikilLjMabababababacacgGlMhrhrhrlNgGlOlPhrhrlQlRlQlQlQDwkHlSlTlUlUlVlUlWlWlWlUlVlUlUlXlYkHlolZmamamamambmbmbmamamamamclokHbHahahejmdmdlwmdmdlwmdmdejkJhlkKejkJhlhlhlhlhlhlhlhlkKeS +aaababababababababababababababababababababababababababjMkikhkhkikilLjMababababababacgGmemfmgmhmigGmjmkmlhrhrhrhrhrhrDxkHmnlUlUlUlUmompmqmrmslUlUlUlUlUlUlomtmumvmwmxmymzmAmumBmCmDmElokHahahahejmFmGlwmGmHlwmGmIejkJhlkKejkJhlhlhlmJmJhlhlhlkKeS +aaababababababababababababababababababababababababababjMkikhkhkijMjMjMababababababacgGmKmLlQlQmMmNhrhrhrhrmfmOmPmQhrmmkHmSlUlUlUlUmTmUmVmWmXlUlUlUlUlUmYlomtmZnamunbmymzmAncmxndnemElokHahahahejmdnfngnhmdninhnjejnkhlkKejkJhlhlhlnlnmhlhlhlkKeS +aaababababababababababababababababababababababababababjMkikhkhkikjkkjMababababababacgGnnnonpnqnrnsnthrhrhrmLlQlQmMhrmRkHnvnwlUlUlUlUlUlUlUlUlUlUlUlXnxkHlonynznznznznAnAnAnznznznznBlokHahahahejnCmdmdmdmdmdmdnDejkJhllGkelFnEnFhlhlhlhlnFnGkKeS +aaababababababababababababababababababababababababababjMlLkhkhkikjkkjMababababababacgGgGgGgGgGgGgGnHnInJnKnLhrhrDyDADzkHnPnQnRlUlUnSnTlUnSnTlUlUnUnVnWkHltlololololonXnYnZlololololooakHahahahejobocodoeofogmdmdejkJhlhlhlhlnEohnFohnFnFoinGkKeS aaabababababababababababababababojokokokokokokokokokokolomononomomomomababababababacacacacacacacgGgGgGgGhthtoohrgGgGgGkHkHkHkHopoqkHkHorkHkHosoqkHkHkHotototototototototototototototototahahahouejejejejejovjKjKejkJhlkFkDkEhlowowowowowowhlkKeS aaabababababababababababababababomoxoyozoyoyoyoyozoyoAoBoCoCoCoDoEabababababababababacacacacacacgGoFoGoHoGoIhrhroJoGoKkHoLoMoNlUlUoOoPlUoQoRlUlUoSoToLotoUoVoWoXotoYoZpaoZoYotpbpbpbpbotahahahpclGkekelHkekdhlhlkclFhlkKejkJhlhlhlhlhlhlhlhlkKeS aaabababababababababababababababomoxoyfyeWeWeWeWfyoyoAoBoCoCoCpfoEabababababababababacacacacacacgGpglPhrlPphhrhrhrhrpikHpjlUlUlUlUpklTnwlXpllUlUlUlUpmotoUpnoWoXotpopopopopootppppppppotahahahpckFkChlkBkDkDkChlkBkChlpqejprAnkDkDkEkFkDpsptpueS diff --git a/maps/tether/tether-07-misc.dmm b/maps/tether/tether-07-misc.dmm index c1189bb371..550e727b88 100644 --- a/maps/tether/tether-07-misc.dmm +++ b/maps/tether/tether-07-misc.dmm @@ -492,7 +492,7 @@ "jx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/obj/structure/sign/poster{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "jy" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/shuttle/trade/centcom) "jz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/carpet,/area/shuttle/trade/centcom) -"jA" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/shuttle/trade/centcom) +"jA" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy{name = "Super Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "jB" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/inflatable_duck,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "jC" = (/obj/structure/table/steel_reinforced,/obj/item/stack/material/mhydrogen,/obj/item/stack/material/diamond,/obj/item/stack/material/sandstone,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) "jD" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/rig/internalaffairs,/obj/item/clothing/head/helmet/space/void/wizard,/obj/item/clothing/suit/space/void/wizard,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom) @@ -904,7 +904,6 @@ "rt" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base) "ru" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base) "rv" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base) -"rw" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy{name = "Super Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy{name = "Heavy Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/obj/item/weapon/storage/box/syndie_kit/demolitions{name = "Demolitions kit"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rx" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "ry" = (/obj/machinery/door/airlock/centcom{name = "Equipment Storage"; req_one_access = list(150)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base) "rz" = (/obj/machinery/vending/cigarette{name = "Breach Corp cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base) @@ -1085,7 +1084,7 @@ apgXgXgXgXhlinipioipipipipioipifhlgXgXgXgXapixhsiuheizhqhwhUiAisiiihikiBhwhqhwhe apgXgXgXgXhliaipioipipipipioipifhlgXgXgXgXaphZhwizhqiFhsiuigiGiwijisiiiHhehsiuhqiFiuilapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapapiEiEiEiEiEiEiIiJiKiEapapapapapiEiEiLiMiEiEapapiEiEiEiEiNiOgpap apgXgXgXgXhlinipioipipipipioipiqhlgXgXgXgXapiliuiFhsiPhwiziriQiAihiwijiRhqhwizhsiPizitapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapiEiCiSiTiEiUiViWiXiYiEiEapapapiEiEiCiDiDiCiEiIiKiCiZjaiEiNjbgpap apgXgXgXgXhlinipioipipipipioipifhlgXgXgXgXapitiziPhwhfiuiFivjciGisiAihjdhsiuiFhwhfiFixapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapjejfjgjgjhjgjgjijjjkiEiEiIiJiKiEiEjljgjgjmiEjnjojpjgjqiEiNjbgpap -apgXgXgXgXhlinipioipipipipioipifhlgXgXgXgXapixiFhfiuhaiziPiBjrjsiHjdiBjshwiziPiuhaiPjtapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapjujvjwjxiEjgjgjyjzjAiEjBjCjDjEjFjGjHjIjIjgjJjgjgjgjgjKiEiNjLgpap +apgXgXgXgXhlinipioipipipipioipifhlgXgXgXgXapixiFhfiuhaiziPiBjrjsiHjdiBjshwiziPiuhaiPjtapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapjujvjwjxiEjgjgjyjzjkiEjBjCjDjEjFjGjHjIjIjgjJjgjgjgjgjKiEiNjLgpap apgXgXgXgXhliaipioipipipipioipifhlgXgXgXgXapjtiPhaizhciFhfizgYhaiFhfizhaiuiFhfizhchfjMapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapiEiEiEiEiEiEjNjgjgjOiEjPjQjRjSjTjUjVjIjIjgjJjgjWjXjgjgiEiEiEgpap apgXgXgXgXhlinipioipipipipioipiqhlgXgXgXgXapjMhfhciFgYiPhaiFhdhciPhaiFhciziPhaiFgYhajYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapapapapapapapapapapiEiEiEjZjgiEiCkakbkckdkekfjVjIjgjNiCiEiEiCkgkhiEiEapgpap apgXgXgXgXhlinipioipipipipioipifhlgXgXgXgXapjYhagYiPhdhfhciPgZgYhfhciPgYiFhfhciPhdhcgFapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapgpapiEkikjiEiEiEiEiEiEiEiEkkjgjgjgjgkljgjgjgjgiEiEkmjgiCiEknkniEiEiEiEapapgpap @@ -1151,7 +1150,7 @@ oYqFqGqHqIpftIoYqJqKoYqLoYqMqNoYqTrgpqpqqPtJqQoYqeqRqotKqeapqfqSqrtLqfapapaphZhw oYpfpfpfpfpftMoYoYoYoYpfoYoYoYoYpqpqpqpqqUqUpqoYqeqRqotKqeapqfqSqrtLqfapapapilhepOpOpSpSpGhqitappjpTpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYqWqXqXqWpfqYoYqZrarbpfrcrdrerfrzpqpqrhrirjrkoYqeqRqoqpqeapqfqSqrqsqfapapapithqpSpSqVpypOhsixappjpkpBpBpBpBpBqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYpfpfpfpfpfrmoYrnpfpfpfpfpfrorfrppqpqpqrqrqpqoYqerrqoqoqeapqfqrqrqrqfapapapixhsqVpyrlpGpShwhZappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap -oYrstNtPtOrwpMoYrxpfpfpfpfpfpfrypqpqpqpqpqpqrAoYqerBqorCqeapqfrDqrrEqfapapaphZhwiHigiRiriBiuilappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap +oYrstNtPtOjApMoYrxpfpfpfpfpfpfrypqpqpqpqpqpqrAoYqerBqorCqeapqfrDqrrEqfapapaphZhwiHigiRiriBiuilappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYoYoYoYoYoYoYoYrFpfpfpfpfpfrGoYrHpfpfpfpfqloYoYqerIrJrIqeapqfrKrLrKqfapapapiliuiFhsiPhwizizitappjpTplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYpfpfrMqjrNrOoYrPrQrRrSrTrUrVoYrWpfpfpfpfqlrXoYqeqerYqeqeapqfqfrZqfqfapapapitiziPhwhfiuiFiFixappjpkplplplplplqgpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap oYsasbscpfpfsdoYoYoYseseseoYoYoYsfpfpfpfpfqloYoYoYoYsgoYoYoYoYoYshoYoYoYapapixiFhfiuhaiziPiPjtappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap From 1ca8244e5dc310bb0cf4551ba13360d1507aae32 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 8 Jun 2017 20:28:53 +0100 Subject: [PATCH 139/261] Puts 3x more gas in pressure tanks --- code/ATMOSPHERICS/pipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 52193f96a2..e057121798 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -1060,7 +1060,7 @@ desc = "A large vessel containing pressurized gas." volume = 10000 //in liters, 1 meters by 1 meters by 2 meters ~tweaked it a little to simulate a pressure tank without needing to recode them yet - var/start_pressure = 25*ONE_ATMOSPHERE + var/start_pressure = 75*ONE_ATMOSPHERE //Vorestation edit level = 1 dir = SOUTH From f154683662bfc1cef2edbc369437384587455581 Mon Sep 17 00:00:00 2001 From: Yoshax Date: Thu, 8 Jun 2017 21:52:56 +0100 Subject: [PATCH 140/261] Removes the snowflake human defined verbs from the majority of the reagent implants --- .../weapons/implants/implantreagent_vr.dm | 4 +- .../vore/fluffstuff/custom_items_vr.dm | 40 ++++++------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implantreagent_vr.dm b/code/game/objects/items/weapons/implants/implantreagent_vr.dm index 615b74ff49..6c7eb572e2 100644 --- a/code/game/objects/items/weapons/implants/implantreagent_vr.dm +++ b/code/game/objects/items/weapons/implants/implantreagent_vr.dm @@ -14,6 +14,8 @@ var/list/self_emote_descriptor = list("transfer") //In format of You [self_emote_descriptor] some [generated_reagent] into [container] var/list/random_emote = list() //An emote the person with the implant may be forced to perform after a prob check, such as [X] meows. var/assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant + var/verb_name = "Transfer From Reagent Implant" + var/verb_desc = "Remove reagents from am internal reagent into a container" /obj/item/weapon/implant/reagent_generator/New() ..() @@ -31,7 +33,7 @@ /obj/item/weapon/implant/reagent_generator/implanted(mob/living/carbon/source) processing_objects += src to_chat(source, "You implant [source] with \the [src].") - source.verbs |= assigned_proc + assigned_proc = new assigned_proc(source, verb_name, verb_desc) return 1 /obj/item/weapon/implant/reagent_generator/process() diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 50179ed45e..6aa174e39d 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -649,19 +649,12 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie emote_descriptor = list("squeezes milk", "tugs on Tempest's breasts, milking them") self_emote_descriptor = list("squeeze") random_emote = list("moos quietly") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_tempest + verb_name = "Milk" + verb_desc = "Grab Tempest's nipples and milk them into a container! May cause blushing and groaning." /obj/item/weapon/implanter/reagent_generator/tempest implant_type = /obj/item/weapon/implant/reagent_generator/tempest -/mob/living/carbon/human/proc/use_reagent_implant_tempest() - set name = "Milk" - set desc = "Grab Tempest's nipples and milk them into a container! May cause blushing and groaning." - set category = "Object" - set src in view(1) - - do_reagent_implant(usr) - //Hottokeeki: Belle Day /obj/item/weapon/implant/reagent_generator/belle @@ -673,20 +666,12 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie emote_descriptor = list("squeezes milk", "tugs on Belle's breasts/udders, milking them", "extracts milk") self_emote_descriptor = list("squeeze", "extract") random_emote = list("moos", "mrours", "groans softly") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_belle + verb_name = "Milk" + verb_desc = "Obtain Belle's milk and put it into a container! May cause blushing and groaning, or arousal." /obj/item/weapon/implanter/reagent_generator/belle implant_type = /obj/item/weapon/implant/reagent_generator/belle -/mob/living/carbon/human/proc/use_reagent_implant_belle() - set name = "Milk" - set desc = "Obtain Belle's milk and put it into a container! May cause blushing and groaning, or arousal." - set category = "Object" - set src in view(1) - - do_reagent_implant(usr) - - //Vorrarkul: Theodora Lindt /obj/item/weapon/implant/reagent_generator/vorrarkul generated_reagent = "chocolate_milk" @@ -697,19 +682,12 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie emote_descriptor = list("squeezes chocolate milk from Theodora", "tugs on Theodora's nipples, milking them", "kneads Theodora's breasts, milking them") self_emote_descriptor = list("squeeze", "knead") random_emote = list("moans softly", "gives an involuntary squeal") - assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_vorrarkul + verb_name = "Milk" + verb_desc = "Grab Theodora's breasts and extract delicious chocolate milk from them!" /obj/item/weapon/implanter/reagent_generator/vorrarkul implant_type = /obj/item/weapon/implant/reagent_generator/vorrarkul -/mob/living/carbon/human/proc/use_reagent_implant_vorrarkul() - set name = "Milk" - set desc = "Grab Theodora's breasts and extract delicious chocolate milk from them!" - set category = "Object" - set src in view(1) - - do_reagent_implant(usr) - //SpoopyLizz: Roiz Lizden //I made this! Woo! //implant @@ -731,6 +709,12 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little") assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_roiz +/obj/item/weapon/implant/reagent_generator/roiz/implanted(mob/living/carbon/source) + processing_objects += src + to_chat(source, "You implant [source] with \the [src].") + source.verbs |= assigned_proc + return 1 + /obj/item/weapon/implanter/reagent_generator/roiz implant_type = /obj/item/weapon/implant/reagent_generator/roiz From 8c8940a4f9d55f62c0cd5184bb5df6869e8f881a Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 8 Jun 2017 17:13:54 -0400 Subject: [PATCH 141/261] Adds macros to assist with lazily instantiating lists. * For various reasons its best to not instantiate lists until they are actually going to be used, especially if there is a good chance that a given list variable might *never* be used during the lifetime of an object. * These macros make it simple and concise to add remove and access entries in lazily created lists. --- code/_macros.dm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/code/_macros.dm b/code/_macros.dm index 463a7da26d..fa95d4a8ae 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -51,3 +51,25 @@ #define to_chat(target, message) target << message #define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE) + +// Helper macros to aid in optimizing lazy instantiation of lists. +// All of these are null-safe, you can use them without knowing if the list var is initialized yet + +//Picks from the list, with some safeties, and returns the "default" arg if it fails +#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) +// Ensures L is initailized after this point +#define LAZYINITLIST(L) if (!L) L = list() +// Sets a L back to null iff it is empty +#define UNSETEMPTY(L) if (L && !L.len) L = null +// Removes I from list L, and sets I to null if it is now empty +#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } +// Adds I to L, initalizing I if necessary +#define LAZYADD(L, I) if(!L) { L = list(); } L += I; +// Reads I from L safely - Works with both associative and traditional lists. +#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) +// Reads the length of L, returning 0 if null +#define LAZYLEN(L) length(L) +// Null-safe L.Cut() +#define LAZYCLEARLIST(L) if(L) L.Cut() +// Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. +#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) From 2969911c9d018a3a8ff00d96293697a293df2093 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 8 Jun 2017 16:54:42 -0400 Subject: [PATCH 142/261] Converts area.all_doors list to be lazily instantiated as a simple example of using the lazy list macros. --- code/game/area/Space Station 13 areas.dm | 2 +- code/game/area/areas.dm | 4 ++++ code/game/machinery/doors/firedoor.dm | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index be536612b4..5d869021af 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -48,7 +48,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/obj/machinery/power/apc/apc = null var/no_air = null // var/list/lights // list of all lights on this area - var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area + var/list/all_doors = null //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area var/firedoors_closed = 0 var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/list/forced_ambience = null diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index db79ad8d51..e9cd135aec 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -87,6 +87,8 @@ /area/proc/firedoors_close() if(!firedoors_closed) firedoors_closed = TRUE + if(!all_doors) + return for(var/obj/machinery/door/firedoor/E in all_doors) if(!E.blocked) if(E.operating) @@ -99,6 +101,8 @@ /area/proc/firedoors_open() if(firedoors_closed) firedoors_closed = FALSE + if(!all_doors) + return for(var/obj/machinery/door/firedoor/E in all_doors) if(!E.blocked) if(E.operating) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 1162264dd7..6ccbb46ac1 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -60,18 +60,18 @@ var/area/A = get_area(src) ASSERT(istype(A)) - A.all_doors.Add(src) + LAZYADD(A.all_doors, src) areas_added = list(A) for(var/direction in cardinal) A = get_area(get_step(src,direction)) if(istype(A) && !(A in areas_added)) - A.all_doors.Add(src) + LAZYADD(A.all_doors, src) areas_added += A /obj/machinery/door/firedoor/Destroy() for(var/area/A in areas_added) - A.all_doors.Remove(src) + LAZYREMOVE(A.all_doors, src) . = ..() /obj/machinery/door/firedoor/get_material() From 96a9527d0bcf6aa1980e2bd0ebf75423a98ec662 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 8 Jun 2017 17:13:54 -0400 Subject: [PATCH 143/261] Adds macros to assist with lazily instantiating lists. * For various reasons its best to not instantiate lists until they are actually going to be used, especially if there is a good chance that a given list variable might *never* be used during the lifetime of an object. * These macros make it simple and concise to add remove and access entries in lazily created lists. --- code/_macros.dm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/code/_macros.dm b/code/_macros.dm index befbc99a54..a3e4065544 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -62,3 +62,25 @@ #define qdel_null(x) if(x) { qdel(x) ; x = null } #define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } + +// Helper macros to aid in optimizing lazy instantiation of lists. +// All of these are null-safe, you can use them without knowing if the list var is initialized yet + +//Picks from the list, with some safeties, and returns the "default" arg if it fails +#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) +// Ensures L is initailized after this point +#define LAZYINITLIST(L) if (!L) L = list() +// Sets a L back to null iff it is empty +#define UNSETEMPTY(L) if (L && !L.len) L = null +// Removes I from list L, and sets I to null if it is now empty +#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } +// Adds I to L, initalizing I if necessary +#define LAZYADD(L, I) if(!L) { L = list(); } L += I; +// Reads I from L safely - Works with both associative and traditional lists. +#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) +// Reads the length of L, returning 0 if null +#define LAZYLEN(L) length(L) +// Null-safe L.Cut() +#define LAZYCLEARLIST(L) if(L) L.Cut() +// Reads L or an empty list if L is not a list. Note: Does NOT assign, L may be an expression. +#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) From 3e84cbbbfd6bc27bb8ac37fa3ff9fcecc0f90295 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 8 Jun 2017 16:54:42 -0400 Subject: [PATCH 144/261] Converts area.all_doors list to be lazily instantiated as a simple example of using the lazy list macros. --- code/game/area/Space Station 13 areas.dm | 2 +- code/game/area/areas.dm | 4 ++++ code/game/machinery/doors/firedoor.dm | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index b98b2370ce..610e5577f6 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -48,7 +48,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station var/obj/machinery/power/apc/apc = null var/no_air = null // var/list/lights // list of all lights on this area - var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area + var/list/all_doors = null //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area var/firedoors_closed = 0 var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/list/forced_ambience = null diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 4a77ec2c84..6ce2de18d3 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -75,6 +75,8 @@ /area/proc/firedoors_close() if(!firedoors_closed) firedoors_closed = TRUE + if(!all_doors) + return for(var/obj/machinery/door/firedoor/E in all_doors) if(!E.blocked) if(E.operating) @@ -87,6 +89,8 @@ /area/proc/firedoors_open() if(firedoors_closed) firedoors_closed = FALSE + if(!all_doors) + return for(var/obj/machinery/door/firedoor/E in all_doors) if(!E.blocked) if(E.operating) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 1162264dd7..6ccbb46ac1 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -60,18 +60,18 @@ var/area/A = get_area(src) ASSERT(istype(A)) - A.all_doors.Add(src) + LAZYADD(A.all_doors, src) areas_added = list(A) for(var/direction in cardinal) A = get_area(get_step(src,direction)) if(istype(A) && !(A in areas_added)) - A.all_doors.Add(src) + LAZYADD(A.all_doors, src) areas_added += A /obj/machinery/door/firedoor/Destroy() for(var/area/A in areas_added) - A.all_doors.Remove(src) + LAZYREMOVE(A.all_doors, src) . = ..() /obj/machinery/door/firedoor/get_material() From 059dad893da255b15396f1ce8bc831a74b9d8d0b Mon Sep 17 00:00:00 2001 From: Yoshax Date: Fri, 9 Jun 2017 05:21:06 +0100 Subject: [PATCH 145/261] Fixes some colourisation issues --- code/modules/vore/appearance/sprite_accessories_vr.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index c0b3898823..635f7b6bac 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -476,6 +476,7 @@ desc = "" icon_state = "doublekitsune" do_colouration = 1 + color_blend_mode = ICON_MULTIPLY /datum/sprite_accessory/tail/succubus_color name = "succubus, colorable (+wings)" @@ -530,6 +531,7 @@ icon_state = "harpywings" do_colouration = 1 show_species_tail = 1 + color_blend_mode = ICON_MULTIPLY /datum/sprite_accessory/tail/liquidfirefly_gazer name = "gazer eyestalks (Liquidfirefly)" From fd3815ea2e6c42f78e0e1e3fee4d82f1367434f1 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 8 Jun 2017 23:57:05 -0400 Subject: [PATCH 146/261] Greases up get_blahblah_fast Untypes lists, obj is more likely so it goes first, uses get_turf now that get_turf uses the get_step witchcraft method. --- code/_helpers/game.dm | 30 ++++++++++++++++-------------- code/modules/mob/emote.dm | 7 +++++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index b59857c8f6..d7ee78ff8f 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -271,20 +271,22 @@ var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) var/list/hearturfs = list() - for(var/atom/movable/AM in hear) - if(ismob(AM)) - mobs += AM - hearturfs += AM.locs[1] - else if(isobj(AM)) - objs += AM - hearturfs += AM.locs[1] + for(var/thing in hear) + if(istype(thing,/obj)) + objs += thing + hearturfs += get_turf(thing) + else if(istype(thing,/mob)) + mobs += thing + hearturfs += get_turf(thing) //A list of every mob with a client - for(var/mob/M in player_list) - if(M.loc && M.locs[1] in hearturfs) - mobs |= M + for(var/mob in player_list) + if(get_turf(mob) in hearturfs) + mobs |= mob + continue - else if(M.stat == DEAD && !M.forbid_seeing_deadchat) + var/mob/M = mob + if(M.stat == DEAD && !M.forbid_seeing_deadchat) switch(type) if(1) //Audio messages use ghost_ears if(M.is_preference_enabled(/datum/client_preference/ghost_ears)) @@ -294,9 +296,9 @@ mobs |= M //For objects below the top level who still want to hear - for(var/obj/O in listening_objects) - if(O.loc && O.locs[1] in hearturfs) - objs |= O + for(var/obj in listening_objects) + if(get_turf(obj) in hearturfs) + objs |= obj return list("mobs" = mobs, "objs" = objs) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index b2748e6f06..4de1dcf595 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -34,11 +34,14 @@ var/list/m_viewers = in_range["mobs"] var/list/o_viewers = in_range["objs"] - for(var/mob/M in m_viewers) + for(var/mob in m_viewers) + var/mob/M = mob spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes. if(M) M.show_message(message, m_type) - for(var/obj/O in o_viewers) + + for(var/obj in o_viewers) + var/obj/O = obj spawn(0) if(O) O.see_emote(src, message, m_type) From 3e5ebb72f66979ed6fcce7ccd19007d6b96abdf9 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 8 Jun 2017 23:57:45 -0400 Subject: [PATCH 147/261] Fix subtle emotes to work inside dogborgs, objects, brains Title! --- code/modules/mob/say_vr.dm | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 7df92b802b..bb2851184d 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -12,6 +12,8 @@ return message = sanitize(message) + if(!message) + return set_typing_indicator(0) if(use_me) @@ -19,8 +21,6 @@ else usr.emote_vr(message) - - /mob/proc/custom_emote_vr(var/m_type=1,var/message = null) //This would normally go in emote.dm if(stat || !use_me && usr == src) src << "You are unable to emote." @@ -40,32 +40,23 @@ else return - if (message) log_emote("[name]/[key] : [message]") - for(var/mob/M in player_list) - if (!M.client) - continue //skip monkeys and leavers - if (istype(M, /mob/new_player)) - continue - if(findtext(message," snores.")) //Because we have so many sleeping people. - break - if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) - M.show_message(message, m_type) - var/list/subtle = get_mobs_or_objects_in_view(1,src) - for(var/I in subtle) - if(isobj(I)) - spawn(0) - if(I) //It's possible that it could be deleted in the meantime. - var/obj/O = I - O.see_emote(src, message, 2) - else if(ismob(I)) - var/mob/M = I + var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote + var/list/vis_mobs = vis["mobs"] + var/list/vis_objs = vis["objs"] + + for(var/vismob in vis_mobs) + var/mob/M = vismob + spawn(0) M.show_message(message, 2) - + for(var/visobj in vis_objs) + var/obj/O = visobj + spawn(0) + O.see_emote(src, message, 2) /mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm if(act == "me") - return custom_emote_vr(type, message) \ No newline at end of file + return custom_emote_vr(type, message) From 7de82a599d1690b8afb73bc8aaab0d3da85a14a9 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 8 Jun 2017 23:57:05 -0400 Subject: [PATCH 148/261] Greases up get_blahblah_fast Untypes lists, obj is more likely so it goes first, uses get_turf now that get_turf uses the get_step witchcraft method. --- code/_helpers/game.dm | 30 ++++++++++++++++-------------- code/modules/mob/emote.dm | 7 +++++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index b59857c8f6..d7ee78ff8f 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -271,20 +271,22 @@ var/list/hear = dview(range,T,INVISIBILITY_MAXIMUM) var/list/hearturfs = list() - for(var/atom/movable/AM in hear) - if(ismob(AM)) - mobs += AM - hearturfs += AM.locs[1] - else if(isobj(AM)) - objs += AM - hearturfs += AM.locs[1] + for(var/thing in hear) + if(istype(thing,/obj)) + objs += thing + hearturfs += get_turf(thing) + else if(istype(thing,/mob)) + mobs += thing + hearturfs += get_turf(thing) //A list of every mob with a client - for(var/mob/M in player_list) - if(M.loc && M.locs[1] in hearturfs) - mobs |= M + for(var/mob in player_list) + if(get_turf(mob) in hearturfs) + mobs |= mob + continue - else if(M.stat == DEAD && !M.forbid_seeing_deadchat) + var/mob/M = mob + if(M.stat == DEAD && !M.forbid_seeing_deadchat) switch(type) if(1) //Audio messages use ghost_ears if(M.is_preference_enabled(/datum/client_preference/ghost_ears)) @@ -294,9 +296,9 @@ mobs |= M //For objects below the top level who still want to hear - for(var/obj/O in listening_objects) - if(O.loc && O.locs[1] in hearturfs) - objs |= O + for(var/obj in listening_objects) + if(get_turf(obj) in hearturfs) + objs |= obj return list("mobs" = mobs, "objs" = objs) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index b2748e6f06..4de1dcf595 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -34,11 +34,14 @@ var/list/m_viewers = in_range["mobs"] var/list/o_viewers = in_range["objs"] - for(var/mob/M in m_viewers) + for(var/mob in m_viewers) + var/mob/M = mob spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes. if(M) M.show_message(message, m_type) - for(var/obj/O in o_viewers) + + for(var/obj in o_viewers) + var/obj/O = obj spawn(0) if(O) O.see_emote(src, message, m_type) From 5236e2675f6acf956b0cfcdc77bc0a5d4283b06e Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Thu, 8 Jun 2017 23:03:02 -0400 Subject: [PATCH 149/261] NIF Fixes and Soulcatcher NIFSoft, Money Tweak --- code/__defines/nifsoft.dm | 5 +- code/game/jobs/job/job.dm | 2 +- .../client/preference_setup/vore/08_nif.dm | 11 +- .../mob/living/carbon/human/emote_vr.dm | 36 +++ code/modules/nifsoft/nif.dm | 46 +++- code/modules/nifsoft/nif_statpanel.dm | 10 +- code/modules/nifsoft/nifsoft.dm | 3 + code/modules/nifsoft/software/01_vision.dm | 9 +- .../nifsoft/software/13_soulcatcher.dm | 258 ++++++++++++++++++ code/modules/nifsoft/software/15_misc.dm | 2 +- code/modules/vore/persist/persist_vr.dm | 4 +- vorestation.dme | 1 + 12 files changed, 361 insertions(+), 26 deletions(-) create mode 100644 code/modules/nifsoft/software/13_soulcatcher.dm diff --git a/code/__defines/nifsoft.dm b/code/__defines/nifsoft.dm index 06d1b0c7aa..daf63425ea 100644 --- a/code/__defines/nifsoft.dm +++ b/code/__defines/nifsoft.dm @@ -36,9 +36,10 @@ #define NIF_HEATSINK 29 #define NIF_COMPLIANCE 30 #define NIF_SIZECHANGE 31 +#define NIF_SOULCATCHER 32 // Must be equal to the highest number above -#define TOTAL_NIF_SOFTWARE 31 +#define TOTAL_NIF_SOFTWARE 32 ////////////////////// // NIF flag list hints @@ -83,6 +84,8 @@ #define NIF_O_APCCHARGE 0x2 #define NIF_O_PRESSURESEAL 0x4 #define NIF_O_HEATSINKS 0x8 +#define NIF_O_SCMYSELF 0x10 //Soulcatcher stuff +#define NIF_O_SCOTHERS 0x20 /////////////////// // applies_to flags diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 6add65ce55..dd265203d6 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -54,7 +54,7 @@ if(COMPANY_OPPOSED) loyalty = 0.70 //give them an account in the station database - var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * ECO_MODIFIER + var/money_amount = (rand(15,40) + rand(15,40)) * loyalty * economic_modifier * ECO_MODIFIER //VOREStation Edit - Smoothed peaks. var/datum/money_account/M = create_account(H.real_name, money_amount, null) if(H.mind) var/remembered_info = "" diff --git a/code/modules/client/preference_setup/vore/08_nif.dm b/code/modules/client/preference_setup/vore/08_nif.dm index 52586d3bcf..62ebbdbeac 100644 --- a/code/modules/client/preference_setup/vore/08_nif.dm +++ b/code/modules/client/preference_setup/vore/08_nif.dm @@ -2,6 +2,7 @@ /datum/preferences var/obj/item/device/nif/nif_path var/nif_durability + var/list/nif_savedata // Definition of the stuff for NIFs /datum/category_item/player_setup_item/vore/nif @@ -11,10 +12,12 @@ /datum/category_item/player_setup_item/vore/nif/load_character(var/savefile/S) S["nif_path"] >> pref.nif_path S["nif_durability"] >> pref.nif_durability + S["nif_savedata"] >> pref.nif_savedata /datum/category_item/player_setup_item/vore/nif/save_character(var/savefile/S) S["nif_path"] << pref.nif_path S["nif_durability"] << pref.nif_durability + S["nif_savedata"] << pref.nif_savedata /datum/category_item/player_setup_item/vore/nif/sanitize_character() if(pref.nif_path && !ispath(pref.nif_path)) //We have at least a text string that should be a path. @@ -23,19 +26,23 @@ pref.nif_path = null //Kill! WARNING("Loaded a NIF but it was an invalid path, [pref.real_name]") - if(ispath(pref.nif_path) && !pref.nif_durability) //How'd you lose this? + if(ispath(pref.nif_path) && isnull(pref.nif_durability)) //How'd you lose this? pref.nif_durability = initial(pref.nif_path.durability) //Well, have a new one, my bad. WARNING("Loaded a NIF but with no durability, [pref.real_name]") + if(!islist(pref.nif_savedata)) + pref.nif_savedata = list() + /datum/category_item/player_setup_item/vore/nif/copy_to_mob(var/mob/living/carbon/human/character) //If you had a NIF... if((character.type == /mob/living/carbon/human) && ispath(pref.nif_path) && pref.nif_durability) - new pref.nif_path(character,pref.nif_durability) + new pref.nif_path(character,pref.nif_durability,pref.nif_savedata) //And now here's the trick. We wipe these so that if they die, they lose the NIF. //Backup implants will start saving this again periodically, and so will cryo'ing out. pref.nif_path = null pref.nif_durability = null + pref.nif_savedata = null var/savefile/S = new /savefile(pref.path) if(!S) WARNING ("Couldn't load NIF save savefile? [pref.real_name]") S.cd = "/character[pref.default_slot]" diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 274ddd2904..4b3091b440 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -13,6 +13,42 @@ if ("awoo") message = "awoos loudly. AwoooOOOOoooo!" m_type = 2 + if ("nsay") + if(!nif) + to_chat(src,"You can't use *nsay without a NIF.") + return 1 + var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER) + if(!SC) + to_chat(src,"You need the Soulcatcher software to use *nme.") + return 1 + if(!SC.brainmob.mind) + to_chat(src,"You need a loaded mind to use *nme.") + return 1 + var/nifmessage = sanitize(input("Type a message to say.") as text|null) + if(nifmessage) + nifmessage = "\[\icon[nif.big_icon]NIF\] [src] speaks, \"[nifmessage]\"" + to_chat(SC.brainmob,nifmessage) + to_chat(src,nifmessage) + return 1 + + if ("nme") + if(!nif) + to_chat(src,"You can't use *nme without a NIF.") + return 1 + var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER) + if(!SC) + to_chat(src,"You need the Soulcatcher software to use *nme.") + return 1 + if(!SC.brainmob.mind) + to_chat(src,"You need a loaded mind to use *nme.") + return 1 + var/nifmessage = sanitize(input("Type an action to perform.") as text|null) + if(nifmessage) + nifmessage = "\[\icon[nif.big_icon]NIF\] [src] [nifmessage]" + to_chat(SC.brainmob,nifmessage) + to_chat(src,nifmessage) + return 1 + if ("flip") var/danger = 1 //Base 1% chance to break something. var/list/involved_parts = list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index e8f4976f48..8dc8d9c52e 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -1,3 +1,14 @@ +/* ////////////////////////////// +The NIF has a proc API shared with NIFSofts, and you should not really ever +directly interact with this API. Procs like install(), uninstall(), etc should +not be directly called. If you want to install a new NIFSoft, pass the NIF in +the constructor for a new instance of the NIFSoft. If you want to force a NIFSoft +to be uninstalled, use imp_check to get a reference to it, and call +uninstall() only on the return value of that. + +You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable it. +*/ ////////////////////////////// + //Holder on humans to prevent having to 'find' it every time /mob/living/carbon/human/var/obj/item/device/nif/nif @@ -45,17 +56,22 @@ "seems to be daydreaming", "focuses elsewhere for a moment") -//Constructor comes with a free AR HUD -/obj/item/device/nif/New(var/newloc,var/wear) - ..(newloc) + var/list/save_data - //Required for AR stuff. - nif_hud = new(src) +//Constructor comes with a free AR HUD +/obj/item/device/nif/New(var/newloc,var/wear,var/list/load_data) + ..(newloc) //First one to spawn in the game, make a big icon if(!big_icon) big_icon = new(icon,icon_state = "nif_full") + //Required for AR stuff. + nif_hud = new(src) + + //Put loaded data here if we loaded any + save_data = islist(load_data) ? load_data.Copy() : list() + //If given a human on spawn (probably from persistence) if(ishuman(newloc)) var/mob/living/carbon/human/H = newloc @@ -233,7 +249,8 @@ var/percent_done = (world.time - (install_done - (30 MINUTES))) / (30 MINUTES) - human.client.screen.Add(global_hud.whitense) //This is the camera static + if(human.client) + human.client.screen.Add(global_hud.whitense) //This is the camera static switch(percent_done) //This is 0.0 to 1.0 kinda percent. //Connecting to optical nerves @@ -242,19 +259,20 @@ //Mapping brain if(0.2 to 0.9) - if(prob(99)) return TRUE + if(prob(98)) return TRUE var/incident = rand(1,3) switch(incident) if(1) var/message = pick(list( - "Your head throbs around your new implant.", - "The skin around your recent surgery itches.", - "A wave of nausea overtakes you as the world seems to spin.", - "The floor suddenly seems to come up at you.", - "There's a throbbing lump of ice behind your eyes.", - "A wave of pain shoots down your neck." + "Your head throbs around your new implant!", + "The skin around your recent surgery itches!", + "A wave of nausea overtakes you as the world seems to spin!", + "The floor suddenly seems to come up at you!", + "There's a throbbing lump of ice behind your eyes!", + "A wave of pain shoots down your neck!" )) - to_chat(human,"[message]") + human.adjustHalLoss(35) + human.custom_pain(message,35) if(2) human.Weaken(5) to_chat(human,"A wave of weakness rolls over you.") diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm index 23b5aca0b1..579dc44ec9 100644 --- a/code/modules/nifsoft/nif_statpanel.dm +++ b/code/modules/nifsoft/nif_statpanel.dm @@ -5,18 +5,22 @@ /mob/living/carbon/human/proc/SetupNifStat() var/nif_status = "" + var/nif_percent = round((nif.durability/initial(nif.durability))*100) switch(nif.stat) if(NIF_WORKING) - nif_status = "Operating Normally" + if(nif_percent < 20) + nif_status = "Service Needed Soon" + else + nif_status = "Operating Normally" if(NIF_POWFAIL) nif_status = "Insufficient Energy!" if(NIF_TEMPFAIL) - nif_status = "Needs Maintenance!" + nif_status = "System Failure!" if(NIF_INSTALLING) nif_status = "Adapting To User" else nif_status = "Unknown - Error" - nif_status += " ([round((nif.durability/initial(nif.durability))*100)]%)" + nif_status += " (Condition: [nif_percent]%)" stat("NIF Status", nif_status) if(nif.stat == NIF_WORKING) diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 0703adfab4..fdccca0bce 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -1,3 +1,6 @@ +//Please see the comment above the main NIF definition before +//trying to call any of these procs directly. + //A single piece of NIF software /datum/nifsoft var/name = "Prototype" diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm index d222cd67dd..c58377f957 100644 --- a/code/modules/nifsoft/software/01_vision.dm +++ b/code/modules/nifsoft/software/01_vision.dm @@ -172,8 +172,9 @@ life() if((. = ..())) var/mob/living/carbon/human/H = nif.human - H.client.screen |= global_hud.meson H.sight |= SEE_TURFS + if(H.client) + H.client.screen |= global_hud.meson /datum/nifsoft/material name = "Material Scanner" @@ -219,8 +220,9 @@ if((. = ..())) var/mob/living/carbon/human/H = nif.human H.sight |= SEE_MOBS - H.client.screen |= global_hud.thermal H.see_invisible = SEE_INVISIBLE_NOLIGHTING + if(H.client) + H.client.screen |= global_hud.thermal /datum/nifsoft/nightvis name = "Low-Light Amp" @@ -244,6 +246,7 @@ if((. = ..())) var/mob/living/carbon/human/H = nif.human H.see_in_dark += 7 - H.client.screen |= global_hud.nvg H.see_invisible = SEE_INVISIBLE_NOLIGHTING + if(H.client) + H.client.screen |= global_hud.nvg diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm new file mode 100644 index 0000000000..f1eac1bef3 --- /dev/null +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -0,0 +1,258 @@ +//These two also have NIF FLAG representations. These are the local setting representations. +#define NIF_SC_CATCHING_ME 0x1 +#define NIF_SC_CATCHING_OTHERS 0x2 +//These are purely local setings flags, without global representation. +#define NIF_SC_ALLOW_EARS 0x4 +#define NIF_SC_ALLOW_EYES 0x8 + +/////////// +// Soulcatcher - Like a posibrain, sorta! +/datum/nifsoft/soulcatcher + name = "Soulcatcher" + desc = "A mind storage and processing system capable of capturing and supporting a single human-intelligence mind on body death, into a small VR space." + list_pos = NIF_SOULCATCHER + cost = 1265 + wear = 1 + p_drain = 0.01 + + var/setting_flags = (NIF_SC_CATCHING_ME|NIF_SC_CATCHING_OTHERS|NIF_SC_ALLOW_EARS|NIF_SC_ALLOW_EYES) + var/mob/living/carbon/brain/caught_soul/brainmob + var/inside_flavor = "A small completely white room with a couch, and a window to what seems to be the outside world. A small sign in the corner says 'Configure Me'." + + New() + ..() + brainmob = new(nif) + brainmob.nif = nif + brainmob.container = src + brainmob.stat = 0 + brainmob.silent = FALSE + dead_mob_list -= src.brainmob + load_settings() + + Destroy() + if(brainmob) + brainmob.container = null + qdel(brainmob) + ..() + + install() + if((. = ..())) + nif.set_flag(NIF_O_SCMYSELF,NIF_FLAGS_OTHER) + nif.set_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) + + uninstall() + if((. = ..())) + nif.clear_flag(NIF_O_SCMYSELF,NIF_FLAGS_OTHER) + nif.clear_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) + + activate() + if((. = ..())) + show_settings(nif.human) + spawn(0) + deactivate() + + deactivate() + if((. = ..())) + return TRUE + + stat_text() + return "Change Settings[brainmob.mind ? " (Mind Stored)" : ""]" + + proc/save_settings() + nif.save_data["[list_pos]"] = inside_flavor + return TRUE + + proc/load_settings() + var/load = nif.save_data["[list_pos]"] + if(load) + inside_flavor = load + return TRUE + + proc/show_settings(var/mob/living/carbon/human/H) + var/settings_list = list( + "Catching You \[[setting_flags & NIF_SC_CATCHING_ME ? "Enabled" : "Disabled"]\]" = NIF_SC_CATCHING_ME, + "Catching Others \[[setting_flags & NIF_SC_CATCHING_OTHERS ? "Enabled" : "Disabled"]\]" = NIF_SC_CATCHING_OTHERS, + "Ext. Hearing \[[setting_flags & NIF_SC_ALLOW_EARS ? "Enabled" : "Disabled"]\]" = NIF_SC_ALLOW_EARS, + "Ext. Vision \[[setting_flags & NIF_SC_ALLOW_EYES ? "Enabled" : "Disabled"]\]" = NIF_SC_ALLOW_EYES, + "Design Inside", + "Erase Contents") + var/choice = input(nif.human,"Select a setting to modify:","Soulcatcher NIFSoft") as null|anything in settings_list + if(choice in settings_list) + switch(choice) + if("Design Inside") + var/new_flavor = input(nif.human, "Type what the prey sees after being 'caught'. This will be \ + printed after an intro ending with: \"Around you, you see...\" to the prey. If you already \ + have prey, this will be printed to them after \"Your surroundings change to...\". Limit 2048 char.", \ + "VR Environment", html_decode(inside_flavor)) as message + new_flavor = sanitize(new_flavor) + inside_flavor = new_flavor + nif.notify("Updating VR environment...") + to_chat(brainmob,"Your surroundings change to...\n[inside_flavor]") + save_settings() + return TRUE + + if("Erase Contents") + if(brainmob && brainmob.mind) + var/warning = alert(nif.human,"Are you SURE you want to erase [brainmob.mind.name]?","Erase Mind","CANCEL","DELETE","CANCEL") + if(warning == "DELETE") + brainmob.ghostize() + qdel(brainmob) + brainmob = new(nif) + nif.notify("Mind deleted!",TRUE) + return TRUE + else + nif.notify("No mind to delete!",TRUE) + return TRUE + + //Must just be a flag without special handling then. + else + var/flag = settings_list[choice] + return toggle_setting(flag) + + proc/toggle_setting(var/flag) + setting_flags ^= flag + + //Special treatment + switch(flag) + if(NIF_SC_CATCHING_ME) + if(setting_flags & NIF_SC_CATCHING_ME) + nif.set_flag(NIF_O_SCMYSELF,NIF_FLAGS_OTHER) + else + nif.clear_flag(NIF_O_SCMYSELF,NIF_FLAGS_OTHER) + if(NIF_SC_CATCHING_OTHERS) + if(setting_flags & NIF_SC_CATCHING_OTHERS) + nif.set_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) + else + nif.clear_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) + if(NIF_SC_ALLOW_EARS) + if(setting_flags & NIF_SC_ALLOW_EARS) + brainmob.ext_deaf = FALSE + to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's auditory sense has been unrestricted.") + else + brainmob.ext_deaf = TRUE + to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's auditory sense has been restricted.") + if(NIF_SC_ALLOW_EYES) + if(setting_flags & NIF_SC_ALLOW_EYES) + brainmob.ext_blind = FALSE + to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's visual sense has been unrestricted.") + else + brainmob.ext_blind = TRUE + to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's visual sense has been restricted.") + + return TRUE + + proc/catch_mob(var/mob/living/carbon/human/H) + if(istype(H)) + if(H == nif.human) //Reset our permissions to be permissive to the owner. + brainmob.ext_deaf = FALSE + brainmob.ext_blind = FALSE + brainmob.parent_mob = TRUE + + brainmob.dna = H.dna + brainmob.timeofhostdeath = H.timeofdeath + brainmob.stat = 0 + if(H.mind) + H.mind.transfer_to(brainmob) + brainmob.name = brainmob.mind.name + var/message = "Your vision fades in a haze of static, before returning.\nAround you, you see...\n[inside_flavor]" + to_chat(brainmob,message) + nif.notify("Mind loaded into VR space: [brainmob.name]") + to_chat(nif.human,"Your occupant's messages/actions can only be seen by you, and you can \ + send messages that only they can hear/see by 'say'ing either '*nsay' or '*nme'.") + return TRUE + + return FALSE + +//////////////// +//The caught mob +/mob/living/carbon/brain/caught_soul + name = "recorded mind" + desc = "A mind recorded and being played on digital hardware." + use_me = 1 + var/ext_deaf = FALSE //Forbidden from 'ear' access on host + var/ext_blind = FALSE //Forbidden from 'eye' access on host + var/parent_mob = FALSE //If we've captured our owner + var/obj/item/device/nif/nif + +/mob/living/carbon/brain/caught_soul/Destroy() + nif = null + ..() + +/mob/living/carbon/brain/caught_soul/Life() + if(!client) return + + . = ..() + + if(parent_mob) return + //If they're blinded + if(ext_blind) + eye_blind = 5 + client.screen.Remove(global_hud.whitense) + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + else + eye_blind = 0 + clear_fullscreens() + client.screen.Add(global_hud.whitense) + + //If they're deaf + if(ext_deaf) + ear_deaf = 5 + else + ear_deaf = 0 + +/mob/living/carbon/brain/caught_soul/hear_say() + if(ext_deaf || !client) + return FALSE + ..() + +/mob/living/carbon/brain/caught_soul/show_message() + if(ext_blind || !client) + return FALSE + ..() + +/mob/living/carbon/brain/caught_soul/say(var/message) + if(parent_mob) return ..() + if(silent) return FALSE + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [name] speaks, \"[message]\"") + to_chat(src,"\[\icon[nif.big_icon]NIF\] [name] speaks, \"[message]\"") + +/mob/living/carbon/brain/caught_soul/emote(var/act,var/m_type=1,var/message = null) + if(parent_mob) return ..() + if(silent) return FALSE + if (act == "me") + if(silent) + return + if (src.client) + if (client.prefs.muted & MUTE_IC) + src << "You cannot send IC messages (muted)." + return + if (stat) + return + if(!(message)) + return + return custom_emote(m_type, message) + else + return FALSE + +/mob/living/carbon/brain/caught_soul/custom_emote(var/m_type, var/message) + if(silent) return FALSE + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [name] [message]") + to_chat(src,"\[\icon[nif.big_icon]NIF\] [name] [message]") + +/////////////////// +//The catching hook +/hook/death/proc/nif_soulcatcher(var/mob/living/carbon/human/H) + if(!istype(H)) return TRUE //Hooks must return TRUE + + if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF + var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) + if(!SC.brainmob.mind) //As long as they don't have one + SC.catch_mob(H,TRUE) + else if(ishuman(H.loc)) //Died in someone + var/mob/living/carbon/human/HP = H.loc + if(HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER)) + var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER) + if(!SC.brainmob.mind) //As long as they don't have one + SC.catch_mob(H,FALSE) + + return TRUE \ No newline at end of file diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm index cc8d6b8b10..91ea175338 100644 --- a/code/modules/nifsoft/software/15_misc.dm +++ b/code/modules/nifsoft/software/15_misc.dm @@ -31,7 +31,7 @@ life() if((. = ..())) var/mob/living/carbon/human/H = nif.human - if(apc && (get_dist(H,apc) <= 1) && H.nutrition < 450) + if(apc && (get_dist(H,apc) <= 1) && H.nutrition < 440) // 440 vs 450, life() happens before we get here so it'll never be EXACTLY 450 H.nutrition = min(H.nutrition+10, 450) apc.drain_power(7000/450*10) //This is from the large rechargers. No idea what the math is. return TRUE diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index bddd9bc7b9..eb124f58f6 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -15,7 +15,7 @@ // Handle people leaving due to round ending. /hook/roundend/proc/persist_locations() - for(var/mob/Player in player_list) + for(var/mob/Player in human_mob_list) if(!Player.mind || isnewplayer(Player)) continue // No mind we can do nothing, new players we care not for else if(Player.stat == DEAD) @@ -233,9 +233,11 @@ if(nif) prefs.nif_path = nif.type prefs.nif_durability = nif.durability + prefs.nif_savedata = nif.save_data.Copy() else prefs.nif_path = null prefs.nif_durability = null + prefs.nif_savedata = null var/datum/category_group/player_setup_category/vore_cat = prefs.player_setup.categories_by_name["VORE"] var/datum/category_item/player_setup_item/vore/nif/nif_prefs = vore_cat.items_by_name["NIF Data"] diff --git a/vorestation.dme b/vorestation.dme index 41f8895e95..8325921369 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1972,6 +1972,7 @@ #include "code\modules\nifsoft\software\01_vision.dm" #include "code\modules\nifsoft\software\05_health.dm" #include "code\modules\nifsoft\software\10_combat.dm" +#include "code\modules\nifsoft\software\13_soulcatcher.dm" #include "code\modules\nifsoft\software\14_commlink.dm" #include "code\modules\nifsoft\software\15_misc.dm" #include "code\modules\organs\blood.dm" From e38dceeca1207673c0f12de391148107be996e3b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 01:31:08 -0400 Subject: [PATCH 150/261] Another openspace tweak In an attempt to stop more crashes --- code/modules/multiz/turf.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index 6248eb8993..0885668037 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -72,7 +72,7 @@ * Update icon and overlays of open space to be that of the turf below, plus any visible objects on that turf. */ /turf/simulated/open/update_icon() - overlays.Cut() + overlays = list() //VOREStation Edit - Overlays are being crashy when modified. update_icon_edge() //VOREStation Add - Get grass into open spaces and whatnot. var/turf/below = GetBelow(src) if(below) From a2082837062d6888061979886c91b6a87b960e85 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 02:10:09 -0400 Subject: [PATCH 151/261] Surgery and syringe fixes Fixes a line printed about staying close to your patient printed in error, and makes syringes work on laying patients again. The do_surgery overrides are from a bygone era. Tested == yes --- code/modules/mob/living/silicon/robot/analyzer.dm | 8 -------- code/modules/reagents/reagent_containers/hypospray.dm | 6 ------ code/modules/reagents/reagent_containers/pill.dm | 7 ------- code/modules/reagents/reagent_containers/syringes.dm | 7 ------- code/modules/surgery/surgery.dm | 1 - 5 files changed, 29 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 671f61e29c..3e1564b0cf 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -16,14 +16,6 @@ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200) var/mode = 1; - -/obj/item/device/robotanalyzer/do_surgery(mob/living/M, mob/living/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - do_scan(M, user) //default surgery behaviour is just to scan as usual - return 1 - - /obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob) do_scan(M, user) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 427d08d141..1c3151fee9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -28,12 +28,6 @@ update_icon() return -/obj/item/weapon/reagent_containers/hypospray/do_surgery(mob/living/carbon/M, mob/living/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - attack(M, user) - return 1 - /obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) if(!reagents.total_volume) user << "[src] is empty." diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 69bdaf0412..d3307737b3 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -19,13 +19,6 @@ if(!icon_state) icon_state = "pill[rand(1, 20)]" - -/obj/item/weapon/reagent_containers/pill/do_surgery(mob/M, mob/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - attack(M, user) //default surgery behaviour is just to scan as usual - return 1 - /obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob) if(M == user) if(istype(M, /mob/living/carbon/human)) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 63bb549645..8aede2d068 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -53,13 +53,6 @@ /obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob) return -/obj/item/weapon/reagent_containers/syringe/do_surgery(mob/living/carbon/M, mob/living/user) - if(user.a_intent == I_HURT) - return 0 - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - return 1 - /obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) if(!proximity || !target.reagents) return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b9fe362031..19007addae 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -129,7 +129,6 @@ 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) From 6d58df9f605911efd41304bd625dd4e4ba613dd8 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 02:10:09 -0400 Subject: [PATCH 152/261] Surgery and syringe fixes Fixes a line printed about staying close to your patient printed in error, and makes syringes work on laying patients again. The do_surgery overrides are from a bygone era. Tested == yes --- code/modules/mob/living/silicon/robot/analyzer.dm | 8 -------- code/modules/reagents/reagent_containers/hypospray.dm | 6 ------ code/modules/reagents/reagent_containers/pill.dm | 7 ------- code/modules/reagents/reagent_containers/syringes.dm | 7 ------- code/modules/surgery/surgery.dm | 1 - 5 files changed, 29 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 671f61e29c..3e1564b0cf 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -16,14 +16,6 @@ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200) var/mode = 1; - -/obj/item/device/robotanalyzer/do_surgery(mob/living/M, mob/living/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - do_scan(M, user) //default surgery behaviour is just to scan as usual - return 1 - - /obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob) do_scan(M, user) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 427d08d141..1c3151fee9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -28,12 +28,6 @@ update_icon() return -/obj/item/weapon/reagent_containers/hypospray/do_surgery(mob/living/carbon/M, mob/living/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - attack(M, user) - return 1 - /obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) if(!reagents.total_volume) user << "[src] is empty." diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 464e066264..e21baa48e2 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -19,13 +19,6 @@ if(!icon_state) icon_state = "pill[rand(1, 20)]" - -/obj/item/weapon/reagent_containers/pill/do_surgery(mob/M, mob/user) - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - attack(M, user) //default surgery behaviour is just to scan as usual - return 1 - /obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob) if(M == user) if(istype(M, /mob/living/carbon/human)) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 058e09c6f7..dfe5dd0349 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -53,13 +53,6 @@ /obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob) return -/obj/item/weapon/reagent_containers/syringe/do_surgery(mob/living/carbon/M, mob/living/user) - if(user.a_intent == I_HURT) - return 0 - if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool - return ..() - return 1 - /obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) if(!proximity || !target.reagents) return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b9fe362031..19007addae 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -129,7 +129,6 @@ 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) From d70ef556fecc94f878b0323c70c3809c6f5a25d7 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 09:28:04 -0400 Subject: [PATCH 153/261] Restore dview mob when it's gone This will (very very slightly) slow down dview, but since the mob keeps disappearing, I don't know another option. --- code/_helpers/unsorted.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 2b75414a7e..13e7577704 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1264,6 +1264,10 @@ var/mob/dview/dview_mob = new if(!center) return + if(!dview_mob) //VOREStation Add - Emergency Backup + dview_mob = new() + WARNING("dview mob was lost, and had to be recreated!") + dview_mob.loc = center dview_mob.see_invisible = invis_flags From 2f3b56467c6cd78d36e2e3b686461d661fbc8892 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 10:13:32 -0400 Subject: [PATCH 154/261] Minor NIF and Soulcatcher Tweaks - Brainmob can understand galcom so they can understand radio announcements if they're allowed to hear things. - Adds admin verb in Fun tab for "Quick NIF" to quickly implant someone with a NIF, if for example they lost theirs via bug, or for antags in events. - Some tweaks in Persist VR to not 'hard crash' just in case runtiming prevents other things. - Added titles to top of *nsay and *nme boxes so you can remember what you're doing. --- code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/verbs/debug_vr.dm | 31 +++++++++++++++++++ .../mob/living/carbon/human/emote_vr.dm | 4 +-- code/modules/nifsoft/nif.dm | 3 +- .../nifsoft/software/13_soulcatcher.dm | 1 + code/modules/vore/persist/persist_vr.dm | 11 +++++-- vorestation.dme | 1 + 7 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 code/modules/admin/verbs/debug_vr.dm diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e4ee4806e2..5fe32308d3 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -125,6 +125,7 @@ var/list/admin_verbs_fun = list( /client/proc/toggle_random_events, /client/proc/editappear, /client/proc/roll_dices, + /datum/admins/proc/quick_nif, //VOREStation Add, /datum/admins/proc/call_supply_drop, /datum/admins/proc/call_drop_pod ) diff --git a/code/modules/admin/verbs/debug_vr.dm b/code/modules/admin/verbs/debug_vr.dm new file mode 100644 index 0000000000..7012ed46d7 --- /dev/null +++ b/code/modules/admin/verbs/debug_vr.dm @@ -0,0 +1,31 @@ +/datum/admins/proc/quick_nif() + set category = "Fun" + set name = "Quick NIF" + set desc = "Spawns a NIF into someone in quick-implant mode." + + if(!check_rights(R_FUN)) + return + + var/mob/living/carbon/human/H = input("Pick a humanoid","Quick NIF") as null|anything in human_mob_list + + if(!H) + return + + if(!H.get_organ(BP_HEAD)) + to_chat(usr,"Target is unsuitable.") + return + + if(H.nif) + to_chat(usr,"Target already has a NIF.") + return + + if(H.species.flags & NO_SCAN) + new /obj/item/device/nif/bioadap(H) + else + new /obj/item/device/nif(H) + + to_chat(usr,"Implanted NIF in [H].") + + log_admin("[key_name(src)] Quick NIF'd [H.real_name].") + message_admins("[key_name_admin(src)] Quick NIF'd [H.real_name].") + feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 4b3091b440..fb62e0ca22 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -24,7 +24,7 @@ if(!SC.brainmob.mind) to_chat(src,"You need a loaded mind to use *nme.") return 1 - var/nifmessage = sanitize(input("Type a message to say.") as text|null) + var/nifmessage = sanitize(input("Type a message to say.","Speak into NIF") as text|null) if(nifmessage) nifmessage = "\[\icon[nif.big_icon]NIF\] [src] speaks, \"[nifmessage]\"" to_chat(SC.brainmob,nifmessage) @@ -42,7 +42,7 @@ if(!SC.brainmob.mind) to_chat(src,"You need a loaded mind to use *nme.") return 1 - var/nifmessage = sanitize(input("Type an action to perform.") as text|null) + var/nifmessage = sanitize(input("Type an action to perform.","Emote into NIF") as text|null) if(nifmessage) nifmessage = "\[\icon[nif.big_icon]NIF\] [src] [nifmessage]" to_chat(SC.brainmob,nifmessage) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 8dc8d9c52e..28925741b0 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -133,7 +133,8 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable src.forceMove(head) head.implants += src spawn(0) //Let the character finish spawning yo. - owner = H.mind.name + if(H.mind) + owner = H.mind.name implant(H) return TRUE diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index f1eac1bef3..583e7c5ec7 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -27,6 +27,7 @@ brainmob.stat = 0 brainmob.silent = FALSE dead_mob_list -= src.brainmob + brainmob.add_language(LANGUAGE_GALCOM) load_settings() Destroy() diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index eb124f58f6..173400347d 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -39,7 +39,9 @@ * Prep for save: returns a preferences object if we're ready and allowed to save this mob. */ /proc/prep_for_persist(var/mob/persister) - ASSERT(istype(persister)) + if(!istype(persister)) + crash_with("prep_for_persist given non-mob [persister]") + return // Find out of this mob is a proper mob! if (persister.mind && persister.mind.loaded_from_ckey) @@ -71,7 +73,9 @@ return 1 /proc/persist_interround_data(var/mob/occupant, var/datum/spawnpoint/new_spawn_point_type) - ASSERT(istype(occupant)) + if(!istype(occupant)) + crash_with("persist_interround_data given non-mob [occupant]") + return var/datum/preferences/prefs = prep_for_persist(occupant) if(!prefs) @@ -219,7 +223,8 @@ */ /proc/persist_nif_data(var/mob/living/carbon/human/H,var/datum/preferences/prefs) if(!istype(H)) - CRASH("persist_nif_data given a nonhuman: [H]") + crash_with("persist_nif_data given a nonhuman: [H]") + return if(!prefs) prefs = prep_for_persist(H) diff --git a/vorestation.dme b/vorestation.dme index 8325921369..31eeacc2fb 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1191,6 +1191,7 @@ #include "code\modules\admin\verbs\custom_event.dm" #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" +#include "code\modules\admin\verbs\debug_vr.dm" #include "code\modules\admin\verbs\diagnostics.dm" #include "code\modules\admin\verbs\dice.dm" #include "code\modules\admin\verbs\getlogs.dm" From 762bfa7649f2b00b00a0e16fbf2498e16c3ff65d Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 9 Jun 2017 18:34:03 +0300 Subject: [PATCH 155/261] Longpup mobs! -plain and just hostile version -recruitable follower pet version that starts hostile but has a 50% chance of taming and befriending on petting. -same as above but with a collar -guard puppy version that comes tame by default, runs after criminals, and has the 50% chance of befriending and following. --- .../mob/living/simple_animal/vore/otie.dm | 297 ++++++++++++++++++ icons/mob/vore64x32.dmi | Bin 0 -> 50229 bytes 2 files changed, 297 insertions(+) create mode 100644 code/modules/mob/living/simple_animal/vore/otie.dm create mode 100644 icons/mob/vore64x32.dmi diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm new file mode 100644 index 0000000000..993df4870c --- /dev/null +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -0,0 +1,297 @@ +/mob/living/simple_animal/otie //Spawn this one only if you're looking for a bad time. + name = "otie" + desc = "The classic bioengineered longdog." + icon = 'icons/mob/vore64x32.dmi' + icon_state = "otie" + icon_living = "otie" + icon_dead = "otie-dead" + icon_rest = "otie_rest" + + faction = "otie" + recruitable = 1 + maxHealth = 160 + health = 160 + minbodytemp = 200 + move_to_delay = 4 + hostile = 1 + cooperative = 1 + investigates = 1 + reacts = 1 + retaliate = 1 + specific_targets = 1 + run_at_them = 0 + attack_same = 0 + + speak_chance = 4 + speak = list("Boof.","Waaf!","Prurrrr.","Growl!","Bork!","Rurrr..","Aruur!","Awoo!") + speak_emote = list("growls", "roars", "yaps", "Awoos") + emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns") + emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns") + say_maybe_target = list("Ruh?", "Waf?") + say_got_target = list("Rurrr!", "ROAR!", "MINE!", "RAHH!", "Slurp.. RAH!") + + melee_damage_lower = 5 + melee_damage_upper = 20 + + response_help = "pets the" + response_disarm = "bops the" + response_harm = "hits the" + attacktext = "mauled" + friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops") + meat_amount = 5 + + old_x = -16 + old_y = 0 + pixel_x = -16 + pixel_y = 0 + + var/mob/living/carbon/human/friend + var/tamed = 0 + var/threat = null + +/mob/living/simple_animal/otie/fluff + name = "otie" + desc = "The classic bioengineered longdog. This one might even tolerate you!" + icon_state = "otie" + icon_living = "otie" + icon_rest = "otie_rest" + faction = "neutral" + +/mob/living/simple_animal/otie/fluff/cotie + name = "tamed otie" + desc = "The classic bioengineered longdog. This one has a nice little collar on its neck. However a proper domesticated otie is an oxymoron and the collar is likely just a decoration." + icon_state = "cotie" + icon_living = "cotie" + icon_rest = "cotie_rest" + faction = "neutral" + +/mob/living/simple_animal/otie/fluff/security + name = "guard otie" + desc = "The V.A.R.M.A.corp bioengineering division flagship product on trained optimal snowflake guard dogs." + icon_state = "sotie" + icon_living = "sotie" + icon_rest = "sotie_rest" + icon_dead = "sotie-dead" + faction = "neutral" + tamed = 1 + + var/check_records = 1 // If true, arrests people without a record. + var/check_arrest = 1 // If true, arrests people who are set to arrest. + +//Holy shit oh god how do I make it not destroy and devour everything indiscriminately! + +/mob/living/simple_animal/otie/PunchTarget() + if(istype(target_mob,/mob/living/simple_animal/mouse)) + return EatTarget() + else ..() + +/mob/living/simple_animal/otie/Found(var/atom/found_atom) + if(!SA_attackable(found_atom)) + return null + if(istype(found_atom,/mob/living/simple_animal/mouse)) + return found_atom + if(will_eat(found_atom)) + if(found_atom in friends) + return null + else if(found_atom in faction_friends) + return null + else if (friend == found_atom) + return null + else if(tamed == 1 && ishuman(found_atom)) + return null + else if(tamed == 1 && isrobot(found_atom)) + return null + else + return found_atom + +/mob/living/simple_animal/otie/fluff/security/Found(var/atom/found_atom) + if(!SA_attackable(found_atom)) + return null + if(istype(found_atom,/mob/living/simple_animal/mouse)) + return found_atom + if(check_threat(found_atom) >= 4) + return found_atom + if(will_eat(found_atom)) + if(found_atom in friends) + return null + else if(found_atom in faction_friends) + return null + else if (friend == found_atom) + return null + else if(tamed == 1 && ishuman(found_atom)) + return null + else if(tamed == 1 && isrobot(found_atom)) + return null + else + return found_atom + +/mob/living/simple_animal/otie/fluff/security/proc/check_threat(var/mob/living/M) + if(!M || !ishuman(M) || M.stat == DEAD || src == M) + return 0 + return M.assess_perp(0, 0, 0, check_records, check_arrest) + +/mob/living/simple_animal/otie/FindTarget() + var/atom/T = null + for(var/atom/A in ListTargets(view_range)) + + if(A == src) + continue + + var/atom/F = Found(A) + if(F) + T = F + break + else if(specific_targets) + return 0 + + if(isliving(A)) + var/mob/living/L = A + if(L.faction == src.faction && !attack_same) + continue + else if(L in friends) + continue + else if(!SA_attackable(L)) + continue + else if(tamed == 1 && ishuman(L)) + continue + else if(tamed == 1 && isrobot(L)) + continue + else + T = L + break + + else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets(). + var/obj/mecha/M = A + if(!SA_attackable(M)) + continue + if((M.occupant.faction != src.faction) || attack_same) + T = M + break + + if(T) //Permission to fuck up and vore GET! + ai_log("FindTarget() found [T]!",1) + if(set_target(T)) + handle_stance(STANCE_ATTACK) + + return T + +/mob/living/simple_animal/otie/fluff/security/FindTarget() + var/atom/T = null + for(var/atom/A in ListTargets(view_range)) + + if(A == src) + continue + + var/atom/F = Found(A) + if(F) + T = F + break + else if(specific_targets) + return 0 + + if(isliving(A)) + var/mob/living/L = A + if(L.faction == src.faction && !attack_same) + continue + else if(L in friends) + continue + else if(!SA_attackable(L)) + continue + else if(tamed == 1 && ishuman(L)) + continue + else if(tamed == 1 && isrobot(L)) + continue + else + T = L + break + + else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets(). + var/obj/mecha/M = A + if(!SA_attackable(M)) + continue + if((M.occupant.faction != src.faction) || attack_same) + T = M + break + + if(T) //Permission to fuck up and vore GET! + ai_log("FindTarget() found [T]!",1) + if(set_target(T)) + if(check_threat(T) >= 4) + broadcast_security_hud_message("[src] is attempting to 'detain' suspect [target_name(T)] in [get_area(src)].", src) + handle_stance(STANCE_ATTACK) + else + handle_stance(STANCE_ATTACK) + + return T + +/mob/living/simple_animal/otie/fluff/security/proc/target_name(mob/living/T) + if(ishuman(T)) + var/mob/living/carbon/human/H = T + return H.get_id_name("unidentified person") + return "unidentified lifeform" + +//Basic friend AI + +/mob/living/simple_animal/otie/fluff/Life() + . = ..() + if(!. || ai_inactive || !friend) return + + var/friend_dist = get_dist(src,friend) + + if (friend_dist <= 4) + if(stance == STANCE_IDLE) + if(set_follow(friend)) + handle_stance(STANCE_FOLLOW) + if(resting) + lay_down() + + if (friend_dist <= 1) + if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) + if (prob((friend.stat < DEAD)? 50 : 15)) + var/verb = pick("whines", "yelps", "whimpers") + audible_emote(pick("[verb] in distress.", "[verb] anxiously.")) + else + if (prob(5)) + visible_emote(pick("nuzzles [friend].", + "brushes against [friend].", + "rubs against [friend].", + "noses softly at [friend].", + "slobberlicks [friend].", + "murrs.")) + else if (friend.health <= 50) + if (prob(10)) + var/verb = pick("whines", "yelps", "whimpers") + audible_emote("[verb] anxiously.") + +/mob/living/simple_animal/otie/Life() + . = ..() + if(!. || ai_inactive) return + + if(prob(5)) + lay_down() + +//Pet 4 frond + +/mob/living/simple_animal/otie/attack_hand(mob/living/carbon/human/M as mob) + ..() + switch(M.a_intent) + + if(I_HELP) + if (health > 0) + LoseTarget() + handle_stance(STANCE_IDLE) + if(prob(50)) //It's a fiddy-fiddy you may get a buddy pal or you may get mauled and ate. Win-win! + friend = M + if(tamed != 1) + tamed = 1 + return + ..() + +// Activate Noms! + +/mob/living/simple_animal/otie + vore_active = 1 + vore_capacity = 1 + vore_escape_chance = 8 + vore_pounce_chance = 19 + vore_icons = SA_ICON_LIVING diff --git a/icons/mob/vore64x32.dmi b/icons/mob/vore64x32.dmi new file mode 100644 index 0000000000000000000000000000000000000000..05e8113766526a5f6ca703e159c993d2826a2a23 GIT binary patch literal 50229 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

    e9A$PTkj-xafm2S$)zWpm5z*Svg$(B1Z|< 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 literal 0 HcmV?d00001 From 952265036fc4b8d45f05317f25c4a59af641097a Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 11:51:29 -0400 Subject: [PATCH 156/261] Bluespace Jumpsuit and remove arbitrary size changing The bluespace jumpsuit is relatively cheap (compared to a shrink ray) and craftable in R&D. When worn, it allows you to resize yourself at will, and when removed you'll snap back to your original size (use a shrinkray or the Mass Altering NIFSoft for permanent changes). The reason it's not permanent is because it's very cheap to make in R&D, really. No mining materials needed, but it only affects you. So you can consider it the 'minor' size change tool. This PR also comments out the arbitrary size change verb since we decided to remove it, as it was being used to generally just make 'magic' characters that could resize themselves at will, or use it for mechanical purposes to avoid being shot etc when fighting starts, even though it says specifically not to do these things. If you want such a character that can resize themselves due to their physiology, please apply for an SCA and we can give you a small fluff item or other accomidation to allow such a thing. --- .../clothing/under/miscellaneous_vr.dm | 96 +++++++++++++++++++ .../mob/living/carbon/human/examine_vr.dm | 7 ++ code/modules/research/designs_vr.dm | 8 ++ code/modules/vore/resizing/resize_vr.dm | 4 + 4 files changed, 115 insertions(+) diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index 3578d18b99..f497e59897 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -1,3 +1,21 @@ +/obj/item/clothing/var/hides_bulges = FALSE // OwO wats this? + +/mob/living/carbon/human/proc/show_pudge() + //A uniform could hide it. + if(istype(w_uniform,/obj/item/clothing)) + var/obj/item/clothing/under = w_uniform + if(under.hides_bulges) + return FALSE + + //We return as soon as we find one, no need for 'else' really. + if(istype(wear_suit,/obj/item/clothing)) + var/obj/item/clothing/suit = wear_suit + if(suit.hides_bulges) + return FALSE + + + return TRUE + /obj/item/clothing/under/permit name = "public nudity permit" desc = "This permit entitles the bearer to conduct their duties without a uniform. Normally issued to furred crewmembers or those with nothing to hide." @@ -9,3 +27,81 @@ item_state = "golem" //This is dumb and hacky but was here when I got here. worn_state = "golem" //It's basically just a coincidentally black iconstate in the file. + +/obj/item/clothing/under/bluespace + name = "bluespace jumpsuit" + icon_state = "lingchameleon" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_uniforms.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_uniforms.dmi', + ) + item_state = "lingchameleon" + worn_state = "lingchameleon" + desc = "Do you feel like warping spacetime today? Because it seems like that's on the agenda, now. \ + Allows one to resize themselves at will, and conceals their true weight." + hides_bulges = TRUE + var/original_size + +/obj/item/clothing/under/bluespace/verb/resize() + set name = "Adjust Size" + set category = "Object" + set src in usr + bluespace_size(usr) + ..() + +/obj/item/clothing/under/bluespace/proc/bluespace_size(mob/usr as mob) + if (!ishuman(usr)) + return + + var/mob/living/carbon/human/H = usr + + if (H.stat || H.restrained()) + return + + if (src != H.w_uniform) + to_chat(H,"You must be WEARING the uniform to use it for that...") + return + + var/choice = alert(H,"Change which way?","Mass Alteration","Size Up","Cancel","Size Down") + if(choice == "Cancel") + return FALSE + + if(choice == "Size Up") + switch(H.size_multiplier) + if(RESIZE_BIG to RESIZE_HUGE) + H.resize(RESIZE_HUGE) + if(RESIZE_NORMAL to RESIZE_BIG) + H.resize(RESIZE_BIG) + if(RESIZE_SMALL to RESIZE_NORMAL) + H.resize(RESIZE_NORMAL) + if((0 - INFINITY) to RESIZE_TINY) + H.resize(RESIZE_SMALL) + + else if(choice == "Size Down") + switch(H.size_multiplier) + if(RESIZE_HUGE to INFINITY) + H.resize(RESIZE_BIG) + if(RESIZE_BIG to RESIZE_HUGE) + H.resize(RESIZE_NORMAL) + if(RESIZE_NORMAL to RESIZE_BIG) + H.resize(RESIZE_SMALL) + if((0 - INFINITY) to RESIZE_NORMAL) + H.resize(RESIZE_TINY) + + H.visible_message("The space around [H] distorts as they change size!","The space around you distorts as you change size!") + H.update_icons() + +/obj/item/clothing/under/bluespace/mob_can_equip(M as mob, slot, disable_warning = 0) + . = ..() + if(. && ishuman(M)) //Looks like we're being put on after all. + var/mob/living/carbon/human/H = M + original_size = H.size_multiplier + +/obj/item/clothing/under/bluespace/mob_can_unequip(mob/M, slot, disable_warning = 0) + . = ..() + if(. && ishuman(M)) + var/mob/living/carbon/human/H = M + H.resize(original_size) + H.update_icons() + original_size = null + H.visible_message("The space around [H] distorts as they return to their original size!","The space around you distorts as you return to your original size!") diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index a9b6390782..a53c543629 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -1,4 +1,6 @@ /mob/living/carbon/human/proc/examine_weight() + if(!show_pudge()) //Some clothing or equipment can hide this. + return "" var/message = "" var/weight_examine = round(weight) var/t_He = "It" //capitalised for use at the start of each line. @@ -58,6 +60,8 @@ return message //Credit to Aronai for helping me actually get this working! /mob/living/carbon/human/proc/examine_nutrition() + if(!show_pudge()) //Some clothing or equipment can hide this. + return "" var/message = "" var/nutrition_examine = round(nutrition) var/t_He = "It" //capitalised for use at the start of each line. @@ -104,6 +108,9 @@ return message /mob/living/carbon/human/proc/examine_bellies() + if(!show_pudge()) //Some clothing or equipment can hide this. + return "" + var/message = "" for (var/I in src.vore_organs) diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 64ed9b5d30..2d6b1c0351 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -29,6 +29,14 @@ build_path = /obj/item/weapon/gun/energy/sizegun sort_string = "TAAAB" +/datum/design/item/bluespace_jumpsuit + name = "Bluespace jumpsuit" + id = "bsjumpsuit" + req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 3, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) + build_path = /obj/item/clothing/under/bluespace + sort_string = "TAAAC" + /datum/design/item/item/pressureinterlock name = "APP pressure interlock" id = "pressureinterlock" diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index d496fb46fb..a143648793 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -79,6 +79,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 /mob/living/carbon/human/dummy/mannequin/resize(var/new_size) size_multiplier = new_size +/* Removed due to too many 'magic' characters having resizing 100% of the time. + Replaced with bluespace jumpsuit, and mass altering NIFSoft. /** * Verb proc for a command that lets players change their size OOCly. * Ace was here! Redid this a little so we'd use math for shrinking characters. This is the old code. @@ -104,6 +106,8 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 /hook/living_new/proc/resize_setup(mob/living/H) H.verbs += /mob/living/proc/set_size return 1 +*/ + /** * Attempt to scoop up this mob up into H's hands, if the size difference is large enough. From bda3a830f51c373c3299130fc7f8b335e211d47b Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 9 Jun 2017 20:22:07 +0300 Subject: [PATCH 157/261] Some cleanup stuffs. --- .../mob/living/simple_animal/vore/otie.dm | 140 +++++------------- 1 file changed, 36 insertions(+), 104 deletions(-) diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index 993df4870c..0baf026ff9 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -9,8 +9,8 @@ faction = "otie" recruitable = 1 - maxHealth = 160 - health = 160 + maxHealth = 120 + health = 120 minbodytemp = 200 move_to_delay = 4 hostile = 1 @@ -47,7 +47,6 @@ var/mob/living/carbon/human/friend var/tamed = 0 - var/threat = null /mob/living/simple_animal/otie/fluff name = "otie" @@ -130,99 +129,33 @@ return 0 return M.assess_perp(0, 0, 0, check_records, check_arrest) -/mob/living/simple_animal/otie/FindTarget() - var/atom/T = null - for(var/atom/A in ListTargets(view_range)) +/mob/living/simple_animal/otie/fluff/security/set_target(var/mob/M) + ai_log("SetTarget([M])",2) + if(!M || (world.time - last_target_time < 5 SECONDS) && target_mob) + ai_log("SetTarget() can't set it again so soon",3) + return 0 - if(A == src) - continue + var/turf/seen = get_turf(M) - var/atom/F = Found(A) - if(F) - T = F - break - else if(specific_targets) - return 0 + if(investigates && (annoyed < 10)) + try_say_list(say_maybe_target) + face_atom(seen) + annoyed += 14 + sleep(1 SECOND) //For realism - if(isliving(A)) - var/mob/living/L = A - if(L.faction == src.faction && !attack_same) - continue - else if(L in friends) - continue - else if(!SA_attackable(L)) - continue - else if(tamed == 1 && ishuman(L)) - continue - else if(tamed == 1 && isrobot(L)) - continue - else - T = L - break + if(M in ListTargets(view_range)) + try_say_list(say_got_target) + target_mob = M + last_target_time = world.time + return M + if(check_threat(M) >= 4) + broadcast_security_hud_message("[src] is attempting to 'detain' suspect [target_name(M)] in [get_area(src)].", src) + else if(investigates) + spawn(1) + WanderTowards(seen) - else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets(). - var/obj/mecha/M = A - if(!SA_attackable(M)) - continue - if((M.occupant.faction != src.faction) || attack_same) - T = M - break + return 0 - if(T) //Permission to fuck up and vore GET! - ai_log("FindTarget() found [T]!",1) - if(set_target(T)) - handle_stance(STANCE_ATTACK) - - return T - -/mob/living/simple_animal/otie/fluff/security/FindTarget() - var/atom/T = null - for(var/atom/A in ListTargets(view_range)) - - if(A == src) - continue - - var/atom/F = Found(A) - if(F) - T = F - break - else if(specific_targets) - return 0 - - if(isliving(A)) - var/mob/living/L = A - if(L.faction == src.faction && !attack_same) - continue - else if(L in friends) - continue - else if(!SA_attackable(L)) - continue - else if(tamed == 1 && ishuman(L)) - continue - else if(tamed == 1 && isrobot(L)) - continue - else - T = L - break - - else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets(). - var/obj/mecha/M = A - if(!SA_attackable(M)) - continue - if((M.occupant.faction != src.faction) || attack_same) - T = M - break - - if(T) //Permission to fuck up and vore GET! - ai_log("FindTarget() found [T]!",1) - if(set_target(T)) - if(check_threat(T) >= 4) - broadcast_security_hud_message("[src] is attempting to 'detain' suspect [target_name(T)] in [get_area(src)].", src) - handle_stance(STANCE_ATTACK) - else - handle_stance(STANCE_ATTACK) - - return T /mob/living/simple_animal/otie/fluff/security/proc/target_name(mob/living/T) if(ishuman(T)) @@ -274,18 +207,17 @@ /mob/living/simple_animal/otie/attack_hand(mob/living/carbon/human/M as mob) ..() - switch(M.a_intent) - - if(I_HELP) - if (health > 0) - LoseTarget() - handle_stance(STANCE_IDLE) - if(prob(50)) //It's a fiddy-fiddy you may get a buddy pal or you may get mauled and ate. Win-win! - friend = M - if(tamed != 1) - tamed = 1 - return - ..() + if(M.a_intent == I_HELP) + if (health > 0) + LoseTarget() + handle_stance(STANCE_IDLE) + if(prob(50)) //It's a fiddy-fiddy you may get a buddy pal or you may get mauled and ate. Win-win! + friend = M + if(tamed != 1) + tamed = 1 + sleep(1 SECOND) + return + ..() // Activate Noms! @@ -293,5 +225,5 @@ vore_active = 1 vore_capacity = 1 vore_escape_chance = 8 - vore_pounce_chance = 19 + vore_pounce_chance = 16 vore_icons = SA_ICON_LIVING From 8db768e63d997a6b43a75b791a727a427d7c75dd Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 9 Jun 2017 20:48:33 +0300 Subject: [PATCH 158/261] Snowflake stuff. --- code/modules/mob/living/simple_animal/vore/otie.dm | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index 0baf026ff9..5b9cfe9c8d 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -6,7 +6,6 @@ icon_living = "otie" icon_dead = "otie-dead" icon_rest = "otie_rest" - faction = "otie" recruitable = 1 maxHealth = 120 @@ -21,7 +20,6 @@ specific_targets = 1 run_at_them = 0 attack_same = 0 - speak_chance = 4 speak = list("Boof.","Waaf!","Prurrrr.","Growl!","Bork!","Rurrr..","Aruur!","Awoo!") speak_emote = list("growls", "roars", "yaps", "Awoos") @@ -29,17 +27,14 @@ emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns") say_maybe_target = list("Ruh?", "Waf?") say_got_target = list("Rurrr!", "ROAR!", "MINE!", "RAHH!", "Slurp.. RAH!") - melee_damage_lower = 5 melee_damage_upper = 20 - response_help = "pets the" response_disarm = "bops the" response_harm = "hits the" attacktext = "mauled" friendly = list("nuzzles", "slobberlicks", "noses softly at", "noseboops") meat_amount = 5 - old_x = -16 old_y = 0 pixel_x = -16 @@ -73,12 +68,13 @@ icon_dead = "sotie-dead" faction = "neutral" tamed = 1 + maxHealth = 150 + health = 150 + loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt) var/check_records = 1 // If true, arrests people without a record. var/check_arrest = 1 // If true, arrests people who are set to arrest. -//Holy shit oh god how do I make it not destroy and devour everything indiscriminately! - /mob/living/simple_animal/otie/PunchTarget() if(istype(target_mob,/mob/living/simple_animal/mouse)) return EatTarget() From cdfe97d9c7e60cb989da511f89f8c981ab38459c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 14:01:36 -0400 Subject: [PATCH 159/261] Don't let people skip NIF install time with cryo Tsk tsk. --- code/modules/vore/persist/persist_vr.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index eb124f58f6..581f165d01 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -230,7 +230,11 @@ var/obj/item/device/nif/nif = H.nif - if(nif) + //If they have one, and if it's not installing without an owner, because + //Someone who joins and immediately leaves again (wrong job choice, maybe) + //should keep it even though it was probably doing the quick-calibrate, and their + //owner will have been pre-set during the constructor. + if(nif && !(nif.stat == NIF_INSTALLING && !nif.owner)) prefs.nif_path = nif.type prefs.nif_durability = nif.durability prefs.nif_savedata = nif.save_data.Copy() From 74416312549a1cfe7e137577d8a8e286a58ea002 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 15:26:22 -0400 Subject: [PATCH 160/261] Don't message on Quick NIF twice It's annoying! --- code/modules/admin/verbs/debug_vr.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/admin/verbs/debug_vr.dm b/code/modules/admin/verbs/debug_vr.dm index 7012ed46d7..62e7710ec6 100644 --- a/code/modules/admin/verbs/debug_vr.dm +++ b/code/modules/admin/verbs/debug_vr.dm @@ -24,8 +24,5 @@ else new /obj/item/device/nif(H) - to_chat(usr,"Implanted NIF in [H].") - - log_admin("[key_name(src)] Quick NIF'd [H.real_name].") - message_admins("[key_name_admin(src)] Quick NIF'd [H.real_name].") + log_and_message_admins("[key_name(src)] Quick NIF'd [H.real_name].") feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! From 78594376f16929c2daa1a899eedd4302824fac86 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 15:32:25 -0400 Subject: [PATCH 161/261] Fix Bluespace Harpoon bug, Allow Teleport Jamming The subspace jammers will jam portable teleporters (not the hand tele, for ~reasons~ (mostly to give it one good feature)). This should also fix an annoying bug where the bluespace harpoon fails to work for a long period of time. --- code/modules/vore/fluffstuff/custom_guns_vr.dm | 7 ++++++- code/modules/vore/fluffstuff/custom_items_vr.dm | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 400c327c75..8456f11558 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -790,7 +790,7 @@ /obj/item/weapon/bluespace_harpoon/afterattack(atom/A, mob/user as mob) var/current_fire = world.time - if(!user || !A || user.machine) + if(!user || !A) return if(transforming) to_chat(user,"You can't fire while \the [src] transforming!") @@ -798,6 +798,11 @@ if(!(current_fire - last_fire >= 20 SECONDS)) to_chat(user,"\The [src] is recharging...") return + if(is_jammed(A) || is_jammed(user)) + to_chat(user,"\The [src] shot fizzles due to interference!") + last_fire = current_fire + playsound(user, 'sound/weapons/wave.ogg', 60, 1) + return last_fire = current_fire playsound(user, 'sound/weapons/wave.ogg', 60, 1) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 6aa174e39d..a79b1461aa 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1031,6 +1031,11 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie to_chat(user,"\The [src] doesn't have a current valid destination set!") return + //No, you can't teleport if there's a jammer. + if(is_jammed(src) || is_jammed(destination)) + to_chat(user,"\The [src] refuses to teleport you, due to strong interference!") + return + //No, you can't port to or from away missions. Stupidly complicated check. var/turf/uT = get_turf(user) var/turf/dT = get_turf(destination) From 9ddde9730dcc00e584f0ba484664211c732f135b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 19:03:03 -0400 Subject: [PATCH 162/261] Yet Another Overlay Avoidance Now on this turf type. How many times will we have to do this? --- code/game/turfs/simulated/wall_types.dm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 6b793d6061..9d939caab6 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -193,7 +193,15 @@ /turf/simulated/shuttle/wall/voidcraft/update_icon() if(stripe_color) - overlays.Cut() + overlays = list() //VOREStation Edit - Another place with overlay nonsense. var/image/I = image(icon = src.icon, icon_state = "o_[icon_state]") I.color = stripe_color + //VOREStation Add - Shenanigans around this because of the bullshit byond bug + var/pre_overlays = overlays.len overlays.Add(I) + var/post_overlays = overlays.len + if(post_overlays != (pre_overlays + 1)) + world.log << "Corrupted overlays on [x],[y],[z] voidcraft wall" + new type(src) + return + //VOREStation Add End From 9e51ba2fa37e4d0ca9a15f362e12eb7c7c0210d2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 19:02:16 -0400 Subject: [PATCH 163/261] Soulcatcher improvements - Multiple minds at once, gotta catch 'em all, they can all talk to each other, etc - A setting to enable mind backups for all minds in there like an implant - Notifications to the already-in-there minds when one comes or goes - If YOU get put in YOUR soulcatcher, it does ONE backup right then and stops, so medical will be notified --- .../mob/living/carbon/human/emote_vr.dm | 12 +- .../nifsoft/software/13_soulcatcher.dm | 189 ++++++++++++------ code/modules/resleeving/infocore.dm | 24 +-- 3 files changed, 143 insertions(+), 82 deletions(-) diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index fb62e0ca22..0deb824388 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -21,14 +21,12 @@ if(!SC) to_chat(src,"You need the Soulcatcher software to use *nme.") return 1 - if(!SC.brainmob.mind) + if(!SC.brainmobs.len) to_chat(src,"You need a loaded mind to use *nme.") return 1 var/nifmessage = sanitize(input("Type a message to say.","Speak into NIF") as text|null) if(nifmessage) - nifmessage = "\[\icon[nif.big_icon]NIF\] [src] speaks, \"[nifmessage]\"" - to_chat(SC.brainmob,nifmessage) - to_chat(src,nifmessage) + SC.say_into(nifmessage,src.real_name) return 1 if ("nme") @@ -39,14 +37,12 @@ if(!SC) to_chat(src,"You need the Soulcatcher software to use *nme.") return 1 - if(!SC.brainmob.mind) + if(!SC.brainmobs.len) to_chat(src,"You need a loaded mind to use *nme.") return 1 var/nifmessage = sanitize(input("Type an action to perform.","Emote into NIF") as text|null) if(nifmessage) - nifmessage = "\[\icon[nif.big_icon]NIF\] [src] [nifmessage]" - to_chat(SC.brainmob,nifmessage) - to_chat(src,nifmessage) + SC.emote_into(nifmessage,src.real_name) return 1 if ("flip") diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 583e7c5ec7..52fbe74f6a 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -4,36 +4,31 @@ //These are purely local setings flags, without global representation. #define NIF_SC_ALLOW_EARS 0x4 #define NIF_SC_ALLOW_EYES 0x8 +#define NIF_SC_BACKUPS 0x10 /////////// // Soulcatcher - Like a posibrain, sorta! /datum/nifsoft/soulcatcher name = "Soulcatcher" - desc = "A mind storage and processing system capable of capturing and supporting a single human-intelligence mind on body death, into a small VR space." + desc = "A mind storage and processing system capable of capturing and supporting human-level minds in a small VR space." list_pos = NIF_SOULCATCHER cost = 1265 wear = 1 p_drain = 0.01 - var/setting_flags = (NIF_SC_CATCHING_ME|NIF_SC_CATCHING_OTHERS|NIF_SC_ALLOW_EARS|NIF_SC_ALLOW_EYES) - var/mob/living/carbon/brain/caught_soul/brainmob + var/setting_flags = (NIF_SC_CATCHING_ME|NIF_SC_CATCHING_OTHERS|NIF_SC_ALLOW_EARS|NIF_SC_ALLOW_EYES|NIF_SC_BACKUPS) + var/list/brainmobs = list() var/inside_flavor = "A small completely white room with a couch, and a window to what seems to be the outside world. A small sign in the corner says 'Configure Me'." New() ..() - brainmob = new(nif) - brainmob.nif = nif - brainmob.container = src - brainmob.stat = 0 - brainmob.silent = FALSE - dead_mob_list -= src.brainmob - brainmob.add_language(LANGUAGE_GALCOM) load_settings() Destroy() - if(brainmob) - brainmob.container = null - qdel(brainmob) + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brain + qdel(CS) + brainmobs.Cut() ..() install() @@ -57,7 +52,7 @@ return TRUE stat_text() - return "Change Settings[brainmob.mind ? " (Mind Stored)" : ""]" + return "Change Settings ([brainmobs.len] minds)" proc/save_settings() nif.save_data["[list_pos]"] = inside_flavor @@ -69,17 +64,32 @@ inside_flavor = load return TRUE + proc/say_into(var/message, var/sender) + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender] speaks, \"[message]\"") + for(var/brainmob in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brainmob + to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender] speaks, \"[message]\"") + + proc/emote_into(var/message, var/sender) + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender] [message]") + for(var/brainmob in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brainmob + to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender] [message]") + proc/show_settings(var/mob/living/carbon/human/H) + set waitfor = FALSE var/settings_list = list( "Catching You \[[setting_flags & NIF_SC_CATCHING_ME ? "Enabled" : "Disabled"]\]" = NIF_SC_CATCHING_ME, - "Catching Others \[[setting_flags & NIF_SC_CATCHING_OTHERS ? "Enabled" : "Disabled"]\]" = NIF_SC_CATCHING_OTHERS, + "Catching Prey \[[setting_flags & NIF_SC_CATCHING_OTHERS ? "Enabled" : "Disabled"]\]" = NIF_SC_CATCHING_OTHERS, "Ext. Hearing \[[setting_flags & NIF_SC_ALLOW_EARS ? "Enabled" : "Disabled"]\]" = NIF_SC_ALLOW_EARS, "Ext. Vision \[[setting_flags & NIF_SC_ALLOW_EYES ? "Enabled" : "Disabled"]\]" = NIF_SC_ALLOW_EYES, + "Mind Backups \[[setting_flags & NIF_SC_BACKUPS ? "Enabled" : "Disabled"]\]" = NIF_SC_BACKUPS, "Design Inside", "Erase Contents") var/choice = input(nif.human,"Select a setting to modify:","Soulcatcher NIFSoft") as null|anything in settings_list if(choice in settings_list) switch(choice) + if("Design Inside") var/new_flavor = input(nif.human, "Type what the prey sees after being 'caught'. This will be \ printed after an intro ending with: \"Around you, you see...\" to the prey. If you already \ @@ -88,22 +98,20 @@ new_flavor = sanitize(new_flavor) inside_flavor = new_flavor nif.notify("Updating VR environment...") - to_chat(brainmob,"Your surroundings change to...\n[inside_flavor]") + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brain + to_chat(CS,"Your surroundings change to...\n[inside_flavor]") save_settings() return TRUE if("Erase Contents") - if(brainmob && brainmob.mind) - var/warning = alert(nif.human,"Are you SURE you want to erase [brainmob.mind.name]?","Erase Mind","CANCEL","DELETE","CANCEL") - if(warning == "DELETE") - brainmob.ghostize() - qdel(brainmob) - brainmob = new(nif) - nif.notify("Mind deleted!",TRUE) - return TRUE - else - nif.notify("No mind to delete!",TRUE) - return TRUE + var/mob/living/carbon/brain/caught_soul/brainpick = input(nif.human,"Select a mind to delete:","Erase Mind") as null|anything in brainmobs + if(!brainpick) return + + var/warning = alert(nif.human,"Are you SURE you want to erase [brainpick.name]?","Erase Mind","CANCEL","DELETE","CANCEL") + if(warning == "DELETE") + qdel(brainpick) + return TRUE //Must just be a flag without special handling then. else @@ -115,6 +123,12 @@ //Special treatment switch(flag) + if(NIF_SC_BACKUPS) + if(setting_flags & NIF_SC_BACKUPS) + emote_into(" - Mind backup system enabled.","SOULCATCHER") + else + emote_into(" - Mind backup system disabled.","SOULCATCHER") + if(NIF_SC_CATCHING_ME) if(setting_flags & NIF_SC_CATCHING_ME) nif.set_flag(NIF_O_SCMYSELF,NIF_FLAGS_OTHER) @@ -127,42 +141,74 @@ nif.clear_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) if(NIF_SC_ALLOW_EARS) if(setting_flags & NIF_SC_ALLOW_EARS) - brainmob.ext_deaf = FALSE - to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's auditory sense has been unrestricted.") + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/brainmob = brain + brainmob.ext_deaf = FALSE + emote_into(" - External audio input enabled.","SOULCATCHER") else - brainmob.ext_deaf = TRUE - to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's auditory sense has been restricted.") + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/brainmob = brain + brainmob.ext_deaf = TRUE + emote_into(" - External audio input disabled.","SOULCATCHER") if(NIF_SC_ALLOW_EYES) if(setting_flags & NIF_SC_ALLOW_EYES) - brainmob.ext_blind = FALSE - to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's visual sense has been unrestricted.") + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/brainmob = brain + brainmob.ext_blind = FALSE + emote_into(" - External video input enabled.","SOULCATCHER") else - brainmob.ext_blind = TRUE - to_chat(brainmob,"\[\icon[nif.big_icon]NIF\] Your access to your host's visual sense has been restricted.") + for(var/brain in brainmobs) + var/mob/living/carbon/brain/caught_soul/brainmob = brain + brainmob.ext_blind = TRUE + emote_into(" - External video input disabled.","SOULCATCHER") return TRUE proc/catch_mob(var/mob/living/carbon/human/H) - if(istype(H)) - if(H == nif.human) //Reset our permissions to be permissive to the owner. - brainmob.ext_deaf = FALSE - brainmob.ext_blind = FALSE - brainmob.parent_mob = TRUE + //Create a new brain mob + var/mob/living/carbon/brain/caught_soul/brainmob = new(nif) + brainmob = new(nif) + brainmob.nif = nif + brainmob.soulcatcher = src + brainmob.container = src + brainmob.stat = 0 + brainmob.silent = FALSE + dead_mob_list -= brainmob + brainmob.add_language(LANGUAGE_GALCOM) + brainmobs |= brainmob - brainmob.dna = H.dna - brainmob.timeofhostdeath = H.timeofdeath - brainmob.stat = 0 - if(H.mind) - H.mind.transfer_to(brainmob) - brainmob.name = brainmob.mind.name - var/message = "Your vision fades in a haze of static, before returning.\nAround you, you see...\n[inside_flavor]" - to_chat(brainmob,message) - nif.notify("Mind loaded into VR space: [brainmob.name]") + //If we caught our owner, special settings. + if(H == nif.human) + brainmob.ext_deaf = FALSE + brainmob.ext_blind = FALSE + brainmob.parent_mob = TRUE + transcore.m_backup(H.mind,H) //ONE backup. Won't be called in life due to avoidance of parent_mob backups. + + //Set some basics on the mob. + brainmob.dna = H.dna + brainmob.timeofhostdeath = H.timeofdeath + brainmob.stat = 0 + + //Put the mind and player into the mob + H.mind.transfer_to(brainmob) + brainmob.name = brainmob.mind.name + transcore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it. + + //Give them a flavortext message + var/message = "Your vision fades in a haze of static, before returning.\n\ + Around you, you see...\n\ + [inside_flavor]" + + to_chat(brainmob,message) + + //Reminder on how this works to host + if(brainmobs.len == 1) //Only spam this on the first one to_chat(nif.human,"Your occupant's messages/actions can only be seen by you, and you can \ send messages that only they can hear/see by 'say'ing either '*nsay' or '*nme'.") - return TRUE - return FALSE + //Announce to host and other minds + emote_into(" - New mind loaded: [brainmob.name]","SOULCATCHER") + return TRUE //////////////// //The caught mob @@ -174,16 +220,33 @@ var/ext_blind = FALSE //Forbidden from 'eye' access on host var/parent_mob = FALSE //If we've captured our owner var/obj/item/device/nif/nif + var/datum/nifsoft/soulcatcher/soulcatcher /mob/living/carbon/brain/caught_soul/Destroy() - nif = null + if(soulcatcher) + soulcatcher.emote_into(" - Mind unloaded: [name]","SOULCATCHER") + soulcatcher.brainmobs -= src + soulcatcher = null + if(nif) + nif = null + if(mind && ckey) + src.ghostize() + container = null ..() /mob/living/carbon/brain/caught_soul/Life() - if(!client) return + if(!mind) + qdel(src) + return . = ..() + if(!parent_mob && (life_tick % 150 == 0) && soulcatcher.setting_flags & NIF_SC_BACKUPS) + transcore.m_backup(mind,0) //Passed 0 means "Don't touch the nif fields on the mind record" + + life_tick++ + + if(!client) return if(parent_mob) return //If they're blinded if(ext_blind) @@ -214,8 +277,7 @@ /mob/living/carbon/brain/caught_soul/say(var/message) if(parent_mob) return ..() if(silent) return FALSE - to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [name] speaks, \"[message]\"") - to_chat(src,"\[\icon[nif.big_icon]NIF\] [name] speaks, \"[message]\"") + soulcatcher.say_into(message,src.name) /mob/living/carbon/brain/caught_soul/emote(var/act,var/m_type=1,var/message = null) if(parent_mob) return ..() @@ -237,23 +299,26 @@ /mob/living/carbon/brain/caught_soul/custom_emote(var/m_type, var/message) if(silent) return FALSE - to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [name] [message]") - to_chat(src,"\[\icon[nif.big_icon]NIF\] [name] [message]") + soulcatcher.emote_into(message,src.name) + +/mob/living/carbon/brain/caught_soul/resist() + set name = "Resist" + set category = "IC" + + to_chat(src,"There's no way out! You're stuck in VR.") /////////////////// //The catching hook /hook/death/proc/nif_soulcatcher(var/mob/living/carbon/human/H) - if(!istype(H)) return TRUE //Hooks must return TRUE + if(!istype(H) || !H.mind) return TRUE //Hooks must return TRUE if(H.nif && H.nif.flag_check(NIF_O_SCMYSELF,NIF_FLAGS_OTHER)) //They are caught in their own NIF var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) - if(!SC.brainmob.mind) //As long as they don't have one - SC.catch_mob(H,TRUE) + SC.catch_mob(H,TRUE) else if(ishuman(H.loc)) //Died in someone var/mob/living/carbon/human/HP = H.loc if(HP.nif && HP.nif.flag_check(NIF_O_SCOTHERS,NIF_FLAGS_OTHER)) var/datum/nifsoft/soulcatcher/SC = HP.nif.imp_check(NIF_SOULCATCHER) - if(!SC.brainmob.mind) //As long as they don't have one - SC.catch_mob(H,FALSE) + SC.catch_mob(H,FALSE) return TRUE \ No newline at end of file diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index dc0b06d8bd..6ed0730cff 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -50,6 +50,8 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(mind.name in backed_up) MR = backed_up[mind.name] MR.last_update = world.time + + //Pass a 0 to not change NIF status (because the elseif is checking for null) if(nif) MR.nif_path = nif.type MR.nif_durability = nif.durability @@ -59,7 +61,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/datum/nifsoft/nifsoft = N nifsofts += nifsoft.type MR.nif_software = nifsofts - else + else if(isnull(nif)) //Didn't pass anything, so no NIF MR.nif_path = null MR.nif_durability = null MR.nif_software = null @@ -122,21 +124,18 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore //Backend var/ckey = "" - var/id_gender + var/id_gender = MALE var/datum/mind/mind_ref - var/cryo_at - var/languages - var/mind_oocnotes + var/cryo_at = 0 + var/languages = list() + var/mind_oocnotes = "" var/nif_path var/nif_durability var/list/nif_software /datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1) - ASSERT(mind && M && imp) - - if(!istype(M)) - return //Only works with humanoids. + ASSERT(mind) //The mind! mind_ref = mind @@ -146,9 +145,10 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore cryo_at = 0 //Mental stuff the game doesn't keep mentally - id_gender = M.identifying_gender - languages = M.languages.Copy() - mind_oocnotes = M.ooc_notes + if(istype(M)) + id_gender = M.identifying_gender + languages = M.languages.Copy() + mind_oocnotes = M.ooc_notes last_update = world.time From e75728c1797424bd125b32986b43ff73eb1792d4 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Fri, 9 Jun 2017 19:09:57 -0400 Subject: [PATCH 164/261] Adds me to the whitelist http://forum.vore-station.net/viewtopic.php?f=45&t=953 --- config/alienwhitelist.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index a82c759df9..38079b508f 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -20,4 +20,5 @@ vorrarkul - Enochian vorrarkul - Daemon pontifexminimus - Enochian pontifexminimus - Daemon -silvertalismen - Xenochimera \ No newline at end of file +silvertalismen - Xenochimera +cameron653 - Xenomorph Hybrid From 411e442fddb2d8259f08f26b2a96283d20fc0fec Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 10 Jun 2017 00:23:52 +0100 Subject: [PATCH 165/261] Increases the radiation protection modifiers --- code/controllers/configuration.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index b3fed19c9a..90721a5f08 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -221,7 +221,7 @@ 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_resistance_multiplier = 8.5 //VOREstation edit var/radiation_lower_limit = 0.35 //If the radiation level for a turf would be below this, ignore it. /datum/configuration/New() From a22e9e70aa879257d8c1d2a1b7eeffac7c3a5d17 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 19:41:13 -0400 Subject: [PATCH 166/261] Remove a bunch of my fluff items We're going to start limiting them to certain jobs and such. Too many people have too many mechanically superior-to-normal-stuff fluff items. So let this be an example that it's not some sorta thing we're doing to be mean. --- code/modules/clothing/suits/solgov.dm | 1 + code/modules/vore/fluffstuff/custom_boxes_vr.dm | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/suits/solgov.dm b/code/modules/clothing/suits/solgov.dm index 154772fe68..0fbb99a3f1 100644 --- a/code/modules/clothing/suits/solgov.dm +++ b/code/modules/clothing/suits/solgov.dm @@ -10,6 +10,7 @@ body_parts_covered = UPPER_TORSO|ARMS armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 + flags_inv = HIDEHOLSTER //VOREStation Add - These obviously do. allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/weapon/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/analyzer,/obj/item/device/radio,/obj/item/taperoll) /obj/item/clothing/suit/storage/service/expeditionary diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 6908a68e95..3923b8ba98 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -163,15 +163,17 @@ New() ..() //Might look like a lot... but all small items. + /* new /obj/item/weapon/reagent_containers/hypospray/vr/fluff/aronai(src) new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_st(src) new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bt(src) new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bu(src) new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_tx(src) + */ //Centcom stuff and permit new /obj/item/weapon/card/id/centcom/fluff/aronai(src) new /obj/item/fluff/permit/aronai_kadigan(src) - new /obj/item/clothing/glasses/omnihud/med/fluff/aronai(src) + //new /obj/item/clothing/glasses/omnihud/med/fluff/aronai(src) //Gun and holster new /obj/item/weapon/gun/energy/netgun(src) new /obj/item/clothing/accessory/holster(src) From f88ac10362e234ed512a39dc68b122015783d16b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 19:52:18 -0400 Subject: [PATCH 167/261] Couple more BSH Tweaks No more harpooning into walls to walk into areas you can't see because that's stupid. You can't harpoon turfs with dense objects on them. --- code/modules/vore/fluffstuff/custom_guns_vr.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 8456f11558..02e330fb49 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -795,7 +795,7 @@ if(transforming) to_chat(user,"You can't fire while \the [src] transforming!") return - if(!(current_fire - last_fire >= 20 SECONDS)) + if(!(current_fire - last_fire >= 30 SECONDS)) to_chat(user,"\The [src] is recharging...") return if(is_jammed(A) || is_jammed(user)) @@ -803,6 +803,10 @@ last_fire = current_fire playsound(user, 'sound/weapons/wave.ogg', 60, 1) return + var/turf/T = get_turf(A) + if(!T || T.check_density()) + to_chat(user,"That's a little too solid to harpoon into!") + return last_fire = current_fire playsound(user, 'sound/weapons/wave.ogg', 60, 1) From ac03b1075d7897667f049b88b6b3017d30c89c87 Mon Sep 17 00:00:00 2001 From: SpoopyLizz Date: Sat, 10 Jun 2017 03:34:55 +0200 Subject: [PATCH 168/261] Added colored eggs and did some minor tweaks. --- .../vore/fluffstuff/custom_items_vr.dm | 28 ++++++++++++++---- icons/vore/roizeggs_temp.dmi | Bin 0 -> 2324 bytes 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 icons/vore/roizeggs_temp.dmi diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index f0c21ce237..d926159840 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -788,7 +788,25 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie /obj/item/weapon/reagent_containers/food/snacks/egg/roiz/New() ..() reagents.add_reagent("egg", 9) - bitesize = 4 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype( W, /obj/item/weapon/pen/crayon )) + var/obj/item/weapon/pen/crayon/C = W + var/clr = C.colourName + + if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) + usr << "\blue The egg refuses to take on this color!" + return + + usr << "\blue You color \the [src] [clr]" + icon_state = "egg_roiz_[clr]" + desc = "It's a large lizard egg. It has been colored [clr]!" + if (clr == "rainbow") + var/number = rand(1,4) + icon_state = icon_state + num2text(number, 0) + else + ..() /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz name = "fried lizard egg" @@ -800,7 +818,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz/New() ..() reagents.add_reagent("protein", 9) - bitesize = 4 + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz name = "boiled lizard egg" @@ -812,11 +830,11 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz/New() ..() reagents.add_reagent("protein", 6) - bitesize = 4 + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz name = "chocolate lizard egg" - desc = "Such huge, sweet, fattening food." + desc = "Such huge, sweet, fattening food. You feel gluttonous just looking at it." icon = 'icons/vore/custom_items_vr.dmi' icon_state = "chocolateegg_roiz" filling_color = "#7D5F46" @@ -829,7 +847,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie reagents.add_reagent("sugar", 6) reagents.add_reagent("coco", 6) reagents.add_reagent("milk", 2) - bitesize = 6 + bitesize = 2 //PontifexMinimus: Lucius/Lucia Null /obj/item/weapon/fluff/dragor_dot diff --git a/icons/vore/roizeggs_temp.dmi b/icons/vore/roizeggs_temp.dmi new file mode 100644 index 0000000000000000000000000000000000000000..af18d5982bfe76c4b85561043e95b46107731a89 GIT binary patch literal 2324 zcmYk7dpy&98^?cNOiQ^{NKbb~g>2~{rJBm@(P8c~wW+FK?vNU0| z4mxfUcgZpBcB+}BcCd^{2ZyQT5c7Tb>v^u%>$0@U$577$=z+gp}}$k1VIdm z2V6X6J99Su(Ymws!_Cwf1kuTLKj^u)uC7kpioD9zmLl;>96nS_Lp-t!!BdL+RCa9Ej!f^>bNtG@kl&I*ED1s`N zE_z`ndrP)EC?ZG67$Um@8CgWJlckXb4{W7vMBBXrVvsakV9S;g1-`b@^F+=SEBU)X zD;y^oyYT^kJ9$i(y1EMC-CI!E=0Q&jCtSresf+~`pk&$ud&YjB2%IWI>mfF8f1av#m z6|#(-4Jw|3hG;OB3q%ffvLJHhAz0@JPuL0)iPExNupt<}V!+bVfPV`JHrYxK5xuN9 zoIv>lER2i-tP6l+V??!jy}SRsRNB*3c&KKmPhh9PLDhP2P%vD{h#!Ht)oyRCeGa<&809k6mXI zy5sYXSxoQ(mZE1UToeoL46dI>>Awm|45*K#lAkuEaD%pP^g$1$&4BF5DuqG)9{| zFxb+n=ZtEt<{+Q-*2m_|)wnr*e|k>e=WSmWz0UgwtG&swUTJp7x@-Qs>JttTBw?46 zx9OrPWrWduv={2aqi?DPodz$^b87c^O3?u?d>;;Hfpx{8GjHhL;B#0KD$c@s9|nE7 zST`_;!)o&0jCVt4>ge`ekWlC3WiTt7ylwpdos()faF?0Uj&(?O2iF5VLk##j4vqKZ zE1Xg2b?l<)5A!W;YNK`Lw`?lJ>x__aAdcC*uE=Qfq~0j7<{>zy`y#W(?+Z}A6~bwP zbL_6xO(vF>LhVzFOk|2)zf@e6B1ww+d1+{5f^c~`HtVB}Xr%Wp>*2-S}Z z{$gq|0^x!s_Rr@6Lb#6jN_+jv=wDad5SFrHkDmUC&NCNC z|6KRSS9)2lT(~3qR8}*}psS^_>X|bvu65h+a6>m%cDD-RoID&%9sGA?=B}(QAI}p~^VFX~PkeiTO{}AE~Jw zpmEpu$Jk(R>SD22lB?&DSXY#%7Y23G z%b%I=e%x(d{=E{mDaZ6lciGpxuX$~?6HDT2?me1Zj%FLT+$&7xH<3c#V61?EGqS zNksmYJ%;Z1-4G!-2d$ljy>(mZbV*Tt4>k0x#qy1K$Bk54z!cqiEg0)%S_lX;MZev zJTwaDyUq6L+3JT6ho%N(*JjL>1>)a^4D{lcmLZd!osN&UuAlg}kK#+Abdm~AZx1C* zJ?v~!4-bap!qigB?*0O|EXQ#Ced9^Hhk1I_s<-dozh4_06JI<|o=VAg8KwO>()qq{ zxNucZjF|z|R9k{iGgd`3pC7$N3a=$cBTI@z^BI~U&MG7>29Bua{aW=T4fUC%*4{M= zH$2;H_IY{Le$?o5^ORcWJ`L{|^Ww(be96EW0JNd!czx&K&YvLunf|&6&9eFA)p)KWh7&z^4t9!4;am Q*|&iZ_qw?}BKWiZ3*^dwv;Y7A literal 0 HcmV?d00001 From 446f7b0a12c643589d34f3c181c54e2987edc82d Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 9 Jun 2017 19:35:35 -0400 Subject: [PATCH 169/261] Eliminate init() proc from /datum/gas_mixture * Initializing a list in the type definition (of any type) incurs a hidden proc call ("init"). Simply by moving the init of the lists to /New() we speed up creation of /datum/gas_mixtures (which happens *often*) * The list variables still get initialized by the time the instance is created, so this has zero impact on other code, its just starightup faster with no downsides. --- code/modules/xgm/xgm_gas_mixture.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm index cb600f254f..ca2ed06c5f 100644 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ b/code/modules/xgm/xgm_gas_mixture.dm @@ -1,7 +1,7 @@ /datum/gas_mixture //Associative list of gas moles. //Gases with 0 moles are not tracked and are pruned by update_values() - var/list/gas = list() + var/list/gas //Temperature in Kelvin of this gas mix. var/temperature = 0 @@ -13,10 +13,12 @@ var/group_multiplier = 1 //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() - var/list/graphic = list() + var/list/graphic /datum/gas_mixture/New(vol = CELL_VOLUME) volume = vol + gas = list() + graphic = list() //Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0. /datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1) From 99f54b480cd4b9321e0e55f0b04b84f49ed10451 Mon Sep 17 00:00:00 2001 From: Cameron653 Date: Fri, 9 Jun 2017 23:04:00 -0400 Subject: [PATCH 170/261] Allows rigsuits to be able to carry backpacks Because it was removed for some reason --- .../clothing/spacesuits/rig/suits/station_vr.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm index efd1d606c6..f8ef7976d7 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm @@ -33,3 +33,13 @@ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack) /obj/item/weapon/rig/merc allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/ce + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/medical + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/hazmat + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/hazard + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack) +/obj/item/weapon/rig/industrial + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack) From c9595f5ba8f35add094f1cfc27e5b93532d88bfd Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 9 Jun 2017 22:59:34 -0400 Subject: [PATCH 171/261] Adds 'Quit This Round' verb for ghosts This verb frees your job slot, removes you from the manifest, and removes your mind/body records so you can't be resleeved (if you do this sooner than 15 minutes, medical will not be nodified of your demise). This prevents you from respawning as that character (you can play any other character if you want). **People should start using this**, it's really helpful to people who want to play your job if you're not coming back. Just use it if you're done for the day, or want to switch characters, or whatever. --- code/modules/mob/dead/observer/free_vr.dm | 68 ++++++++++++++++++++ code/modules/mob/dead/observer/observer.dm | 5 ++ code/modules/mob/new_player/new_player_vr.dm | 13 ++-- vorestation.dme | 1 + 4 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 code/modules/mob/dead/observer/free_vr.dm diff --git a/code/modules/mob/dead/observer/free_vr.dm b/code/modules/mob/dead/observer/free_vr.dm new file mode 100644 index 0000000000..6b38abfff5 --- /dev/null +++ b/code/modules/mob/dead/observer/free_vr.dm @@ -0,0 +1,68 @@ +var/global/list/prevent_respawns = list() + +/hook/death/proc/quit_notify(mob/dead) + if(ishuman(dead)) + to_chat(dead,"You're dead! If you don't intend to continue playing this round as this character, please use the Quit This Round verb in the OOC tab to free your job slot.") + + return TRUE + +/mob/observer/dead/verb/cleanup() + set name = "Quit This Round" + set category = "OOC" + set desc = "Free your job slot, remove yourself from the manifest, and prevent respawning as this character for this round." + + var/confirm = alert("This will free up your job slot, remove you from the manifest, and prevent you from respawning with this character for the round. You can rejoin as another \ + character if you like. Do this now?","Quit This Round","Quit Round","Cancel") + if(confirm != "Quit Round") + return + + //Why are you clicking this button? + if(!mind || !mind.assigned_role) + to_chat(src,"Either you haven't played this round, or you already used this verb.") + return + + //Add them to the nope list + prevent_respawns += mind.name + + //Update any existing objectives involving this mob. + for(var/datum/objective/O in all_objectives) + if(O.target == src.mind) + if(O.owner && O.owner.current) + to_chat(O.owner.current,"You get the feeling your target is no longer within your reach...") + qdel(O) + + //Resleeving cleanup + if(src.mind.name in transcore.backed_up) + var/datum/transhuman/mind_record/MR = transcore.backed_up[src.mind.name] + transcore.stop_backup(MR) + if(src.mind.name in transcore.body_scans) //This uses mind names to avoid people cryo'ing a printed body to delete body scans. + var/datum/transhuman/body_record/BR = transcore.body_scans[src.mind.name] + transcore.remove_body(BR) + + //Job slot cleanup + var/job = src.mind.assigned_role + job_master.FreeRole(job) + + //Their objectives cleanup + if(src.mind.objectives.len) + qdel(src.mind.objectives) + src.mind.special_role = null + + //Cut the PDA manifest (ugh) + if(PDA_Manifest.len) + PDA_Manifest.Cut() + for(var/datum/data/record/R in data_core.medical) + if((R.fields["name"] == src.real_name)) + qdel(R) + for(var/datum/data/record/T in data_core.security) + if((T.fields["name"] == src.real_name)) + qdel(T) + for(var/datum/data/record/G in data_core.general) + if((G.fields["name"] == src.real_name)) + qdel(G) + + //This removes them from being 'active' list on join screen + src.mind.assigned_role = null + + //Feedback + to_chat(src,"Your job has been free'd up, and you can rejoin as another character or quit. Thanks for using this verb, it helps the server!") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index e19a308c47..2c7af27235 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -255,6 +255,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients usr << "Another consciousness is in your body... it is resisting you." return + //VOREStation Add + if(prevent_respawns.Find(mind.name)) + to_chat(usr,"You already quit this round as this character, sorry!") + return + //VOREStation Add End if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune). var/found_rune for(var/obj/effect/rune/R in mind.current.loc) //whilst corpse is alive, we can only reenter the body if it's on the rune diff --git a/code/modules/mob/new_player/new_player_vr.dm b/code/modules/mob/new_player/new_player_vr.dm index 199563de4a..f32834589a 100644 --- a/code/modules/mob/new_player/new_player_vr.dm +++ b/code/modules/mob/new_player/new_player_vr.dm @@ -3,7 +3,12 @@ //No OOC notes if (config.allow_Metadata && client && client.prefs && (isnull(client.prefs.metadata) || length(client.prefs.metadata) < 15)) - src << "Please set informative OOC notes related to ERP preferences. Set them using the 'OOC Notes' button on the 'General' tab in character setup." + to_chat(src,"Please set informative OOC notes related to ERP preferences. Set them using the 'OOC Notes' button on the 'General' tab in character setup.") + pass = FALSE + + //Are they on the VERBOTEN LIST? + if (prevent_respawns.Find(client.prefs.real_name)) + to_chat(src,"You've already quit the round as this character. You can't go back now that you've free'd your job slot. Play another character, or wait for the next round.") pass = FALSE //Custom species checks @@ -12,7 +17,7 @@ //Didn't name it if(!client.prefs.custom_species) pass = FALSE - src << "You have to name your custom species. Do this on the VORE tab in character setup." + to_chat(src,"You have to name your custom species. Do this on the VORE tab in character setup.") //Check traits/costs var/list/megalist = client.prefs.pos_traits + client.prefs.neu_traits + client.prefs.neg_traits @@ -25,7 +30,7 @@ //A trait was removed from the game if(isnull(cost)) pass = FALSE - src << "Your custom species is not playable. One or more traits appear to have been removed from the game or renamed. Enter character setup to correct this." + to_chat(src,"Your custom species is not playable. One or more traits appear to have been removed from the game or renamed. Enter character setup to correct this.") break else points_left -= traits_costs[T] @@ -33,7 +38,7 @@ //Went into negatives if(points_left < 0 || traits_left < 0) pass = FALSE - src << "Your custom species is not playable. Reconfigure your traits on the VORE tab." + to_chat(src,"Your custom species is not playable. Reconfigure your traits on the VORE tab.") //Final popup notice if (!pass) diff --git a/vorestation.dme b/vorestation.dme index 31eeacc2fb..9dddf9e064 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1653,6 +1653,7 @@ #include "code\modules\mob\typing_indicator.dm" #include "code\modules\mob\update_icons.dm" #include "code\modules\mob\dead\death.dm" +#include "code\modules\mob\dead\observer\free_vr.dm" #include "code\modules\mob\dead\observer\login.dm" #include "code\modules\mob\dead\observer\logout.dm" #include "code\modules\mob\dead\observer\observer.dm" From ad6bea591af201e811929d768328c47e408cf80f Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 9 Jun 2017 23:40:22 -0400 Subject: [PATCH 172/261] Put lighting range back how it was for now. * The Polaris change of reducing light fixture range is interesting! But we need to work on how it plays out on our map before adopting it. --- code/modules/power/lighting.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 4ba73a2b8b..82fc6c2233 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -162,7 +162,7 @@ active_power_usage = 20 power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off - var/brightness_range = 6 // luminosity when on, also used in power calculation + var/brightness_range = 10 // luminosity when on, also used in power calculation // VOREStation Edit - Put light range back how it was for now. var/brightness_power = 3 var/brightness_color = null var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN @@ -183,7 +183,7 @@ icon_state = "bulb1" base_state = "bulb" fitting = "bulb" - brightness_range = 4 + brightness_range = 6 // VOREStation Edit - Put light range back how it was for now. brightness_power = 2 brightness_color = "#FFF4E5" desc = "A small lighting fixture." From bd72434b0b307a5216a58243c9834276f1351ddc Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 03:13:23 -0400 Subject: [PATCH 173/261] Cheap hack fix for get_blahblah_fast breaking due to null mobs in player_list Just have it clean them on nulls. This check should be fast, the list isn't that long, and it checks other stuff anyway. --- code/_helpers/game.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index d7ee78ff8f..fb99da896f 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -281,6 +281,9 @@ //A list of every mob with a client for(var/mob in player_list) + if(isnull(mob)) //VOREStation Add - Fix for a weird bug with nulls in this list + player_list -= mob //VOREStation Add + continue //VOREStation Add if(get_turf(mob) in hearturfs) mobs |= mob continue From 878d3597fc2e5390d6d7455406820c118d0f00d2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 03:37:01 -0400 Subject: [PATCH 174/261] Quick NIF verb tweak Use this list instead? The other one appears to contain... something else. Or be misaligned or something. --- code/modules/admin/verbs/debug_vr.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/debug_vr.dm b/code/modules/admin/verbs/debug_vr.dm index 62e7710ec6..586bde6e64 100644 --- a/code/modules/admin/verbs/debug_vr.dm +++ b/code/modules/admin/verbs/debug_vr.dm @@ -6,11 +6,15 @@ if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/H = input("Pick a humanoid","Quick NIF") as null|anything in human_mob_list + var/mob/living/carbon/human/H = input("Pick a mob with a player","Quick NIF") as null|anything in player_list if(!H) return + if(!istype(H)) + to_chat(usr,"That mob type ([H.type]) doesn't support NIFs, sorry.") + return + if(!H.get_organ(BP_HEAD)) to_chat(usr,"Target is unsuitable.") return From d44af4e65799bef5e270918a43bc4dd3bef8eaba Mon Sep 17 00:00:00 2001 From: Verkister Date: Sat, 10 Jun 2017 13:52:36 +0300 Subject: [PATCH 175/261] Dogborg animation framerate tweak. -Changed from 0.5 to 0.8 (citadel version currently at 1) -The walkcycles should look a little bit smoother now. --- icons/mob/widerobot_vr.dmi | Bin 182259 -> 182259 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/widerobot_vr.dmi b/icons/mob/widerobot_vr.dmi index f5b2d886f960fadeeedbdbd4b1acf05f0e565a89..30534d481060afdbcbab34edb52d864be416fc5d 100644 GIT binary patch delta 483 zcmV<90UZAGj|=mU3y?^EAO?qCCeXwIUSSHy>Cxn^GMhgUK)v(W%UB0U1nF5fxbO3kw;HQ(>&M2pROMc~3-nsSRW> z5z)Jr4I0Q`^c#s!8h6zN963Ra#*!SK(ZmeL-&|am`@$L$S8c3+j(FIq7B$2>KmN&= zKQVN3Ac=@_tmPRpNQSck<1eB{wbkSSH?VP}TlhvjAgi}gx; Z0zq5}xV6}l;)4u`? delta 483 zcmV<90UZAGj|=mU3y?^EFg6aoOrVJayuuWyN2?ZslB|fg-(i~=8o^GLRfyZ?*#2$D zX&+t|ugf*eS4+{LHl;d129seTqEngM0y3DUA}X-l6&5lWr@~li5i;miv!00ZQX9x% zBBFOK_h=x4(QhO^Y1~#9aO4Cv8cT9`MiVm}e{*qN?h0#2Ts5(OI^tog8q^SP{rCr8 z{>0GDfg~czv6g4ZAQ?Um7=ID%RfBsxSRW;W`?+6|2yKH>a4(HX>h)2|KJF>1689pYu^(iu3Ox2XJNt{g3 zIDEDcBkCWJJKw~A!J%(uDzI?=P8zpWtQyp{JUjG#zIYoAsNW>{vtm-0y!SU#N))G? zMRR>aC?b*99?`C z?M{>bY+&`(wf3Itziq)eX)p)YkqEyRJni^har Date: Sat, 10 Jun 2017 10:13:55 -0400 Subject: [PATCH 176/261] Converts /datum/gas_mixture/var/graphic to a lazy list. * The vast majority of gas mixtures never use their `graphic` list. Prime candidate for making a lazy init list. * While we are here, add nullchecks to ZAS's use of the graphic list a bit. /turf/update_graphics was technically already null safe, but its even better to not bother calling it at all right? --- code/ZAS/Turf.dm | 4 ++-- code/ZAS/Zone.dm | 14 ++++++++++---- code/modules/xgm/xgm_gas_mixture.dm | 20 ++++++++------------ 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/code/ZAS/Turf.dm b/code/ZAS/Turf.dm index bb5eb5050e..a309cd3a08 100644 --- a/code/ZAS/Turf.dm +++ b/code/ZAS/Turf.dm @@ -5,9 +5,9 @@ /turf/var/datum/gas_mixture/air /turf/simulated/proc/update_graphic(list/graphic_add = null, list/graphic_remove = null) - if(graphic_add && graphic_add.len) + if(LAZYLEN(graphic_add)) overlays += graphic_add - if(graphic_remove && graphic_remove.len) + if(LAZYLEN(graphic_remove)) overlays -= graphic_remove /turf/proc/update_air_properties() diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm index da39b868d3..18c5ab2899 100644 --- a/code/ZAS/Zone.dm +++ b/code/ZAS/Zone.dm @@ -77,7 +77,8 @@ Class Procs: fire_tiles.Add(T) air_master.active_fire_zones |= src if(fuel) fuel_objs += fuel - T.update_graphic(air.graphic) + if(air.graphic) + T.update_graphic(air.graphic) /zone/proc/remove(turf/simulated/T) #ifdef ZASDBG @@ -92,7 +93,8 @@ Class Procs: var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T fuel_objs -= fuel T.zone = null - T.update_graphic(graphic_remove = air.graphic) + if(air.graphic) + T.update_graphic(graphic_remove = air.graphic) if(contents.len) air.group_multiplier = contents.len else @@ -106,9 +108,11 @@ Class Procs: ASSERT(!into.invalid) #endif c_invalidate() + var/list/air_graphic = air.graphic // Cache for sanic speed for(var/turf/simulated/T in contents) into.add(T) - T.update_graphic(graphic_remove = air.graphic) + if(air_graphic) + T.update_graphic(graphic_remove = air_graphic) #ifdef ZASDBG T.dbg(merged) #endif @@ -131,8 +135,10 @@ Class Procs: /zone/proc/rebuild() if(invalid) return //Short circuit for explosions where rebuild is called many times over. c_invalidate() + var/list/air_graphic = air.graphic // Cache for sanic speed for(var/turf/simulated/T in contents) - T.update_graphic(graphic_remove = air.graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt + if(air_graphic) + T.update_graphic(graphic_remove = air_graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt //T.dbg(invalid_zone) T.needs_air_update = 0 //Reset the marker so that it will be added to the list. air_master.mark_for_update(T) diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm index ca2ed06c5f..7fe1a96d0d 100644 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ b/code/modules/xgm/xgm_gas_mixture.dm @@ -18,7 +18,6 @@ /datum/gas_mixture/New(vol = CELL_VOLUME) volume = vol gas = list() - graphic = list() //Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0. /datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1) @@ -331,27 +330,24 @@ //Rechecks the gas_mixture and adjusts the graphic list if needed. //Two lists can be passed by reference if you need know specifically which graphics were added and removed. /datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null) + var/list/cur_graphic = graphic // Cache for sanic speed for(var/g in gas_data.overlay_limit) - if(graphic.Find(gas_data.tile_overlay[g])) + if(cur_graphic && cur_graphic.Find(gas_data.tile_overlay[g])) //Overlay is already applied for this gas, check if it's still valid. if(gas[g] <= gas_data.overlay_limit[g]) - if(!graphic_remove) - graphic_remove = list() - graphic_remove += gas_data.tile_overlay[g] + LAZYADD(graphic_remove, gas_data.tile_overlay[g]) else //Overlay isn't applied for this gas, check if it's valid and needs to be added. if(gas[g] > gas_data.overlay_limit[g]) - if(!graphic_add) - graphic_add = list() - graphic_add += gas_data.tile_overlay[g] + LAZYADD(graphic_add, gas_data.tile_overlay[g]) . = 0 //Apply changes - if(graphic_add && graphic_add.len) - graphic += graphic_add + if(LAZYLEN(graphic_add)) + LAZYADD(graphic, graphic_add) . = 1 - if(graphic_remove && graphic_remove.len) - graphic -= graphic_remove + if(LAZYLEN(graphic_remove)) + LAZYREMOVE(graphic, graphic_remove) . = 1 From 5899d05857711a5400555968f9acedd0eadcbecc Mon Sep 17 00:00:00 2001 From: Spades Date: Sat, 10 Jun 2017 12:12:15 -0400 Subject: [PATCH 177/261] Create alienwhitelist.txt --- config/alienwhitelist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 38079b508f..e902bbafc8 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -13,6 +13,7 @@ natje - Xenochimera zalvine - Enochian rikaru19xjenkins - Xenochimera rikaru19xjenkins - Xenomorph Hybrid +rixunie - Diona seiga - Vox benemuel - Enochian benemuel - Daemon From 73fda854cf65e45ca3498d3af426b3faae86844e Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 10 Jun 2017 18:18:20 +0100 Subject: [PATCH 178/261] Add's Epic_Charger's custom taur winter snow suit --- .../vore/fluffstuff/custom_clothes_vr.dm | 19 ++++++++++++++++++ config/custom_items.txt | 6 ++++++ icons/mob/taursuits_vr.dmi | Bin 190325 -> 197571 bytes 3 files changed, 25 insertions(+) diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index f163b8b4b0..4fcaeee530 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -1221,6 +1221,25 @@ Departamental Swimsuits, for general use icon_state = "batter" item_state = "batter_mob" +/obj/item/clothing/suit/storage/hooded/wintercoat/jessie + name = "Handmade Winter Suit" + desc = "A durable, but somewhat ragged lower portion of a snow suit fitted for a wolftaur." + icon = 'icons/mob/taursuits_vr.dmi' + icon_override = 'icons/mob/taursuits_vr.dmi' + icon_state = "jessiecoat" + +/obj/item/clothing/suit/storage/hooded/wintercoat/jessie/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) + if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf)) + if(icon_state == "jessiecoat") + return ..() + icon_override = 'icons/mob/taursuits_vr.dmi' + icon_state = "jessiecoat" + pixel_x = -16 + return ..() + else + to_chat(H, "You need to have a wolf-taur half to wear this.") + return 0 //samanthafyre:Kateryna Petrovitch /obj/item/clothing/suit/armor/vest/wolftaur/kate diff --git a/config/custom_items.txt b/config/custom_items.txt index 7609e02719..44d1d851d0 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -189,6 +189,12 @@ character_name: Serkii Miishy item_path: /obj/item/clothing/under/skirt/fluff/serkii } +{ +ckey: epiccharger +character_name: Jessie Mare +item_path: /obj/item/clothing/suit/storage/hooded/wintercoat/jessie +} + { ckey: epigraphzero character_name: Verd Woodrow diff --git a/icons/mob/taursuits_vr.dmi b/icons/mob/taursuits_vr.dmi index afeb27a7c99ae744a40511d27b4f014a5c7739ac..5fbf4739e9678f9800f598232362f28b955966c0 100644 GIT binary patch delta 26211 zcmb@tby!tjw>C_NASocBfV7m-AgKrf(j^Td-Q6ro>5!Bz0RaW+W`hXQh;)Z^ckjKw z$?rVRInR0D>-+xtytv%3)|`9JHRqUP+~dB-IvvF82*r=1AdtktLP0@6Grjv9{Ll4~ z=@De}Y|e^Qh_(5Zf8eKhQzx}>z7MV%=i5zjnOG491D?>H{(;llyr?*Qvh~xzajo}@ z!NfeP{;R$T>!)$t?R;z3jk*}01@4V}8msKZypz^7yJ~t8avIk-XHawSbBfR0fYTjc z%zWgN1M*E2=S%6r$zHS@>bv6l7GH{_6Nx$sD;iA(k9B&NxuB~YpuCSoy_tVNAK`Zpbvm-&#w_Zrl5uQ@zD?8lT;Mx#rzIZV;#N-CreAiQyn85bM@=ad{o(rhh=SD z4*k^hx4bG8F4m@Zl1X|~`O`8v>cLoig+<-FlP3KiOZf&o7p_y_UV%|%P&iXbo`O!& z+mc%4cD)l7e#5>}QB{8bJA)GLRJK_KB3I};n8x!7vg84nro_fE!|KHfCA@C;A6)q( zQ3y}DoHEZ}W3F5L)c9SN4AWNdiFjjN4c)Vol)3iq?o_KLz?kS99sjFFl1r-XZU35=9voBJXdS*QLFF5)iWaJhhFYhJhDMMDd8{3(YFhk7&NC+1b@RMH z)4|bE43htBRuPsIu(+-KemdoC+#}8JIc}wxb_>>hrQg1B=6!2YBaVA?&&v+=+e-n} z5{_IVa?<|iVeiu4F<&#Lrp_+VCiw93;zm-LGYhWwv1Iqm`ml%&HLR!lWF2R$3lB73 zEJvn|HE{32kdVLdqaT!ac~f5x-U+0anfLU%%(2F9UwqpG$6M+3E-fs1aEe{G;NO(- zgzt4iaJI|gq-kuAE<4<(V%Gn9*I8FrxBRiO?z;XNYz2XNWW0Ipw^`zLy->a7bvdJL zfZMi||Es~_Ozw5j?$1Ju!#{<6PGW*S?ZIg_=r55Svat~Q$sbxt;eADT%N7b7?0j`m zf1_Ee{&ZY#wY&S3tH=X^^ytAsB^0#JlH)MA_Q2L|@9Yf3>d`Yu658J0Zmq}1&wqFh zL;9&y2TIc2pT#%F#>ohtZ(q5=!4gc@65~eS5!dKuKXmNQJc$Q+7Wd9>4M6&Q?@@lJL%;}Zl7G#VvvT?crZiwXt!>G zOCerbU!Mld%IkQ|s*t3+VPj*1j*~N*lGpr+S?@ig$iHrduTy_SQS!c0P#E#Wlmyc{ zc=zO)M9w!cBa9%tifa{mi}c1P_wjA#sJl6#^A={iIqI-><3(F_iY7v`E8U+8y&vPL zG-b8n?Nb7>^485<2@?@?E32y&b~6I5A{GUBOh>3WBb&cBT|W(&9~~V{HhWdo{X7y` zk8tELY@VFSyNGHh*(AZiKm%i=tUE)IooKjXzc|Pv_c5qeJUdZ!>+CZz4&eI`YyxVy zOD%9hg@5jrDM?54PnRdZ>o@OU?`MDi(zkHWu%Rx&$Ed<_gp7bz-ea@kO-AGS`#)Io zU8UD3xc>|QIt532Aby`F#n^S{p&lyhi`Nk=&>VeheSc4 zLy?n~(zu--1iA-F1v>`(`@7KEbEJeMZ*ToG8{^+}G<5&|L-L6w5kcI)=Sg>;4+s0z ze-D696@t$AUrzw8Vcq?K`mYtZogmiI|IGG(4F~;S;}Nacp#C$N`y5|e5Z+VAlQ)^q zn2fp~5#cmPeut1!(^VF++Q^QaGx>&+=D3R$+mc?q@PRZDONZuS%M=V(Hap_%49=Ms zqm9!r^F|3LWM=QxA;9QxT4-aykI8M=LTpwa8r!{UX$ zjzQnevsAY7md~mFxf@2R`Z$tO&er8N&b@souX?+&staK3S;4S&@dIl7UHToPNmvl< z)T3NPQsS~ld4=WS73#HzEym*b`#!8wx>uAqNO&|0N_c6}>fyG8-In)iQVO~s=S+d| zj6&opxJsN2WemJfptb0XEd9)M&K-xm>31l8%>51-6Fuv^V3W3sS9ZmHHRUk&w_M`- zBIh?4@L6y>V!{w=x#_;ZM-g}vBot31=jcQC^u@^*zZ>T_*AF81)u(>a1V0E^#g6nt zIPMU-bGIsI8GobWq|XAE*j_0yxp~r<@sH^z@JB!pg{a42!;fZ4!$NeQROZf$t3fJ~I=dA;wM+Cm|YBIIc>r&6)hEkKT?+_+b z4V4Q^LRTZ%?-F``{tOWz@AufU60u`BsAL&Sb@Z_eDzv|7z_Bh*EFHSnkm=>uH{I_5so{4ML2LWuA?a7iAU6skI&rjsjXW?=|-h z^5!i2%$>5JuISG7c`n>%m%bF=-&}v)@!8(R^2E+U#YdJb&kta$H);gb6gV0nD6sn0 zag!>Gb|4;5-!6*#Gl{<<*b8!BI^OYE6^^_ZTBOYo*#kX8lf?S9d9pVY5ZKjoHn7I@!bifuHHAJ`ER)o_3 zbTT#Ri^cJj)*ljRS+2MH;Q=A^68YSVby!=Gg_GV;Oz_&s{b92eRuyuL_c}Y7Nclu_ zge@`D`Z=VX%vG;f#>(|Bs3vdd7}#5sva-b{+OFR@8|$F5fr3r;I?EgOFRWanuc>ja zC1CJ{_+*A17`4$93^>s@9OSP8zWJb=lz$}%solG~vH_)d_Yd5?&yd%`6r-$i!Ye4~ zSpA5~%Yhxl3S$vFk6OIJByRG^&QP^8?ioW}ju&*ij#O9UErI%CoU!>v_UikWVsg8FA+a0y`Vd&YRQcG>BHj^s}m+M0&TI zn2-8yB9z6M1I)uZbYseKO<|4kCvW6qw=gGd zw>H4QgxhOghZp43q=8Jj-iR=i?5-@Seyh#}TJHu9Li7=i_T zN48rak3IGh6MaL`&GE1~4zj+X%gduoCi8!+j3?=}Zj>;_&0V%FHFth4dWv1o%oz=w z#^4S#6}})5T!MvX*2b@sFQh_+CV7kz%zWapDyA2z7ZY6h^VSH_^stLN{)SQJ?Qh~y zb*5e~_g?}>szv&j3|p#)G!G?QZm3_-kY0YULyBZTHLy?|Y~qk3fpih+ zdyJN3m&wcv7#j{EsRNf;eZIS@!35-@y%fGBen@akdV(6L>1e z^aIXqA4n?CSoR#cKrfv>BwhPfaY@^u7i6P+t$a3lJe-BPfb|10*VJeSH~3B=U2h*U2X*YxL3Iau{Qowk?aKKE!@U-k;K#f@$^k zlKZzy`T722m>8dww_lCR6t(0V%dnYJU{Mp=4jm8E=-4ocA<^TPSXAqOU|%+Kj)R;S zP*|-+zR1C^pM!_~4y`W14hr>vhhPSNV++0YYhhY26Vp%pVVCcpLmCUsPwUkvZI%@4 z)Kv8+OGEY~rG|~=VO;%mYyGn( z3^PXtH8Jpevd-c1W6F$Rf3q&VWTro*NcpkSY?oz+?FtHb|HRuf>fV-G3NidPu-#t` zazikyP3=6q;p1ln>(^x}g95eagZ_Edza+cVA*i4{+gdcruHRkggsJxFjPRJ}n_a@3 z2XHasGl}{g+ML?j2;l$M_Gj7H&|#xXPOLqPe@8~b!=qGUhZY*t(~Q4?CcP!W~BG6)apR$vzZh#5&Gm4yYU_I9z zX5(mU80CEGUS9$OcJOl&T4IzDe!$>(Mp__-#glc#jt(cin#iPZl?_nZFw(~E{MSl& z?m)dZ+;Vc1Q?_E&w2sUtk9~|z_|d=8Xp@B2J)D-vNeN)RYGQUx8Ph1`Z4pGYe8hH0 zYmbH;Ffw@C0EUrxBbsx1{!ZT;D=FXQjsN#I2FQIv-nMzDupEa-s81X;c)hwoqbMB^ z0ymmOILP%;@|`(UZ{GYt02qtfM&*vFcb*l{!qZu+DtbDq%w%C05Hpu8c#!E3yHwR7 z+sqcPZRPNFZOg%+6M>{L>t%iLyNmN&j2*tIJk;Y*#wpEAWHU+DN?x^~^4OnjMh4Y& zd$wfW26{h4K)Wfvj-Nn2BU53$yDmvr7j@P;3x8jP(2lmm)E)EjU1(iEjq}pEV=_*< zwO*YEW1*;o%uMx-`n-xQ9lmP0(cqtz=j*%zvZvH&i{ zyVBcojccJ2DZ^34>-i%HM;|*5Y~g<=KMjTUzI2f`>|7@J1o>>=r1F@^HEXLYR`LJP zUiP}nwD7VAIb1%sJpQo32cc~~1uZfd$xR}0uJ>mU%Eg+C)ecDW%;*<&GMAZfpE1;{ zGfnMy@iVD9tWQpv9Sy{bx)1Ou2LFyy6t#fmc`74)+&1Sygjnv$QsfTIMx2<`C_?f_ z9&VQ^Km9v-1C9KUf8KhHYHB+V)IYts{!RSjE6Z#dSU{*GTqm~mWZ~@3+e^gzV^(38 zAb7~0LTE63OnK%&FncsY?&}uwQ;IY0orQ&+g>3?&dcvT4SRIS9kQ5~b z>MN4|huUob)TK=!|LU_=Er2}ysJA8aHbalvrkTB#f1=)HhCaOq7@@joZWNVMYz@8N zmH)OZI&a-acaRM535S){CwD3;gssO+XOWyc+{M!n#2zg{+=)QX z*+E}!yet~WhVIByL#*k~9~XSDnFRs&Jv3Uj^(}Xzn#c01DO-!b55m3|5TZ(wZY2a9w@fj~r9(f<*l7tCOBW^Z#YJ(8xn&NE#C)kK0 zVkk#@Z};chiUY9Rt@k>%XIkj03*X-zK|veT?zd=?N|fNM<~KY4oJ4h5?S zu6>W9q$(Yp!AV;3{((lKvrx>^qyS*_RK565+G@XsXYf(g>rniV%MY~EA@yqiByMRQ z;L_XYIW*p0nPW1my8Zj)PkF1S`IymX2%L(&FK*vCEbs46iSQX=JpZq3vJ%P`kp!k` z&DCwZ41iohHd60d`Rq*3_j}pcOU=E{ppB;9{f2*09+$JXlt-Ee%5BgFp$ajWsir0) zK+PewLx{)B?|xt1&__-_`au`syD>!oLre^UD$jU zuc4)`m|9F8@XY!_+L)0E@J_2>j$K7X2_m8~ApdJ6@3E+_m6CEUsnV#FAqFN*3xJBB z+W+EO0?kVa{+pgb3uO6!B}1V9#fJP}WXS(7SuikOo zJuNg;3gEejeMqICkboOdn;f{0lc9iITr__E{P~x%GG;EWn3xy>k!R2Ni(u?{6ddvB z!HcI8HMv6tZ-?_+pI6N?x=K?ui$Az6!GA(`M z$Y5sV8)!(|ZW=4b%)-K=ZfF=IO+@a3uC1T-GHHiSoQpgFd9%)VI|lZ$@qzCZcIXBU zE?&{MZ+8_;Ngs?0h&;1R`?HXMVt~Rki0Th$Lq$c!jZ^O|?=3dLIdYCSbmwFc{Ro=h z=GiT&`t92{X&D(c1A}M|Oro6Qq>%q2!LZQ9!%_Y@NMQfN(6i$cKMv3Y8;I527+08Q z8EPQGxxD)vP@BUrQIGM>}cSI)mjN2TArV{~Xf{J?x-RPUJk zbt8mka@$wmmjjTl-Ie`QCDvN4XC=%h?q*=X$^mnRCr{#Zs?47{%!_LNa@!v7Nf&hJ zT5<$5ebphZLjlM432)zG9ojojhtYRRG^sUj8#@%zl~&V7&e&H zuiggL1fiSA0cYf+$5_tmv@9(SKT#JE5s5QPwJC2&ei2G=srywSsE9NnC55G^s7PH) z>jOt0^eX=6#o=FJ$3+weE62rc`QV1E`}u)!aYRAE!IT2NtgA&sIk8bW4Y|ZE;z1u7 zWdF?1D|M#wwvyK^Y*;$5FfauF{;e{Ym|aj)lNz?cs+*oBr$kvSBJtqC1HMn&ew_BO zV@_yr#^}MHI^U^1gP}_5_e~&NNM`xXZ3Y#f)|+@8jkK5C|e%4_P?$Z z_~hQ<>W}EoPy2JJe`9h37EVj51na|W{-VV<%TaM}J=r>3IP zHVxI-%v~X-Yizv0mNWp`eX7cWFkQed-eM^08zsD5xEluSgi_3#Z(v}cKSMZy!q8J{ zQX(!jwI`WVFDxu{ZuiU|`_t>iWdI|GrG@!+|7i!|*Zdg3?lj z<11O2`>*8Wa_8UWmDOswIj2!m$-P!GdGnmcqIXD5U%$T*hS20S`ml|-(k`yA|HQj$ zL77Y>`_}o+z};vRjSS%z26mjM%%p5=Y|=9KeL3uqykHQNcRI`h0?E5GbuJgsfyt@G z_1W&vuC8TAq0wzx?+yBa$sccGCm?1fr<8%NNC9e(Dcc)fwqg)NyS&o}cHLIGKfcZo zBF-P~j@hMcynCmn_hfVAcC~+6^6>z}lZm0hJ+Y_ed^)*{oVF>)q+?;h4v?kwOC%J( z2>9{ix%kB*`a{1H)w<)}Q%LvkVtX*3prFguiIwCetQ4Lt?w7WbVJjt*$}I# ztRM-5hEsUpcg9oAaFn^Pc)}CEu=xU|Q1#u$G=cuHZcTqtBX2AHk76GmJ>*vqWVz{m`5kK12J*7~mpcJFQQLB+B(y|E| z%QtA2*44kKHhnJ~rmN+62V;Zs)Gdml3uW+7de|7AO3U)PP4iW9!!rJ2Vu~jnsvYb@ zNIh}q6&z9)CFyv^Gx2L;{(VjLV?+LYndrAWlNHi0U#ekiGSAh%+6y4nTw|{haaWH>yTUy$BI>qv-olhWghl2YiThvV4EVA zpQD&FZOJKwSzNZiy%VpVx@_0p9MCb}S(NR6M-tFuot>RgG{W(Jf5kG$k)WzU`!_h8 z^nE;;nVF0%EG}E4Z1D*RZ0zg|Vq%%e$>fcVjlP`AOr}dgFP)u_UcIi-wEtz0(#RGQ znCvuGvD{CIKRj%|o{%7GU3h@m2HX=XCugT6UkPt>6gq*_t5-M#p}`2rs-9kH>xT~?DzDm5H(JG^ zbNjU`trP!({QTg#CJ*#4=q>T_B#+tI0Tvu>UeCDqT0Co+otRq~7Z+E^);-N`fJV$a zv9OT&s}}q35#}b3{jS1XRu!W&*uKIizPFB(NS18hA7E8c-!wQgO+bb|yTZHBYHt$C z)@hZ+&{^s%eBk{K%vtmR90VJiY5aJw1J2*qKqQG$}2OidMnX>NX037zG?V4==B< z*AXM|2^g4|5HUIVn$4kaQ0dTw*>+w{jgC42IHQ=6E92wlCs#OVu7hn=AK(T_fBvY& zJQVAV7My=&X~~-EQWX{#X*t;Y=m|q`P7WQw9>5pU@$n^s0YJMgn~Lk`ZZ`GFI*05l zLmdP$6_vb~mvC-wu7ws$<2vj{&bRJ8R!b-+yPaN>pw2SlLy zN{+vdLaf}}EWEs=a`78mTg$+k0eASQFD=?1t$uT2csN%ih@PH)a(CJYp=Gq-5d<^b z=LjMqeo!ESqw5?*&h>^7djm~lE-{Eu%VuA{&822oay8W=>tmbF4Fixy!O}fd>SZ=G7()RMltg0pnLIy;}*PCn`F?ZvrsClBm; zMh1l)v&32)6PB#8jBJ0dZTU&PUSAKZ3UAuV|E=WL>Ei70jC?F*>i!&}-xpgrB6)df+ zoVJh4JZBJo4^eN4wI6?}zR3hsR#n~lA8=&XC6Jed46-qw^YVfm{I>Nngq(tQYPX`;j4cGFyygzx#%_V24YNjtl5y0~|} zr`wY7#IUigr)*7-)0M~;pYz7kj_tChJ?beW823qe z#L=puuCBbZN1lzm{GB4D%tySuBPn?X&bL+)`hK%QSI=vyAZ7IWdW960q?`qbqAqgW zoili(8~J6mTrVA*Obmd9Fkyyg_0!}o4#->@^1=y?lfERd)y#@%KS3N_ac>580bGds zn>QN_JE%`e3H-W>aa%aGXC zwdt>z3XgrmOF`IW^o-jN#N1`!8M4#}9wC>&{M7rz@^rGay!A0;z|y@fR@SefV4%(` zxc&T-@i$4Bdu00JErF)wGqYn?(HzvVlv7%Ymp*WdKQS;c=;TPGq@*@n8&OX&58UDy z!y_W@Fv>j=70m$9a(ZS47YAoClDqYw#xo_u1lK7sCGo_I>$I|u^?Dia)UBhd4vq-) zuV}8=aoc)@q5ZaA2Z#%B|dcboq+u;>p+&6-a~Nw?Ck99Yv;$tUMeWyMMpws2kmZ{m{jzOafO;S`_0wzSx2C3J z*!2MH^YhnCET~1m_yk1yeuRGb;QbQYD0idy!~bt3Z-F z_m+Fu%^WVt*}gR184N6<*PqXF0V9WUa&i#rVj%WI6yv!@u%tunf)z+mS8>>ePUv`X zU{aHDu`!&V%4bF5bG`@HRf;=LX={-7AP8YPEje@lyP(&s_x<0+1k}YNmIOpX4$X7+ zvdLy3KF!70q~3zdz`#K3f+p_P3pBZSMty|pP9L9`39NSEkbs9hUVpmAyv~|zaNkm*{?pK7ZK#l8_ zB!Gsb%GcQ+^uhFYm)?E z1SGB)*w|I(15}DPp|M}EW%?`Ynp$!aDOio%tA(G{!S1$! zMIQ2^E@#=tu%||rirny4?DC1@R>S@9*g)~G& zZQY~zb*K)@-5P_5WFxb){UFEUE0&N{^qALvml!Cb{%yv_Wfm(mP*JP%XJWTkYotm3_ zLIbIttgwnsZ2%>2fDEF->90)BDeCusKD;5rKgXJm11YM>TweBP=>;PdmKiHiXwk-g`WkU?Z*J?ceDW)o!w_I)#hX2`M$3o|pT zABf0^h!v}m!r`&8g0%q8X$T0=c7#y-=XI{XA-m9Qya0(h69HUcqHlzx> zK!v_KXJlK4+;@~Mrw>(sV`39OpzN7C8bPt<``nQGaq>RHT}4Il#KC9Hheysi0r#FqWNSyZ`HCm8`A= z$|E|XP>#$PCIP+j+BX#zvDJ)%+J?C!?T}E{i28acEWiL^KycN#U6wEpA^k23)9umd;B0tIOiX-yd{5kWpf@0R zvg{yfeC@7(QC{{84HbR<90GjXOv&G4#PvS3EAJ>?-tZ}zXklGVh_lM9kG!~kgRytW z*wKI9dz+ID&~067=ATg{<1-t$;-l`NL=Oyr+Bqw0ii6|a#6Z`Al4X44#V-lI84AQ< zEc8l~tfkNQY>Zsjq%%uQ%?LvGHWR2X|7^ke61sPktGq6Id;L#5s^zu3VZ{3W;%i4P zc6N26Kq;{cVOm=Mi`B5or|p>u z3Fty84UY*upQ3D0PxLAi6A!+9iiwFCz?&*M@OJaq1-$@r4b{bCIBW zzn}0XFB=>x3FDM$=p03)%JupaigMJ zZTa!5Xm@&gx)e=nOe!@u(Gq89|W0x8;prRP#sAvmrzS73$u0J@>oj zH(CByR$jp7x6FNi#XK-Q*%%f*>SnMfv`pyvY=5Ayt6So4ID84L3*C5sz6JgHK4SU# z)%lpcd=ntwMvjhF`^E&YEw0NAnv#ufmMQ#a{BP9-cAV>T+UxUF^p(vGXysC#2t45d z+5!@B-qYQk18AJ{c^|@nuU|RrTQAK|FRF&bw@ul&@0xZ+nOq*NN)Dkb2=9q}@?7~S z>&yJN(|M(vSfBPszHF@d)yZZH)|36#>#{5V%|8WOP6eDX51wJQ5&9nlqvm=*PW14h zF?$r)MJM;?&5@!$U``PIZ{7=0=an!)X{5}pE@{Rf?1 z_y1Le=&OtQKV9(&9_n22x>0AW4vB78ZF&4B51)dsKFkFPiwmdALcVy1JyRM<6eOdD zY}()>oqudQChiRy%YPR%a^V7MP1Ep|QF&pW!O?r9Jo3?_|0$EqSvYj{UzMP9sYdgmY$^q)16R}YleEl#(_KK3?vdCX6(Y++2bK&&Z~IGP7FtdAeZqkHPe-J$7BtPin%pIV7VOG5s(CnG8ypfE z>N3M`(OF^~dc6 z&IZM)pZFM{(rl>9;aM3AI4;hBufPg!-}UtOZ^g%v-5|-Yc2QG{pE(54w*k-(AQK!$ z+#ZJwkJm4oR>C&!r%`W(DG#pAJ-Cdz|1oUJc4>+XibM6UU0GkIbj4Mf76cfYn1KXU zgM|+)b8;G*uxmXej!eS&eMv-|BNZ@b52Zl$8-}_z4>lNBhNr6u;ol_@S6A$S8MriC z*93kdB`L73-S{60FDM9&gB%ZqjErpEHORitM+Gs{wGP*nHF9YcxGLP`2784V+|Tk> z!+Jt>w?EDMy^G4dv?n>OBmU>336;Z^ZML-seZTz0a^6W$$gf!RWuc+;L*{tr3;dC% z$jJgjQ-NpMFCI~i!kVvo@k$g~`{DB%hQ2Pmw++CG-#%m$*!b?w$; z+{Fji=elI|=-33^vN1FtV`+r{SQKEd&IY1mzjGuwOUwprO}TdH1#@CzVt3h5@W^3! zOic2w`!i>oH?ha0kT7loKYr7k(zzFGRFl$|8Xv2y`AEJ{F}>@%NymKw+xx=8!uRp9 z@UhSVTDMNj;|34@oBQ+_dvHRaY`0uULjGDgT_Bphy!j|^`c}H}4FpxNG^2)7>mKSV zJ_WX*?iB`}$5}>(Dm?t~el(UlZLx;Lwx$UTb(bF#y1g!wkD5Q6BjOr?Sob-t*;)Ug zQQbFiiF)2%KV{o)Tl?i#B5Kq2dJ?U6W(#Ah(d`-Wnuk_@or-9$%UW5W*w`@0XWAHnkAwx#k~d?_!t_z{9zBI~i(h6;IY z{LZa6OvuXOYVaR?Tk!;N53plfF~Bz@C9Rr7JRBY#cGlD+^Wf4~c8vR|wM~K2KX)R& zZLxq6Ail#RvTLpddzx}_;R&M3jlA~6M#oA|0voHNKk?&_p@0Pg>_mm`H$NFVkdc^y zj8Cb^wB0~rUzi>fjfj%0#~2DHm`gs-nH`;6@nv{6`nPoc23?+-iSZ=s@YeV`e*C~8 zAYkVC(-5V#X#=*x_heW$0Fns=ge239tpFN2dMdvSIq>A_t9qcSyV>j5oQ41!gsXvc z!Rw?Qcst1HR=~jl$Q?ZQdIzC|hFb>E6GUA%R1%M=1t8ns83+^w=ahP}pISRQxpHE# z$H4^#iEweP*5hzJjTH}NF*f7{_CyJ9i;Y%!;u%>(eEIgR zASVYUQ;B74e7qO13&Ir@6SAZlI%d$y7kC@a=jcz~6zw2LcUa(l(jJ;Zj6$xD#S_Nx5 zAOZnPd*UrdNl8f~>iJ!n`7D;Vw>X|y^0Qd9}VEB_`X(eLj z>{$Sz>GZctRa?6#D>giQ>38l6AsT|9prHDrUUpCr?!Qb?d5#S>xBFL6tdqrhrfvAl zkN&OH=3*apF(_r1>+}NJS{#eoqxse#br3(xbaZF#&MDk4_1p;%(Wmfg>cZn=*@t6^ zgX_zLeMr{*Nks0II7qBglv+Nw8okxaYq;LuTB#S2S{DI@5!>&~9N~x}CX^L8&@r5i zi+&rb(+LWWR$RX_<6i&eCYM3Nq&kmoPw*bb2{bvjI8-epv>*%icg^3SWNQ(17Ml2a zEMgDy*^(1xU>M+(f5%64vGi?1T@xYf#DJYb`dLU~%;HYC^21IeWNVf7%sq;ftUB6H z5$-(^Bb(mJg;8>nPFip)Hhm-avJ(#@P_&ucmMQG=0eEiroyqnWgz$%Qm3grl(r@KC zuDa!3#V0|b53j_Yx$orUXN}kE=-rK*u)dsJxG4D5&FT~T-DGRs^s`|r zK?XSwVmb-=&P}3Z1pZ^CP$D{s2*$aWMRTuhM#QN&#>D^RIp9AJq zQqJon-qdf<>)dIM_>$WYA{*nrRYvAANRDnLki z`4W@6dA7fo-&>6b3Z!3yHRlX>KK(xwum3H0K|t|(^$c#zVLE4sOg&NFtDNhMtfgq^ zbEiPQzOu-ku!=sdJ+&_fr02WkpW*kTW!!C%aR5BotYu|K-h!xSwNTiw9Kt*ZZ-MBWJ+O;;k3nim#YCT9dntWWWOuk&}NIn;wk&a{m#OXL{ott_%Xj z*Lzr>Qn&jDPF(%RsG!eCw=eNC$&EG5^+Bhy|>s8@4Y)_N1 zXU$c|7-JR@VG4tVgM|AwkeYV2!j_YNgr~(iuHlm;U^+5ic6B;UH=g%{y6W^R>Cfmdc1U!o zC5qZJEg%Uo`7ENg{Cz?}if6VSNRYsALNszN$) zzQ3UC?cK*)uf}Nqc%S)xbpq`iNe?RiN64e*ZBfe&8(Es{fidrpSO@u8(QVceD3Kf z1mvrGWMqK+=me>zFp&Pdyu8E{8R70%u-C90WzB9mz6x~|vA4BR zfA+Eb$58T(zPEcP?aIM{BMR_8D0Cvst=XRu<{3i>=mvdZ2Fc_Wu!h`F6*m9!@$AgK zH`3_I2 z8XtB%DdBOF&!6L$AP`#^eq`hv7fc-=2pQgnWjVr$rgincLo>D*7+X(e1W_-m1yF`t zlTZHS3rWz^UxtK8`q;3#>y=UwfJ&wMGea!kwfhHuJKIN{Wxa;)e}4OEz|+v{X6P_|I{0!yjf_K50k=D zGD1QyXat@O)S3giO-OK89=UPqOa*v*}r56)RijU_x6$|M6BkAp3 zl8(Nj%&Jf_jxy%en8d|E%U;+DkMQ7;EZk>%mB!i#y+n|e|WX|r_mAN|F)#E|_DBD}*- zvsJb6uD+x{SC)qD<&{*dU+= zZ6eVv+v#9E>%VNmc>Gg_v|gM}VNeZ3W)7No7;3zFHMD*cex|ifw^}L#EtBkj?n8*X z7vFthd;bFv*&hye`j=FSMiH@8LSgIotT__%Ng4@AIdy`@uDXq{bh*0 zw2KybASES8ra%(;9Eh2~U_(Me96>vy$T2XZRJ29$ zUG|yuJ*B$)nlhoSf0m|h zYJYiIjUyQ=N+vj+6eBJx>yFSVHy0NZ1H;{eY}PoQ4UI=YRKtd;omgD*4#~%Iz*B9X z2w4avwSPN$xY$Dm9X8DtA()w6B5tMzqXXF&E`R3Ex(o@RT1dP>^jA^Lk)O|A2T)e;=}0LDnyaxp=9|4pHcZ za^mSmKAD&po|+13zyH42ob{us7S#YP1Clqiuq!q^3X1rt!Fvx*#7pkNu;xws*!kh} zQ>PNr6V30s3KyN&*cYStv;!^q*Op9nioe3B(iA`tbm^ejI{ip&0B5X#a)rcxtDlxv z_!FYsHD5pa)w8|uHjg-~^(kIAycZcNAuNG1B>H!DMG!E=N(u`3)zyh{88k9c_oZB1 zctM&1ftPy$?eOaL>lMKByiicc0hD*)mUG8l!EPrfCwyvwsLDzn0BJ$?0+4#>^t3Ke zgQr^kn#^52I^Xd)frj-DBBP={mzBkU?Kx8LzJrH?>~u$GuE!0c9a@zzhpI4x>C^s+6E(VtJjc&?1!V_b9)`AOvdB{|r#3vb zu0T2Wd%Y&t8}Pe0vMQh5`>`-h*;TpkIw{~F-WgH&skm0v3OFMTs<`TN&5T?{K*F#G zvms9^!jpT|Q+VV`f7qkbTz!Qc-3H8w8T2(|f)=AjyLX{MTzUF*3Q7Qp(O%Or47_!z zHuH#{DV;_8>y11>i4W?cSVWi&zo8W+{yZb2Fhyb$KGb3eXstvltf6qWBG;X*3rG4m zpJ~ciSa6yZ(eaOL?u_cz#U-Mxu0k@j?vzU(vsK+oqIPGH%>OhG7ES=Wljr)Z+BS1V zUqBEAM4e7(TJ?j;7ZacLxf9fe>HuIgCkaD@<>YIvz=AGuH zEW5w<(ZATa{f+kM1yM)Wt`D!KCaA!EK|A8N7ami2F(8D>xQY^HfSd{Rac^rs?(XHLS@5MMLZe@)hT2w%;vpNXM?G;d7eVKJrmYQ}8~fO(NBMp@U{9neGqAEDKh z;bN%WllT;OizFvY+6nol_a2}foWF@+IVz8j9{c7Aa>M=EDtAUX>6vDB$H*X8`)fRl zf~JRa)`LQs+14qw7h^;IQGX#(=&!!e{s68UTZa7xYqmcNAgY^0B+3A9!3|!>F&<=` z_PnD$prXdx{x*UE6qr;MDKZxNesH=V5}CG0NURKZ-?qpQvwOrPj#==odO&MPnjtZ0 z>qaPF0wMT4_#q2Dy-C*N@?{*IEfdcmmk$ygj7e2wVuP_RUW*Kj%n&CF=eC?K)p%a4 z^OxQA*pT-H31E9E+gv2)M<;)Ra+hN9oFrDm_TX}!m1LiQtPSk86pLQmSeodk)0;#Z z+EzoCs$a@V7`Yzi;JXC7Y^DbRV2V=I0o&Cyrd93QZ>(YZUHUEQda?W^k$!P$sVR_t zxBOq;0ac){vqV#&A3w^)tAyev!HISqQ55X)ZfTupfM1`J-gE8IW<009&0Ztld~O|L z$!2O$SV7D5$)#dSEBZgB{MU+#cYlwp)A}B?8xHYK)E<3}N-^y-u|1b~54ydBT!O$` z+FpADoNeSN{^zbk0hjv3beI!EQ1ojh?ef&?mSX=V3YCom8mm_t1)`Xv8Ca5;odU4q zaQwjxtb*49CmXHTuawa)Tpa9|mYNRI3tlglk=8p57AG2tFSMxAWP4@dv`GK;ff?}snc0DoW~(A3Bx|TG`BHbfOe9bZwXiD(&&BvY@#5ksu<-Rm z8K@JiDn2&+CMKI2*#>hqkmTMa6?t;Zm@YV5v?epi_cc{fO4s78{9JK39pDX!?`b&! z+)o9gP}+p5NnKjpOXwQj(op4d1>@bhAPJy!+50@D)(#P*T1}ljHfb+@vz6f|#=(&( zBQEYhEtn>ub^IO#6n|>?RJ~I^pU;`C*UvCwkQ6lBJ!@)gw6ub(aw{r6g6fg0%pG{o z^*)SS?C>Y4eekrf%i4u}MtLV-B`SGPhW?nL#yRv^5J!5>orw&j4*aVc0k!$I8llGH z9;~3?eOVb7NS077>=Tn!Pc*K4jeKtoe_1yb6c(1)Q93;iddcx9+qY&e()MMP+1CYO zsR|wS0;mBgjRa7)}_k`dR=yLf9@sje)g&HKJn`m(`|4H0UE zpH7gPJ)@(tcb#c{B%jc16b6NVVr6;~$f&~Cm!qt7qj1$w;*O4jbist)JL7oIFk+PG zT=}BsyBd~w&S18)_S!#x>GOBeSy3l&J=@mFi|pynr!`q*^SsgDIYHEA&Wje~&)hua z(c#Av*3ZXc+r1i^@I059fg1oC`{>C{v7OJGjT6Hyw(M%R5Sp{SPM^=5!J%<+o626T zQmQjvvF`w^e^UG%l?Wkqonm1K!o1GSGA(lfD4|yR#@?69=>mJClcX@>KF{8(8WdOE z#n19Sno+_`KD&%JFBgN*ziOLyn0OL;Cb&y zCf~GuFY2$qIJUjqc*aY=seT?gfx=foas3-Ht?a%D4q^r>OU8Z{UD-dj*>Sea+h?{nF0)LS^z`kyr}){j*OR1aCDw!U%(1RP6TbLz>C|B5QtC&>*aZaz zRQM3)Xo=p`rp@g=5)-LF0x7t22`fxfOg}N+nydoMx9aQH)Q`U8QN3s{!2aUd2S13x#yOhV0ZI4Tba;5Dat7)>^M`|7mU>< zGa=smv^E!cdA#lAa90n-`egL=35H8w9DuV6gy_eaz^bb9ggb8mQMTV(3G-UIOvO{W zaB=eTFu6(iiE@6hZ=ewGw&uO9vxJ)Dv2>DORGM9#tI?EOwde3{op=Nq9ahye=v=04 z!8#O{ys24NX>sv*YUebn`$K<&pGJnYW$9wLD{$6NBv!3%+r0*jJ%`D=; zLma|W*|CIZz!np%)#QJ+2F8nAnZ)#$R>GnbG+Ir z&S3rOmhflEjA}esU!l~{3@ueke#S$B1J=51w($?0&3&it3GpqA0 zuJ95d-Z_Rs7f0LaO^;M0z@IFPW0C- zU$rV_RS%Kc#XtxXosf`MEoTk%%1KGCef^wPI>ww?T^e7WJlpWxeRsRFWB=w2n}(&R zp<(6*pNaC9yPEMDbw)xuwcIvo%l$wE5S-eVg)IU~j0_&~sfs*Ub6L2 z&3FGIR%iBCN{QmZ-x%%@HV|~M+mBnlPoq9WUImeS+Q>!D4zCpbPPpO}v1vx$Jg-N$ zUOEpL9O^HLzmKnQS2R`LFDH3^9!NSNy{_8s4~$jX-_``?Hq?y^5V#$;Ex2Ad4lytYd|W+K*UG!lojmb;RnvTP zFpb2st5Te1nohYC(YE1{dK%vL@uM1}z%|b4)Cnp~`>D0SV|50Lebjcvy|Ssf&R_Ao z*@~y;nXcSA$FW9O55-5(;f-0i(~ubEebs2zcOI>T$cxSS2G@Ib!i00h-rS;sv?-i$NY(#63|Ki~h0K^8GUzzY;Qk=Ky^>`Y&!y9y}ZP z8~?nUYDRhGKS{}bG>unp3DT~oFu^woae|Xvgf!5AYZPneL=rQ2h#N#e_VWW>ah#gB z?+yamN%tZ_jH>c>NcDfo%UR@h^m}KTw$~KPjeh3m8M{T5 zan1q)scjo32Qn(y8;lUT#D{kC0s6_4t`+;X_f@jR*cIBvJ(+$1Mt#dDjP8jqWRY&D zM2ZUXEHuMb7H4&Itufe5tZq{MEjNb!^)pckMXTX2G;DM=6SS|omzoLvRA$0ySwpU1 zyJwx6vQ4Lq=GXSqa=XsgNYT84JZz@D`<JG+i4QUBzgAV1-d6lm4bq1~#m_|kv#U)X_KajwcJ9;%=p4b~oZ=Z-d05#l zi}Nex$B6LQ+5;$rk-M1~w(bo|sZ+DtLrpL$HjIz(4T`6f8J_3#x;Q+$+V0_W1FNb2 zDQy#qq7;1u%a{dWyk?&;8jrQDwtE~bE94p%XKYC~9U%Gs;%Nps> zO|^AM7yPs7X#bG9U0=xwEFj!Qc@p{2l-bIHIED63XGDU>>=OUaIi)f6wAWt}AB_+m zoVc^pUVnhP*VvG=^u`S{4F_dsNfP=P0iAW94KQ(3#Ego|6c-v%)&4T*4)~exUlXs{ ziGMw1{7SCD-og(bY^%3q<9%=_m_Z?&UsQBQ2lh_;@~{K&#atFvU#jj&ifCk(%Asv- zi6d)n9W{d|bl7vx2p-TWeJ4}t(!xiMQ39PC8+vxKNzij+S2xXc!;FlkRAgq}i4h*#1b!%!RJe=G-%HkB)t2c0cZ2DzYa5|CovQrqwHz{Jd1!z$MYUuWgW8ng#&mz2p^W*n?aCu7G^=hKSe6LK$~nwI1<;wA`mPwfO^2$#M~ykY zh49v*uw$bY);=oN>}&E&m;-YEdu0+ z>G9?*%jK0L^+*?7!J5d6?s1w2wHd;eG_LbEG^r>wq|5vzW8o_VWE_s-aQs-R>rv*?nqI; z(t(Q;z>5S25ODjNm*2(qv!GOhjxGhs52VWA}LGV27;OD^D4OBZS}}3R^ z(?kalpv=!Kr3Z~=Iy=-&OD@>xmr|xUB%n#0H2vObBNn^4zR%!3v0<}_EX&^UQ?VN zJq0C5N{weI&CKGLh543{)uaH} z)KIwnxp1*iHizJ`^(2>yh>mxUj80jv8|b%Jr;8yC*R8!q@@d>)0*Sd`1Q)hsX$4J&87>+c7FyYc=r|pkOyg# zMDpY!TgABIm%CQ$-RU;3@pEnF?J^rw->3!Npux0Lppf=2a}0*Q$(4I+@C5lH`&o51 z*8Hlo8rb2zL3G$He8Pgf)b}n3-{^5l(D5XP1-^ z0;PYn+Z23o>E3%f_rH85t3M?i>VZKQiJ()z;i>B=s&~*tgG=c?(BB&Y`83SCwD}yj z(hTbVF0<1TXMf>QL5A)9X)bg==dC+eL=~)X-apKklu&Aqdjz@5GoNPZHg?RB(dnDb!!4BLAwQI@g``dF&*zeiG zpxpfKn3uLf7~!ss1932F+)o*{7jkz_Ua3I-lr7p=u&&zv(6*gMCKQIKp|vVUXf8z$ z!id$0+(`-}dW9I;f}cN=aXoV%ynj<+kcoW2;kuZ_I8gn!MraN9?Gb@!k?Zqah<+|2Sh9TrjbaY~Pl;v)ykas0-#0Gs?Ln2r^b zBLrRHg9p7#ab%S2#{5U(!@-;P`9pj%*XCN(R8;u>LfwUVqnz7;rlIt3oLtbtl7{f@ zU+dJd*@{hbg-jDj>EU#JER?!0U!7iAJv3!r7T7MSIhl1?2fyfG^fbL5+?@&Afozoq#pD&zLJ3>W4}a{OEOqUi zoQOabVv;8r@M<%vz)u1XI%I;K%iT}SMPLjrzc9-aIYq6|h~>-jIvfR*Gf42Y?Z*(2 zQV}ZoiTae4-fr+JlLQBiH_FbFn5AP=r5Cbe?oIk#60en8SXdCMG8dVd~n^)}r5$y{8K z*TCj@#HCk@^jgd*%J6Dlq>&?hr@;`I0T=p0rTlt0e$|@RaVnd4uhM>mm#iXeboKDF z5mn#-E%I$|S0b)fyd4<*s95uhyLlZ%0cVj^Z0tP2!8cgp^zH^9L_Nf-Hj4Yl82!V! zdUwyBwDa|(P;3vqwxqLviqVZdI z$GFILEkJ*0$|cy4%9MHC>N~}dUQc)$rW_}Tf#L>O##*u-m*}S+_ktqQ84yzX#9Mrm zrDlH=#3V!B#B>KmFEZtnvYzrJ&_bDX8Nl}qA5p8koyn6fq6}(;JK9tU)xO?I0Y}+! ze_}b``cr401?1Z#I6m*Fnm_}IZxkJB+e3Wtxg*I0s#3NXQ4S~{I>_UJ-jd1E+zp&m&uLjN+SFQ%V-X&bGY%d+DwqqySlMO z%tYr=g#~8hn#I?xCmN;sY#xoshuhN%TOxYM4)Dh}d9t!Nh-Ec(+^MZ=SQn*cS* z_g#n~uW!bK)Ke7ivjfQc3Ty$C{}AFJy}^8*f7-2Oh(ij0{gZz_)QC3nv`*h3?9hVW zFexRxGl3UEhZ&o``Z$m{+{XXoKSOGJ_)MW4UD;;wBNZMKo7!dMpW8FIOX)0fP6lv) z9m!Z~(f&I6F+vlDT~9BYZRju8{qHA7|3}Fs#Xl% z7yK$ovRTP#_3IS?wC_uf8OY1K##%pqyi9Q?=Uu+atP2bV3d?ABCV@+mY>=a7x~{IS zRyUe+TTXpW=T|s#)AR0Kku_a)93Iu*K5!ts$EB8k*LeFr92JIiOMS-#eGI+5J5^wv zDAP6ylP*uq>Cl*~8!%rkQc!eY!;Z<&h_p{*G78|HxAt07jqF=sdh?P=+nRC)FDcN( zS|=C%1BX$*R@b_ACarADd@BVU$`V7uS8iv1BphW5Ugj3YaeSBW-%NQvLZF)WZ|mJw zcs*$|4G@{c(cjDMIPO}<0-nET2|ObUE~N;ZeX{kiH|cr`0?bPFs(@$C`%ZHZk64!K#1 zfAI*Gh60ag6wn7+Z>kL7Ny5|b#yCr_&by_Hi5ndY2(k1zBlTyGHmtT>ji1MKQ!NW3 zS|;$pBC8k@0w$IhU`CTrqa1wu@8;X#jFb}1wCX)yn4K6ELq;G<{b_cT_aCNsHW%m? zJB=S1B^;Gmx6RR5B5=dD7Gw@!==<@rY~ld{4rn6J!GfiIY!&a;i^W7D(D4*4oKN|@ z{&7CD(1drpQmsRG+9Yx7N6KGq4V`e5jLAzx&OI;-iLtSv($5}+F#N~Qs93n3O=6F@ zWGh-63ENdegR{>r|4uYLXN*v`@z>9$WcymU?AQPH5p`5$t1lP=qi>o{OxU%C&Cuk6 z8T^V>c!Srd$Man_4hQ2oie9m7vMbB=RkjkA#||x6rR-A}Fzk9(ytUkr$XXCGT`sw- z{d@kiKKQGt9uX;j?JrS&biR+_0L#$ayQ6&ydCyutTMc}#`wYbu$%Y<6F$nlnH%+We+ZB~kWX`^BW|ODwpvqTpZ7<{4{!2}==r4o)EAO=d-32c<5o zisSA-WNPz&w9II0l4m9SS|tFa$FT1qUd6vN$0i%8-HIQREa#WXzCfh1K_BMr>r}M8 z2tnM(`ddEG7k8a{d1%S#n}~2r9-m5*F1ZjCxQxuC75;ah zJA(L0fa=g_f+LAN*On>8`fxOl>*1ZU$pQ!X(;FMo6Be`;+?Bi2$%w9sr}_PZeFIy^ z*xxlB7fWlss$`)WSLJ7t+BK)_PxdtVY^=IBzt2Ki@ljSu0acuo3t$Gr&)+k@ctKNW z_+JcFX^(XCzI!zCFe&tn@Z)=~n_e`_R|UmQ)0Plr>(+5b^>M{^qlB7~h*+=s445g?mn6Ph)jUM9H<*?|b|2#m43D~>Dyiq(o;&m3wz1O zoW}^DX)<}_lAg!++dl~QClytrk2ROaRQJBW_Y6-@{b7C`HBW*LHnW?}qX}Tt2d%5} zWW|u0XY!n&n%`Y!c1VjtLB|QaNZ3>h^N`x6xgH}ptB?E2o!_@w8(AGJB(>(YRLJ2~ zVu{#GX#~Bo_@`+_C#$GnM&HW6dN#eBq{7Zb{hx)E*zm3kUD;#fu7zr}o))$fpCYQ< z2bWh~nXqr?au8dOF`ADrwi&13OO=rR`7=QuWfn1P)Ga90dww-l&8?2NpP2i4=qG>K z*2>k4d;h%n!Ik9NRmmy-@!xxiwKUv~`ulP(Qpw5|6s9nAi{WUn$S-iCo8GCnE%qcZ zx2Cn>m~It=nI(7h4EH$<#I%5ea9-;_qlBskzJQ^i^b=&bDaP|A`aKR-LV-Qv&qGtj z@aBZ1UqsdfQB=AgH}jwrQc4glVksZIxD6A?S#Fx0TlPrmGp&bn&Xp;@wUZMQix44Q z9$MhC0I0wD*x9uRFs3h_z!-RW4eaZtYxw!|Li+d5-en14br~n$omyy_$!XR&XubRR zDPKp&gBp~KI}*uSDwD~dYo4U=;7&zxLw8tMBsslM(`h}FwprjI|J?4Ab)aMU=V+6t z`o*Cf;Bj0A53!2r^4QEJ@Gh%O^N8V9RS7CO?pi_FKYy;*vwIMS-vWU^1Ym5$dW32O zMI{$M+NZMdzE@SXk037dMJ*ydr;hf|*K6#xm-_7vzNqKr+d^p6u!e z3E!=|QNP5uz)p>y$JJHuX{{@SL>z|le#Lj)BL zy;UZ*n@yEAmf96U04lfY?9%}eHCQCZEb=eN0|z#6K75e>Uvw)K!hq#p=rBc)M0v#c zw$b0>(gS)Aishq$z)p*z)&aYwEP{1Bf;}|US%&vLTKnJ4K5_=i&Fm(g+UU2A?*0D_)tQFlPbIXa z(ocsht*(iP-*kW8?O47iiiP$jBO;=AHNd@i>ixl{krbO%wN{~?tS=EGqE_^q}j$NAVT z-(4erydhLneWGHRyg)wAbs9~|pbmYexlc2efJ-rK*v-E+PJuOoNKmwCWCRDsbj#>W z!{YwA&pKW~R+iEDO*90utW4u$jfmHX*A-k+R4U(LFi#<}dlq1Qa!k^}wRrIl=K4%7gYa7cRNXY?Ap+3Kv)@@Ss1c$42>D>H4X99t{Dv4r2l!W~#=ycQY#W2{PxqN^fOJ%SLfoTQ_FDy`C-Zo6BkjBq7#F@ZwAWM7CTCOoaA|%o_z+r(pwG8 zwo6{|T%)GN4{Db`F+ZF#V5anP2$6=m+Q}DY+XDi7&!Px1ZvQ+AWg>W_U?vqDG$VX3 ze)FkSeJruZGpn12$Z+MRep>;@fKrpDuM9$yt~ zS8j$ew;eCe>$CjU`hPd`sUjYjc}bV8(~e5BooT?a3<#Vb&-DwHbMiRlc3;F^VOQNV z@rsV^YdpyGGH|rTTi-3Lnr-a$7I=pqN|A|qAnA|vCbLg#yjDsME~5a%=r2_GY`KSkn;v(TjzTB2M$AqpT| z3urZg9-;_}a%sJ5P$By%TvFAj^TArGLZ|W()+ZT))#YJi9qeZWAw9Gh%ZcBxpAtsD zj_!_?U5`G#HgQy>BeqTKd#!jDkC&FX^Z-T_fZ2tGqc zZFrN*{Pq!^T`hqxb*JLNL9*K8!I>|Q z*V>YFOFA#7k_$UIEl{Ko)SZwb>|}^aly6V&R-Y91eBTS(zSvohan5VM!O_U*34aQ1 z!FX`HF;cVqk@;vHG+DSX(3f^@=vcSI;P8EN`;9IqH}_EsIu#BU83w9M)u|49@v`~+AJ=PS($dGHv0RXyZRhj2&r{OpbeQGWTkIHix8@GYJ8?hvsa)h z(&YAj^fL@>BBsb94Mr6e6`APY^&ZEoHBK8nFsF@y*p2=qdiiKcb@hiD1+n+AiQeTB zcICXYwx)ji)GvXBU~R*-9c{xjN;$m zc6b-36lG*E1kOC12B9`PdGH4q#n#IX*E34t6-*WN8abwTr+kv|9QpWKorl$ITIRK= z$l%)e7|o?~i>B;i&KtsCyH|z%(D+y|eYtJt7?5r*Iz{#%2OBVpLi}wFDfIXl|2hPR z(|pcoBkL=j%Vkn)8uWIV7~*DIL8~Ln*@j-z1@1LuOf`@HI^h%j*9B0KTZ~p9_>hmn zb>;6+GX5UlbMfB{RMn`yER6o(2L9tdQ1@Q-!7!0vT4ONS6PT=|nEKrp(A^IHVgVSw z|G67-OS%~9zfbLFH1q`d$v+Qrx5LYK_(+j=Pxa5q1}H5 zBmDQZ1JDRynE!c&|9UwH-2MM@y`>dfq<@{BX?4yaaPGrmrjQqnTh}vu484#8Xi%)D zzu)CA)rn`lxa2 ziVru{Z{ol%9S(&CWSJT7J>jVuZJhXhl2{ENZCZgn4de1g=`d z-+n|%vq4%~XdlGcQj8oSfE(?W`~L19Wxw2|s;)v@4%&It=~lswHj?DmlJd+Tc0pUt z-Z+u|A3PJX(-EfKB@H)%#61J{OJAAijt^!N-(wG4v0jcJZ^6e)1cew*h~bN|ElUVK zx4EY!-y%_)&A;MFXQ2#Ndp-~zGZf0pt+^LclH%|vtnYp)($6F1s9C%44=oEhc)bt$ z*Jvd1EY>of9j*Kcq9T&Ad_!BE4TUa;_>XS6T4_ILq@z($b?^)DDNWo)<*UADUlDke z$-$|RED82xEx9hpJ!yE@TTU6X5-3Gre;{xC^;N-p%8JpwM;{T`2+adYgqt?(q*Da0 z!c7|XI=J|$b(DnCiZks%q3NBZuf~UsQw(d!rn1{gVUI3Z)1;%DGodXX*&}w-Lj#cH-jV zU%q^4e#dFdp76~fK!5ZK8?kTt^P-7;hDV@dczW8kQHo+&@DZtaa|^3wB5%<4_G@30 zk7Jj5_6UsSbFpE=zhf}L73cwG^Rg86Qi7g4cgi7O`0&2P`*E0+1twY*d|u^MD}7=w z-zIUdq!ZulKy@S)@!-eblDLnEt%WgkQcu$hHxqReHmeU0>#gp#tsbjJwIc)-d((j1HrL8ZDB}v9aTtaORPm{;qM8r@KRDB`%QNc5KOvoPS{x<#i@gDw`$yg>s~(cZDz%{Xor}dzvVpZ)y8?Xxxu|JFC8f zPOMOuX4~tZ5qYrCzyA%%F`4yd5jutMm%%oRsu!Y@zcw`pOf)XmU67oyK#2(=+LGSh zgR3u@RVLL3O&C)%Dk@@9W*3$h+MCqg+m{J4gc%ZkLuB@ilxTxys4dGItnuiL^o%LlDS9mJ$uUQ-=>s2}k_wdSBC72fnN zf;&!>ek&NChrKAVeWCh2Aug7QqfG*>2=sWwzW&wELg#}-Iz?o1>JL5r#kn=@ z4x=0zYNJz}TTJNfu>Z~m35 zsqA4Zmgc|-ZYX_}TLq?EZqNA&uCEua)9--i8kT?J~@D{b5}qYJ<(?XrkfSpFR(hM;l>pehfU72)I}a&O=Hllv3?1d!oRE zxW`{|3h=_{I4n-1#Er=d<=~jh*`vt%hsEht$`s_CMVs?P{Mr7B_ptQy`M!P`eq4@3nLC5E|TXu?D=)eFyA+d6_NDQ{ecTf>C?PN52DrQW6TVFXP!^+ zL*O*y;lk-?BIPDGDlbf*SCMvMAezb$0vj;Pd4xm}fAjIpVh&Pd(UOB=V|5TV#HS#> zCIH)F@*N?VU@utEq7TR#EeUn+Et51}TdX;VA5HeQdr;+XSfkq~EKxI2<==_KyEqhF zGfym1qS03r{(W(7W_`-`e9c>eap@gIA1s8%K7Xn?tW!bJYd{zo!?Z|_(vhEs*2M-D@%h(1N*2tQ?uI%tNu+%22zpmoO|1+2f+c7&+` zx`1c#@R&Euxp=Fh_uY-@)2wGaUI|pu7KM$f_nn78gef?F^7f5t&$<;9)YdK~bjC+7 z8L#oipp4fyZZj2SOjp(2u8QEkQK2tXpC)_Zv{A_9i6D$B&7ya5B+h2CVZIJNi z=qyy#DUaKORRs;(-}Wz6AN#~Am5cN?G(+egUd-HvJqCDm=qkM^tYM? zDaJ$L@Oc8bi2Dt+HESmaf??X>0=6Wx`6l(l@GQp9GDBJN1&51fUjyXK&HdydeVsS? z;U|iSbiYpXKGQ4o`@SZqQ`(5wz+kir_&iD4H_7%Xbq&fFkm@ADs}t8tHPL|q{UvhVahn(K}L=Cx^Xp^5wQCqudLdKiV5 z(&RCf2zjTbba<^QP5j7=a(BPTuOJjdDwD0p6!uYGls-~dD^!NDh&U%S61zSho?myt zk$>^V6rw;G%5VztEPB+)?^v<&%_Om+i~q9=UmlX(9?7<6&2{kJ)gou+y>}`lhi%sg zDp>bqSnHs->TR;d$^Jm>jiJZO;<~jRRvoezZz#|M5R43ih<8}`mjNP-)WcUf;u)6E(y7u(iw z5?la$EmG!=)V?vG_U65*mMLlwwTaes2UM_OErrqa0cY@j}`RiMZsdkEhb^h|K- zq;RyZi^*^6WGHX8`t7cIL7H) z@bGZ&=xGcxtF?4a7MLylGid#j6P2$p#kddBmez^dtl$-<_NQM4Y~| zFh-)i9mkQ8M++qU1lBsFuw@)-HR+~`UgoC_<7|heN`{5UZ!u( z=)#o%?9$Ep9ze^8)J+5nbHM#@ML;rL7X)H@fa+J7hrkW4n+oN2hwS%FxRiJyo$b{w z@;prgyou}0*;E1;i1jOwMA=$T}wlV6d5}rjoG?YzZi`-nLCqZa9D}(^`hfcW5B9g z9~x}y8a!10KeMVmTv-RNRHHk(;AomGgtsC-A-ob1b%HQ|s5s@xrBAR32Hkxe+E5s!>R7StD|7J0uMtaI!>khL9F+R z5d%Tx4KIoLq|f#=s8cu4S$hwk@^N!PBQaO}#dfHZ_T0zKWv0SCCI^IKcJ-CLXwge<2?#eY5MP!Wh`o2EWBYDTpL)8N z$S+rXzMI|w_h3X_1%|lY=&MPY4 zmcNKKDT}e;ey|A14@LnCZblMm(827wBrnPcg`oiM_&a|He{X_>_YrC9K#c6ob54h$ zP*`4E>`_K#n1%N|GN<;a+Um01ePOOrlN5kH*DT;rl zfOvPBx}7e}yu3RQ#mDmx^|OSlvm{k-NgDK<6C3VJ2tSEar~FMi5!j8nuy+eS?kb+qHiIGSa2Gg^lyzpzzIhou(eT;+lf{`&OI5@MY=zd6hCf{v} zc5p33_OL$osJB|0t@o}fN)8~4TyEqZSu%+!1rBd)zg7^Xf z@uP-zLvIhrTH8a2*|<1I%p1St^#6E%Tep&PEZ#BP5&>?kw3GmXAOrVh=o3q=8F==F z{zyx|1!u3V{Jhn;I3i>el>EX%$+-H1ks5jNf7xFFNY#C?f0hwQ-O*{c^k83XaCT&uNi#m}G6ad4<9zJ^|B zS5!RIj*FrR!hAqyf3PIBFl^L0nQ&FB(<&kH@-fclspqr6Pb#iwdT{0<|{M-zGf{{7hGc&+Z7 z@W!3S4!lqHx!=5Pb~XzAJW%9D>=qiv!^5M0@dB%EK0G1<&#vJ#?q)~=&$5HKY;<&u zzadqn&NYhaQ9FtTBMAw~4>+Dykq!E*-5IH310`3_+QLdjd+@7XZj!I^(%#XLnCx{O zM}T38ySN&^VX#P{w=CRr($+=b@-vxx`A_BfiJ4QX9bnFHYt$4MhXa!xiodz>c64;C zt+-82CZ~jM9QGQ{4IG`ErfXda1T6;0`#15z72)%4i~UojCYDxK#uJ6wH-D8NLO31` zJ$?CyYgc4sWL}>e-q~uqc>PDHH5FLNgg0ZH)hC|bU@m}z#{`gn@AMg@s~|TND)W z$6QtqD_>D_jgMPJj;b$;zMf-vmX*b;>6)6E`HUNWyPtT;Hg|E}Brhc;mCPuhWa|8o z%^~aE4?9>om?f(p1^Ha0B;Xu=NKb9!s`g31RbXXI4+sdLmSX)nUdPohSI}g!zNDn2 zQT6QjaXhnbE{UPc_Sx0olosVr9gjAvHKc-AsH5Y|Gj(Fhw9?gsg3poWE1kkKPRCg*qllAB96kSc_Yfp9xRlv@mrjE()ykO%}!xVP76lCxSFXc}9p zlaM!tu_WnrE}!K;c#E#=uCy!g%uAY>P`lQp0OYXYCMzl`(t~bKH&1Mpy0#Mp;{jrUtsOjhY?4~V6=Go?&nMIl5gT3Ry3#?M?_Ttdls z!nMoI*>(qT6x{sT+1Xbu-OOKFPcU_akxA?8Qv?MCJtQJ>Emcs^ORkgJ<*2-HN9uC74Arsi@zDS^)^w{{;y`@N+_1e}MMMQDZQ)6(=)94&8F|+e zG5~ui(2)jsU!kD7q>rAUnm+S4?4PqUmq)#yvA1`C+y-YeeS|=7RJplAl^$EBv-_a=XUmkED*SZcu1wc5SWBhttzjv)h({AqSs@ zg@!)2lFbity1Hau=X>{*1w7l^+tt<8f$^JvHN?j7*v&YmPIAXBGb^i9_dTa}60hsd zZ~f-!qjcbq_8%GA=?gayqWY!B@1+9-gt%Tz=7(Ice7USA?6-@m4Mq@?h1w|T zsUiS&s=MbWfsA9c&_sIqLPwwlx;ybbZ=qP3I1qm;`C7ChhDL0EtI;YPY4(`@iS z^W`(xmh;Rdl5?(p)dMQ35;*>h4L1OpE&$hTN&V_?-qdKf!gCrLDD3R)aL`b?ySwkM zAFPt~YI$WPAT2GeuH6ZHfX%S35-cP-g?lipkn*@LW@d$pYxJcYr`LkkybEuhKYzXq zknnYyFomI^Vf02G{uAP%m}q}DRYGB5VKCAF4i8RG+l^k@?@Y0|h0I%^f_fnQ_Imui z*<~O|5+K`OTwSSZYfrCnT%SYx7Dwvu@B2wfN-7%~F4A6JF9%Y^Q9pYIiVNvjDqa3P;?y5-lun_g^FO z)$$s@BCNw0FGbW3?il(wgTo{*3|n`|Rx<*m%ugVkW^Du6*m_?=VP2Hn;Ap6hVHDFe^XOa z7KXT}eI)6Vch50&?l{(nM}F<|dsKbvsWrawWy7LtYw?D0%_=u{HPYy4LY(~k(8p~4 z0O*|gDTqQoRY6tU#>U1MTLmSxbNFcdgM!DQKYCN#7M@E>NfD5c$XZ%H2g5oxF%g}Z zDCgn=62SP*Or<#ovVOJ3l4vkedCrZ`Y1ud-C$ z9}m1v;g8j?bFGmrYs{-dOpc93UR`QEdzM(LQ`CxpJ|Rp>wSKMi?e37=<|k!4QGkri z$;0Djc|7oI1~D&;!a1y`=uz!d!H>cT000XcJK^P9WJBnd>kd`HQlh$9LQfX-h#tbHKhfhTwYEN3l4|NMAJdnu+9LXjlpYHlBK?UwPZdQEVU0pySvct z@Ak0l!q)*Fstn?q^Xl)S1eK9tnKf}6B84;Ea&RM z{tTTB^?Ipse^o)W+54P`OGu!AxSI1m?%#W`CE&=smgIH)et&_|=j7sH1)Nb?U%yC0 zJV23**D2?ENt8K>`NmKe-ekAf2(j$i_ryG3>_y~}BM9Ez5T|EkEPGueDyMGc+<)WX zC%>J&B;qx^bIZiZlJuB0n!Y9^Jnw98e=17|iu1D3W0m1xg4{hkmiPCS%*}J_&3faI z4g-9O7)17HX=#7E(A0*Las{`xibsF_I{#d!sT|PcosEr%>ABXl1#d{Lp>a^?y54(h zOco|>xfxD4tRu+`&5!)fSEH|iUy)txawrv4eG}PlG8GYl6#9Mm)YR14R=dAm?vxMK z?vwyLsG7B10r+hj-N$to8;NWtpLh267gwhIP|yz!NqD76WNyO=alZCE}5|&b>j%=27PP3mXx9&xg>kYKn z_~B>}f;+ifUmULN%vLMG=l6Xk*94al`j?GxMAG8T=kBlc9IiWBE{lfnBjU?CG%*%C zhnx;8E7GK2x)w&6HROooU42xg!P_Rs);gDBqF!2PYS(oJ1dUEnS6L_^<nA)EkPJ$`>7(5rVZ4JoOvhN?&B z=3ayF(V@6ezSzu)$hJuPP}QsOes8X3k8ndEDkYVLk>VgG+?RgP$_(@8j8)EaK9a0q z8Gt^XDAhVezdJk6FIaLeKnCeSPO5~mGiGx$+lJ>&}MG$(Gy58RPR=vKh;&DqD z+>h#rolzxIDN!*IZt3?Bi`8~enxMy#X*0n^C@B|~uQb(%hrVHCJXnY()WuE&F_Ttv zR)la5$dhA^e*i5sJ6i1qBfl?jPpsGwdE=f=>c5)_IP08-SgWKftN&7QDrXIoKe5+y zPwM~7)C+Qy^K^;Xy7|D@hK7c5Ik!dc=`l`K1D@b zZEbD+MrdUyL*ip#AONAqI1Ci^&CSgQv)1>H0Po&E_2+Fy}U0f`yr8E03Z2m%xJ+ISoO|bv`WihW3&<};=JPFW{;at`6!^II%#UwA+n?=d z*Eclqfjo{mne%eJL%n0}ThF8+6xMG}Eh0h{u!!##GQ+xgB8(H^NK=0g6`de0rf;bE z3E@}i0{O>vvK9wl= zFocL%RT?E}i;UOMm57-ILK)gVtw+GGM-sWLvkwmJV-VI8g;5I-;)86-WSy>Ld?bj> z!2}NJ1t3&nqNAU!Emve)dJmH0DVa7Zc6yuD%w7!K#(RCS2Knr-Vy&6EdC$Va0-z%& zo*?s2*&Z0ufEGgeW;tVu3E#Vy(4Sb`E@lH#+ihTA z5E`nqHL@H=LNZu0@+>hiajNk{9o;GV_pPpLEF7$i4z2mM%KS#ZA3x;!(L|TN-P67q z!tyx$(_Tg+YjrOMq*ojXaZy*V3Ra-pi#&uVM<5Gt16r6XMBsWe}1LycguSg-`nseG5f1}9(bF(>C8mJ%4hD^ z;f6pP%x<+*qiTQb7?^YlG%}aCDUT}Sma1$1x zrImUBH&j-BqLjoP2J|5pdUhQmJ}%Dj@X+qt&6Z2Db4bjjB2WaUtlwljUVOYFeyyzM z-A;nJj98pU#QI8ml%R^Y$ICGOBGp@%RrgN^B@vC+GMU+bkW2Yd)|xNbSD;5CB9SWo zNq6Hu8P+H^kLXYMnuzQD(Aks99|eUE1fyumeajzqPo4?JTy?zSk=r1hXslG#sdyJv zIQsYEb{|??OSBL6ZDGyHdIEGi-zeTy)B z!9ZSKp6kulh0d>-1)wp@jy(~3CEs3WBPA7Tth=F#$O&lA%O@Ri7IT05%d6xBFF_Td zS4!P^8xj-q@Gr=exG7W!G~v@7$04=c*HOY(o75ganZalpjWT~hzrI~vd5(;XOf^AG z2MGCtlv}FKJ|zPKNUoH6Z^qfiWxUlI4y$$ z`}Nd7cMlJZeO$dKQ${^06&+Qdo{=B){X2t#(7hW+2D2wAHOfBW(9H@JXedH}#PG!`*H(Z)A~~9BlB3SL0*`{4T{jliiuhKUdhOq^nj1&K{mztQIV>1?q%^nG3%FEkWvJ z*IYwmISAWL>UIP7L+u; zxIqZm(;}do!%nZ;xpNQPNL}P7_NZb5vj82KX3C{GaqcWY9GRG;i@o`}99sFfuAZ>^ z{QMwbXll=8mHh3u9dLCiut#n&!-peo9dZzLTr1w<#?L@|%tyS_4gBzQnLcFT0vEA) zo!RgS3#Ud#-nGKyRht__$IkrLNva&%}9#R|6)pB7!0ii_7a5HqEz4a`I=U5T@uEFwEmm`m$qez*c8*u0SP#>A;b+Y4KuXXfMvY$z9R+Kf!&$tG zA3MV-viY&i(r6WT!h;!A@9Gt4xiX_*_I&xyFU^GwOIVWbto=PJi`D! zGBDleBs@K9>!j|w5UZb<|3CCJ-uch}m!`%?ye)2->FJ_qpw+a^sxlgAQ~kdj{*BZi zvM2sJ1IY;kYX9Tyy?@<8F){(HCg_?_FsXWV2=vh|0N%iC0!uKYlj-tGyCLlKhfhXutVaj&dJ5aH?f0-h{+x zes-`mYr{P~U#1^aUoXh_;zclsCD0A`Yqx6l?gs-C^C>rX91uX20Sjd3X2R=-{IyBF z(}2k;Y3$6+!vV9Al#ijM9xn@Pv_PE|Fv?!m!*$GseLe`v4Q`?Zf1##8ofPN zO9cCI98j93rZlk8T!j^2H6)8b211&BzyG6#auObslr*~!WrI7R1Qs6*7}{A?RdGQN z=zmaD1fb*fynXwYH|^`UZw!3UfGIl=v40O!YPYtmwEt$m@I*yN?**>X61+WW==$S` zF$72Rz0?&k9!(~JU0mx2wrg}=RUVTFd-DSCg)*mL1PT3aP{({bP1%u#rl!8M8@JeS zpV#6PXJ(3n^a6bKGRg~=4Ww=|-)0aa@n4sS5?Lk^RR!0Rx4U=@+`-}Ddv8O) zY)uai;x!m385unhjrZLw9~4G`((CKzR^pxkv8oGB2S^YHKnNlxt@NI1hm}_zvsLeb zLIGkO{Bg`MeeHkO4c#LucIVyy7wdk^?_+-wkF_G?yK}O`f&~9D_a<@dSjQnxe`Iu2 z|1=Nu(>7<>%fd`6b+YO>oa=&z^M+4xV2;k-_u<^TtLRmdx)G+|?!Xx3RC&wELRwL^uNn^9IYXDFe1? zI~8!cN&%}#Osbi>pwhB&={hr^e1tRSvGJiSei9#)TU64m;j$)KS=4DUG0w6cj4z-U ztHAeHR#%slm&XQ%L?OCQScGC=ztx*TY#iJ}hKB2aYj&!yWZMc`RmK4>&@~FM(Lm`Y zIyxFC0_761NO2XFD4g$p_`JwezImxv4|aEnrz^LGB7Uyv+BMLo@j4&_8B$%%v(gy> z>K?CzC@CoimfHeLXLm0yF6^O|FrFh|_>$+0nherAfxrp_qaAKX{CW(IV58 zy7P*PitGKYJmb4I)>Xa5O?Um(Ek^CM@=F6L0(p&wRXgW0(Ikjws2eqqNYyYNXV6qfR<3o0-iUSlROejrZ+k0 z2hl6f8NI@)Ct4-k9)AhZ{Y(>UT)LZ=;~+vLf1Cpk)y2SU3W+@EE}VuHF~?9;zeY-jk>y_;S8 zs4*!0_q;c^HV@KE$5r4-8#6F4EPd6l zy9CviX%F+)A*QCLU9gOd46CHT)G7jiabk#(eWanxG~uV3nr|M&bA}#81FLWs`Y35S zI%1!ARci_&`2yWc&04P=f^TH~rbAWHP?uW$DZ^*cCO-nKjMXn+Fnn1&=u&0C63Nfc zhmrHz`~LndX*sNv7I}J=vBg(*!!whUvFSWqe}lE@{I)`#^=WUvC_BvaR+;Gb1oQ4h zl+z>^qq+*;`rB=$D=vPlLDuiyEx8SrWE_d#LDF?L(`&qk82YEZa=@3g9%{H>)>m}8 z$Q#ukKhMq1mPt6C?D6pl(iEP)?+w_*5rFpuPD{cx2oCXG8(h8?ific9R{@=jY(h-!j92}!zs^=6*BRt(6t4NX3l(Dg~0Q0zUr@IiimxgyWq{@+CP*l1U z9EsZ47?=#j8~Z&zEFZW4cjVzSE=5nf1_xl#iTD308$fq; zgWr=8pf)m)CZYti1hA@U->W2AB_$4872lZMC8-O86Khz-W}Z^l^4pAxsw!15F?u5} zS-9coKA+t&kVzF+s5sF?Bm|kSNPg3KOKGb-@)Ps>82G8|?wDT6-fRHY`s^!udd*+I zmy}olS-85f@qm(2@dNas;fIK*ZW89S500!S1}k6c_iynR5!WrAWyq|Tm^Aqhr{P3! zi3YaE;_A0Tz>**;D}&=jwLQapyfuiA$k4N~>@ctVv$m`B&Yn6_T3!f$$5!^5iuQu- z@zKl2>6PuoNtIG51RR?#H|y1Qs`_vGJE=NG+a91XX zl3p4UoxvCtlj@Z|2 z@dL5%pFhSgUc7io8m9h13sZD1NM(<(bTKGA9O|&G95#Lb2UzOhO&(+JBtONZyQ2z5 z%Z%a8ZR*X@LE~SESONd8HXq6F==? z20AVkO;S4?$rj(ipAQ2DGDJk>%PHQ`Ny5qUl++0xUQsvd;KgoaS$@~u!oU@PjxupR z4-9$`7BPn__EZkQCEMqe>UODZMx?}_-CzVAWbGtjdEY+xzWv2QBH;LE!ZF4{V6$&V zJfaopi$tEP&AKWM+V=vt)xC==bjQ*|UbZaq@?>rnWZWcuW?gP(4GTXV-4}k;6@@i6HUdr;P9d;vTY4SZ zobR`@xL8AexHDZ2yDJ=MXnY1%AXo|}1%LyXhPsE4`^9qL8rTA0 z_Z?ZbX8P|xND&t;+$zx)yFG#lC22&`q<@a+%A_FiiY@C>M*;26GK+qXyu9K3Nd@26Ki ztXBGC^F%5?O+rlLC&OY0~PI_aUoV4 z^o}C877g06n*ZKqc5oV@8jxf(fj8#B^1;N! zjERXcl2I@NrY9#C7kFvvrxp|F2OxOxpiR^81N12_PE_c)kK+f6+k!_P`J+ctfcxd- zzl=-*cu^FKl#CP;2aATzm3F;KRSwH1q+NCQA{ExjV6=Wyc~sd~ zb%Nf5BO&8HsA8Fu?PR2!{v*N(qOJZrx*s1P4*iY~?-nxNhXSLyI54o}^D?;OVF=aq zhca!(1=P(=F|Dmw#Fp#)pa2p?N~xeGFX)-3?1HH$!HoJT$E0#1`k*`lrmm}y=F9?i^Bh}n91)#;pw<&7?{!^(|f=T!>X&@;<*=77Hrl+8R%JnbXZLD z!S>zSj>g1g{te>HoBdm;3RonL@WQBXDux97HVp5JoW4+0#%dgECW~0pSY0s0L=S6N zGk+D&Kpk7^WP`3(JSYSf#pXFqw59$A`QZMHBx)UG&G8 zjd#U^Eh1gTGlLHfkL78c;5sDfUV-%hcfbH@+70zE8Nf}Tx0^yD==>HUutp)xj>zWH zk7xqO{yo?;z>|2vs*cY^o*q-{**U^<4{F+mks~3XfhO2BCf2PAu`aTZO_3hD60`r( zYam>{(kp4CX=Z~M?0sK7-vQn)oTEvw2J|JK)1(7udU3I-vlIm#cWGs%Y(o{YD;q6e zqh(U5KJKCx5Yio(bYWJ{>RZphG*lEkpK}`7E@@(Mv%}NL{qX~9)8;rr=u9i(I-$HM z2KwQEl|P|A!ViCLnrG4b31k}IW4~^poe7w8_`um}NPEO9B z;LC`w4Xl^{S^tpFbN!$74`xvRc&LvB^Oz8f`}uKvVw{tf=Pf5GD2*x$9Dp}LFD_Ec zFZ%oYE2^tUhlXIhj#(961 zF(|F3>GgT&r~O_Hz5GIrQ%a}dalvw`SJ^7~41oIq-s`6?a{V>RvmXBj$0hKc`}n+U zOa`~v`P+xn?p}q+uBOC1WPvMp>$MtKR>^Qs!Pz+1iT6Lr01v)(Ez)D zUi(mW6UQfJGd-W`w8{tj^U`N~5Sk&)2K|B4icb-yeT7zQxCUKMzS- zR9*j#0{Em_0io19EXzHfN`Kl&05g zIJL;&f;TsWUX`>b6@2bK2Po;2+a8G9^BmAyAp@)shP&1Z>IP6xi8cWA?+eRQfD)-3 z7U57m=mmQYjP@St5+~Wwi&Q?!)Gi=x*0=e4oFn$A0OXkbeg7(t`T#3vyNym zOU|~-o!8UyX0(K)6ELH=m|^&eG-Ujp=gps$m5Z-sw~qm-E1Oq2n&|8d@l>PjjQEX@ zPgvm7D6+O~_wcrbVCv&Xg*`Uv?4gFPHoOimyvMgG0)K$0)Y={Wf+G?!E_|P2A1S<< zf$5K%pWdSZL$nanC_A7y7?%=X&Be`KX5LSlUs|dnRY5+?P|FK!fb)Ei4?a^x?^A5uTnJja`&(RshF3V&1UK) zI|s+wCv4&#U?hNwwg`=EW@Y6YW`bg~yM_U4YerB4-q;8Yb z;H+HuckeW}RF3XzgZlH9PiI;FOX(V=q<)p#`~`Jc`!6fwz1Cl9sf-r)%29HUA=-zx zft$ihnWqck$+@Z4%dxcf63$dc&;02jmnP}${XA%Yti|J%jBLmGG1t)8$mNgpb1y=z z<*CSe%kTYf7+XKwl(-4%Y&05e47iM()DiUr56CP$5r|HusQR1DLzdXzzU4rxd^GCD z!f~oz%q{Zv&E5-3wJW-QRFQ$~P1UX{^Ygnh#~W4PZPd$E2h*;^d){QyNg0^E`UA#9 z78=g^*KiqC(Qzlomgx7isZNB{kNHqdk)zDVqm)GI~Zzr>^rmd#s+4 z-Y^vQ=+m0%mg_T5oWJUp{|l!izlRInh#c26QbrevH#y&%k1h{OexDbaDc=IsT>M^( zBg49To}*t(F!u4i&O!VL8lfRt3}op8YFRv9EV?nzGnq3tsWVUV>1_v>vrhFos%f9s z)e?g1WW zRYc2TJMH`2X+iUMJ9AdyPG$HLjGjh^K7aiI^C1${g#Pv)yA+egrHt*wdeoC;s6U&` z{xW)g<$^$vvKuPu?JMT{aKMLi z`Yx@_%rw4(4}C3IEs?+ZOp256%X>qN6b|;NUZ5uB2!#0B+L|+@ATR$v0+0i5{F4CL z+$7_;?#XH=-lvzRqH7T)c+}~_R9^r{OG~???VvM|R)QaJ*uJ4Qm+5ycls!3zYWD2e za(sL|At51{OeRW8OWC$EjOqFk)mJe_ivu1SmnyWk0K2_lCO9LAEm_ za4i43^$E@2z<2IkC;fkOUXqmp2nJoG>I-mX+ilsjSbFehPs@tk$Bg|ekx|2`uDsB% za`y#4{_&4VN=l-rsE7|g{1AYYloam1`)+mrE3drbW-0rJapT6Za;4*$UrL96RoU+x zOsrV3!fi5MEk}(rzPi19`Eqr?VvFO)j|1?NpZsJ%=-pRb zN&idP4dBTqpOi8(GUVO6cLSZl=h34_T_L(aAP{H@E#ICiyQ18Se)@#0 ze8!;HVXUd8v7wR3VUbiY%dT91kR+Vr@LDOfj}T|3;kXMK?#18QrC60HPqDBQPc5Y$eNDry4o6S zwsyR{hG6=(fy}I*X<{v$68r$PwzguiSU6W!*yWtc3um!dEGW-J2@DQVmzjAg7K??} z)>cQr*6|-4`reoM*d=9u&)M*jq@1q=Kj3)yDU!Fx>-~M0e%C@7$s6UNsErLBHt4X& z<$|C4G9Qx_+c?`?X;T7$Kp+qZ1cIx>WlP}N+b;rOu|Va8&T2sQrpilwL^CwjcP{H| zyu>*JVF{Bnmy_37->W@tv)aG6OalVh{{IifuY|%1n>utoxYE=mC>RB!U=)mkQ7{Td c!6?840K>=4M`y&4!~g&Q07*qoM6N<$f~*gD%K!iX From cd29b7de8613dd4e1d90c70eb479f3e6e0cfd5f2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 14:55:36 -0400 Subject: [PATCH 179/261] Soulcatcher chat logging, and subtle logging for free Logs soulcatcher messages to the chat log so admins can review them, since that's kinda important, and gives subtle it's own logging format so you can tell it's a subtle and not just an emote. Also disables subtles while in the soulcatcher because apparently that was a thing. --- code/_helpers/logging_vr.dm | 11 ++++ .../mob/living/carbon/human/emote_vr.dm | 4 +- code/modules/mob/say_vr.dm | 2 +- .../nifsoft/software/13_soulcatcher.dm | 65 ++++++++++++++----- vorestation.dme | 1 + 5 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 code/_helpers/logging_vr.dm diff --git a/code/_helpers/logging_vr.dm b/code/_helpers/logging_vr.dm new file mode 100644 index 0000000000..2f4c48acc6 --- /dev/null +++ b/code/_helpers/logging_vr.dm @@ -0,0 +1,11 @@ +/proc/log_nsay(text,inside) + if (config.log_say) + diary << "\[[time_stamp()]]NSAY (NIF:[inside]): [text][log_end]" + +/proc/log_nme(text,inside) + if (config.log_emote) + diary << "\[[time_stamp()]]NME (NIF:[inside]): [text][log_end]" + +/proc/log_subtle(text) + if (config.log_emote) + diary << "\[[time_stamp()]]SUBTLE: [text][log_end]" diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 0deb824388..b001a4ca7b 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -26,7 +26,7 @@ return 1 var/nifmessage = sanitize(input("Type a message to say.","Speak into NIF") as text|null) if(nifmessage) - SC.say_into(nifmessage,src.real_name) + SC.say_into(nifmessage,src) return 1 if ("nme") @@ -42,7 +42,7 @@ return 1 var/nifmessage = sanitize(input("Type an action to perform.","Emote into NIF") as text|null) if(nifmessage) - SC.emote_into(nifmessage,src.real_name) + SC.emote_into(nifmessage,src) return 1 if ("flip") diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index bb2851184d..c0e7c6b9ce 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -41,7 +41,7 @@ return if (message) - log_emote("[name]/[key] : [message]") + log_subtle("[name]/[key] : [message]") var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote var/list/vis_mobs = vis["mobs"] diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 52fbe74f6a..10a51fc77b 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -64,17 +64,34 @@ inside_flavor = load return TRUE - proc/say_into(var/message, var/sender) - to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender] speaks, \"[message]\"") - for(var/brainmob in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brainmob - to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender] speaks, \"[message]\"") + proc/notify_into(var/message) + var/sound = nif.good_sound + + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] Soulcatcher displays, \"[message]\"") + nif.human << sound - proc/emote_into(var/message, var/sender) - to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender] [message]") for(var/brainmob in brainmobs) var/mob/living/carbon/brain/caught_soul/CS = brainmob - to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender] [message]") + to_chat(CS,"\[\icon[nif.big_icon]NIF\] Soulcatcher displays, \"[message]\"") + brainmob << sound + + proc/say_into(var/message, var/mob/living/sender) + var/sender_name = sender.name + log_nsay("[sender_name]/[sender.key] : [message]",nif.human) + + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender_name] speaks, \"[message]\"") + for(var/brainmob in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brainmob + to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender_name] speaks, \"[message]\"") + + proc/emote_into(var/message, var/mob/living/sender) + var/sender_name = sender.name + log_nme("[sender_name]/[sender.key] : [message]",nif.human) + + to_chat(nif.human,"\[\icon[nif.big_icon]NIF\] [sender_name] [message]") + for(var/brainmob in brainmobs) + var/mob/living/carbon/brain/caught_soul/CS = brainmob + to_chat(CS,"\[\icon[nif.big_icon]NIF\] [sender_name] [message]") proc/show_settings(var/mob/living/carbon/human/H) set waitfor = FALSE @@ -121,13 +138,14 @@ proc/toggle_setting(var/flag) setting_flags ^= flag + var/notify_message //Special treatment switch(flag) if(NIF_SC_BACKUPS) if(setting_flags & NIF_SC_BACKUPS) - emote_into(" - Mind backup system enabled.","SOULCATCHER") + notify_message = "Mind backup system enabled." else - emote_into(" - Mind backup system disabled.","SOULCATCHER") + notify_message = "Mind backup system disabled." if(NIF_SC_CATCHING_ME) if(setting_flags & NIF_SC_CATCHING_ME) @@ -144,23 +162,26 @@ for(var/brain in brainmobs) var/mob/living/carbon/brain/caught_soul/brainmob = brain brainmob.ext_deaf = FALSE - emote_into(" - External audio input enabled.","SOULCATCHER") + notify_message = "External audio input enabled." else for(var/brain in brainmobs) var/mob/living/carbon/brain/caught_soul/brainmob = brain brainmob.ext_deaf = TRUE - emote_into(" - External audio input disabled.","SOULCATCHER") + notify_message = "External audio input disabled." if(NIF_SC_ALLOW_EYES) if(setting_flags & NIF_SC_ALLOW_EYES) for(var/brain in brainmobs) var/mob/living/carbon/brain/caught_soul/brainmob = brain brainmob.ext_blind = FALSE - emote_into(" - External video input enabled.","SOULCATCHER") + notify_message = "External video input enabled." else for(var/brain in brainmobs) var/mob/living/carbon/brain/caught_soul/brainmob = brain brainmob.ext_blind = TRUE - emote_into(" - External video input disabled.","SOULCATCHER") + notify_message = "External video input disabled." + + if(notify_message) + notify_into(notify_message) return TRUE @@ -207,7 +228,7 @@ send messages that only they can hear/see by 'say'ing either '*nsay' or '*nme'.") //Announce to host and other minds - emote_into(" - New mind loaded: [brainmob.name]","SOULCATCHER") + notify_into("New mind loaded: [brainmob.name]") return TRUE //////////////// @@ -274,10 +295,20 @@ return FALSE ..() +/mob/living/carbon/brain/caught_soul/me_verb_subtle() + set hidden = TRUE + + return FALSE + +/mob/living/carbon/brain/caught_soul/whisper() + set hidden = TRUE + + return FALSE + /mob/living/carbon/brain/caught_soul/say(var/message) if(parent_mob) return ..() if(silent) return FALSE - soulcatcher.say_into(message,src.name) + soulcatcher.say_into(message,src) /mob/living/carbon/brain/caught_soul/emote(var/act,var/m_type=1,var/message = null) if(parent_mob) return ..() @@ -299,7 +330,7 @@ /mob/living/carbon/brain/caught_soul/custom_emote(var/m_type, var/message) if(silent) return FALSE - soulcatcher.emote_into(message,src.name) + soulcatcher.emote_into(message,src) /mob/living/carbon/brain/caught_soul/resist() set name = "Resist" diff --git a/vorestation.dme b/vorestation.dme index 31eeacc2fb..45d2950691 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -65,6 +65,7 @@ #include "code\_helpers\icons_vr.dm" #include "code\_helpers\lists.dm" #include "code\_helpers\logging.dm" +#include "code\_helpers\logging_vr.dm" #include "code\_helpers\maths.dm" #include "code\_helpers\matrices.dm" #include "code\_helpers\mobs.dm" From 118d035c4e25945920f0e5025bc72dbf34a73f9b Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 17:30:02 -0400 Subject: [PATCH 180/261] Fixes for Bluespace Jumpsuit Oddly sets your size to null, no idea where it happens, but have some safety checks. --- .../clothing/under/miscellaneous_vr.dm | 54 +++++++++++-------- code/modules/vore/resizing/resize_vr.dm | 1 + 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index f497e59897..dcf3cb2c53 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -59,49 +59,61 @@ return if (src != H.w_uniform) - to_chat(H,"You must be WEARING the uniform to use it for that...") + to_chat(H,"You must be WEARING the uniform to change your size.") return var/choice = alert(H,"Change which way?","Mass Alteration","Size Up","Cancel","Size Down") if(choice == "Cancel") return FALSE - if(choice == "Size Up") + //Check AGAIN because we accepted user input which is blocking. + if (src != H.w_uniform) + to_chat(H,"You must be WEARING the uniform to change your size.") + return + + if (isnull(H.size_multiplier)) + to_chat(H,"The uniform panics and corrects your apparently microscopic size.") + H.resize(RESIZE_NORMAL) + H.update_icons() + return + + var/new_size + if (choice == "Size Up") switch(H.size_multiplier) if(RESIZE_BIG to RESIZE_HUGE) - H.resize(RESIZE_HUGE) + new_size = RESIZE_HUGE if(RESIZE_NORMAL to RESIZE_BIG) - H.resize(RESIZE_BIG) + new_size = RESIZE_BIG if(RESIZE_SMALL to RESIZE_NORMAL) - H.resize(RESIZE_NORMAL) + new_size = RESIZE_NORMAL if((0 - INFINITY) to RESIZE_TINY) - H.resize(RESIZE_SMALL) + new_size = RESIZE_SMALL - else if(choice == "Size Down") + else if (choice == "Size Down") switch(H.size_multiplier) if(RESIZE_HUGE to INFINITY) - H.resize(RESIZE_BIG) + new_size = RESIZE_BIG if(RESIZE_BIG to RESIZE_HUGE) - H.resize(RESIZE_NORMAL) + new_size = RESIZE_NORMAL if(RESIZE_NORMAL to RESIZE_BIG) - H.resize(RESIZE_SMALL) + new_size = RESIZE_SMALL if((0 - INFINITY) to RESIZE_NORMAL) - H.resize(RESIZE_TINY) + new_size = RESIZE_TINY - H.visible_message("The space around [H] distorts as they change size!","The space around you distorts as you change size!") - H.update_icons() - -/obj/item/clothing/under/bluespace/mob_can_equip(M as mob, slot, disable_warning = 0) - . = ..() - if(. && ishuman(M)) //Looks like we're being put on after all. - var/mob/living/carbon/human/H = M - original_size = H.size_multiplier + if(new_size) + if(new_size != H.size_multiplier) + if(!original_size) + original_size = H.size_multiplier + H.resize(new_size) + H.visible_message("The space around [H] distorts as they change size!","The space around you distorts as you change size!") + else + to_chat(H,"That's as far as you can resize in that direction!") + return /obj/item/clothing/under/bluespace/mob_can_unequip(mob/M, slot, disable_warning = 0) . = ..() - if(. && ishuman(M)) + if(. && ishuman(M) && original_size) var/mob/living/carbon/human/H = M H.resize(original_size) - H.update_icons() original_size = null H.visible_message("The space around [H] distorts as they return to their original size!","The space around you distorts as you return to your original size!") diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index a143648793..f0dea20f98 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -61,6 +61,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 /mob/living/proc/resize(var/new_size, var/animate = TRUE) if(size_multiplier == new_size) return 1 + ASSERT(new_size >= RESIZE_TINY && new_size <= RESIZE_HUGE) if(animate) var/matrix/resize = matrix() // Defines the matrix to change the player's size resize.Scale(new_size) //Change the size of the matrix From f3983db0f7912d01fa53b32c8c22cb8c0e67ed9c Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 18:11:33 -0400 Subject: [PATCH 181/261] Fix a runtime I missed on Soulcatcher Only affects erasing minds, and doens't affect the prey, really. Just means the minds count is wrong and the name sticks around. --- code/modules/nifsoft/software/13_soulcatcher.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 10a51fc77b..24b93c8cf2 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -245,7 +245,7 @@ /mob/living/carbon/brain/caught_soul/Destroy() if(soulcatcher) - soulcatcher.emote_into(" - Mind unloaded: [name]","SOULCATCHER") + soulcatcher.notify_into("Mind unloaded: [name]") soulcatcher.brainmobs -= src soulcatcher = null if(nif) From 2d92c8c2fbeb09cc50a6b5de832a659f024371b4 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 18:45:13 -0400 Subject: [PATCH 182/261] Remove 'Vore' tab, put verbs in IC and OOC OOC Escape goes to OOC obviously, Vore Panel is now the last thing in the IC tab. --- code/modules/vore/eating/living_vr.dm | 4 ++-- code/modules/vore/eating/vorepanel_vr.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 0655d33355..3eab4587b4 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -278,8 +278,8 @@ // OOC Escape code for pref-breaking or AFK preds // /mob/living/proc/escapeOOC() - set name = "OOC escape" - set category = "Vore" + set name = "OOC Escape" + set category = "OOC" //You're in an animal! if(istype(src.loc,/mob/living/simple_animal)) diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 9e882c5ab8..4e18db402e 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -10,7 +10,7 @@ /mob/living/proc/insidePanel() set name = "Vore Panel" - set category = "Vore" + set category = "IC" var/datum/vore_look/picker_holder = new() picker_holder.loop = picker_holder From b996d5c6b2a34f9a1f3de2f88bfc347f0cdb1da5 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 13:55:34 -0400 Subject: [PATCH 183/261] Ports utility macros to let subsystems divide their time among a few tasks Port of https://github.com/tgstation/tgstation/pull/26324 --- code/__defines/MC.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 08b8d223ec..59fb0d4db7 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -1,4 +1,15 @@ #define MC_TICK_CHECK ( ( world.tick_usage > CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) + +// Used for splitting up your remaining time into phases, if you want to evenly divide it. +#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = CURRENT_TICKLIMIT; var/split_tick_phases = ##phase_count +#define MC_SPLIT_TICK \ + if(split_tick_phases > 1){\ + CURRENT_TICKLIMIT = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ + --split_tick_phases;\ + } else {\ + CURRENT_TICKLIMIT = original_tick_limit;\ + } + // Used to smooth out costs to try and avoid oscillation. #define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) #define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) From 82e90a206c1e24147b7073e948fc63c4f232ecdc Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 16:42:06 -0400 Subject: [PATCH 184/261] Ports "Better repeated MC crash handling" * From https://github.com/tgstation/tgstation/pull/25813 * If the MC crashes: The problem subsystem will be rebooted on its 2nd strike and disabled on its third. --- code/controllers/master.dm | 19 +++++++++++++++++++ code/controllers/subsystem.dm | 2 ++ 2 files changed, 21 insertions(+) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 360b739bad..fbf97f730c 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -107,7 +107,26 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING else msg += "\t [varname] = [varval]\n" log_world(msg) + + var/datum/controller/subsystem/BadBoy = Master.last_type_processed + var/FireHim = FALSE + if(istype(BadBoy)) + msg = null + switch(++BadBoy.failure_strikes) + if(2) + msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again." + FireHim = TRUE + if(3) + msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." + BadBoy.flags |= SS_NO_FIRE + if(msg) + log_game(msg) + message_admins("[msg]") + log_world(msg) + if (istype(Master.subsystems)) + if(FireHim) + Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one subsystems = Master.subsystems StartProcessing(10) else diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index ff81fdc23e..b3e27a0175 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -27,6 +27,8 @@ var/datum/controller/subsystem/queue_next var/datum/controller/subsystem/queue_prev + var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out! + //Do not override /datum/controller/subsystem/New() return From 6a8abd4f80ae8d9b0c244dd85505fa542a33cf35 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 17:50:07 -0400 Subject: [PATCH 185/261] Ports tg improvements in StonedMC subsystem * Ports /tg StonedMC Enhancement - Runlevels - Lets services more precicely define when they want to fire - in the lobby, during game, only after, etc. Includes bugfixes from: * https://github.com/tgstation/tgstation/pull/27132 * https://github.com/tgstation/tgstation/pull/27338 * https://github.com/tgstation/tgstation/pull/27576 * https://github.com/tgstation/tgstation/pull/27519 * Ports Standardizes subsystem Shutdown order - https://github.com/tgstation/tgstation/pull/26228 --- code/__defines/MC.dm | 19 +++--- code/__defines/subsystems.dm | 13 ++++ code/controllers/master.dm | 94 +++++++++++++++----------- code/controllers/subsystem.dm | 1 + code/controllers/subsystems/garbage.dm | 3 +- polaris.dme | 1 + 6 files changed, 79 insertions(+), 52 deletions(-) create mode 100644 code/__defines/subsystems.dm diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 59fb0d4db7..297f04c148 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -21,39 +21,36 @@ //SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) -//subsystem should fire during pre-game lobby. -#define SS_FIRE_IN_LOBBY 1 - //subsystem does not initialize. -#define SS_NO_INIT 2 +#define SS_NO_INIT 1 //subsystem does not fire. // (like can_fire = 0, but keeps it from getting added to the processing subsystems list) // (Requires a MC restart to change) -#define SS_NO_FIRE 4 +#define SS_NO_FIRE 2 //subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) // SS_BACKGROUND has its own priority bracket -#define SS_BACKGROUND 8 +#define SS_BACKGROUND 4 //subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) -#define SS_NO_TICK_CHECK 16 +#define SS_NO_TICK_CHECK 8 //Treat wait as a tick count, not DS, run every wait ticks. // (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) -// (implies SS_FIRE_IN_LOBBY because of how it works) +// (implies all runlevels because of how it works) // (overrides SS_BACKGROUND) // This is designed for basically anything that works as a mini-mc (like SStimer) -#define SS_TICKER 32 +#define SS_TICKER 16 //keep the subsystem's timing on point by firing early if it fired late last fire because of lag // ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. -#define SS_KEEP_TIMING 64 +#define SS_KEEP_TIMING 32 //Calculate its next fire after its fired. // (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) // This flag overrides SS_KEEP_TIMING -#define SS_POST_FIRE_TIMING 128 +#define SS_POST_FIRE_TIMING 64 //SUBSYSTEM STATES #define SS_IDLE 0 //aint doing shit. diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm new file mode 100644 index 0000000000..8c546c9135 --- /dev/null +++ b/code/__defines/subsystems.dm @@ -0,0 +1,13 @@ + +// SS runlevels + +#define RUNLEVEL_INIT 0 // "Initialize Only" - Used for subsystems that should never be fired (Should also have SS_NO_FIRE set) +#define RUNLEVEL_LOBBY 1 // Initial runlevel before setup. Returns to here if setup fails. +#define RUNLEVEL_SETUP 2 // While the gamemode setup is running. I.E gameticker.setup() +#define RUNLEVEL_GAME 4 // After successful game ticker setup, while the round is running. +#define RUNLEVEL_POSTGAME 8 // When round completes but before reboot + +#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) + +var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_GAME, RUNLEVEL_POSTGAME) +#define RUNLEVEL_FLAG_TO_INDEX(flag) (log(2, flag) + 1) // Convert from the runlevel bitfield constants to index in runlevel_flags list diff --git a/code/controllers/master.dm b/code/controllers/master.dm index fbf97f730c..6bcfb6ff0a 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -40,8 +40,6 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/make_runtime = 0 var/initializations_finished_with_no_players_logged_in //I wonder what this could be? - // Has round started? (So we know what subsystems to run) - var/round_started = 0 // The type of the last subsystem to be process()'d. var/last_type_processed @@ -52,6 +50,8 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/queue_priority_count_bg = 0 //Same, but for background subsystems var/map_loading = FALSE //Are we loading in a new map? + var/current_runlevel //for scheduling different subsystems for different stages of the round + /datum/controller/master/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. subsystems = list() @@ -70,6 +70,8 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING /datum/controller/master/Shutdown() processing = FALSE + sortTim(subsystems, /proc/cmp_subsystem_init) + reverseRange(subsystems) for(var/datum/controller/subsystem/ss in subsystems) ss.Shutdown() @@ -128,6 +130,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if(FireHim) Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one subsystems = Master.subsystems + current_runlevel = Master.current_runlevel StartProcessing(10) else to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING") @@ -165,6 +168,9 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING to_chat(world, "[msg]") log_world(msg) + if (!current_runlevel) + SetRunLevel(RUNLEVEL_LOBBY) + // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) // Set world options. @@ -180,16 +186,12 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // Loop. Master.StartProcessing(0) -// Notify the MC that the round has started. -/datum/controller/master/proc/RoundStart() - round_started = 1 - var/timer = world.time - for (var/datum/controller/subsystem/SS in subsystems) - if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER) - continue //already firing - // Stagger subsystems. - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer +/datum/controller/master/proc/SetRunLevel(new_runlevel) + var/old_runlevel = isnull(current_runlevel) ? "NULL" : runlevel_flags[current_runlevel] + testing("MC: Runlevel changed from [old_runlevel] to [new_runlevel]") + current_runlevel = RUNLEVEL_FLAG_TO_INDEX(new_runlevel) + if(current_runlevel < 1) + CRASH("Attempted to set invalid runlevel: [new_runlevel]") // Starts the mc, and sticks around to restart it if the loop ever ends. /datum/controller/master/proc/StartProcessing(delay) @@ -214,12 +216,9 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because // local vars rock - // Schedule the first run of the Subsystems. - round_started = world.has_round_started() //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) var/list/tickersubsystems = list() - var/list/normalsubsystems = list() - var/list/lobbysubsystems = list() + var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel var/timer = world.time for (var/thing in subsystems) var/datum/controller/subsystem/SS = thing @@ -234,25 +233,29 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING timer += world.tick_lag * rand(1, 5) SS.next_fire = timer continue - if (SS.flags & SS_FIRE_IN_LOBBY) - lobbysubsystems += SS - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer - else if (round_started) - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer - normalsubsystems += SS + + var/ss_runlevels = SS.runlevels + var/added_to_any = FALSE + for(var/I in 1 to global.runlevel_flags.len) + if(ss_runlevels & global.runlevel_flags[I]) + while(runlevel_sorted_subsystems.len < I) + runlevel_sorted_subsystems += list(list()) + runlevel_sorted_subsystems[I] += SS + added_to_any = TRUE + if(!added_to_any) + WARNING("[SS.name] subsystem is not SS_NO_FIRE but also does not have any runlevels set!") queue_head = null queue_tail = null //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) sortTim(tickersubsystems, /proc/cmp_subsystem_priority) - sortTim(normalsubsystems, /proc/cmp_subsystem_priority) - sortTim(lobbysubsystems, /proc/cmp_subsystem_priority) + for(var/I in runlevel_sorted_subsystems) + sortTim(runlevel_sorted_subsystems, /proc/cmp_subsystem_priority) + I += tickersubsystems - normalsubsystems += tickersubsystems - lobbysubsystems += tickersubsystems + var/cached_runlevel = current_runlevel + var/list/current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] init_timeofday = REALTIMEOFDAY init_time = world.time @@ -289,14 +292,23 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) new/datum/controller/failsafe() // (re)Start the failsafe. if (!queue_head || !(iteration % 3)) - if (round_started) - subsystems_to_check = normalsubsystems - else - subsystems_to_check = lobbysubsystems + var/checking_runlevel = current_runlevel + if(cached_runlevel != checking_runlevel) + //resechedule subsystems + cached_runlevel = checking_runlevel + current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] + var/stagger = world.time + for(var/I in current_runlevel_subsystems) + var/datum/controller/subsystem/SS = I + if(SS.next_fire <= world.time) + stagger += world.tick_lag * rand(1, 5) + SS.next_fire = stagger + + subsystems_to_check = current_runlevel_subsystems else subsystems_to_check = tickersubsystems if (CheckQueue(subsystems_to_check) <= 0) - if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_world("MC: SoftReset() failed, crashing") return if (!error_level) @@ -308,7 +320,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (queue_head) if (RunQueue() <= 0) - if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_world("MC: SoftReset() failed, crashing") return if (!error_level) @@ -479,13 +491,15 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING //resets the queue, and all subsystems, while filtering out the subsystem lists // called if any mc's queue procs runtime or exit improperly. -/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS) +/datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS) . = 0 log_world("MC: SoftReset called, resetting MC queue state.") - if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS)) - log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!") + if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) + log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'") return - var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS + var/subsystemstocheck = subsystems + ticker_SS + for(var/I in runlevel_SS) + subsystemstocheck |= I for (var/thing in subsystemstocheck) var/datum/controller/subsystem/SS = thing @@ -493,8 +507,8 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents subsystems -= list(SS) ticker_SS -= list(SS) - normal_SS -= list(SS) - lobby_SS -= list(SS) + for(var/I in runlevel_SS) + I -= list(SS) log_world("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") continue if (SS.queue_next && !istype(SS.queue_next)) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index b3e27a0175..7dff609c76 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -6,6 +6,7 @@ var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) + var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index b07337e803..d6db860d5d 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -5,7 +5,8 @@ SUBSYSTEM_DEF(garbage) name = "Garbage" priority = 15 wait = 5 - flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object var/delslasttick = 0 // number of del()'s we've done this tick diff --git a/polaris.dme b/polaris.dme index 3b49b9566b..83159a4621 100644 --- a/polaris.dme +++ b/polaris.dme @@ -40,6 +40,7 @@ #include "code\__defines\qdel.dm" #include "code\__defines\research.dm" #include "code\__defines\species_languages.dm" +#include "code\__defines\subsystems.dm" #include "code\__defines\targeting.dm" #include "code\__defines\tick.dm" #include "code\__defines\turfs.dm" From fb92653ac9a56d177277a7470134b310f802dc55 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 18:26:28 -0400 Subject: [PATCH 186/261] Ports "Makes global master vars static" * https://github.com/tgstation/tgstation/pull/27523 --- code/__defines/MC.dm | 8 +++---- code/__defines/tick.dm | 2 +- code/_helpers/time.dm | 2 +- code/controllers/master.dm | 44 +++++++++++++++++++------------------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 297f04c148..fb15a693bf 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -1,13 +1,13 @@ -#define MC_TICK_CHECK ( ( world.tick_usage > CURRENT_TICKLIMIT || src.state != SS_RUNNING ) ? pause() : 0 ) +#define MC_TICK_CHECK ( ( world.tick_usage > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 ) // Used for splitting up your remaining time into phases, if you want to evenly divide it. -#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = CURRENT_TICKLIMIT; var/split_tick_phases = ##phase_count +#define MC_SPLIT_TICK_INIT(phase_count) var/original_tick_limit = Master.current_ticklimit; var/split_tick_phases = ##phase_count #define MC_SPLIT_TICK \ if(split_tick_phases > 1){\ - CURRENT_TICKLIMIT = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ + Master.current_ticklimit = ((original_tick_limit - world.tick_usage) / split_tick_phases) + world.tick_usage;\ --split_tick_phases;\ } else {\ - CURRENT_TICKLIMIT = original_tick_limit;\ + Master.current_ticklimit = original_tick_limit;\ } // Used to smooth out costs to try and avoid oscillation. diff --git a/code/__defines/tick.dm b/code/__defines/tick.dm index 3fa6e21bf3..4c88fd643e 100644 --- a/code/__defines/tick.dm +++ b/code/__defines/tick.dm @@ -3,5 +3,5 @@ #define TICK_LIMIT_MC 70 #define TICK_LIMIT_MC_INIT_DEFAULT 98 -#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ) +#define TICK_CHECK ( world.tick_usage > Master.current_ticklimit ) #define CHECK_TICK if TICK_CHECK stoplag() diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index b3989a32a4..3a6bcedcd1 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -120,4 +120,4 @@ var/round_start_time = 0 . += round(i*DELTA_CALC) sleep(i*world.tick_lag*DELTA_CALC) i *= 2 - while (world.tick_usage > min(TICK_LIMIT_TO_RUN, CURRENT_TICKLIMIT)) + while (world.tick_usage > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit)) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 6bcfb6ff0a..7c2bc86a65 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -7,14 +7,6 @@ * **/ var/datum/controller/master/Master = new() -var/MC_restart_clear = 0 -var/MC_restart_timeout = 0 -var/MC_restart_count = 0 - - -//current tick limit, assigned by the queue controller before running a subsystem. -//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits -var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING /datum/controller/master name = "Master" @@ -52,6 +44,14 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/current_runlevel //for scheduling different subsystems for different stages of the round + var/static/restart_clear = 0 + var/static/restart_timeout = 0 + var/static/restart_count = 0 + + //current tick limit, assigned before running a subsystem. + //used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits + var/static/current_ticklimit = TICK_LIMIT_RUNNING + /datum/controller/master/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. subsystems = list() @@ -79,14 +79,14 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // -1 if we encountered a runtime trying to recreate it /proc/Recreate_MC() . = -1 //so if we runtime, things know we failed - if (world.time < MC_restart_timeout) + if (world.time < Master.restart_timeout) return 0 - if (world.time < MC_restart_clear) - MC_restart_count *= 0.5 + if (world.time < Master.restart_clear) + Master.restart_count *= 0.5 - var/delay = 50 * ++MC_restart_count - MC_restart_timeout = world.time + delay - MC_restart_clear = world.time + (delay * 2) + var/delay = 50 * ++Master.restart_count + Master.restart_timeout = world.time + delay + Master.restart_clear = world.time + (delay * 2) Master.processing = 0 //stop ticking this one try new/datum/controller/master() @@ -155,13 +155,13 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING var/start_timeofday = REALTIMEOFDAY // Initialize subsystems. - CURRENT_TICKLIMIT = config.tick_limit_mc_init + current_ticklimit = config.tick_limit_mc_init for (var/datum/controller/subsystem/SS in subsystems) if (SS.flags & SS_NO_INIT) continue SS.Initialize(REALTIMEOFDAY) CHECK_TICK - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + current_ticklimit = TICK_LIMIT_RUNNING var/time = (REALTIMEOFDAY - start_timeofday) / 10 var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!" @@ -268,7 +268,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING while (1) tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag))) if (processing <= 0) - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue @@ -276,7 +276,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING // because sleeps are processed in the order received, so longer sleeps are more likely to run first if (world.tick_usage > TICK_LIMIT_MC) sleep_delta += 2 - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) + current_ticklimit = TICK_LIMIT_RUNNING * 0.5 sleep(world.tick_lag * (processing + sleep_delta)) continue @@ -314,7 +314,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (!error_level) iteration++ error_level++ - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue @@ -326,7 +326,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING if (!error_level) iteration++ error_level++ - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING + current_ticklimit = TICK_LIMIT_RUNNING sleep(10) continue error_level-- @@ -337,7 +337,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING iteration++ last_run = world.time src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta) - CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. + current_ticklimit = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc. sleep(world.tick_lag * (processing + sleep_delta)) @@ -426,7 +426,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING else tick_precentage = tick_remaining - CURRENT_TICKLIMIT = world.tick_usage + tick_precentage + current_ticklimit = world.tick_usage + tick_precentage if (!(queue_node_flags & SS_TICKER)) ran_non_ticker = TRUE From 82e6049821a7ab346f7550d0c26016c3d50bf788 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 17:51:47 -0400 Subject: [PATCH 187/261] Actually hooks up the StonedMC to run its subsystems in Polaris * Hooks up informing Master the gameticker actually starts and stops the round subsystems will actually fire! What ho! * We should convert the gameticker as an MC subsystem someday, and probably completely rewrite it while we are at it becuase it is crazy. But this should bridge the gap until then. --- code/controllers/Processes/ticker.dm | 6 +++++- code/game/gamemodes/gameticker.dm | 7 +++++++ code/modules/admin/admin.dm | 1 + code/unit_tests/unit_test.dm | 1 + code/world.dm | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm index 6fa6d43237..a70bb74c5f 100644 --- a/code/controllers/Processes/ticker.dm +++ b/code/controllers/Processes/ticker.dm @@ -34,5 +34,9 @@ var/global/datum/controller/process/ticker/tickerProcess /datum/controller/process/ticker/proc/getLastTickerTimeDuration() return lastTickerTimeDuration -/world/proc/has_round_started() +// Use these preferentially to directly examining ticker.current_state to help prepare for transition to ticker as subsystem! +/datum/controller/process/ticker/proc/HasRoundStarted() return (ticker && ticker.current_state >= GAME_STATE_PLAYING) + +/datum/controller/process/ticker/proc/IsRoundInProgress() + return (ticker && ticker.current_state == GAME_STATE_PLAYING) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 9e4dff2ce5..4567a1da51 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -62,6 +62,7 @@ var/global/datum/controller/gameticker/ticker vote.process() if(pregame_timeleft <= 0) current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) while (!setup()) @@ -74,6 +75,7 @@ var/global/datum/controller/gameticker/ticker if((master_mode=="random") || (master_mode=="secret")) if(!runnable_modes.len) current_state = GAME_STATE_PREGAME + Master.SetRunLevel(RUNLEVEL_LOBBY) world << "Unable to choose playable game mode. Reverting to pre-game lobby." return 0 if(secret_force_mode != "secret") @@ -88,6 +90,7 @@ var/global/datum/controller/gameticker/ticker if(!src.mode) current_state = GAME_STATE_PREGAME + Master.SetRunLevel(RUNLEVEL_LOBBY) world << "Serious error in mode setup! Reverting to pre-game lobby." return 0 @@ -99,6 +102,7 @@ var/global/datum/controller/gameticker/ticker if(!src.mode.can_start()) world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby." current_state = GAME_STATE_PREGAME + Master.SetRunLevel(RUNLEVEL_LOBBY) mode.fail_setup() mode = null job_master.ResetOccupations() @@ -127,6 +131,7 @@ var/global/datum/controller/gameticker/ticker shuttle_controller.setup_shuttle_docks() + // TODO - Leshana - Dear God Fix This. Fix all of this. Not just this line, this entire proc. This entire file! spawn(0)//Forking here so we dont have to wait for this to finish mode.post_setup() //Cleanup some stuff @@ -155,6 +160,7 @@ var/global/datum/controller/gameticker/ticker */ processScheduler.start() + Master.SetRunLevel(RUNLEVEL_GAME) if(config.sql_enabled) statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE @@ -319,6 +325,7 @@ var/global/datum/controller/gameticker/ticker if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game)) current_state = GAME_STATE_FINISHED + Master.SetRunLevel(RUNLEVEL_POSTGAME) spawn declare_completion() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index aea165e063..2f9bca5f01 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -783,6 +783,7 @@ proc/admin_notice(var/message, var/rights) return if(ticker.current_state == GAME_STATE_PREGAME) ticker.current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) log_admin("[usr.key] has started the game.") message_admins("[usr.key] has started the game.") feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm index f05514ce74..605cf8fcac 100644 --- a/code/unit_tests/unit_test.dm +++ b/code/unit_tests/unit_test.dm @@ -45,6 +45,7 @@ var/total_unit_tests = 0 sleep(1) ticker.current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) log_unit_test("Round has been started. Waiting 10 seconds to start tests.") sleep(100) diff --git a/code/world.dm b/code/world.dm index a11d875c51..9a031dda0f 100644 --- a/code/world.dm +++ b/code/world.dm @@ -433,6 +433,7 @@ var/world_topic_spam_protect_time = world.timeofday */ processScheduler.stop() + Master.Shutdown() //run SS shutdowns for(var/client/C in clients) if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite From a1ecfbd644352b8f0eac413d525accbe9798a049 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 19:31:25 -0400 Subject: [PATCH 188/261] Fix 71,55,1 catwalk Two on top of each other. --- maps/tether/tether-01-surface.dmm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index e91f617d03..0d59cd6c94 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -1542,7 +1542,6 @@ "aDH" = (/obj/structure/railing{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/obj/structure/cable/cyan{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/atmos) "aDI" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 28},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/atmos) "aDJ" = (/obj/structure/catwalk,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/atmos) -"aDK" = (/obj/structure/catwalk,/obj/structure/catwalk,/turf/simulated/floor/tiled/techfloor,/area/maintenance/lower/atmos) "aDL" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "aDM" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -28},/obj/structure/cable,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) "aDN" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/tether/surfacebase/tram) @@ -5468,7 +5467,7 @@ aaaaadaadaadaadaadaadaadaadaadaadarpaAQaySayTaARaASaASaATaAUaAVaAWaAmaAXayTaAYaA aaaaadaadaadaadaadaadaadaadaadaadarpazraBAayTayTayTayTayTayTaBBaBCaBDaBEaBFaBGaBHaAqaBaawUaBIaBJaBJaBJaBKaBLaBLaBMaBNauaaBOaBkaBPaBlaBQaAxaBRaBSaBTaBUaBVaBWaABaagaagaagaagaagaagaagaagaagaagaagaagaagbEUaBXbLebLLaCaazgaAeaAeaAeaCbbqWaAfaAeaagaagaagaagaagaagaagaagaAeaCdaAeaagaAeaAfaAeaagaagaagaagaagaagapCasmaqWaCeaCfaCgaqWaqnaqoarCarBarCarCarCarCarBarCasqapCaaa aaaaadaadaadaadaadaadaadaadaadaadaChaCiaCjayTazsazsaztaCkazvaClaAWaAmaCmaCnaCoaCpauaaCqaCraCsaCtaCuaCvaCwaCxaCyaCyaCzaAqaAoaBkaAxaAxaAyaCAaCBaCCatmaCDaCEaCFaABaagaagaagaagaagaagaagaagaagaagbEUbEUbEUbEUaCGbOhaCIaCJaCKaCLaCLaCLaCMaCLaCNaAeaAeaAeaagaagaagaagaagaagaAebQmaAeaagaAeaAfaAeaagaagaagaagaagaagapCarxaqWaCParzaCQaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaadaadaCRajUayTazsazsazsaCSaAjaAkaCTaAmaCUaCVaCWaCXauaauaauaauaaAqaAqauaaCYauaaAqaAqaAqaAqaAoaBkaAxaAxaAyaAxaCBaCZatmaABaABaABaABaagaagaagaagaagaagbEUbEUbEUbEUbEUaDaaDbbEUbQGaDdbQIaDfbEUaAeaAeaAeaAeaAeaAfaAeaDgaAeaagaagaagaagaagaagaAeaByaAeaagaAeaAfaAeaagaagaagaagaagaagapCaqVaqWaqWaqWaDhaqWaqnaqoaqparBarCarCarCarCarBaqpaqYapCaaa -aaaaadaadaadaadaadaadaadaadaadaadaadaCRaagayTaARaASaASaDiaAUaAVaAWaDjaDkazAaDlaDmaDnaDoaDpaDqaDraDsaDtaDuaDvaDwaDwaDwaDxaDyaDzaDAaDBaDCaDDaDEaDFatmaagaagaagaagaagaagaagaagaagaagbEUaDGaDHaDIbEUbEUbEUbEUaDJaDfaDfaDKbEUaagaagaagaagaAeaAfaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaANaAeaAeaAeaAfaAeaagaagaagaagaagaagapCaqhasZaDLasZaDMaDNaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqrapCaaa +aaaaadaadaadaadaadaadaadaadaadaadaadaCRaagayTaARaASaASaDiaAUaAVaAWaDjaDkazAaDlaDmaDnaDoaDpaDqaDraDsaDtaDuaDvaDwaDwaDwaDxaDyaDzaDAaDBaDCaDDaDEaDFatmaagaagaagaagaagaagaagaagaagaagbEUaDGaDHaDIbEUbEUbEUbEUaDJaDfaDfaDfbEUaagaagaagaagaAeaAfaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaANaAeaAeaAeaAfaAeaagaagaagaagaagaagapCaqhasZaDLasZaDMaDNaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqrapCaaa aaaaDOaDPaDPaDPaDQaDRaDSaDPaDPaDPaDPaDTaagayTayTayTayTayTayTaDUaAWaDVaDWayTaDXaDYaDZaEaaEbaEcaEdaEbaEeaEfaEbaEbaEgaEhaEiaDZaEjaEkaElaEmaElaEnaEoatmaagaEpaEpaEpaEpaEpaEpaEpaEpaEpbEUaEqaEraEsbEUaEtbEUaDfaEubEUbEUbEUbEUaagaagaagaagaAeaEvaCLaCLaCLaCLaCLaCLaCLaEwaCLaCLaCLaCLaCLaExaEyaAeaagaagaagaagaagaagapCapCapCapCapCapCapCapDapEapEapFapGapGapGapGapFapEapEapHaaa aEzaadaadaadaadaadaadaadaadaadaadaadaadaagayTazsazsaEAaEBaECaClaAWaEDaEEayTayTaEFaEGayTayTaEHaEIatmatmatmaEJaEJaEJaEJaEKaELaEJaEJaEJatmatmbYgatmatmaagaEpaENaEOaEOaEOaEPaEOaEQaEObYhaESbYjbEjbEUbYkbEUaDfaEubEUaagaagaagaagaagaagaagaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaAeaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa aEWaEXaadaadaadaadaadaadaadaadaadaadaadaagayTazsazsazsaEYaAjaAkaCTaEZaFaaFbaFcaFdaFeaFfaFgaFhaFiatmaFjaFkaEJaFlaFmaFnaFoaFpaFqaFqaEJaagaEpaFraEpaagaagaEpaFsaEOaEpaEpaEpaEpaEpaEpbEUaFtaFuaFvaFwaFxbYoaFxaFzbEUaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaaa From dd0ab83155f55030d32db2fd4228a358d0c32241 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 20:31:26 -0400 Subject: [PATCH 189/261] Two brains made for the price of one! Silly. --- code/modules/nifsoft/software/13_soulcatcher.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 24b93c8cf2..a233db16d3 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -188,7 +188,6 @@ proc/catch_mob(var/mob/living/carbon/human/H) //Create a new brain mob var/mob/living/carbon/brain/caught_soul/brainmob = new(nif) - brainmob = new(nif) brainmob.nif = nif brainmob.soulcatcher = src brainmob.container = src From e3db32fd60525dc839ca8fc08f985985d1fe8e71 Mon Sep 17 00:00:00 2001 From: SpoopyLizz Date: Sun, 11 Jun 2017 02:51:29 +0200 Subject: [PATCH 190/261] hopefully fixed the problem this time --- code/modules/vore/fluffstuff/custom_items_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index d926159840..31400a9708 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -796,10 +796,10 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie var/clr = C.colourName if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) - usr << "\blue The egg refuses to take on this color!" + to_chat(user,"The egg refuses to take on this color!") return - usr << "\blue You color \the [src] [clr]" + to_chat(user,"You color \the [src] [clr]") icon_state = "egg_roiz_[clr]" desc = "It's a large lizard egg. It has been colored [clr]!" if (clr == "rainbow") From 869ae4dafd22195175e3efa6ae64e6731bc1a1ec Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 10 Jun 2017 22:05:09 -0400 Subject: [PATCH 191/261] Fix prey becoming indigestible And, really invincible. And runtimey. And uninjectible. --- code/modules/vore/eating/belly_vr.dm | 45 +++++++++++++++++----------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm index 902f6183c8..6d170dcebc 100644 --- a/code/modules/vore/eating/belly_vr.dm +++ b/code/modules/vore/eating/belly_vr.dm @@ -142,15 +142,19 @@ var/mob/living/OW = owner if(ML.absorbed) ML.absorbed = 0 - ML.reagents = new/datum/reagents(1000,M) //Human reagent datums hold 1000 - if(OW.reagents && istype(OW.reagents,/datum/reagents)) //Does the pred have a reagents list? - var/datum/reagents/OR = owner.reagents + if(ishuman(M) && ishuman(OW)) + var/mob/living/carbon/human/Prey = M + var/mob/living/carbon/human/Pred = OW + Prey.bloodstr = Prey.reagents = new(1000,Prey,CHEM_BLOOD) //Human reagent datums hold 1000, bloodstr and reagents are the same object on humans + Prey.touching = new(1000,Prey,CHEM_TOUCH) + Prey.ingested = new(1000,Prey,CHEM_INGEST) + var/absorbed_count = 2 //Prey that we were, plus the pred gets a portion for(var/mob/living/P in internal_contents) if(P.absorbed) absorbed_count++ - OR.trans_to(ML,OR.total_volume / absorbed_count) + Pred.reagents.trans_to(Prey,Pred.reagents.total_volume / absorbed_count) var/datum/belly/B = check_belly(owner) if(B) @@ -271,11 +275,12 @@ _handle_digested_item(W,M) //Reagent transfer - if(M.reagents && istype(M.reagents,/datum/reagents)) - var/mob/living/OW = owner - if(OW.reagents && istype(OW.reagents,/datum/reagents)) //Does the pred have a reagents list to give to? - var/datum/reagents/RL = M.reagents - RL.trans_to(owner,RL.total_volume*0.5) + if(ishuman(M) && ishuman(owner)) + var/mob/living/carbon/human/Pred = owner + var/mob/living/carbon/human/Prey = M + Prey.reagents.trans_to(Pred.reagents,Prey.reagents.total_volume*0.5) + Prey.ingested.trans_to(Pred.reagents,Prey.ingested.total_volume*0.5) + Prey.touching.trans_to(Pred.reagents,Prey.touching.total_volume*0.5) // Delete the digested mob qdel(M) @@ -323,16 +328,20 @@ M.absorbed = 1 M << "[owner]'s [name] absorbs your body, making you part of them." owner << "Your [name] absorbs [M]'s body, making them part of you." - var/mob/living/OW = owner - //Reagent sharing for absorbed with pred - if(OW.reagents && istype(OW.reagents,/datum/reagents)) //Does the pred have a reagent list? - if(M.reagents && istype(M.reagents,/datum/reagents)) //Does the prey have a reagent list? - var/datum/reagents/OR = owner.reagents - var/datum/reagents/PR = M.reagents - PR.trans_to(owner,PR.total_volume) - M.reagents = OR - del(PR) + if(ishuman(M) && ishuman(owner)) + var/mob/living/carbon/human/Prey = M + var/mob/living/carbon/human/Pred = owner + //Reagent sharing for absorbed with pred + Prey.reagents.trans_to(owner,Pred.reagents.total_volume) + + //Pair up all their reagent containers + qdel(Prey.reagents) //Reagents is the same object as bloodstr on humans; both variables are the same object + Prey.reagents = Prey.bloodstr = Pred.reagents + qdel(Prey.ingested) + Prey.ingested = Pred.ingested + qdel(Prey.touching) + Prey.touching = Pred.touching //This is probably already the case, but for sub-prey, it won't be. M.forceMove(owner) From 7b47590645f7df32c9e03216e851b7b56b625e47 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sun, 2 Apr 2017 17:41:21 +0200 Subject: [PATCH 192/261] Port of @PsiOmegaDelta's Baystation12/Baystation12#16820 Ports tg's garbage collector subsystem and Destroy() returning qdel hints. --- code/ATMOSPHERICS/pipes.dm | 28 +- code/__defines/qdel.dm | 17 + code/_helpers/mobs.dm | 2 +- .../ProcessScheduler/core/process.dm | 2 +- code/controllers/Processes/garbage.dm | 254 ------------- code/controllers/Processes/machinery.dm | 6 +- code/controllers/Processes/mob.dm | 2 +- code/controllers/Processes/nanoui.dm | 2 +- code/controllers/Processes/obj.dm | 2 +- code/controllers/Processes/scheduler.dm | 4 +- code/controllers/failsafe.dm | 4 +- code/controllers/master.dm | 2 +- code/controllers/master_controller.dm | 8 +- code/controllers/subsystems/garbage.dm | 354 ++++++++++++++++++ code/datums/helper_datums/global_iterator.dm | 1 + code/datums/repositories/decls.dm | 2 +- code/datums/weakref.dm | 6 +- code/game/atoms_movable.dm | 12 +- .../endgame/supermatter_cascade/universe.dm | 1 - code/game/machinery/CableLayer.dm | 2 +- .../atmoalter/portable_atmospherics.dm | 11 +- code/game/machinery/doors/door.dm | 3 +- code/game/machinery/floor_light.dm | 2 +- code/game/machinery/pipe/construction.dm | 18 +- code/game/mecha/mecha.dm | 16 +- .../objects/items/devices/transfer_valve.dm | 2 +- .../objects/items/weapons/flamethrower.dm | 13 +- .../weapons/material/material_weapons.dm | 2 +- code/game/objects/structures.dm | 2 +- code/game/objects/structures/lattice.dm | 2 +- code/game/turfs/turf.dm | 1 + code/modules/admin/view_variables/helpers.dm | 7 - code/modules/assembly/signaler.dm | 2 +- code/modules/client/client defines.dm | 4 + code/modules/client/client procs.dm | 3 + .../hydroponics/spreading/spreading_growth.dm | 2 +- code/modules/lighting/lighting_overlay.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- .../living/silicon/robot/drone/drone_items.dm | 2 +- code/modules/mob/mob.dm | 1 + code/modules/mob/mob_grab.dm | 12 +- code/modules/organs/internal/brain.dm | 6 +- code/modules/reagents/Chemistry-Holder.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 2 +- code/modules/reagents/Chemistry-Reagents.dm | 2 +- .../reagent_containers/food/snacks.dm | 4 +- code/modules/shieldgen/emergency_shield.dm | 6 +- code/modules/tables/tables.dm | 2 +- vorestation.dme | 3 +- 49 files changed, 480 insertions(+), 367 deletions(-) create mode 100644 code/__defines/qdel.dm delete mode 100644 code/controllers/Processes/garbage.dm create mode 100644 code/controllers/subsystems/garbage.dm diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index e057121798..28440254bb 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -63,11 +63,11 @@ return parent.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() - qdel(parent) + qdel_null(parent) if(air_temporary) loc.assume_air(air_temporary) - ..() + . = ..() /obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) @@ -227,10 +227,12 @@ /obj/machinery/atmospherics/pipe/simple/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/simple/pipeline_expansion() return list(node1, node2) @@ -461,12 +463,15 @@ /obj/machinery/atmospherics/pipe/manifold/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node2 = null if(node3) node3.disconnect(src) + node3 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) @@ -705,14 +710,18 @@ /obj/machinery/atmospherics/pipe/manifold4w/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node2 = null if(node3) node3.disconnect(src) + node3 = null if(node4) node4.disconnect(src) + node4 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) @@ -967,8 +976,9 @@ /obj/machinery/atmospherics/pipe/cap/Destroy() if(node) node.disconnect(src) + node = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) if(reference == node) @@ -1081,8 +1091,9 @@ /obj/machinery/atmospherics/pipe/tank/Destroy() if(node1) node1.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/tank/pipeline_expansion() return list(node1) @@ -1251,8 +1262,9 @@ /obj/machinery/atmospherics/pipe/vent/Destroy() if(node1) node1.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/vent/pipeline_expansion() return list(node1) diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm new file mode 100644 index 0000000000..168a6adf0c --- /dev/null +++ b/code/__defines/qdel.dm @@ -0,0 +1,17 @@ +//defines that give qdel hints. these can be given as a return in destory() or by calling + +#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion. +#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory. +#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. +#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference. +#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste. +#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm. + //if TESTING is enabled, qdel will call this object's find_references() verb. +//defines for the gc_destroyed var + +#define GC_QUEUED_FOR_QUEUING -1 +#define GC_QUEUED_FOR_HARD_DEL -2 +#define GC_CURRENTLY_BEING_QDELETED -3 + +#define QDELETED(X) (!X || X.gc_destroyed) +#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index d7fd20ac77..8ac42dc0b9 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -228,7 +228,7 @@ Proc for attack log creation, because really why not . = 0 break - if(target_loc && (!target || target_loc != target.loc)) + if(target_loc && (QDELETED(target) || target_loc != target.loc)) . = 0 break diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index edcb8d703c..9f08241978 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -387,6 +387,6 @@ exceptions[eid] = 0 /datum/controller/process/proc/catchBadType(var/datum/caught) - if(isnull(caught) || !istype(caught) || !isnull(caught.gcDestroyed)) + if(isnull(caught) || !istype(caught) || QDELETED(caught)) return // Only bother with types we can identify and that don't belong catchException("Type [caught.type] does not belong in process' queue") diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm deleted file mode 100644 index 02f0411332..0000000000 --- a/code/controllers/Processes/garbage.dm +++ /dev/null @@ -1,254 +0,0 @@ -// The time a datum was destroyed by the GC, or null if it hasn't been -/datum/var/gcDestroyed - -#define GC_COLLECTIONS_PER_RUN 300 -#define GC_COLLECTION_TIMEOUT (30 SECONDS) -#define GC_FORCE_DEL_PER_RUN 30 - -var/datum/controller/process/garbage_collector/garbage_collector -var/list/delayed_garbage = list() - -/datum/controller/process/garbage_collector - var/garbage_collect = 1 // Whether or not to actually do work - var/total_dels = 0 // number of total del()'s - var/tick_dels = 0 // number of del()'s we've done this tick - var/soft_dels = 0 - var/hard_dels = 0 // number of hard dels in total - var/list/destroyed = list() // list of refID's of things that should be garbage collected - // refID's are associated with the time at which they time out and need to be manually del() - // we do this so we aren't constantly locating them and preventing them from being gc'd - - var/list/logging = list() // list of all types that have failed to GC associated with the number of times that's happened. - // the types are stored as strings - -/datum/controller/process/garbage_collector/setup() - name = "garbage" - schedule_interval = 5 SECONDS - start_delay = 3 - - if(!garbage_collector) - garbage_collector = src - - for(var/garbage in delayed_garbage) - qdel(garbage) - delayed_garbage.Cut() - delayed_garbage = null - -#ifdef GC_FINDREF -world/loop_checks = 0 -#endif - -/datum/controller/process/garbage_collector/doWork() - if(!garbage_collect) - return - - tick_dels = 0 - var/time_to_kill = world.time - GC_COLLECTION_TIMEOUT - var/checkRemain = GC_COLLECTIONS_PER_RUN - var/remaining_force_dels = GC_FORCE_DEL_PER_RUN - - - while(destroyed.len && --checkRemain >= 0) - if(remaining_force_dels <= 0) - #ifdef GC_DEBUG - testing("GC: Reached max force dels per tick [dels] vs [maxDels]") - #endif - break // Server's already pretty pounded, everything else can wait 2 seconds - var/refID = destroyed[1] - var/GCd_at_time = destroyed[refID] - if(GCd_at_time > time_to_kill) - #ifdef GC_DEBUG - testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]") - #endif - break // Everything else is newer, skip them - var/datum/A = locate(refID) - #ifdef GC_DEBUG - testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]") - #endif - if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake - // Something's still referring to the qdel'd object. Kill it. - testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --") - logging["[A.type]"]++ - del(A) - - hard_dels++ - remaining_force_dels-- - else - #ifdef GC_DEBUG - testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]") - #endif - soft_dels++ - tick_dels++ - total_dels++ - destroyed.Cut(1, 2) - SCHECK - -#undef GC_FORCE_DEL_PER_TICK -#undef GC_COLLECTION_TIMEOUT -#undef GC_COLLECTIONS_PER_TICK - -#ifdef GC_FINDREF -/datum/controller/process/garbage_collector/proc/LookForRefs(var/datum/D, var/list/targ) - . = 0 - for(var/V in D.vars) - if(V == "contents") - continue - if(istype(D.vars[V], /atom)) - var/atom/A = D.vars[V] - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], var [V]") - . += 1 - else if(islist(D.vars[V])) - . += LookForListRefs(D.vars[V], targ, D, V) - -/datum/controller/process/garbage_collector/proc/LookForListRefs(var/list/L, var/list/targ, var/datum/D, var/V) - . = 0 - for(var/F in L) - if(istype(F, /atom)) - var/atom/A = F - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], list [V]") - . += 1 - if(islist(F)) - . += LookForListRefs(F, targ, D, "[F] in list [V]") -#endif - -/datum/controller/process/garbage_collector/proc/AddTrash(datum/A) - if(!istype(A) || !isnull(A.gcDestroyed)) - return - #ifdef GC_DEBUG - testing("GC: AddTrash(\ref[A] - [A.type])") - #endif - A.gcDestroyed = world.time - destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list. - destroyed["\ref[A]"] = world.time - -/datum/controller/process/garbage_collector/statProcess() - ..() - stat(null, "[garbage_collect ? "On" : "Off"], [destroyed.len] queued") - stat(null, "Dels: [total_dels], [soft_dels] soft, [hard_dels] hard, [tick_dels] last run") - - -// Tests if an atom has been deleted. -/proc/deleted(atom/A) - return !A || !isnull(A.gcDestroyed) - -// Should be treated as a replacement for the 'del' keyword. -// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(var/datum/A) - if(!A) - return - if(!istype(A)) - warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") - crash_with("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") - del(A) - if(garbage_collector) - garbage_collector.total_dels++ - garbage_collector.hard_dels++ - else if(isnull(A.gcDestroyed)) - // Let our friend know they're about to get collected - . = !A.Destroy() - if(. && A) - A.finalize_qdel() - -/datum/proc/finalize_qdel() - del(src) - -/atom/finalize_qdel() - if(garbage_collector) - garbage_collector.AddTrash(src) - else - delayed_garbage |= src - -/icon/finalize_qdel() - del(src) - -/image/finalize_qdel() - del(src) - -/mob/finalize_qdel() - del(src) - -/turf/finalize_qdel() - del(src) - -// Default implementation of clean-up code. -// This should be overridden to remove all references pointing to the object being destroyed. -// Return true if the the GC controller should allow the object to continue existing. -/datum/proc/Destroy() - nanomanager.close_uis(src) - tag = null - return - -#ifdef TESTING -/client/var/running_find_references - -/mob/verb/create_thing() - set category = "Debug" - set name = "Create Thing" - - var/path = input("Enter path") - var/atom/thing = new path(loc) - thing.find_references() - -/atom/verb/find_references() - set category = "Debug" - set name = "Find References" - set background = 1 - set src in world - - if(!usr || !usr.client) - return - - if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - return - - if(alert("Running this will create a lot of lag until it finishes. You can cancel it by running it again. Would you like to begin the search?", "Find References", "Yes", "No") == "No") - return - - // Remove this object from the list of things to be auto-deleted. - if(garbage_collector) - garbage_collector.destroyed -= "\ref[src]" - - usr.client.running_find_references = type - testing("Beginning search for references to a [type].") - var/list/things = list() - for(var/client/thing) - things += thing - for(var/datum/thing) - things += thing - for(var/atom/thing) - things += thing - testing("Collected list of things in search for references to a [type]. ([things.len] Thing\s)") - for(var/datum/thing in things) - if(!usr.client.running_find_references) return - for(var/varname in thing.vars) - var/variable = thing.vars[varname] - if(variable == src) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] var.") - else if(islist(variable)) - if(src in variable) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] list var.") - testing("Completed search for references to a [type].") - usr.client.running_find_references = null - -/client/verb/purge_all_destroyed_objects() - set category = "Debug" - if(garbage_collector) - while(garbage_collector.destroyed.len) - var/datum/o = locate(garbage_collector.destroyed[1]) - if(istype(o) && o.gcDestroyed) - del(o) - garbage_collector.dels++ - garbage_collector.destroyed.Cut(1, 2) -#endif - -#ifdef GC_DEBUG -#undef GC_DEBUG -#endif - -#ifdef GC_FINDREF -#undef GC_FINDREF -#endif \ No newline at end of file diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 405615dc1f..1fd1f8ce45 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -20,7 +20,7 @@ /datum/controller/process/machinery/proc/internal_process_machinery() for(last_object in machines) var/obj/machinery/M = last_object - if(M && !M.gcDestroyed) + if(M && !QDELETED(M)) if(M.process() == PROCESS_KILL) //M.inMachineList = 0 We don't use this debugging function machines.Remove(M) @@ -34,7 +34,7 @@ /datum/controller/process/machinery/proc/internal_process_power() for(last_object in powernets) var/datum/powernet/powerNetwork = last_object - if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed)) + if(istype(powerNetwork) && !QDELETED(powerNetwork)) powerNetwork.reset() SCHECK continue @@ -52,7 +52,7 @@ /datum/controller/process/machinery/proc/internal_process_pipenets() for(last_object in pipe_networks) var/datum/pipe_network/pipeNetwork = last_object - if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed)) + if(istype(pipeNetwork) && !QDELETED(pipeNetwork)) pipeNetwork.process() SCHECK continue diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm index 8681803ac4..6b623e7730 100644 --- a/code/controllers/Processes/mob.dm +++ b/code/controllers/Processes/mob.dm @@ -14,7 +14,7 @@ /datum/controller/process/mob/doWork() for(last_object in mob_list) var/mob/M = last_object - if(M && isnull(M.gcDestroyed)) + if(M && !QDELETED(M)) try M.Life() catch(var/exception/e) diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm index 49b9048c07..21d2f8e5f0 100644 --- a/code/controllers/Processes/nanoui.dm +++ b/code/controllers/Processes/nanoui.dm @@ -9,7 +9,7 @@ /datum/controller/process/nanoui/doWork() for(last_object in nanomanager.processing_uis) var/datum/nanoui/NUI = last_object - if(istype(NUI) && isnull(NUI.gcDestroyed)) + if(istype(NUI) && !QDELETED(NUI)) try NUI.process() catch(var/exception/e) diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm index 1010c8cc97..6032cbb541 100644 --- a/code/controllers/Processes/obj.dm +++ b/code/controllers/Processes/obj.dm @@ -11,7 +11,7 @@ /datum/controller/process/obj/doWork() for(last_object in processing_objects) var/datum/O = last_object - if(O && isnull(O.gcDestroyed)) + if(!QDELETED(O)) try O:process() catch(var/exception/e) diff --git a/code/controllers/Processes/scheduler.dm b/code/controllers/Processes/scheduler.dm index 276249bd55..fb9f85d7c4 100644 --- a/code/controllers/Processes/scheduler.dm +++ b/code/controllers/Processes/scheduler.dm @@ -30,8 +30,8 @@ // Note: We won't be informed about tasks being destroyed, but this is the best we can do. /datum/controller/process/scheduler/copyStateFrom(var/datum/controller/process/scheduler/target) scheduled_tasks = list() - for(var/st in target.scheduled_tasks) - if(!deleted(st) && istype(st, /datum/scheduled_task)) + for(var/datum/scheduled_task/st in target.scheduled_tasks) + if(!QDELETED(st) && istype(st)) schedule(st) scheduler = src diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 98c6a5d89d..0589d5fa7f 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -33,13 +33,13 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/Initialize() set waitfor = 0 Failsafe.Loop() - if(!deleted(src)) + if(!QDELETED(src)) qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us /datum/controller/failsafe/Destroy() running = FALSE ..() - // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + return QDEL_HINT_HARDDEL_NOW /datum/controller/failsafe/proc/Loop() while(running) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 981cf6d2bb..360b739bad 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -66,7 +66,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING /datum/controller/master/Destroy() ..() // Tell qdel() to Del() this object. - // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + return QDEL_HINT_HARDDEL_NOW /datum/controller/master/Shutdown() processing = FALSE diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index a5901a4906..fef25b9d10 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -74,8 +74,8 @@ datum/controller/game_controller/proc/setup_objects() sleep(1) admin_notice("Initializing objects", R_DEBUG) - for(var/obj/object in world) - if(isnull(object.gcDestroyed)) + for(var/atom/movable/object in world) + if(!QDELETED(object)) object.initialize() CHECK_SLEEP_MASTER sleep(1) @@ -103,7 +103,7 @@ datum/controller/game_controller/proc/setup_objects() admin_notice("Initializing turbolifts", R_DEBUG) for(var/thing in turbolifts) - if(!deleted(thing)) - var/obj/turbolift_map_holder/lift = thing + var/obj/turbolift_map_holder/lift = thing + if(!QDELETED(lift)) lift.initialize() CHECK_SLEEP_MASTER diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm new file mode 100644 index 0000000000..e849b64be6 --- /dev/null +++ b/code/controllers/subsystems/garbage.dm @@ -0,0 +1,354 @@ +var/datum/controller/subsystem/garbage_collector/SSgarbage + +/datum/controller/subsystem/garbage_collector + name = "Garbage" + priority = 15 + wait = 5 + flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + + var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object + var/delslasttick = 0 // number of del()'s we've done this tick + var/gcedlasttick = 0 // number of things that gc'ed last tick + var/totaldels = 0 + var/totalgcs = 0 + + var/highest_del_time = 0 + var/highest_del_tickusage = 0 + + var/list/queue = list() // list of refID's of things that should be garbage collected + // refID's are associated with the time at which they time out and need to be manually del() + // we do this so we aren't constantly locating them and preventing them from being gc'd + + var/list/tobequeued = list() //We store the references of things to be added to the queue seperately so we can spread out GC overhead over a few ticks + + var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened. + // the types are stored as strings + var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call + + var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT + // all types that did not respect qdel(A, force=TRUE) and returned one + // of the immortality qdel hints + var/list/noforcerespect = list() + +#ifdef TESTING + var/list/qdel_list = list() // list of all types that have been qdel()eted +#endif + +/datum/controller/subsystem/garbage_collector/New() + NEW_SS_GLOBAL(SSgarbage) + +/datum/controller/subsystem/garbage_collector/stat_entry(msg) + msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" + msg += "GR:" + if (!(delslasttick+gcedlasttick)) + msg += "n/a|" + else + msg += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|" + + msg += "TD:[totaldels]|TG:[totalgcs]|" + if (!(totaldels+totalgcs)) + msg += "n/a|" + else + msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" + ..(msg) + +/datum/controller/subsystem/garbage_collector/fire() + HandleToBeQueued() + if(state == SS_RUNNING) + HandleQueue() + +//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. +//Don't attempt to optimize, not worth the effort. +/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() + var/list/tobequeued = src.tobequeued + var/starttime = world.time + var/starttimeofday = world.timeofday + while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/ref = tobequeued[1] + Queue(ref) + tobequeued.Cut(1, 2) + +/datum/controller/subsystem/garbage_collector/proc/HandleQueue() + delslasttick = 0 + gcedlasttick = 0 + var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() + var/list/queue = src.queue + var/starttime = world.time + var/starttimeofday = world.timeofday + while(queue.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/refID = queue[1] + if (!refID) + queue.Cut(1, 2) + continue + + var/GCd_at_time = queue[refID] + if(GCd_at_time > time_to_kill) + break // Everything else is newer, skip them + queue.Cut(1, 2) + var/datum/A + A = locate(refID) + if (A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake + #ifdef GC_FAILURE_HARD_LOOKUP + A.find_references() + #endif + + // Something's still referring to the qdel'd object. Kill it. + var/type = A.type + testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --") + didntgc["[type]"]++ + var/time = world.timeofday + var/tick = world.tick_usage + var/ticktime = world.time + del(A) + tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + + if (tick > highest_del_tickusage) + highest_del_tickusage = tick + time = world.timeofday - time + if (!time && TICK_DELTA_TO_MS(tick) > 1) + time = TICK_DELTA_TO_MS(tick)/100 + if (time > highest_del_time) + highest_del_time = time + if (time > 10) + log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)") + message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") + postpone(time/5) + break + ++delslasttick + ++totaldels + else + ++gcedlasttick + ++totalgcs + +/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) + if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gc_destroyed = GC_QUEUED_FOR_QUEUING + +/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) + if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) + return + if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) + del(A) + return + var/gctime = world.time + var/refid = "\ref[A]" + + A.gc_destroyed = gctime + + if (queue[refid]) + queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. + + queue[refid] = gctime + +/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) + if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gc_destroyed = GC_QUEUED_FOR_HARD_DEL + +/datum/controller/subsystem/garbage_collector/Recover() + if (istype(SSgarbage.queue)) + queue |= SSgarbage.queue + if (istype(SSgarbage.tobequeued)) + tobequeued |= SSgarbage.tobequeued + +// Should be treated as a replacement for the 'del' keyword. +// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. +/proc/qdel(datum/D, force=FALSE) + if(!D) + return +#ifdef TESTING + SSgarbage.qdel_list += D.type +#endif + if(!istype(D)) + log_debug("qdel() was passed [log_info_line(D)]. qdel() can only handle instances of (sub)type /datum.") + del(D) + else if(isnull(D.gc_destroyed)) + D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. + if(world.time != start_time) + SSgarbage.sleptDestroy[D.type]++ + if(!D) + return + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_IWILLGC) + D.gc_destroyed = world.time + return + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + D.gc_destroyed = null //clear the gc variable (important!) + return + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + if(!SSgarbage.noforcerespect[D.type]) + SSgarbage.noforcerespect[D.type] = D.type + crash_with("[D.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() + SSgarbage.HardQueue(D) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + del(D) + if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.QueueForQueuing(D) + #ifdef TESTING + D.find_references() + #endif + else + if(!SSgarbage.noqdelhint[D.type]) + SSgarbage.noqdelhint[D.type] = D.type + crash_with("[D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") + SSgarbage.QueueForQueuing(D) + else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + +// Default implementation of clean-up code. +// This should be overridden to remove all references pointing to the object being destroyed. +// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. +/datum/proc/Destroy(force=FALSE) + tag = null + nanomanager.close_uis(src) + return QDEL_HINT_QUEUE + +/datum/var/gc_destroyed //Time when this object was destroyed. + +#ifdef TESTING +/datum/var/running_find_references +/datum/var/last_find_references = 0 + +/datum/verb/find_refs() + set category = "Debug" + set name = "Find References" + set background = 1 + set src in world + + find_references(FALSE) + +/datum/proc/find_references(skip_alert) + running_find_references = type + if(usr && usr.client) + if(usr.client.running_find_references) + testing("CANCELLED search for references to a [usr.client.running_find_references].") + usr.client.running_find_references = null + running_find_references = null + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + return + + if(!skip_alert) + if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No") + running_find_references = null + return + + //this keeps the garbage collector from failing to collect objects being searched for in here + SSgarbage.can_fire = 0 + + if(usr && usr.client) + usr.client.running_find_references = type + + testing("Beginning search for references to a [type].") + last_find_references = world.time + find_references_in_globals() + for(var/datum/thing in world) + DoSearchVar(thing, "WorldRef: [thing]") + testing("Completed search for references to a [type].") + if(usr && usr.client) + usr.client.running_find_references = null + running_find_references = null + + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + +/client/verb/purge_all_destroyed_objects() + set category = "Debug" + if(SSgarbage) + while(SSgarbage.queue.len) + var/datum/o = locate(SSgarbage.queue[1]) + if(istype(o) && o.gc_destroyed) + del(o) + SSgarbage.totaldels++ + SSgarbage.queue.Cut(1, 2) + +/datum/verb/qdel_then_find_references() + set category = "Debug" + set name = "qdel() then Find References" + set background = 1 + set src in world + + qdel(src) + if(!running_find_references) + find_references(TRUE) + +/client/verb/show_qdeleted() + set category = "Debug" + set name = "Show qdel() Log" + set desc = "Render the qdel() log and display it" + + var/dat = "List of things that have been qdel()eted this round

    " + + var/tmplist = list() + for(var/elem in SSgarbage.qdel_list) + if(!(elem in tmplist)) + tmplist[elem] = 0 + tmplist[elem]++ + + for(var/path in tmplist) + dat += "[path] - [tmplist[path]] times
    " + + usr << browse(dat, "window=qdeletedlog") + +/datum/proc/DoSearchVar(X, Xname) + if(usr && usr.client && !usr.client.running_find_references) return + if(istype(X, /datum)) + var/datum/D = X + if(D.last_find_references == last_find_references) + return + D.last_find_references = last_find_references + for(var/V in D.vars) + for(var/varname in D.vars) + var/variable = D.vars[varname] + if(variable == src) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") + else if(islist(variable)) + if(src in variable) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in variable) + DoSearchVar(I, TRUE) + else + DoSearchVar(variable, "[Xname]: [varname]") +#endif + else if(islist(X)) + if(src in X) + testing("Found [src.type] \ref[src] in list [Xname].") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in X) + DoSearchVar(I, Xname + ": list") +#else + CHECK_TICK +#endif + +//if find_references isn't working for some datum +//update this list using tools/GenerateGlobalVarAccess +/datum/proc/find_references_in_globals() + // TODO - Impement Global Variable Access + // for(var/global_var in _all_globals) + // DoSearchVar(readglobal(global_var), "Global: [global_var]") +#endif + + +/image/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm index 3bf80f06d0..d511b5d233 100644 --- a/code/datums/helper_datums/global_iterator.dm +++ b/code/datums/helper_datums/global_iterator.dm @@ -155,4 +155,5 @@ Data storage vars: tag = null arg_list.Cut() stop() + return QDEL_HINT_LETMELIVE //Do not call ..() diff --git a/code/datums/repositories/decls.dm b/code/datums/repositories/decls.dm index e87be74f53..61b24c21e9 100644 --- a/code/datums/repositories/decls.dm +++ b/code/datums/repositories/decls.dm @@ -36,4 +36,4 @@ /decls/Destroy() crash_with("Prevented attempt to delete a decl instance: [log_info_line(src)]") - return 1 // Prevents Decl destruction \ No newline at end of file + return QDEL_HINT_LETMELIVE // Prevents Decl destruction diff --git a/code/datums/weakref.dm b/code/datums/weakref.dm index 1a7d844ca8..348d73b0b2 100644 --- a/code/datums/weakref.dm +++ b/code/datums/weakref.dm @@ -7,7 +7,9 @@ //obtain a weak reference to a datum /proc/weakref(datum/D) - if(D.gcDestroyed) + if(!istype(D)) + return + if(QDELETED(D)) return if(!D.weakref) D.weakref = new/weakref(D) @@ -22,7 +24,7 @@ /weakref/Destroy() // A weakref datum should not be manually destroyed as it is a shared resource, // rather it should be automatically collected by the BYOND GC when all references are gone. - return 0 + return QDEL_HINT_LETMELIVE /weakref/proc/resolve() var/datum/D = locate(ref) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index fe9f99b032..64ae0722f8 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -23,16 +23,6 @@ if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING) initialize() -/atom/movable/Del() - if(isnull(gcDestroyed) && loc) - testing("GC: -- [type] was deleted via del() rather than qdel() --") - crash_with("GC: -- [type] was deleted via del() rather than qdel() --") // stick a stack trace in the runtime logs -// else if(isnull(gcDestroyed)) -// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel() -// else -// testing("GC: [type] was deleted via GC with qdel()") - ..() - /atom/movable/Destroy() . = ..() if(reagents) @@ -53,7 +43,7 @@ pulledby = null /atom/movable/proc/initialize() - if(!isnull(gcDestroyed)) + if(QDELETED(src)) crash_with("GC: -- [type] had initialize() called after qdel() --") /atom/movable/Bump(var/atom/A, yes) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index 6f549d15f4..90ac43379f 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -37,7 +37,6 @@ var/global/universe_has_ended = 0 // Apply changes when entering state /datum/universal_state/supermatter_cascade/OnEnter() set background = 1 - garbage_collector.garbage_collect = 0 world << "You are blinded by a brilliant flash of energy." world << sound('sound/effects/cascade.ogg') diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 2b4eae9a0d..2e10ed3b1b 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -73,7 +73,7 @@ visible_message("A red light flashes on \the [src].") return cable.use(amount) - if(deleted(cable)) + if(QDELETED(cable)) cable = null return 1 diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index b7bcc53e91..deee8ed76b 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -21,9 +21,9 @@ return 1 /obj/machinery/portable_atmospherics/Destroy() - qdel(air_contents) - qdel(holding) - ..() + qdel_null(air_contents) + qdel_null(holding) + . = ..() /obj/machinery/portable_atmospherics/initialize() . = ..() @@ -40,11 +40,6 @@ else update_icon() -/obj/machinery/portable_atmospherics/Destroy() - qdel(air_contents) - - ..() - /obj/machinery/portable_atmospherics/proc/StandardAirMix() return list( "oxygen" = O2STANDARD * MolesForPressure(), diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index ef7c4af9a2..e1e7200d51 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -73,8 +73,7 @@ /obj/machinery/door/Destroy() density = 0 update_nearby_tiles() - ..() - return + . = ..() /obj/machinery/door/process() if(close_door_at && world.time >= close_door_at) diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index e609efdf26..04c4b5452c 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -150,7 +150,7 @@ var/list/floor_light_cache = list() var/area/A = get_area(src) if(A) on = 0 - ..() + . = ..() /obj/machinery/floor_light/cultify() default_light_colour = "#FF0000" diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 4abdb685d0..06228dd86f 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -485,7 +485,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -504,7 +504,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -523,7 +523,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -542,7 +542,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -559,7 +559,7 @@ Buildable meters P.initialize_directions = pipe_dir //this var it's used to know if the pipe is bent or not P.initialize_directions_he = pipe_dir P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -594,7 +594,7 @@ Buildable meters var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 M.initialize() - if (deleted(M)) + if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() @@ -663,7 +663,7 @@ Buildable meters var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 M.initialize() - if (deleted(M)) + if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() @@ -740,7 +740,7 @@ Buildable meters P.initialize_directions = src.get_pdir() P.initialize_directions_he = src.get_hdir() P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext //"There's nothing to connect this pipe to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 P.build_network() @@ -922,7 +922,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 09ff0075db..5d7d16a126 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -140,18 +140,14 @@ cell = null internal_tank = null - qdel(pr_int_temp_processor) - qdel(pr_inertial_movement) - qdel(pr_give_air) - qdel(pr_internal_damage) - qdel(spark_system) - pr_int_temp_processor = null - pr_give_air = null - pr_internal_damage = null - spark_system = null + qdel_null(pr_int_temp_processor) + qdel_null(pr_inertial_movement) + qdel_null(pr_give_air) + qdel_null(pr_internal_damage) + qdel_null(spark_system) mechas_list -= src //global mech list - ..() + . = ..() //////////////////////// ////// Helpers ///////// diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 88b53bd342..35697914ee 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -169,7 +169,7 @@ valve_open = 0 - if(deleted(tank_one) || deleted(tank_two)) + if(QDELETED(tank_one) || QDELETED(tank_two)) return var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 84bee72558..649b5677ca 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -27,15 +27,10 @@ /obj/item/weapon/flamethrower/Destroy() - if(weldtool) - qdel(weldtool) - if(igniter) - qdel(igniter) - if(ptank) - qdel(ptank) - ..() - return - + qdel_null(weldtool) + qdel_null(igniter) + qdel_null(ptank) + . = ..() /obj/item/weapon/flamethrower/process() if(!lit) diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 31231964cb..c778ec07a9 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -71,7 +71,7 @@ /obj/item/weapon/material/Destroy() processing_objects -= src - ..() + . = ..() /obj/item/weapon/material/apply_hit_effect() ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 928246b2b5..eab315809f 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -10,7 +10,7 @@ /obj/structure/Destroy() if(parts) new parts(loc) - ..() + . = ..() /obj/structure/attack_hand(mob/user) if(breakable) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 877c91c72a..6597f62107 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -39,7 +39,7 @@ spawn(1) 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. - ..() + . = ..() /obj/structure/lattice/ex_act(severity) switch(severity) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3f2e0064f2..d34b210b99 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -47,6 +47,7 @@ /turf/Destroy() turfs -= src ..() + return QDEL_HINT_IWILLGC /turf/ex_act(severity) return 0 diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 67eefc018d..95945f82e0 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -1,8 +1,4 @@ -// Keep these two together, they *must* be defined on both -// If /client ever becomes /datum/client or similar, they can be merged -/client/proc/get_view_variables_header() - return "[src]" /datum/proc/get_view_variables_header() return "[src]" @@ -31,9 +27,6 @@ "} -// Same for these as for get_view_variables_header() above -/client/proc/get_view_variables_options() - return "" /datum/proc/get_view_variables_options() return "" diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 169ab9b6a0..1273b004a4 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -187,4 +187,4 @@ if(radio_controller) radio_controller.remove_object(src,frequency) frequency = 0 - ..() + . = ..() diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index b559652132..5e5a176128 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -1,4 +1,8 @@ /client + ////////////////////// + //BLACK MAGIC THINGS// + ////////////////////// + parent_type = /datum //////////////// //ADMIN THINGS// //////////////// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index c89dcc626f..f19d5a6f52 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -181,6 +181,9 @@ clients -= src return ..() +/client/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW // here because it's similar to below diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index fca9f3abaf..0dbe4c9eea 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -116,7 +116,7 @@ var/obj/effect/plant/child = new(get_turf(src),seed,parent) spawn(1) // This should do a little bit of animation. - if(deleted(child)) + if(QDELETED(child)) return //move out to the destination diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 60c684fd86..6d912cd862 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -131,4 +131,4 @@ T.lighting_overlay = null T.luminosity = 1 - return ..() + . = ..() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 43ee891646..877dff5ece 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -448,7 +448,7 @@ var/global/list/damage_icon_parts = list() //For legacy support. /mob/living/carbon/human/regenerate_icons() ..() - if(transforming) return + if(transforming || QDELETED(src)) return update_mutations(0) update_body(0) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index c7fb1d6728..7d5c270f9b 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -184,7 +184,7 @@ wrapped.force = 0.0 wrapped.attack(M,user) M.attackby(wrapped, user) //attackby reportedly gets procced by being clicked on, at least according to Anewbe. - if(deleted(wrapped) || wrapped.loc != src.loc) + if(QDELETED(wrapped) || wrapped.loc != src.loc) wrapped = null return 1 return 0 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 8c0a1f1802..b018fa61f2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -14,6 +14,7 @@ spellremove(src) ghostize() ..() + return QDEL_HINT_HARDDEL_NOW /mob/proc/remove_screen_obj_references() hands = null diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 80f68b979d..be114228de 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -83,7 +83,9 @@ //This makes sure that the grab screen object is displayed in the correct hand. -/obj/item/weapon/grab/proc/synch() +/obj/item/weapon/grab/proc/synch() //why is this needed? + if(QDELETED(src)) + return if(affecting) if(assailant.r_hand == src) hud.screen_loc = ui_rhand @@ -91,7 +93,7 @@ hud.screen_loc = ui_lhand /obj/item/weapon/grab/process() - if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC + if(QDELETED(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC return PROCESS_KILL confirm() @@ -221,6 +223,8 @@ animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING) /obj/item/weapon/grab/proc/s_click(obj/screen/S) + if(QDELETED(src)) + return if(!affecting) return if(state == GRAB_UPGRADING) @@ -291,6 +295,8 @@ return 1 /obj/item/weapon/grab/attack(mob/M, mob/living/user) + if(QDELETED(src)) + return if(!affecting) return if(world.time < (last_action + 20)) @@ -336,7 +342,7 @@ /obj/item/weapon/grab/dropped() loc = null - if(!destroying) + if(!QDELETED(src)) qdel(src) /obj/item/weapon/grab/proc/reset_kill_state() diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 1390c89b29..e0809e32b5 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -67,10 +67,8 @@ brainmob.client.screen.len = null //clear the hud /obj/item/organ/internal/brain/Destroy() - if(brainmob) - qdel(brainmob) - brainmob = null - ..() + qdel_null(brainmob) + . = ..() /obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 49c1099184..60efe9893d 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -23,7 +23,7 @@ chemical_reagents_list[D.id] = D /datum/reagents/Destroy() - ..() + . = ..() if(chemistryProcess) chemistryProcess.active_holders -= src diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 78b33ef36e..ccf7c62ac1 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -488,7 +488,7 @@ var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) if(amount_to_take) stack.use(amount_to_take) - if(deleted(stack)) + if(QDELETED(stack)) holdingitems -= stack beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET)) continue diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 723db2ace7..f23e37f516 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -118,8 +118,8 @@ return null /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references - ..() holder = null + . = ..() /* DEPRECATED - TODO: REMOVE EVERYWHERE */ diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 86d5d58f65..df8bd685ab 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -225,8 +225,8 @@ /obj/item/weapon/reagent_containers/food/snacks/Destroy() if(contents) for(var/atom/movable/something in contents) - something.loc = get_turf(src) - ..() + something.dropInto(loc) + . = ..() //////////////////////////////////////////////////////////////////////////////// /// FOOD END diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 4872131429..d7ce2063b2 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -55,7 +55,7 @@ check_failure() set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) ..() @@ -64,7 +64,7 @@ ..() check_failure() set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) /obj/machinery/shield/ex_act(severity) switch(severity) @@ -114,7 +114,7 @@ //The shield becomes dense to absorb the blow.. purely asthetic. set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) ..() return diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index 620a475475..bf48f3540b 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -81,7 +81,7 @@ var/list/table_icon_cache = list() update_connections(1) // Update tables around us to ignore us (material=null forces no connections) for(var/obj/structure/table/T in oview(src, 1)) T.update_icon() - ..() + . = ..() /obj/structure/table/examine(mob/user) . = ..() diff --git a/vorestation.dme b/vorestation.dme index 0876c1ef62..17631a1faf 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -44,6 +44,7 @@ #include "code\__defines\nifsoft.dm" #include "code\__defines\planets.dm" #include "code\__defines\process_scheduler.dm" +#include "code\__defines\qdel.dm" #include "code\__defines\research.dm" #include "code\__defines\roguemining_vr.dm" #include "code\__defines\species_languages.dm" @@ -168,7 +169,6 @@ #include "code\controllers\Processes\emergencyShuttle.dm" #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\game_master.dm" -#include "code\controllers\Processes\garbage.dm" #include "code\controllers\Processes\inactivity.dm" #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\machinery.dm" @@ -186,6 +186,7 @@ #include "code\controllers\Processes\vote.dm" #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" +#include "code\controllers\subsystems\garbage.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\browser.dm" From ae4458e4ae2a02f6fc38621360e30e0e12a5f391 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 18:02:16 -0400 Subject: [PATCH 193/261] Update radiation system for the new garbage collector. --- code/controllers/Processes/radiation.dm | 18 +++++++++--------- code/datums/repositories/radiation.dm | 8 -------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm index 192acf5d5c..71d9c60233 100644 --- a/code/controllers/Processes/radiation.dm +++ b/code/controllers/Processes/radiation.dm @@ -15,10 +15,10 @@ /datum/controller/process/radiation/proc/sources_decay() var/list/sources = linked.sources for(var/thing in sources) - if(deleted(thing)) - sources.Remove(thing) - continue var/datum/radiation_source/S = thing + if(QDELETED(S)) + sources.Remove(S) + continue if(S.decay) S.update_rad_power(S.rad_power - config.radiation_decay_rate) if(S.rad_power <= config.radiation_lower_limit) @@ -29,22 +29,22 @@ /datum/controller/process/radiation/proc/cache_expires() var/list/resistance_cache = linked.resistance_cache for(var/thing in resistance_cache) - if(deleted(thing)) - resistance_cache.Remove(thing) - continue var/turf/T = thing + if(QDELETED(T)) + resistance_cache.Remove(T) + continue 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 +// Step 3 - Registered irradiatable things are checked for radiation /datum/controller/process/radiation/proc/irradiate_targets() var/list/registered_listeners = living_mob_list // For now just use this. Nothing else is interested anyway. if(length(linked.sources) > 0) for(var/thing in registered_listeners) - if(deleted(thing)) - continue var/atom/A = thing + if(QDELETED(A)) + continue var/turf/T = get_turf(thing) var/rads = linked.get_rads_at_turf(T) if(rads) diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 0245bb801c..00c3532458 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -22,14 +22,6 @@ var/global/repository/radiation/radiation_repository = new() 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 From aab81abb1217807f26649c665f2f038dc1299f79 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 17:55:34 -0400 Subject: [PATCH 194/261] Remove redundant cleanup of /atom/var/reagents * /datum/reagents/Destroy() does everything /datum/reagents/delete() does and more, and delete() is called only from /obj/effect/Destroy() which is *itself* redundant with its parent /atom/movable/Destroy() --- code/game/objects/effects/effect_system.dm | 5 ----- code/modules/reagents/Chemistry-Holder.dm | 6 ------ 2 files changed, 11 deletions(-) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 2343871b95..4c930d23cf 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -13,11 +13,6 @@ would spawn and follow the beaker, even if it is carried or thrown. unacidable = 1//So effect are not targeted by alien acid. pass_flags = PASSTABLE | PASSGRILLE -/obj/effect/Destroy() - if(reagents) - reagents.delete() - return ..() - /datum/effect/effect/system var/number = 3 var/cardinals = 0 diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 60efe9893d..d634711379 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -79,12 +79,6 @@ total_volume += R.volume return -/datum/reagents/proc/delete() - for(var/datum/reagent/R in reagent_list) - R.holder = null - if(my_atom) - my_atom.reagents = null - /datum/reagents/proc/handle_reactions() if(chemistryProcess) chemistryProcess.mark_for_update(src) From 78e09305761f948c6435e9878e3f1d06dc2b72cf Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:50:38 -0400 Subject: [PATCH 195/261] Atmospherics Destroy() cleanup - return qdel hints. --- .../components/binary_devices/binary_atmos_base.dm | 4 +--- .../components/binary_devices/pipeturbine.dm | 4 +--- code/ATMOSPHERICS/components/omni_devices/filter.dm | 2 +- code/ATMOSPHERICS/components/portables_connector.dm | 4 +--- .../components/trinary_devices/trinary_base.dm | 4 +--- code/ATMOSPHERICS/components/tvalve.dm | 4 +--- code/ATMOSPHERICS/components/unary/unary_base.dm | 4 +--- code/ATMOSPHERICS/components/unary/vent_pump.dm | 12 ++++-------- code/ATMOSPHERICS/components/unary/vent_scrubber.dm | 13 ++++--------- code/ATMOSPHERICS/components/valve.dm | 4 +--- code/ATMOSPHERICS/datum_pipeline.dm | 6 ++---- 11 files changed, 18 insertions(+), 43 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 2ccfe0f2e8..ea604bc996 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -42,7 +42,7 @@ obj/machinery/atmospherics/binary return null Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -54,8 +54,6 @@ obj/machinery/atmospherics/binary node1 = null node2 = null - ..() - initialize() if(node1 && node2) return diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 5768def1ec..d0417e14dd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -36,7 +36,7 @@ initialize_directions = NORTH|SOUTH Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -48,8 +48,6 @@ node1 = null node2 = null - ..() - process() ..() if(anchored && !(stat&BROKEN)) diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index b2966ef431..feb1b5cb93 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -28,7 +28,7 @@ input = null output = null filters.Cut() - ..() + return ..() /obj/machinery/atmospherics/omni/filter/sort_ports() for(var/datum/omni_port/P in ports) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 4f6473fccf..9668f7a5a3 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -61,7 +61,7 @@ return null /obj/machinery/atmospherics/portables_connector/Destroy() - loc = null + . = ..() if(connected_device) connected_device.disconnect() @@ -72,8 +72,6 @@ node = null - ..() - /obj/machinery/atmospherics/portables_connector/initialize() if(node) return diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index fa066d978f..717540db69 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -51,7 +51,7 @@ obj/machinery/atmospherics/trinary return null Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -67,8 +67,6 @@ obj/machinery/atmospherics/trinary node2 = null node3 = null - ..() - initialize() if(node1 && node2 && node3) return diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index f93970a93f..a7deb70aba 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -100,7 +100,7 @@ return null /obj/machinery/atmospherics/tvalve/Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -116,8 +116,6 @@ node2 = null node3 = null - ..() - /obj/machinery/atmospherics/tvalve/proc/go_to_side() if(state) return 0 diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 20d37b309c..0372483c79 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -31,7 +31,7 @@ return null Destroy() - loc = null + . = ..() if(node) node.disconnect(src) @@ -39,8 +39,6 @@ node = null - ..() - initialize() if(node) return diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 00bc7e5772..c6121dea31 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -80,7 +80,10 @@ /obj/machinery/atmospherics/unary/vent_pump/Destroy() unregister_radio(src, frequency) - ..() + if(initial_loc) + initial_loc.air_vent_info -= id_tag + initial_loc.air_vent_names -= id_tag + return ..() /obj/machinery/atmospherics/unary/vent_pump/high_volume name = "Large Air Vent" @@ -414,13 +417,6 @@ new /obj/item/pipe(loc, make_from=src) qdel(src) -/obj/machinery/atmospherics/unary/vent_pump/Destroy() - if(initial_loc) - initial_loc.air_vent_info -= id_tag - initial_loc.air_vent_names -= id_tag - ..() - return - #undef DEFAULT_PRESSURE_DELTA #undef EXTERNAL_PRESSURE_BOUND diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 06d1bce437..3fccbb50f3 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -44,8 +44,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() unregister_radio(src, frequency) - ..() - + if(initial_loc) + initial_loc.air_scrub_info -= id_tag + initial_loc.air_scrub_names -= id_tag + return ..() /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) if(!check_icon_cache()) @@ -285,10 +287,3 @@ user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" else user << "You are too far away to read the gauge." - -/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() - if(initial_loc) - initial_loc.air_scrub_info -= id_tag - initial_loc.air_scrub_names -= id_tag - ..() - return diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 3cd77597b3..01e6e977bb 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -72,7 +72,7 @@ return null /obj/machinery/atmospherics/valve/Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -84,8 +84,6 @@ node1 = null node2 = null - ..() - /obj/machinery/atmospherics/valve/proc/open() if(open) return 0 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 44c7cd2590..0aece2d139 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -10,14 +10,12 @@ datum/pipeline var/alert_pressure = 0 Destroy() - if(network) - qdel(network) + qdel_null(network) if(air && air.volume) temporarily_store_air() - qdel(air) - ..() + . = ..() proc/process()//This use to be called called from the pipe networks From eb1712ee580e9b37c39a7909827129264937689e Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:51:00 -0400 Subject: [PATCH 196/261] Pipe network datum Destroy() cleanup * Every pipe in a pipeline has a reference to the pipeline. This needs to be cleared, both so the pipeline can be gc'd, and also so the pipes don't try and keep using the qdel'd pipeline. * Same story for each pipeline in a pipe network, and each machine in a pipe network. * Pipe networks are also in the pipe_networks global list. While the controller would detect and remove it from the list on the next tick, cleaning up ourselves is the responsible thing to do. --- code/ATMOSPHERICS/datum_pipe_network.dm | 9 +++++++++ code/ATMOSPHERICS/datum_pipeline.dm | 2 ++ 2 files changed, 11 insertions(+) diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 7fe586733c..8441461342 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -16,6 +16,15 @@ datum/pipe_network ..() + Destroy() + pipe_networks -= src + for(var/datum/pipeline/line_member in line_members) + line_member.network = null + for(var/obj/machinery/atmospherics/normal_member in normal_members) + normal_member.reassign_network(src, null) + gases.Cut() // Do not qdel the gases, we don't own them + return ..() + proc/process() //Equalize gases amongst pipe if called for if(update) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 0aece2d139..0115c85c3d 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -14,6 +14,8 @@ datum/pipeline if(air && air.volume) temporarily_store_air() + for(var/obj/machinery/atmospherics/pipe/P in members) + P.parent = null . = ..() From 5a02b7e5c74ff72462b7fe9bc97a34dfa1b9b2a2 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:55:18 -0400 Subject: [PATCH 197/261] More and more Destroy() cleanups all across the board - Return qdel hints. --- code/_helpers/unsorted.dm | 7 ++++++ code/_onclick/hud/ability_screen_objects.dm | 2 +- code/_onclick/hud/action.dm | 5 +++- code/_onclick/hud/hud.dm | 2 +- code/_onclick/hud/screen_objects.dm | 2 +- code/_onclick/hud/spell_screen_objects.dm | 4 ++-- code/controllers/communications.dm | 1 - code/controllers/voting.dm | 8 ++++++- code/datums/wires/wires.dm | 1 + code/game/machinery/doors/airlock_control.dm | 6 ++--- code/game/machinery/hologram.dm | 2 +- code/game/machinery/pipe/pipelayer.dm | 5 ++-- code/game/objects/buckling.dm | 5 ---- code/game/objects/items/devices/PDA/PDA.dm | 15 ++++++++---- code/game/objects/items/devices/PDA/cart.dm | 8 +++---- .../devices/communicator/communicator.dm | 2 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../items/weapons/material/material_armor.dm | 2 +- code/game/objects/items/weapons/mop_deploy.dm | 12 +++++----- .../objects/items/weapons/storage/internal.dm | 2 +- .../objects/items/weapons/storage/storage.dm | 18 +++++++-------- .../game/objects/items/weapons/tanks/tanks.dm | 5 ++-- code/game/objects/structures.dm | 3 --- code/game/objects/structures/window.dm | 5 +--- .../spacesuits/rig/modules/utility.dm | 4 ++-- code/modules/lighting/lighting_corner.dm | 6 +++++ code/modules/lighting/lighting_overlay.dm | 23 +++++++++++-------- code/modules/mob/freelook/ai/eye.dm | 2 +- .../mob/freelook/ai/update_triggers.dm | 2 +- code/modules/mob/freelook/eye.dm | 6 ++++- .../mob/freelook/mask/update_triggers.dm | 2 +- code/modules/mob/freelook/update_triggers.dm | 4 ++-- code/modules/mob/freelook/visualnet.dm | 2 +- code/modules/mob/holder.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 23 ++++++++----------- code/modules/mob/living/silicon/silicon.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob_grab.dm | 6 +---- code/modules/mob/modifiers.dm | 2 +- code/modules/power/breaker_box.dm | 2 +- code/modules/power/cable.dm | 2 +- code/modules/power/grid_checker.dm | 2 +- code/modules/power/lighting.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/singularity/collector.dm | 2 +- .../Chemistry-Reagents-Toxins.dm | 2 +- code/modules/tables/update_triggers.dm | 4 +--- code/world.dm | 3 ++- maps/RandomZLevels/stationCollision.dm | 4 ++-- maps/~map_system/maps.dm | 9 ++++++-- 50 files changed, 131 insertions(+), 115 deletions(-) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 13e7577704..28868d0862 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1298,6 +1298,13 @@ var/mob/dview/dview_mob = new else living_mob_list -= src +/mob/dview/Destroy(var/force) + crash_with("Attempt to delete the dview_mob: [log_info_line(src)]") + if (!force) + return QDEL_HINT_LETMELIVE + global.dview_mob = new + return ..() + // call to generate a stack trace and print to runtime logs /proc/crash_with(msg) CRASH(msg) diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm index 2081e011b3..d29ef9dd96 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/ability_screen_objects.dm @@ -20,7 +20,7 @@ message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.") /obj/screen/movable/ability_master/Destroy() - ..() + . = ..() //Get rid of the ability objects. remove_all_abilities() ability_objects.Cut() diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 9781e9c236..7e03151fd6 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -30,6 +30,9 @@ /datum/action/Destroy() if(owner) Remove(owner) + target = null + qdel_null(button) + return ..() /datum/action/proc/Grant(mob/living/T) if(owner) @@ -45,7 +48,7 @@ if(button) if(T.client) T.client.screen -= button - del(button) + qdel_null(button) T.actions.Remove(src) T.update_action_buttons() owner = null diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 7a7d82d175..6e1b8b2c37 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -169,7 +169,7 @@ datum/hud/New(mob/owner) ..() /datum/hud/Destroy() - ..() + . = ..() grab_intent = null hurt_intent = null disarm_intent = null diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index e55323fb3a..35ef300978 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -46,7 +46,7 @@ var/obj/item/owner /obj/screen/item_action/Destroy() - ..() + . = ..() owner = null /obj/screen/item_action/Click() diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm index a599381730..e79db28713 100644 --- a/code/_onclick/hud/spell_screen_objects.dm +++ b/code/_onclick/hud/spell_screen_objects.dm @@ -13,7 +13,7 @@ var/mob/spell_holder /obj/screen/movable/spell_master/Destroy() - ..() + . = ..() for(var/obj/screen/spell/spells in spell_objects) spells.spellmaster = null spell_objects.Cut() @@ -156,7 +156,7 @@ var/icon/last_charged_icon /obj/screen/spell/Destroy() - ..() + . = ..() spell = null last_charged_icon = null if(spellmaster) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 796fb0b664..332ab9af52 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -314,7 +314,6 @@ var/global/datum/controller/radio/radio_controller devices_line -= null if (devices_line.len==0) devices -= devices_filter - del(devices_line) /datum/signal var/obj/source diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index aa06984f69..ba1bb23c33 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -23,9 +23,15 @@ var/global/list/round_voters = list() // Keeps track of the individuals voting f /datum/controller/vote/New() if(vote != src) if(istype(vote)) - del(vote) + Recover() + qdel(vote) vote = src +/datum/controller/vote/Destroy() + ..() + // Tell qdel() to Del() this object. + return QDEL_HINT_HARDDEL_NOW + /datum/controller/vote/proc/process() //called by master_controller if(mode) // No more change mode votes after the game has started. diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 066c357a22..c1ee225dce 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -48,6 +48,7 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown" /datum/wires/Destroy() holder = null + signallers.Cut() return ..() /datum/wires/proc/GenerateWires() diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 805bb7dba9..ba8aa85b2c 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -145,7 +145,7 @@ obj/machinery/door/airlock/New() obj/machinery/door/airlock/Destroy() if(frequency && radio_controller) radio_controller.remove_object(src,frequency) - ..() + return ..() obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' @@ -220,7 +220,7 @@ obj/machinery/airlock_sensor/New() obj/machinery/airlock_sensor/Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) - ..() + return ..() obj/machinery/airlock_sensor/airlock_interior command = "cycle_interior" @@ -292,7 +292,7 @@ obj/machinery/access_button/New() obj/machinery/access_button/Destroy() if(radio_controller) radio_controller.remove_object(src, frequency) - ..() + return ..() obj/machinery/access_button/airlock_interior frequency = 1379 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index ccdd4db155..c88fb4f31b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -214,7 +214,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/Destroy() for (var/mob/living/silicon/ai/master in masters) clear_holo(master) - ..() + return ..() /* Holographic project of everything else. diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 40726825a1..c960879e54 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -23,9 +23,8 @@ update_icon() /obj/machinery/pipelayer/Destroy() - qdel(W) - W = null - ..() + qdel_null(W) + . = ..() /obj/machinery/pipelayer/RefreshParts() var/mb_rating = 0 diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 8dfe627030..c963a902bb 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -21,11 +21,6 @@ if(can_buckle && istype(M)) user_buckle_mob(M, user) -//Cleanup -/obj/Del() - unbuckle_mob() - return ..() - /obj/Destroy() unbuckle_mob() return ..() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 27f1d8d4c1..0f92b5ca09 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1469,11 +1469,16 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/Destroy() PDAs -= src - /* VOREStation Removal - if (src.id && prob(90)) //IDs are kept in 90% of the cases - src.id.loc = get_turf(src.loc) - */ - ..() + // VOREStation Edit - Always destroy IDs + // if (src.id && prob(90)) //IDs are kept in 90% of the cases + // src.id.forceMove(get_turf(src.loc)) + // else + // qdel_null(src.id) + qdel_null(src.id) + // VOREStation Edit End + qdel_null(src.cartridge) + qdel_null(src.pai) + return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. if (istype(AM, /mob/living)) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 2c4368736e..c53ba712db 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -78,6 +78,10 @@ var/list/civilian_cartridges = list( var/message2 var/list/stored_data = list() +/obj/item/weapon/cartridge/Destroy() + qdel_null(radio) + return ..() + /obj/item/weapon/cartridge/engineering name = "\improper Power-ON cartridge" icon_state = "cart-e" @@ -164,10 +168,6 @@ var/list/civilian_cartridges = list( radio = new /obj/item/radio/integrated/signal(src) ..() -/obj/item/weapon/cartridge/signal/Destroy() - qdel(radio) - ..() - /obj/item/weapon/cartridge/quartermaster name = "\improper Space Parts & Space Vendors cartridge" desc = "Perfect for the Quartermaster on the go!" diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 4fa3e1efcd..731000ca78 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -803,7 +803,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(exonet) exonet.remove_address() exonet = null - ..() + return ..() // Proc: update_icon() // Parameters: None diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 44353d45d2..73fd75740d 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -97,7 +97,7 @@ /obj/item/device/radio/intercom/Destroy() processing_objects -= src - ..() + return ..() /obj/item/device/radio/intercom/attack_ai(mob/user as mob) src.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/material_armor.dm b/code/game/objects/items/weapons/material/material_armor.dm index 1041fb5d1f..990ae37659 100644 --- a/code/game/objects/items/weapons/material/material_armor.dm +++ b/code/game/objects/items/weapons/material/material_armor.dm @@ -42,7 +42,7 @@ Protectiveness | Armor % /obj/item/clothing/Destroy() processing_objects -= src - ..() + return ..() /obj/item/clothing/get_material() return material diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 8baab87528..30a6991a53 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -26,7 +26,7 @@ T.dirt = 0 for(var/obj/effect/O in src) if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay)) - del(O) + qdel(O) /* //Reagent code changed at some point and the below doesn't work. To be fixed later. source.reagents.reaction(src, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. source.reagents.remove_any(1) //reaction() doesn't use up the reagents @@ -47,16 +47,16 @@ return ..() -/obj/item/weapon/mop_deploy/Del() +/obj/item/weapon/mop_deploy/Destroy() processing_objects -= src - ..() + . = ..() /obj/item/weapon/mop_deploy/attack_self(mob/user as mob) user.drop_from_inventory(src) - spawn(1) if(src) del(src) + spawn(1) if(!QDELETED(src)) qdel(src) /obj/item/weapon/mop_deploy/dropped() - spawn(1) if(src) del(src) + spawn(1) if(!QDELETED(src)) qdel(src) /obj/item/weapon/mop_deploy/process() if(!creator || loc != creator || !creator.item_is_in_hands(src)) @@ -71,4 +71,4 @@ host.pinned -= src host.embedded -= src host.drop_from_inventory(src) - spawn(1) if(src) del(src) \ No newline at end of file + spawn(1) if(!QDELETED(src)) qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 5457c860e5..c915053c9f 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -12,7 +12,7 @@ /obj/item/weapon/storage/internal/Destroy() master_item = null - ..() + . = ..() /obj/item/weapon/storage/internal/attack_hand() return //make sure this is never picked up diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 3846a44d2b..db55e95b44 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -38,15 +38,15 @@ /obj/item/weapon/storage/Destroy() close_all() - qdel(boxes) - qdel(src.storage_start) - qdel(src.storage_continue) - qdel(src.storage_end) - qdel(src.stored_start) - qdel(src.stored_continue) - qdel(src.stored_end) - qdel(closer) - ..() + qdel_null(boxes) + qdel_null(src.storage_start) + qdel_null(src.storage_continue) + qdel_null(src.storage_end) + qdel_null(src.stored_start) + qdel_null(src.stored_continue) + qdel_null(src.stored_end) + qdel_null(closer) + . = ..() /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) if(!canremove) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 57a5cf06a4..b8daa05d7f 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -44,8 +44,7 @@ var/list/global/tank_gauge_cache = list() return /obj/item/weapon/tank/Destroy() - if(air_contents) - qdel(air_contents) + qdel_null(air_contents) processing_objects.Remove(src) @@ -53,7 +52,7 @@ var/list/global/tank_gauge_cache = list() var/obj/item/device/transfer_valve/TTV = loc TTV.remove_tank(src) - ..() + return ..() /obj/item/weapon/tank/examine(mob/user) . = ..(user, 0) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index eab315809f..b41743799b 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -49,9 +49,6 @@ if(climbable) verbs += /obj/structure/proc/climb_on -/obj/structure/Destroy() - ..() - /obj/structure/proc/climb_on() set name = "Climb structure" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d03d16bfd7..06abdbaa62 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -355,12 +355,9 @@ density = 0 update_nearby_tiles() var/turf/location = loc - loc = null + . = ..() for(var/obj/structure/window/W in orange(location, 1)) W.update_icon() - loc = location - ..() - /obj/structure/window/Move() var/ini_dir = dir diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index cec738479e..583f491d5e 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -477,7 +477,7 @@ for(var/obj/item/weapon/mop_deploy/blade in M.contents) M.drop_from_inventory(blade) - del(blade) + qdel(blade) //Space Cleaner Launcher @@ -520,7 +520,7 @@ user << "You slot \the [input_device] into the suit module." user.drop_from_inventory(input_device) - del(input_device) + qdel(input_device) accepted_item.charges++ return 1 diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 63ce123253..088c53e521 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -131,3 +131,9 @@ /datum/lighting_corner/dummy/New() return + +/datum/lighting_corner/Destroy(var/force) + if (!force) + return QDEL_HINT_LETMELIVE + crash_with("Who decided to force qdel() a lighting corner? Why did you do this?") + return ..() diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 6d912cd862..690eba9326 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -39,7 +39,7 @@ log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") else log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") - qdel(src) + qdel(src, force=TRUE) return // To the future coder who sees this and thinks @@ -121,14 +121,17 @@ /atom/movable/lighting_overlay/throw_at() return 0 -/atom/movable/lighting_overlay/Destroy() - total_lighting_overlays-- - global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src +/atom/movable/lighting_overlay/Destroy(var/force) + if (force) + total_lighting_overlays-- + global.lighting_update_overlays -= src + global.lighting_update_overlays_old -= src - var/turf/T = loc - if(istype(T)) - T.lighting_overlay = null - T.luminosity = 1 + var/turf/T = loc + if(istype(T)) + T.lighting_overlay = null + T.luminosity = 1 - . = ..() + return ..() + else + return QDEL_HINT_LETMELIVE diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index 62f0d93152..a1c28a4af3 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -59,7 +59,7 @@ /mob/living/silicon/ai/Destroy() destroy_eyeobj() - ..() + return ..() /atom/proc/move_camera_by_click() if(istype(usr, /mob/living/silicon/ai)) diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index f4fea0aa58..5c21c6784d 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -59,7 +59,7 @@ /obj/machinery/camera/Destroy() clear_all_networks() cameranet.cameras -= src - ..() + return ..() // Mobs /mob/living/silicon/ai/rejuvenate() diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm index 0c38ad8033..ff8681d128 100644 --- a/code/modules/mob/freelook/eye.dm +++ b/code/modules/mob/freelook/eye.dm @@ -38,7 +38,11 @@ mob/observer/eye/Destroy() qdel(ghostimage) ghostimage = null updateallghostimages() - ..() + if(owner) + if(owner.eyeobj == src) + owner.eyeobj = null + owner = null + . = ..() /mob/observer/eye/Move(n, direct) if(owner == src) diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 1142367164..1dd520e7f1 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -25,7 +25,7 @@ /mob/living/Destroy() cultnet.updateVisibility(src, 0) - ..() + return ..() /mob/living/rejuvenate() var/was_dead = stat == DEAD diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index 8408083ba8..482025426e 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -15,7 +15,7 @@ /turf/simulated/Destroy() updateVisibility(src) - ..() + return ..() /turf/simulated/New() ..() @@ -26,7 +26,7 @@ /obj/structure/Destroy() updateVisibility(src) - ..() + return ..() /obj/structure/New() ..() diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 24ad252eda..0d53d1e48a 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -14,7 +14,7 @@ /datum/visualnet/Destroy() visual_nets -= src - ..() + return ..() // Checks if a chunk has been Generated in x, y, z. /datum/visualnet/proc/chunkGenerated(x, y, z) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index b6b99781f4..24a61e6695 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -27,7 +27,7 @@ var/list/holder_mob_icon_cache = list() /obj/item/weapon/holder/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/weapon/holder/process() update_state() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 765acb837a..470b3cad64 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -215,20 +215,15 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c /mob/living/silicon/ai/Destroy() ai_list -= src - qdel(eyeobj) - eyeobj = null - - qdel(psupply) - psupply = null - - qdel(aiMulti) - aiMulti = null - - qdel(aiRadio) - aiRadio = null - - qdel(aiCamera) - aiCamera = null + qdel_null(announcement) + qdel_null(eyeobj) + qdel_null(psupply) + qdel_null(aiPDA) + qdel_null(aiCommunicator) + qdel_null(aiMulti) + qdel_null(aiRadio) + qdel_null(aiCamera) + hack = null return ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 40b1852528..b74b7d6cf7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -41,7 +41,7 @@ silicon_mob_list -= src for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) AH.unregister_alarm(src) - ..() + return ..() /mob/living/silicon/proc/init_id() if(idcard) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3ad6260813..0e121e1481 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -195,7 +195,7 @@ friends.Cut() //This one is not walk_list.Cut() languages.Cut() - ..() + return ..() //Client attached /mob/living/simple_animal/Login() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index be114228de..890ff2e873 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -393,9 +393,6 @@ /obj/item/weapon/grab/proc/size_difference(mob/A, mob/B) return mob_size_difference(A.mob_size, B.mob_size) -/obj/item/weapon/grab - var/destroying = 0 - /obj/item/weapon/grab/Destroy() animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING) affecting.layer = 4 @@ -408,5 +405,4 @@ assailant = null qdel(hud) hud = null - destroying = 1 // stops us calling qdel(src) on dropped() - ..() + return ..() diff --git a/code/modules/mob/modifiers.dm b/code/modules/mob/modifiers.dm index f67ffc374b..0b39c9e275 100644 --- a/code/modules/mob/modifiers.dm +++ b/code/modules/mob/modifiers.dm @@ -73,7 +73,7 @@ /mob/living/Destroy() remove_all_modifiers(TRUE) - ..() + return ..() // Called by Life(). /mob/living/proc/handle_modifiers() diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index e133f82e6e..2b10a9017d 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -20,7 +20,7 @@ var/update_locked = 0 /obj/machinery/power/breakerbox/Destroy() - ..() + . = ..() for(var/datum/nano_module/rcon/R in world) R.FindDevices() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 2d53277590..ebfa533086 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -108,7 +108,7 @@ var/list/possible_cable_coil_colours = list( if(powernet) cut_cable_from_powernet() // update the powernets cable_list -= src //remove it from global cable list - ..() // then go ahead and delete the cable + return ..() // then go ahead and delete the cable // Ghost examining the cable -> tells him the power /obj/structure/cable/attack_ghost(mob/user) diff --git a/code/modules/power/grid_checker.dm b/code/modules/power/grid_checker.dm index 4d42d4ca3f..b8a123e02f 100644 --- a/code/modules/power/grid_checker.dm +++ b/code/modules/power/grid_checker.dm @@ -28,7 +28,7 @@ /obj/machinery/power/grid_checker/Destroy() qdel(wires) wires = null - ..() + return ..() /obj/machinery/power/grid_checker/update_icon() if(power_failing) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 82fc6c2233..963d2be9a5 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -268,7 +268,7 @@ if(A) on = 0 // A.update_lights() - ..() + return ..() /obj/machinery/light/update_icon() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 13213c2e7e..76320db479 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -19,7 +19,7 @@ disconnect_from_network() disconnect_terminal() - ..() + return ..() /////////////////////////////// // General procedures diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 47a9c08923..53e3dc29c9 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -23,7 +23,7 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/Destroy() rad_collectors -= src - ..() + return ..() /obj/machinery/power/rad_collector/process() //so that we don't zero out the meter if the SM is processed first. diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 12540c2d04..b6c45475cc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -205,7 +205,7 @@ if(holder && holder.my_atom && ismob(holder.my_atom)) var/mob/M = holder.my_atom M.status_flags &= ~FAKEDEATH - ..() + return ..() /datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers. name = "fertilizer" diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm index a90e3eeb8a..b7c087f9c0 100644 --- a/code/modules/tables/update_triggers.dm +++ b/code/modules/tables/update_triggers.dm @@ -6,12 +6,10 @@ /obj/structure/window/Destroy() var/oldloc = loc - loc=null + . = ..() for(var/obj/structure/table/T in view(oldloc, 1)) T.update_connections() T.update_icon() - loc=oldloc - ..() /obj/structure/window/Move() var/oldloc = loc diff --git a/code/world.dm b/code/world.dm index abcc702c2c..fd38d66a81 100644 --- a/code/world.dm +++ b/code/world.dm @@ -26,7 +26,8 @@ var/global/datum/global_init/init = new () qdel(src) //we're done /datum/global_init/Destroy() - return 1 + global.init = null + return 2 // QDEL_HINT_IWILLGC /world mob = /mob/new_player diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm index b5325c76d8..551611b8f4 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/maps/RandomZLevels/stationCollision.dm @@ -54,7 +54,7 @@ B.item_state = "melted" new /obj/item/weapon/paper/sc_safehint_paper_bible(B) new /obj/item/weapon/pen(B) - del(src) + qdel(src) /* * Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map. @@ -189,7 +189,7 @@ var/sc_safecode5 = "[rand(0,9)]" else if(istype(A,/obj/)) var/obj/O = A O.ex_act(1.0) - if(O) del(O) + if(O) qdel(O) else if(isturf(A)) var/turf/T = A if(T.intact) diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 845b362fc6..ad510960c5 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -187,5 +187,10 @@ var/list/all_maps = list() LIST_NUMERIC_SET(map.holomap_legend_y, z, holomap_legend_y) // VOREStation Edit End -/datum/map_z_level/Destroy() - return TRUE // No. +/datum/map_z_level/Destroy(var/force) + crash_with("Attempt to delete a map_z_level instance [log_info_line(src)]") + if(!force) + return QDEL_HINT_LETMELIVE // No. + if (using_map.zlevels["[z]"] == src) + using_map.zlevels -= "[z]" + return ..() From ed8520ec3fc5f9f1192dae9bed4f09b7f9c7c54c Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 19:45:01 -0400 Subject: [PATCH 198/261] Standardize MC subsystem initialization boilerplate * Based on https://github.com/tgstation/tgstation/pull/25386 * Create macro for defining new subsystem types. * Create PreInit proc to handle setup that needs to be done before the map loads * Rename garbage_controller subsystem to garbage so it matches its global SSgarbage variable name. --- code/__defines/MC.dm | 8 ++++++++ code/controllers/subsystem.dm | 9 ++++++++- code/controllers/subsystems/garbage.dm | 26 ++++++++++++-------------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/code/__defines/MC.dm b/code/__defines/MC.dm index 90724a2f98..08b8d223ec 100644 --- a/code/__defines/MC.dm +++ b/code/__defines/MC.dm @@ -51,3 +51,11 @@ #define SS_PAUSED 3 //paused by mc_tick_check #define SS_SLEEPING 4 //fire() slept. #define SS_PAUSING 5 //in the middle of pausing + +// Standard way to define a global subsystem, keep boilerplate organized here! +#define SUBSYSTEM_DEF(X) var/datum/controller/subsystem/##X/SS##X;\ +/datum/controller/subsystem/##X/New(){\ + NEW_SS_GLOBAL(SS##X);\ + PreInit();\ +}\ +/datum/controller/subsystem/##X diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index ce9558ca4f..ff81fdc23e 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -27,8 +27,15 @@ var/datum/controller/subsystem/queue_next var/datum/controller/subsystem/queue_prev -// Used to initialize the subsystem BEFORE the map has loaded +//Do not override /datum/controller/subsystem/New() + return + +// Used to initialize the subsystem BEFORE the map has loaded +// Called AFTER Recover if that is called +// Prefer to use Initialize if possible +/datum/controller/subsystem/proc/PreInit() + return //This is used so the mc knows when the subsystem sleeps. do not override. /datum/controller/subsystem/proc/ignite(resumed = 0) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index e849b64be6..117786c40c 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -1,6 +1,7 @@ -var/datum/controller/subsystem/garbage_collector/SSgarbage - -/datum/controller/subsystem/garbage_collector +// +// Garbage Collector Subsystem - Implements qdel() and the GC queue +// +SUBSYSTEM_DEF(garbage) name = "Garbage" priority = 15 wait = 5 @@ -34,10 +35,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage var/list/qdel_list = list() // list of all types that have been qdel()eted #endif -/datum/controller/subsystem/garbage_collector/New() - NEW_SS_GLOBAL(SSgarbage) - -/datum/controller/subsystem/garbage_collector/stat_entry(msg) +/datum/controller/subsystem/garbage/stat_entry(msg) msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" msg += "GR:" if (!(delslasttick+gcedlasttick)) @@ -52,14 +50,14 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" ..(msg) -/datum/controller/subsystem/garbage_collector/fire() +/datum/controller/subsystem/garbage/fire() HandleToBeQueued() if(state == SS_RUNNING) HandleQueue() //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. //Don't attempt to optimize, not worth the effort. -/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() +/datum/controller/subsystem/garbage/proc/HandleToBeQueued() var/list/tobequeued = src.tobequeued var/starttime = world.time var/starttimeofday = world.timeofday @@ -70,7 +68,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage Queue(ref) tobequeued.Cut(1, 2) -/datum/controller/subsystem/garbage_collector/proc/HandleQueue() +/datum/controller/subsystem/garbage/proc/HandleQueue() delslasttick = 0 gcedlasttick = 0 var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() @@ -124,12 +122,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage ++gcedlasttick ++totalgcs -/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) +/datum/controller/subsystem/garbage/proc/QueueForQueuing(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_QUEUING -/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) +/datum/controller/subsystem/garbage/proc/Queue(datum/A) if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) @@ -145,12 +143,12 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage queue[refid] = gctime -/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) +/datum/controller/subsystem/garbage/proc/HardQueue(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A A.gc_destroyed = GC_QUEUED_FOR_HARD_DEL -/datum/controller/subsystem/garbage_collector/Recover() +/datum/controller/subsystem/garbage/Recover() if (istype(SSgarbage.queue)) queue |= SSgarbage.queue if (istype(SSgarbage.tobequeued)) From cd88f7ca7b26dea2dff370f04f21fe164ec00ffc Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 7 Jun 2017 23:27:27 -0400 Subject: [PATCH 199/261] Ports garbage collector improvements and bugfixes from tg * Writes a log of qdel() problems in a condensed format at the end of each round - tgstation/tgstation/pull/26135 * Moves hard dels into their own proc so that it can be profiled more easily, and uses it for the various types. Includes bugfixes too * https://github.com/tgstation/tgstation/pull/26210 * https://github.com/tgstation/tgstation/pull/26570 * Fix a bug with qdeling non-datums - https://github.com/tgstation/tgstation/pull/27434 * Fix typo - https://github.com/tgstation/tgstation/pull/27730 --- code/controllers/subsystems/garbage.dm | 75 +++++++++++++++++--------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 117786c40c..b07337e803 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -50,10 +50,28 @@ SUBSYSTEM_DEF(garbage) msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" ..(msg) +/datum/controller/subsystem/garbage/Shutdown() + //Adds the del() log to world.log in a format condensable by the runtime condenser found in tools + if(didntgc.len || sleptDestroy.len) + var/list/dellog = list() + for(var/path in didntgc) + dellog += "Path : [path] \n" + dellog += "Failures : [didntgc[path]] \n" + if(path in sleptDestroy) + dellog += "Sleeps : [sleptDestroy[path]] \n" + sleptDestroy -= path + for(var/path in sleptDestroy) + dellog += "Path : [path] \n" + dellog += "Sleeps : [sleptDestroy[path]] \n" + log_misc(dellog.Join()) + /datum/controller/subsystem/garbage/fire() HandleToBeQueued() if(state == SS_RUNNING) HandleQueue() + + if (state == SS_PAUSED) //make us wait again before the next run. + state = SS_RUNNING //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. //Don't attempt to optimize, not worth the effort. @@ -98,24 +116,9 @@ SUBSYSTEM_DEF(garbage) var/type = A.type testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --") didntgc["[type]"]++ - var/time = world.timeofday - var/tick = world.tick_usage - var/ticktime = world.time - del(A) - tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + + HardDelete(A) - if (tick > highest_del_tickusage) - highest_del_tickusage = tick - time = world.timeofday - time - if (!time && TICK_DELTA_TO_MS(tick) > 1) - time = TICK_DELTA_TO_MS(tick)/100 - if (time > highest_del_time) - highest_del_time = time - if (time > 10) - log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)") - message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") - postpone(time/5) - break ++delslasttick ++totaldels else @@ -128,10 +131,10 @@ SUBSYSTEM_DEF(garbage) A.gc_destroyed = GC_QUEUED_FOR_QUEUING /datum/controller/subsystem/garbage/proc/Queue(datum/A) - if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) + if (isnull(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) return if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) - del(A) + HardDelete(A) return var/gctime = world.time var/refid = "\ref[A]" @@ -143,6 +146,30 @@ SUBSYSTEM_DEF(garbage) queue[refid] = gctime +//this is purely to seperate things profile wise. +/datum/controller/subsystem/garbage/proc/HardDelete(datum/A) + var/time = world.timeofday + var/tick = world.tick_usage + var/ticktime = world.time + + var/type = A.type + var/refID = "\ref[A]" + + del(A) + + tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + if (tick > highest_del_tickusage) + highest_del_tickusage = tick + time = world.timeofday - time + if (!time && TICK_DELTA_TO_MS(tick) > 1) + time = TICK_DELTA_TO_MS(tick)/100 + if (time > highest_del_time) + highest_del_time = time + if (time > 10) + log_game("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete)") + message_admins("Error: [type]([refID]) took longer than 1 second to delete (took [time/10] seconds to delete).") + postpone(time/5) + /datum/controller/subsystem/garbage/proc/HardQueue(datum/A) if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) tobequeued += A @@ -157,15 +184,13 @@ SUBSYSTEM_DEF(garbage) // Should be treated as a replacement for the 'del' keyword. // Datums passed to this will be given a chance to clean up references to allow the GC to collect them. /proc/qdel(datum/D, force=FALSE) - if(!D) + if(!istype(D)) + del(D) return #ifdef TESTING SSgarbage.qdel_list += D.type #endif - if(!istype(D)) - log_debug("qdel() was passed [log_info_line(D)]. qdel() can only handle instances of (sub)type /datum.") - del(D) - else if(isnull(D.gc_destroyed)) + if(isnull(D.gc_destroyed)) D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. @@ -196,7 +221,7 @@ SUBSYSTEM_DEF(garbage) if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() SSgarbage.HardQueue(D) if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. - del(D) + SSgarbage.HardDelete(D) if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. SSgarbage.QueueForQueuing(D) #ifdef TESTING From e644dbe18ac08d0c953c9a30e6d1b4cfff1bbfd2 Mon Sep 17 00:00:00 2001 From: Leshana Date: Sat, 10 Jun 2017 20:52:01 -0400 Subject: [PATCH 200/261] Destroy() cleanups in VOREStation code * Remove remaining hard del()'s in our code. * Replace deleted() and gcDestroyed with QDELETED macro. * Fix some strange calls directly to Del() (capital D) * Make Destroy() return qdel hints. * Make a few of the Destroy()'s more comprehensive in cleaning up references. * In edited Destroy() procs, converted to use qdel_null and qdel_null_list macros when possible for pretty code. * Removed unused variable `sleevecard` --- .../binary_devices/algae_generator_vr.dm | 2 +- code/game/objects/items/contraband_vr.dm | 6 +++--- .../structures/crates_lockers/closets/egg_vr.dm | 2 +- code/game/objects/structures/railing.dm | 5 +++-- code/game/objects/structures/trash_pile.dm | 2 +- code/game/turfs/flooring/flooring_decals.dm | 2 +- .../preference_setup/vore/04_resleeving.dm | 2 +- code/modules/clothing/glasses/hud_vr.dm | 10 +++------- code/modules/media/mediamanager.dm | 2 +- code/modules/mob/living/carbon/brain/brain.dm | 2 +- code/modules/mob/living/say.dm | 2 +- .../silicon/robot/dogborg/dog_modules_vr.dm | 10 +++++----- .../silicon/robot/dogborg/dog_sleeper_vr.dm | 4 ++-- .../living/simple_animal/simple_animal_vr.dm | 3 ++- code/modules/multiz/ladder_assembly_vr.dm | 4 ++-- code/modules/multiz/open_space_controller.dm | 2 +- code/modules/multiz/pipes.dm | 2 +- code/modules/nifsoft/nif.dm | 17 ++++++----------- code/modules/nifsoft/nif_statpanel.dm | 2 +- code/modules/nifsoft/nifsoft.dm | 12 ++++++------ code/modules/nifsoft/software/05_health.dm | 4 ++-- code/modules/nifsoft/software/13_soulcatcher.dm | 11 +++-------- code/modules/nifsoft/software/14_commlink.dm | 5 +++-- .../reagent_containers/food/z_custom_food_vr.dm | 2 +- code/modules/resleeving/computers.dm | 2 +- code/modules/resleeving/designer.dm | 6 +++--- code/modules/resleeving/infocore.dm | 6 +++--- code/modules/resleeving/sleevecard.dm | 5 +++-- code/modules/telesci/gps_advanced.dm | 4 ++-- code/modules/vore/eating/silicon_vr.dm | 2 +- code/modules/vore/eating/vorepanel_vr.dm | 7 ++++++- code/modules/vore/fluffstuff/custom_items_vr.dm | 14 +++++++++----- code/modules/vore/resizing/holder_micro_vr.dm | 2 +- maps/RandomZLevels/labyrinth.dm | 2 +- maps/tether/tether_things.dm | 2 +- 35 files changed, 83 insertions(+), 84 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index 5d5f4e5831..cd0f59a660 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -46,7 +46,7 @@ overlays += I /obj/machinery/atmospherics/binary/algae_farm/Destroy() - ..() + . = ..() internal = null /obj/machinery/atmospherics/binary/algae_farm/process() diff --git a/code/game/objects/items/contraband_vr.dm b/code/game/objects/items/contraband_vr.dm index b6dc7576e5..da8f6cfeea 100644 --- a/code/game/objects/items/contraband_vr.dm +++ b/code/game/objects/items/contraband_vr.dm @@ -6,7 +6,7 @@ item_state = "table_parts" w_class = ITEMSIZE_HUGE - attack_self(mob/user as mob) +/obj/item/stolenpackage/attack_self(mob/user as mob) // Another way of doing this. Commented out because the other method is better for this application. /*var/spawn_chance = rand(1,100) switch(spawn_chance) @@ -79,8 +79,8 @@ /obj/random/contraband, /obj/random/weapon/guarenteed) new loot(usr.loc) - usr << "You unwrap the package." - del(src) + to_chat(user, "You unwrap the package.") + qdel(src) /obj/item/weapon/storage/fancy/cigar/havana // Putting this here 'cuz fuck it. -Spades name = "\improper Havana cigar case" diff --git a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm index aeed53a996..64d818c790 100644 --- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm @@ -16,7 +16,7 @@ /obj/structure/closet/secure_closet/egg/attackby(obj/item/weapon/W, mob/user as mob) //This also prevents crew from welding the eggs and making them unable to be opened. if(istype(W, /obj/item/weapon/weldingtool)) src.dump_contents() - del(src) + qdel(src) diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 9b6e2ae922..9f7cd6e54d 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -29,9 +29,10 @@ update_icon(0) /obj/structure/railing/Destroy() - for(var/obj/structure/railing/R in oview(src, 1)) + var/turf/location = loc + . = ..() + for(var/obj/structure/railing/R in orange(location, 1)) R.update_icon() - ..() /obj/structure/railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(!mover) diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index c05c22d84f..cf669bf146 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -237,7 +237,7 @@ if(!path) //Tapped out, reallocate? for(var/P in allocated_gamma) var/obj/item/I = allocated_gamma[P] - if(!I || istype(I.loc,/obj/machinery/computer/cryopod) || I.gcDestroyed) + if(QDELETED(I) || istype(I.loc,/obj/machinery/computer/cryopod)) allocated_gamma -= P path = P break diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 168f11e96b..3aaa2409b9 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -16,7 +16,7 @@ var/list/floor_decals = list() // VOREStation Edit - Hack to workaround byond crash bug /obj/effect/floor_decal/initialize() - if(!floor_decals_initialized || !loc || deleted(src)) + if(!floor_decals_initialized || !loc || QDELETED(src)) return add_to_turf_decals() var/turf/T = get_turf(src) diff --git a/code/modules/client/preference_setup/vore/04_resleeving.dm b/code/modules/client/preference_setup/vore/04_resleeving.dm index 93f105195c..08a25ef363 100644 --- a/code/modules/client/preference_setup/vore/04_resleeving.dm +++ b/code/modules/client/preference_setup/vore/04_resleeving.dm @@ -24,7 +24,7 @@ /datum/category_item/player_setup_item/vore/resleeve/copy_to_mob(var/mob/living/carbon/human/character) if(character && !istype(character,/mob/living/carbon/human/dummy)) spawn(50) - if(deleted(character) || deleted(pref)) + if(QDELETED(character) || QDELETED(pref)) return // They might have been deleted during the wait if(pref.resleeve_scan) var/datum/transhuman/body_record/BR = new() //Clearly related to size. diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index 8d5b923d53..8c20a75b20 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -17,13 +17,9 @@ arscreen = new arscreen_path(src) /obj/item/clothing/glasses/omnihud/Destroy() - if(hud) - qdel(hud) - hud = null - if(arscreen) - qdel(arscreen) - arscreen = null - ..() + qdel_null(hud) + qdel_null(arscreen) + . = ..() /obj/item/clothing/glasses/omnihud/dropped() if(arscreen) diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index 94bf6e79a5..83da1250a7 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -59,7 +59,7 @@ set_new_volume(usr) /client/proc/set_new_volume(var/mob/user) - if(deleted(src.media) || !istype(src.media)) + if(!QDELETED(src.media) || !istype(src.media)) to_chat(user, "You have no media datum to change, if you're not in the lobby tell an admin.") return var/value = input("Choose your Jukebox volume.", "Jukebox volume", media.volume) diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 0f4db8c1eb..2905b4fe4d 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -20,7 +20,7 @@ if(stat!=DEAD) //If not dead. death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA ghostize() //Ghostize checks for key so nothing else is necessary. - ..() + return ..() say_understands(var/other)//Goddamn is this hackish, but this say code is so odd if (istype(other, /mob/living/silicon/ai)) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4046c55612..16b613ed64 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -304,7 +304,7 @@ proc/get_radio_key_from_channel(var/channel) // VOREStation Edit - Attempt Multi-Z Talking var/mob/above = src.shadow - while(!deleted(above)) + while(!QDELETED(above)) var/turf/ST = get_turf(above) if(ST) var/list/results = get_mobs_and_objs_in_view_fast(ST, world.view) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index a11bcd1ea4..b35c3dedd7 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -225,7 +225,7 @@ user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") if(do_after (user, 50)) user << "You finish licking off \the [target.name]." - del(target) + qdel(target) var/mob/living/silicon/robot.R = user R.cell.charge = R.cell.charge + 50 else if(istype(target,/obj/item)) @@ -234,7 +234,7 @@ if(do_after (user, 50)) user.visible_message("[user] finishes eating \the [target.name].", "You finish eating \the [target.name].") user << "You finish off \the [target.name]." - del(target) + qdel(target) var/mob/living/silicon/robot.R = user R.cell.charge = R.cell.charge + 250 return @@ -246,13 +246,13 @@ var/mob/living/silicon/robot.R = user var/obj/item/weapon/cell.C = target R.cell.charge = R.cell.charge + (C.maxcharge / 3) - del(target) + qdel(target) return user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") if(do_after (user, 50)) user << "You clean \the [target.name]." var/obj/effect/decal/cleanable/C = locate() in target - del(C) + qdel(C) target.clean_blood() else if(ishuman(target)) if(src.emagged) @@ -282,7 +282,7 @@ if(do_after (user, 50)) user << "You clean \the [target.name]." var/obj/effect/decal/cleanable/C = locate() in target - del(C) + qdel(C) target.clean_blood() return diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 7b34bd45ce..ed12c588cb 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -383,9 +383,9 @@ if (istype(T, /obj/item/device/pda)) var/obj/item/device/pda/PDA = T if (PDA.id) - PDA.id.loc = src + PDA.id.forceMove(src) PDA.id = null - T.Del() + qdel(T) //Special case for IDs to make them digested //else if (istype(T, /obj/item/weapon/card/id)) diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm index 4fe1e408d4..2096e4f5cc 100644 --- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm +++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm @@ -35,7 +35,8 @@ for(var/I in vore_organs) var/datum/belly/B = vore_organs[I] B.release_all_contents() // When your stomach is empty - ..() + prey_excludes.Cut() + . = ..() //For all those ID-having mobs /mob/living/simple_animal/GetIdCard() diff --git a/code/modules/multiz/ladder_assembly_vr.dm b/code/modules/multiz/ladder_assembly_vr.dm index c7343abe0a..9347dc8ffc 100644 --- a/code/modules/multiz/ladder_assembly_vr.dm +++ b/code/modules/multiz/ladder_assembly_vr.dm @@ -53,7 +53,7 @@ "You start to weld \the [src] to the floor.", \ "You hear welding") if(do_after(user, 2 SECONDS)) - if(deleted(src) || !WT.isOn()) return + if(QDELETED(src) || !WT.isOn()) return state = CONSTRUCTION_WELDED to_chat(user, "You weld \the [src] to the floor.") try_construct(user) @@ -66,7 +66,7 @@ "You start to cut \the [src] free from the floor.", \ "You hear welding") if(do_after(user, 2 SECONDS)) - if(deleted(src) || !WT.isOn()) return + if(QDELETED(src) || !WT.isOn()) return state = CONSTRUCTION_WRENCHED to_chat(user, "You cut \the [src] free from the floor.") else diff --git a/code/modules/multiz/open_space_controller.dm b/code/modules/multiz/open_space_controller.dm index 4921c9ec5a..fc6c7e5484 100644 --- a/code/modules/multiz/open_space_controller.dm +++ b/code/modules/multiz/open_space_controller.dm @@ -36,7 +36,7 @@ for(last_object in turfs_to_process_old) var/turf/T = last_object - if(T && !T.gcDestroyed) + if(!QDELETED(T)) update_turf(T) SCHECK diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm index 7c1fee0525..f36258b492 100644 --- a/code/modules/multiz/pipes.dm +++ b/code/modules/multiz/pipes.dm @@ -91,7 +91,7 @@ obj/machinery/atmospherics/pipe/zpipe/Destroy() node1.disconnect(src) if(node2) node2.disconnect(src) - ..() + . = ..() obj/machinery/atmospherics/pipe/zpipe/pipeline_expansion() return list(node1, node2) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 28925741b0..f791c778b6 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -100,16 +100,11 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable if(human) human.nif = null human = null - for(var/S in nifsofts) - if(S) - qdel(S) - if(nif_hud) - qdel(nif_hud) - if(comm) - qdel(comm) - - nifsofts.Cut() - ..() + qdel_null_list(nifsofts) + qdel_null(nif_hud) + qdel_null(comm) + nifsofts_life.Cut() + return ..() //Being implanted in some mob /obj/item/device/nif/proc/implant(var/mob/living/carbon/human/H) @@ -541,7 +536,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable if(nif) nif.nif_hud = null nif = null - ..() + return ..() /obj/item/clothing/glasses/hud/nif_hud/process_hud(M,var/thing) //Faster checking with local var, and this is called often so I want fast. diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm index 579dc44ec9..0cf2307b65 100644 --- a/code/modules/nifsoft/nif_statpanel.dm +++ b/code/modules/nifsoft/nif_statpanel.dm @@ -47,7 +47,7 @@ /obj/effect/nif_stat/Destroy() nifsoft = null - ..() + return ..() /obj/effect/nif_stat/proc/atom_button_text() name = nifsoft.stat_text() diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index fdccca0bce..963addf445 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -50,11 +50,10 @@ //Destructor cleans up the software and nif reference /datum/nifsoft/Destroy() if(nif) - uninstall(nif) + uninstall() nif = null - qdel(stat_line) - stat_line = null - ..() + qdel_null(stat_line) + return ..() //Called when the software is installed in the NIF /datum/nifsoft/proc/install() @@ -67,7 +66,8 @@ if(nif) . = nif.uninstall(src) nif = null - qdel(src) + if(!QDESTROYING(src)) + qdel(src) //Called every life() tick on a mob on active implants /datum/nifsoft/proc/life(var/mob/living/carbon/human/human) @@ -126,7 +126,7 @@ /datum/nifsoft/package/Destroy() software.Cut() software = null - ..() + return ..() ///////////////// // A NIFSoft Disk diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm index 70b28bce52..cc60ff1f91 100644 --- a/code/modules/nifsoft/software/05_health.dm +++ b/code/modules/nifsoft/software/05_health.dm @@ -12,8 +12,8 @@ arscreen = new(nif) Destroy() - qdel(arscreen) - ..() + qdel_null(arscreen) + return ..() activate() if((. = ..())) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index a233db16d3..d1627ac461 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -25,11 +25,8 @@ load_settings() Destroy() - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brain - qdel(CS) - brainmobs.Cut() - ..() + qdel_null_list(brainmobs) + return ..() install() if((. = ..())) @@ -249,10 +246,8 @@ soulcatcher = null if(nif) nif = null - if(mind && ckey) - src.ghostize() container = null - ..() + return ..() /mob/living/carbon/brain/caught_soul/Life() if(!mind) diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm index 4380c53952..196af53c74 100644 --- a/code/modules/nifsoft/software/14_commlink.dm +++ b/code/modules/nifsoft/software/14_commlink.dm @@ -43,13 +43,14 @@ nif = newloc nifsoft = soft register_device(nif.human) - qdel(camera) //Not supported on internal one. + qdel_null(camera) //Not supported on internal one. Destroy() if(nif) nif.comm = null nif = null - ..() + nifsoft = null + return ..() //So that only the owner's chat is relayed to others. /obj/item/device/communicator/commlink/hear_talk(mob/living/M, text, verb, datum/language/speaking) diff --git a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm index 91a5f6848e..7e3a8d5a35 100644 --- a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm +++ b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm @@ -121,7 +121,7 @@ var/global/ingredientLimit = 20 return new_name /obj/item/weapon/reagent_containers/food/snacks/customizable/Destroy() - for(. in ingredients) qdel(.) + qdel_null_list(ingredients) return ..() /obj/item/weapon/reagent_containers/food/snacks/customizable/proc/drawTopping() diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index 69131b0b10..114ef049e1 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -24,7 +24,7 @@ /obj/machinery/computer/transhuman/resleeving/Destroy() releasepods() - ..() + return ..() /obj/machinery/computer/transhuman/resleeving/proc/updatemodules() releasepods() diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index 3cf8d22cee..c64e7e3d21 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -27,7 +27,7 @@ preview_icon = null mannequin = null disk = null - ..() + return ..() /obj/machinery/computer/transhuman/designer/dismantle() if(disk) @@ -241,8 +241,8 @@ return preview_icon /obj/machinery/computer/transhuman/designer/proc/update_preview_mob(var/mob/living/carbon/human/H) - ASSERT(!deleted(H)) - ASSERT(!deleted(active_br)) + ASSERT(!QDELETED(H)) + ASSERT(!QDELETED(active_br)) //log_debug("designer.update_preview_mob([H]) active_br = \ref[active_br]") //Get the DNA and generate a new mob var/datum/dna2/record/R = active_br.mydna diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index 6ed0730cff..6ca1bdf4f3 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -187,10 +187,10 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore mind_ref = null limb_data.Cut() organ_data.Cut() - ..() + return QDEL_HINT_HARDDEL // For now at least there is no easy way to clear references to this in machines etc. /datum/transhuman/body_record/proc/init_from_mob(var/mob/living/carbon/human/M, var/add_to_db = 0, var/ckeylock = 0) - ASSERT(!deleted(M)) + ASSERT(!QDELETED(M)) ASSERT(istype(M)) //Person OOCly doesn't want people impersonating them @@ -277,7 +277,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore * or anything like that! This is the computer science concept of "cloning" a data structure! */ /datum/transhuman/body_record/proc/init_from_br(var/datum/transhuman/body_record/orig) - ASSERT(!deleted(orig)) + ASSERT(!QDELETED(orig)) ASSERT(istype(orig)) src.mydna = new () src.mydna.dna = orig.mydna.dna.Clone() diff --git a/code/modules/resleeving/sleevecard.dm b/code/modules/resleeving/sleevecard.dm index b766c65e66..46143e7b72 100644 --- a/code/modules/resleeving/sleevecard.dm +++ b/code/modules/resleeving/sleevecard.dm @@ -16,7 +16,6 @@ var/obj/item/device/radio/sleevecard/radio var/mob/living/silicon/infomorph/infomorph - var/datum/mind/sleeved var/current_emotion = 1 matter = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) @@ -36,7 +35,9 @@ /obj/item/device/sleevecard/Destroy() if(!isnull(infomorph)) infomorph.death(0) - ..() + infomorph = null + qdel_null(radio) + return ..() /obj/item/device/sleevecard/attack_self(mob/user) add_fingerprint(user) diff --git a/code/modules/telesci/gps_advanced.dm b/code/modules/telesci/gps_advanced.dm index 7953b674d3..bd41cdf534 100644 --- a/code/modules/telesci/gps_advanced.dm +++ b/code/modules/telesci/gps_advanced.dm @@ -19,9 +19,9 @@ var/global/list/GPS_list = list() name = "global positioning system ([gpstag])" overlays += "working" -/obj/item/device/gps/advanced/Del() +/obj/item/device/gps/advanced/Destroy() GPS_list.Remove(src) - ..() + . = ..() /obj/item/device/gps/advanced/emp_act(severity) emped = 1 diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm index d02bb1ace2..24ae808929 100644 --- a/code/modules/vore/eating/silicon_vr.dm +++ b/code/modules/vore/eating/silicon_vr.dm @@ -39,7 +39,7 @@ /obj/effect/overlay/aiholo/Destroy() drop_prey() - ..() + return ..() /mob/living/silicon/ai/verb/holo_nom() set name = "Hardlight Nom" diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 4e18db402e..911f956781 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -31,6 +31,11 @@ var/datum/browser/popup var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action. +/datum/vore_look/Destroy() + loop = null + selected = null + return QDEL_HINT_HARDDEL // TODO - Until I can better analyze how this weird thing works, lets be safe + /datum/vore_look/Topic(href,href_list[]) if (vp_interact(href, href_list)) popup.set_content(gen_ui(usr)) @@ -243,7 +248,7 @@ for(var/H in href_list) if(href_list["close"]) - del(src) // Cleanup + qdel(src) // Cleanup return if(href_list["show_int"]) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 10c8727b3b..2c1bc24246 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -321,7 +321,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie O.icon_state = new_icon // Changes the icon without changing the access. playsound(user.loc, 'sound/items/polaroid2.ogg', 100, 1) user.visible_message(" [user] reprints their ID.") - del(src) + qdel(src) else if(O.icon_state == new_icon) user << "[O] already has been reprinted." return @@ -490,7 +490,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie Destroy() //Waitwaitwait if(state == 1) process() //Nownownow - ..() //Okfine + return ..() //Okfine process() check_owner() @@ -914,9 +914,13 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie spk.attach(src) /obj/item/device/perfect_tele/Destroy() + // Must clear the beacon's backpointer or we won't GC. Someday maybe do something nicer even. + for(var/obj/item/device/perfect_tele_beacon/B in beacons) + B.tele_hand = null beacons.Cut() - qdel(spk) - ..() + qdel_null(power_source) + qdel_null(spk) + return ..() /obj/item/device/perfect_tele/update_icon() if(!power_source) @@ -1169,7 +1173,7 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie /obj/item/device/perfect_tele_beacon/Destroy() tele_name = null tele_hand = null - ..() + return ..() /obj/item/device/perfect_tele_beacon/attack_hand(mob/user) if((user.ckey != creator) && !(user.ckey in warned_users)) diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm index ea7387a94a..09d034af73 100644 --- a/code/modules/vore/resizing/holder_micro_vr.dm +++ b/code/modules/vore/resizing/holder_micro_vr.dm @@ -34,4 +34,4 @@ var/turf/here = get_turf(src) for(var/atom/movable/A in src) A.forceMove(here) - ..() \ No newline at end of file + return ..() \ No newline at end of file diff --git a/maps/RandomZLevels/labyrinth.dm b/maps/RandomZLevels/labyrinth.dm index 2046bfc1da..876f18911d 100644 --- a/maps/RandomZLevels/labyrinth.dm +++ b/maps/RandomZLevels/labyrinth.dm @@ -90,7 +90,7 @@ /obj/machinery/door/airlock/vault/temple/New() if(prob(33)) new /obj/structure/falsewall/cultspecial(src.loc) - del(src) + qdel(src) if(prob(33)) safe = 0 if(prob(33)) diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index 7652317582..85411a6f65 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -127,7 +127,7 @@ /obj/machinery/smartfridge/chemistry/chemvator/down/Destroy() attached = null - ..() + return ..() /obj/machinery/smartfridge/chemistry/chemvator/down name = "\improper Smart Chemavator - Lower" From 0a1322ae8b10001ae197683f2eee646f59e8c06f Mon Sep 17 00:00:00 2001 From: Leshana Date: Sat, 10 Jun 2017 20:52:57 -0400 Subject: [PATCH 201/261] Fix catwalks initialization and destroy to not suck. --- code/game/objects/structures/catwalk.dm | 28 +++++++++---------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index 47507e48b3..f21c64bed4 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -8,26 +8,18 @@ density = 0 anchored = 1.0 -/obj/structure/catwalk/New() - ..() - spawn(4) - if(src) - for(var/obj/structure/catwalk/C in get_turf(src)) - if(C != src) - qdel(C) - update_icon() - redraw_nearby_catwalks() +/obj/structure/catwalk/initialize() + for(var/obj/structure/catwalk/C in get_turf(src)) + if(C != src) + warning("Duplicate [type] in [loc] ([x], [y], [z])") + qdel(C) + update_icon() /obj/structure/catwalk/Destroy() - ..() - redraw_nearby_catwalks() - -/obj/structure/catwalk/proc/redraw_nearby_catwalks() - for(var/direction in alldirs) - if(locate(/obj/structure/catwalk, get_step(src, direction))) - var/obj/structure/catwalk/L = locate(/obj/structure/catwalk, get_step(src, direction)) - L.update_icon() //so siding get updated properly - + var/turf/location = loc + . = ..() + for(var/obj/structure/catwalk/L in orange(location, 1)) + L.update_icon() /obj/structure/catwalk/update_icon() var/connectdir = 0 From a930c2c0d488c13e00d83727e765215a0b889c61 Mon Sep 17 00:00:00 2001 From: InterroLouis Date: Sat, 10 Jun 2017 23:29:03 -0400 Subject: [PATCH 202/261] Add files via upload --- .../structures/crates_lockers/closets/secure/security.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e4c9aa7320..1aa1d9c9ef 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -295,8 +295,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_casing/a44/rubber(src) - new /obj/item/ammo_casing/a44/rubber(src) + new /obj/item/ammo_magazine/m44sl/rubber + new /obj/item/ammo_magazine/m44sl/rubber new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/revolver/consul(src) //VOREStation Edit new /obj/item/clothing/accessory/holster/armpit(src) From 0dda35454b5f9c25fe8f734ca3f75e7d53b6e252 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 11 Jun 2017 00:08:21 -0400 Subject: [PATCH 203/261] Tank sprite changes Updates to Paradise oxygen tank sprites, and fixes the engineer survival box to have goggles! --- .../objects/items/weapons/storage/boxes.dm | 5 +- .../items/weapons/tanks/tank_types_vr.dm | 82 +++++++++++++++++- icons/obj/tank_vr.dmi | Bin 531 -> 2009 bytes 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index c224b38a09..ae74bf8ea5 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -75,13 +75,14 @@ ..() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/emergency/phoron_double(src) -//End Edit + new /obj/item/clothing/glasses/goggles(src) /obj/item/weapon/storage/box/engineer/New() ..() new /obj/item/clothing/mask/breath(src) new /obj/item/weapon/tank/emergency/oxygen/engi(src) - + new /obj/item/clothing/glasses/goggles(src) +//VOREStation Edit End /obj/item/weapon/storage/box/gloves name = "box of latex gloves" desc = "Contains white gloves." diff --git a/code/game/objects/items/weapons/tanks/tank_types_vr.dm b/code/game/objects/items/weapons/tanks/tank_types_vr.dm index 3f9b611a9f..4d63805768 100644 --- a/code/game/objects/items/weapons/tanks/tank_types_vr.dm +++ b/code/game/objects/items/weapons/tanks/tank_types_vr.dm @@ -2,10 +2,88 @@ name = "double emergency phoron tank" desc = "An emergency air tank hastily painted red." icon = 'icons/obj/tank_vr.dmi' - icon_state = "emergency_double_nitrogen" - gauge_icon = "indicator_emergency_double" + icon_state = "emergency_double_vox" + gauge_icon = "indicator_double" + gauge_cap = 3 volume = 10 /obj/item/weapon/tank/emergency/phoron_double/New() ..() air_contents.adjust_gas("phoron", (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + +//New icons +/obj/item/weapon/tank/oxygen + icon = 'icons/obj/tank_vr.dmi' + icon_state = "oxygen" + gauge_cap = 3 + gauge_icon = "indicator_bigtank" +// /obj/item/weapon/tank/oxygen/yellow +// /obj/item/weapon/tank/oxygen/red + +/obj/item/weapon/tank/anesthetic + icon = 'icons/obj/tank_vr.dmi' + icon_state = "anesthetic" + gauge_cap = 3 + gauge_icon = "indicator_bigtank" + +/obj/item/weapon/tank/air + icon = 'icons/obj/tank_vr.dmi' + icon_state = "oxygen" + gauge_cap = 3 + gauge_icon = "indicator_bigtank" + +/obj/item/weapon/tank/phoron + icon = 'icons/obj/tank_vr.dmi' + icon_state = "phoron" + +/obj/item/weapon/tank/vox //Can't be a child of phoron or the gas amount gets screwey. + icon = 'icons/obj/tank_vr.dmi' + icon_state = "plasma_fr" + +/obj/item/weapon/tank/emergency + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency" + gauge_icon = "indicator_smalltank" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/oxygen + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency" + gauge_icon = "indicator_smalltank" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/oxygen/engi + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency_engi" + gauge_icon = "indicator_engi" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/oxygen/double + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency_double" + gauge_icon = "indicator_double" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/nitrogen + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency_nitrogen" + gauge_icon = "indicator_smalltank" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/nitrogen/double + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency_double_vox" + gauge_icon = "indicator_double" + gauge_cap = 3 + +/obj/item/weapon/tank/emergency/phoron + icon = 'icons/obj/tank_vr.dmi' + icon_state = "emergency_p" + gauge_icon = "indicator_smalltank" + gauge_cap = 3 + +/obj/item/weapon/tank/nitrogen + icon = 'icons/obj/tank_vr.dmi' + icon_state = "oxygen_fr" + gauge_icon = "indicator_bigtank" + gauge_cap = 3 diff --git a/icons/obj/tank_vr.dmi b/icons/obj/tank_vr.dmi index e5337751671e7f816515b23fbd86a9ecbf821353..9e765a0dc18a46942ffb648d3ed75d9cab8843c9 100644 GIT binary patch literal 2009 zcmV;~2PXK5P)FMcip3(HvPxeqmudlEFxIq6iGt+1q|BM;AW*^#?CI6W- zz`(#sNlB4807pkhG&D3wNJw=r0Io&=eqIVQGcz_eHpWi?-&p|tWdKbgO>{JLhdqa* zNu;n(u=&Y%i~s-t0d!JMQvg8b*k%9#0SJ0jSad{Xb7OL8aCB*JZU6vyoSl?SZo)7S zh1c;ZEZ9~RzsqhaP{jhS5Se(0M>saJr$BCxgC!zWRg>v%#(JNu_r{*7{M>%+4sx^K zi7SMN-pLQSdY_5nhMG)jmJ3lBz}ir5A}NAYPW-*C!A(S=F~oE*7sV;426FvFR-Q%+ z!=O?*h-84U8kC~bSSj+MJYr4Cofmv$&PQgyBPmJ^R<)^IzpZ=zVtnw!Q9=VDMO3xp zm8C-pe$1SDkmI+R1nc#jetJ3TFW3x=<_ON*_!3UNRh2soY&x`;719;CW6? zP8S3)tlv*~bblh8!M5L5F!cfafIWk4zpr5C2jR?T&tTox_!Qs6&Iu#D#M~Lkj}<>r z{8aKaKEoJSGh87}83{yK|e(a)1a^wUKu_!^($!wt;m7=iD5{-qP3pJf<<;O99; zAo%HGk*2(_@cp9r)6nooOrYo+{+Ra-f5Q8QKh-+&N)@*qKNCQC*YPs}RQDY}6F^mW z{0ln)6t{DQKU4T~ng2dn82;K4|FYv>GW@HKKV$gT9e>XIiB0}<|KBS8zf$_2<2Qcw z`T5tfU)jq4I$DbPQ^zYYf9hl{@q^;`RZ-U%fy7^91QLIZgcAQ^VSFaP`l?t)b^TC8 z(VQE@?km~I)YvSzzkplfpP@93v7Mr^FSqk z*ldIdtS_*^7r`XI;JpA0f79?0eCh?ZV6y?@-)`9mY%j3&Qn1->H-;Z0*j|pnEWm}z z0-NGDg5O7m|FPq5nk~0L7R@8@xje>SCwU_J&9>qF9y;>}lYsay2LLxf1t|LWm|H-j z0+ZxZg0g-O!MXoM{we0qoLzq-KM8YoeU1Dk#KT)C4?xgt+WZN&0mon5hS>ih%U|7x z*#9BR|F{Y91fdOn4<3W&J^urazgKp z;Q1qkKT-G_yZq+}*c)h90B6tN6}Vad@oQt3zl~ta@plDqr98~@;|QS6v0I)r5itDb z5(xa}5(xa}5?JOp5eSdEzEa-p>;D&m;r}0Va&mHVa&mHVa{8ZZ+z;ipH>lW_?F}ln zMfG#AxIx9XPxW&!+e0jEP_Z5WrhlBpLVaEP`+@M{2#M^ z;pF7xxj+E{$&rfgkYobjAKYns2{6E!Y3C ze{W15dzV{i{s#mg*8gE;0*oQJoM*5$e!}_Q2h`W4`ai6)82h(vaG|~q>pVffeL9?945FX#^;vHsukXBpR^<YrsjnMw_eue_jdS=faH2kyiM0QYqFr(3f?Kd>}2JJUA2Q9!W^?!Uu6B}s$@cIlJIGmiEoSdATehz*A zJ~TlO?RMU;Pfx!Mjd88^`@>=P`yWqFe-2G@o%V<4{WC`J8xG(x^6zN^I3oYs>u!t#nC4#`z9-~= z8Jgu9wev5I-{*1ioB5X_*zd>5PxJ2yBfzJ)5vIS_PQWIDao#^YiU8C9G+usl4aPcu rb=u+VHOl9ockMpihIeC8r+pL7qkO@)500000NkvXXu0mjfYiIXP)aF5ee!e9_mUn$H&V5001-p0RNc)|Nj90%x15BG)Vve00DGTPE!Ct z=GbNc006goR9JLGWpiV4X>fFDZ*Bkpc$}q?%?iRW5QNXkQ-t0D*f{cRaViIHC_Gs`U6Vlp>=(ofSdpT0MtoDK~z|U zV_+Bsv;u-kN(u}hOe|0o6jU}g6eL~)1EZjdi=!YZjtXU9U=5(92G+CyhOkr;G=!z4 zvZkexU`1GYDrxfrU0Ffu7L?HnPBjnAOJ2PB&dj@0G-dF0Rcp7Anc@>3ivgU z>}i64 zzY5JsBzt-kjDk@x3PvCxxqd(^Y?;oW@$aJYF^Y4cGidy~==B4s8c251X#Ftc000IA VJ1$N$$p-)c002ovPDHLkV1kY#-v$5x From b7f74541b8874a4a5a22c1b14bb7876cc17f20b4 Mon Sep 17 00:00:00 2001 From: Neerti Date: Sun, 11 Jun 2017 02:52:53 -0400 Subject: [PATCH 204/261] Makes Examine Panel slightly more useful. The examine panel can now display different interactions with a few items, using icons, mostly as a proof of concept. --- code/game/machinery/doors/airlock.dm | 5 +- code/game/turfs/simulated/wall_attacks.dm | 9 ++++ .../examine/descriptions/engineering.dm | 47 ++++++++++++++++++- code/modules/examine/descriptions/turfs.dm | 34 +++++++++++++- code/modules/examine/examine.dm | 18 ++++++- code/modules/examine/stat_icons.dm | 18 ++++++- 6 files changed, 123 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 5d8d068d49..5e43231ed6 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -753,6 +753,9 @@ About the new airlock wires panel: update_icon() return 1 +/obj/machinery/door/airlock/proc/can_remove_electronics() + return src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) + /obj/machinery/door/airlock/attackby(C as obj, mob/user as mob) //world << text("airlock attackby src [] obj [] mob []", src, C, user) if(!istype(usr, /mob/living/silicon)) @@ -797,7 +800,7 @@ About the new airlock wires panel: var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) else if(!repairing && istype(C, /obj/item/weapon/crowbar)) - if(src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) ) + if(can_remove_electronics()) playsound(src.loc, 'sound/items/Crowbar.ogg', 75, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") if(do_after(user,40)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 890574d664..25b4915408 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -190,6 +190,7 @@ else user << "You need more welding fuel to complete this task." return + user.update_examine_panel(src) return // Basic dismantling. @@ -243,6 +244,7 @@ if (istype(W, /obj/item/weapon/wirecutters)) playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) construction_stage = 5 + user.update_examine_panel(src) user << "You cut through the outer grille." update_icon() return @@ -253,11 +255,13 @@ if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 5) return construction_stage = 4 + user.update_examine_panel(src) update_icon() user << "You unscrew the support lines." return else if (istype(W, /obj/item/weapon/wirecutters)) construction_stage = 6 + user.update_examine_panel(src) user << "You mend the outer grille." update_icon() return @@ -280,6 +284,7 @@ if(!do_after(user, 60) || !istype(src, /turf/simulated/wall) || construction_stage != 4) return construction_stage = 3 + user.update_examine_panel(src) update_icon() user << "You press firmly on the cover, dislodging it." return @@ -289,6 +294,7 @@ if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 4) return construction_stage = 5 + user.update_examine_panel(src) update_icon() user << "You screw down the support lines." return @@ -299,6 +305,7 @@ if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || construction_stage != 3) return construction_stage = 2 + user.update_examine_panel(src) update_icon() user << "You pry off the cover." return @@ -309,6 +316,7 @@ if(!do_after(user,40) || !istype(src, /turf/simulated/wall) || construction_stage != 2) return construction_stage = 1 + user.update_examine_panel(src) update_icon() user << "You remove the bolts anchoring the support rods." return @@ -329,6 +337,7 @@ if(!do_after(user,70) || !istype(src, /turf/simulated/wall) || construction_stage != 1) return construction_stage = 0 + user.update_examine_panel(src) update_icon() user << "The slice through the support rods." return diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm index c3f9b9b21f..37e69f16f9 100644 --- a/code/modules/examine/descriptions/engineering.dm +++ b/code/modules/examine/descriptions/engineering.dm @@ -25,11 +25,54 @@ Wires can be pulsed remotely with a signaler attached to it. A powersink will also drain any APCs connected to the same wire the powersink is on." /obj/item/inflatable - description_info = "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb." + description_info = "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb. \ + You can also inflate this on an adjacent tile by clicking the tile." /obj/structure/inflatable - description_info = "To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." + description_info = "To remove these safely, use the 'deflate' verb, or alt-click on it. Hitting these with any objects will probably puncture and break it forever." /obj/structure/inflatable/door description_info = "Click the door to open or close it. It only stops air while closed.
    \ To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." + +/obj/machinery/door/get_description_interaction() + var/list/results = list() + if(!repairing && (health < maxhealth) && !(stat & BROKEN)) + results += "[desc_panel_image("metal sheet")]to start repairing damage (May require different material type)." + if(repairing && density) + results += "[desc_panel_image("welder")]to finish repairs." + results += "[desc_panel_image("crowbar")]to undo adding sheets for repairs." + + return results + +/obj/machinery/door/airlock/get_description_interaction() + var/list/results = list() + + if(can_remove_electronics()) + results += "[desc_panel_image("crowbar")]to remove the airlock electronics." + else + results += "[desc_panel_image("crowbar")]to open or close if unpowered/broken, and unbolted." + + if(welded) + results += "[desc_panel_image("welder")]to unweld, allowing it to open again." + else + results += "[desc_panel_image("welder")]to weld, preventing it from opening." + + if(p_open) + results += "[desc_panel_image("screwdriver")]to close the wire panel." + results += "[desc_panel_image("wirecutters")]to cut an internal wire while hacking." + results += "[desc_panel_image("multitool")]to pulse an internal wire while hacking." + else + results += "[desc_panel_image("screwdriver")]to open the wire panel, enabling the ability to hack." + + results += ..() + + return results + +/obj/machinery/portable_atmospherics/canister/get_description_interaction() + var/list/results = list() + + results += "[desc_panel_image("wrench")]to connect or disconnect from a connector port below." + results += "[desc_panel_image("air tank")]to fill the air tank from this canister." + + return results \ No newline at end of file diff --git a/code/modules/examine/descriptions/turfs.dm b/code/modules/examine/descriptions/turfs.dm index cccc43e073..4319c23ffe 100644 --- a/code/modules/examine/descriptions/turfs.dm +++ b/code/modules/examine/descriptions/turfs.dm @@ -1,3 +1,33 @@ /turf/simulated/wall - description_info = "You can deconstruct this by welding it, and then wrenching the girder.
    \ - You can build a wall by using metal sheets and making a girder, then adding more metal or plasteel." \ No newline at end of file + description_info = "You can build a wall by using metal sheets and making a girder, then adding more metal or plasteel." + +/turf/simulated/wall/get_description_interaction() + var/list/results = list() + if(damage) + results += "[desc_panel_image("welder")]to repair." + + if(isnull(construction_stage) || !reinf_material) + results += "[desc_panel_image("welder")]to deconstruct if undamaged." + else + switch(construction_stage) + if(6) + results += "[desc_panel_image("wirecutters")]to begin deconstruction." + if(5) + results += list( + "[desc_panel_image("screwdriver")]to continue deconstruction.", + "[desc_panel_image("wirecutters")]to reverse deconstruction." + ) + if(4) + results += list( + "[desc_panel_image("welder")]to continue deconstruction.", + "[desc_panel_image("screwdriver")]to reverse deconstruction." + ) + if(3) + results += "[desc_panel_image("crowbar")]to continue deconstruction." + if(2) + results += "[desc_panel_image("wrench")]to continue deconstruction." + if(1) + results += "[desc_panel_image("welder")]to continue deconstruction." + if(0) + results += "[desc_panel_image("crowbar")]to finish deconstruction." + return results \ No newline at end of file diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index ec64ffbe41..6e2df0b1fa 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -5,6 +5,7 @@ This means that this file can be unchecked, along with the other examine files, and can be removed entirely with no effort. */ +#define EXAMINE_PANEL_PADDING " " /atom/ var/description_info = null //Helpful blue text. @@ -27,6 +28,14 @@ return description_antag return +// This one is slightly different, in that it must return a list. +/atom/proc/get_description_interaction() + return list() + +// Quickly adds the boilerplate code to add an image and padding for the image. +/proc/desc_panel_image(var/icon_state) + return "\icon[description_icons[icon_state]][EXAMINE_PANEL_PADDING]" + /mob/living/get_description_fluff() if(flavor_text) //Get flavor text for the green text. return flavor_text @@ -44,6 +53,7 @@ description_holders["info"] = A.get_description_info() description_holders["fluff"] = A.get_description_fluff() description_holders["antag"] = (update_antag_info)? A.get_description_antag() : "" + description_holders["interactions"] = A.get_description_interaction() description_holders["name"] = "[A.name]" description_holders["icon"] = "\icon[A]" @@ -57,6 +67,9 @@ stat(null,"[description_holders["desc"]]") //the default examine text. if(description_holders["info"]) stat(null,"[description_holders["info"]]") //Blue, informative text. + if(description_holders["interactions"]) + for(var/line in description_holders["interactions"]) + stat(null, "[line]") if(description_holders["fluff"]) stat(null,"[description_holders["fluff"]]") //Yellow, fluff-related text. if(description_holders["antag"]) @@ -67,6 +80,9 @@ if(..()) return 1 - var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds + update_examine_panel(A) + +/mob/proc/update_examine_panel(var/atom/A) if(client) + var/is_antag = ((mind && mind.special_role) || isobserver(src)) //ghosts don't have minds client.update_description_holders(A, is_antag) diff --git a/code/modules/examine/stat_icons.dm b/code/modules/examine/stat_icons.dm index 77d97fe0a1..ba09157d1c 100644 --- a/code/modules/examine/stat_icons.dm +++ b/code/modules/examine/stat_icons.dm @@ -6,5 +6,19 @@ var/global/list/description_icons = list( "energy_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="energy_protection"), "bomb_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="bomb_protection"), "radiation_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="radiation_protection"), - "biohazard_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="biohazard_protection") - ) \ No newline at end of file + "biohazard_armor" = image(icon='icons/mob/screen1_stats.dmi',icon_state="biohazard_protection"), + + "welder" = image(icon='icons/obj/items.dmi',icon_state="welder"), + "wirecutters" = image(icon='icons/obj/items.dmi',icon_state="cutters"), + "screwdriver" = image(icon='icons/obj/items.dmi',icon_state="screwdriver"), + "wrench" = image(icon='icons/obj/items.dmi',icon_state="wrench"), + "crowbar" = image(icon='icons/obj/items.dmi',icon_state="crowbar"), + "multitool" = image(icon='icons/obj/device.dmi',icon_state="multitool"), + + "metal sheet" = image(icon='icons/obj/items.dmi',icon_state="sheet-metal"), + "plasteel sheet" = image(icon='icons/obj/items.dmi',icon_state="sheet-plasteel"), + + "air tank" = image(icon='icons/obj/tank.dmi',icon_state="oxygen"), + + "connector" = image(icon='icons/obj/pipes.dmi',icon_state="connector") + ) From 8cefd8f7026377390ffef37d3ac8a820f8f15134 Mon Sep 17 00:00:00 2001 From: InterroLouis Date: Sun, 11 Jun 2017 11:45:00 -0400 Subject: [PATCH 205/261] Update custom_guns_vr.dm --- code/modules/vore/fluffstuff/custom_guns_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 02e330fb49..ce1c9e64b9 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -1051,7 +1051,7 @@ name = "speedloader (.44)" desc = "A speedloader for .44 revolvers." icon = 'icons/obj/ammo_vr.dmi' - icon_state = "357" + icon_state = "s357" caliber = ".44" matter = list(DEFAULT_WALL_MATERIAL = 1260) ammo_type = /obj/item/ammo_casing/a44 From 18012fa1d16d61af16c7968c5d0c935e022411ed Mon Sep 17 00:00:00 2001 From: Neerti Date: Sun, 11 Jun 2017 04:47:52 -0400 Subject: [PATCH 206/261] Port's Bay's Shuttle Cleanup Shuttles now set themselves up upon being instantiated instead of relying on a monolithic proc in the shuttle controller. Shuttles can now be defined more cleanly on a per-map basis, as well. Accidentally fixes a broken admin shuttle. --- .../emergency_shuttle_controller.dm | 4 + code/controllers/shuttle_controller.dm | 317 +----------------- code/modules/shuttles/_defines.dm | 4 + code/modules/shuttles/escape_pods.dm | 20 +- code/modules/shuttles/shuttle.dm | 23 ++ code/modules/shuttles/shuttle_emergency.dm | 8 +- code/modules/shuttles/shuttle_ferry.dm | 12 +- code/modules/shuttles/shuttle_specops.dm | 6 +- code/modules/shuttles/shuttle_supply.dm | 21 +- code/modules/shuttles/shuttles_multi.dm | 8 +- maps/northern_star/northern_star.dm | 1 + maps/northern_star/northern_star_shuttles.dm | 272 +++++++++++++++ polaris.dme | 1 + 13 files changed, 365 insertions(+), 332 deletions(-) create mode 100644 code/modules/shuttles/_defines.dm create mode 100644 maps/northern_star/northern_star_shuttles.dm diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/emergency_shuttle_controller.dm index 5b1b6a60d1..7fb3a56c61 100644 --- a/code/controllers/emergency_shuttle_controller.dm +++ b/code/controllers/emergency_shuttle_controller.dm @@ -22,6 +22,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg')) var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg')) +/datum/emergency_shuttle_controller/New() + escape_pods = list() + ..() + /datum/emergency_shuttle_controller/proc/process() if (wait_for_launch) if (evac && auto_recall && world.time >= auto_recall_time) diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index c95e4f242f..d881a65a4a 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -15,8 +15,13 @@ var/global/datum/shuttle_controller/shuttle_controller //This is called by gameticker after all the machines and radio frequencies have been properly initialized /datum/shuttle_controller/proc/setup_shuttle_docks() - for(var/shuttle_tag in shuttles) - var/datum/shuttle/shuttle = shuttles[shuttle_tag] +// for(var/shuttle_tag in shuttles) +// var/datum/shuttle/shuttle = shuttles[shuttle_tag] + for(var/shuttle_type in subtypesof(/datum/shuttle)) + var/datum/shuttle/shuttle = shuttle_type + if(initial(shuttle.category) == shuttle_type) + continue + shuttle = new shuttle() shuttle.init_docking_controllers() shuttle.dock() //makes all shuttles docked to something at round start go into the docked state @@ -28,311 +33,3 @@ var/global/datum/shuttle_controller/shuttle_controller shuttles = list() process_shuttles = list() - var/datum/shuttle/ferry/shuttle - - // Escape shuttle and pods - shuttle = new/datum/shuttle/ferry/emergency() - shuttle.location = 1 - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/shuttle/escape/centcom) - shuttle.area_station = locate(/area/shuttle/escape/station) - shuttle.area_transition = locate(/area/shuttle/escape/transit) - shuttle.docking_controller_tag = "escape_shuttle" - shuttle.dock_target_station = "escape_dock" - shuttle.dock_target_offsite = "centcom_dock" - shuttle.transit_direction = NORTH - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN - //shuttle.docking_controller_tag = "supply_shuttle" - //shuttle.dock_target_station = "cargo_bay" - shuttles["Escape"] = shuttle - process_shuttles += shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod1/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod1/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod1/transit) - shuttle.docking_controller_tag = "escape_pod_1" - shuttle.dock_target_station = "escape_pod_1_berth" - shuttle.dock_target_offsite = "escape_pod_1_recovery" - shuttle.transit_direction = NORTH - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 1"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod2/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod2/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod2/transit) - shuttle.docking_controller_tag = "escape_pod_2" - shuttle.dock_target_station = "escape_pod_2_berth" - shuttle.dock_target_offsite = "escape_pod_2_recovery" - shuttle.transit_direction = NORTH - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 2"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod3/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod3/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod3/transit) - shuttle.docking_controller_tag = "escape_pod_3" - shuttle.dock_target_station = "escape_pod_3_berth" - shuttle.dock_target_offsite = "escape_pod_3_recovery" - shuttle.transit_direction = NORTH - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 3"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod4/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod4/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod4/transit) - shuttle.docking_controller_tag = "escape_pod_4" - shuttle.dock_target_station = "escape_pod_4_berth" - shuttle.dock_target_offsite = "escape_pod_4_recovery" - shuttle.transit_direction = NORTH //should this be SOUTH? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 4"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod5/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod5/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod5/transit) - shuttle.docking_controller_tag = "escape_pod_5" - shuttle.dock_target_station = "escape_pod_5_berth" - shuttle.dock_target_offsite = "escape_pod_5_recovery" - shuttle.transit_direction = NORTH //should this be WEST? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 5"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/escape_pod6/station) - shuttle.area_offsite = locate(/area/shuttle/escape_pod6/centcom) - shuttle.area_transition = locate(/area/shuttle/escape_pod6/transit) - shuttle.docking_controller_tag = "escape_pod_6" - shuttle.dock_target_station = "escape_pod_6_berth" - shuttle.dock_target_offsite = "escape_pod_6_recovery" - shuttle.transit_direction = NORTH //should this be WEST? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Escape Pod 6"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/cryo/station) - shuttle.area_offsite = locate(/area/shuttle/cryo/centcom) - shuttle.area_transition = locate(/area/shuttle/cryo/transit) - shuttle.docking_controller_tag = "cryostorage_shuttle" - shuttle.dock_target_station = "cryostorage_shuttle_berth" - shuttle.dock_target_offsite = "cryostorage_shuttle_recovery" - shuttle.transit_direction = NORTH //should this be WEST? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Cryostorage Shuttle"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/large_escape_pod1/station) - shuttle.area_offsite = locate(/area/shuttle/large_escape_pod1/centcom) - shuttle.area_transition = locate(/area/shuttle/large_escape_pod1/transit) - shuttle.docking_controller_tag = "large_escape_pod_1" - shuttle.dock_target_station = "large_escape_pod_1_berth" - shuttle.dock_target_offsite = "large_escape_pod_1_recovery" - shuttle.transit_direction = EAST //should this be WEST? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Large Escape Pod 1"] = shuttle - - shuttle = new/datum/shuttle/ferry/escape_pod() - shuttle.location = 0 - shuttle.warmup_time = 0 - shuttle.area_station = locate(/area/shuttle/large_escape_pod2/station) - shuttle.area_offsite = locate(/area/shuttle/large_escape_pod2/centcom) - shuttle.area_transition = locate(/area/shuttle/large_escape_pod2/transit) - shuttle.docking_controller_tag = "large_escape_pod_2" - shuttle.dock_target_station = "large_escape_pod_2_berth" - shuttle.dock_target_offsite = "large_escape_pod_2_recovery" - shuttle.transit_direction = EAST //should this be WEST? I have no idea. - shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one - process_shuttles += shuttle - shuttles["Large Escape Pod 2"] = shuttle - - //give the emergency shuttle controller it's shuttles - emergency_shuttle.shuttle = shuttles["Escape"] - emergency_shuttle.escape_pods = list( - shuttles["Escape Pod 1"], - shuttles["Escape Pod 2"], - shuttles["Escape Pod 3"], - shuttles["Escape Pod 4"], - shuttles["Escape Pod 5"], - shuttles["Escape Pod 6"], - shuttles["Cryostorage Shuttle"], - shuttles["Large Escape Pod 1"], - shuttles["Large Escape Pod 2"], - ) - - // Supply shuttle - shuttle = new/datum/shuttle/ferry/supply() - shuttle.location = 1 - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/supply/dock) - shuttle.area_station = locate(/area/supply/station) - shuttle.docking_controller_tag = "supply_shuttle" - shuttle.dock_target_station = "cargo_bay" - shuttles["Supply"] = shuttle - process_shuttles += shuttle - - supply_controller.shuttle = shuttle - - // Admin shuttles. - shuttle = new() - shuttle.location = 1 - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/shuttle/transport1/centcom) - shuttle.area_station = locate(/area/shuttle/transport1/station) - shuttle.docking_controller_tag = "centcom_shuttle" - shuttle.dock_target_station = "centcom_shuttle_dock_airlock" - shuttle.dock_target_offsite = "centcom_shuttle_bay" - shuttles["CentCom"] = shuttle - process_shuttles += shuttle - - shuttle = new() - shuttle.location = 1 - shuttle.warmup_time = 10 //want some warmup time so people can cancel. - shuttle.area_offsite = locate(/area/shuttle/administration/centcom) - shuttle.area_station = locate(/area/shuttle/administration/station) - shuttle.docking_controller_tag = "admin_shuttle" - shuttle.dock_target_station = "admin_shuttle_dock_airlock" - shuttle.dock_target_offsite = "admin_shuttle_bay" - shuttles["Administration"] = shuttle - process_shuttles += shuttle - - shuttle = new() - shuttle.location = 1 - shuttle.warmup_time = 10 //want some warmup time so people can cancel. - shuttle.area_offsite = locate(/area/shuttle/trade/centcom) - shuttle.area_station = locate(/area/shuttle/trade/station) - shuttle.docking_controller_tag = "trade_shuttle" - shuttle.dock_target_station = "trade_shuttle_dock_airlock" - shuttle.dock_target_offsite = "trade_shuttle_bay" - shuttles["Trade"] = shuttle - process_shuttles += shuttle - - shuttle = new() - shuttle.area_offsite = locate(/area/shuttle/alien/base) - shuttle.area_station = locate(/area/shuttle/alien/mine) - shuttles["Alien"] = shuttle - //process_shuttles += shuttle //don't need to process this. It can only be moved using admin magic anyways. - - // Public shuttles - shuttle = new() - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/shuttle/constructionsite/site) - shuttle.area_station = locate(/area/shuttle/constructionsite/station) - shuttle.docking_controller_tag = "engineering_shuttle" - shuttle.dock_target_station = "engineering_dock_airlock" - shuttle.dock_target_offsite = "edock_airlock" - shuttles["Engineering"] = shuttle - process_shuttles += shuttle - - shuttle = new() - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/shuttle/mining/outpost) - shuttle.area_station = locate(/area/shuttle/mining/station) - shuttle.docking_controller_tag = "mining_shuttle" - shuttle.dock_target_station = "mining_dock_airlock" - shuttle.dock_target_offsite = "mining_outpost_airlock" - shuttles["Mining"] = shuttle - process_shuttles += shuttle - - shuttle = new() - shuttle.warmup_time = 10 - shuttle.area_offsite = locate(/area/shuttle/research/outpost) - shuttle.area_station = locate(/area/shuttle/research/station) - shuttle.docking_controller_tag = "research_shuttle" - shuttle.dock_target_station = "research_dock_airlock" - shuttle.dock_target_offsite = "research_outpost_dock" - shuttles["Research"] = shuttle - process_shuttles += shuttle - - // ERT Shuttle - var/datum/shuttle/ferry/multidock/specops/ERT = new() - ERT.location = 0 - ERT.warmup_time = 10 - ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the player station is offsite - ERT.area_station = locate(/area/shuttle/specops/centcom) - ERT.docking_controller_tag = "specops_shuttle_port" - ERT.docking_controller_tag_station = "specops_shuttle_port" - ERT.docking_controller_tag_offsite = "specops_shuttle_fore" - ERT.dock_target_station = "specops_centcom_dock" - ERT.dock_target_offsite = "specops_dock_airlock" - shuttles["Special Operations"] = ERT - process_shuttles += ERT - - //Skipjack. - var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle() - VS.origin = locate(/area/skipjack_station/start) - - VS.destinations = list( - "Fore Starboard Solars" = locate(/area/skipjack_station/northeast_solars), - "Fore Port Solars" = locate(/area/skipjack_station/northwest_solars), - "Aft Starboard Solars" = locate(/area/skipjack_station/southeast_solars), - "Aft Port Solars" = locate(/area/skipjack_station/southwest_solars), - "Mining Station" = locate(/area/skipjack_station/mining) - ) - - VS.announcer = "Colony Automated Radar Array" - VS.arrival_message = "Attention. Unidentified object approaching the colony." - VS.departure_message = "Attention. Unidentified object exiting local space. Unidentified object expected to escape Kara gravity well with current velocity." - VS.interim = locate(/area/skipjack_station/transit) - - VS.warmup_time = 0 - shuttles["Skipjack"] = VS - - //Nuke Ops shuttle. - var/datum/shuttle/multi_shuttle/MS = new/datum/shuttle/multi_shuttle() - MS.origin = locate(/area/syndicate_station/start) - MS.start_location = "Mercenary Base" - - MS.destinations = list( - "Northwest of the station" = locate(/area/syndicate_station/northwest), - "North of the station" = locate(/area/syndicate_station/north), - "Northeast of the station" = locate(/area/syndicate_station/northeast), - "Southwest of the station" = locate(/area/syndicate_station/southwest), - "South of the station" = locate(/area/syndicate_station/south), - "Southeast of the station" = locate(/area/syndicate_station/southeast), - "Telecomms Satellite" = locate(/area/syndicate_station/commssat), - "Mining Station" = locate(/area/syndicate_station/mining), - "Arrivals dock" = locate(/area/syndicate_station/arrivals_dock), - ) - - MS.docking_controller_tag = "merc_shuttle" - MS.destination_dock_targets = list( - "Mercenary Base" = "merc_base", - "Arrivals dock" = "nuke_shuttle_dock_airlock", - ) - - MS.announcer = "Automated Traffic Control" - MS.arrival_message = "Attention. A vessel is approaching the colony." - MS.departure_message = "Attention. A vessel is now leaving from the colony." - MS.interim = locate(/area/syndicate_station/transit) - - MS.warmup_time = 0 - shuttles["Mercenary"] = MS - diff --git a/code/modules/shuttles/_defines.dm b/code/modules/shuttles/_defines.dm new file mode 100644 index 0000000000..ad8c39466b --- /dev/null +++ b/code/modules/shuttles/_defines.dm @@ -0,0 +1,4 @@ +#define SHUTTLE_FLAGS_NONE 0 +#define SHUTTLE_FLAGS_PROCESS 1 +#define SHUTTLE_FLAGS_SUPPLY 2 +#define SHUTTLE_FLAGS_ALL (~SHUTTLE_FLAGS_NONE) \ No newline at end of file diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index fd6aabc4a2..b832e94dbd 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -1,16 +1,24 @@ /datum/shuttle/ferry/escape_pod var/datum/computer/file/embedded_program/docking/simple/escape_pod/arming_controller + category = /datum/shuttle/ferry/escape_pod + +/datum/shuttle/ferry/escape_pod/New() + move_time = move_time + rand(-30, 60) + if(name in emergency_shuttle.escape_pods) + CRASH("An escape pod with the name '[name]' has already been defined.") + emergency_shuttle.escape_pods[name] = src + ..() /datum/shuttle/ferry/escape_pod/init_docking_controllers() ..() arming_controller = locate(dock_target_station) if(!istype(arming_controller)) - world << "warning: escape pod with station dock tag [dock_target_station] could not find it's dock target!" - + warning("warning: escape pod with station dock tag [dock_target_station] could not find it's dock target!") + if(docking_controller) var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/controller_master = docking_controller.master if(!istype(controller_master)) - world << "warning: escape pod with docking tag [docking_controller_tag] could not find it's controller master!" + warning("warning: escape pod with docking tag [docking_controller_tag] could not find it's controller master!") else controller_master.pod = src @@ -29,7 +37,7 @@ /datum/shuttle/ferry/escape_pod/can_cancel() return 0 - + //This controller goes on the escape pod itself /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod name = "escape pod controller" @@ -58,7 +66,7 @@ /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Topic(href, href_list) if(..()) return 1 - + if("manual_arm") pod.arming_controller.arm() if("force_launch") @@ -87,7 +95,7 @@ if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod)) var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program armed = P.armed - + data = list( "docking_status" = docking_program.get_docking_status(), "override_enabled" = docking_program.override_enabled, diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 8c6e611886..f7f655ba4d 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -4,6 +4,7 @@ //shuttle moving state defines are in setup.dm /datum/shuttle + var/name = "" var/warmup_time = 0 var/moving_status = SHUTTLE_IDLE @@ -12,6 +13,28 @@ var/arrive_time = 0 //the time at which the shuttle arrives when long jumping + var/flags = SHUTTLE_FLAGS_PROCESS + var/category = /datum/shuttle + +/datum/shuttle/New() + ..() + if(src.name in shuttle_controller.shuttles) + CRASH("A shuttle with the name '[name]' is already defined.") + shuttle_controller.shuttles[src.name] = src + if(flags & SHUTTLE_FLAGS_PROCESS) + shuttle_controller.process_shuttles += src + if(flags & SHUTTLE_FLAGS_SUPPLY) + if(supply_controller.shuttle) + CRASH("A supply shuttle is already defined.") + supply_controller.shuttle = src + +/datum/shuttle/Destroy() + shuttle_controller.shuttles -= src.name + shuttle_controller.process_shuttles -= src + if(supply_controller.shuttle == src) + supply_controller.shuttle = null + . = ..() + /datum/shuttle/proc/init_docking_controllers() if(docking_controller_tag) docking_controller = locate(docking_controller_tag) diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index beea1781b4..347243ae5c 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -1,5 +1,11 @@ /datum/shuttle/ferry/emergency - //pass + category = /datum/shuttle/ferry/emergency + +/datum/shuttle/ferry/emergency/New() + if(emergency_shuttle.shuttle) + CRASH("An emergency shuttle has already been defined.") + emergency_shuttle.shuttle = src + ..() /datum/shuttle/ferry/emergency/arrived() if (istype(in_use, /obj/machinery/computer/shuttle_control/emergency)) diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm index 0a288a1ba9..d076357735 100644 --- a/code/modules/shuttles/shuttle_ferry.dm +++ b/code/modules/shuttles/shuttle_ferry.dm @@ -11,13 +11,21 @@ var/move_time = 0 //the time spent in the transition area var/transit_direction = null //needed for area/move_contents_to() to properly handle shuttle corners - not exactly sure how it works. - var/area_station - var/area_offsite + var/area/area_station + var/area/area_offsite //TODO: change location to a string and use a mapping for area and dock targets. var/dock_target_station var/dock_target_offsite var/last_dock_attempt_time = 0 + category = /datum/shuttle/ferry + +/datum/shuttle/ferry/New() + area_offsite = locate(area_offsite) + area_station = locate(area_station) + if(area_transition) + area_transition = locate(area_transition) + ..() /datum/shuttle/ferry/short_jump(var/area/origin,var/area/destination) if(isnull(location)) diff --git a/code/modules/shuttles/shuttle_specops.dm b/code/modules/shuttles/shuttle_specops.dm index 434bb37f42..d9cc121f79 100644 --- a/code/modules/shuttles/shuttle_specops.dm +++ b/code/modules/shuttles/shuttle_specops.dm @@ -13,16 +13,17 @@ var/docking_controller_tag_offsite var/datum/computer/file/embedded_program/docking/docking_controller_station var/datum/computer/file/embedded_program/docking/docking_controller_offsite + category = /datum/shuttle/ferry/multidock /datum/shuttle/ferry/multidock/init_docking_controllers() if(docking_controller_tag_station) docking_controller_station = locate(docking_controller_tag_station) if(!istype(docking_controller_station)) - world << "warning: shuttle with docking tag [docking_controller_station] could not find it's controller!" + warning("warning: shuttle with docking tag [docking_controller_station] could not find it's controller!") if(docking_controller_tag_offsite) docking_controller_offsite = locate(docking_controller_tag_offsite) if(!istype(docking_controller_offsite)) - world << "warning: shuttle with docking tag [docking_controller_offsite] could not find it's controller!" + warning("warning: shuttle with docking tag [docking_controller_offsite] could not find it's controller!") if (!location) docking_controller = docking_controller_station else @@ -43,6 +44,7 @@ var/reset_time = 0 //the world.time at which the shuttle will be ready to move again. var/launch_prep = 0 var/cancel_countdown = 0 + category = /datum/shuttle/ferry/multidock/specops /datum/shuttle/ferry/multidock/specops/New() ..() diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm index c4122434e7..9a6b7f3380 100644 --- a/code/modules/shuttles/shuttle_supply.dm +++ b/code/modules/shuttles/shuttle_supply.dm @@ -2,11 +2,12 @@ var/away_location = 1 //the location to hide at while pretending to be in-transit var/late_chance = 80 var/max_late_time = 300 + category = /datum/shuttle/ferry/supply /datum/shuttle/ferry/supply/short_jump(var/area/origin,var/area/destination) if(moving_status != SHUTTLE_IDLE) return - + if(isnull(location)) return @@ -18,21 +19,21 @@ //it would be cool to play a sound here moving_status = SHUTTLE_WARMUP spawn(warmup_time*10) - if (moving_status == SHUTTLE_IDLE) + if (moving_status == SHUTTLE_IDLE) return //someone cancelled the launch - + if (at_station() && forbidden_atoms_check()) //cancel the launch because of forbidden atoms. announce over supply channel? moving_status = SHUTTLE_IDLE return - + if (!at_station()) //at centcom supply_controller.buy() - + //We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period. var/area/away_area = get_location_area(away_location) moving_status = SHUTTLE_INTRANSIT - + //If we are at the away_area then we are just pretending to move, otherwise actually do the move if (origin != away_area) move(origin, away_area) @@ -46,11 +47,11 @@ //late if (prob(late_chance)) sleep(rand(0,max_late_time)) - + move(away_area, destination) - + moving_status = SHUTTLE_IDLE - + if (!at_station()) //at centcom supply_controller.sell() @@ -58,7 +59,7 @@ /datum/shuttle/ferry/supply/proc/forbidden_atoms_check() if (!at_station()) return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care - + return supply_controller.forbidden_atoms_check(get_location_area()) /datum/shuttle/ferry/supply/proc/at_station() diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm index 47b430329a..9dc7e4312e 100644 --- a/code/modules/shuttles/shuttles_multi.dm +++ b/code/modules/shuttles/shuttles_multi.dm @@ -1,6 +1,7 @@ //This is a holder for things like the Skipjack and Nuke shuttle. /datum/shuttle/multi_shuttle + flags = SHUTTLE_FLAGS_NONE var/cloaked = 1 var/at_origin = 1 var/returned_home = 0 @@ -22,8 +23,13 @@ var/list/destination_dock_targets = list() var/area/origin var/return_warning = 0 + category = /datum/shuttle/multi_shuttle /datum/shuttle/multi_shuttle/New() + origin = locate(origin) + interim = locate(interim) + for(var/destination in destinations) + destinations[destination] = locate(destinations[destination]) ..() /datum/shuttle/multi_shuttle/init_docking_controllers() @@ -36,7 +42,7 @@ var/datum/computer/file/embedded_program/docking/C = locate(controller_tag) if(!istype(C)) - world << "warning: shuttle with docking tag [controller_tag] could not find it's controller!" + warning("warning: shuttle with docking tag [controller_tag] could not find it's controller!") else destination_dock_controllers[destination] = C diff --git a/maps/northern_star/northern_star.dm b/maps/northern_star/northern_star.dm index 2212774657..fe95bbaeb6 100644 --- a/maps/northern_star/northern_star.dm +++ b/maps/northern_star/northern_star.dm @@ -7,6 +7,7 @@ #include "polaris-5.dmm" #include "northern_star_defines.dm" + #include "northern_star_shuttles.dm" #define USING_MAP_DATUM /datum/map/northern_star diff --git a/maps/northern_star/northern_star_shuttles.dm b/maps/northern_star/northern_star_shuttles.dm new file mode 100644 index 0000000000..44a5e1a5bd --- /dev/null +++ b/maps/northern_star/northern_star_shuttles.dm @@ -0,0 +1,272 @@ +// Escape shuttle and pods +/datum/shuttle/ferry/emergency/centcom + name = "Escape" + location = 1 + warmup_time = 10 + area_offsite = /area/shuttle/escape/centcom + area_station = /area/shuttle/escape/station + area_transition = /area/shuttle/escape/transit + docking_controller_tag = "escape_shuttle" + dock_target_station = "escape_dock" + dock_target_offsite = "centcom_dock" + transit_direction = NORTH + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_one + name = "Escape Pod 1" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod1/station + area_offsite = /area/shuttle/escape_pod1/centcom + area_transition = /area/shuttle/escape_pod1/transit + docking_controller_tag = "escape_pod_1" + dock_target_station = "escape_pod_1_berth" + dock_target_offsite = "escape_pod_1_recovery" + transit_direction = NORTH + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_two + name = "Escape Pod 2" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod2/station + area_offsite = /area/shuttle/escape_pod2/centcom + area_transition = /area/shuttle/escape_pod2/transit + docking_controller_tag = "escape_pod_2" + dock_target_station = "escape_pod_2_berth" + dock_target_offsite = "escape_pod_2_recovery" + transit_direction = NORTH + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_three + name = "Escape Pod 3" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod3/station + area_offsite = /area/shuttle/escape_pod3/centcom + area_transition = /area/shuttle/escape_pod3/transit + docking_controller_tag = "escape_pod_3" + dock_target_station = "escape_pod_3_berth" + dock_target_offsite = "escape_pod_3_recovery" + transit_direction = NORTH + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_four + name = "Escape Pod 4" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod4/station + area_offsite = /area/shuttle/escape_pod4/centcom + area_transition = /area/shuttle/escape_pod4/transit + docking_controller_tag = "escape_pod_4" + dock_target_station = "escape_pod_4_berth" + dock_target_offsite = "escape_pod_4_recovery" + transit_direction = NORTH //should this be SOUTH? I have no idea. + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_five + name = "Escape Pod 5" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod5/station + area_offsite = /area/shuttle/escape_pod5/centcom + area_transition = /area/shuttle/escape_pod5/transit + docking_controller_tag = "escape_pod_5" + dock_target_station = "escape_pod_5_berth" + dock_target_offsite = "escape_pod_5_recovery" + transit_direction = NORTH //should this be WEST? I have no idea. + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_six + name = "Escape Pod 6" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/escape_pod6/station + area_offsite = /area/shuttle/escape_pod6/centcom + area_transition = /area/shuttle/escape_pod6/transit + docking_controller_tag = "escape_pod_6" + dock_target_station = "escape_pod_6_berth" + dock_target_offsite = "escape_pod_6_recovery" + transit_direction = NORTH //should this be WEST? I have no idea. + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/escape_pod_cryo + name = "Cryostorage Shuttle" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/cryo/station + area_offsite = /area/shuttle/cryo/centcom + area_transition = /area/shuttle/cryo/transit + docking_controller_tag = "cryostorage_shuttle" + dock_target_station = "cryostorage_shuttle_berth" + dock_target_offsite = "cryostorage_shuttle_recovery" + transit_direction = NORTH + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/large_escape_pod1 + name = "Large Escape Pod 1" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/large_escape_pod1/station + area_offsite = /area/shuttle/large_escape_pod1/centcom + area_transition = /area/shuttle/large_escape_pod1/transit + docking_controller_tag = "large_escape_pod_1" + dock_target_station = "large_escape_pod_1_berth" + dock_target_offsite = "large_escape_pod_1_recovery" + transit_direction = EAST + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +/datum/shuttle/ferry/escape_pod/large_escape_pod2 + name = "Large Escape Pod 2" + location = 0 + warmup_time = 0 + area_station = /area/shuttle/large_escape_pod2/station + area_offsite = /area/shuttle/large_escape_pod2/centcom + area_transition = /area/shuttle/large_escape_pod2/transit + docking_controller_tag = "large_escape_pod_2" + dock_target_station = "large_escape_pod_2_berth" + dock_target_offsite = "large_escape_pod_2_recovery" + transit_direction = EAST + move_time = SHUTTLE_TRANSIT_DURATION_RETURN + +// Cargo shuttle. +/datum/shuttle/ferry/supply/cargo + name = "Supply" + location = 1 + warmup_time = 10 + area_offsite = /area/supply/dock + area_station = /area/supply/station + docking_controller_tag = "supply_shuttle" + dock_target_station = "cargo_bay" + flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY + +// The "Elevators" +/datum/shuttle/ferry/engineering + name = "Engineering" + warmup_time = 10 + area_offsite = /area/shuttle/constructionsite/site + area_station = /area/shuttle/constructionsite/station + docking_controller_tag = "engineering_shuttle" + dock_target_station = "engineering_dock_airlock" + dock_target_offsite = "edock_airlock" + +/datum/shuttle/ferry/mining + name = "Mining" + warmup_time = 10 + area_offsite = /area/shuttle/mining/outpost + area_station = /area/shuttle/mining/station + docking_controller_tag = "mining_shuttle" + dock_target_station = "mining_dock_airlock" + dock_target_offsite = "mining_outpost_airlock" + +/datum/shuttle/ferry/research + name = "Research" + warmup_time = 10 + area_offsite = /area/shuttle/research/outpost + area_station = /area/shuttle/research/station + docking_controller_tag = "research_shuttle" + dock_target_station = "research_dock_airlock" + dock_target_offsite = "research_outpost_dock" + +// Admin shuttles. +/datum/shuttle/ferry/centcom + name = "Centcom" + location = 1 + warmup_time = 10 + area_offsite = /area/shuttle/transport1/centcom + area_station = /area/shuttle/transport1/station + docking_controller_tag = "centcom_shuttle" + dock_target_station = "centcom_shuttle_dock_airlock" + dock_target_offsite = "centcom_shuttle_bay" + +/datum/shuttle/ferry/administration + name = "Administration" + location = 1 + warmup_time = 10 //want some warmup time so people can cancel. + area_offsite = /area/shuttle/administration/centcom + area_station = /area/shuttle/administration/station + docking_controller_tag = "admin_shuttle" + dock_target_station = "admin_shuttle_dock_airlock" + dock_target_offsite = "admin_shuttle_bay" + +// Traders +/datum/shuttle/ferry/trade + name = "Trade" + location = 1 + warmup_time = 10 //want some warmup time so people can cancel. + area_offsite = /area/shuttle/trade/centcom + area_station = /area/shuttle/trade/station + docking_controller_tag = "trade_shuttle" + dock_target_station = "trade_shuttle_dock_airlock" + dock_target_offsite = "trade_shuttle_bay" + +// Is this even used? +/datum/shuttle/ferry/alien + name = "Alien" + area_offsite = /area/shuttle/alien/base + area_station = /area/shuttle/alien/mine + flags = SHUTTLE_FLAGS_NONE + +// Mercenary +/datum/shuttle/multi_shuttle/mercenary + name = "Mercenary" + warmup_time = 0 + origin = /area/syndicate_station/start + interim = /area/syndicate_station/transit + start_location = "Mercenary Base" + destinations = list( + "Northwest of the station" = /area/syndicate_station/northwest, + "North of the station" = /area/syndicate_station/north, + "Northeast of the station" = /area/syndicate_station/northeast, + "Southwest of the station" = /area/syndicate_station/southwest, + "South of the station" = /area/syndicate_station/south, + "Southeast of the station" = /area/syndicate_station/southeast, + "Telecomms Satellite" = /area/syndicate_station/commssat, + "Mining Station" = /area/syndicate_station/mining, + "Arrivals dock" = /area/syndicate_station/arrivals_dock, + ) + docking_controller_tag = "merc_shuttle" + destination_dock_targets = list( + "Mercenary Base" = "merc_base", + "Arrivals dock" = "nuke_shuttle_dock_airlock", + ) + announcer = "Automated Traffic Control" + +/datum/shuttle/multi_shuttle/mercenary/New() + arrival_message = "Attention. A vessel is approaching the colony." + departure_message = "Attention. A vessel is now leaving from the colony." + ..() + +// Heist +/datum/shuttle/multi_shuttle/skipjack + name = "Skipjack" + warmup_time = 0 + origin = /area/skipjack_station/start + interim = /area/skipjack_station/transit + destinations = list( + "Fore Starboard Solars" = /area/skipjack_station/northeast_solars, + "Fore Port Solars" = /area/skipjack_station/northwest_solars, + "Aft Starboard Solars" = /area/skipjack_station/southeast_solars, + "Aft Port Solars" = /area/skipjack_station/southwest_solars, + "Mining Station" = /area/skipjack_station/mining + ) + announcer = "Automated Traffic Control" + +/datum/shuttle/multi_shuttle/skipjack/New() + arrival_message = "Attention. Unidentified object approaching the colony." + departure_message = "Attention. Unidentified object exiting local space. Unidentified object expected to escape Kara gravity well with current velocity." + ..() + +/datum/shuttle/ferry/multidock/specops/ert + name = "Special Operations" + location = 0 + warmup_time = 10 + area_offsite = /area/shuttle/specops/station //centcom is the home station, the Exodus is offsite + area_station = /area/shuttle/specops/centcom + docking_controller_tag = "specops_shuttle_port" + docking_controller_tag_station = "specops_shuttle_port" + docking_controller_tag_offsite = "specops_shuttle_fore" + dock_target_station = "specops_centcom_dock" + dock_target_offsite = "specops_dock_airlock" + + diff --git a/polaris.dme b/polaris.dme index 3b49b9566b..c9e1935850 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2039,6 +2039,7 @@ #include "code\modules\shieldgen\shield_diffuser.dm" #include "code\modules\shieldgen\shield_gen.dm" #include "code\modules\shieldgen\shield_gen_external.dm" +#include "code\modules\shuttles\_defines.dm" #include "code\modules\shuttles\antagonist.dm" #include "code\modules\shuttles\departmental.dm" #include "code\modules\shuttles\escape_pods.dm" From 7c3b3c43110aabd74148a9ae8ff1f328079819ec Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 11 Jun 2017 03:58:28 -0400 Subject: [PATCH 207/261] Adds the SleeveMate 3200 **This commit prevents dead people from being backup-implanted!** But it's fine because you just use this handheld thing to back them up instead and don't waste an implant, and medical starts with 4 so don't freak out. See below. Adds the SleeveMate 3200 hand-scanner device. This device allows you to scan people to determine several things about them: - If they have a mind in them - If they have a client attached - If their mind matches their body - If they are alive/conscious All of that is represented with in-universe messages of course. The real function of it is that it provides several features: - One-time mind scan: Performs a one-time mind scan for those that don't like getting mind backup implants. This will store that one scan in the database, but you'll forget everything since then if resleeved. This is also useful for resleeving someone who died without an implant, but is not DNR/DNC. - One-time body scan: Adds someone to the body scan database, or, updates their body scan if they obtained a new body. Useful if someone has used the body designer and switched bodies, as you can update their body scan. You should probably check medical records, and LOOC around before using this to resleeve someone that didn't have a body scan originally, because they may have picked that to avoid resleeving. - Store Whole Mind: Takes the entire mind from someone, storing it into the SleeveMate 3200, rendering the patient mindless. From there, it can be backed up as many times as needed, deleted, or stored into someone with a Soulcatcher NIFSoft and run live in their VR (so now you don't have to digest/kill people for that). Four SM3200's start in medical (1 in minimed downstairs, 3 upstairs), R&D can fab more, and they occasionally show up in trash piles for those wanting to be sneaky with a Soulcatcher, but who don't like digesting people. --- .../game/objects/items/devices/scanners_vr.dm | 211 ++++++++++++++++++ code/game/objects/structures/trash_pile.dm | 3 +- .../preference_setup/vore/04_resleeving.dm | 2 +- code/modules/research/designs_vr.dm | 8 + code/modules/resleeving/implant.dm | 2 +- code/modules/resleeving/infocore.dm | 14 +- code/modules/resleeving/machines.dm | 4 + icons/obj/device_alt.dmi | Bin 54974 -> 55528 bytes maps/tether/tether-01-surface.dmm | 2 +- maps/tether/tether-03-station.dmm | 6 +- vorestation.dme | 1 + 11 files changed, 242 insertions(+), 11 deletions(-) create mode 100644 code/game/objects/items/devices/scanners_vr.dm diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm new file mode 100644 index 0000000000..c0bd1391bc --- /dev/null +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -0,0 +1,211 @@ +var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob + +//SleeveMate! +/obj/item/device/sleevemate + name = "\improper SleeveMate 3200" + desc = "A hand-held sleeve management tool for performing one-time backups and managing mindstates." + icon = 'icons/obj/device_alt.dmi' + icon_state = "sleevemate" + item_state = "healthanalyzer" + flags = CONDUCT + slot_flags = SLOT_BELT + throwforce = 3 + w_class = ITEMSIZE_SMALL + throw_speed = 5 + throw_range = 10 + matter = list(DEFAULT_WALL_MATERIAL = 200) + origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2) + + var/datum/mind/stored_mind + +/obj/item/device/sleevemate/attack(mob/living/M, mob/living/user) + if(ishuman(M)) + scan_mob(M, user) + else + to_chat(user,"Not a compatible subject to work with!") + +/obj/item/device/sleevemate/attack_self(mob/living/user) + if(!stored_mind) + to_chat(user,"No stored mind in \the [src].") + return + + var/choice = alert(user,"What would you like to do?","Stored: [stored_mind.name]","Delete","Backup","Cancel") + if(!stored_mind || user.get_active_hand() != src) + return + switch(choice) + if("Delete") + to_chat(user,"Internal copy of [stored_mind.name] deleted.") + stored_mind = null + update_icon() + if("Backup") + to_chat(user,"Internal copy of [stored_mind.name] backed up to database.") + transcore.m_backup(stored_mind,null,one_time = TRUE) + if("Cancel") + return + +/obj/item/device/sleevemate/proc/scan_mob(mob/living/carbon/human/H, mob/living/user) + var/output = "" + + output += "

    [src.name] Scan Results
    " + + //Mind name + output += "Sleeved Mind: " + if(H.mind) + output += "[H.mind.name]
    " + else + output += "Unknown/None
    " + + //Mind status + output += "Mind Status: " + if(H.client) + output += "Healthy
    " + else + output += "Space Sleep Disorder
    " + + //Body status + output += "Sleeve Status: " + switch(H.stat) + if(CONSCIOUS) + output += "Alive
    " + if(UNCONSCIOUS) + output += "Unconscious
    " + if(DEAD) + output += "Deceased
    " + else + output += "Unknown
    " + + //Mind/body comparison + output += "Sleeve Pair: " + if(H.mind && ckey(H.mind.key) != H.ckey) + output += "May not be correct body
    " + else if(H.mind && ckey(H.mind.key) == H.ckey) + output += "Appears to be correct mind in body
    " + else + output += "Unable to perform comparison
    " + + //Actions + output += "
    -- Possible Actions --
    " + output += "Mind-Scan (One Time): \[
    Perform\]
    " + output += "Body-Scan (One Time): \[Perform\]
    " + + //Saving a mind + output += "Store Full Mind: " + if(stored_mind) + output += "Already Stored ([stored_mind.name])
    " + else if(H.mind) + output += "\[Perform\]
    " + else + output += "Unable
    " + + //Soulcatcher transfer + if(stored_mind && H.nif) + var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) + if(SC) + output += "Store in Soulcatcher: \[Perform\]
    " + + to_chat(user,output) + +/obj/item/device/sleevemate/Topic(href, href_list) + usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + + //Sanity checking/href-hacking checking + if(usr.get_active_hand() != src) + to_chat(usr,"You're not holding \the [src].") + return + + var/target_ref = href_list["target"] + var/mob/living/target = locate(target_ref) in mob_list + if(!target) + to_chat(usr,"Unable to operate on that target.") + return + + if(!usr.Adjacent(target)) + to_chat(usr,"You are too far from that target.") + return + + //The actual options + if(href_list["mindscan"]) + if(!target.mind) + to_chat(usr,"Target seems totally braindead.") + return + + var/nif + if(ishuman(target)) + var/mob/living/carbon/human/H = target + nif = H.nif + + usr.visible_message("[usr] begins scanning [target]'s mind.","You begin scanning [target]'s mind.") + if(do_after(usr,8 SECONDS,target)) + transcore.m_backup(target.mind,nif,one_time = TRUE) + to_chat(usr,"Mind backed up!") + else + to_chat(usr,"You must remain close to your target!") + + return + + if(href_list["bodyscan"]) + if(!ishuman(target)) + to_chat(usr,"Target is not of an acceeptable body type.") + return + + var/mob/living/carbon/human/H = target + + usr.visible_message("[usr] begins scanning [target]'s body.","You begin scanning [target]'s body.") + if(do_after(usr,8 SECONDS,target)) + var/datum/transhuman/body_record/BR = new() + BR.init_from_mob(H, TRUE, TRUE) + to_chat(usr,"Body scanned!") + else + to_chat(usr,"You must remain close to your target!") + + return + + if(href_list["mindsteal"]) + if(!target.mind) + to_chat(usr,"Target seems totally braindead.") + return + + usr.visible_message("[usr] begins downloading [target]'s mind!","You begin downloading [target]'s mind!") + if(do_after(usr,35 SECONDS,target)) //This is powerful, yo. + if(!stored_mind && target.mind) + stored_mind = target.mind + target.ghostize() + stored_mind.current = null + update_icon() + to_chat(usr,"Mind downloaded!") + + return + + if(href_list["mindput"]) + if(!stored_mind) + to_chat(usr,"\The [src] no longer has a stored mind.") + return + + var/mob/living/carbon/human/H = target + + if(!istype(target)) + return //href hacking only + + if(!H.nif) + return //Lost it? or href hacking + + var/datum/nifsoft/soulcatcher/SC = H.nif.imp_check(NIF_SOULCATCHER) + if(!SC) + return //Uninstalled it? + + //Lazzzyyy. + if(!sleevemate_mob) + sleevemate_mob = new() + + stored_mind.active = TRUE //Setting this causes transfer_to, to key them into the mob + stored_mind.transfer_to(sleevemate_mob) + SC.catch_mob(sleevemate_mob) + stored_mind = null + to_chat(usr,"Mind transferred into Soulcatcher!") + update_icon() + +/obj/item/device/sleevemate/update_icon() + if(stored_mind) + icon_state = "[initial(icon_state)]_on" + else + icon_state = initial(icon_state) diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index c05c22d84f..ed230b1a16 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -227,7 +227,8 @@ prob(2);/obj/item/weapon/grenade/anti_photon, prob(1);/obj/item/weapon/cell/hyper/empty, prob(1);/obj/item/weapon/disk/nifsoft/compliance, - prob(1);/obj/item/device/nif/bad) + prob(1);/obj/item/device/nif/bad, + prob(1);/obj/item/device/sleevemate) var/obj/item/I = new path() return I diff --git a/code/modules/client/preference_setup/vore/04_resleeving.dm b/code/modules/client/preference_setup/vore/04_resleeving.dm index 93f105195c..9eb3dcbaf0 100644 --- a/code/modules/client/preference_setup/vore/04_resleeving.dm +++ b/code/modules/client/preference_setup/vore/04_resleeving.dm @@ -27,7 +27,7 @@ if(deleted(character) || deleted(pref)) return // They might have been deleted during the wait if(pref.resleeve_scan) - var/datum/transhuman/body_record/BR = new() //Clearly related to size. + var/datum/transhuman/body_record/BR = new() BR.init_from_mob(character, pref.resleeve_scan, pref.resleeve_lock) if(pref.resleeve_lock) character.resleeve_lock = character.ckey diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index 2d6b1c0351..26ef3f619e 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -37,6 +37,14 @@ build_path = /obj/item/clothing/under/bluespace sort_string = "TAAAC" +/datum/design/item/sleevemate + name = "SleeveMate 3200" + id = "sleevemate" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) + build_path = /obj/item/device/sleevemate + sort_string = "TAAAD" + /datum/design/item/item/pressureinterlock name = "APP pressure interlock" id = "pressureinterlock" diff --git a/code/modules/resleeving/implant.dm b/code/modules/resleeving/implant.dm index e6dd47b705..6a3628a3cf 100644 --- a/code/modules/resleeving/implant.dm +++ b/code/modules/resleeving/implant.dm @@ -32,7 +32,7 @@ if(other_imp && other_imp.imp_in == H) qdel(other_imp) //implant fight - if(H.mind) //One out here just in case they are dead + if(H.mind && H.stat < DEAD) //One right now, on implanting. transcore.m_backup(H.mind) last_attempt = world.time diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index 6ed0730cff..532830b4b1 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -28,7 +28,8 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(!curr_MR) log_debug("Tried to process [N] in transcore w/o a record!") continue - + if(curr_MR.one_time) + continue var/since_backup = world.time - curr_MR.last_update if(since_backup < overdue_time) curr_MR.dead_state = MR_NORMAL @@ -40,7 +41,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore spawn(process_time) process() -/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind,var/obj/item/device/nif/nif) +/datum/transhuman/infocore/proc/m_backup(var/datum/mind/mind,var/obj/item/device/nif/nif,var/one_time = FALSE) ASSERT(mind) if(!mind.name || core_dumped) return 0 @@ -50,6 +51,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore if(mind.name in backed_up) MR = backed_up[mind.name] MR.last_update = world.time + MR.one_time = one_time //Pass a 0 to not change NIF status (because the elseif is checking for null) if(nif) @@ -67,7 +69,7 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore MR.nif_software = null else - MR = new(mind, mind.current, 1) + MR = new(mind, mind.current, TRUE, one_time) return 1 @@ -134,9 +136,13 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/nif_durability var/list/nif_software -/datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1) + var/one_time = FALSE + +/datum/transhuman/mind_record/New(var/datum/mind/mind,var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1,var/one_time = FALSE) ASSERT(mind) + src.one_time = one_time + //The mind! mind_ref = mind mindname = mind.name diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 4216f6fb0a..c36f32f109 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -503,6 +503,10 @@ occupant.identifying_gender = MR.id_gender occupant.ooc_notes = MR.mind_oocnotes occupant.apply_vore_prefs() //Cheap hack for now to give them SOME bellies. + if(MR.one_time) + var/how_long = round((world.time - MR.last_update)/10/60) + to_chat(occupant,"Your mind backup was a 'one-time' backup. \ + You will not be able to remember anything since the backup, [how_long] minutes ago.") //Re-supply a NIF if one was backed up with them. if(MR.nif_path) diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index 1a256c07b06305fe229aaedbd3d57976a32eac9f..9c4d2f6b7b35493b9eb08a17662da1fe66d6d927 100644 GIT binary patch delta 14816 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�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

    vWERD9T( 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 literal 60122 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 U_Is8djDeq%W~WRanYds74 Date: Thu, 15 Jun 2017 17:13:59 -0400 Subject: [PATCH 242/261] Fixes players not being removed from the manifest immediately when cryoing. * The cryopod simply qdel's the datacore records. Old garbage.dm hard-del()'d datums, so it was fine. Now we need to make sure they are actually removed from the data_core. * Testing shows this fixes #1713 and in most cases the objects also GC cleanly. However some older computers still retain hard references to data_core entries. But even in the cases where that prevents a clean GC, the player is still removed from the manifest successfully and promptly, so that can wait. --- code/_helpers/logging.dm | 4 +- code/datums/mixed.dm | 81 +++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 57813b0113..c58b2d1381 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -180,6 +180,8 @@ return "[..()] ([ckey])" /proc/log_info_line(var/datum/d) + if(!d) + return "*null*" if(!istype(d)) - return + return json_encode(d) return d.log_info_line() diff --git a/code/datums/mixed.dm b/code/datums/mixed.dm index f0f0c70abd..ab53596d8c 100644 --- a/code/datums/mixed.dm +++ b/code/datums/mixed.dm @@ -1,34 +1,47 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/datum/data - var/name = "data" - var/size = 1.0 - - -/datum/data/function - name = "function" - size = 2.0 - - -/datum/data/function/data_control - name = "data control" - - -/datum/data/function/id_changer - name = "id changer" - - -/datum/data/record - name = "record" - size = 5.0 - var/list/fields = list( ) - - -/datum/data/text - name = "text" - var/data = null - - - -/datum/debug - var/list/debuglist +//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 + +/datum/data + var/name = "data" + var/size = 1.0 + + +/datum/data/function + name = "function" + size = 2.0 + + +/datum/data/function/data_control + name = "data control" + + +/datum/data/function/id_changer + name = "id changer" + + +/datum/data/record + name = "record" + size = 5.0 + var/list/fields = list( ) + +// Mostly used for data_core records, but unfortuantely used some other places too. But mostly here, so lets make a good effort. +// TODO - Some machines/computers might be holding references to us. Lets look into that, but at least for now lets make sure that the manifest is cleaned up. +/datum/data/record/Destroy(var/force) + if(data_core.locked.Find(src)) + if(!force) + crash_with("Someone tried to qdel a record that was in data_core.locked [log_info_line(src)]") + return QDEL_HINT_LETMELIVE + data_core.locked -= src + data_core.medical -= src + data_core.general -= src + data_core.security -= src + ..() + return QDEL_HINT_FINDREFERENCE // If we must, we can resort to QDEL_HINT_HARDDEL. But lets see how this works in practice ~Leshana + +/datum/data/text + name = "text" + var/data = null + + + +/datum/debug + var/list/debuglist From 2ba8e6e794dfc4d516313bb8bc1226e0e37c69d8 Mon Sep 17 00:00:00 2001 From: Verkister Date: Fri, 16 Jun 2017 01:27:46 +0300 Subject: [PATCH 243/261] New dogborgo! (fixed?) (#1686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * New dogborgo! -Oh god this has been my best worst robopup idea so far lmao. -Added janitor type dogborg. -Its speciality is a modified sleeperbelly fitted to ingest stuff too! -This might be very problematic in the wrong hands lmao. -Increased sleepergurgle item charge from 10 to 100. 10 was so little that the whole code bit for item gurgle charge was practically useless. -New module hud icons for all dogborgs. -Removed the unused movement state icons from the static dogborgs. * A tiny fix for a tiny issue. * Oh whoops I had to forget something. * :^↕ * Reworked the icon titles for the improper sleepers * Animated janihound move states. Fixed compactor gut. Cleaned up the runover cleaning fucntion. * Garbage puppy update: Part 2 -Animated walkcycle icons. -Fixed compactor gut to work on humans too. -Cleaned up the runover cleaning function. No water reserve mechanics yet tho. -Removed some empty blank icons from widerobots. * Travis being a butt again. * Defiance to mark the line changed :v * Added compactor capacity limit. -Also slightly increased charge reward and gurglesound chance. * Some fixing and reworking on the compactor noms. * Cleanup credit for Leshana * Another framerate tweak. * Revert "Another framerate tweak." This reverts commit bfd9f0d8e163c6109ff45e89472faab36d23c209. * Restrict gulpling to /obj/item for type safety on certain special objects. * Framerate fix. -Readding the framerate tweaks without the rogue file junk. -Also renamed the cover overlays to panel so they should probably work now as well. * Framerate tweak fix. -Readds the tweak without rogue junk files ruining everything. -Also renamed the open cover overlays to panel so they should work again. * I love you too travis. (Yet another rejection due to the unrelated open space random bug.) --- code/global_vr.dm | 1 + .../silicon/robot/dogborg/dog_sleeper_vr.dm | 66 +++++++++++++++++- .../living/silicon/robot/robot_modules_vr.dm | 26 +++++++ .../mob/living/silicon/robot/robot_vr.dm | 35 ++++++++++ icons/mob/dogborg_vr.dmi | Bin 12920 -> 15412 bytes icons/mob/screen1_robot_vr.dmi | Bin 136158 -> 137091 bytes icons/mob/widerobot_vr.dmi | Bin 182259 -> 215541 bytes 7 files changed, 125 insertions(+), 3 deletions(-) diff --git a/code/global_vr.dm b/code/global_vr.dm index ed73d3cd63..de9aef8509 100644 --- a/code/global_vr.dm +++ b/code/global_vr.dm @@ -1,4 +1,5 @@ /hook/startup/proc/modules_vr() robot_module_types += "Medihound" robot_module_types += "K9" + robot_module_types += "Janihound" return 1 diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index ed12c588cb..4711b2dc07 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -307,7 +307,7 @@ update_patient() return - if(prob(10)) + if(prob(20)) var/churnsound = pick( 'sound/vore/digest1.ogg', 'sound/vore/digest2.ogg', @@ -385,8 +385,10 @@ if (PDA.id) PDA.id.forceMove(src) PDA.id = null + qdel(T) + //Special case for IDs to make them digested //else if (istype(T, /obj/item/weapon/card/id)) //var/obj/item/weapon/card/id/ID = T @@ -397,7 +399,7 @@ //Spill(T) //Needs the spill proc to be added qdel(T) src.update_patient() - src.hound.cell.charge += 10 + src.hound.cell.charge += 120 //10 charge? that was such a practically nonexistent number it hardly gave any purpose for this bit :v *cranks up* return /obj/item/device/dogborg/sleeper/process() @@ -431,7 +433,65 @@ name = "Brig-Belly" desc = "Equipment for a K9 unit. A mounted portable-brig that holds criminals." icon = 'icons/mob/dogborg_vr.dmi' - icon_state = "sleeper" + icon_state = "sleeperb" inject_amount = 10 min_health = -100 injection_chems = null //So they don't have all the same chems as the medihound! + +/obj/item/device/dogborg/sleeper/compactor //Janihound gut. + name = "garbage processor" + desc = "A mounted garbage compactor unit with fuel processor." + icon = 'icons/mob/dogborg_vr.dmi' + icon_state = "compactor" + inject_amount = 10 + min_health = -100 + injection_chems = null //So they don't have all the same chems as the medihound! + var/max_item_count = 32 + +/obj/item/device/dogborg/sleeper/compactor/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)//GARBO NOMS + hound = loc + + if(!istype(target)) + return + if(!proximity) + return + if(target.anchored) + return + if(length(contents) > (max_item_count - 1)) + user << "Your [src.name] is full. Eject or process contents to continue." + return + + if(istype(target, /obj/item)) + var/obj/target_obj = target + if(target_obj.w_class > ITEMSIZE_LARGE) + user << "\The [target] is too large to fit into your [src.name]" + return + user.visible_message("[hound.name] is ingesting [target.name] into their [src.name].", "You start ingesting [target] into your [src.name]...") + if(do_after(user, 30, target) && length(contents) < max_item_count) + target.forceMove(src) + user.visible_message("[hound.name]'s garbage processor groans lightly as [target.name] slips inside.", "Your garbage compactor groans lightly as [target] slips inside.") + playsound(hound, 'sound/vore/gulp.ogg', 50, 1) + if(length(contents) > 11) //grow that tum after a certain junk amount + hound.sleeper_r = 1 + hound.updateicon() + return + + else if(ishuman(target)) + var/mob/living/carbon/human/trashman = target + if(patient) + user << "Your [src.name] is already occupied." + return + if(trashman.buckled) + user << "[trashman] is buckled and can not be put into your [src.name]." + return + user.visible_message("[hound.name] is ingesting [trashman] into their [src.name].", "You start ingesting [trashman] into your [src.name]...") + if(do_after(user, 30, trashman) && !patient && !trashman.buckled && length(contents) < max_item_count) + trashman.forceMove(src) + trashman.reset_view(src) + update_patient() + processing_objects.Add(src) + user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.") + playsound(hound, 'sound/vore/gulp.ogg', 80, 1) + return + return +//Marking shit changed again because the random travis bug is having its shenanigans again \o/ \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm index 7f62c0dc68..b45d1eb261 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm @@ -2,6 +2,7 @@ robot_modules["Medihound"] = /obj/item/weapon/robot_module/medihound robot_modules["K9"] = /obj/item/weapon/robot_module/knine robot_modules["ERT"] = /obj/item/weapon/robot_module/ert + robot_modules["Janihound"] = /obj/item/weapon/robot_module/scrubpup return 1 @@ -107,3 +108,28 @@ R.pixel_x = -16 R.old_x = -16 ..() + +/obj/item/weapon/robot_module/scrubpup + name = "Custodial Hound module" + sprites = list( + "Custodial Hound" = "scrubpup", + ) + channels = list("Service" = 1) + can_be_pushed = 0 + +/obj/item/weapon/robot_module/scrubpup/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/weapon/dogborg/jaws/small(src) + src.modules += new /obj/item/device/dogborg/boop_module(src) + src.modules += new /obj/item/device/dogborg/tongue(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor(src) + R.icon = 'icons/mob/widerobot_vr.dmi' + R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + //R.icon_state = "scrubpup" + R.pixel_x = -16 + R.old_x = -16 + ..() + +/obj/item/weapon/robot_module/scrubpup/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/device/lightreplacer/LR = locate() in src.modules + LR.Charge(R, amount) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index f5e146392e..2d1474d6cf 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -30,3 +30,38 @@ overlays += "[module_sprites[icontype]]-sleeper_g" if(sleeper_r == 1) overlays += "[module_sprites[icontype]]-sleeper_r" + +/mob/living/silicon/robot/Move(a, b, flag) + + . = ..() + + if(module) + if(module.type == /obj/item/weapon/robot_module/scrubpup)//no water reserve mechanics yet. + var/turf/tile = loc + if(isturf(tile)) + tile.clean_blood() + if(istype(tile, /turf/simulated)) + var/turf/simulated/T = tile + T.dirt = 0 + for(var/A in tile) + if(istype(A,/obj/effect/rune) || istype(A,/obj/effect/decal/cleanable) || istype(A,/obj/effect/overlay)) + qdel(A) + else if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/cleaned_human = A + if(cleaned_human.lying) + if(cleaned_human.head) + cleaned_human.head.clean_blood() + cleaned_human.update_inv_head(0) + if(cleaned_human.wear_suit) + cleaned_human.wear_suit.clean_blood() + cleaned_human.update_inv_wear_suit(0) + else if(cleaned_human.w_uniform) + cleaned_human.w_uniform.clean_blood() + cleaned_human.update_inv_w_uniform(0) + if(cleaned_human.shoes) + cleaned_human.shoes.clean_blood() + cleaned_human.update_inv_shoes(0) + cleaned_human.clean_blood(1) + cleaned_human << "[src] cleans your face!"//Again travis what the fuck? You and your random unrelated bugs. + return + return \ No newline at end of file diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi index d76f46466c1b687b57f8d1d6d864e7eaed4d2541..436987eb546c0840f3c6cf252feb639ab666b770 100644 GIT binary patch literal 15412 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 G&Hn+R51()V diff --git a/icons/mob/screen1_robot_vr.dmi b/icons/mob/screen1_robot_vr.dmi index 306e957c716b9096500054196e0bd7f86e9b9679..a5c8195395038804002ce40f9a98f44284317f0b 100644 GIT binary patch delta 15412 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 C%(008 delta 14472 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 CLdYcm diff --git a/icons/mob/widerobot_vr.dmi b/icons/mob/widerobot_vr.dmi index 30534d481060afdbcbab34edb52d864be416fc5d..5fddf295892a74dcdaf4a3ca7fe13b6ac736734c 100644 GIT binary patch literal 215541 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 literal 182259 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 From f69c4398ac285463d37cd950e55200168189eed6 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 15 Jun 2017 18:43:38 -0400 Subject: [PATCH 244/261] Adds a shutter to the window between kitchen and freezer. * Also I am committing the extra lines added by mapmerge. We should always be using it anyway, so its more convenient to have in than out. --- maps/tether/tether-01-surface.dmm | 8 ++++---- maps/tether/tether-02-transit.dmm | 1 + maps/tether/tether-05-solars.dmm | 1 + maps/tether/tether-08-ships.dmm | 1 + maps/tether/tether-09-empty-surface.dmm | 1 + maps/tether/tether-10-empty-space.dmm | 1 + 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 4159a80f3c..e7de350693 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -1733,6 +1733,7 @@ "aHq" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/lower/trash_pit) "aHr" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/processing) "aHs" = (/obj/machinery/door/airlock/maintenance/common{name = "Mining Maintenance Access"},/obj/machinery/door/firedoor/glass,/obj/structure/catwalk,/turf/simulated/floor/tiled/techfloor,/area/tether/surfacebase/north_stairs_one) +"aHt" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/button/remote/blast_door{id = "freezer"; name = "Freezer shutters"; pixel_x = -24; pixel_y = -24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "aHu" = (/obj/effect/floor_decal/techfloor{dir = 9},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "aHv" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "aHw" = (/obj/effect/floor_decal/techfloor{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) @@ -1904,6 +1905,7 @@ "aKG" = (/turf/simulated/open,/area/maintenance/lower/mining) "aKH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/lower/mining) "aKI" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/lower/mining) +"aKJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "freezer"; name = "Freezer Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/freezer) "aKK" = (/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/tiled/dark,/area/gateway) "aKL" = (/turf/simulated/floor/tiled/dark,/area/gateway) "aKM" = (/obj/structure/closet/firecloset,/obj/machinery/camera/network/command,/turf/simulated/floor/tiled/dark,/area/gateway) @@ -4278,7 +4280,6 @@ "bEp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/vacant/vacant_shop) "bEq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/vacant/vacant_shop) "bEr" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) -"bEs" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -30},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bEt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bEu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bEv" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) @@ -4335,7 +4336,6 @@ "bFu" = (/obj/machinery/camera/network/northern_star{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bFv" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_three) "bFw" = (/obj/structure/railing{dir = 8},/obj/effect/floor_decal/techfloor{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/rust,/obj/structure/table/rack,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/drinkbottle,/turf/simulated/floor/tiled/techfloor,/area/maintenance/asmaint2) -"bFx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/freezer) "bFy" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/freezer{name = "Kitchen cold room"; req_access = list(28)},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bFz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bFA" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass{name = "Garden"; req_access = list(28)},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -5689,9 +5689,9 @@ boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabp boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbCzbAWbBFbBGbBGbCAbzObCBbBHbBHbBIbBJbAFbAGbCCbznbCDbCEbCFbCGbCHbAHbCIbznbpabpabpabpabzrbCJbCKbzrbCqbCqbzrbCLbBqbzwbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbCMbCNaMZaNybCQbCRbCSbCTbCUaopbCWbCSbCXbCYbCZbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbAWbBFbBGbBGbDbbDcbDdbBHbBHbBIbBJbAFbAGbCjbznbznbznbznbDebDfbzobznbznbwObwOaHnaHnbzrbzrbzrbzrbzrbzrbzrbDgbDhbzwbIIbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbDibDjbDkbDlbDmbDnbDobCSbDpbCTbCTbDqbCSbDrbDsbDtbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbDubDvbBFbBGbBGbBGbBGbBGbBHbBHbBIbBJbAFbAGbAGbzibDwbwVbDxbDybDzbxbbxobDAawkbDCaHnbmbbdqbaMaHobwsaPTaPFbwsbDIbBqaQRaQQbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbvEbBUbDJbwsbwsbDKbDLbDMbCSbDNbCTbCTbDObCSbDsbDsbDPbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEaaHnbmmbmlbmlbmjbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSbEsbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzGbAVbDQbBFbBGbBGbBGbBGbBGbBHbBHbBIbDRbDSbDTbDUbDVbDWbyobyobDXbDYbyxbyxbDZbygbEaaHnbmmbmlbmlbmjbwsbEebEfbEgbEhbEiaRsaRrbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEkbElbEmbEnbEobEpbEqaRGbCSaHtbEtbEubEvbCSbEwbExbDsbDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbEybDQbEzbEAbEAbEAbEAbEAbEBbEBbECbEDbEEbEFbEGbEHbEIbEJbEJbEJbEKbELbEMbENbEObEPbmtbmwbmvbmvbmubwsaRZbDHbwsbEVbzvaSdaSabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbEYbEZbwsaSCbCQaSBbCSbFcbFdbFebFfbCSbFgbFhbFibDabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY -boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFjbFkbFlbFlbFlbFlbFlbFlbFlbFlbFlbFmbFnbFobFpbzhbwsbzZbzZbzZbwsbwsbvEbyVbFqbFraHnbmbbmybmxaHobwsbwsbwsbwsbFubzvaTeaTabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFvbDkbDkbDkaTybDkbCSbCSbFxbFybCSbCSbFzbFAbFzbFBbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY +boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFjbFkbFlbFlbFlbFlbFlbFlbFlbFlbFlbFmbFnbFobFpbzhbwsbzZbzZbzZbwsbwsbvEbyVbFqbFraHnbmbbmybmxaHobwsbwsbwsbwsbFubzvaTeaTabAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFvbDkbDkbDkaTybDkbCSbCSaKJbFybCSbCSbFzbFAbFzbFBbpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabzhbFCbFDbFDbFDbFDbFEbFDbFDbFDbFFbFDbFGbFHbFIbFJbFKbpabpabpabpabpabuVbvEbyVbFqbvGaHnaHnaHnaHnaHnaHnbFLbFMbwsbDIbzvbEWbzxbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbEXbBUbFNbFObFPbFQbFRbFSbFTbFBbFUbFVbFWbFXbFYbFZbGabFBbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabGbbGcbzhbzhbzhbGcbGcbGcbzhbzhbzhbGcbGcbGcbzhbzhbzhbpabpabpabpabpabuVbvEbyVbGdbGebGfbGgbxjbGhbGibGjbGibGibGkbGlbGmbGnbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbGobBUbygbGpbGqbFQbGrbGsbGubFBbGtbGvbGwbGwbGxbGybGzbFBbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabwsbGAbGBbyobGCbGDbyubGEbGFbyobyobyobyobGGbyobGHbEWbAhbAibAibAibAibAibAibAibAibAibAibAibAibAibAibAibAjbGIbGJbyubGKbGLbGMbGNbGObGObGPbGQbGRbGSbGTbGUbGVbGWbGXbpabpaboZboZboZboZboZboZboZboZboZboZboZboZboY diff --git a/maps/tether/tether-02-transit.dmm b/maps/tether/tether-02-transit.dmm index 33abb4f036..72afaa9efc 100644 --- a/maps/tether/tether-02-transit.dmm +++ b/maps/tether/tether-02-transit.dmm @@ -131,3 +131,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/tether/tether-05-solars.dmm b/maps/tether/tether-05-solars.dmm index 0ccdeca22a..fd3491535c 100644 --- a/maps/tether/tether-05-solars.dmm +++ b/maps/tether/tether-05-solars.dmm @@ -213,3 +213,4 @@ aaababababababababababababababababababababababababababababababababababababababab aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/tether/tether-08-ships.dmm b/maps/tether/tether-08-ships.dmm index 60da680895..76968962df 100644 --- a/maps/tether/tether-08-ships.dmm +++ b/maps/tether/tether-08-ships.dmm @@ -382,3 +382,4 @@ acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac "} + diff --git a/maps/tether/tether-09-empty-surface.dmm b/maps/tether/tether-09-empty-surface.dmm index d2e55ca15c..23fb80590d 100644 --- a/maps/tether/tether-09-empty-surface.dmm +++ b/maps/tether/tether-09-empty-surface.dmm @@ -123,3 +123,4 @@ abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/tether/tether-10-empty-space.dmm b/maps/tether/tether-10-empty-space.dmm index 354e59c982..0deec9205d 100644 --- a/maps/tether/tether-10-empty-space.dmm +++ b/maps/tether/tether-10-empty-space.dmm @@ -122,3 +122,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + From f60c024b2a8e1926cf0aa991f1993cd4ff4c6516 Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 14 Jun 2017 00:27:16 -0400 Subject: [PATCH 245/261] Fixes objects using walk_to() not being able to be garbage collected. * Okay evidently walk_to(A, B) doesn't stop when A reaches B, but keeps running in the background forever until it is manually canceled! Therefore in order to be garbage collected, we must cancel walking on any object that might have initiated it. * Fixes this on chemsmoke, spiders, and aiholos. * The same story applies to walk_towards; fixed for dust, meteors and immovablerod, and also to walk_away; fixed for flashbangs. * Also fixed chemsmoke actually getting qdeled at the right time. --- code/game/gamemodes/events/clang.dm | 4 ++++ code/game/gamemodes/events/dust.dm | 4 ++++ code/game/gamemodes/meteor/meteors.dm | 2 +- code/game/objects/effects/chem/chemsmoke.dm | 6 +++++- code/game/objects/effects/effect_system.dm | 6 ++++-- code/game/objects/effects/spiders.dm | 5 +++-- code/game/objects/items/weapons/grenades/flashbang.dm | 4 ++++ code/modules/vore/eating/silicon_vr.dm | 4 ++++ 8 files changed, 29 insertions(+), 6 deletions(-) diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index 8ab197a1cb..e88492e5d1 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/gamemodes/events/clang.dm @@ -41,6 +41,10 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 if(clong && prob(25)) src.loc = clong.loc + Destroy() + walk(src, 0) // Because we might have called walk_towards, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + /proc/immovablerod() var/startx = 0 var/starty = 0 diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm index 2397ae1a14..d7d551396e 100644 --- a/code/game/gamemodes/events/dust.dm +++ b/code/game/gamemodes/events/dust.dm @@ -90,6 +90,10 @@ The "dust" will damage the hull of the station causin minor hull breaches. walk_towards(src, goal, 1) return + Destroy() + walk(src, 0) // Because we might have called walk_towards, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + touch_map_edge() qdel(src) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index c5096d12d8..f0135c5356 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -133,7 +133,7 @@ /obj/effect/meteor/Destroy() walk(src,0) //this cancels the walk_towards() proc - ..() + return ..() /obj/effect/meteor/New() ..() diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index 45cfcc8348..be7e759a63 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -12,6 +12,10 @@ create_reagents(500) return +/obj/effect/effect/smoke/chem/Destroy() + walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + /datum/effect/effect/system/smoke_spread/chem smoke_type = /obj/effect/effect/smoke/chem var/obj/chemholder @@ -166,7 +170,7 @@ sleep(150+rand(0,20)) // turning it off before it is deleted results in cleaner smoke.set_opacity(0) // lighting and view range updates fadeOut(smoke) - qdel(src) + qdel(smoke) /datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1) var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 4c930d23cf..a3b3ab81cb 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -179,8 +179,10 @@ steam.start() -- spawns the effect /obj/effect/effect/smoke/New() ..() - spawn (time_to_live) - qdel(src) + if(time_to_live) + spawn (time_to_live) + if(!QDELETED(src)) + qdel(src) /obj/effect/effect/smoke/Crossed(mob/living/carbon/M as mob ) ..() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4396465bc9..c38b07f402 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -94,7 +94,7 @@ var/obj/item/organ/external/O = loc O.implants -= src - ..() + return ..() /obj/effect/spider/eggcluster/process() amount_grown += rand(0,2) @@ -138,7 +138,8 @@ /obj/effect/spider/spiderling/Destroy() processing_objects -= src - ..() + walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() /obj/effect/spider/spiderling/Bump(atom/user) if(istype(user, /obj/structure/table)) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index d02ccf2185..940029e735 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -91,6 +91,10 @@ M << "Your ears start to ring!" M.update_icons() +/obj/item/weapon/grenade/flashbang/Destroy() + walk(src, 0) // Because we might have called walk_away, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + /obj/item/weapon/grenade/flashbang/clusterbang//Created by Polymorph, fixed by Sieve desc = "Use of this weapon may constiute a war crime in your area, consult your local Colony Director." name = "clusterbang" diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm index 1324a5f900..3cbb1c0e66 100644 --- a/code/modules/vore/eating/silicon_vr.dm +++ b/code/modules/vore/eating/silicon_vr.dm @@ -11,6 +11,10 @@ color = HOLO_ORIGINAL_COLOR //This is the blue from icons.dm that it was before. desc = "A hologram representing an AI persona." +/obj/effect/overlay/aiholo/Destroy() + walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. + return ..() + /obj/effect/overlay/aiholo/proc/get_prey(var/mob/living/prey) if(bellied) return playsound('sound/effects/stealthoff.ogg',50,0) From c14ac0a1bcad5a5c7881e122c0b8daed48939072 Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 15 Jun 2017 19:27:26 -0400 Subject: [PATCH 246/261] Add doorbell chime and doorbell switch machines. * The doorbell switch makes all connected doorbell chimes make a chime noise. Intended to be used to alert cargo to come to front desk etc. --- code/game/machinery/doorbell_vr.dm | 158 +++++++++++++++++++++++++++++ icons/obj/machines/doorbell_vr.dmi | Bin 0 -> 4690 bytes sound/machines/doorbell.ogg | Bin 0 -> 66668 bytes vorestation.dme | 1 + 4 files changed, 159 insertions(+) create mode 100644 code/game/machinery/doorbell_vr.dm create mode 100644 icons/obj/machines/doorbell_vr.dmi create mode 100644 sound/machines/doorbell.ogg diff --git a/code/game/machinery/doorbell_vr.dm b/code/game/machinery/doorbell_vr.dm new file mode 100644 index 0000000000..b23e490928 --- /dev/null +++ b/code/game/machinery/doorbell_vr.dm @@ -0,0 +1,158 @@ +////////////////////DOORBELL CHIME/////////////////////////////////////// +/obj/machinery/doorbell_chime + name = "doorbell chime" + desc = "Small wall-mounted chime triggered by a doorbell" + icon = 'icons/obj/machines/doorbell_vr.dmi' + icon_state = "dbchime-standby" + use_power = 1 + idle_power_usage = 10 + active_power_usage = 200 + anchored = 1 + var/id_tag = null + var/chime_sound = 'sound/machines/doorbell.ogg' + +/obj/machinery/doorbell_chime/initialize() + . = ..() + update_icon() + +/obj/machinery/doorbell_chime/proc/chime() + set waitfor = FALSE + if(inoperable()) + return + use_power(active_power_usage) + playsound(src.loc, chime_sound, 75) + icon_state = "dbchime-active" + set_light(2, 0.5, "#33FF33") + visible_message("\The [src]'s light flashes.") + sleep(30) + set_light(0) + update_icon() + +/obj/machinery/doorbell_chime/power_change() + ..() + update_icon() + +/obj/machinery/doorbell_chime/update_icon() + overlays.Cut() + if(panel_open) + overlays += "dbchime-open" + if(inoperable()) + icon_state = "dbchime-off" + if(!id_tag) + icon_state = "dbchime-red" + else + icon_state = "dbchime-standby" + +/obj/machinery/doorbell_chime/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if(default_deconstruction_screwdriver(user, W)) + return + else if(default_deconstruction_crowbar(user, W)) + return + else if(default_part_replacement(user, W)) + return + else if(panel_open && istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = W + if(M.connectable && istype(M.connectable, /obj/machinery/button/doorbell)) + var/obj/machinery/button/doorbell/B = M.connectable + id_tag = B.id + user << "You upload the data from \the [W]'s buffer." + return + ..() + +////////////////////DOORBELL CHIME CONSTRUCTION/////////////////////////////////////// +// We want these to be constructable so more chimes can be added in departments. +/datum/frame/frame_types/doorbell_chime + name = "Doorbell Chime" + frame_class = "alarm" // It isn't an alarm, but thats the construction flow we want. + frame_size = 3 + frame_style = "wall" + circuit = /obj/item/weapon/circuitboard/doorbell_chime + icon_override = 'icons/obj/machines/doorbell_vr.dmi' + x_offset = 32 + y_offset = 32 + +// Annoyingly we need to provide a circuit board even if never seen by players. +// Makes some sense, its how the frame code knows what to actually build. Alternative +// is to make building it a single-step process which is too quick I say. +// This links up the frame_type to the acutal machine to build. Never seen by players. +/obj/item/weapon/circuitboard/doorbell_chime + build_path = /obj/machinery/doorbell_chime + board_type = new /datum/frame/frame_types/doorbell_chime + req_components = list() + +////////////////////DOORBELL SWITCH/////////////////////////////////////// + +/obj/machinery/button/doorbell + name = "doorbell switch" + desc = "A doorbell, press to chime." + icon = 'icons/obj/machines/doorbell_vr.dmi' + icon_state = "doorbell-standby" + use_power = 0 + +/obj/machinery/button/doorbell/New(var/loc, var/dir, var/building = 0) + ..() + if(building) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + if (!id) + assign_uid() + id = num2text(uid) + +/obj/machinery/button/doorbell/initialize() + . = ..() + update_icon() + +/obj/machinery/button/doorbell/power_change() + ..() + update_icon() + +/obj/machinery/button/doorbell/update_icon() + if(stat & (NOPOWER|BROKEN)) + icon_state = "doorbell-off" + else + icon_state = "doorbell-standby" + +/obj/machinery/button/doorbell/attack_hand(mob/user as mob) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(..()) + return + use_power(5) + flick("doorbell-active", src) + + for(var/obj/machinery/doorbell_chime/M in machines) + if(M.id_tag == id) + M.chime() + +/obj/machinery/button/doorbell/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if(default_deconstruction_screwdriver(user, W)) + return + else if(panel_open && istype(W, /obj/item/weapon/pen)) + var/t = sanitizeSafe(input(user, "Enter the name for \the [src].", src.name, initial(src.name)), MAX_NAME_LEN) + if(t && in_range(src, user)) + name = t + else if(panel_open && istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = W + M.connectable = src + to_chat(user, "You save the data in \the [M]'s buffer.") + else if(istype(W, /obj/item/weapon/wrench)) + to_chat(user, "You start to unwrench \the [src].") + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15) && !QDELETED(src)) + to_chat(user, "You unwrench \the [src].") + new /obj/item/frame/doorbell(src.loc) + qdel(src) + return + +////////////////////DOORBELL SWITCH CONSTRUCTION/////////////////////////////////////// +// Right now they are very simple to construct, just throw them up on the wall + +/obj/item/frame/doorbell + name = "doorbell switch frame" + desc = "Used for building doorbell switches." + icon = 'icons/obj/machines/doorbell_vr.dmi' + icon_state = "doorbell-off" + refund_amt = 4 + refund_type = /obj/item/stack/material/wood + build_machine_type = /obj/machinery/button/doorbell diff --git a/icons/obj/machines/doorbell_vr.dmi b/icons/obj/machines/doorbell_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5dae8ace887f507e6744f320bd49d824d4c68fc7 GIT binary patch literal 4690 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 M=3lzH{$mdRA4QTklmGw# literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index 40a1283418..a90817a0d0 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -581,6 +581,7 @@ #include "code\game\machinery\cryopod_vr.dm" #include "code\game\machinery\deployable.dm" #include "code\game\machinery\door_control.dm" +#include "code\game\machinery\doorbell_vr.dm" #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\exonet_node.dm" #include "code\game\machinery\flasher.dm" From b1aeba928172c53a5c7c600630acfd35f191fde2 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 16 Jun 2017 09:41:34 -0400 Subject: [PATCH 247/261] Persistent size between rounds Allows your size to save at the end of each round. Get shrank'd or enbiggened? Now you can stay tiny between rounds if you like that consistency. Don't want that? Just turn it off on the VORE tab. Accidentally left it on, and got saved? Just change your size to what you want in the character setup (and turn off saving it, too). --- .../client/preference_setup/vore/05_persistence.dm | 9 +++++++-- code/modules/vore/persist/persist_vr.dm | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preference_setup/vore/05_persistence.dm b/code/modules/client/preference_setup/vore/05_persistence.dm index 60d3df2acf..2d8846a3dd 100644 --- a/code/modules/client/preference_setup/vore/05_persistence.dm +++ b/code/modules/client/preference_setup/vore/05_persistence.dm @@ -2,8 +2,9 @@ #define PERSIST_WEIGHT 0x02 // Persist mob weight #define PERSIST_ORGANS 0x04 // Persist the status (normal/amputated/robotic/etc) and model (for robotic) status of organs #define PERSIST_MARKINGS 0x08 // Persist markings -#define PERSIST_COUNT 4 // Number of valid bits in this bitflag. Keep this updated! -#define PERSIST_DEFAULT PERSIST_SPAWN|PERSIST_ORGANS|PERSIST_MARKINGS // Default setting for new folks +#define PERSIST_SIZE 0x10 // Persist size +#define PERSIST_COUNT 5 // Number of valid bits in this bitflag. Keep this updated! +#define PERSIST_DEFAULT PERSIST_SPAWN|PERSIST_ORGANS|PERSIST_MARKINGS|PERSIST_SIZE // Default setting for new folks // Define a place to save in character setup /datum/preferences @@ -45,6 +46,10 @@ . += make_yesno(PERSIST_MARKINGS) . += "" + . += "Save Scale: " + . += make_yesno(PERSIST_SIZE) + . += "" + . += "" return jointext(., "") diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index 3483c25194..40b44218d2 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -102,6 +102,8 @@ if(prefs.persistence_settings & PERSIST_WEIGHT) resolve_excess_nutrition(H) prefs.weight_vr = H.weight + if(prefs.persistence_settings & PERSIST_SIZE) + prefs.size_multiplier = H.size_multiplier prefs.save_character() From fd7020b8f502d0de0aebdb2ed72de43a0bcfeea5 Mon Sep 17 00:00:00 2001 From: killer653 Date: Fri, 16 Jun 2017 15:17:43 -0400 Subject: [PATCH 248/261] Fixes suffocation when eaten Credit to Shadow Larkens for fix --- code/modules/vore/eating/living_vr.dm | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 3eab4587b4..81dd22e43b 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -429,9 +429,12 @@ // This is about 0.896m^3 of atmosphere /datum/gas_mixture/belly_air - volume = 1000 - gas = list( - "oxygen" = 21, - "nitrogen" = 79) - temperature = 293.150 - total_moles = 40 + volume = 1000 + temperature = 293.150 + total_moles = 40 + +/datum/gas_mixture/belly_air/New() + . = ..() + gas = list( + "oxygen" = 21, + "nitrogen" = 79) From fedd35a58f4e4041319b40fb3123cb2c9b7e86ab Mon Sep 17 00:00:00 2001 From: Leshana Date: Fri, 16 Jun 2017 16:29:09 -0400 Subject: [PATCH 249/261] Adds a unit test to make sure prey can breathe inside pred bellies. --- code/unit_tests/unit_test_vr.dm | 26 ++++++++++++++++ code/unit_tests/vore_tests_vr.dm | 51 ++++++++++++++++++++++++++++++++ vorestation.dme | 2 ++ 3 files changed, 79 insertions(+) create mode 100644 code/unit_tests/unit_test_vr.dm create mode 100644 code/unit_tests/vore_tests_vr.dm diff --git a/code/unit_tests/unit_test_vr.dm b/code/unit_tests/unit_test_vr.dm new file mode 100644 index 0000000000..ea4023d7b2 --- /dev/null +++ b/code/unit_tests/unit_test_vr.dm @@ -0,0 +1,26 @@ +// +// VOREStation extensions to unit test framework. +// + +/datum/unit_test + var/static/default_mobloc = null + +/datum/unit_test/proc/create_test_mob(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human, var/with_mind = FALSE) + if(isnull(mobloc)) + if(!default_mobloc) + for(var/turf/simulated/floor/tiled/T in world) + var/pressure = T.zone.air.return_pressure() + if(90 < pressure && pressure < 120) // Find a turf between 90 and 120 + default_mobloc = T + break + mobloc = default_mobloc + if(!mobloc) + fail("Unable to find a location to create test mob") + return 0 + + var/mob/living/carbon/human/H = new mobtype(mobloc) + + if(with_mind) + H.mind_initialize("TestKey[rand(0,10000)]") + + return H diff --git a/code/unit_tests/vore_tests_vr.dm b/code/unit_tests/vore_tests_vr.dm new file mode 100644 index 0000000000..e50c50b2fa --- /dev/null +++ b/code/unit_tests/vore_tests_vr.dm @@ -0,0 +1,51 @@ +/datum/unit_test/belly_nonsuffocation + name = "MOB: human mob does not suffocate in a belly" + var/startLifeTick + var/startOxyloss + var/endOxyloss + var/mob/living/carbon/human/pred + var/mob/living/carbon/human/prey + async = 1 + +/datum/unit_test/belly_nonsuffocation/start_test() + pred = create_test_mob() + if(!istype(pred)) + return 0 + prey = create_test_mob(pred.loc) + if(!istype(prey)) + return 0 + + return 1 + +/datum/unit_test/belly_nonsuffocation/check_result() + // Unfortuantely we need to wait for the pred's belly to initialize. (Currently after a spawn()) + if(!pred.vore_organs || !pred.vore_organs.len) + return 0 + // Now that pred belly exists, we can eat the prey. + if(prey.loc != pred) + if(!pred.vore_selected) + fail("[pred] has no vore_selected.") + return 1 + var/datum/belly/TB = pred.vore_organs[pred.vore_selected] + TB.nom_mob(prey) + if(prey.loc != pred) + fail("[TB].nom_mob([prey]) did not put prey inside [pred]") + return 1 + // Okay, we succeeded in eating them, now lets wait a bit + startLifeTick = pred.life_tick + startOxyloss = prey.getOxyLoss() + return 0 + + if(pred.life_tick < (startLifeTick + 10)) + return 0 // Wait for them to breathe a few times + + // Alright lets check it! + endOxyloss = prey.getOxyLoss() + if(startOxyloss < endOxyloss) + fail("Prey takes oxygen damage in a pred's belly! (Before: [startOxyloss]; after: [endOxyloss])") + else + pass("Prey is not taking oxygen damage in pred's belly. (Before: [startOxyloss]; after: [endOxyloss])") + + qdel(prey) + qdel(pred) + return 1 diff --git a/vorestation.dme b/vorestation.dme index 40a1283418..4acbdf4aa8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2496,6 +2496,8 @@ #include "code\unit_tests\mob_tests.dm" #include "code\unit_tests\research_tests.dm" #include "code\unit_tests\unit_test.dm" +#include "code\unit_tests\unit_test_vr.dm" +#include "code\unit_tests\vore_tests_vr.dm" #include "code\unit_tests\zas_tests.dm" #include "code\unit_tests\integrated_circuits\arithmetic.dm" #include "code\unit_tests\integrated_circuits\circuits.dm" From 0fe6df87410bc8ed1a85c3be1a03106a6d9c747e Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 16 Jun 2017 19:22:19 -0400 Subject: [PATCH 250/261] Adds free departmental NIFSofts There are now disk boxes in medical, security, mining, and engineering containing 7 nifsoft disks with software packs, each having 2 common useful NIFsofts for that department. * Medical - AR (Medical), Crew Monitor * Security - AR (Security), Responsive Filter * Engineering - AR (Engineering), Nictating Membrane * Mining - Respirocytes, Material Scanners --- code/modules/nifsoft/nifsoft.dm | 94 +++++++++++++++++++++++++++++++ maps/tether/tether-01-surface.dmm | 2 +- maps/tether/tether-03-station.dmm | 6 +- 3 files changed, 98 insertions(+), 4 deletions(-) diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index 963addf445..529fa64457 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -166,6 +166,8 @@ /obj/item/weapon/disk/nifsoft/proc/extra_params() return null + +// Compliance Disk // /obj/item/weapon/disk/nifsoft/compliance name = "NIFSoft Disk (Compliance)" desc = "Wow, adding laws to people? That seems illegal. It probably is. Okay, it really is." @@ -186,3 +188,95 @@ /obj/item/weapon/disk/nifsoft/compliance/extra_params() return laws + +// Security Disk // +/obj/item/weapon/disk/nifsoft/security + name = "NIFSoft Disk - Security" + desc = "Contains free NIFSofts useful for security members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Disk. \n\ + Insert directly into brain.\"" + + stored = /datum/nifsoft/package/security + +/datum/nifsoft/package/security + software = list(/datum/nifsoft/ar_sec,/datum/nifsoft/flashprot) + +/obj/item/weapon/storage/box/nifsofts_security + name = "security nifsoft disks" + desc = "A box of free nifsofts for security employees." + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/nifsofts_security/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/security(src) + +// Engineering Disk // +/obj/item/weapon/disk/nifsoft/engineering + name = "NIFSoft Disk - Engineering" + desc = "Contains free NIFSofts useful for engineering members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Disk. \n\ + Insert directly into brain.\"" + + stored = /datum/nifsoft/package/engineering + +/datum/nifsoft/package/engineering + software = list(/datum/nifsoft/ar_eng,/datum/nifsoft/uvblocker) + +/obj/item/weapon/storage/box/nifsofts_engineering + name = "engineering nifsoft disks" + desc = "A box of free nifsofts for engineering employees." + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/nifsofts_engineering/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/engineering(src) + +// Medical Disk // +/obj/item/weapon/disk/nifsoft/medical + name = "NIFSoft Disk - Medical" + desc = "Contains free NIFSofts useful for medical members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Disk. \n\ + Insert directly into brain.\"" + + stored = /datum/nifsoft/package/medical + +/datum/nifsoft/package/medical + software = list(/datum/nifsoft/ar_med,/datum/nifsoft/crewmonitor) + +/obj/item/weapon/storage/box/nifsofts_medical + name = "medical nifsoft disks" + desc = "A box of free nifsofts for medical employees." + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/nifsofts_medical/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/medical(src) + +// Mining Disk // +/obj/item/weapon/disk/nifsoft/mining + name = "NIFSoft Disk - Mining" + desc = "Contains free NIFSofts useful for mining members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Disk. \n\ + Insert directly into brain.\"" + + stored = /datum/nifsoft/package/mining + +/datum/nifsoft/package/mining + software = list(/datum/nifsoft/material,/datum/nifsoft/spare_breath) + +/obj/item/weapon/storage/box/nifsofts_mining + name = "mining nifsoft disks" + desc = "A box of free nifsofts for mining employees." + icon_state = "disk_kit" + +/obj/item/weapon/storage/box/nifsofts_mining/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/mining(src) \ No newline at end of file diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index e7de350693..11d1cd91d4 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -203,7 +203,7 @@ "adU" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/shovel,/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/brown/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "adV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "adW" = (/obj/item/weapon/pickaxe,/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/brown/bordercorner2,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) -"adX" = (/obj/item/stack/flag/green{pixel_x = -4; pixel_y = 0},/obj/item/stack/flag/red,/obj/item/stack/flag/yellow{pixel_x = 4},/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/brown/border{dir = 6},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) +"adX" = (/obj/item/stack/flag/green{pixel_x = -4; pixel_y = 0},/obj/item/stack/flag/red,/obj/item/stack/flag/yellow{pixel_x = 4},/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/brown/border{dir = 6},/obj/item/weapon/storage/box/nifsofts_mining,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/storage) "adY" = (/obj/machinery/suit_cycler/mining,/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/brown/border{dir = 10},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/eva) "adZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/weapon/mining_scanner,/obj/item/clothing/suit/space/void/mining/taur,/obj/item/clothing/head/helmet/space/void/mining,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/brown/border,/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/eva) "aea" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/weapon/mining_scanner,/obj/item/clothing/suit/space/void/mining/taur,/obj/item/clothing/head/helmet/space/void/mining,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/brown/border{dir = 6},/turf/simulated/floor/tiled,/area/tether/surfacebase/mining_main/eva) diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 3faca8be54..6c42f9bd66 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -631,7 +631,7 @@ "amg" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 4; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "amh" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 4; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) "ami" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{dir = 4},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 4; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/reinforced/nitrogen{nitrogen = 82.1472},/area/engineering/engine_room) -"amj" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/flashlight,/obj/item/weapon/wrench,/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor/tiled,/area/engineering/workshop) +"amj" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/flashlight,/obj/item/weapon/wrench,/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/item/weapon/storage/box/nifsofts_engineering,/turf/simulated/floor/tiled,/area/engineering/workshop) "amk" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room) "aml" = (/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_monitoring) "amm" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table/standard,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring) @@ -1447,7 +1447,7 @@ "aBQ" = (/obj/structure/table/reinforced,/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/radio{pixel_x = 2; pixel_y = 3},/obj/item/device/radio,/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/bridge) "aBR" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/bridge) "aBS" = (/obj/item/device/aicard,/obj/item/weapon/storage/box/PDAs{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/ids,/obj/structure/table/reinforced,/turf/simulated/floor/tiled/dark,/area/bridge) -"aBT" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled,/area/security/briefing_room) +"aBT" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = -26; pixel_y = 0},/obj/item/weapon/storage/box/nifsofts_security,/turf/simulated/floor/tiled,/area/security/briefing_room) "aBU" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge) "aBV" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light_switch{pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/bridge) "aBW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/bridge) @@ -4693,7 +4693,7 @@ "bMm" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "Medbay Equipment"; req_access = list(5)},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bMn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/medical/morgue) "bMo" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/medical/biostorage) -"bMp" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bMp" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 8},/obj/item/weapon/storage/box/nifsofts_medical,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bMq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/medbay_primary_storage) "bMr" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/flora/pottedplant/minitree,/turf/simulated/floor/tiled/white,/area/medical/reception) "bMs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/steel,/area/medical/biostorage) From bce8cfad6dda65012654dfc3c64e9587a83cf9e2 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 12 Jun 2017 17:07:50 -0400 Subject: [PATCH 251/261] Converts the lighting process controller to a StonedMC subsystem * No changes to lighting logic at all, it still processes sources, corners, and overlays in that order. * Also optimized the initial creation of lighting overlays, and made it include CHECK_TICKs * Removed the statistics gathering, at least for now. --- code/__defines/subsystems.dm | 2 + code/controllers/Processes/lighting.dm | 98 ------------- code/controllers/subsystems/lighting.dm | 166 ++++++++++++++++++++++ code/modules/lighting/lighting_overlay.dm | 2 +- code/modules/lighting/lighting_setup.dm | 21 ++- vorestation.dme | 2 +- 6 files changed, 178 insertions(+), 113 deletions(-) delete mode 100644 code/controllers/Processes/lighting.dm create mode 100644 code/controllers/subsystems/lighting.dm diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 8c546c9135..75780be3eb 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -11,3 +11,5 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_GAME, RUNLEVEL_POSTGAME) #define RUNLEVEL_FLAG_TO_INDEX(flag) (log(2, flag) + 1) // Convert from the runlevel bitfield constants to index in runlevel_flags list + +#define INIT_ORDER_LIGHTING 0 diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm deleted file mode 100644 index d46cab1d19..0000000000 --- a/code/controllers/Processes/lighting.dm +++ /dev/null @@ -1,98 +0,0 @@ -/var/lighting_overlays_initialised = FALSE - -/var/list/lighting_update_lights = list() // List of lighting sources queued for update. -/var/list/lighting_update_corners = list() // List of lighting corners queued for update. -/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. - -/var/list/lighting_update_lights_old = list() // List of lighting sources currently being updated. -/var/list/lighting_update_corners_old = list() // List of lighting corners currently being updated. -/var/list/lighting_update_overlays_old = list() // List of lighting overlays currently being updated. - - -/datum/controller/process/lighting - // Queues of update counts, waiting to be rolled into stats lists - var/list/stats_queues = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - // Stats lists - var/list/stats_lists = list( - "Source" = list(), "Corner" = list(), "Overlay" = list()) - var/update_stats_every = (1 SECONDS) - var/next_stats_update = 0 - var/stat_updates_to_keep = 5 - -/datum/controller/process/lighting/setup() - name = "lighting" - - schedule_interval = 0 // run as fast as you possibly can - sleep_interval = 10 // Yield every 10% of a tick - defer_usage = 80 // Defer at 80% of a tick - create_all_lighting_overlays() - lighting_overlays_initialised = TRUE - - // Pre-process lighting once before the round starts. Wait 30 seconds so the away mission has time to load. - spawn(300) - doWork(1) - -/datum/controller/process/lighting/doWork(roundstart) - - lighting_update_lights_old = lighting_update_lights //We use a different list so any additions to the update lists during a delay from scheck() don't cause things to be cut from the list without being updated. - lighting_update_lights = list() - for(var/datum/light_source/L in lighting_update_lights_old) - - if(L.check() || L.destroyed || L.force_update) - L.remove_lum() - if(!L.destroyed) - L.apply_lum() - - else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() - - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - - SCHECK - - lighting_update_corners_old = lighting_update_corners //Same as above. - lighting_update_corners = list() - for(var/A in lighting_update_corners_old) - var/datum/lighting_corner/C = A - - C.update_overlays() - - C.needs_update = FALSE - - SCHECK - - lighting_update_overlays_old = lighting_update_overlays //Same as above. - lighting_update_overlays = list() - - for(var/A in lighting_update_overlays_old) - var/atom/movable/lighting_overlay/O = A - O.update_overlay() - O.needs_update = 0 - SCHECK - - stats_queues["Source"] += lighting_update_lights_old.len - stats_queues["Corner"] += lighting_update_corners_old.len - stats_queues["Overlay"] += lighting_update_overlays_old.len - - if(next_stats_update <= world.time) - next_stats_update = world.time + update_stats_every - for(var/stat_name in stats_queues) - var/stat_sum = 0 - var/list/stats_queue = stats_queues[stat_name] - for(var/count in stats_queue) - stat_sum += count - stats_queue.Cut() - - var/list/stats_list = stats_lists[stat_name] - stats_list.Insert(1, stat_sum) - if(stats_list.len > stat_updates_to_keep) - stats_list.Cut(stats_list.len) - -/datum/controller/process/lighting/statProcess() - ..() - stat(null, "[total_lighting_sources] sources, [total_lighting_corners] corners, [total_lighting_overlays] overlays") - for(var/stat_type in stats_lists) - stat(null, "[stat_type] updates: [jointext(stats_lists[stat_type], " | ")]") diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm new file mode 100644 index 0000000000..dd59d0629c --- /dev/null +++ b/code/controllers/subsystems/lighting.dm @@ -0,0 +1,166 @@ +/* +** Lighting Subsystem - Process the lighting! Do it! +*/ + +#define SSLIGHTING_STAGE_LIGHTS 1 +#define SSLIGHTING_STAGE_CORNERS 2 +#define SSLIGHTING_STAGE_OVERLAYS 3 +#define SSLIGHTING_STAGE_DONE 4 +// This subsystem's fire() method also gets called once during Master.Initialize(). +// During this fire we need to use CHECK_TICK to sleep and continue, but in all other fires we need to use MC_CHECK_TICK to pause and return. +// This leads us to a rather annoying little tidbit of code that I have stuffed into this macro so I don't have to see it. +#define DUAL_TICK_CHECK if (init_tick_checks) { CHECK_TICK; } else if (MC_TICK_CHECK) { return; } + +// Globals +/var/lighting_overlays_initialised = FALSE +/var/list/lighting_update_lights = list() // List of lighting sources queued for update. +/var/list/lighting_update_corners = list() // List of lighting corners queued for update. +/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update. + +SUBSYSTEM_DEF(lighting) + name = "Lighting" + wait = 2 // Ticks, not deciseconds + init_order = INIT_ORDER_LIGHTING + flags = SS_TICKER + + var/list/currentrun = list() + var/stage = null + + var/cost_lights = 0 + var/cost_corners = 0 + var/cost_overlays = 0 + +/datum/controller/subsystem/lighting/Initialize(timeofday) + if(!lighting_overlays_initialised) + // TODO - TG initializes starlight here. + create_all_lighting_overlays() + lighting_overlays_initialised = TRUE + + // Pre-process lighting once before the round starts. + internal_process_lights(FALSE, TRUE) + internal_process_corners(FALSE, TRUE) + internal_process_overlays(FALSE, TRUE) + return ..() + +/datum/controller/subsystem/lighting/fire(resumed = FALSE) + var/timer + if(!resumed) + ASSERT(LAZYLEN(currentrun) == 0) // Santity checks to make sure we don't somehow have items left over from last cycle + ASSERT(stage == null) // Or somehow didn't finish all the steps from last cycle + stage = SSLIGHTING_STAGE_LIGHTS // Start with Step 1 of course + + if(stage == SSLIGHTING_STAGE_LIGHTS) + timer = world.tick_usage + internal_process_lights(resumed) + cost_lights = MC_AVERAGE(cost_lights, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_CORNERS + + if(stage == SSLIGHTING_STAGE_CORNERS) + timer = world.tick_usage + internal_process_corners(resumed) + cost_corners = MC_AVERAGE(cost_corners, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_OVERLAYS + + if(stage == SSLIGHTING_STAGE_OVERLAYS) + timer = world.tick_usage + internal_process_overlays(resumed) + cost_overlays = MC_AVERAGE(cost_overlays, TICK_DELTA_TO_MS(world.tick_usage - timer)) + if(state != SS_RUNNING) + return + resumed = 0 + stage = SSLIGHTING_STAGE_DONE + + // Okay, we're done! Woo! Got thru a whole air_master cycle! + ASSERT(LAZYLEN(currentrun) == 0) // Sanity checks to make sure there are really none left + ASSERT(stage == SSLIGHTING_STAGE_DONE) // And that we didn't somehow skip past the last step + currentrun = null + stage = null + +/datum/controller/subsystem/lighting/proc/internal_process_lights(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_lights + global.lighting_update_lights = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/light_source/L = currentrun[currentrun.len] + currentrun.len-- + + if(!L) continue + if(L.check() || L.destroyed || L.force_update) + L.remove_lum() + if(!L.destroyed) + L.apply_lum() + + else if(L.vis_update) //We smartly update only tiles that became (in) visible to use. + L.smart_vis_update() + + L.vis_update = FALSE + L.force_update = FALSE + L.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/proc/internal_process_corners(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_corners + global.lighting_update_corners = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/lighting_corner/C = currentrun[currentrun.len] + currentrun.len-- + + if(!C) continue + C.update_overlays() + C.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/proc/internal_process_overlays(resumed = FALSE, init_tick_checks = FALSE) + if (!resumed) + // We swap out the lists so any additions to the global list during a pause don't make things wierd. + src.currentrun = global.lighting_update_overlays + global.lighting_update_overlays = list() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + while(currentrun.len) + var/atom/movable/lighting_overlay/O = currentrun[currentrun.len] + currentrun.len-- + + if(!O) continue + O.update_overlay() + O.needs_update = FALSE + + DUAL_TICK_CHECK + +/datum/controller/subsystem/lighting/stat_entry(msg_prefix) + var/list/msg = list(msg_prefix) + msg += "T:{" + msg += "S [total_lighting_sources] | " + msg += "C [total_lighting_corners] | " + msg += "O [total_lighting_overlays]" + msg += "}" + msg += "C:{" + msg += "S [round(cost_lights, 1)] | " + msg += "C [round(cost_corners, 1)] | " + msg += "O [round(cost_overlays, 1)]" + msg += "}" + ..(msg.Join()) + +#undef DUAL_TICK_CHECK +#undef SSLIGHTING_STAGE_LIGHTS +#undef SSLIGHTING_STAGE_CORNERS +#undef SSLIGHTING_STAGE_OVERLAYS +#undef SSLIGHTING_STAGE_STATS diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 690eba9326..e02f976281 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -125,7 +125,7 @@ if (force) total_lighting_overlays-- global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src + LAZYREMOVE(SSlighting.currentrun, src) var/turf/T = loc if(istype(T)) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index 981de65864..5d1208f8ef 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,16 +1,11 @@ +// Create lighting overlays on all turfs with dynamic lighting in areas with dynamic lighting. /proc/create_all_lighting_overlays() - for(var/zlevel = 1 to world.maxz) - create_lighting_overlays_zlevel(zlevel) - -/proc/create_lighting_overlays_zlevel(var/zlevel) - ASSERT(zlevel) - - for(var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))) - if(!T.dynamic_lighting) - continue - - var/area/A = T.loc + for(var/area/A in world) if(!A.dynamic_lighting) continue - - new /atom/movable/lighting_overlay(T, TRUE) + for(var/turf/T in A) + if(!T.dynamic_lighting) + continue + new /atom/movable/lighting_overlay(T, TRUE) + CHECK_TICK + CHECK_TICK diff --git a/vorestation.dme b/vorestation.dme index 40a1283418..d1ad813608 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -171,7 +171,6 @@ #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\game_master.dm" #include "code\controllers\Processes\inactivity.dm" -#include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\machinery.dm" #include "code\controllers\Processes\nanoui.dm" #include "code\controllers\Processes\obj.dm" @@ -188,6 +187,7 @@ #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystems\garbage.dm" #include "code\controllers\subsystems\mobs.dm" +#include "code\controllers\subsystems\lighting.dm" #include "code\controllers\subsystems\transcore_vr.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" From bd39011ab4b834ba803420e8149ada07d27e2d35 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Fri, 16 Jun 2017 09:39:43 -0400 Subject: [PATCH 252/261] NSFW Gun Also fixes slidey walls at centcom, gives the ERT commander a NSFW with stun, xray, lethal, and net. Gives deathsquad a full NSFW kit (including 'final option' ammo), replaces my own fluff Hunter with a NSFW with stun and net (so, same as the hunter, but that sprite is so badass I can't help it), and fixes a typo on my permit while I'm on there (KIN isn't a thing, KHI is). --- code/game/machinery/recharger.dm | 15 +- .../vore/fluffstuff/custom_boxes_vr.dm | 14 +- .../vore/fluffstuff/custom_permits_vr.dm | 2 +- code/modules/vore/fluffstuff/guns/nsfw.dm | 383 ++++++++++++++++++ .../modules/vore/fluffstuff/guns/protector.dm | 7 +- code/modules/vore/fluffstuff/guns/pummeler.dm | 4 + code/modules/vore/fluffstuff/guns/sickshot.dm | 4 + icons/obj/ammo_vr.dmi | Bin 1920 -> 4599 bytes icons/vore/custom_guns_vr.dmi | Bin 29331 -> 28763 bytes maps/tether/tether-06-colony.dmm | 35 +- maps/tether/tether-08-ships.dmm | 3 +- vorestation.dme | 1 + 12 files changed, 436 insertions(+), 32 deletions(-) create mode 100644 code/modules/vore/fluffstuff/guns/nsfw.dm diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 39d23d03fd..44a112cab5 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -8,7 +8,7 @@ obj/machinery/recharger idle_power_usage = 4 active_power_usage = 40000 //40 kW var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric) + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_casing/nsfw_batt) //VOREStation Add - NSFW Batteries var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered @@ -187,6 +187,19 @@ obj/machinery/recharger update_use_power(1) return + //VOREStation Add - NSFW Batteries + if(istype(charging, /obj/item/ammo_casing/nsfw_batt)) + var/obj/item/ammo_casing/nsfw_batt/batt = charging + if(batt.shots_left >= initial(batt.shots_left)) + icon_state = icon_state_charged + update_use_power(1) + else + icon_state = icon_state_charging + batt.shots_left++ + update_use_power(2) + return + //VOREStation Add End + /obj/machinery/recharger/emp_act(severity) if(stat & (NOPOWER|BROKEN) || !anchored) ..(severity) diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 3923b8ba98..2a0275a01b 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -163,19 +163,15 @@ New() ..() //Might look like a lot... but all small items. - /* - new /obj/item/weapon/reagent_containers/hypospray/vr/fluff/aronai(src) - new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_st(src) - new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bt(src) - new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bu(src) - new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_tx(src) - */ //Centcom stuff and permit new /obj/item/weapon/card/id/centcom/fluff/aronai(src) new /obj/item/fluff/permit/aronai_kadigan(src) - //new /obj/item/clothing/glasses/omnihud/med/fluff/aronai(src) //Gun and holster - new /obj/item/weapon/gun/energy/netgun(src) + new /obj/item/weapon/gun/projectile/nsfw(src) + new /obj/item/ammo_magazine/nsfw_mag(src) + new /obj/item/ammo_casing/nsfw_batt/stun(src) + new /obj/item/ammo_casing/nsfw_batt/stun(src) + new /obj/item/ammo_casing/nsfw_batt/net(src) new /obj/item/clothing/accessory/holster(src) //Aerowing:Sebastian Aji diff --git a/code/modules/vore/fluffstuff/custom_permits_vr.dm b/code/modules/vore/fluffstuff/custom_permits_vr.dm index 0576eced52..97625e85ca 100644 --- a/code/modules/vore/fluffstuff/custom_permits_vr.dm +++ b/code/modules/vore/fluffstuff/custom_permits_vr.dm @@ -77,7 +77,7 @@ DOB: 12/Jul/2530 | HEIGHT: 188cm | SEX: Male The individual named above is licensed by the Nanotrasen Department of Civil Protection - to carry one KIN (foreign) personal defense weapon, non-lethal only. + to carry one KHI (foreign) personal defense weapon, non-lethal only. This license expires on 16/Feb/2562 and must be renewed by CentCom prior to this date."} // joanrisu:Joan Risu diff --git a/code/modules/vore/fluffstuff/guns/nsfw.dm b/code/modules/vore/fluffstuff/guns/nsfw.dm new file mode 100644 index 0000000000..7ef25c4e22 --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/nsfw.dm @@ -0,0 +1,383 @@ +// -------------- NSFW ------------- +/obj/item/weapon/gun/projectile/nsfw + name = "KHI-102b \'NSFW\'" + desc = "Variety is the spice of life! The 'Nanotech Selectable-Fire Weapon' is an unholy hybrid of an ammo-driven \ + energy weapon that allows the user to mix and match their own fire modes. Up to three combinations of \ + energy beams can be configured at once. Ammo not included." + + description_info = "This gun is an energy weapon that uses interchangable microbatteries in a magazine. Each battery is a different beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type." + description_fluff = "The Kitsuhana 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding." + description_antag = "" + + icon = 'icons/vore/custom_guns_vr.dmi' + icon_state = "nsfw" + + icon_override = 'icons/vore/custom_guns_vr.dmi' + item_state = "gun" + + caliber = "nsfw" + + origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4) + + fire_sound = 'sound/weapons/Taser.ogg' + + load_method = MAGAZINE //Nyeh heh hehhh. + magazine_type = null + allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag) + handle_casings = HOLD_CASINGS //Don't eject batteries! + recoil = 0 + var/charge_left = 0 + var/max_charge = 0 + charge_sections = 5 + +/obj/item/weapon/gun/projectile/nsfw/consume_next_projectile() + if(chambered && ammo_magazine) + var/obj/item/ammo_casing/nsfw_batt/batt = chambered + if(batt.shots_left) + return new chambered.projectile_type() + else + for(var/B in ammo_magazine.stored_ammo) + var/obj/item/ammo_casing/nsfw_batt/other_batt = B + if(istype(other_batt,chambered.type) && other_batt.shots_left) + switch_to(other_batt) + return new chambered.projectile_type() + break + + return null + +/obj/item/weapon/gun/projectile/nsfw/proc/update_charge() + charge_left = 0 + max_charge = 0 + + if(!chambered) + return + + var/obj/item/ammo_casing/nsfw_batt/batt = chambered + + charge_left = batt.shots_left + max_charge = initial(batt.shots_left) + if(ammo_magazine) //Crawl to find more + for(var/B in ammo_magazine.stored_ammo) + var/obj/item/ammo_casing/nsfw_batt/bullet = B + if(istype(bullet,batt.type)) + charge_left += bullet.shots_left + max_charge += initial(bullet.shots_left) + +/obj/item/weapon/gun/projectile/nsfw/proc/switch_to(obj/item/ammo_casing/nsfw_batt/new_batt) + if(ishuman(loc)) + if(chambered && new_batt.type == chambered.type) + to_chat(loc,"\The [src] is now using the next [new_batt.type_name] power cell.") + else + to_chat(loc,"\The [src] is now firing [new_batt.type_name].") + + chambered = new_batt + update_charge() + update_icon() + +/obj/item/weapon/gun/projectile/nsfw/attack_self(mob/user) + if(!chambered) + return + + var/list/stored_ammo = ammo_magazine.stored_ammo + + if(stored_ammo.len == 1) + return //silly you. + + //Find an ammotype that ISN'T the same, or exhaust the list and don't change. + var/our_slot = stored_ammo.Find(chambered) + var/index = our_slot + 1 + var/obj/item/ammo_casing/nsfw_batt/new_choice + + while((index != our_slot) && !new_choice) + if(index > stored_ammo.len) + index = 1 + var/obj/item/ammo_casing/nsfw_batt/next_batt = stored_ammo[index] + if(!istype(next_batt,chambered.type)) + new_choice = next_batt + index++ + + if(new_choice) + switch_to(new_choice) +/* +/obj/item/weapon/gun/projectile/nsfw/special_check(mob/user) + if(!chambered) + return + + var/obj/item/ammo_casing/nsfw_batt/batt = chambered + if(!batt.shots_left) + return FALSE + + return TRUE +*/ +/obj/item/weapon/gun/projectile/nsfw/load_ammo(var/obj/item/A, mob/user) + . = ..() + if(ammo_magazine && ammo_magazine.stored_ammo.len) + switch_to(ammo_magazine.stored_ammo[1]) + +/obj/item/weapon/gun/projectile/nsfw/unload_ammo(mob/user, var/allow_dump=1) + chambered = null + return ..() + +/obj/item/weapon/gun/projectile/nsfw/update_icon() + var/mutable_appearance/ma = new(src) + update_charge() + + if(!chambered) + ma.overlays = list() + appearance = ma + return + + var/obj/item/ammo_casing/nsfw_batt/batt = chambered + var/batt_color = batt.type_color //Used many times + var/list/newverlays = list() + + //Mode bar + var/mutable_appearance/mode_bar = mutable_appearance(icon, "[initial(icon_state)]_type") + mode_bar.color = batt_color + newverlays += mode_bar + + //Barrel color + var/mutable_appearance/barrel_color = mutable_appearance(icon, "[initial(icon_state)]_barrel") + barrel_color.alpha = 150 + barrel_color.color = batt_color + newverlays += barrel_color + + //Charge bar + var/ratio = Ceiling((charge_left / max_charge) * charge_sections) + for(var/i = 0, i < ratio, i++) + var/mutable_appearance/charge_bar = mutable_appearance(icon, "[initial(icon_state)]_charge") + charge_bar.pixel_x = i + charge_bar.color = batt_color + newverlays += charge_bar + + ma.overlays = newverlays + if(ma.overlays.len != newverlays.len) //PANIC! + del(ma) + spawn(5) + update_icon() + return + + appearance = ma + +// The Magazine // +/obj/item/ammo_magazine/nsfw_mag + name = "microbattery magazine" + desc = "A microbattery holder for the \'NSFW\'" + + description_info = "This magazine holds NSFW microbatteries to power the NSFW handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger." + + icon = 'icons/obj/ammo_vr.dmi' + icon_state = "nsfw_mag" + caliber = "nsfw" + matter = list(DEFAULT_WALL_MATERIAL = 1680, "glass" = 2000) + ammo_type = /obj/item/ammo_casing/nsfw_batt + initial_ammo = 0 + max_ammo = 3 + mag_type = MAGAZINE + + var/list/modes + +/obj/item/ammo_magazine/nsfw_mag/New() + ..() + modes = list() + +/obj/item/ammo_magazine/nsfw_mag/update_icon() + var/mutable_appearance/ma = new(src) + + if(!stored_ammo.len) + ma.overlays = list() + appearance = ma + return //Why bother + + var/x_offset = 5 + var/list/newverlays = list() + + var/current = 0 + for(var/B in stored_ammo) + var/obj/item/ammo_casing/nsfw_batt/batt = B + var/mutable_appearance/cap = mutable_appearance(icon,"[initial(icon_state)]_cap") + cap.color = batt.type_color + cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset + newverlays += cap + + if(batt.shots_left) + var/ratio = Ceiling((batt.shots_left / initial(batt.shots_left)) * 4) //4 is how many lights we have a sprite for + var/mutable_appearance/charge = mutable_appearance(icon,"[initial(icon_state)]_charge-[ratio]") + charge.color = "#29EAF4" //Could use battery color but eh. + charge.pixel_x = current * x_offset + newverlays += charge + + current++ //Increment for offsets + + ma.overlays = newverlays + if(ma.overlays.len != newverlays.len) //PANIC! + del(ma) + spawn(5) + update_icon() + return + + appearance = ma + +// The Casing // +/obj/item/ammo_casing/nsfw_batt + name = "\'NSFW\' microbattery - LETHAL" + desc = "A miniature battery for an energy weapon." + icon = 'icons/obj/ammo_vr.dmi' + icon_state = "nsfw_batt" + flags = CONDUCT + slot_flags = SLOT_BELT | SLOT_EARS + throwforce = 1 + w_class = ITEMSIZE_TINY + + leaves_residue = 0 + caliber = "nsfw" + var/shots_left = 4 + var/type_color = "#bf3d3d" + var/type_name = "LETHAL" + projectile_type = /obj/item/projectile/beam + +/obj/item/ammo_casing/nsfw_batt/New() + pixel_x = rand(-10, 10) + pixel_y = rand(-10, 10) + update_icon() + +/obj/item/ammo_casing/nsfw_batt/update_icon() + var/mutable_appearance/ma = new(src) + ma.overlays.Cut() + + var/mutable_appearance/ends = mutable_appearance(icon,"[initial(icon_state)]_ends") + ends.color = type_color + ma.overlays += ends + + appearance = ma + +/obj/item/ammo_casing/nsfw_batt/expend() + shots_left-- + +// Specific batteries // +/obj/item/ammo_casing/nsfw_batt/stun + name = "\'NSFW\' microbattery - STUN" + type_color = "#0f81bc" + type_name = "STUN" + projectile_type = /obj/item/projectile/beam/stun/blue + +/obj/item/ammo_casing/nsfw_batt/net + name = "\'NSFW\' microbattery - NET" + type_color = "#43f136" + type_name = "NET" + projectile_type = /obj/item/projectile/beam/energy_net + +/obj/item/ammo_casing/nsfw_batt/xray + name = "\'NSFW\' microbattery - XRAY" + type_color = "#32c025" + type_name = "XRAY" + projectile_type = /obj/item/projectile/beam/xray + +/obj/item/ammo_casing/nsfw_batt/shotstun + name = "\'NSFW\' microbattery - SCATTERSTUN" + type_color = "#88ffff" + type_name = "SCATTERSTUN" + projectile_type = /obj/item/projectile/bullet/pellet/e_shot_stun + +/obj/item/projectile/bullet/pellet/e_shot_stun + icon_state = "spell" + damage = 2 + agony = 20 + pellets = 6 //number of pellets + range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer. + base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone + spread_step = 10 + embed_chance = 0 + sharp = 0 + check_armour = "melee" + +/obj/item/ammo_casing/nsfw_batt/ion + name = "\'NSFW\' microbattery - ION" + type_color = "#d084d6" + type_name = "ION" + projectile_type = /obj/item/projectile/ion/small + +/obj/item/ammo_casing/nsfw_batt/stripper + name = "\'NSFW\' microbattery - STRIPPER" + type_color = "#fc8d0f" + type_name = "STRIPPER" + projectile_type = /obj/item/projectile/bullet/stripper + +/obj/item/projectile/bullet/stripper + icon_state = "magicm" + nodamage = 1 + agony = 5 + embed_chance = 0 + sharp = 0 + check_armour = "melee" + +/obj/item/projectile/bullet/stripper/on_hit(var/atom/stripped) + if(ishuman(stripped)) + var/mob/living/carbon/human/H = stripped + if(H.wear_suit) + H.unEquip(H.wear_suit) + if(H.w_uniform) + H.unEquip(H.w_uniform) + if(H.back) + H.unEquip(H.back) + if(H.shoes) + H.unEquip(H.shoes) + if(H.gloves) + H.unEquip(H.gloves) + //Hats can stay! Most other things fall off with removing these. + ..() + +/obj/item/ammo_casing/nsfw_batt/final + name = "\'NSFW\' microbattery - FINAL OPTION" + type_color = "#fcfc0f" + type_name = "FINAL OPTION" //Doesn't look good in yellow in chat + projectile_type = /obj/item/projectile/beam/final_option + +/obj/item/projectile/beam/final_option + name = "final option beam" + icon_state = "omnilaser" + nodamage = 1 + agony = 5 + damage_type = HALLOSS + light_color = "#00CC33" + + muzzle_type = /obj/effect/projectile/laser_omni/muzzle + tracer_type = /obj/effect/projectile/laser_omni/tracer + impact_type = /obj/effect/projectile/laser_omni/impact + +/obj/item/projectile/beam/final_option/on_hit(var/atom/impacted) + if(isliving(impacted)) + var/mob/living/L = impacted + if(L.mind) + var/nif + if(ishuman(L)) + var/mob/living/carbon/human/H = L + nif = H.nif + SStranscore.m_backup(L.mind,nif,one_time = TRUE) + L.gib() + + ..() + +/obj/item/ammo_casing/nsfw_batt/shrink + name = "\'NSFW\' microbattery - SHRINK" + type_color = "#910ffc" + type_name = "SHRINK" + projectile_type = /obj/item/projectile/beam/shrinklaser + +/obj/item/ammo_casing/nsfw_batt/grow + name = "\'NSFW\' microbattery - GROW" + type_color = "#fc0fdc" + type_name = "GROW" + projectile_type = /obj/item/projectile/beam/growlaser + +/obj/item/weapon/storage/secure/briefcase/nsfw_pack + name = "\improper KHI-102b \'NSFW\' gun kit" + desc = "A storage case for a multi-purpose handgun. Variety hour!" + max_w_class = ITEMSIZE_NORMAL + +/obj/item/weapon/storage/secure/briefcase/nsfw_pack/New() + ..() + new /obj/item/weapon/gun/projectile/nsfw(src) + new /obj/item/ammo_magazine/nsfw_mag(src) + for(var/path in typesof(/obj/item/ammo_casing/nsfw_batt)) + new path(src) diff --git a/code/modules/vore/fluffstuff/guns/protector.dm b/code/modules/vore/fluffstuff/guns/protector.dm index 16bc56ee59..173c00b637 100644 --- a/code/modules/vore/fluffstuff/guns/protector.dm +++ b/code/modules/vore/fluffstuff/guns/protector.dm @@ -2,8 +2,11 @@ /obj/item/weapon/gun/energy/protector name = "\improper KHI-98a \'Protector\'" desc = "The KHI-98a is the first firearm custom-designed for Nanotrasen by KHI. It features a powerful stun mode, and \ - an alert-level-locked lethal mode, only usable on code blue and higher. It also features an integrated flashlight! \ - (CtrlClick to toggle flashlight)" + an alert-level-locked lethal mode, only usable on code blue and higher. It also features an integrated flashlight!" + + description_info = "This gun can only be fired in lethal mode while on higher security alert levels. It is legal for sec to carry for this reason, since it cannot be used for lethal force until SOP allows it, in essence." + description_fluff = "The first 'commission' from a Kitsuhana citizen for NanoTrasen, this gun has a wireless connection to the computer's datacore to ensure it can't be used without authorization from heads of staff who have raised the alert level. Until then, *click*!" + description_antag = "The gun can be emagged to remove the lethal security level restriction, allowing it to be fired on lethal mode at all times." icon = 'icons/vore/custom_guns_vr.dmi' icon_state = "prot" diff --git a/code/modules/vore/fluffstuff/guns/pummeler.dm b/code/modules/vore/fluffstuff/guns/pummeler.dm index 21a9013c16..b12ce223e8 100644 --- a/code/modules/vore/fluffstuff/guns/pummeler.dm +++ b/code/modules/vore/fluffstuff/guns/pummeler.dm @@ -5,6 +5,10 @@ sonic blast in the direction of fire, throwing the target away from you at high speed. Now you can REALLY \ turn up the bass to max." + description_info = "This gun punts people away and has a chance of knocking them down briefly. It may also throw them over railings in the process!" + description_fluff = "" + description_antag = "" + icon = 'icons/vore/custom_guns_vr.dmi' icon_state = "pum" diff --git a/code/modules/vore/fluffstuff/guns/sickshot.dm b/code/modules/vore/fluffstuff/guns/sickshot.dm index 87d289e8e7..8733e4aadf 100644 --- a/code/modules/vore/fluffstuff/guns/sickshot.dm +++ b/code/modules/vore/fluffstuff/guns/sickshot.dm @@ -5,6 +5,10 @@ Using a short-range concentrated blast of disruptive sound, the Sickshot will nauseate and confuse the target for several seconds. NOTE: Not suitable \ for use in vacuum, or on animals. May cause contraction and release of various 'things' from various 'orifices'." + description_info = "This gun causes nausea in targets, stunning them briefly and causing vomiting. It will also cause them to vomit up prey, sometimes. Repeated shots may help in that case." + description_fluff = "" + description_antag = "" + icon = 'icons/vore/custom_guns_vr.dmi' icon_state = "sickshot" diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi index 066d95333eb31daf960201c7da144debf17be589..fe871d3e66b8a38f30f2f54088585f25c652c4c1 100644 GIT binary patch literal 4599 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 delta 1918 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

    Uw6j;ls*@Zc|c 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 delta 9156 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 M{#dO{#Uk*301rVFs{jB1 diff --git a/maps/tether/tether-06-colony.dmm b/maps/tether/tether-06-colony.dmm index 9ef0c13a94..b274e497ef 100644 --- a/maps/tether/tether-06-colony.dmm +++ b/maps/tether/tether-06-colony.dmm @@ -533,7 +533,7 @@ "km" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "kn" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/unsimulated/floor/steel{icon_state = "white"},/area/centcom/medical) "ko" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"kp" = (/turf/unsimulated/wall{icon = 'icons/turf/transit_vr.dmi'},/area/centcom/specops) +"kp" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/storage/secure/briefcase/nsfw_pack,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "kq" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "kr" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/cautery,/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) "ks" = (/obj/machinery/optable,/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/medical) @@ -1399,7 +1399,7 @@ "AU" = (/obj/machinery/computer/prisoner{tag = "icon-computer (NORTH)"; name = "Implant Management"; icon_state = "computer"; dir = 1},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) "AV" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_port_hatch"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) "AW" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/specops/centcom) -"AX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/weapon/gun/energy/pulse_rifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"AX" = (/obj/structure/sign/nanotrasen,/turf/unsimulated/wall,/area/centcom/specops) "AY" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "AZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "Ba" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) @@ -1444,7 +1444,7 @@ "BN" = (/obj/structure/closet/wardrobe/ert,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "BO" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "BP" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = 25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) -"BQ" = (/obj/structure/sign/nanotrasen,/turf/unsimulated/wall{icon = 'icons/turf/transit_vr.dmi'},/area/centcom/specops) +"BQ" = (/obj/structure/table/reinforced,/obj/item/ammo_casing/nsfw_batt/stun,/obj/item/ammo_casing/nsfw_batt/stun,/obj/item/ammo_casing/nsfw_batt/stun,/obj/item/ammo_casing/nsfw_batt,/obj/item/ammo_casing/nsfw_batt,/obj/item/ammo_casing/nsfw_batt,/obj/item/ammo_casing/nsfw_batt/net,/obj/item/ammo_casing/nsfw_batt/net,/obj/item/ammo_magazine/nsfw_mag,/obj/item/weapon/gun/projectile/nsfw,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "BR" = (/obj/machinery/door/blast/regular{name = "When Everything else fails."},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "BS" = (/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (SOUTHWEST)"; icon_state = "corner_white"; dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "BT" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -1459,7 +1459,6 @@ "Cc" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor/steel,/area/centcom/specops) "Cd" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "Ce" = (/obj/machinery/door/airlock/centcom{name = "Commander"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) -"Cf" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/projectile/deagle/camo,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "Cg" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"; pixel_y = -32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "Ch" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor/steel{icon = 'icons/turf/floors_vr.dmi'; icon_state = "wood"},/area/centcom/specops) "Ci" = (/obj/effect/floor_decal/corner/yellow{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -1556,22 +1555,22 @@ aaababababababababababababababababababababababababababababababababababababababab aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaceZeZeZeZeZeZeZeZeZeZeZeZeZeZeZ aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaceZjyjTjTjTjTjTjTjTjTjTjTkokoeZ -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpkpkpkpkpkpkpkpkpkpkpkpkpkpkXkZkYnunununununNApnOjTkoeZ -aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpkpkpkpkpkpkpkpkpkpkpkpkpAqAsArAuAtAwAvAyAxAAAzACABkpkXAEADAFAFAFAFAFAFAFAGAHkoeZ -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpAIkokpAKAJAMALAOANAQAPARAqkokokokokokokokokokokokokpkXAEASAUATATAVAFAFAWnOjTkoeZ -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpAXkokpAZAYAYAYAYAYAYAYBaAqBbkokoBcBeBdBgBfBhkokoBikpBjjTjTjTjTjTjTBkBkjTjTkokoeZ -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBlkoAqBmAYBoBnBqBpBrAYBskpkokokoBtBvBuBxBwBykokoBzkpkpkpkpkpkpkpkpBABAkpkokokoeZ -aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBBkoAqBCAYBEBDBGBFBHAYBIkpBKBJkokokokokokokokokoBLkpBMBNBNBNBOkpBPAYAYkpkpkpkpeZ -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacackpBQBRAqAqBSBSBSBSBSBSBSAqkpkpkpBTBTBTBTBTBTBTBTkpkpkpBUBVBVBVBUkpAYAYAYkpBWBYBXeZ +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAqAqAqAqAqAqAqAqAqAqAqAqAqkXkZkYnunununununNApnOjTkoeZ +aaabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAqAqAqAqAqAqAqAqAqAqAqAqAqAsArAuAtAwAvAyAxAAAzACABAqkXAEADAFAFAFAFAFAFAFAGAHkoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAIkoAqAKAJAMALAOANAQAPARAqkokokokokokokokokokokokoAqkXAEASAUATATAVAFAFAWnOjTkoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqkpkoAqAZAYAYAYAYAYAYAYBaAqBbkokoBcBeBdBgBfBhkokoBiAqBjjTjTjTjTjTjTBkBkjTjTkokoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqBlkoAqBmAYBoBnBqBpBrAYBsAqkokokoBtBvBuBxBwBykokoBzAqAqAqAqAqAqAqAqBABAAqkokokoeZ +aaababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqBBkoAqBCAYBEBDBGBFBHAYBIAqBKBJkokokokokokokokokoBLAqBMBNBNBNBOAqBPAYAYAqAqAqAqeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAXBRAqAqBSBSBSBSBSBSBSAqAqAqAqBTBTBTBTBTBTBTBTAqAqAqBUBVBVBVBUAqAYAYAYAqBWBYBQeZ aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYBZAYAYAYAYAYAYAYBZAYAYCaAYAYAYAYAYAYAYAYCaAYBUBUCbCbCbBUBUAYAYAYCcBUBUCdeZ -aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYBUBUBUBUBUBUBUAYAYAYCeBUBUCfeZ +aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYAYBUBUBUBUBUBUBUAYAYAYCeBUBUBXeZ aaababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAYCgAYAYAYAYAYAYAYCgAYAYAYAYAYAYAYAYAYAYAYAYAYBUBUCbCbCbBUBUAYAYAYCcBUBUCheZ -aaabababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqAqCiCiCiCiCiCiCiAqAqAqAqCjCjClCkCnCmCjCjAqAqAqBUBVBVBVBUkpAYAYAYkpCoCqCpeZ -aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCrkokokokokokokokokpkokokokoCtCsCvCukokokokoAqCwBNBNBNCxkpAYAYAYkpkpkpkpeZ -aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCykokokoCACzCCCBCBkpCDkokokokokokokokokokoCEAqkpkpkpkpkpkpAYAYAYkpCFCHCGeZ -aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCIkokokoCKCJCMCLCNkpCOkokokokokokokokokokoCPAqacacacacackpAYAYAYCQkokokoeZ -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadadAqacacacacacAqAYAYAqCSCRCUCTCWCVCMCLCNkpCYCXDaCZDcDbDeDdDgDfDiDhAqacacacacackpAYAYAYDjkokokoeZ -aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadagahagAqkpkpkpkpkpBQDkDkAqaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaf +aaabababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqAqCiCiCiCiCiCiCiAqAqAqAqCjCjClCkCnCmCjCjAqAqAqBUBVBVBVBUAqAYAYAYAqCoCqCpeZ +aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCrkokokokokokokokoAqkokokokoCtCsCvCukokokokoAqCwBNBNBNCxAqAYAYAYAqAqAqAqeZ +aaabababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCykokokoCACzCCCBCBAqCDkokokokokokokokokokoCEAqAqAqAqAqAqAqAYAYAYAqCFCHCGeZ +aaabababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacAqAYAYAqCIkokokoCKCJCMCLCNAqCOkokokokokokokokokokoCPAqacacacacacAqAYAYAYCQkokokoeZ +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadadAqacacacacacAqAYAYAqCSCRCUCTCWCVCMCLCNAqCYCXDaCZDcDbDeDdDgDfDiDhAqacacacacacAqAYAYAYDjkokokoeZ +aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadagahagAqAqAqAqAqAqAXDkDkAqaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaf aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadagahahahaiahahahahahahahahahahaiahahahahahDmDlDlDlDlDlDlDlDlDnaeajakakakalamanaoapapaeaqarasatauavawaxayaeazaAaBaCaDaEaFaeaGaHaIaJaKaLaf aaababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacadahahahahahahahahahahahahahahahahahahahahahDmDlDlDlDlDlDlDlDlDnaeajakakakakakakakakakaeaMaraNaNaraMaMaMaMaeaOaPaQaQaQaRaSaTaUaVaWaXaYaYaf aaabababababababababababababababababababababababababababababababababababacacaZaZaZaZaZaZaZaZacacacacacadahahahahahahahahahahahahahahahahahahahahahAqaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebaaeaeakakaeaMaMaMaMaMaMaMaMaMaeaObbbcbdbebfbgaTbdbdbdbdbdbdaf diff --git a/maps/tether/tether-08-ships.dmm b/maps/tether/tether-08-ships.dmm index 76968962df..fd41acbeda 100644 --- a/maps/tether/tether-08-ships.dmm +++ b/maps/tether/tether-08-ships.dmm @@ -259,6 +259,7 @@ "eY" = (/obj/effect/floor_decal/techfloor,/obj/structure/table/steel_reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled/techfloor,/area/houseboat/cargo) "eZ" = (/obj/effect/floor_decal/techfloor,/obj/structure/table/steel_reinforced,/obj/item/stack/material/plasteel,/obj/item/stack/material/plasteel,/turf/simulated/floor/tiled/techfloor,/area/houseboat/cargo) "fa" = (/obj/effect/floor_decal/techfloor{dir = 6},/obj/structure/table/steel_reinforced,/obj/item/stack/material/plastic,/obj/item/stack/material/plastic,/turf/simulated/floor/tiled/techfloor,/area/houseboat/cargo) +"fb" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/secure/briefcase/nsfw_pack,/turf/simulated/floor/tiled/techfloor,/area/houseboat/bridge) (1,1,1) = {" aaabababababaaabababababaaabababababaaabababababaaabababababaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac @@ -286,7 +287,7 @@ acacacacacacacacacacacacacacacacacacacacacacacblbnbobpbqbrbsblblacacacacacblbmbm acacacacacacacacacacacacacacacacacblbmbmbmbmbmblbtbubvbwbxbyblbnbmbmbmbnblbnbzbAbBbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacacacacacacacacacacacacblblbEbFbGbHbIblbJbKbLbLbLbMblbNbObPbQbRbSbTbUbUbVbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacacacblblbnbmbmbmbmbmbmblblbWbXbXbXbYblbZcacbcccacdblcecfcgchblcicjckclcmbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac -acacacacacacblblcnblcocpcpcqcrcrcsblctcucvcwcxblblbRcyblblblblcecgcgczcAclclclcBbnblblacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac +acacacacacacblblfbblcocpcpcqcrcrcsblctcucvcwcxblblbRcyblblblblcecgcgczcAclclclcBbnblblacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacblblcCcDblcEcpcpcpcFcFcGblblbRcybRblblcHcIcJcIcKcLcMcNcgcgcOblcPcQcRcSblbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacaccTcUcVcVblcWcpcpcXcYcYcsblcZcZcZcZcZbldadbdcdddedfdgdhcgcgdiblblblblblbnbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacaccTdjdkdlbnblblcyblblblblbncZcZcZcZcZcAdmdbdndodpdpbRdqcgcgdrbldsdtdudvdwbCbDacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac diff --git a/vorestation.dme b/vorestation.dme index 40a1283418..a66bcda17c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2404,6 +2404,7 @@ #include "code\modules\vore\fluffstuff\custom_permits_vr.dm" #include "code\modules\vore\fluffstuff\guns\bsharpoon.dm" #include "code\modules\vore\fluffstuff\guns\dominator.dm" +#include "code\modules\vore\fluffstuff\guns\nsfw.dm" #include "code\modules\vore\fluffstuff\guns\protector.dm" #include "code\modules\vore\fluffstuff\guns\pummeler.dm" #include "code\modules\vore\fluffstuff\guns\sickshot.dm" From 6826789f9b8706e6ab121e0048ba1640e88c44ad Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 17 Jun 2017 17:31:11 -0400 Subject: [PATCH 253/261] Reduce soulcatcher cost some People seem to like it so why not. --- code/modules/nifsoft/software/13_soulcatcher.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index b46c039e41..6cd7ea6df3 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -12,7 +12,7 @@ name = "Soulcatcher" desc = "A mind storage and processing system capable of capturing and supporting human-level minds in a small VR space." list_pos = NIF_SOULCATCHER - cost = 1265 + cost = 950 wear = 1 p_drain = 0.01 other_flags = (NIF_O_SCMYSELF|NIF_O_SCOTHERS) // Default on when installed, clear when uninstalled From f3757c0fe7d42cdd1cb4794a8e7d21d0dc63e01a Mon Sep 17 00:00:00 2001 From: Verkister Date: Sun, 18 Jun 2017 11:51:03 +0300 Subject: [PATCH 254/261] Eggnerd's approved fluffs The custom limb disk and aesthetic goggles. --- config/custom_items.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/config/custom_items.txt b/config/custom_items.txt index 44d1d851d0..5ebc8ba763 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -575,6 +575,16 @@ item_path: /obj/item/clothing/head/fluff/runac # ######## U CKEYS # ######## V CKEYS { +ckey: verkister +character_name: Cameron Eggbert +item_path: /obj/item/clothing/glasses/science_proper +} +{ +ckey: verkister +character_name: Cameron Eggbert +item_path: /obj/item/weapon/disk/limb/eggnerdltd +} +{ ckey: virgo113 character_name: Verin Raharra item_path: /obj/item/clothing/suit/storage/hazardvest/fluff/verin From db1c778ab18007c86dc93d057e5789a81a4861bf Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sun, 18 Jun 2017 13:13:46 +0100 Subject: [PATCH 255/261] Few small changes --- maps/tether/tether-01-surface.dmm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index 11d1cd91d4..437ab7d8d2 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -1064,7 +1064,7 @@ "aux" = (/obj/effect/floor_decal/borderfloor,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 8},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_one) "auy" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 1},/turf/simulated/floor/tiled,/area/tether/surfacebase/atrium_one) "auz" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/holofloor/tiled/dark,/area/crew_quarters/locker) -"auA" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"auA" = (/obj/structure/anomaly_container,/turf/simulated/floor/tiled,/area/rnd/anomaly_lab) "auB" = (/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "auC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals6,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "auD" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/turf/simulated/floor/tiled,/area/crew_quarters/locker) @@ -4280,6 +4280,7 @@ "bEp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/vacant/vacant_shop) "bEq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/vacant/vacant_shop) "bEr" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/lower/atrium) +"bEs" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "bEt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bEu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) "bEv" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/freezer) @@ -5447,14 +5448,14 @@ aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGanaanbancamGandaneanfamGanganhan aaaaadaadaadaadaadaadaadaadaadaadaadaagamGamGamGanuanvanwamGanxanyanzamGanAanBanCanDanEanFaiCanGanHakOakOakOakOakOalzakOakOakOanJakTaagaagaagaagaagaagaagaagaagaagaagaagaagaagakYanKanLanMakYaagaagaagaagaagaaganNalGanOajOamzbZdalfbZeanqakvanqbZdalfbZeamzajOanPajQanQanRanRanRanRaSqanRanRanRanRanRanRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaadaagamGanUamGanVanWanXamGanYanZaoaamGamoamoamoamoamoaobaocaodaoeaofalzanIakOakOakOakOakOaogaohakTaagaagaagaagakYakYakYakYakYakYakYakYakYakYakYakYakYaSWakYakYakYakYakYakYakYagIalGakuajOamzbZdalfbZeanranqanrbZdalfbZeamzajOajPajQanRaojaokaolaomaonanRaooarWaoqaoranRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaosaotaouaovaowaoxaoyaozaoAamGaoBaoCaoDaoEahhaoFaiCaoGahhaoHakOakOakOalzalzaUrakMakMakMakTaagaagaagaagakYaUsaoKaoLalEalEaoMalEalEalEalEalEalEaoNaoOaoOaoOaoOaoOaoOaoOaoPaoQakuajOamzbZdalfalfbVubVubVualfalfbZeamzajOajPaoRanRaoSaoTaoUaoVaoWanRaoXaoYanRanRanRaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaaa -aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaoZaotaouapaapbapcapdapaaoAamGapeapfapgaphahhapiapjakhahhaUNakOakOalzaUQakMakMakMakMakMakTaagaagaagaagakYapmalEapnappappappannannannannaRLaVJakYakYakYakYakYakYakYakYagIaptakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPapuanRaoSapvapwapxapyanRapzapAapBaoranRaagapCapCapCapCapCapCapCapDapEapEapFapGapGapGapGapFapEapEapHaaa +aaaaadaadaadaadaadaadaadaadaadaadaagaagamGauAaotaouapaapbapcapdapaaoAamGapeapfapgaphahhapiapjakhahhaUNakOakOalzaUQakMakMakMakMakMakTaagaagaagaagakYapmalEapnappappappannannannannaRLaVJakYakYakYakYakYakYakYakYagIaptakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPapuanRaoSapvapwapxapyanRapzapAapBaoranRaagapCapCapCapCapCapCapCapDapEapEapFapGapGapGapGapFapEapEapHaaa aaaaadaadaadaadaadaadaadaadaadaadaagaagamGapIapJapKapLapMapNapOapPapQamGapRapfapgapSahhapTaiCapUapVapWapWapWapWakTakTakTakTakTakTakTaagaagaagaagakYapXalEapYaTrakYakYakYakYakYakYakYakYakYaagaagaagaagaagaagaagagIaqaakuajOalebZdalfalfalfalfalfalfbZfbZealeajOajPaqbanRaqcapvaqdaqeaoWanRaqfaqganRanRanRaagapCaqhaqiaqjaqkaqlaqmaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaadaagamGamGamGaqsaqtaquaqvaqwaqxaqyaqzamGapRaqAaqBaqCahhaqDaiCaqEaqFaqGaqHaqIapWaagaagaagaagaagaagaagaagaagaagaagakYaYDaqKaqLaqMakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIaptakuajOalebZdalfalfalfalfalfalfalfbZealeajOajPajQanRaqNaqOaqPaqQaqRanRaqSaqTaqUaoranRaagapCaqVaqWaqWaqWaqXaqWaqnaqoaqpaqqaqpaqpaqpaqpaqqaqpaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaadaagamGaqZaraarbaoZarcaoZardarearfargamGarhariarjarjahharkaiCarlapWarmarnaroapWarparparparparparparparparparparpakYarqalEakYakYakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIarrakuajOalebZhbZgbZgbZgbZgbZgbZgbZgbZialeajOajParsanRartaoTaoTaruarvanRarwanRanRanRanRaagapCarxaqWaryarzarAaqWaqnaqoaqparBarCarCarCarCarBaqpaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagaagamGarDarEarbarFarGarHarIarJarKarKarLarMarNarOarParQarRaiCarSarparparTarUarparVaxQarXarYarXarXarXarXarXarXarXarZasaasbakYaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagagIascakuajOakvakwakwakwakwakwakwakwakwakwakvajOajPasdaseasfaoTaoTaruasgashasiasjaskaslanRaagapCasmaqWasnasoaspaqWaqnaqoarCarBarCarCarCarCarBarCasqapCaaa aaaaadaadaadaadaadaadaadaadaadaagaagamGasrassastasuasuasuasuasuasuasvaswasxasyaszasAasBasCasDasEarpbegbdUasHasIasJasKasLasLasLasLasLasLasLasLasLasLasMasNasOasOasPasPasPasPasPasPagIagIaagaagaagaagaagaagaagaagagIasQakuajOajOajOajOajOajOajOajOajOajOajOajOajOasRasSasTasUasVasVasWasXaoTasYaoTaoWaslanRaagapCaqhasZasZaqWataaqWaqnaqoarCarBarCarCarCarCarBarCaqYatbaaa -aaaaadaadaadaadaadaadaadaadaadaagamGamGamGamGatcaoZaoZatdateatfatgathaoZatiatjatkatlatmatnatoatparpatqatratratratratsasLattatuatvatwatxatxatxatyasLatzatAasOatBatCatCatCatCatCatCagIagIagIaagaagaagaagaagaagaagagIatDatEatFatGatGatGatGatGatHatGatGatGatGatGatGatIatJanRatKaoTaoTatLatMatNatOaoTaoWaslanRaagapCapCapCapCatPataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa -aaaaadaadaadaadaadaadaadaadaagaagamGatQatRatSatTaoZaquaotatQamGatUatVatWamGatXatYarparparparparparpatZauaauaauaauaauaasLaubaucaudaueaufaufaufaugasLbeQauibeSaukatCaulaulaulaulatCaumaunagIagIagIagIauoagIagIagIagIaupakuauqaurausautautauuauvauwauxautautautauyajPajQanRauzauzauAauBauCauDauEauFauGauHanRaagapCauIauIapCauJataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa +aaaaadaadaadaadaadaadaadaadaadaagamGamGamGamGatcaoZaoZatdateatfatgathauAatiatjatkatlatmatnatoatparpatqatratratratratsasLattatuatvatwatxatxatxatyasLatzatAasOatBatCatCatCatCatCatCagIagIagIaagaagaagaagaagaagaagagIatDatEatFatGatGatGatGatGatHatGatGatGatGatGatGatIatJanRatKaoTaoTatLatMatNatOaoTaoWaslanRaagapCapCapCapCatPataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa +aaaaadaadaadaadaadaadaadaadaagaagamGatQatRatSatTaoZaquaotatQamGatUatVatWamGatXatYarparparparparparpatZauaauaauaauaauaasLaubaucaudaueaufaufaufaugasLbeQauibeSaukatCaulaulaulaulatCaumaunagIagIagIagIauoagIagIagIagIaupakuauqaurausautautauuauvauwauxautautautauyajPajQanRauzauzbEsauBauCauDauEauFauGauHanRaagapCauIauIapCauJataaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaagaagamGauKaoZaoZatTaoZauLaotauMamGatUauNauOamGauPauQbfxarXarXarXarXauSauTauaauUauVauWauXauYauZavaavbavcavdavdavdaveasLaZkavgasOavhatCaulaulaulaulaulaviavjavkavlavmavnavnavoavpavqavravsavtavuagIagIavvavvavvavvavvavvavwavvavvavxajPajQanRanRanRanRavyavzanRanRanRanRanRavAagIapCavBavBapCavCavDaqWaqnaqoarCarBarCarCarCarCarBarCaqYapCaaa aaaaadaadaadaadaadaadaadaadaadaagamGavEavFavGavHbhtavJaotatQamGavKavLavMamGavNavOauaauaauaauaauaauaauaauaavPavQavRavSavTavUavVavWavXavYavYavZawaasLawbavgasOavhatCaulaulaulaulaulaviaviaviawcaviaviawdaviaweatGawfawgawhawiamgagXavvawjbDBawlawmawnawoawpavvawqawrawsawtawuawvawwawxawyawzawAawBawCawDawEawuawFawGawGawHawIawJaqWaqnaqoarCarBarCarCarCarCarBarCaqrapCaaa aaaaadaadaadaadaadaadaadaadaadaagawKawKawKawKawKawKawKawKawKawKawKawKawKawKawLavOauaawMawNawOawPawQawRawSawTawUawVawWauYawXawYawZaxaaxbaxcaxdaxeblMaxgblPasOavhatCaxiaulaulaulatCaxjaxkaxlaxmaxnaxoaxpaxqaxraxsaxtaxuaxvaxwagIagIavvaxxaxyaxzaxzaxAbZmaxCaxDaxEasRawgaxFatGatGaxGatGaxHaxIatGatGawgatGatGaxJaxKaxLaxMaxNaxKaxOaqWaqnaqoarCarBarCarCarCarCarBarCaqratbaaa From df7d0eb05fcb3304780588cad9ce85c676dda153 Mon Sep 17 00:00:00 2001 From: Spades Date: Mon, 19 Jun 2017 22:29:24 -0400 Subject: [PATCH 256/261] .dm file changes first --- .../structures/crates_lockers/closets/secure/security.dm | 4 ++-- code/modules/clothing/suits/armor_vr.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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 fdfa3c482a..8a9875506e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -142,10 +142,10 @@ new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/device/flash(src) new /obj/item/weapon/melee/baton/loaded(src) - new /obj/item/weapon/gun/projectile/lamia(src) + /*new /obj/item/weapon/gun/projectile/lamia(src) new /obj/item/ammo_magazine/m44/rubber(src) new /obj/item/ammo_magazine/m44(src) - new /obj/item/ammo_magazine/m44(src) + new /obj/item/ammo_magazine/m44(src)*/ // NO YOU DO NOT GET A .44 MAGNUM! -Ace new /obj/item/weapon/gun/energy/gun(src) new /obj/item/weapon/cell/device/weapon(src) new /obj/item/weapon/melee/telebaton(src) diff --git a/code/modules/clothing/suits/armor_vr.dm b/code/modules/clothing/suits/armor_vr.dm index 509b58e546..9d44f78a49 100644 --- a/code/modules/clothing/suits/armor_vr.dm +++ b/code/modules/clothing/suits/armor_vr.dm @@ -35,10 +35,10 @@ /obj/item/clothing/suit/storage/vest/hoscoat - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0) /obj/item/clothing/suit/storage/vest/hos - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0) /obj/item/clothing/suit/storage/vest/hoscoat/jensen name = "armored trenchcoat" From fb1dd6dc6ddb45411261af9d56cfd33317476a0c Mon Sep 17 00:00:00 2001 From: Spades Date: Mon, 19 Jun 2017 22:57:36 -0400 Subject: [PATCH 257/261] Map tweak to add a note for HoS --- maps/tether/tether-03-station.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tether/tether-03-station.dmm b/maps/tether/tether-03-station.dmm index 6c42f9bd66..8cecfed6a5 100644 --- a/maps/tether/tether-03-station.dmm +++ b/maps/tether/tether-03-station.dmm @@ -3839,7 +3839,7 @@ "bvQ" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "bvR" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{dir = 2; pixel_x = 10; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) "bvS" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hos,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) -"bvT" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills{pixel_y = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) +"bvT" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills{pixel_y = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/weapon/paper{desc = ""; info = "The Chief of Security at CentCom is debating a new policy. It's not official yet, and probably won't be since it's hard to enforce, but I suggest following it anyway. That policy is, if a security officer claims they need more than two extra magazines (or batteries) to go on normal patrols, fire them. If they cannot subdue a single suspect using all that ammo, they are not competent as Security.
    -Jeremiah Acacius"; name = "note to the Head of Security"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) "bvU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "bvV" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/tiled/white,/area/security/forensics) "bvW" = (/turf/simulated/floor/tiled/white,/area/security/forensics) From 47b2d379a4f247edce381d0dbd3e78352f481fb4 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Tue, 20 Jun 2017 10:21:37 +0100 Subject: [PATCH 258/261] fixes markings, adds hairstyle options to chimera --- .../mob/new_player/sprite_accessories_vr.dm | 44 ++++++++++++++++++ icons/mob/human_races/markings_vr.dmi | Bin 24037 -> 24040 bytes icons/mob/human_races/r_xenochimera.dmi | Bin 3110 -> 8044 bytes 3 files changed, 44 insertions(+) diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 86a4b1dc21..c7bdd67c6a 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -75,6 +75,26 @@ icon_state = "soghun_horns" species_allowed = list("Unathi", "Xenochimera") + una_bighorns + name = "Unathi Big Horns" + icon_state = "unathi_bighorn" + species_allowed = list("Unathi", "Xenochimera") + + una_smallhorns + name = "Unathi Small Horns" + icon_state = "unathi_smallhorn" + species_allowed = list("Unathi", "Xenochimera") + + una_ramhorns + name = "Unathi Ram Horns" + icon_state = "unathi_ramhorn" + species_allowed = list("Unathi", "Xenochimera") + + una_sidefrills + name = "Unathi Side Frills" + icon_state = "unathi_sidefrills" + species_allowed = list("Unathi", "Xenochimera") + una_doublehorns name = "Double Unathi Horns" icon = 'icons/mob/human_face_vr.dmi' @@ -141,6 +161,30 @@ name = "Tajara Messy" icon_state = "hair_messy" species_allowed = list("Tajara", "Xenochimera") + +//Skrell 'hairstyles' - these were requested for a chimera and screw it, if one wants to eat seafood, go nuts + skr_tentacle_veryshort + name = "Skrell Very Short Tentacles" + icon_state = "skrell_hair_veryshort" + species_allowed = list("Tajara", "Xenochimera") + gender = MALE + + skr_tentacle_short + name = "Skrell Short Tentacles" + icon_state = "skrell_hair_short" + species_allowed = list("Tajara", "Xenochimera") + + skr_tentacle_average + name = "Skrell Average Tentacles" + icon_state = "skrell_hair_average" + species_allowed = list("Tajara", "Xenochimera") + + skr_tentacle_verylong + name = "Skrell Long Tentacles" + icon_state = "skrell_hair_verylong" + species_allowed = list("Tajara", "Xenochimera") + gender = FEMALE + // Vulpa stuffs vulp_hair_none diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index 86e4810f8994a741cef4bc45172bdcd2936619ed..414f695db40c44405b4e0cccd1f7ab296a455a15 100644 GIT binary patch literal 24040 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%0Af;N|K68=E7b8-;K@|U`3lFYi1w=0 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 NS1uar=KoF%{uhFK?L7bh literal 24037 zcmce;cU)6lyCxiLD1wNBbWl(MX@c~wARtxgH6TT#E4>Fnnsih^An+&x(rf4t5$OUV zy#}P05L)OVv$oGWXU_S~`_7#6oB4fzK(dqUy;r%{bzOH^JL0j15(OCp84L!ac%-bL z1%sV3hyKo=1E28PV}8P5Bp-cr4BQl~T`gT~U%1&iJHcRHX@!Yh8qIR#4~IMSqsDk2 z)?X`WKS%SCZ<N!w@U6Qh_fe2Ss$opp@6S9dUpsUbvU!-~ zBf;yI+zaV=BO}4=0;<~N7em(vzGa!`Hc^Rj(OlR1Nq=g-M5}3+;Co!eV|Q~Txzhy6 zEQL{Xd7LRVd_S5-r7wm zSa$o8@$~__dzD`cJFlafDqpR8HSfs}yji4^n1{cH*CY;^uUh=*yo_QyIu#(IfJrMR z{MxhT$g{t9+b;jEV!B;koe*C>PkZ%h#HU7c%ema_S|`aT1GOR^RH6^6n}ylkhL$(< zykHbw`~-IIv$)c0mqKZ+=vV&QeiXVO({Q1$;*I#DVs9GP1eT4v`X1iR=4W~8e>}a| zr%s{TZn)e*5lpjD{4g~oY_aBpEN>^}sqbMiFY8&a!(i88j}-3fc%`jPB3>BdkvQUB z#K%yvk)jYsrdx~(?UYx)sf#B2g`MZ=TwieVc$zTv$kW4!fpeRpA;d$as1|8AlE529 zzh3>4l!LqjxzXkJVA*Ze=?z-6t|EEpXX+g;6ORb_fWMy2h<#U#VRzuT@p_xke8O4A zCYk8gv$&+(+ZM%9xt7*@l-7H&`D^hwu5WCB4VcnTo6zyI;PoBDDLNP|@Y$KW;Gp}w zIryJK^%eXVVh<#NnP(z12ora{+kPyelL|crx+9C6H`SA3N%FOsv{qZh(UY8pS@AMO z-xbsj8au2sa{e)C9}!+J;8{F4RE3%w4rXp<)-%TFabJskvgx1O>XLur7>Y?2;$ z)hjTF@3MN+Da-7oW_*5dbjWJpu3IjptY@O9p`*VsFVgwJx4v-D=0Po7quWu262igy zuu4bzBu50hjZ;hw{PazcD~x}B%FuJZp2>yG{AdqHOH&Ijdjq`dwHAChYjZEa*3@&- z-AM6Nb6>dor2BA3@3Z4yDCUirnM>R#q9?iMyR|0s?hk{C*Dqg2V~PujgaGuJQzV9< z`P`CdMDiXpyRaXjxgPg!O~c^q4dko#Xc3YT{v4PGbg|9ZHf!Pu!R2`WWzBl+>RM5k zb_}a5{EFk7sOWtm5s^3H%FfQkU@%oJE!l7IT>d$fo;ssy#p8wt<172)D5ejCG5f`C zj;TAmKkKV6`=x<@!j3l3zwDB^@wrN4(2bnB$L2--(+_UrAv`81Kbvn@^lGD?U z;>aK!Ob&~i$^rG~aAkl0hDs4#W2dwrwXAz?)OSRSTU^Q=saRw)Uyxmq;{z?fDvsFD zB_=iOaws_9Y%It5;Z2~5z&t0blc8ieMNY;Jwt$0 z<{TnTA@l$%@m{6CAZ{(&5?=n~IUW{Bd-)F*ZJWTx1t#J*k-JvKwD}KG%$QNHGpV@g z$W<&YGihQJWmJzQYg$`dU7O5*mc}PnHWqg5jvrPAB<|K(9cjb{W$}<+P-0(9bFfdr zr`bC=yfeSc85KnGb;tWoAeL^u#81Yo6?5R%7({lf1OtYKf=c{4TidSyyf4*3H#lZC z%}AX(;@7Uk>`Wp08l?T1ViZ{}DY4U}jK6;&q(udeuEoc?S5d%PzG{>FSloUj#nQW9 z=OxAWHsl`lS>cr(D|_uoSv)NOulrQqQdk_5J+WzYPxCqSfAzT;{k3=^b-bs-+_j+o(MyPNl zR*CC*69S_yFM_j;qBbil)wG(6wTV4Wls%1THHA5J`msgpE^)Pk|3m_hW7^@SIxu95 z7rRD&4s$iWI=ot7%RZug%KWYug6CRY>*BU>c)JAc3Jj*XHE@2U<u8= zSriE@yXm>3-G?F8yw&2?;^zCWR(Nn_*$iAibZ_7hHr~Ti;9{8Mt?dusHL1?G$`V*~NKyDB`_-U3rd9H*_T!aJg-lIw=AP^zgcsn4Z6TWMarYp~+YYzwk+)UAQY+6HxQ@Xd=uEe(SN4HqKGT_l$ zFefIpSd_|1v7mJntm?64FN7@i2`34db0pUp`y0;{fOVqW&|Tj@Y#kBK&CZr>tAaqF z|Ii}_!=G*Y=Esof!>3C;tgB%PW)=?O?FMF}lNzt^#GsRt6I_FUC(iTe=!j9hUq~gF z$eQMlzE%EEB5O4*{9Q!&%_|qWgt`&5@z231Va6sGyof{ny zxx{RLGC^IyfDDX`rVR^sgvrII#OkfuUW5&fkLNpzQ!5kmZOpql=TC4vIKkhW)lqxs zB92YQ=;&y{0F{)DvoP^?u0WC(N@5HGzk&gk577ggGF!##e;E6r!w9?nkCmP7Lw+{! zTR#|}vYbGY>-s=Xc+W`Og|)N%>-GOXRR-+2;y(k7z)#m=6ixiK(Bs%7i9}g48WM83 zzA=G`r(izxDZe>YnRSwVB);kZ5JAnG(aZ5l?kj3nva60qbe!LPbXWF1g#>^l>MSrP zV2*;E(C;YsHF|w339K=SJZKC*Fs!qq9B>2u`p1@)X=xm%=mI|t0HjOK=5h)tS+2wY z1+#R?h&IzQ-4%-vmG`|3OooTQkR8BOA<#8N!}dxq$duUi00uG7TPeU!KduWWHOVSuf>2^NgXT+_m8rz;4*{ zR$+56@c&Na{fpuM*Q)S8pKzUx4M4d|-MJj!et6PB^q_u!Le zY|0un7Y*)Wm%pf=X?oT zbtlW-Ld7xQRqng7-N(w?s<6|4ZW`3|7r@tq>bo@q3$)29xsH?}B4}_wHo@KVK^FRC z+vn##QCCJkNL4yT_xQI(sX>QHS^=L(Y>S0c(kbdQm54o)-yS5e3HI%fJ zf~q$iY7t})!hp@u%p#*pNXOB>)fcb8-WUK843_IBzxp%N)@ea!0$+x_cv^&%=&CD_ zyFTqf4->o|_`cdga@s0$WU*mnvDayZ-TTc$Fgj%OMzl+9yJq|6%~>iftD6%k3JRU= zI~>2X$n<&?GG=`-7>b5QSExIvW}5D>gy4Ict_QhARHHqWwZZELU}vM3X&jrx=$_b89k6QMfM{3fZdr5|V6?^dzR@j5bl0_a^ z=3n%~e+=}Wg28{s8vljdfQ$liYW}nN{^t`OzXp0F^jlwhww5D$p!E16D+xKL%ilJ> zM0@_sg8;PboF1`mG9cITfK~>W$ak>X4Fb>^m-Q^5Qxz2MaC5grpY&!EUI<FZg!i&r7YUy(9DqtHIF4W(m2z6 zHZwT&_of%;wMc2E$d;6=5ensus5!QHWuZ2U(gg#a-3>1@=M;zU_ljYEOc<#Sh$Lvl zcKNeqI#!G>io-{;^VKtGq4SYGt-3V!b`-$8w=HWQaLCH+G0FKu*@^1l>!Oeno-yZ` z7K?6~41S@>ei8W4P?hl9_Q8Wvg91YZri(NOJ3zv`RbZpK5+?uK3gBU_ua8fPudi?F z=~sa|dU~}_6yacIZe2bPyd`H>O-)T#du>(EY;>1+U@o(Tjko@kWSiV|bK~UgAb|0S z{W)jXOwvJ5&6OVB6{h)?-6frwZ2dXKu2@ zs#;rHKM5-V>f&Q(XXj&}1y{-f{pM;3k;<-Y@t3O(A^i;0kbsYm&-eUs1Zahe%tHr; znAK3HXv-daNOBm{K`_QB7Wh@#)>Zsr2(PEooZo#Wi)Jmbu{g7ohpm02G(121ORSuFGcTvqsm&i{h-c3xh@PMf&T! za*nVW}bf@$L&G$w9-`^k{Peg_ui^*)7x8} zU}9*P`@o>e{^5NE1-_ScpnE32cm+iysAJm(IiKtSB`R8DoahfMOT<0V)A36DoYd_r z7veX)!+b&XBrpLeh_YM&(8>xAxN=yDNxn4V3y28i6|SLmV8l*UZ<^@%zL7ruHGsdH zQr9ADOk-vtsCu*Pq$t+hjm-cfV+l8Qedb;@{!q-?Zwg*Ff}x3& zyMB4=h;Sp_JH+-^BSG@Y*Kd8w?GekTG&o!EsN_ZQByZK5SBhI^H=U01xp+3c>Lufq z)fm2kUwH~dF+^iVlMjDzKQM^c__gco3j;v3VyaX%*^hGd32YxB;h-ZAg&@mm_>(GF ze4KRT&rs1mwntshi2Z-G*g;CT8|^mUtaD$=BQ^VA%!+neR76BYz=0AV7FhWyU|o-A zd9jS6?>SJK1OIQ=lX>R(TuDr@6+q2(9^6<3Ak99Hi4x0d_5s5wR7a1w$@#91YCZBH_ezGVNc)B4vuzWk33_pdfpEOuB5U;ihBPKUyBua1?%I$Qp;+2;H~L< zPF?LO5C?Iv>zBQ%c`NZ5t!AscD=~)B=8qL_UOq1cfD?X|N)i`D7NM%CJtZ(v$`!Bt z`qZnyHM;esM$aMBRF|}OE3USYG{k!@(7b_(1c0kihTaZ_r<)ORe`(|L)bDs&Eq;3IP0ol-3&0N?UF3WZwdGrE>Gi$4%pvQ~>kvoO&?+ zUu5)$W2iF$-sP@-s~~3dF1`g`Tv%HE4;CPqA8dL_S?!(VyaU2I+g2n}nG^JDqKLz6 zHYa(4uepEZ1UcL8`W5nM0p1JaJXuz>SF}Up-(D1%V5F*(Rrv_e^88*DDtC+lt!MET ziCqE#i89;c;Ag3AvU{pPg*f_eSg^%EPc-yU=jEo1t>TYRc%atr&|}lsI?O+axgvr! ztC|oApa?ruDY{B~Ae)H6C4mn{yMy3@sThNI2iB;5`U)}{oa{tp3xtNH?4Cja(3J8v0C4BnnW77} zj|jjBtbnU6>srE`Us)-FztuKY)*(Sl=vTRnH~oK@eahfc#YbdpDA_OOd*PEE>W zXaZ3WB2Y;6)0_gp(~<{qfVboBU+IA*@l{97*Yryke%RBI^!M(1KWnzyie{3Y6uEo% zdUJELhRD&!~yM1|zrrLa5BP?S)c%$6?tFD!v{ZKH^18I#th{`ylCA#NOZIwt>ZB z-9PgVrq{y9B7>TyE2<>xyb6gZQV{d(<7J!7wr$iapk1;C1MWr|-1HdWVLR5yZJ7s0 zb~d=_=e|09C2%+G2AYR#uddW{T#F0=U{gN!R73l}DF7u=&RuRBsj`Sh5JVUsH`@4l zWmQS`u@s z`fu%6SBapfJo-OK$NkF2jtJ4aA1?U~!+i?@h)81&qa8m!Z&@%d$Wl$}Y>j5L#*U#n zf^qvVf5dN~EVg-vdXSP?V46e2!k8VqGyp1w+NKCfN%83F>Xx}KY8aLtTvM77qn0Py z`;&+K0%+2a{U}7?^LVzcwRPKzwrn6E$&<@){YBny?BB{^}`_8PsfeEgx)I5*@!%pQ28HBkT7ri(H2Mqe72XA)9U@H#qEf2q5ODB4kblEN99JeRt|)zxvW*h zyUi5Q4uiNS{zd-ON)7B8eEmX$A>X?JE>DcH7^fORA%e`DoHo}PRfU`J%F2HvFdzk1 zUy+lZrR8O+L0Sx9-4hk1*g)7F2Qn85@40q40|Ww7xwSj)TxY5>m9~a}q;$-3^`}DT z{P|YN)9!f>I&3%v9gT`VWRHS1RXZiHA{ao%Hn(>qFDOIyd#=O>N=IRqbN05YhppBa z6qOD+n``kY%sH!*mtz!b2>}Q}H=0A+cLStKF|lb4w=LPti=1NZsEgy0Oz#vAUaW5E zC;8FMfz8esYu}S|ZgZ=b8?GO7znnZrotXLY9}*c>@;2u*lvtznCNMy$wcZ>5MbGp9 zmIp+zFc3By5;qJ-*6ZZ!d)a>Q$<-^~_$7$fDumBuS+8UnHGEU;8c;=Pa6@#F1c0a( z81h+JOMte+0BGESe7aR-&vk7FVVg-*Wh9u5Eg=?7TuNonE3pqDJ*T*WgM(MHGQ^Fw zriLQgYb9~@+TVy*N`WLMue#{+K#akVmi*j9h0i%TO5ii5W!gjZ-Q_jn*x1-Wl2jiN zg+g74x#moa40lWPER1Ziut>R0K(G*;*$**>+A)E-!MHkHBlqdkr!7*RHF22t3k_3{ zlea^kc}{uffWUtjHifB-58LIjgShWnPkjFmR<3XwUUq-D0jb;2k_WME_9Ye7g)^s&hF)o{5zUWi3(r#WmZnQKYzJAZ z5@}hA9f|a(4FKZ1>~O!QRgC{-uajwBE0PHP68tecgEbi*uFP}I)#}jhjL>`9BXqK+ zd|speYS1LeTxJ#B+x}#J_qi%&bu7F5z4FZjOnz_)Ql)_yj5VtOvEM9^({rksPrMjV zd@9ZuNG4{Ar&&|Pj%BfGg4yM-dJc^(J_qwjZ*!ahW)40KI15r;(1i92aiqP0zOe>y z>tGuGLFB7p`Loec1x57nJU@iHG3v6yfxfn4qLUjNC7C40p^Q!?z6s)nbsmLcrI{wR zZn@b0f$k#j_6pNFZM1 zy&?P$v47dw+yD7s4}-w$iU>Lef(yrlme8a+mnQO=-eDAVdWW(fmJmGL9I=djq@)x! zFf^oc{qn|y#9xOp0Qnpp3*Fq@+AU+HpZQAW>lK#yr}Wd1pR=BAjozBX1?WS7+bc_~ zFLb^O4cl0aYmSbtuJ?+%!AfdzUf!M28dsaCF6*HJLwZUDCze1OcbG+7P#X;PcP&7` zT4~#N++G)0NVelXC2q@F5MGZvqfPDX?ADS$UlSG893J%*b@%X(t(woeYnq|krsEALql0zJ$jYfPzKCj6lUm{ zwJUe~+lNGT5JNrQQDrtt96iLZ&S$4OB}g+OYj<-V z9JxtsbRnK46{@PbD4bzGTttJ$;M!A5`}&?7EQq4HhRqNSQ8M>*Hdf_8hD=~P-EMWr z*!g{5UtfLB@OB}Fj*V@V|LCYbXZ|%{44{k*UdhQpGr*SM*Y6Mp`c7q21(ColjICVx zj;E*xY01E{B-Ogxoow$%i*r7Y$-4^a7M@C6ldAZx!u;`th4jYQ*0$Yb4WxSPmw#n- zOj{58`MQhyWI6qvr1YZ`{eKi~tox1yVUa-3wUnB136Hhp@Ngj^p?2oXeDb>N2Etsq z-bycH-g>3un1s5G3`ilvVEtv_Yg$XYf94q zx1x7EV9StOIB--z}v&dOS|XK<1E`^A{Z`=3%gc1 zX6nE%7>y=7q(fC6=0;k<`gWJQ+H^8a;N(`?-AXIZ>7Z1NT32XZ9R*FjmYHkm&0aRZ zT7kAt*u_>DN}mKa!@a!sY&^Vc$_8wjn-~y?hql0 zn?Z1`pMY@aKfIn8`~`xUk%-Qu742Awv`Ro&0)Vhw>WPC*dy}4+_kdqOC~^7-Bh>8< z*lugR4%hkT-p{{p<9_!;o*Qlt4LldXvJyEOHGRYoNBP0Y(5oMxm)ZI}Rp3e8xRro8 zpImuk2waMug=J{aWU5}ro}~gyzDx}IoJAxhC6%s{(rw_%6p0xDA=OFA)uIcMyNepQ zijyM*5hr-~BQB;d$ejz2Gu&=}%Z|t)Psje$aJ%!leyzi5&niO+2n(>Wfi(vlompFq zkU9s4^F^ev2axyQB~LN?^FJWwxaJevl;kQZgk`ptBO3K}3iCXW0MqB7g$!|*p{Ndq z^b`q|ID-5|3hfbVb#nbF0}vbzD1MNP{F}Ts0eKk=$o~W)Tj6HSy-G$xhI}eut~81L zY%TwyA(FaWsyH1u-9zQ#CwsPE7@ex`FZ3W++biyc6hqnDao{AW!~|q*SrGG|lsxb* zkNTG23IjP%0k!_LjY~@{v}W%h!gYM;yVbz~T!YS{4qJU)-CLS62cIqb(KDfpOsO6s zLq(?C8fUVAS1~4|4xGI(wML97ymE;z;oue1D~?96`jxo4?q{5 zJFt4Y!8>i){sJIbCgL=~35jKE!XbX^c)NGJHW+en>=%2GTDrRPxyTnQJypOP@>ri( z9*Gg{C#eSg@4H+HwGX&@f2hO*Yow$o%j&x(u)MSs2e=eymGoubhlQuX+=KO#m6<8e z0=`umdxXG_*%#CF3uOUnDix;A+N~io)4+Ef;n06*5wNLG5sn6R3B2jt?v>@op^1&- zw?4w=@pNw>)erJgMnD{VzN9{G>*l7@c+lrV_GU*ZQXqgDg!6sqNDD^o_x8cu_lT=8sJACZ z|3-U*|Bm(+NAB-SVh&<#D8Hf$4`hd85yzH=q!{_wMoY0$&BsT(_|@Sq{(#MkAb06r zUX1;9A5o}+B~<1M|F^Y4+8R>D5h-!-Nl!3!lBm)RvX zcIqbk2XpBbZd~O!lJ-A@n>n=z^4rOPg>-y`Ce|_e>@fHCTzt&wZ~@>kELld=kD3aU z$_V^lc?xS+sxHDFOI2q04PBucee7N}L}{;wy;D0*8tCA?+g$D0J>dvQMNL70fq`Kz zrcbvL`y$fX2F|lB@Bzz_fdVcr2)=;H-%1MZekhE9XGy-!DqeiUj3pj+Vhq{Xst|6G zIYYd~Lr98B;xApEHiYK6yQn~LH3j#eaOsPk9mpDu7D3jxPb4vJYp*W`7hO)wMGm;j z4)3!1;*=7h3azVD@dw+BzPEoIL)TP_VWOgn|AR9a^a8@`)9$jx5x;4R+wq?*zS zV+sliHa3^F5rJ{qfNbVk{cn-lq*)KPoP~?kM;;HS;jumb}R!@G*>H$xisU)oPRf8)pR45IX*U5tBAHaauT$98w{&rHnM1p%Z9sO zaMJ>v(nxJPa!UxBJzXfxe|I;nFo@HOlQnwP72CScOoW`N z8m*zoIY-CO^i#{;joq)5&}{p62ep5N-N0%^-6)`2d^C6Lm+Oi4V1~W1^`_~sSF=9q zuqpJz?K%P&{-rtU_@#DyOiE`SKCg=qXS)~Fu!v)ABRoJ zK9updS=aSodPnv?h2MQLY;s$Vhk)~-(9l|~LRO6;Chq+y8d-SIQE1TveDGz~=!P8NIXPHt1U#R2N9zsxmDrIRQ1s4jNu-zAk0bLz zm;10O2OAqyx9U8Mm<>Ac?O3W%P>?y^XueQvb7(BNs#R3Ga)&DZQM0}s!DA@vkSKdH zD?4|%TD<2*y!!R=#{U9IZpIIGW-s$E!7M%W(J2$RDVZg#j<~9F9q31#Kqc!f#5xXF zRY(|^{-k#8t3pp$yxNWSNBs22A)O|U@q>1~(j9c>a3Ia>t5u90yxgKR8I<)#v{*b8 z&QU!1g`hIVgZ#t6ODVZ)JN^ zMSIH$xDjFVx6IXPcA8;`eDCfnP|)GiiMvZW)LShx4b%*^q#gg~4b;aKCwc!Y;-#!t zSj1sk9$~s{uOKuu^g^*P@KKtqakgfPpz9Fqwq+yM`^#OxUq=Q)$Q;>nyS~VyRRbkD+8gqtXYAtB*B>w21=fw6Lt!5^<Y@@wz$Ggn)`b3edWwc87>kYPBN(hS_ z!`@@}oHOt_sWR>Rh{2Z0O;-PbK`};3?qB+Q z$;Gm_-d}I@R+5TT`T>bCI)f2)iPc+Eq4iWaUtVFe($rf_Z}c;h9#G%Z$ycKTE#};V z4+ZG#gfZgwLibzO#hzP;;o;$=7Gna=0G7J)b-smJZKX%V-R2ljP7HI@ zz3A&cAmyOuD7VJ$^fgi!=#}SolUkK3RB%EgLa7GN@o56Q-KYKJ!Q$9yDe5t*4 zq=P1y#_mx1y&HZWX@?m8F*&qt1OFk0jPKK?Ct|?+3XkpyB%YnF(UeHRPLL?}l1krv zum>7#bab+xZ6ZlbnX`x92~Ac@rQR<8awy4NQ9R@O|C$N;^&7h0k#Uq!#%B+!4X zK2M61lK4oBWs$y<;kOl$CgHAfiAn4_9*=jK{z@Y5zVglw=y#W$r6*M47^1A#VqXvr z(JMu&W{Q|eRLfyVn>vsXcAR`;3#T^Sp2MFmG3~cJ+AH!~nBVH+PkMNf)@0+*n7HS7 z(7PuaS9O9Lr#*J+`*t=V0Qp!3tLf3uZ?&?zy6r@ShQxK@$A=xhX8L>2+E1exqwjE7mDE7W>?>hL?u{BNHb&Kp9P>jmE zMCja1rP$6znLTkTaoH<-HNE~CF)Y$4Qp~l_XHG$(k|K4DX*aMej9V(UmEZfUG<6{P zC(Odgo>mNDtMPWcU*2QUZbxXuH2a5jVQJq5Z22LnOj)`2 z0SMIHmKv1Ci$7LZSMSg^U2&ESV-M&WZ~CF=bfNOFr!VmC!SJ)S*+FdI~sh*JX2H3-vb(6 zkZKUXPB$D+|JtdI+`J^KMmdgf+8RC4L`vKOli9w1y;p5`l$?U%5znj;Rt6GlZ)_w@1OjROyYD7o;Pgv0v-xft1($H)D@ zElUliSbev#ht7048pwn$zB-4o{zLG)DDYNI11a&|^$1f$4Bc#HbZ(zIa5nZ`L_2=q zj^!vWwyS+v!(&t}ca7KNdSAm4#69`IlPpTsy#bkfTKzQ@b>bUC8sKN%f_9OB-z4C_ zNZ!?L$U708@?y`i-fX@_N#FNe=Mt+7kF3d7+(!+tnDMt*@5dh!D5ty!4#7@?sOB(A zRUwA=tbE>IKsaPKmMz60>#PGohHwlnpfe@{=; zEE=$6n(~^ZprTJLmcF-Z2sInAU4`X~VJlJvzV#mPkG z+B>2*4=2A-1t-oUo9xNkXu)~LdM)uuVkK$G1I&G|_&;&3v-Mw9$KUm%8h;-Z-U?>B zScK#cyTlrQcDN^LPxfvbTz1{6Yf<+{y~&+thi``&DUcP!3QW~1`l;0Bx;E{EZuK8l zuz6zN8b#l+fu9LuwIkeJr%_5`^o>y}lvUWfEk9zD;h*T|g3c4wCLD~J67p`fwXxt| z9Pe+=p(SMBwD+8N?lf1Ez)FnWaE+yLWqVw!dHF@ZhSqiUP2X=WFG5k*5rTl6_SvM` z+S&`AvbFP+eGOXr`bjURu;lP%ID&vL?N2C{wKMg_qBMkEN$QR;_b4sS!oE6!_3kqN zUcVFCDPjVK^Vh(@oDpxX=gmZ|ai_BKKbp}iicF5x-wNkioGp(s%)9Y}4^p~Pii@N# zXk94a|Et22^Lf92f={ES3ID)uPMOPm=Um&&(nhc+3rerZBsagtD%In}v@&f40RoPH zndjQ@Lp!Y4*k~slvjg-HmY(N*e(#SU6IYy6@h^4W92yd$V=iYe)D#q`f#hXH$X%L7 zow{6<*km@D|FUL_zHC0a)K^?=ln8BRd;Ak@a*~~~!H1v5zdqiD077&P)509A;x`0$M|A=N~CrmZ zAMLiaeROHvp{}aGv#TSmGR0${cJ*|1-xn~{Vn1Q?4!kXh+ShJ?cyYDkFYP!W6g!GL zWTxF9d;o*5ks*V1cux;0Rxl5OQ-m)MtX8Bzv#H;36_bE!Vngx0<>k~N3raBiR*tADE=CpEpk-$d?(rJ|w4f*6Mz!u7g19$X)9aGYiZKxWEXqi8 z1F{oUu=+*y8RE3z9<(C38=5=0n@wpo>B-%-V;l-aB=3S`lscWX)IiTr-De*l`iz%7%s? z%HL-{c4U^>NE81znEl+UwZB%3j*3mkno zJ{UU~Zin6pye?#@?N+9Y`LN)82i#-G7uUcM%j7q))%mIf#MOLI>+Y)!dsF3vY3R<0 z5wv+zDp_ABZmFjetJ}wt?C7eDgV~j0#3cNS%X|-f z9SN?dSJ`0vDT2HQX2qK8JA>`hHIr25z$OPKHPeeI!cQH)<7@p#l`k+cqo8c-o2wk4pT0%Dn< zVkZ}bZw;EQAmNjyDer@yUR0QbTJW~(8-)iiqPPg*RO-sCF1^%%A2Rk(A9|AOF5&+( z9hCdLeT$X@8<2)}U7jv(?fpK?sf!(u_%cQ9r9Q;kDlH^*6D;Ik!^0er*Z7nhi`LaZ zDKZ;smnQiRDCvBzYPD8d(%9H&<>;|>*wnj<_cd+o$~bYw{QMag6&2N9X5FQrI9ast zJCWBoQOaO=XbjD+*DtEB9m6EfHr#=#tP=PDwud@8&UdcQ<4|}_PgZ7emz(tUX>i5V zZr-7+B={W~8XBO;t*jJ!(xtf>36xf--kyEKIJT=wO$;lqO zP_SwWI;&->`@zpCxgVNd3Zz>5NBJ-Xg#=G{!0xEcmB~8IlkudXH{tE2l(CUuW0!M% z)1us|_7sMYjbB`zIrh811^YUB=9|kJtEKhPwh`e4`~9>`W>Awlo^-6NtXv3|84cx+ zk33TX3JW5_{}dvyS<+VF06u6nsVdAl6Q7}gQRy!bMokJy)|L>B{G!5>oM@jK?gO9x z=q~G)zWGpz$z&s0DEc#J35+6<;h2h^F|bqkx+Vh%C?E=57Vp*{v`~)YgoO0F*1*A~U}O^WW)Hs-%8PF?buoa4&T@iQ3=X z3^021#dahpO zWM+Aj14iKV`s=H)Y**-g>zg5U4gl5JQ@Z~X3wi1rB@OU(aq`yv0`OYGN;?Ct^Ut?_ z{XfdT{^#8uhCL(>|5%f#(Fu!D!^^jar_j;X6fileYLKnnDs^0O&xClKL02pt_#zCbb?dv!)%Gtyo#H8+C9hRdE+`=pA&1mlUvy?^h4a_f4U@edeZTua1q2 z>_nj!S42^J9pEwr-3!<9LE}C9i~b^#P+x=+>*AU78LyLapCL}`P@6Nt`}ZI@l49`rBsjmh2~jl1A5;#Dx)tN zeLtDcs4WD0Uq5|%u)59PpS6eXSquc3QA3-aG^+S*0@`i)S6cQ%m^^$!>^${1>`BPu z;M57JecEqj!-m1NM>;h-zf|3Y{hxqP$D=Y9T}xl0NY^r6e)1siL7OIbz*CU;5N9FN z*;kRqukGI3cjF=M;Bjv?WlCMQ3{`PN0H(aFNHQ}IJOnIcCWokJA$JdN3F;|97mBu@ z(Hdu>r;qRTUw1Vc!{Ttmzk1x3j7~zTPe4=oJ{%%IF`YPXY#PgV@VJq{iI-F||7zXc z;0Aowvwxh^0S9`L_O}3aa;5$%yy~3A=`Fiy_tnai_pL2(em%f`apb9>zzaC*fGP{O z3r{((EM5<2_?`a{y+-nv!R4=UCR`VDIy{Y1uFkGE7A8T{s-;BV zFB>=}q)sJ6%K(!K){fKmTHn!F1y#S&zINT~ht8{Jwjj6)z!R@R5CzpbTu}iLQPS?C zLfxf5?>Pa(0ae9wnXxhnHi`&~BZ+OWGz(&74mn3-KCL`vjXnk22u(XRqB&1Hq$BH# zB;x}iZ7pqWb~yRdW&F4>Wfi_y=+2!xQ0tUgxb2)?P60lSfSbMnE1DFyWbzX4YwhKsS zoUkoKui>_39utuT!UM~ERWh%K90Sm1&wA5&Gcz+?Hm2|McFh0?dBnG;bV zhdBs+eSKA6JJ_7%0p{l#K%@UposMiZu72@R%4Or_>R|0KGdg=6yx4r{i&fLIS1V=( z!alU%bn~FT8FFw{9<-PS8%4!%uaaAD1^VbqoZ?VK`9`3E^EVZ|XPiCp9pxz%!<+=TbP^vgM zt&-sh6F?Cu`VnM-FUX`w*QmLb*&q126Z)gwf2F!eSbHq}ypj9m%Vl?}6Cf_uitLTD z$*$KJAVx8a%fsF+vo8&W-Nw(}cP9R79)eJKp#LukzEBOv%*sl=N(yO9pu+cq=1V~C zf?ZndS&FQ=;D1THTaPW6;~<^3cn-yvU6cV#x7biC^R9$afSV6k7WO@9;`GhHIOExs z5@Jan-&jjDc6wRQHyCQyFQhK+GN;^%HWhYD6|m`H(vW1c0VD?1j6n|^;RrecTbZKY za%id?y61VMI;3*Dd+;NQ3lUD{raOEr-zClxSMeRuGVXKA(e=4GA0wmAe#{^qFUAb- zY-bStzMYoSrO3^Em5a*mIUP8WD;WWb^&FG9Np5Sc-t?@KT!o$*0*PU4QNUp0{pd6n z`S@i%4PNC(i8R^Y)If}pTJ z+qRQ^s~T^E*tHq6zrUH6o4Yx&)C@Jghv7)m5Xx3WD>>bDDyY7n5PQ7|Y}flYZGMA> z%|*cq=U4i@m83LB2@Xn_LLtFeWU`1XG`;6(48ouZfMJzn825rHWyCOgSSN0bb;9uZ zk)J<7+MvN)+S4ZoWz~@Y0*uE8+ix-aU{!XtH4T8Lo2;;NYS}0MNVugcMiG(b^{-So zVa-tV9KB1tk&PWeBe|z^&jJWArzk%z&!{57M);<#{NfUrK}bB$eX}o~sJ^IW^&9m( zPvq+*xa_`nLqKtt=RrSWoe{8gd^}YzlQEUuv4|N-e1=I{BI?5OJC6a&JIZax4Pzd8X;aD(LPj| z8wqOz|3Uo`)q21gn3X*9YW<7DCogNCN#X-#l*ws7@iMByZXuaub=wUdSmZ zKr_%h?*bkyXLW44yv9T1F|cf#k(odCF5X*{*)0xi=h*Vt=4K&%^ z)5T;KPJ;5Xzn=(W?DuSkqXRqrzmdAr?hom|KAzBOjty@QI(xB#bnXwG8CR-(>ie=Q z7w3b-0ArssBjU{#Q*#gn>w8W6LVl_(^ODft}N|!(kH1Z`69$ z+UW@WXYqR{A{c9>rNpA307{-w{E?8>14_c#OwMJdRsB@IdexpULfrRs&680x?stxS_x~>GN z>4DWN?oUY3As1;^oFpEh3hlUPfO83ohUyuYh`;5)TA|b;{R+ky>zFSxNe;`3IoShS z%3)q{wfpr0_MEyQC2JQyp5y=9ooRiz50kp#{pu*Bcg9_JOZ)}He@E#WNuPT-8N!_~ zNn!ElfnL-%-S=`6RDZryvAe5NR>PPAg){&9AH`f}R8w7-z7#=t>4Kn?AYcVWigXAf zf>K3@pa>x#qDHzQAP^#ms5D)EV1(hQnydWu)Kg@AzHGnL6iw2Gi{dc#D zBXqB?1IKDlHe0)Y0kS$3&aQInXTiWz*fbVlNUj`y(JXZ`x!weRt} zakLf&2m9M6PoP4Hte#*-}S9iY)x)H#XJt} z5iss6Jw^lF6NYJ{z4e_tdAXI8zIGg=`2!zeknX&D=;KEL30B($qs=I(l@KZo} zkNQpFX5eQpgZtZbZyV{>bX@{4WhOF*Wq1)?*yYBqSqa}CHU_Azn!xG;j@{E3e$g8j zMK-=~TLry?1B8bj{}ihkJZ&?#un=5(-Q)b^KD9ZwFzi6z9jb%5>2Bb^U5uAjH-Wu3 zzp^y+juV$H$+mxe%s>IiaUzTVCfa!i$I$*la{~6@%iC8;ca9#_v~>&@2Jh5jXd>)i6r zzKz9R9JaqE=bXjAg4|`OF)Ox1C%rh&h`EQ9>dv3C?B@gnGqhM9KUMhx5-@cMs3w z5IxK-d$=}taa_krG1B{CB0GdMD8az!b3trJpKHRDHz{gTP>q^wu105E-ND= zJ~J~jsfVOO+X9~cb>?l560~KePwC&M>qCr@7-HuL&!*L@$i^+pg#_VdI$$&6M;st%Z5CaoDai>Rn9DzXi zIW&|IzOh8HhchKNmWJb7TU*o8_ofUgVk7@B3l{tP`;*31l_r*k>%s@2S7PgcT$=bE zNl5IT2A}MQ$l=wKeeNT;yc33o3l+-etif1kSxiPCAU}l8<)xbqF!i={GBGAKea8J}gEGKmx+zAf!#pbrDuue;X^a1 zI`LthqVhWFbX~x>Sp-N8>8EoA$c2337ddp{BWo)bdD{FljJ*b@E)lSo=KlE9DhJ-a zZJ?v0Q(-JHHs5q3{OZ*MRn^tX6RB@Q{h5!TbnN3rb3RcX@VBHF>f#IphSt~;V;@J-fNTD4WYY$Ezk^>R)I{f z0xkcajn{ak&xbc12cSfa6^mjRj_JSvA& z&g!M7rw>S{-P=zNxv?Av!^wo~iagxL2D5S|sZK4HWY7wS))rinm5!K5Tmcwqf)nNfZwrIv3a2{9AfNY0RMB)=(= zEn3`~nO4n?g3?J;1|B1b>?0wQpT8_$fqG=A$eO-NkXG7mktlyD`} zE;ITE7{5OyBH|dY+zYm~7D<$x2>Wr^`tRrJgSvi0_wUQx zo+3Fi2%?1635LF%4FQJ8=1n<5PZ=P7lW{uQ94ZrhuY{Vah?0;517Z0fkCh&MYbhUn zUiNFEtnNDfJT9txU)j$KpHn8?F1y~CG0=Ej)e@{Z@5SE~5AmIFHtLWrvg6DhtzQed zr1~IP>8=!yyT;x8^_G)2old@z3w;=Q#zG$7f@rW~ihaVnYvY7vY@%;fsAsJ?Zdx5= z*>TO)Jd`T%gw!^Qey#&Ljb)WW-sM>9Y}xfdSWjG#ROyf|K5wVTxnRP}^TlPatRHdi zhA6EOs^oU`t8;{o;BeiD96MB{oM7p{jAq?KM@JV0Kjqwb16Zjp#xm3PC1e`Jj%rf z;9aEkKATN$nFLTh1k!W_iAi5<080HoYrGWW(bkI-gJ)BN80uU(s8aA zU05EHB=q~_s|o3r5KmI~6O2!uk-$-Karrv+TH}itCkL&O;e4u&MXQ&vj45n45CyxC z?v5pO0cC=jX2cN>Q)gRpu|^B-FQg@UzRfmek>#lvapJz9jA^n{{U6Pd1TCrKIeD)~ zJ9Hkh3XZq0m0uSeFVc<8IJJFQ2V4aOm^!LHvYo32B~;pDQ1=W|6}j-Gmj|{_qxO6% z_tyq>=HAIwCgVfh){do2X2>Lb`_NNw-sgE9|PSNYDST5Kd7;WS-m4BW@qfGD zvnL@jvl{G4P^5G(Dh;bAYAv-e{;=7-r&XFFRu(Qme7se7ZCkZuvm3?2G90$Hbu&+R zn0j@GkB*z> znns50R$0qU61`XAl^p~ov9^LUFVLv&!zD=W><%INIS~T_KypeatSIY2_ekA-<;xg5ML5bK&8OBsRLmAvSUkEPNcGh}Be-4b4|0ff7SFaK)HB?UkDHn zM=6!uy}m-73`Cq6-d(_>J6#)D z8BbitE0EsJQA1U3(Y(Z$+etTwX@!=yGY5pRs@StrX8R-T70+Aa4{${0`FNt=bK s21cu;cB{y^e^9`EsWcZI&mF`+Y`eD>dM=RC7zBQ2PurQ7nt4S33tzRN3IG5A diff --git a/icons/mob/human_races/r_xenochimera.dmi b/icons/mob/human_races/r_xenochimera.dmi index 32f7874a04bda17290ab6ed91eb747752ec719a4..0707a77007fea0c078c864672fc8ab3f4a9a72db 100644 GIT binary patch literal 8044 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 delta 3095 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 MS>VkpO>e~f2dZV<8vp Date: Tue, 20 Jun 2017 10:23:52 +0100 Subject: [PATCH 259/261] forgot some --- .../mob/new_player/sprite_accessories_vr.dm | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index c7bdd67c6a..2cc7ff46ab 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -190,105 +190,105 @@ vulp_hair_none name = "None" icon_state = "bald" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_kajam name = "Kajam" icon = 'icons/mob/human_face_vr.dmi' icon_state = "kajam" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_keid name = "Keid" icon = 'icons/mob/human_face_vr.dmi' icon_state = "keid" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_adhara name = "Adhara" icon = 'icons/mob/human_face_vr.dmi' icon_state = "adhara" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_kleeia name = "Kleeia" icon = 'icons/mob/human_face_vr.dmi' icon_state = "kleeia" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_mizar name = "Mizar" icon = 'icons/mob/human_face_vr.dmi' icon_state = "mizar" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_apollo name = "Apollo" icon = 'icons/mob/human_face_vr.dmi' icon_state = "apollo" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_belle name = "Belle" icon = 'icons/mob/human_face_vr.dmi' icon_state = "belle" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_bun name = "Bun" icon = 'icons/mob/human_face_vr.dmi' icon_state = "bun" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_jagged name = "Jagged" icon = 'icons/mob/human_face_vr.dmi' icon_state = "jagged" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_curl name = "Curl" icon = 'icons/mob/human_face_vr.dmi' icon_state = "curl" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_hawk name = "Hawk" icon = 'icons/mob/human_face_vr.dmi' icon_state = "hawk" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_anita name = "Anita" icon = 'icons/mob/human_face_vr.dmi' icon_state = "anita" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_short name = "Short" icon = 'icons/mob/human_face_vr.dmi' icon_state = "short" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER vulp_hair_spike name = "Spike" icon = 'icons/mob/human_face_vr.dmi' icon_state = "spike" - species_allowed = list("Vulpkanin") + species_allowed = list("Vulpkanin", "Xenochimera") gender = NEUTER /datum/sprite_accessory/facial_hair From a8e2cd52140fbf07e03cb64731ba45337f5d5266 Mon Sep 17 00:00:00 2001 From: Cyantime Date: Fri, 23 Jun 2017 11:47:01 -0400 Subject: [PATCH 260/261] Enables %pred and %prey macros in full belly examine text --- code/modules/vore/eating/belly_vr.dm | 2 ++ code/modules/vore/eating/vorepanel_vr.dm | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm index 09d81144ad..b62229bf6a 100644 --- a/code/modules/vore/eating/belly_vr.dm +++ b/code/modules/vore/eating/belly_vr.dm @@ -183,6 +183,8 @@ var/raw_message = pick(examine_messages) formatted_message = replacetext(raw_message,"%belly",lowertext(name)) + formatted_message = replacetext(formatted_message,"%pred",owner) + formatted_message = replacetext(formatted_message,"%prey",english_list(internal_contents)) return("[formatted_message]
    ") diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 911f956781..b73e021eb3 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -522,7 +522,7 @@ selected.set_messages(new_message,"smi") if("Examine Message (when full)") - var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging'). Do not use %pred or %prey in this type."+help,"Examine Message (when full)",selected.get_messages("em")) as message + var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",selected.get_messages("em")) as message if(new_message) selected.set_messages(new_message,"em") From ad0c5be5f6ccdbfbb4191ef8ebc8091a8f40e1bb Mon Sep 17 00:00:00 2001 From: Cyantime Date: Sat, 24 Jun 2017 23:20:33 -0400 Subject: [PATCH 261/261] fixes "aglae" --- .../components/binary_devices/algae_generator_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index cd0f59a660..5e6dcb95cb 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -101,7 +101,7 @@ if(inoperable() || !anchored) icon_state = "algae-off" else if(recent_moles_transferred >= moles_per_tick) - icon_state = "aglae-full" + icon_state = "algae-full" else if(recent_moles_transferred > 0) icon_state = "algae-full" else

    From 746571f53f1135a0878e2e0f0c5d371bfd3fcfee Mon Sep 17 00:00:00 2001 From: Leshana Date: Thu, 25 May 2017 15:44:47 -0400 Subject: [PATCH 102/261] Adds bedsheets to the list of washable items. Fixes https://github.com/VOREStation/VOREStation/issues/1456 --- code/game/machinery/washing_machine.dm | 2 +- html/changelogs/Leshana-smol-fixes.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Leshana-smol-fixes.yml diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index cf96260358..f245682861 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -115,7 +115,7 @@ user << "You can't fit \the [W] inside." return - else if(istype(W, /obj/item/clothing)) + else if(istype(W, /obj/item/clothing) || istype(W, /obj/item/weapon/bedsheet)) if(washing.len < 5) if(state in list(1, 3)) user.drop_item() diff --git a/html/changelogs/Leshana-smol-fixes.yml b/html/changelogs/Leshana-smol-fixes.yml new file mode 100644 index 0000000000..9d972dec1a --- /dev/null +++ b/html/changelogs/Leshana-smol-fixes.yml @@ -0,0 +1,4 @@ +author: Leshana +delete-after: True +changes: + - bugfix: "Bedsheets can be put into washing machines again." From d438cba4062880b242ba6aaafbafc1139a80fb00 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 15:04:29 -0400 Subject: [PATCH 103/261] Fix do_after exploits in Water-Coolers * Fixes https://github.com/VOREStation/VOREStation/issues/561 * Prevents multi-clicking from doing the construction steps multiple times (spawning multiple jugs, or emptying contents of jug multiplie times). * Prevents after-attack from transferring reagent from jug to cooler twice when putting a jug on. --- code/modules/reagents/reagent_dispenser.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 49d251d311..e84a963446 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -227,7 +227,7 @@ src.add_fingerprint(user) if(bottle) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20)) + if(do_after(user, 20) && bottle) user << "You unfasten the jug." var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) for(var/datum/reagent/R in reagents.reagent_list) @@ -262,7 +262,7 @@ if(!bottle && !cupholder) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You start taking the water-cooler apart." - if(do_after(user, 20)) + if(do_after(user, 20) && !bottle && !cupholder) user << "You take the water-cooler apart." new /obj/item/stack/material/plastic( src.loc, 4 ) qdel(src) @@ -274,7 +274,7 @@ if(anchored) var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I user << "You start to screw the bottle onto the water-cooler." - if(do_after(user, 20)) + if(do_after(user, 20) && !bottle && anchored) bottle = 1 update_icon() user << "You screw the bottle onto the water-cooler!" @@ -286,7 +286,7 @@ user << "You need to wrench down the cooler first." else user << "There is already a bottle there!" - return + return 1 if(istype(I, /obj/item/stack/material/plastic)) if(!cupholder) @@ -295,7 +295,7 @@ src.add_fingerprint(user) user << "You start to attach a cup dispenser onto the water-cooler." playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20)) + if(do_after(user, 20) && !cupholder && anchored) if (P.use(1)) user << "You attach a cup dispenser onto the water-cooler." cupholder = 1 From ef7b19926aec4952f74a090af058ac987dabe43f Mon Sep 17 00:00:00 2001 From: Anewbe Date: Mon, 5 Jun 2017 15:08:28 -0500 Subject: [PATCH 104/261] Fixes an examine runtime --- code/modules/mob/living/carbon/human/examine.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index cb8c2ac767..615a3ecf53 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -21,7 +21,7 @@ var/cloaked = 0 // 0 for normal, 1 for cloaked close - if(mind.changeling && mind.changeling.cloaked && !istype(user, /mob/observer)) + if(mind && mind.changeling && mind.changeling.cloaked && !istype(user, /mob/observer)) var/distance = get_dist(user, src) if(distance > 2) src.loc.examine(user) @@ -472,7 +472,7 @@ /mob/living/carbon/human/get_description_fluff() - if(mind.changeling && mind.changeling.cloaked) + if(mind && mind.changeling && mind.changeling.cloaked) return "" else return ..() From 914a291c1bc6c159d95a47938a6681c2bad681d3 Mon Sep 17 00:00:00 2001 From: Woodratt Date: Mon, 5 Jun 2017 17:03:58 -0700 Subject: [PATCH 105/261] WR Lighting changes and other tweaks - Adjusts the radius of lights - Roofs to shuttles - Allows placement of full windows in DM --- code/game/objects/structures/window.dm | 5 +++++ code/game/turfs/unsimulated/floor.dm | 3 +++ code/modules/power/lighting.dm | 6 +++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 809dd008a4..4c36a7ac15 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -472,6 +472,11 @@ if (constructed) state = 0 +/obj/structure/window/reinforced/full + dir = 5 + icon_state = "fwindow" + maxhealth = 60 + /obj/structure/window/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index b2e7836334..bd4fdca814 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -7,3 +7,6 @@ name = "mask" icon = 'icons/turf/walls.dmi' icon_state = "rockvault" + +/turf/unsimulated/floor/shuttle_ceiling + icon_state = "reinforced" \ No newline at end of file diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 09921cf58b..1f4f8ec756 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -162,7 +162,7 @@ active_power_usage = 20 power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list var/on = 0 // 1 if on, 0 if off - var/brightness_range = 10 // luminosity when on, also used in power calculation + var/brightness_range = 6 // luminosity when on, also used in power calculation var/brightness_power = 3 var/brightness_color = null var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN @@ -180,7 +180,7 @@ icon_state = "bulb1" base_state = "bulb" fitting = "bulb" - brightness_range = 6 + brightness_range = 4 brightness_power = 2 brightness_color = "#FFF4E5" desc = "A small lighting fixture." @@ -199,7 +199,7 @@ var/lamp_shade = 1 /obj/machinery/light/small/emergency - brightness_range = 6 + brightness_range = 4 brightness_power = 2 brightness_color = "#da0205" From ebe5cc916de1a38bbcb1259fd0699f771211ad99 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sun, 2 Apr 2017 17:41:21 +0200 Subject: [PATCH 106/261] Port of @PsiOmegaDelta's Baystation12/Baystation12#16820 Ports tg's garbage collector subsystem and Destroy() returning qdel hints. --- code/ATMOSPHERICS/pipes.dm | 28 +- code/__defines/qdel.dm | 17 + code/_helpers/mobs.dm | 2 +- .../ProcessScheduler/core/process.dm | 2 +- code/controllers/Processes/garbage.dm | 254 ------------- code/controllers/Processes/machinery.dm | 6 +- code/controllers/Processes/mob.dm | 2 +- code/controllers/Processes/nanoui.dm | 2 +- code/controllers/Processes/obj.dm | 2 +- code/controllers/Processes/scheduler.dm | 4 +- code/controllers/failsafe.dm | 4 +- code/controllers/master.dm | 2 +- code/controllers/master_controller.dm | 6 +- code/controllers/subsystems/garbage.dm | 354 ++++++++++++++++++ code/datums/helper_datums/global_iterator.dm | 1 + code/datums/repositories/decls.dm | 2 +- code/datums/weakref.dm | 6 +- code/game/atoms_movable.dm | 12 +- .../endgame/supermatter_cascade/universe.dm | 1 - code/game/machinery/CableLayer.dm | 2 +- .../atmoalter/portable_atmospherics.dm | 11 +- code/game/machinery/doors/door.dm | 3 +- code/game/machinery/floor_light.dm | 2 +- code/game/machinery/pipe/construction.dm | 18 +- code/game/mecha/mecha.dm | 16 +- .../objects/items/devices/transfer_valve.dm | 2 +- .../objects/items/weapons/flamethrower.dm | 13 +- .../weapons/material/material_weapons.dm | 2 +- code/game/objects/structures.dm | 2 +- code/game/objects/structures/lattice.dm | 2 +- code/game/turfs/turf.dm | 1 + code/modules/admin/view_variables/helpers.dm | 7 - code/modules/assembly/signaler.dm | 2 +- code/modules/client/client defines.dm | 4 + code/modules/client/client procs.dm | 3 + .../hydroponics/spreading/spreading_growth.dm | 2 +- code/modules/lighting/lighting_overlay.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- .../living/silicon/robot/drone/drone_items.dm | 2 +- code/modules/mob/mob.dm | 1 + code/modules/mob/mob_grab.dm | 12 +- code/modules/organs/internal/brain.dm | 6 +- code/modules/reagents/Chemistry-Holder.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 2 +- code/modules/reagents/Chemistry-Reagents.dm | 2 +- .../reagent_containers/food/snacks.dm | 4 +- code/modules/shieldgen/emergency_shield.dm | 6 +- code/modules/tables/tables.dm | 2 +- polaris.dme | 3 +- 49 files changed, 479 insertions(+), 366 deletions(-) create mode 100644 code/__defines/qdel.dm delete mode 100644 code/controllers/Processes/garbage.dm create mode 100644 code/controllers/subsystems/garbage.dm diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 105aaa8c8b..c23fc16555 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -63,11 +63,11 @@ return parent.return_network(reference) /obj/machinery/atmospherics/pipe/Destroy() - qdel(parent) + qdel_null(parent) if(air_temporary) loc.assume_air(air_temporary) - ..() + . = ..() /obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) @@ -227,10 +227,12 @@ /obj/machinery/atmospherics/pipe/simple/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/simple/pipeline_expansion() return list(node1, node2) @@ -461,12 +463,15 @@ /obj/machinery/atmospherics/pipe/manifold/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node2 = null if(node3) node3.disconnect(src) + node3 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/manifold/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) @@ -705,14 +710,18 @@ /obj/machinery/atmospherics/pipe/manifold4w/Destroy() if(node1) node1.disconnect(src) + node1 = null if(node2) node2.disconnect(src) + node2 = null if(node3) node3.disconnect(src) + node3 = null if(node4) node4.disconnect(src) + node4 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/manifold4w/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) @@ -967,8 +976,9 @@ /obj/machinery/atmospherics/pipe/cap/Destroy() if(node) node.disconnect(src) + node = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/cap/disconnect(obj/machinery/atmospherics/reference) if(reference == node) @@ -1081,8 +1091,9 @@ /obj/machinery/atmospherics/pipe/tank/Destroy() if(node1) node1.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/tank/pipeline_expansion() return list(node1) @@ -1251,8 +1262,9 @@ /obj/machinery/atmospherics/pipe/vent/Destroy() if(node1) node1.disconnect(src) + node1 = null - ..() + . = ..() /obj/machinery/atmospherics/pipe/vent/pipeline_expansion() return list(node1) diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm new file mode 100644 index 0000000000..168a6adf0c --- /dev/null +++ b/code/__defines/qdel.dm @@ -0,0 +1,17 @@ +//defines that give qdel hints. these can be given as a return in destory() or by calling + +#define QDEL_HINT_QUEUE 0 //qdel should queue the object for deletion. +#define QDEL_HINT_LETMELIVE 1 //qdel should let the object live after calling destory. +#define QDEL_HINT_IWILLGC 2 //functionally the same as the above. qdel should assume the object will gc on its own, and not check it. +#define QDEL_HINT_HARDDEL 3 //qdel should assume this object won't gc, and queue a hard delete using a hard reference. +#define QDEL_HINT_HARDDEL_NOW 4 //qdel should assume this object won't gc, and hard del it post haste. +#define QDEL_HINT_FINDREFERENCE 5 //functionally identical to QDEL_HINT_QUEUE if TESTING is not enabled in _compiler_options.dm. + //if TESTING is enabled, qdel will call this object's find_references() verb. +//defines for the gc_destroyed var + +#define GC_QUEUED_FOR_QUEUING -1 +#define GC_QUEUED_FOR_HARD_DEL -2 +#define GC_CURRENTLY_BEING_QDELETED -3 + +#define QDELETED(X) (!X || X.gc_destroyed) +#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index d7fd20ac77..8ac42dc0b9 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -228,7 +228,7 @@ Proc for attack log creation, because really why not . = 0 break - if(target_loc && (!target || target_loc != target.loc)) + if(target_loc && (QDELETED(target) || target_loc != target.loc)) . = 0 break diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm index edcb8d703c..9f08241978 100644 --- a/code/controllers/ProcessScheduler/core/process.dm +++ b/code/controllers/ProcessScheduler/core/process.dm @@ -387,6 +387,6 @@ exceptions[eid] = 0 /datum/controller/process/proc/catchBadType(var/datum/caught) - if(isnull(caught) || !istype(caught) || !isnull(caught.gcDestroyed)) + if(isnull(caught) || !istype(caught) || QDELETED(caught)) return // Only bother with types we can identify and that don't belong catchException("Type [caught.type] does not belong in process' queue") diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm deleted file mode 100644 index 02f0411332..0000000000 --- a/code/controllers/Processes/garbage.dm +++ /dev/null @@ -1,254 +0,0 @@ -// The time a datum was destroyed by the GC, or null if it hasn't been -/datum/var/gcDestroyed - -#define GC_COLLECTIONS_PER_RUN 300 -#define GC_COLLECTION_TIMEOUT (30 SECONDS) -#define GC_FORCE_DEL_PER_RUN 30 - -var/datum/controller/process/garbage_collector/garbage_collector -var/list/delayed_garbage = list() - -/datum/controller/process/garbage_collector - var/garbage_collect = 1 // Whether or not to actually do work - var/total_dels = 0 // number of total del()'s - var/tick_dels = 0 // number of del()'s we've done this tick - var/soft_dels = 0 - var/hard_dels = 0 // number of hard dels in total - var/list/destroyed = list() // list of refID's of things that should be garbage collected - // refID's are associated with the time at which they time out and need to be manually del() - // we do this so we aren't constantly locating them and preventing them from being gc'd - - var/list/logging = list() // list of all types that have failed to GC associated with the number of times that's happened. - // the types are stored as strings - -/datum/controller/process/garbage_collector/setup() - name = "garbage" - schedule_interval = 5 SECONDS - start_delay = 3 - - if(!garbage_collector) - garbage_collector = src - - for(var/garbage in delayed_garbage) - qdel(garbage) - delayed_garbage.Cut() - delayed_garbage = null - -#ifdef GC_FINDREF -world/loop_checks = 0 -#endif - -/datum/controller/process/garbage_collector/doWork() - if(!garbage_collect) - return - - tick_dels = 0 - var/time_to_kill = world.time - GC_COLLECTION_TIMEOUT - var/checkRemain = GC_COLLECTIONS_PER_RUN - var/remaining_force_dels = GC_FORCE_DEL_PER_RUN - - - while(destroyed.len && --checkRemain >= 0) - if(remaining_force_dels <= 0) - #ifdef GC_DEBUG - testing("GC: Reached max force dels per tick [dels] vs [maxDels]") - #endif - break // Server's already pretty pounded, everything else can wait 2 seconds - var/refID = destroyed[1] - var/GCd_at_time = destroyed[refID] - if(GCd_at_time > time_to_kill) - #ifdef GC_DEBUG - testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]") - #endif - break // Everything else is newer, skip them - var/datum/A = locate(refID) - #ifdef GC_DEBUG - testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]") - #endif - if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake - // Something's still referring to the qdel'd object. Kill it. - testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --") - logging["[A.type]"]++ - del(A) - - hard_dels++ - remaining_force_dels-- - else - #ifdef GC_DEBUG - testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]") - #endif - soft_dels++ - tick_dels++ - total_dels++ - destroyed.Cut(1, 2) - SCHECK - -#undef GC_FORCE_DEL_PER_TICK -#undef GC_COLLECTION_TIMEOUT -#undef GC_COLLECTIONS_PER_TICK - -#ifdef GC_FINDREF -/datum/controller/process/garbage_collector/proc/LookForRefs(var/datum/D, var/list/targ) - . = 0 - for(var/V in D.vars) - if(V == "contents") - continue - if(istype(D.vars[V], /atom)) - var/atom/A = D.vars[V] - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], var [V]") - . += 1 - else if(islist(D.vars[V])) - . += LookForListRefs(D.vars[V], targ, D, V) - -/datum/controller/process/garbage_collector/proc/LookForListRefs(var/list/L, var/list/targ, var/datum/D, var/V) - . = 0 - for(var/F in L) - if(istype(F, /atom)) - var/atom/A = F - if(A in targ) - testing("GC: [A] | [A.type] referenced by [D] | [D.type], list [V]") - . += 1 - if(islist(F)) - . += LookForListRefs(F, targ, D, "[F] in list [V]") -#endif - -/datum/controller/process/garbage_collector/proc/AddTrash(datum/A) - if(!istype(A) || !isnull(A.gcDestroyed)) - return - #ifdef GC_DEBUG - testing("GC: AddTrash(\ref[A] - [A.type])") - #endif - A.gcDestroyed = world.time - destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list. - destroyed["\ref[A]"] = world.time - -/datum/controller/process/garbage_collector/statProcess() - ..() - stat(null, "[garbage_collect ? "On" : "Off"], [destroyed.len] queued") - stat(null, "Dels: [total_dels], [soft_dels] soft, [hard_dels] hard, [tick_dels] last run") - - -// Tests if an atom has been deleted. -/proc/deleted(atom/A) - return !A || !isnull(A.gcDestroyed) - -// Should be treated as a replacement for the 'del' keyword. -// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. -/proc/qdel(var/datum/A) - if(!A) - return - if(!istype(A)) - warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") - crash_with("qdel() passed object of type [A.type]. qdel() can only handle /datum types.") - del(A) - if(garbage_collector) - garbage_collector.total_dels++ - garbage_collector.hard_dels++ - else if(isnull(A.gcDestroyed)) - // Let our friend know they're about to get collected - . = !A.Destroy() - if(. && A) - A.finalize_qdel() - -/datum/proc/finalize_qdel() - del(src) - -/atom/finalize_qdel() - if(garbage_collector) - garbage_collector.AddTrash(src) - else - delayed_garbage |= src - -/icon/finalize_qdel() - del(src) - -/image/finalize_qdel() - del(src) - -/mob/finalize_qdel() - del(src) - -/turf/finalize_qdel() - del(src) - -// Default implementation of clean-up code. -// This should be overridden to remove all references pointing to the object being destroyed. -// Return true if the the GC controller should allow the object to continue existing. -/datum/proc/Destroy() - nanomanager.close_uis(src) - tag = null - return - -#ifdef TESTING -/client/var/running_find_references - -/mob/verb/create_thing() - set category = "Debug" - set name = "Create Thing" - - var/path = input("Enter path") - var/atom/thing = new path(loc) - thing.find_references() - -/atom/verb/find_references() - set category = "Debug" - set name = "Find References" - set background = 1 - set src in world - - if(!usr || !usr.client) - return - - if(usr.client.running_find_references) - testing("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - return - - if(alert("Running this will create a lot of lag until it finishes. You can cancel it by running it again. Would you like to begin the search?", "Find References", "Yes", "No") == "No") - return - - // Remove this object from the list of things to be auto-deleted. - if(garbage_collector) - garbage_collector.destroyed -= "\ref[src]" - - usr.client.running_find_references = type - testing("Beginning search for references to a [type].") - var/list/things = list() - for(var/client/thing) - things += thing - for(var/datum/thing) - things += thing - for(var/atom/thing) - things += thing - testing("Collected list of things in search for references to a [type]. ([things.len] Thing\s)") - for(var/datum/thing in things) - if(!usr.client.running_find_references) return - for(var/varname in thing.vars) - var/variable = thing.vars[varname] - if(variable == src) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] var.") - else if(islist(variable)) - if(src in variable) - testing("Found [src.type] \ref[src] in [thing.type]'s [varname] list var.") - testing("Completed search for references to a [type].") - usr.client.running_find_references = null - -/client/verb/purge_all_destroyed_objects() - set category = "Debug" - if(garbage_collector) - while(garbage_collector.destroyed.len) - var/datum/o = locate(garbage_collector.destroyed[1]) - if(istype(o) && o.gcDestroyed) - del(o) - garbage_collector.dels++ - garbage_collector.destroyed.Cut(1, 2) -#endif - -#ifdef GC_DEBUG -#undef GC_DEBUG -#endif - -#ifdef GC_FINDREF -#undef GC_FINDREF -#endif \ No newline at end of file diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm index 405615dc1f..1fd1f8ce45 100644 --- a/code/controllers/Processes/machinery.dm +++ b/code/controllers/Processes/machinery.dm @@ -20,7 +20,7 @@ /datum/controller/process/machinery/proc/internal_process_machinery() for(last_object in machines) var/obj/machinery/M = last_object - if(M && !M.gcDestroyed) + if(M && !QDELETED(M)) if(M.process() == PROCESS_KILL) //M.inMachineList = 0 We don't use this debugging function machines.Remove(M) @@ -34,7 +34,7 @@ /datum/controller/process/machinery/proc/internal_process_power() for(last_object in powernets) var/datum/powernet/powerNetwork = last_object - if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed)) + if(istype(powerNetwork) && !QDELETED(powerNetwork)) powerNetwork.reset() SCHECK continue @@ -52,7 +52,7 @@ /datum/controller/process/machinery/proc/internal_process_pipenets() for(last_object in pipe_networks) var/datum/pipe_network/pipeNetwork = last_object - if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed)) + if(istype(pipeNetwork) && !QDELETED(pipeNetwork)) pipeNetwork.process() SCHECK continue diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm index 8681803ac4..6b623e7730 100644 --- a/code/controllers/Processes/mob.dm +++ b/code/controllers/Processes/mob.dm @@ -14,7 +14,7 @@ /datum/controller/process/mob/doWork() for(last_object in mob_list) var/mob/M = last_object - if(M && isnull(M.gcDestroyed)) + if(M && !QDELETED(M)) try M.Life() catch(var/exception/e) diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm index 49b9048c07..21d2f8e5f0 100644 --- a/code/controllers/Processes/nanoui.dm +++ b/code/controllers/Processes/nanoui.dm @@ -9,7 +9,7 @@ /datum/controller/process/nanoui/doWork() for(last_object in nanomanager.processing_uis) var/datum/nanoui/NUI = last_object - if(istype(NUI) && isnull(NUI.gcDestroyed)) + if(istype(NUI) && !QDELETED(NUI)) try NUI.process() catch(var/exception/e) diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm index 1010c8cc97..6032cbb541 100644 --- a/code/controllers/Processes/obj.dm +++ b/code/controllers/Processes/obj.dm @@ -11,7 +11,7 @@ /datum/controller/process/obj/doWork() for(last_object in processing_objects) var/datum/O = last_object - if(O && isnull(O.gcDestroyed)) + if(!QDELETED(O)) try O:process() catch(var/exception/e) diff --git a/code/controllers/Processes/scheduler.dm b/code/controllers/Processes/scheduler.dm index 276249bd55..fb9f85d7c4 100644 --- a/code/controllers/Processes/scheduler.dm +++ b/code/controllers/Processes/scheduler.dm @@ -30,8 +30,8 @@ // Note: We won't be informed about tasks being destroyed, but this is the best we can do. /datum/controller/process/scheduler/copyStateFrom(var/datum/controller/process/scheduler/target) scheduled_tasks = list() - for(var/st in target.scheduled_tasks) - if(!deleted(st) && istype(st, /datum/scheduled_task)) + for(var/datum/scheduled_task/st in target.scheduled_tasks) + if(!QDELETED(st) && istype(st)) schedule(st) scheduler = src diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 98c6a5d89d..0589d5fa7f 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -33,13 +33,13 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/Initialize() set waitfor = 0 Failsafe.Loop() - if(!deleted(src)) + if(!QDELETED(src)) qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us /datum/controller/failsafe/Destroy() running = FALSE ..() - // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + return QDEL_HINT_HARDDEL_NOW /datum/controller/failsafe/proc/Loop() while(running) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 981cf6d2bb..360b739bad 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -66,7 +66,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING /datum/controller/master/Destroy() ..() // Tell qdel() to Del() this object. - // return QDEL_HINT_HARDDEL_NOW // TODO - Once we port garbage.dm + return QDEL_HINT_HARDDEL_NOW /datum/controller/master/Shutdown() processing = FALSE diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 3075682438..c2d04d9c93 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -49,7 +49,7 @@ datum/controller/game_controller/proc/setup_objects() admin_notice("Initializing objects", R_DEBUG) sleep(-1) for(var/atom/movable/object in world) - if(isnull(object.gcDestroyed)) + if(!QDELETED(object)) object.initialize() admin_notice("Initializing areas", R_DEBUG) @@ -80,8 +80,8 @@ datum/controller/game_controller/proc/setup_objects() admin_notice("Initializing turbolifts", R_DEBUG) for(var/thing in turbolifts) - if(!deleted(thing)) - var/obj/turbolift_map_holder/lift = thing + var/obj/turbolift_map_holder/lift = thing + if(!QDELETED(lift)) lift.initialize() sleep(-1) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm new file mode 100644 index 0000000000..e849b64be6 --- /dev/null +++ b/code/controllers/subsystems/garbage.dm @@ -0,0 +1,354 @@ +var/datum/controller/subsystem/garbage_collector/SSgarbage + +/datum/controller/subsystem/garbage_collector + name = "Garbage" + priority = 15 + wait = 5 + flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + + var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object + var/delslasttick = 0 // number of del()'s we've done this tick + var/gcedlasttick = 0 // number of things that gc'ed last tick + var/totaldels = 0 + var/totalgcs = 0 + + var/highest_del_time = 0 + var/highest_del_tickusage = 0 + + var/list/queue = list() // list of refID's of things that should be garbage collected + // refID's are associated with the time at which they time out and need to be manually del() + // we do this so we aren't constantly locating them and preventing them from being gc'd + + var/list/tobequeued = list() //We store the references of things to be added to the queue seperately so we can spread out GC overhead over a few ticks + + var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened. + // the types are stored as strings + var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call + + var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT + // all types that did not respect qdel(A, force=TRUE) and returned one + // of the immortality qdel hints + var/list/noforcerespect = list() + +#ifdef TESTING + var/list/qdel_list = list() // list of all types that have been qdel()eted +#endif + +/datum/controller/subsystem/garbage_collector/New() + NEW_SS_GLOBAL(SSgarbage) + +/datum/controller/subsystem/garbage_collector/stat_entry(msg) + msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|" + msg += "GR:" + if (!(delslasttick+gcedlasttick)) + msg += "n/a|" + else + msg += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|" + + msg += "TD:[totaldels]|TG:[totalgcs]|" + if (!(totaldels+totalgcs)) + msg += "n/a|" + else + msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%" + ..(msg) + +/datum/controller/subsystem/garbage_collector/fire() + HandleToBeQueued() + if(state == SS_RUNNING) + HandleQueue() + +//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond. +//Don't attempt to optimize, not worth the effort. +/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued() + var/list/tobequeued = src.tobequeued + var/starttime = world.time + var/starttimeofday = world.timeofday + while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/ref = tobequeued[1] + Queue(ref) + tobequeued.Cut(1, 2) + +/datum/controller/subsystem/garbage_collector/proc/HandleQueue() + delslasttick = 0 + gcedlasttick = 0 + var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del() + var/list/queue = src.queue + var/starttime = world.time + var/starttimeofday = world.timeofday + while(queue.len && starttime == world.time && starttimeofday == world.timeofday) + if (MC_TICK_CHECK) + break + var/refID = queue[1] + if (!refID) + queue.Cut(1, 2) + continue + + var/GCd_at_time = queue[refID] + if(GCd_at_time > time_to_kill) + break // Everything else is newer, skip them + queue.Cut(1, 2) + var/datum/A + A = locate(refID) + if (A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake + #ifdef GC_FAILURE_HARD_LOOKUP + A.find_references() + #endif + + // Something's still referring to the qdel'd object. Kill it. + var/type = A.type + testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --") + didntgc["[type]"]++ + var/time = world.timeofday + var/tick = world.tick_usage + var/ticktime = world.time + del(A) + tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100)) + + if (tick > highest_del_tickusage) + highest_del_tickusage = tick + time = world.timeofday - time + if (!time && TICK_DELTA_TO_MS(tick) > 1) + time = TICK_DELTA_TO_MS(tick)/100 + if (time > highest_del_time) + highest_del_time = time + if (time > 10) + log_game("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)") + message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).") + postpone(time/5) + break + ++delslasttick + ++totaldels + else + ++gcedlasttick + ++totalgcs + +/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A) + if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gc_destroyed = GC_QUEUED_FOR_QUEUING + +/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A) + if (!istype(A) || (!isnull(A.gc_destroyed) && A.gc_destroyed >= 0)) + return + if (A.gc_destroyed == GC_QUEUED_FOR_HARD_DEL) + del(A) + return + var/gctime = world.time + var/refid = "\ref[A]" + + A.gc_destroyed = gctime + + if (queue[refid]) + queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list. + + queue[refid] = gctime + +/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A) + if (istype(A) && A.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + tobequeued += A + A.gc_destroyed = GC_QUEUED_FOR_HARD_DEL + +/datum/controller/subsystem/garbage_collector/Recover() + if (istype(SSgarbage.queue)) + queue |= SSgarbage.queue + if (istype(SSgarbage.tobequeued)) + tobequeued |= SSgarbage.tobequeued + +// Should be treated as a replacement for the 'del' keyword. +// Datums passed to this will be given a chance to clean up references to allow the GC to collect them. +/proc/qdel(datum/D, force=FALSE) + if(!D) + return +#ifdef TESTING + SSgarbage.qdel_list += D.type +#endif + if(!istype(D)) + log_debug("qdel() was passed [log_info_line(D)]. qdel() can only handle instances of (sub)type /datum.") + del(D) + else if(isnull(D.gc_destroyed)) + D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED + var/start_time = world.time + var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. + if(world.time != start_time) + SSgarbage.sleptDestroy[D.type]++ + if(!D) + return + switch(hint) + if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion. + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_IWILLGC) + D.gc_destroyed = world.time + return + if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory. + if(!force) + D.gc_destroyed = null //clear the gc variable (important!) + return + // Returning LETMELIVE after being told to force destroy + // indicates the objects Destroy() does not respect force + if(!SSgarbage.noforcerespect[D.type]) + SSgarbage.noforcerespect[D.type] = D.type + crash_with("[D.type] has been force deleted, but is \ + returning an immortal QDEL_HINT, indicating it does \ + not respect the force flag for qdel(). It has been \ + placed in the queue, further instances of this type \ + will also be queued.") + SSgarbage.QueueForQueuing(D) + if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate() + SSgarbage.HardQueue(D) + if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste. + del(D) + if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion. + SSgarbage.QueueForQueuing(D) + #ifdef TESTING + D.find_references() + #endif + else + if(!SSgarbage.noqdelhint[D.type]) + SSgarbage.noqdelhint[D.type] = D.type + crash_with("[D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") + SSgarbage.QueueForQueuing(D) + else if(D.gc_destroyed == GC_CURRENTLY_BEING_QDELETED) + CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic") + +// Default implementation of clean-up code. +// This should be overridden to remove all references pointing to the object being destroyed. +// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. +/datum/proc/Destroy(force=FALSE) + tag = null + nanomanager.close_uis(src) + return QDEL_HINT_QUEUE + +/datum/var/gc_destroyed //Time when this object was destroyed. + +#ifdef TESTING +/datum/var/running_find_references +/datum/var/last_find_references = 0 + +/datum/verb/find_refs() + set category = "Debug" + set name = "Find References" + set background = 1 + set src in world + + find_references(FALSE) + +/datum/proc/find_references(skip_alert) + running_find_references = type + if(usr && usr.client) + if(usr.client.running_find_references) + testing("CANCELLED search for references to a [usr.client.running_find_references].") + usr.client.running_find_references = null + running_find_references = null + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + return + + if(!skip_alert) + if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No") + running_find_references = null + return + + //this keeps the garbage collector from failing to collect objects being searched for in here + SSgarbage.can_fire = 0 + + if(usr && usr.client) + usr.client.running_find_references = type + + testing("Beginning search for references to a [type].") + last_find_references = world.time + find_references_in_globals() + for(var/datum/thing in world) + DoSearchVar(thing, "WorldRef: [thing]") + testing("Completed search for references to a [type].") + if(usr && usr.client) + usr.client.running_find_references = null + running_find_references = null + + //restart the garbage collector + SSgarbage.can_fire = 1 + SSgarbage.next_fire = world.time + world.tick_lag + +/client/verb/purge_all_destroyed_objects() + set category = "Debug" + if(SSgarbage) + while(SSgarbage.queue.len) + var/datum/o = locate(SSgarbage.queue[1]) + if(istype(o) && o.gc_destroyed) + del(o) + SSgarbage.totaldels++ + SSgarbage.queue.Cut(1, 2) + +/datum/verb/qdel_then_find_references() + set category = "Debug" + set name = "qdel() then Find References" + set background = 1 + set src in world + + qdel(src) + if(!running_find_references) + find_references(TRUE) + +/client/verb/show_qdeleted() + set category = "Debug" + set name = "Show qdel() Log" + set desc = "Render the qdel() log and display it" + + var/dat = "List of things that have been qdel()eted this round

    " + + var/tmplist = list() + for(var/elem in SSgarbage.qdel_list) + if(!(elem in tmplist)) + tmplist[elem] = 0 + tmplist[elem]++ + + for(var/path in tmplist) + dat += "[path] - [tmplist[path]] times
    " + + usr << browse(dat, "window=qdeletedlog") + +/datum/proc/DoSearchVar(X, Xname) + if(usr && usr.client && !usr.client.running_find_references) return + if(istype(X, /datum)) + var/datum/D = X + if(D.last_find_references == last_find_references) + return + D.last_find_references = last_find_references + for(var/V in D.vars) + for(var/varname in D.vars) + var/variable = D.vars[varname] + if(variable == src) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]") + else if(islist(variable)) + if(src in variable) + testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in variable) + DoSearchVar(I, TRUE) + else + DoSearchVar(variable, "[Xname]: [varname]") +#endif + else if(islist(X)) + if(src in X) + testing("Found [src.type] \ref[src] in list [Xname].") +#ifdef GC_FAILURE_HARD_LOOKUP + for(var/I in X) + DoSearchVar(I, Xname + ": list") +#else + CHECK_TICK +#endif + +//if find_references isn't working for some datum +//update this list using tools/GenerateGlobalVarAccess +/datum/proc/find_references_in_globals() + // TODO - Impement Global Variable Access + // for(var/global_var in _all_globals) + // DoSearchVar(readglobal(global_var), "Global: [global_var]") +#endif + + +/image/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm index 3bf80f06d0..d511b5d233 100644 --- a/code/datums/helper_datums/global_iterator.dm +++ b/code/datums/helper_datums/global_iterator.dm @@ -155,4 +155,5 @@ Data storage vars: tag = null arg_list.Cut() stop() + return QDEL_HINT_LETMELIVE //Do not call ..() diff --git a/code/datums/repositories/decls.dm b/code/datums/repositories/decls.dm index e87be74f53..61b24c21e9 100644 --- a/code/datums/repositories/decls.dm +++ b/code/datums/repositories/decls.dm @@ -36,4 +36,4 @@ /decls/Destroy() crash_with("Prevented attempt to delete a decl instance: [log_info_line(src)]") - return 1 // Prevents Decl destruction \ No newline at end of file + return QDEL_HINT_LETMELIVE // Prevents Decl destruction diff --git a/code/datums/weakref.dm b/code/datums/weakref.dm index 1a7d844ca8..348d73b0b2 100644 --- a/code/datums/weakref.dm +++ b/code/datums/weakref.dm @@ -7,7 +7,9 @@ //obtain a weak reference to a datum /proc/weakref(datum/D) - if(D.gcDestroyed) + if(!istype(D)) + return + if(QDELETED(D)) return if(!D.weakref) D.weakref = new/weakref(D) @@ -22,7 +24,7 @@ /weakref/Destroy() // A weakref datum should not be manually destroyed as it is a shared resource, // rather it should be automatically collected by the BYOND GC when all references are gone. - return 0 + return QDEL_HINT_LETMELIVE /weakref/proc/resolve() var/datum/D = locate(ref) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index fe9f99b032..64ae0722f8 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -23,16 +23,6 @@ if(auto_init && ticker && ticker.current_state == GAME_STATE_PLAYING) initialize() -/atom/movable/Del() - if(isnull(gcDestroyed) && loc) - testing("GC: -- [type] was deleted via del() rather than qdel() --") - crash_with("GC: -- [type] was deleted via del() rather than qdel() --") // stick a stack trace in the runtime logs -// else if(isnull(gcDestroyed)) -// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel() -// else -// testing("GC: [type] was deleted via GC with qdel()") - ..() - /atom/movable/Destroy() . = ..() if(reagents) @@ -53,7 +43,7 @@ pulledby = null /atom/movable/proc/initialize() - if(!isnull(gcDestroyed)) + if(QDELETED(src)) crash_with("GC: -- [type] had initialize() called after qdel() --") /atom/movable/Bump(var/atom/A, yes) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm index 6f549d15f4..90ac43379f 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm @@ -37,7 +37,6 @@ var/global/universe_has_ended = 0 // Apply changes when entering state /datum/universal_state/supermatter_cascade/OnEnter() set background = 1 - garbage_collector.garbage_collect = 0 world << "You are blinded by a brilliant flash of energy." world << sound('sound/effects/cascade.ogg') diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 2b4eae9a0d..2e10ed3b1b 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -73,7 +73,7 @@ visible_message("A red light flashes on \the [src].") return cable.use(amount) - if(deleted(cable)) + if(QDELETED(cable)) cable = null return 1 diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index b7bcc53e91..deee8ed76b 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -21,9 +21,9 @@ return 1 /obj/machinery/portable_atmospherics/Destroy() - qdel(air_contents) - qdel(holding) - ..() + qdel_null(air_contents) + qdel_null(holding) + . = ..() /obj/machinery/portable_atmospherics/initialize() . = ..() @@ -40,11 +40,6 @@ else update_icon() -/obj/machinery/portable_atmospherics/Destroy() - qdel(air_contents) - - ..() - /obj/machinery/portable_atmospherics/proc/StandardAirMix() return list( "oxygen" = O2STANDARD * MolesForPressure(), diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index cf7f96d52d..240610358f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -73,8 +73,7 @@ /obj/machinery/door/Destroy() density = 0 update_nearby_tiles() - ..() - return + . = ..() /obj/machinery/door/process() if(close_door_at && world.time >= close_door_at) diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index a134e68e3f..fdaf284f3f 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -150,7 +150,7 @@ var/list/floor_light_cache = list() var/area/A = get_area(src) if(A) on = 0 - ..() + . = ..() /obj/machinery/floor_light/cultify() default_light_colour = "#FF0000" diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 4abdb685d0..06228dd86f 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -485,7 +485,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -504,7 +504,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -523,7 +523,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -542,7 +542,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -559,7 +559,7 @@ Buildable meters P.initialize_directions = pipe_dir //this var it's used to know if the pipe is bent or not P.initialize_directions_he = pipe_dir P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() @@ -594,7 +594,7 @@ Buildable meters var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 M.initialize() - if (deleted(M)) + if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() @@ -663,7 +663,7 @@ Buildable meters var/turf/T = M.loc M.level = !T.is_plating() ? 2 : 1 M.initialize() - if (deleted(M)) + if (QDELETED(M)) usr << pipefailtext return 1 M.build_network() @@ -740,7 +740,7 @@ Buildable meters P.initialize_directions = src.get_pdir() P.initialize_directions_he = src.get_hdir() P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext //"There's nothing to connect this pipe to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" return 1 P.build_network() @@ -922,7 +922,7 @@ Buildable meters var/turf/T = P.loc P.level = !T.is_plating() ? 2 : 1 P.initialize() - if (deleted(P)) + if (QDELETED(P)) usr << pipefailtext return 1 P.build_network() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 09ff0075db..5d7d16a126 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -140,18 +140,14 @@ cell = null internal_tank = null - qdel(pr_int_temp_processor) - qdel(pr_inertial_movement) - qdel(pr_give_air) - qdel(pr_internal_damage) - qdel(spark_system) - pr_int_temp_processor = null - pr_give_air = null - pr_internal_damage = null - spark_system = null + qdel_null(pr_int_temp_processor) + qdel_null(pr_inertial_movement) + qdel_null(pr_give_air) + qdel_null(pr_internal_damage) + qdel_null(spark_system) mechas_list -= src //global mech list - ..() + . = ..() //////////////////////// ////// Helpers ///////// diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 88b53bd342..35697914ee 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -169,7 +169,7 @@ valve_open = 0 - if(deleted(tank_one) || deleted(tank_two)) + if(QDELETED(tank_one) || QDELETED(tank_two)) return var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 84bee72558..649b5677ca 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -27,15 +27,10 @@ /obj/item/weapon/flamethrower/Destroy() - if(weldtool) - qdel(weldtool) - if(igniter) - qdel(igniter) - if(ptank) - qdel(ptank) - ..() - return - + qdel_null(weldtool) + qdel_null(igniter) + qdel_null(ptank) + . = ..() /obj/item/weapon/flamethrower/process() if(!lit) diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm index 31231964cb..c778ec07a9 100644 --- a/code/game/objects/items/weapons/material/material_weapons.dm +++ b/code/game/objects/items/weapons/material/material_weapons.dm @@ -71,7 +71,7 @@ /obj/item/weapon/material/Destroy() processing_objects -= src - ..() + . = ..() /obj/item/weapon/material/apply_hit_effect() ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 928246b2b5..eab315809f 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -10,7 +10,7 @@ /obj/structure/Destroy() if(parts) new parts(loc) - ..() + . = ..() /obj/structure/attack_hand(mob/user) if(breakable) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index ec4652901d..35b8571a11 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -39,7 +39,7 @@ spawn(1) 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. - ..() + . = ..() /obj/structure/lattice/ex_act(severity) switch(severity) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3f2e0064f2..d34b210b99 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -47,6 +47,7 @@ /turf/Destroy() turfs -= src ..() + return QDEL_HINT_IWILLGC /turf/ex_act(severity) return 0 diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 67eefc018d..95945f82e0 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -1,8 +1,4 @@ -// Keep these two together, they *must* be defined on both -// If /client ever becomes /datum/client or similar, they can be merged -/client/proc/get_view_variables_header() - return "[src]" /datum/proc/get_view_variables_header() return "[src]" @@ -31,9 +27,6 @@
    "} -// Same for these as for get_view_variables_header() above -/client/proc/get_view_variables_options() - return "" /datum/proc/get_view_variables_options() return "" diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 169ab9b6a0..1273b004a4 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -187,4 +187,4 @@ if(radio_controller) radio_controller.remove_object(src,frequency) frequency = 0 - ..() + . = ..() diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index b559652132..5e5a176128 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -1,4 +1,8 @@ /client + ////////////////////// + //BLACK MAGIC THINGS// + ////////////////////// + parent_type = /datum //////////////// //ADMIN THINGS// //////////////// diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index d908df1b3d..d6f9375e98 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -181,6 +181,9 @@ clients -= src return ..() +/client/Destroy() + ..() + return QDEL_HINT_HARDDEL_NOW // here because it's similar to below diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index fca9f3abaf..0dbe4c9eea 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -116,7 +116,7 @@ var/obj/effect/plant/child = new(get_turf(src),seed,parent) spawn(1) // This should do a little bit of animation. - if(deleted(child)) + if(QDELETED(child)) return //move out to the destination diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 60c684fd86..6d912cd862 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -131,4 +131,4 @@ T.lighting_overlay = null T.luminosity = 1 - return ..() + . = ..() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 8a2513a54a..9c372cf2e7 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -443,7 +443,7 @@ var/global/list/damage_icon_parts = list() //For legacy support. /mob/living/carbon/human/regenerate_icons() ..() - if(transforming) return + if(transforming || QDELETED(src)) return update_mutations(0) update_body(0) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index c7fb1d6728..7d5c270f9b 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -184,7 +184,7 @@ wrapped.force = 0.0 wrapped.attack(M,user) M.attackby(wrapped, user) //attackby reportedly gets procced by being clicked on, at least according to Anewbe. - if(deleted(wrapped) || wrapped.loc != src.loc) + if(QDELETED(wrapped) || wrapped.loc != src.loc) wrapped = null return 1 return 0 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 7574bb4c77..454b58a55c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -14,6 +14,7 @@ spellremove(src) ghostize() ..() + return QDEL_HINT_HARDDEL_NOW /mob/proc/remove_screen_obj_references() hands = null diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 80f68b979d..be114228de 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -83,7 +83,9 @@ //This makes sure that the grab screen object is displayed in the correct hand. -/obj/item/weapon/grab/proc/synch() +/obj/item/weapon/grab/proc/synch() //why is this needed? + if(QDELETED(src)) + return if(affecting) if(assailant.r_hand == src) hud.screen_loc = ui_rhand @@ -91,7 +93,7 @@ hud.screen_loc = ui_lhand /obj/item/weapon/grab/process() - if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC + if(QDELETED(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC return PROCESS_KILL confirm() @@ -221,6 +223,8 @@ animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING) /obj/item/weapon/grab/proc/s_click(obj/screen/S) + if(QDELETED(src)) + return if(!affecting) return if(state == GRAB_UPGRADING) @@ -291,6 +295,8 @@ return 1 /obj/item/weapon/grab/attack(mob/M, mob/living/user) + if(QDELETED(src)) + return if(!affecting) return if(world.time < (last_action + 20)) @@ -336,7 +342,7 @@ /obj/item/weapon/grab/dropped() loc = null - if(!destroying) + if(!QDELETED(src)) qdel(src) /obj/item/weapon/grab/proc/reset_kill_state() diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 1390c89b29..e0809e32b5 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -67,10 +67,8 @@ brainmob.client.screen.len = null //clear the hud /obj/item/organ/internal/brain/Destroy() - if(brainmob) - qdel(brainmob) - brainmob = null - ..() + qdel_null(brainmob) + . = ..() /obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 49c1099184..60efe9893d 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -23,7 +23,7 @@ chemical_reagents_list[D.id] = D /datum/reagents/Destroy() - ..() + . = ..() if(chemistryProcess) chemistryProcess.active_holders -= src diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 78b33ef36e..ccf7c62ac1 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -488,7 +488,7 @@ var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) if(amount_to_take) stack.use(amount_to_take) - if(deleted(stack)) + if(QDELETED(stack)) holdingitems -= stack beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET)) continue diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 723db2ace7..f23e37f516 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -118,8 +118,8 @@ return null /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references - ..() holder = null + . = ..() /* DEPRECATED - TODO: REMOVE EVERYWHERE */ diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 3191442be8..ef07b03c4f 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -210,8 +210,8 @@ /obj/item/weapon/reagent_containers/food/snacks/Destroy() if(contents) for(var/atom/movable/something in contents) - something.loc = get_turf(src) - ..() + something.dropInto(loc) + . = ..() //////////////////////////////////////////////////////////////////////////////// /// FOOD END diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 4872131429..d7ce2063b2 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -55,7 +55,7 @@ check_failure() set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) ..() @@ -64,7 +64,7 @@ ..() check_failure() set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) /obj/machinery/shield/ex_act(severity) switch(severity) @@ -114,7 +114,7 @@ //The shield becomes dense to absorb the blow.. purely asthetic. set_opacity(1) - spawn(20) if(!deleted(src)) set_opacity(0) + spawn(20) if(!QDELETED(src)) set_opacity(0) ..() return diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index db445e9f50..cea2c93559 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -79,7 +79,7 @@ update_connections(1) // Update tables around us to ignore us (material=null forces no connections) for(var/obj/structure/table/T in oview(src, 1)) T.update_icon() - ..() + . = ..() /obj/structure/table/examine(mob/user) . = ..() diff --git a/polaris.dme b/polaris.dme index 942ada13d4..9cb2df356d 100644 --- a/polaris.dme +++ b/polaris.dme @@ -37,6 +37,7 @@ #include "code\__defines\mobs.dm" #include "code\__defines\planets.dm" #include "code\__defines\process_scheduler.dm" +#include "code\__defines\qdel.dm" #include "code\__defines\research.dm" #include "code\__defines\species_languages.dm" #include "code\__defines\targeting.dm" @@ -152,7 +153,6 @@ #include "code\controllers\Processes\emergencyShuttle.dm" #include "code\controllers\Processes\event.dm" #include "code\controllers\Processes\game_master.dm" -#include "code\controllers\Processes\garbage.dm" #include "code\controllers\Processes\inactivity.dm" #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\machinery.dm" @@ -170,6 +170,7 @@ #include "code\controllers\Processes\vote.dm" #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" +#include "code\controllers\subsystems\garbage.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\browser.dm" From d4ebcac3f6964b1311e835d5378950c4da950919 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 18:02:16 -0400 Subject: [PATCH 107/261] Update radiation system for the new garbage collector. --- code/controllers/Processes/radiation.dm | 18 +++++++++--------- code/datums/repositories/radiation.dm | 8 -------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/code/controllers/Processes/radiation.dm b/code/controllers/Processes/radiation.dm index 192acf5d5c..71d9c60233 100644 --- a/code/controllers/Processes/radiation.dm +++ b/code/controllers/Processes/radiation.dm @@ -15,10 +15,10 @@ /datum/controller/process/radiation/proc/sources_decay() var/list/sources = linked.sources for(var/thing in sources) - if(deleted(thing)) - sources.Remove(thing) - continue var/datum/radiation_source/S = thing + if(QDELETED(S)) + sources.Remove(S) + continue if(S.decay) S.update_rad_power(S.rad_power - config.radiation_decay_rate) if(S.rad_power <= config.radiation_lower_limit) @@ -29,22 +29,22 @@ /datum/controller/process/radiation/proc/cache_expires() var/list/resistance_cache = linked.resistance_cache for(var/thing in resistance_cache) - if(deleted(thing)) - resistance_cache.Remove(thing) - continue var/turf/T = thing + if(QDELETED(T)) + resistance_cache.Remove(T) + continue 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 +// Step 3 - Registered irradiatable things are checked for radiation /datum/controller/process/radiation/proc/irradiate_targets() var/list/registered_listeners = living_mob_list // For now just use this. Nothing else is interested anyway. if(length(linked.sources) > 0) for(var/thing in registered_listeners) - if(deleted(thing)) - continue var/atom/A = thing + if(QDELETED(A)) + continue var/turf/T = get_turf(thing) var/rads = linked.get_rads_at_turf(T) if(rads) diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm index 0245bb801c..00c3532458 100644 --- a/code/datums/repositories/radiation.dm +++ b/code/datums/repositories/radiation.dm @@ -22,14 +22,6 @@ var/global/repository/radiation/radiation_repository = new() 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 From 733f69a4741b92f0309bb27d8c77f848531aca2b Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 17:55:34 -0400 Subject: [PATCH 108/261] Remove redundant cleanup of /atom/var/reagents * /datum/reagents/Destroy() does everything /datum/reagents/delete() does and more, and delete() is called only from /obj/effect/Destroy() which is *itself* redundant with its parent /atom/movable/Destroy() --- code/game/objects/effects/effect_system.dm | 5 ----- code/modules/reagents/Chemistry-Holder.dm | 6 ------ 2 files changed, 11 deletions(-) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 2343871b95..4c930d23cf 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -13,11 +13,6 @@ would spawn and follow the beaker, even if it is carried or thrown. unacidable = 1//So effect are not targeted by alien acid. pass_flags = PASSTABLE | PASSGRILLE -/obj/effect/Destroy() - if(reagents) - reagents.delete() - return ..() - /datum/effect/effect/system var/number = 3 var/cardinals = 0 diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 60efe9893d..d634711379 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -79,12 +79,6 @@ total_volume += R.volume return -/datum/reagents/proc/delete() - for(var/datum/reagent/R in reagent_list) - R.holder = null - if(my_atom) - my_atom.reagents = null - /datum/reagents/proc/handle_reactions() if(chemistryProcess) chemistryProcess.mark_for_update(src) From 8752999a14f58515c4f9dd441311810f3b2d1bd3 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:50:38 -0400 Subject: [PATCH 109/261] Atmospherics Destroy() cleanup - return qdel hints. --- .../components/binary_devices/binary_atmos_base.dm | 4 +--- .../components/binary_devices/pipeturbine.dm | 4 +--- code/ATMOSPHERICS/components/omni_devices/filter.dm | 2 +- code/ATMOSPHERICS/components/portables_connector.dm | 4 +--- .../components/trinary_devices/trinary_base.dm | 4 +--- code/ATMOSPHERICS/components/tvalve.dm | 4 +--- code/ATMOSPHERICS/components/unary/unary_base.dm | 4 +--- code/ATMOSPHERICS/components/unary/vent_pump.dm | 12 ++++-------- code/ATMOSPHERICS/components/unary/vent_scrubber.dm | 13 ++++--------- code/ATMOSPHERICS/components/valve.dm | 4 +--- code/ATMOSPHERICS/datum_pipeline.dm | 6 ++---- 11 files changed, 18 insertions(+), 43 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm index 2ccfe0f2e8..ea604bc996 100644 --- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm +++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm @@ -42,7 +42,7 @@ obj/machinery/atmospherics/binary return null Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -54,8 +54,6 @@ obj/machinery/atmospherics/binary node1 = null node2 = null - ..() - initialize() if(node1 && node2) return diff --git a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm index 5768def1ec..d0417e14dd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pipeturbine.dm @@ -36,7 +36,7 @@ initialize_directions = NORTH|SOUTH Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -48,8 +48,6 @@ node1 = null node2 = null - ..() - process() ..() if(anchored && !(stat&BROKEN)) diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm index b2966ef431..feb1b5cb93 100644 --- a/code/ATMOSPHERICS/components/omni_devices/filter.dm +++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm @@ -28,7 +28,7 @@ input = null output = null filters.Cut() - ..() + return ..() /obj/machinery/atmospherics/omni/filter/sort_ports() for(var/datum/omni_port/P in ports) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 4f6473fccf..9668f7a5a3 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -61,7 +61,7 @@ return null /obj/machinery/atmospherics/portables_connector/Destroy() - loc = null + . = ..() if(connected_device) connected_device.disconnect() @@ -72,8 +72,6 @@ node = null - ..() - /obj/machinery/atmospherics/portables_connector/initialize() if(node) return diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm index fa066d978f..717540db69 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm @@ -51,7 +51,7 @@ obj/machinery/atmospherics/trinary return null Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -67,8 +67,6 @@ obj/machinery/atmospherics/trinary node2 = null node3 = null - ..() - initialize() if(node1 && node2 && node3) return diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm index f93970a93f..a7deb70aba 100644 --- a/code/ATMOSPHERICS/components/tvalve.dm +++ b/code/ATMOSPHERICS/components/tvalve.dm @@ -100,7 +100,7 @@ return null /obj/machinery/atmospherics/tvalve/Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -116,8 +116,6 @@ node2 = null node3 = null - ..() - /obj/machinery/atmospherics/tvalve/proc/go_to_side() if(state) return 0 diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm index 20d37b309c..0372483c79 100644 --- a/code/ATMOSPHERICS/components/unary/unary_base.dm +++ b/code/ATMOSPHERICS/components/unary/unary_base.dm @@ -31,7 +31,7 @@ return null Destroy() - loc = null + . = ..() if(node) node.disconnect(src) @@ -39,8 +39,6 @@ node = null - ..() - initialize() if(node) return diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 00bc7e5772..c6121dea31 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -80,7 +80,10 @@ /obj/machinery/atmospherics/unary/vent_pump/Destroy() unregister_radio(src, frequency) - ..() + if(initial_loc) + initial_loc.air_vent_info -= id_tag + initial_loc.air_vent_names -= id_tag + return ..() /obj/machinery/atmospherics/unary/vent_pump/high_volume name = "Large Air Vent" @@ -414,13 +417,6 @@ new /obj/item/pipe(loc, make_from=src) qdel(src) -/obj/machinery/atmospherics/unary/vent_pump/Destroy() - if(initial_loc) - initial_loc.air_vent_info -= id_tag - initial_loc.air_vent_names -= id_tag - ..() - return - #undef DEFAULT_PRESSURE_DELTA #undef EXTERNAL_PRESSURE_BOUND diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 06d1bce437..3fccbb50f3 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -44,8 +44,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() unregister_radio(src, frequency) - ..() - + if(initial_loc) + initial_loc.air_scrub_info -= id_tag + initial_loc.air_scrub_names -= id_tag + return ..() /obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) if(!check_icon_cache()) @@ -285,10 +287,3 @@ user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" else user << "You are too far away to read the gauge." - -/obj/machinery/atmospherics/unary/vent_scrubber/Destroy() - if(initial_loc) - initial_loc.air_scrub_info -= id_tag - initial_loc.air_scrub_names -= id_tag - ..() - return diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 3cd77597b3..01e6e977bb 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -72,7 +72,7 @@ return null /obj/machinery/atmospherics/valve/Destroy() - loc = null + . = ..() if(node1) node1.disconnect(src) @@ -84,8 +84,6 @@ node1 = null node2 = null - ..() - /obj/machinery/atmospherics/valve/proc/open() if(open) return 0 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 44c7cd2590..0aece2d139 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -10,14 +10,12 @@ datum/pipeline var/alert_pressure = 0 Destroy() - if(network) - qdel(network) + qdel_null(network) if(air && air.volume) temporarily_store_air() - qdel(air) - ..() + . = ..() proc/process()//This use to be called called from the pipe networks From 010cca1d44757d346b0880c485c47f7438330b67 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:51:00 -0400 Subject: [PATCH 110/261] Pipe network datum Destroy() cleanup * Every pipe in a pipeline has a reference to the pipeline. This needs to be cleared, both so the pipeline can be gc'd, and also so the pipes don't try and keep using the qdel'd pipeline. * Same story for each pipeline in a pipe network, and each machine in a pipe network. * Pipe networks are also in the pipe_networks global list. While the controller would detect and remove it from the list on the next tick, cleaning up ourselves is the responsible thing to do. --- code/ATMOSPHERICS/datum_pipe_network.dm | 9 +++++++++ code/ATMOSPHERICS/datum_pipeline.dm | 2 ++ 2 files changed, 11 insertions(+) diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index 7fe586733c..8441461342 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -16,6 +16,15 @@ datum/pipe_network ..() + Destroy() + pipe_networks -= src + for(var/datum/pipeline/line_member in line_members) + line_member.network = null + for(var/obj/machinery/atmospherics/normal_member in normal_members) + normal_member.reassign_network(src, null) + gases.Cut() // Do not qdel the gases, we don't own them + return ..() + proc/process() //Equalize gases amongst pipe if called for if(update) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 0aece2d139..0115c85c3d 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -14,6 +14,8 @@ datum/pipeline if(air && air.volume) temporarily_store_air() + for(var/obj/machinery/atmospherics/pipe/P in members) + P.parent = null . = ..() From e48b548f2b50236a35ee85bfb35b2708ea44a8e2 Mon Sep 17 00:00:00 2001 From: Leshana Date: Mon, 5 Jun 2017 21:55:18 -0400 Subject: [PATCH 111/261] More and more Destroy() cleanups all across the board - Return qdel hints. --- code/_helpers/unsorted.dm | 7 ++++++ code/_onclick/hud/ability_screen_objects.dm | 2 +- code/_onclick/hud/action.dm | 5 +++- code/_onclick/hud/hud.dm | 2 +- code/_onclick/hud/screen_objects.dm | 2 +- code/_onclick/hud/spell_screen_objects.dm | 4 ++-- code/controllers/communications.dm | 1 - code/controllers/voting.dm | 8 ++++++- code/datums/wires/wires.dm | 1 + code/game/machinery/doors/airlock_control.dm | 6 ++--- code/game/machinery/hologram.dm | 2 +- code/game/machinery/pipe/pipelayer.dm | 5 ++-- code/game/objects/buckling.dm | 5 ---- code/game/objects/items/devices/PDA/PDA.dm | 8 +++++-- code/game/objects/items/devices/PDA/cart.dm | 8 +++---- .../devices/communicator/communicator.dm | 2 +- .../objects/items/devices/radio/intercom.dm | 2 +- .../items/weapons/material/material_armor.dm | 2 +- code/game/objects/items/weapons/mop_deploy.dm | 12 +++++----- .../objects/items/weapons/storage/internal.dm | 2 +- .../objects/items/weapons/storage/storage.dm | 18 +++++++-------- .../game/objects/items/weapons/tanks/tanks.dm | 5 ++-- code/game/objects/structures.dm | 3 --- code/game/objects/structures/window.dm | 5 +--- .../spacesuits/rig/modules/utility.dm | 4 ++-- code/modules/lighting/lighting_corner.dm | 6 +++++ code/modules/lighting/lighting_overlay.dm | 23 +++++++++++-------- code/modules/mob/freelook/ai/eye.dm | 2 +- .../mob/freelook/ai/update_triggers.dm | 2 +- code/modules/mob/freelook/eye.dm | 6 ++++- .../mob/freelook/mask/update_triggers.dm | 2 +- code/modules/mob/freelook/update_triggers.dm | 4 ++-- code/modules/mob/freelook/visualnet.dm | 2 +- code/modules/mob/holder.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 23 ++++++++----------- code/modules/mob/living/silicon/silicon.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/mob_grab.dm | 6 +---- code/modules/mob/modifiers.dm | 2 +- code/modules/power/breaker_box.dm | 2 +- code/modules/power/cable.dm | 2 +- code/modules/power/grid_checker.dm | 2 +- code/modules/power/lighting.dm | 2 +- code/modules/power/power.dm | 2 +- code/modules/power/singularity/collector.dm | 2 +- .../Chemistry-Reagents-Toxins.dm | 2 +- code/modules/tables/update_triggers.dm | 4 +--- code/world.dm | 3 ++- maps/RandomZLevels/stationCollision.dm | 4 ++-- maps/RandomZLevels/wildwest.dm | 2 +- maps/~map_system/maps.dm | 9 ++++++-- 51 files changed, 128 insertions(+), 113 deletions(-) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 2b75414a7e..63bac6e134 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1294,6 +1294,13 @@ var/mob/dview/dview_mob = new else living_mob_list -= src +/mob/dview/Destroy(var/force) + crash_with("Attempt to delete the dview_mob: [log_info_line(src)]") + if (!force) + return QDEL_HINT_LETMELIVE + global.dview_mob = new + return ..() + // call to generate a stack trace and print to runtime logs /proc/crash_with(msg) CRASH(msg) diff --git a/code/_onclick/hud/ability_screen_objects.dm b/code/_onclick/hud/ability_screen_objects.dm index 2081e011b3..d29ef9dd96 100644 --- a/code/_onclick/hud/ability_screen_objects.dm +++ b/code/_onclick/hud/ability_screen_objects.dm @@ -20,7 +20,7 @@ message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.") /obj/screen/movable/ability_master/Destroy() - ..() + . = ..() //Get rid of the ability objects. remove_all_abilities() ability_objects.Cut() diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 9781e9c236..7e03151fd6 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -30,6 +30,9 @@ /datum/action/Destroy() if(owner) Remove(owner) + target = null + qdel_null(button) + return ..() /datum/action/proc/Grant(mob/living/T) if(owner) @@ -45,7 +48,7 @@ if(button) if(T.client) T.client.screen -= button - del(button) + qdel_null(button) T.actions.Remove(src) T.update_action_buttons() owner = null diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 45c6f7e277..0f6990f681 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -155,7 +155,7 @@ datum/hud/New(mob/owner) ..() /datum/hud/Destroy() - ..() + . = ..() grab_intent = null hurt_intent = null disarm_intent = null diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index e55323fb3a..35ef300978 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -46,7 +46,7 @@ var/obj/item/owner /obj/screen/item_action/Destroy() - ..() + . = ..() owner = null /obj/screen/item_action/Click() diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm index a599381730..e79db28713 100644 --- a/code/_onclick/hud/spell_screen_objects.dm +++ b/code/_onclick/hud/spell_screen_objects.dm @@ -13,7 +13,7 @@ var/mob/spell_holder /obj/screen/movable/spell_master/Destroy() - ..() + . = ..() for(var/obj/screen/spell/spells in spell_objects) spells.spellmaster = null spell_objects.Cut() @@ -156,7 +156,7 @@ var/icon/last_charged_icon /obj/screen/spell/Destroy() - ..() + . = ..() spell = null last_charged_icon = null if(spellmaster) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 796fb0b664..332ab9af52 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -314,7 +314,6 @@ var/global/datum/controller/radio/radio_controller devices_line -= null if (devices_line.len==0) devices -= devices_filter - del(devices_line) /datum/signal var/obj/source diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index aa06984f69..ba1bb23c33 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -23,9 +23,15 @@ var/global/list/round_voters = list() // Keeps track of the individuals voting f /datum/controller/vote/New() if(vote != src) if(istype(vote)) - del(vote) + Recover() + qdel(vote) vote = src +/datum/controller/vote/Destroy() + ..() + // Tell qdel() to Del() this object. + return QDEL_HINT_HARDDEL_NOW + /datum/controller/vote/proc/process() //called by master_controller if(mode) // No more change mode votes after the game has started. diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 066c357a22..c1ee225dce 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -48,6 +48,7 @@ var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown" /datum/wires/Destroy() holder = null + signallers.Cut() return ..() /datum/wires/proc/GenerateWires() diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 805bb7dba9..ba8aa85b2c 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -145,7 +145,7 @@ obj/machinery/door/airlock/New() obj/machinery/door/airlock/Destroy() if(frequency && radio_controller) radio_controller.remove_object(src,frequency) - ..() + return ..() obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' @@ -220,7 +220,7 @@ obj/machinery/airlock_sensor/New() obj/machinery/airlock_sensor/Destroy() if(radio_controller) radio_controller.remove_object(src,frequency) - ..() + return ..() obj/machinery/airlock_sensor/airlock_interior command = "cycle_interior" @@ -292,7 +292,7 @@ obj/machinery/access_button/New() obj/machinery/access_button/Destroy() if(radio_controller) radio_controller.remove_object(src, frequency) - ..() + return ..() obj/machinery/access_button/airlock_interior frequency = 1379 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 158b718e83..e0156196d6 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -202,7 +202,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/Destroy() for (var/mob/living/silicon/ai/master in masters) clear_holo(master) - ..() + return ..() /* Holographic project of everything else. diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 40726825a1..c960879e54 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -23,9 +23,8 @@ update_icon() /obj/machinery/pipelayer/Destroy() - qdel(W) - W = null - ..() + qdel_null(W) + . = ..() /obj/machinery/pipelayer/RefreshParts() var/mb_rating = 0 diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 8dfe627030..c963a902bb 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -21,11 +21,6 @@ if(can_buckle && istype(M)) user_buckle_mob(M, user) -//Cleanup -/obj/Del() - unbuckle_mob() - return ..() - /obj/Destroy() unbuckle_mob() return ..() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 88f69d8011..7f1d83cc4a 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1470,8 +1470,12 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/Destroy() PDAs -= src if (src.id && prob(90)) //IDs are kept in 90% of the cases - src.id.loc = get_turf(src.loc) - ..() + src.id.forceMove(get_turf(src.loc)) + else + qdel_null(src.id) + qdel_null(src.cartridge) + qdel_null(src.pai) + return ..() /obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery. if (istype(AM, /mob/living)) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 2c4368736e..c53ba712db 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -78,6 +78,10 @@ var/list/civilian_cartridges = list( var/message2 var/list/stored_data = list() +/obj/item/weapon/cartridge/Destroy() + qdel_null(radio) + return ..() + /obj/item/weapon/cartridge/engineering name = "\improper Power-ON cartridge" icon_state = "cart-e" @@ -164,10 +168,6 @@ var/list/civilian_cartridges = list( radio = new /obj/item/radio/integrated/signal(src) ..() -/obj/item/weapon/cartridge/signal/Destroy() - qdel(radio) - ..() - /obj/item/weapon/cartridge/quartermaster name = "\improper Space Parts & Space Vendors cartridge" desc = "Perfect for the Quartermaster on the go!" diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 018be58705..8630d6a602 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -803,7 +803,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(exonet) exonet.remove_address() exonet = null - ..() + return ..() // Proc: update_icon() // Parameters: None diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 8e9a72d203..106d144834 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -96,7 +96,7 @@ /obj/item/device/radio/intercom/Destroy() processing_objects -= src - ..() + return ..() /obj/item/device/radio/intercom/attack_ai(mob/user as mob) src.add_fingerprint(user) diff --git a/code/game/objects/items/weapons/material/material_armor.dm b/code/game/objects/items/weapons/material/material_armor.dm index 1041fb5d1f..990ae37659 100644 --- a/code/game/objects/items/weapons/material/material_armor.dm +++ b/code/game/objects/items/weapons/material/material_armor.dm @@ -42,7 +42,7 @@ Protectiveness | Armor % /obj/item/clothing/Destroy() processing_objects -= src - ..() + return ..() /obj/item/clothing/get_material() return material diff --git a/code/game/objects/items/weapons/mop_deploy.dm b/code/game/objects/items/weapons/mop_deploy.dm index 8baab87528..30a6991a53 100644 --- a/code/game/objects/items/weapons/mop_deploy.dm +++ b/code/game/objects/items/weapons/mop_deploy.dm @@ -26,7 +26,7 @@ T.dirt = 0 for(var/obj/effect/O in src) if(istype(O,/obj/effect/rune) || istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay)) - del(O) + qdel(O) /* //Reagent code changed at some point and the below doesn't work. To be fixed later. source.reagents.reaction(src, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. source.reagents.remove_any(1) //reaction() doesn't use up the reagents @@ -47,16 +47,16 @@ return ..() -/obj/item/weapon/mop_deploy/Del() +/obj/item/weapon/mop_deploy/Destroy() processing_objects -= src - ..() + . = ..() /obj/item/weapon/mop_deploy/attack_self(mob/user as mob) user.drop_from_inventory(src) - spawn(1) if(src) del(src) + spawn(1) if(!QDELETED(src)) qdel(src) /obj/item/weapon/mop_deploy/dropped() - spawn(1) if(src) del(src) + spawn(1) if(!QDELETED(src)) qdel(src) /obj/item/weapon/mop_deploy/process() if(!creator || loc != creator || !creator.item_is_in_hands(src)) @@ -71,4 +71,4 @@ host.pinned -= src host.embedded -= src host.drop_from_inventory(src) - spawn(1) if(src) del(src) \ No newline at end of file + spawn(1) if(!QDELETED(src)) qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 8d1898fe4b..1f1a5f6963 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -12,7 +12,7 @@ /obj/item/weapon/storage/internal/Destroy() master_item = null - ..() + . = ..() /obj/item/weapon/storage/internal/attack_hand() return //make sure this is never picked up diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 3846a44d2b..db55e95b44 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -38,15 +38,15 @@ /obj/item/weapon/storage/Destroy() close_all() - qdel(boxes) - qdel(src.storage_start) - qdel(src.storage_continue) - qdel(src.storage_end) - qdel(src.stored_start) - qdel(src.stored_continue) - qdel(src.stored_end) - qdel(closer) - ..() + qdel_null(boxes) + qdel_null(src.storage_start) + qdel_null(src.storage_continue) + qdel_null(src.storage_end) + qdel_null(src.stored_start) + qdel_null(src.stored_continue) + qdel_null(src.stored_end) + qdel_null(closer) + . = ..() /obj/item/weapon/storage/MouseDrop(obj/over_object as obj) if(!canremove) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 57a5cf06a4..b8daa05d7f 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -44,8 +44,7 @@ var/list/global/tank_gauge_cache = list() return /obj/item/weapon/tank/Destroy() - if(air_contents) - qdel(air_contents) + qdel_null(air_contents) processing_objects.Remove(src) @@ -53,7 +52,7 @@ var/list/global/tank_gauge_cache = list() var/obj/item/device/transfer_valve/TTV = loc TTV.remove_tank(src) - ..() + return ..() /obj/item/weapon/tank/examine(mob/user) . = ..(user, 0) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index eab315809f..b41743799b 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -49,9 +49,6 @@ if(climbable) verbs += /obj/structure/proc/climb_on -/obj/structure/Destroy() - ..() - /obj/structure/proc/climb_on() set name = "Climb structure" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 809dd008a4..9175ddc28c 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -355,12 +355,9 @@ density = 0 update_nearby_tiles() var/turf/location = loc - loc = null + . = ..() for(var/obj/structure/window/W in orange(location, 1)) W.update_icon() - loc = location - ..() - /obj/structure/window/Move() var/ini_dir = dir diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index cec738479e..583f491d5e 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -477,7 +477,7 @@ for(var/obj/item/weapon/mop_deploy/blade in M.contents) M.drop_from_inventory(blade) - del(blade) + qdel(blade) //Space Cleaner Launcher @@ -520,7 +520,7 @@ user << "You slot \the [input_device] into the suit module." user.drop_from_inventory(input_device) - del(input_device) + qdel(input_device) accepted_item.charges++ return 1 diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 63ce123253..088c53e521 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -131,3 +131,9 @@ /datum/lighting_corner/dummy/New() return + +/datum/lighting_corner/Destroy(var/force) + if (!force) + return QDEL_HINT_LETMELIVE + crash_with("Who decided to force qdel() a lighting corner? Why did you do this?") + return ..() diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index 6d912cd862..690eba9326 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -39,7 +39,7 @@ log_debug("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : "null"]) in update_overlay() and got qdel'ed!") else log_debug("A lighting overlay realised it was in nullspace in update_overlay() and got pooled!") - qdel(src) + qdel(src, force=TRUE) return // To the future coder who sees this and thinks @@ -121,14 +121,17 @@ /atom/movable/lighting_overlay/throw_at() return 0 -/atom/movable/lighting_overlay/Destroy() - total_lighting_overlays-- - global.lighting_update_overlays -= src - global.lighting_update_overlays_old -= src +/atom/movable/lighting_overlay/Destroy(var/force) + if (force) + total_lighting_overlays-- + global.lighting_update_overlays -= src + global.lighting_update_overlays_old -= src - var/turf/T = loc - if(istype(T)) - T.lighting_overlay = null - T.luminosity = 1 + var/turf/T = loc + if(istype(T)) + T.lighting_overlay = null + T.luminosity = 1 - . = ..() + return ..() + else + return QDEL_HINT_LETMELIVE diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index 62f0d93152..a1c28a4af3 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -59,7 +59,7 @@ /mob/living/silicon/ai/Destroy() destroy_eyeobj() - ..() + return ..() /atom/proc/move_camera_by_click() if(istype(usr, /mob/living/silicon/ai)) diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index f4fea0aa58..5c21c6784d 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -59,7 +59,7 @@ /obj/machinery/camera/Destroy() clear_all_networks() cameranet.cameras -= src - ..() + return ..() // Mobs /mob/living/silicon/ai/rejuvenate() diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm index 0c38ad8033..ff8681d128 100644 --- a/code/modules/mob/freelook/eye.dm +++ b/code/modules/mob/freelook/eye.dm @@ -38,7 +38,11 @@ mob/observer/eye/Destroy() qdel(ghostimage) ghostimage = null updateallghostimages() - ..() + if(owner) + if(owner.eyeobj == src) + owner.eyeobj = null + owner = null + . = ..() /mob/observer/eye/Move(n, direct) if(owner == src) diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 1142367164..1dd520e7f1 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -25,7 +25,7 @@ /mob/living/Destroy() cultnet.updateVisibility(src, 0) - ..() + return ..() /mob/living/rejuvenate() var/was_dead = stat == DEAD diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index 8408083ba8..482025426e 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -15,7 +15,7 @@ /turf/simulated/Destroy() updateVisibility(src) - ..() + return ..() /turf/simulated/New() ..() @@ -26,7 +26,7 @@ /obj/structure/Destroy() updateVisibility(src) - ..() + return ..() /obj/structure/New() ..() diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 24ad252eda..0d53d1e48a 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -14,7 +14,7 @@ /datum/visualnet/Destroy() visual_nets -= src - ..() + return ..() // Checks if a chunk has been Generated in x, y, z. /datum/visualnet/proc/chunkGenerated(x, y, z) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 1998e7fe65..5d0796f77c 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -27,7 +27,7 @@ var/list/holder_mob_icon_cache = list() /obj/item/weapon/holder/Destroy() processing_objects.Remove(src) - ..() + return ..() /obj/item/weapon/holder/process() update_state() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 8583521f85..a22011e8ab 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -215,20 +215,15 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c /mob/living/silicon/ai/Destroy() ai_list -= src - qdel(eyeobj) - eyeobj = null - - qdel(psupply) - psupply = null - - qdel(aiMulti) - aiMulti = null - - qdel(aiRadio) - aiRadio = null - - qdel(aiCamera) - aiCamera = null + qdel_null(announcement) + qdel_null(eyeobj) + qdel_null(psupply) + qdel_null(aiPDA) + qdel_null(aiCommunicator) + qdel_null(aiMulti) + qdel_null(aiRadio) + qdel_null(aiCamera) + hack = null return ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 40b1852528..b74b7d6cf7 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -41,7 +41,7 @@ silicon_mob_list -= src for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) AH.unregister_alarm(src) - ..() + return ..() /mob/living/silicon/proc/init_id() if(idcard) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3ad6260813..0e121e1481 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -195,7 +195,7 @@ friends.Cut() //This one is not walk_list.Cut() languages.Cut() - ..() + return ..() //Client attached /mob/living/simple_animal/Login() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index be114228de..890ff2e873 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -393,9 +393,6 @@ /obj/item/weapon/grab/proc/size_difference(mob/A, mob/B) return mob_size_difference(A.mob_size, B.mob_size) -/obj/item/weapon/grab - var/destroying = 0 - /obj/item/weapon/grab/Destroy() animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING) affecting.layer = 4 @@ -408,5 +405,4 @@ assailant = null qdel(hud) hud = null - destroying = 1 // stops us calling qdel(src) on dropped() - ..() + return ..() diff --git a/code/modules/mob/modifiers.dm b/code/modules/mob/modifiers.dm index f67ffc374b..0b39c9e275 100644 --- a/code/modules/mob/modifiers.dm +++ b/code/modules/mob/modifiers.dm @@ -73,7 +73,7 @@ /mob/living/Destroy() remove_all_modifiers(TRUE) - ..() + return ..() // Called by Life(). /mob/living/proc/handle_modifiers() diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index e133f82e6e..2b10a9017d 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -20,7 +20,7 @@ var/update_locked = 0 /obj/machinery/power/breakerbox/Destroy() - ..() + . = ..() for(var/datum/nano_module/rcon/R in world) R.FindDevices() diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 2d53277590..ebfa533086 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -108,7 +108,7 @@ var/list/possible_cable_coil_colours = list( if(powernet) cut_cable_from_powernet() // update the powernets cable_list -= src //remove it from global cable list - ..() // then go ahead and delete the cable + return ..() // then go ahead and delete the cable // Ghost examining the cable -> tells him the power /obj/structure/cable/attack_ghost(mob/user) diff --git a/code/modules/power/grid_checker.dm b/code/modules/power/grid_checker.dm index 4d42d4ca3f..b8a123e02f 100644 --- a/code/modules/power/grid_checker.dm +++ b/code/modules/power/grid_checker.dm @@ -28,7 +28,7 @@ /obj/machinery/power/grid_checker/Destroy() qdel(wires) wires = null - ..() + return ..() /obj/machinery/power/grid_checker/update_icon() if(power_failing) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 09921cf58b..850d7a84aa 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -248,7 +248,7 @@ if(A) on = 0 // A.update_lights() - ..() + return ..() /obj/machinery/light/update_icon() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 13213c2e7e..76320db479 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -19,7 +19,7 @@ disconnect_from_network() disconnect_terminal() - ..() + return ..() /////////////////////////////// // General procedures diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 47a9c08923..53e3dc29c9 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -23,7 +23,7 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/Destroy() rad_collectors -= src - ..() + return ..() /obj/machinery/power/rad_collector/process() //so that we don't zero out the meter if the SM is processed first. diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 12540c2d04..b6c45475cc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -205,7 +205,7 @@ if(holder && holder.my_atom && ismob(holder.my_atom)) var/mob/M = holder.my_atom M.status_flags &= ~FAKEDEATH - ..() + return ..() /datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers. name = "fertilizer" diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm index a90e3eeb8a..b7c087f9c0 100644 --- a/code/modules/tables/update_triggers.dm +++ b/code/modules/tables/update_triggers.dm @@ -6,12 +6,10 @@ /obj/structure/window/Destroy() var/oldloc = loc - loc=null + . = ..() for(var/obj/structure/table/T in view(oldloc, 1)) T.update_connections() T.update_icon() - loc=oldloc - ..() /obj/structure/window/Move() var/oldloc = loc diff --git a/code/world.dm b/code/world.dm index 8d51f84b47..a11d875c51 100644 --- a/code/world.dm +++ b/code/world.dm @@ -26,7 +26,8 @@ var/global/datum/global_init/init = new () qdel(src) //we're done /datum/global_init/Destroy() - return 1 + global.init = null + return 2 // QDEL_HINT_IWILLGC /world mob = /mob/new_player diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm index fa20f440ec..0ebf12f169 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/maps/RandomZLevels/stationCollision.dm @@ -54,7 +54,7 @@ B.item_state = "melted" new /obj/item/weapon/paper/sc_safehint_paper_bible(B) new /obj/item/weapon/pen(B) - del(src) + qdel(src) /* * Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map. @@ -189,7 +189,7 @@ var/sc_safecode5 = "[rand(0,9)]" else if(istype(A,/obj/)) var/obj/O = A O.ex_act(1.0) - if(O) del(O) + if(O) qdel(O) else if(isturf(A)) var/turf/T = A if(T.intact) diff --git a/maps/RandomZLevels/wildwest.dm b/maps/RandomZLevels/wildwest.dm index b3ae83b9d7..51ac498fb2 100644 --- a/maps/RandomZLevels/wildwest.dm +++ b/maps/RandomZLevels/wildwest.dm @@ -133,7 +133,7 @@ s.start() explosion(mob, 1, 0, 0, 0) spawn(0) - del(src) + qdel(src) /obj/effect/meatgrinder name = "Meat Grinder" diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 1a575b3578..65797ebafa 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -161,5 +161,10 @@ var/list/all_maps = list() if(transit_chance) map.accessible_z_levels["[z]"] = transit_chance -/datum/map_z_level/Destroy() - return TRUE // No. +/datum/map_z_level/Destroy(var/force) + crash_with("Attempt to delete a map_z_level instance [log_info_line(src)]") + if(!force) + return QDEL_HINT_LETMELIVE // No. + if (using_map.zlevels["[z]"] == src) + using_map.zlevels -= "[z]" + return ..() From 50accd426c6b264d25bac206043eb5c8a3af93bc Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 3 Jun 2017 00:35:48 -0400 Subject: [PATCH 112/261] Initial NIF Commit --- .../mob/living/carbon/human/examine_vr.dm | 28 ++++-- code/modules/mob/living/carbon/human/life.dm | 6 +- .../mob/living/carbon/human/life_vr.dm | 6 ++ code/modules/surgery/implant.dm | 2 + code/modules/vore/persist/persist_vr.dm | 90 +++++++++++------- icons/obj/device_alt.dmi | Bin 54134 -> 54630 bytes icons/obj/vending_vr.dmi | Bin 62894 -> 67287 bytes vorestation.dme | 7 ++ 8 files changed, 92 insertions(+), 47 deletions(-) diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index 1d6d77c5ab..a9b6390782 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -114,15 +114,23 @@ //For OmniHUD records access for appropriate models /proc/hasHUD_vr(mob/living/carbon/human/H, hudtype) - if(!(istype(H.glasses, /obj/item/clothing/glasses/omnihud))) - return 0 //Not wearing omnis, don't care. + if(H.nif) + switch(hudtype) + if("security") + if(H.nif.flag_check(NIF_V_AR_SECURITY,NIF_FLAGS_VISION)) + return TRUE + if("medical") + if(H.nif.flag_check(NIF_V_AR_MEDICAL,NIF_FLAGS_VISION)) + return TRUE - var/obj/item/clothing/glasses/omnihud/omni = H.glasses + if(istype(H.glasses, /obj/item/clothing/glasses/omnihud)) + var/obj/item/clothing/glasses/omnihud/omni = H.glasses + switch(hudtype) + if("security") + if(omni.mode == "sec" || omni.mode == "best") + return TRUE + if("medical") + if(omni.mode == "med" || omni.mode == "best") + return TRUE - switch(hudtype) - if("security") - return omni.mode == "sec" || omni.mode == "best" - if("medical") - return omni.mode == "med" || omni.mode == "best" - else - return 0 \ No newline at end of file + return FALSE diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a0cfc6f0a8..753cf3255e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -82,7 +82,7 @@ handle_medical_side_effects() handle_heartbeat() - + handle_nif() //VOREStation Add if(!client) species.handle_npc(src) @@ -1336,10 +1336,10 @@ var/obj/item/clothing/glasses/omnihud/S = G O = S.hud //VOREStation Add End - if(istype(G, /obj/item/clothing/glasses/sunglasses/sechud)) + else if(istype(G, /obj/item/clothing/glasses/sunglasses/sechud)) //VOREStation Edit - Added else var/obj/item/clothing/glasses/sunglasses/sechud/S = G O = S.hud - if(istype(G, /obj/item/clothing/glasses/sunglasses/medhud)) + else if(istype(G, /obj/item/clothing/glasses/sunglasses/medhud)) //VOREStation Edit - Added else var/obj/item/clothing/glasses/sunglasses/medhud/M = G O = M.hud if(istype(O)) diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm index 9e655d2672..a04232c401 100644 --- a/code/modules/mob/living/carbon/human/life_vr.dm +++ b/code/modules/mob/living/carbon/human/life_vr.dm @@ -43,3 +43,9 @@ vantag.icon_state = vantag_pref else vantag.icon_state = "hudblank" + +/mob/living/carbon/human/proc/handle_nif() + if(!nif) return + + //Process regular life stuff + nif.life() \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 3e49482c75..8c2fbfbbc0 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -136,6 +136,7 @@ user.drop_item() affected.implants += tool tool.loc = affected + if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.implant(target)} //VOREStation Add - NIF support affected.cavity = 0 ////////////////////////////////////////////////////////////////// @@ -207,6 +208,7 @@ var/obj/item/weapon/implant/imp = obj imp.imp_in = null imp.implanted = 0 + else if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.unimplant(target)} //VOREStation Add - NIF support else user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index a6ff22d4e4..977473812a 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -35,6 +35,32 @@ persist_interround_data(Player, /datum/spawnpoint/cryo) return 1 +/** + * Prep for save: returns a preferences object if we're ready and allowed to save this mob. + */ +/proc/prep_for_persist(var/mob/persister) + ASSERT(istype(persister)) + + // Find out of this mob is a proper mob! + if (persister.mind && persister.mind.loaded_from_ckey) + // Okay this mob has a real loaded-from-savefile mind in it! + var/datum/preferences/prefs = preferences_datums[persister.mind.loaded_from_ckey] + if(!prefs) + WARNING("mind [persister.mind] was loaded from ckey [persister.mind.loaded_from_ckey] but no prefs datum found") + return + + // Okay, lets do a few checks to see if we should really save tho! + if(!prefs.load_character(persister.mind.loaded_from_slot)) + WARNING("mind [persister.mind] was loaded from slot [persister.mind.loaded_from_slot] but loading prefs failed.") + return // Failed to load character + + // For now as a safety measure we will only save if the name matches. + if(prefs.real_name != persister.real_name) + log_debug("Skipping persist for [persister] becuase [persister.real_name] != [prefs.real_name]") + return + + return prefs + /** * Called when mob despawns early (via cryopod)! */ @@ -47,42 +73,28 @@ /proc/persist_interround_data(var/mob/occupant, var/datum/spawnpoint/new_spawn_point_type) ASSERT(istype(occupant)) - // Find out of this mob is a proper mob! - if (occupant.mind && occupant.mind.loaded_from_ckey) - // Okay this mob has a real loaded-from-savefile mind in it! - var/datum/preferences/prefs = preferences_datums[occupant.mind.loaded_from_ckey] - if(!prefs) - WARNING("mind [occupant.mind] was loaded from ckey [occupant.mind.loaded_from_ckey] but no prefs datum found") - return + var/datum/preferences/prefs = prep_for_persist(occupant) + if(!prefs) + WARNING("persist_interround_data failed to prep [occupant] for persisting") + return - // Okay, lets do a few checks to see if we should really save tho! - if(!prefs.load_character(occupant.mind.loaded_from_slot)) - WARNING("mind [occupant.mind] was loaded from slot [occupant.mind.loaded_from_slot] but loading prefs failed.") - return // Failed to load character + if(!prefs.persistence_settings) + return // Persistence disabled by preference settings - // For now as a safety measure we will only save if the name matches. - if(prefs.real_name != occupant.real_name) - log_debug("Skipping persist for [occupant] becuase [occupant.real_name] != [prefs.real_name]") - return - - if(!prefs.persistence_settings) - return // Persistence disabled by preference settings - - // Okay we can start saving the data - if(new_spawn_point_type && prefs.persistence_settings & PERSIST_SPAWN) - prefs.spawnpoint = initial(new_spawn_point_type.display_name) - if(ishuman(occupant) && occupant.stat != DEAD) - var/mob/living/carbon/human/H = occupant - testing("About to try saving stuff from [H] to [prefs] (\ref[prefs])") - if(prefs.persistence_settings & PERSIST_ORGANS) - apply_organs_to_prefs(H, prefs) - if(prefs.persistence_settings & PERSIST_MARKINGS) - apply_markings_to_prefs(H, prefs) - if(prefs.persistence_settings & PERSIST_WEIGHT) - resolve_excess_nutrition(H) - prefs.weight_vr = H.weight - prefs.save_character() - return + // Okay we can start saving the data + if(new_spawn_point_type && prefs.persistence_settings & PERSIST_SPAWN) + prefs.spawnpoint = initial(new_spawn_point_type.display_name) + if(ishuman(occupant) && occupant.stat != DEAD) + var/mob/living/carbon/human/H = occupant + testing("About to try saving stuff from [H] to [prefs] (\ref[prefs])") + if(prefs.persistence_settings & PERSIST_ORGANS) + apply_organs_to_prefs(H, prefs) + if(prefs.persistence_settings & PERSIST_MARKINGS) + apply_markings_to_prefs(H, prefs) + if(prefs.persistence_settings & PERSIST_WEIGHT) + resolve_excess_nutrition(H) + prefs.weight_vr = H.weight + prefs.save_character() // Saves mob's current coloration state to prefs // This basically needs to be the reverse of /datum/category_item/player_setup_item/general/body/copy_to_mob() ~Leshana @@ -194,3 +206,13 @@ // Weight Loss! var/loss = (MAX_NUTRITION_TO_LOSE - C.nutrition) * weight_per_nutrition * C.weight_loss/100 C.weight = max(MIN_MOB_WEIGHT, C.weight - loss) + +/** +* Persist any NIF data that needs to be persisted. It's stored in a list to make it more malleable +* towards future shenanigans such as upgradable NIFs or different types or things of that nature, +* without invoking the need for a bunch of different save file variables. +*/ +/proc/persist_nif_data(var/mob/living/carbon/human/H) + if(!istype(H)) + CRASH("persist_nif_data given a nonhuman: [H]") + diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index fed11b212b275f656fdeaf9796f2e98a739a018c..e434cfb7ac01894ee75a512cc54237a3467628b6 100644 GIT binary patch delta 14029 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 Tw4w+=f397*dAV5ABH(`jJvCUv delta 13529 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 diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi index 1feb5f36c55e76a8a6e91ff26f6305bc351b4e81..7d71132986ffbedefd210283f7fd41a7a4938c21 100644 GIT binary patch literal 67287 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

    NJ}|LV@2qt>lPC8=9Wa&3p0iC>4x-37kF* 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 Date: Sat, 3 Jun 2017 00:36:03 -0400 Subject: [PATCH 113/261] Polaris-able surgery fix --- code/modules/surgery/implant.dm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 8c2fbfbbc0..5b26489049 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -13,22 +13,22 @@ return affected && affected.open == (affected.encased ? 3 : 2) && !(affected.status & ORGAN_BLEEDING) proc/get_max_wclass(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") - return 1 - if ("upper body") - return 3 - if ("lower body") - return 2 + switch (affected.organ_tag) + if (BP_HEAD) + return ITEMSIZE_TINY + if (BP_TORSO) + return ITEMSIZE_NORMAL + if (BP_GROIN) + return ITEMSIZE_SMALL return 0 proc/get_cavity(var/obj/item/organ/external/affected) - switch (affected.name) - if ("head") + switch (affected.organ_tag) + if (BP_HEAD) return "cranial" - if ("upper body") + if (BP_TORSO) return "thoracic" - if ("lower body") + if (BP_GROIN) return "abdominal" return "" From 58ee6891f2b668293c7882bac295312da33b3a21 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sat, 3 Jun 2017 00:55:01 -0400 Subject: [PATCH 114/261] Additional Work on NIFs Squashed commits: [9563a9a] All the stuff I forgot to commit --- code/ZAS/Phoron.dm | 4 + code/__defines/nifsoft.dm | 103 ++++ code/game/objects/items/devices/flash.dm | 10 +- code/game/objects/items/weapons/tools.dm | 1 + code/modules/mob/living/carbon/breathe.dm | 7 + code/modules/mob/living/carbon/carbon.dm | 1 + .../mob/living/carbon/human/human_organs.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 3 +- .../mob/living/carbon/human/life_vr.dm | 3 +- code/modules/nifsoft/nif.dm | 481 ++++++++++++++++++ code/modules/nifsoft/nif_softshop.dm | 111 ++++ code/modules/nifsoft/nif_statpanel.dm | 77 +++ code/modules/nifsoft/nifsoft.dm | 110 ++++ code/modules/nifsoft/software/01_vision.dm | 253 +++++++++ code/modules/nifsoft/software/05_health.dm | 184 +++++++ code/modules/nifsoft/software/10_combat.dm | 7 + code/modules/nifsoft/software/15_misc.dm | 9 + code/modules/organs/organ_external.dm | 2 +- icons/obj/device_alt.dmi | Bin 54630 -> 54974 bytes icons/obj/vending_vr.dmi | Bin 67287 -> 67288 bytes vorestation.dme | 6 +- 21 files changed, 1368 insertions(+), 7 deletions(-) create mode 100644 code/__defines/nifsoft.dm create mode 100644 code/modules/nifsoft/nif.dm create mode 100644 code/modules/nifsoft/nif_softshop.dm create mode 100644 code/modules/nifsoft/nif_statpanel.dm create mode 100644 code/modules/nifsoft/nifsoft.dm create mode 100644 code/modules/nifsoft/software/01_vision.dm create mode 100644 code/modules/nifsoft/software/05_health.dm create mode 100644 code/modules/nifsoft/software/10_combat.dm create mode 100644 code/modules/nifsoft/software/15_misc.dm diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index acee6a8b65..1f7ed8c04a 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -117,6 +117,10 @@ obj/var/phoronproof = 0 if(burn_eyes && head && (head.body_parts_covered & EYES) && (head.item_flags & AIRTIGHT)) burn_eyes = 0 + //VOREStation Edit - NIF Support + if(nif && nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) + burn_eyes = 0 + //If we still need to, burn their eyes if(burn_eyes) burn_eyes() diff --git a/code/__defines/nifsoft.dm b/code/__defines/nifsoft.dm new file mode 100644 index 0000000000..e4d4f12293 --- /dev/null +++ b/code/__defines/nifsoft.dm @@ -0,0 +1,103 @@ +// List indexes for software datum references on mobs +// This also controls the order they are displayed in the NIF stat panel +//AR Overlays +#define NIF_CIVILIAN_AR 1 +#define NIF_MEDICAL_AR 2 +#define NIF_SECURITY_AR 3 +#define NIF_ENGINE_AR 4 +#define NIF_SCIENCE_AR 5 +#define NIF_OMNI_AR 6 +//Misc Vision +#define NIF_CORRECTIVE_GLASS 7 +#define NIF_MESONS 8 +#define NIF_MATERIAL 9 +#define NIF_THERMALS 10 +#define NIF_NIGHTVIS 11 +#define NIF_UVFILTER 12 +#define NIF_FLASHPROT 13 +//Health-related +#define NIF_ORGANIC_HEAL 14 +#define NIF_SYNTH_HEAL 15 +#define NIF_AUTOSTASIS 16 //These two are just part of +#define NIF_MED_ALARM 17 //medichines right now +#define NIF_TOXHEAL 18 +#define NIF_SPAREBREATH 19 +//Combat Related +#define NIF_BRUTEARMOR 20 +#define NIF_BURNARMOR 21 +#define NIF_PAINKILLERS 22 +#define NIF_HARDCLAWS 23 +#define NIF_HIDDENLASER 24 +//Other +#define NIF_COMMLINK 25 +#define NIF_SUITSENSORS 26 +#define NIF_APCCHARGE 27 +#define NIF_PRESSURE 28 +#define NIF_HEATSINK 29 + +// Must be equal to the highest number above +#define TOTAL_NIF_SOFTWARE 29 + +////////////////////// +// NIF flag list hints +#define NIF_FLAGS_VISION 1 +#define NIF_FLAGS_HEALTH 2 +#define NIF_FLAGS_COMBAT 3 +#define NIF_FLAGS_OTHER 4 + +// NIF flags +//Vision +#define NIF_V_AR_CIVILIAN 0x1 +#define NIF_V_AR_MEDICAL 0x2 +#define NIF_V_AR_SECURITY 0x4 +#define NIF_V_AR_ENGINE 0x8 +#define NIF_V_AR_SCIENCE 0x10 +#define NIF_V_AR_OMNI 0x20 +#define NIF_V_CORRECTIVE 0x40 +#define NIF_V_MESONS 0x80 +#define NIF_V_MATERIAL 0x100 +#define NIF_V_THERMALS 0x200 +#define NIF_V_NIGHTVIS 0x400 +#define NIF_V_UVFILTER 0x800 +#define NIF_V_FLASHPROT 0x1000 + +//Health +#define NIF_H_ORGREPAIR 0x1 +#define NIF_H_SYNTHREPAIR 0x2 +#define NIF_H_AUTOSTASIS 0x4 //These two are just part of +#define NIF_H_ALERTMED 0x8 //medichines right now +#define NIF_H_TOXREGEN 0x10 +#define NIF_H_SPAREBREATH 0x20 + +//Combat +#define NIF_C_BRUTEARMOR 0x1 +#define NIF_C_BURNARMOR 0x2 +#define NIF_C_PAINKILLERS 0x4 +#define NIF_C_HARDCLAWS 0x8 +#define NIF_C_HIDELASER 0x10 + +//Other +#define NIF_O_COMMLINK 0x1 +#define NIF_O_SENSORS 0x2 +#define NIF_O_APCCHARGE 0x4 +#define NIF_O_PRESSURESEAL 0x8 +#define NIF_O_HEATSINKS 0x10 + +/////////////////// +// applies_to flags +#define NIF_ORGANIC 0x1 +#define NIF_SYNTHETIC 0x2 + +///////////// +// stat flags +#define NIF_WORKING 0 +#define NIF_POWFAIL 1 +#define NIF_TEMPFAIL 2 +#define NIF_INSTALLING 3 +#define NIF_PREINSTALL 4 + +/////////////////// +// tick_flags flags +#define NIF_NEVERTICK 0 +#define NIF_ALWAYSTICK 1 +#define NIF_ACTIVETICK 2 diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 632f9afdfd..758678bed9 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -81,7 +81,15 @@ playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1) var/flashfail = 0 - if(iscarbon(M)) + //VOREStation Add - NIF + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION)) + flashfail = 1 + H.nif.notify("High intensity light detected, and blocked!",TRUE) + //VOREStation Add End + + if(iscarbon(M) && !flashfail) //VOREStation Add - NIF var/mob/living/carbon/C = M if(C.stat != DEAD) var/safety = C.eyecheck() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 8c4067187f..555488cd89 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -376,6 +376,7 @@ var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] if(!E) return + if(H.nif && H.nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) return //VOREStation Add - NIF switch(safety) if(1) usr << "Your eyes sting a little." diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index 354a26221c..403088dc4b 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -22,6 +22,13 @@ else //Okay, we can breathe, now check if we can get air breath = get_breath_from_internal() //First, check for air from internals + //VOREStation Add - Respirocytes as a NIF implant + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.nif && H.nif.flag_check(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH)) + var/datum/nifsoft/spare_breath/SB = H.nif.imp_check(NIF_SPAREBREATH) + breath = SB.resp_breath() + //VOREStation Add End if(!breath) breath = get_breath_from_environment() //No breath from internals so let's try to get air from our location if(!breath) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 47da8c88f8..47e12f3f6d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -254,6 +254,7 @@ src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) src.resting = 0 + if(H) H.in_stasis = 0 //VOREStation Add - Just In Case M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ "You shake [src] trying to wake [t_him] up!") else diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 4fa6ae1117..4331b05407 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -32,7 +32,7 @@ if(force_process) bad_external_organs.Cut() for(var/obj/item/organ/external/Ex in organs) - bad_external_organs |= Ex + bad_external_organs += Ex //VOREStation Edit - Silly and slow to |= this //processing internal organs is pretty cheap, do that first. for(var/obj/item/organ/I in internal_organs) @@ -44,6 +44,7 @@ if(!force_process && !bad_external_organs.len) return + number_wounds = 0 //VOREStation Add - You have to reduce this at some point... for(var/obj/item/organ/external/E in bad_external_organs) if(!E) continue diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 753cf3255e..75d598fb69 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1267,7 +1267,7 @@ var/obj/item/clothing/glasses/G = glasses if(!G.prescription) set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - else + else if (!nif || !nif.flag_check(NIF_V_CORRECTIVE,NIF_FLAGS_VISION)) //VOREStation Edit - NIF set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) @@ -1282,6 +1282,7 @@ var/obj/item/clothing/glasses/welding/O = glasses if(!O.up) found_welder = 1 + if(!found_welder && nif && nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) found_welder = 1 //VOREStation Add - NIF if(!found_welder && istype(head, /obj/item/clothing/head/welding)) var/obj/item/clothing/head/welding/O = head if(!O.up) diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm index a04232c401..0a3d2fcb3f 100644 --- a/code/modules/mob/living/carbon/human/life_vr.dm +++ b/code/modules/mob/living/carbon/human/life_vr.dm @@ -44,8 +44,9 @@ else vantag.icon_state = "hudblank" +//Our call for the NIF to do whatever /mob/living/carbon/human/proc/handle_nif() if(!nif) return //Process regular life stuff - nif.life() \ No newline at end of file + nif.life() diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm new file mode 100644 index 0000000000..b4ef9eafd7 --- /dev/null +++ b/code/modules/nifsoft/nif.dm @@ -0,0 +1,481 @@ +//Holder on humans to prevent having to 'find' it every time +/mob/living/carbon/human/var/obj/item/device/nif/nif + +//Nanotech Implant Foundation +/obj/item/device/nif + name = "nanotech implant foundation" + desc = "A somewhat degraded copy of a Kitsuhana working surface, in a box. Can print new \ + implants inside living hosts on the fly based on software uploads. Must be surgically \ + implanted in the head to work. May eventually wear out and break." + + icon = 'icons/obj/device_alt.dmi' + icon_state = "nif_0" + + w_class = ITEMSIZE_TINY + + var/durability = 100 // Durability remaining + var/burn_factor = 100 // Divisor for power charge from nutrition (efficiency basically) + + var/tmp/power_usage = 0 // Nifsoft adds to this + var/tmp/mob/living/carbon/human/human // Our owner! + var/tmp/list/nifsofts[TOTAL_NIF_SOFTWARE] // All our nifsofts + var/tmp/list/nifsofts_life = list() // Ones that want to be talked to on life() + var/owner // Owner character name + + var/tmp/vision_flags = 0 // Flags implants set for faster lookups + var/tmp/health_flags = 0 + var/tmp/combat_flags = 0 + var/tmp/other_flags = 0 + + var/tmp/stat = NIF_PREINSTALL // Status of the NIF + var/tmp/install_done // Time when install will finish + var/tmp/open = FALSE // If it's open for maintenance (1-3) + + var/obj/item/clothing/glasses/hud/nif_hud/nif_hud + + var/global/icon/big_icon + var/global/click_sound = 'sound/effects/pop.ogg' + +//Constructor comes with a free AR HUD +/obj/item/device/nif/New(var/newloc,var/wear) + ..(newloc) + new /datum/nifsoft/ar_civ(src) + nif_hud = new(src) + + if(!big_icon) + big_icon = new(icon,icon_state = "nif_full") + + //Probably loading from a save + if(ishuman(newloc)) + var/mob/living/carbon/human/H = newloc + implant(H) + owner = H.mind.name + name = initial(name) + " ([owner])" + stat = NIF_WORKING + + if(wear) + durability = wear + + update_icon() + +//Destructor cleans up references +/obj/item/device/nif/Destroy() + if(human) + human.nif = null + human = null + for(var/S in nifsofts) + if(S) + qdel(S) + nifsofts.Cut() + ..() + +//Being implanted in some mob +/obj/item/device/nif/proc/implant(var/mob/living/carbon/human/H) + if(istype(H) && !H.nif && H.species && !(H.species.flags & NO_SCAN) && (loc == H.get_organ(BP_HEAD))) //NO_SCAN is the default 'too complicated' flag. + human = H + human.nif = src + stat = NIF_INSTALLING + return TRUE + + return FALSE + +//For debug or antag purposes +/obj/item/device/nif/proc/quick_implant(var/mob/living/carbon/human/H) + if(istype(H)) + var/obj/item/organ/external/head = H.get_organ(BP_HEAD) + if(!head) + return FALSE + src.forceMove(head) + head.implants += src + owner = H.real_name + return implant(H) + + return FALSE + +//Being implanted in some mob +/obj/item/device/nif/proc/unimplant(var/mob/living/carbon/human/H) + human = null + stat = NIF_PREINSTALL + install_done = null + if(istype(H)) + H.nif = null + update_icon() + +//EMP adds wear and disables all nifsoft +/obj/item/device/nif/emp_act(var/severity) + notify("Danger! Significant electromagnetic interference!",TRUE) + for(var/nifsoft in nifsofts) + if(nifsoft) + var/datum/nifsoft/NS = nifsoft + NS.deactivate() + + switch (severity) + if (1) + wear(rand(30,40)) + if (2) + wear(rand(15,25)) + if (3) + wear(rand(8,15)) + if (4) + wear(rand(1,8)) + +//Wear update/check proc +/obj/item/device/nif/proc/wear(var/wear = 0) + if(wear) + durability -= wear * rand(0.85,1.15) // Also +/- 15% + + if(durability <= 0) + stat = NIF_TEMPFAIL + update_icon() + notify("Danger! General system insta#^!($",TRUE) + to_chat(human,"Your NIF vision overlays disappear and your head suddenly seems very quiet...") + +//Attackby proc, for maintenance +/obj/item/device/nif/attackby(obj/item/weapon/W, mob/user as mob) + if(open == 0 && istype(W,/obj/item/weapon/screwdriver)) + if(do_after(user, 4 SECONDS, src) && open == 0) + user.visible_message("[user] unscrews and pries open \the [src].","You unscrew and pry open \the [src].") + playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) + open = 1 + update_icon() + else if(open == 1 && istype(W,/obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(C.get_amount() < 3) + to_chat(user,"You need at least three coils of wire to add them to \the [src].") + return + if(do_after(user, 6 SECONDS, src) && open == 1 && C.use(3)) + user.visible_message("[user] replaces some wiring in \the [src].","You replace any burned out wiring in \the [src].") + playsound(user, 'sound/items/Deconstruct.ogg', 50, 1) + open = 2 + update_icon() + else if(open == 2 && istype(W,/obj/item/device/multitool)) + if(do_after(user, 8 SECONDS, src) && open == 2) + user.visible_message("[user] resets several circuits in \the [src].","You find and repair any faulty circuits in \the [src].") + open = 3 + update_icon() + else if(open == 3 && istype(W,/obj/item/weapon/screwdriver)) + if(do_after(user, 3 SECONDS, src) && open == 3) + user.visible_message("[user] closes up \the [src].","You re-seal \the [src] for use once more.") + playsound(user, 'sound/items/Screwdriver.ogg', 50, 1) + open = FALSE + durability = initial(durability) + stat = NIF_PREINSTALL + update_icon() + +//Wear update/check proc +/obj/item/device/nif/update_icon() + if(open) + icon_state = "nif_open[open]" + else + switch(stat) + if(NIF_PREINSTALL) + icon_state = "nif_1" + if(NIF_INSTALLING) + icon_state = "nif_0" + if(NIF_WORKING) + icon_state = "nif_0" + if(NIF_TEMPFAIL) + icon_state = "nif_2" + else + icon_state = "nif_2" + +//The (dramatic) install process +/obj/item/device/nif/proc/handle_install() + if(human.stat) //No stuff while KO. Sleeping it off is viable, and doesn't start until you wake up from surgery + return FALSE + + //Firsties + if(!install_done) + if(human.real_name == owner) + install_done = world.time + 1 MINUTE + notify("Welcome back, [owner]! Performing quick-calibration...") + else + install_done = world.time + 30 MINUTES + notify("Adapting to new user...") + sleep(5 SECONDS) + notify("Adjoining optic [human.isSynthetic() ? "interface" : "nerve"], please be patient.",TRUE) + + var/percent_done = (world.time - (install_done - (30 MINUTES))) / (30 MINUTES) + + human.client.screen.Add(global_hud.whitense) + + switch(percent_done) //This is 0.0 to 1.0 kinda percent. + //Connecting to optical nerves + if(0.0 to 0.1) + human.eye_blind = 5 + + //Mapping brain + if(0.2 to 0.9) + if(prob(99)) return TRUE + var/incident = rand(1,3) + switch(incident) + if(1) + var/message = pick(list( + "Your head throbs around your new implant.", + "The skin around your recent surgery itches.", + "A wave of nausea overtakes you as the world seems to spin.", + "The floor suddenly seems to come up at you.", + "There's a throbbing lump of ice behind your eyes.", + "A wave of pain shoots down your neck." + )) + to_chat(human,"[message]") + if(2) + human.Weaken(5) + to_chat(human,"A wave of weakness rolls over you.") + if(3) + human.Sleeping(5) + to_chat(human,"You suddenly black out!") + + //Finishing up + if(1.0 to INFINITY) + stat = NIF_WORKING + owner = human.real_name + name = initial(name) + " ([owner])" + notify("Calibration complete! User data stored!") + +//Called each life() tick on the mob +/obj/item/device/nif/proc/life() + if(!human || loc != human.get_organ(BP_HEAD)) + unimplant(human) + return FALSE + + switch(stat) + if(NIF_WORKING) + //Perform our passive drain + if(!use_charge(power_usage)) + stat = NIF_POWFAIL + notify("Insufficient energy!",TRUE) + return FALSE + + //HUD update! + nif_hud.process_hud(human,1) + + //Process all the ones that want that + for(var/S in nifsofts_life) + var/datum/nifsoft/nifsoft = S + nifsoft.life(human) + + if(NIF_POWFAIL) + if(human && human.nutrition < 100) + return FALSE + else + stat = NIF_WORKING + notify("System Reboot Complete.") + + if(NIF_TEMPFAIL) + //Something else has to take us out of tempfail + return FALSE + + if(NIF_INSTALLING) + handle_install() + return FALSE + +//Prints 'AR' messages to the user +/obj/item/device/nif/proc/notify(var/message,var/alert = 0) + if(!human) return + + to_chat(human,"\[\icon[src.big_icon]NIF\] displays, \"[message]\"") + +//Called to spend nutrition, returns 1 if it was able to +/obj/item/device/nif/proc/use_charge(var/use_charge) + //You don't want us to take any? Well okay. + if(!use_charge) + return TRUE + + //Not enough nutrition/charge left. + if(!human || human.nutrition < use_charge) + return FALSE + + //Was enough, reduce and return. + human.nutrition -= use_charge + return TRUE + +//Install a piece of software +/obj/item/device/nif/proc/install(var/datum/nifsoft/new_soft) + if(nifsofts[new_soft.list_pos]) + return FALSE + + if(human) + var/applies_to = new_soft.applies_to + var/synth = human.isSynthetic() + if(synth && !(applies_to & NIF_SYNTHETIC)) + notify("The software \"[new_soft]\" is not supported on your chassis type.",TRUE) + return FALSE + if(!synth && !(applies_to & NIF_ORGANIC)) + notify("The software \"[new_soft]\" is not supported in organic life.",TRUE) + return FALSE + + nifsofts[new_soft.list_pos] = new_soft + power_usage += new_soft.p_drain + + if(new_soft.tick_flags == NIF_ALWAYSTICK) + nifsofts_life += new_soft + + if(new_soft.vision_flags) + vision_flags |= new_soft.vision_flags + if(new_soft.health_flags) + health_flags |= new_soft.health_flags + if(new_soft.combat_flags) + combat_flags |= new_soft.combat_flags + if(new_soft.other_flags) + other_flags |= new_soft.other_flags + + wear(new_soft.wear) + return TRUE + +//Uninstall a piece of software +/obj/item/device/nif/proc/uninstall(var/datum/nifsoft/old_soft) + var/datum/nifsoft/NS = old_soft.list_pos + if(!NS || NS != old_soft) + return FALSE //what?? + + nifsofts[old_soft.list_pos] = null + power_usage -= old_soft.p_drain + + if(old_soft.tick_flags == NIF_ALWAYSTICK) + nifsofts_life -= old_soft + + if(old_soft.active) + power_usage -= old_soft.a_drain + if(old_soft.tick_flags == NIF_ACTIVETICK) + nifsofts_life -= old_soft + + if(old_soft.vision_flags) + vision_flags &= ~old_soft.vision_flags + if(old_soft.health_flags) + health_flags &= ~old_soft.health_flags + if(old_soft.combat_flags) + combat_flags &= ~old_soft.combat_flags + if(old_soft.other_flags) + other_flags &= ~old_soft.other_flags + + return TRUE + +//Activate a nifsoft +/obj/item/device/nif/proc/activate(var/datum/nifsoft/soft) + if(human) + var/applies_to = soft.applies_to + var/synth = human.isSynthetic() + if(synth && !(applies_to & NIF_SYNTHETIC)) + notify("The software \"[soft]\" is not supported on your chassis type and will be uninstalled.",TRUE) + uninstall(soft) + return FALSE + if(!synth && !(applies_to & NIF_ORGANIC)) + notify("The software \"[soft]\" is not supported in organic life and will be uninstalled.",TRUE) + uninstall(soft) + return FALSE + + if(!use_charge(soft.a_drain)) + return FALSE + + if(soft.tick_flags == NIF_ACTIVETICK) + nifsofts_life += soft + + power_usage += soft.a_drain + human << click_sound + + return TRUE + +//Deactivate a nifsoft +/obj/item/device/nif/proc/deactivate(var/datum/nifsoft/soft) + if(soft.tick_flags == NIF_ACTIVETICK) + nifsofts_life -= soft + + power_usage -= soft.a_drain + human << click_sound + + return TRUE + +//Deactivate several nifsofts +/obj/item/device/nif/proc/deactivate_these(var/list/turn_off) + for(var/N in turn_off) + var/datum/nifsoft/NS = nifsofts[N] + if(NS) + NS.deactivate() + +//Add a flag to one of the holders +/obj/item/device/nif/proc/set_flag(var/flag,var/hint) + ASSERT(flag && hint) + + switch(hint) + if(NIF_FLAGS_VISION) + vision_flags |= flag + if(NIF_FLAGS_HEALTH) + health_flags |= flag + if(NIF_FLAGS_COMBAT) + combat_flags |= flag + if(NIF_FLAGS_OTHER) + other_flags |= flag + else + CRASH("Not a valid NIF flag hint: [hint]") + +//Clear a flag from one of the holders +/obj/item/device/nif/proc/clear_flag(var/flag,var/hint) + ASSERT(flag && hint) + + switch(hint) + if(NIF_FLAGS_VISION) + vision_flags &= ~flag + if(NIF_FLAGS_HEALTH) + health_flags &= ~flag + if(NIF_FLAGS_COMBAT) + combat_flags &= ~flag + if(NIF_FLAGS_OTHER) + other_flags &= ~flag + else + CRASH("Not a valid NIF flag hint: [hint]") + +//Check for an installed implant +/obj/item/device/nif/proc/imp_check(var/soft) + if(!stat == NIF_WORKING) return FALSE + ASSERT(soft) + + if(ispath(soft)) + var/datum/nifsoft/path = soft + soft = initial(path.list_pos) + var/entry = nifsofts[soft] + if(entry) + return entry + +//Check for a set flag +/obj/item/device/nif/proc/flag_check(var/flag,var/hint) + if(!stat == NIF_WORKING) return FALSE + ASSERT(flag && hint) + + var/result = FALSE + switch(hint) + if(NIF_FLAGS_VISION) + if(flag & vision_flags) result = TRUE + if(NIF_FLAGS_HEALTH) + if(flag & health_flags) result = TRUE + if(NIF_FLAGS_COMBAT) + if(flag & combat_flags) result = TRUE + if(NIF_FLAGS_OTHER) + if(flag & other_flags) result = TRUE + else + CRASH("Not a valid NIF flag hint: [hint]") + + return result + +//NIF HUD object becasue HUD handling is trash and should be rewritten +/obj/item/clothing/glasses/hud/nif_hud/var/obj/item/device/nif/nif + +/obj/item/clothing/glasses/hud/nif_hud/New(var/newloc) + ..(newloc) + nif = newloc + +/obj/item/clothing/glasses/hud/nif_hud/process_hud(M,var/thing) + //Faster checking with local var, and this is called often so I want fast. + var/visflags = nif.vision_flags + if(NIF_V_AR_OMNI & visflags) + process_omni_hud(nif.human, "best") + else if(NIF_V_AR_SECURITY & visflags) + process_omni_hud(nif.human, "sec") + else if(NIF_V_AR_MEDICAL & visflags) + process_omni_hud(nif.human, "med") + else if(NIF_V_AR_ENGINE & visflags) + process_omni_hud(nif.human, "eng") + else if(NIF_V_AR_SCIENCE & visflags) + process_omni_hud(nif.human, "sci") + else if(NIF_V_AR_CIVILIAN & visflags) + process_omni_hud(nif.human, "civ") diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm new file mode 100644 index 0000000000..3680b47786 --- /dev/null +++ b/code/modules/nifsoft/nif_softshop.dm @@ -0,0 +1,111 @@ +//Custom vendors +/obj/machinery/vending/nifsoft_shop + name = "NIFSoft Shop" + desc = "For all your mindware and mindware accessories." + product_ads = "Let us get into your head!;Looking for an upgrade?;Surpass Humanity!;Why be normal when you can be SUPERnormal?;Jack in with NIFSoft!" + icon_state = "nifsoft" + icon_vend = "nifsoft-purchase" + icon_deny = "nifsoft-problem" + products = list() + contraband = list() + premium = list() + var/global/list/starting_legal_nifsoft + var/global/list/starting_illegal_nifsoft + +// Special Treatment! +/obj/machinery/vending/nifsoft_shop/build_inventory() + //Firsties + if(!starting_legal_nifsoft) + starting_legal_nifsoft = list() + starting_illegal_nifsoft = list() + for(var/P in subtypesof(/datum/nifsoft) - /datum/nifsoft/package) + var/datum/nifsoft/NS = P + if(initial(NS.initial)) + switch(initial(NS.illegal)) + if(TRUE) + starting_illegal_nifsoft += NS + if(FALSE) + starting_legal_nifsoft += NS + + products = starting_legal_nifsoft.Copy() + contraband = starting_illegal_nifsoft.Copy() + + var/list/all_products = list( + list(products, CAT_NORMAL), + list(contraband, CAT_HIDDEN), + list(premium, CAT_COIN)) + + for(var/current_list in all_products) + var/category = current_list[2] + + for(var/entry in current_list[1]) + var/datum/nifsoft/NS = entry + var/name = initial(NS.name) + var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name) + + product.price = initial(NS.cost) + product.amount = 10 + product.category = category + + product_records.Add(product) + +/obj/machinery/vending/nifsoft_shop/allowed(mob/user) + if(!ishuman(user)) + return FALSE + + var/mob/living/carbon/human/H = user + if(!H.nif || !H.nif.stat == NIF_WORKING) + to_chat(H,"[src] seems unable to connect to your NIF...") + flick(icon_deny,src) + return FALSE + + return ..() + +// Also special treatment! +/obj/machinery/vending/nifsoft_shop/vend(datum/stored_item/vending_product/R, mob/user) + var/mob/living/carbon/human/H = user + if((!allowed(usr)) && !emagged && scan_id && istype(H)) //For SECURE VENDING MACHINES YEAH + usr << "Purchase not allowed." //Unless emagged of course + flick(icon_deny,src) + return + vend_ready = 0 //One thing at a time!! + status_message = "Installing..." + status_error = 0 + nanomanager.update_uis(src) + + if(R.category & CAT_COIN) + if(!coin) + user << "You need to insert a coin to get this item." + return + if(coin.string_attached) + if(prob(50)) + user << "You successfully pull the coin out before \the [src] could swallow it." + else + user << "You weren't able to pull the coin out fast enough, the machine ate it, string and all." + qdel(coin) + coin = null + categories &= ~CAT_COIN + else + qdel(coin) + coin = null + categories &= ~CAT_COIN + + if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply) + spawn(0) + speak(vend_reply) + last_reply = world.time + + use_power(vend_power_usage) //actuators and stuff + spawn(vend_delay) + R.amount-- + new R.item_path(H.nif) + flick(icon_vend,src) + if(has_logs) + do_logging(R, user, 1) + + status_message = "" + status_error = 0 + vend_ready = 1 + currently_vending = null + nanomanager.update_uis(src) + return 1 diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm new file mode 100644 index 0000000000..990bf43565 --- /dev/null +++ b/code/modules/nifsoft/nif_statpanel.dm @@ -0,0 +1,77 @@ +/mob/living/carbon/human/Stat() + . = ..() + if(nif && statpanel("NIF")) + SetupNifStat() + +/mob/living/carbon/human/proc/SetupNifStat() + var/nif_status + switch(nif.stat) + if(NIF_WORKING) + nif_status = "Operating Normally" + if(NIF_POWFAIL) + nif_status = "Insufficient Energy!" + if(NIF_TEMPFAIL) + nif_status = "Needs Maintenance!" + if(NIF_INSTALLING) + nif_status = "Adapting To User" + else + nif_status = "Unknown - Error" + stat("NIF Status", nif_status) + + if(!nif.stat) + stat("- Modules -", "LMB: Toggle, Shift+LMB: Info/Uninstall") + for(var/nifsoft in nif.nifsofts) + if(!nifsoft) continue + var/datum/nifsoft/NS = nifsoft + var/obj/effect/nif_stat/stat_line = NS.stat_line + stat("[stat_line.nifsoft_name]",stat_line.atom_button_text()) + +/////////////////// +// Stat Line Object +/obj/effect/nif_stat + name = "" + var/nifsoft_name //Prevents deeper lookups, and the name won't change + var/datum/nifsoft/nifsoft //Reference to our nifsoft + var/toggleable = FALSE //Won't change, prevents looking it up deeper + +/obj/effect/nif_stat/New(var/datum/nifsoft/new_soft) + ..() + nifsoft = new_soft + nifsoft_name = new_soft.name + name = new_soft.name + toggleable = new_soft.activates + +/obj/effect/nif_stat/Destroy() + nifsoft = null + ..() + +/obj/effect/nif_stat/proc/atom_button_text() + if(!toggleable) + name = "Always On" + else + name = "[nifsoft.active ? "Active" : "Disabled"]" + return src + +/obj/effect/nif_stat/Click(var/location, var/control, var/params) + if(usr != nifsoft.nif.human) return + + var/list/clickprops = params2list(params) + var/opts = clickprops["shift"] + + if(opts) + var/choice = alert("Select an option","[nifsoft_name]","Display Info","Cancel","Uninstall") + switch(choice) + if("Display Info") + nifsoft.nif.notify("[nifsoft_name]: [nifsoft.desc] - It consumes [nifsoft.p_drain] energy units \ + while installed, and [nifsoft.a_drain] additionally while active. It is [nifsoft.illegal ? "NOT " : ""]\ + a legal software package. The MSRP of the package is [nifsoft.cost] Thalers. The difficulty to construct \ + the associated implant is Rating [nifsoft.wear].") + if("Uninstall") + var/confirm = alert("Really uninstall [nifsoft_name]?","Are you sure?","Cancel","Uninstall","Cancel") + if(confirm == "Uninstall") + nifsoft.uninstall() + else if(nifsoft.activates) + if(nifsoft.active) + nifsoft.deactivate() + else + nifsoft.activate() diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm new file mode 100644 index 0000000000..453e00d79b --- /dev/null +++ b/code/modules/nifsoft/nifsoft.dm @@ -0,0 +1,110 @@ +//A single piece of NIF software +/datum/nifsoft + var/name = "Prototype" + var/desc = "Contact a dev!" + + var/obj/item/device/nif/nif //The NIF that the software is stored in + + var/list_pos // List position in the nifsoft list + + var/cost = 1000 // Cost in cash of buying this software from a terminal + //TODO - While coding + var/initial = TRUE // This is available in NIFSoft Shops at the start of the game + var/wear = 1 // The wear (+/- 10% when applied) that this causes to the NIF + var/list/req_one_access // What access they need to buy it + var/illegal = FALSE // If this is a black-market nifsoft (emag option) + + var/active = FALSE // Whether the active mode of this implant is on + var/p_drain = 0 // Passive power drain, can be used in various ways from the software + var/a_drain = 0 // Active power drain, same purpose as above, software can treat however + var/activates = TRUE // Whether or not this has an active power consumption mode + var/tick_flags = 0 // Flags to tell when we'd like to be ticked + + var/empable = TRUE // If the implant can be destroyed via EMP attack + + var/expiring = FALSE // Trial software! Or self-deleting illegal ones! + var/expires_at // World.time for when they expire + + var/applies_to = (NIF_ORGANIC|NIF_SYNTHETIC) // Who this software is useful for + + var/vision_flags = 0 // Various flags for fast lookups that are settable on the NIF + var/health_flags = 0 // These are added as soon as the implant is installed + var/combat_flags = 0 // Otherwise use set_flag on the nif in your activate/deactivate + var/other_flags = 0 + + var/obj/effect/nif_stat/stat_line + + +//Constructor accepts the NIF it's being loaded into +/datum/nifsoft/New(var/obj/item/device/nif/nif_load) + ASSERT(nif_load) + + nif = nif_load + stat_line = new(src) + if(!install(nif)) + qdel(src) + +//Destructor cleans up the software and nif reference +/datum/nifsoft/Destroy() + if(nif) + uninstall(nif) + nif = null + qdel(stat_line) + stat_line = null + ..() + +//Called when the software is installed in the NIF +/datum/nifsoft/proc/install() + return nif.install(src) + +//Called when the software is removed from the NIF +/datum/nifsoft/proc/uninstall() + if(active) + deactivate() + if(nif) + . = nif.uninstall(src) + qdel(src) + +//Called every life() tick on a mob on active implants +/datum/nifsoft/proc/life(var/mob/living/carbon/human/human) + return TRUE + +//Called when attempting to activate an implant (could be a 'pulse' activation or toggling it on) +/datum/nifsoft/proc/activate() + var/nif_result = nif.activate(src) + if(nif_result) + active = TRUE + return nif_result + +//Called when attempting to deactivate an implant +/datum/nifsoft/proc/deactivate() + var/nif_result = nif.deactivate(src) + if(nif_result) + active = FALSE + return nif_result + +//Called when an implant expires +/datum/nifsoft/proc/expire() + uninstall() + return + +////////////////////// +//A package of NIF software +/datum/nifsoft/package + var/list/software = list() + wear = 0 //Packages don't cause wear themselves, the software does + +//Constructor accepts a NIF and loads all the software +/datum/nifsoft/package/New(var/obj/item/device/nif/nif_load) + ASSERT(nif_load) + + for(var/P in software) + new P(nif_load) + + qdel(src) + +//Clean self up +/datum/nifsoft/package/Destroy() + software.Cut() + software = null + ..() diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm new file mode 100644 index 0000000000..15f253d9b2 --- /dev/null +++ b/code/modules/nifsoft/software/01_vision.dm @@ -0,0 +1,253 @@ +////////////////// +// AR HUD Overlays +/datum/nifsoft/ar_civ + name = "AR Overlay (Civ)" + desc = "Provides a general identification and health status overlay on your vision with no frills." + list_pos = NIF_CIVILIAN_AR + cost = 500 + initial = TRUE + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) + nif.set_flag(NIF_V_AR_CIVILIAN,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_CIVILIAN,NIF_FLAGS_VISION) + +/datum/nifsoft/ar_med + name = "AR Overlay (Med)" + desc = "Like the civilian model, but provides medical records access and virus database lookup." + list_pos = NIF_MEDICAL_AR + cost = 750 + initial = TRUE + req_one_access = list(access_medical) + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_CIVILIAN_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) + nif.set_flag(NIF_V_AR_MEDICAL,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_MEDICAL,NIF_FLAGS_VISION) + +/datum/nifsoft/ar_sec + name = "AR Overlay (Sec)" + desc = "Like the civilian model, but provides access to arrest status and security records." + list_pos = NIF_SECURITY_AR + cost = 750 + initial = TRUE + req_one_access = list(access_security) + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) + nif.set_flag(NIF_V_AR_SECURITY,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_SECURITY,NIF_FLAGS_VISION) + +/datum/nifsoft/ar_eng + name = "AR Overlay (Eng)" + desc = "Like the civilian model, but provides station alert notices." + list_pos = NIF_ENGINE_AR + cost = 750 + initial = TRUE + req_one_access = list(access_engine) + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_SCIENCE_AR,NIF_OMNI_AR) + nif.set_flag(NIF_V_AR_ENGINE,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_ENGINE,NIF_FLAGS_VISION) + +/datum/nifsoft/ar_science + name = "AR Overlay (Sci)" + desc = "Like the civilian model, but provides ... well, nothing. For now." + list_pos = NIF_SCIENCE_AR + cost = 750 + initial = TRUE + req_one_access = list(access_research) + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_OMNI_AR) + nif.set_flag(NIF_V_AR_SCIENCE,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_SCIENCE,NIF_FLAGS_VISION) + +/datum/nifsoft/ar_omni + name = "AR Overlay (Omni)" + desc = "Like the civilian model, but provides most of the features of the medical and security overlays as well." + list_pos = NIF_OMNI_AR + cost = 750 + initial = TRUE + req_one_access = list(access_captain) + a_drain = 0.05 + + activate() + if(..()) + nif.deactivate_these(NIF_CIVILIAN_AR,NIF_MEDICAL_AR,NIF_SECURITY_AR,NIF_ENGINE_AR,NIF_SCIENCE_AR) + nif.set_flag(NIF_V_AR_OMNI,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_AR_OMNI,NIF_FLAGS_VISION) + +////////////// +// Misc Vision +/datum/nifsoft/corrective + name = "Corrective AR" + desc = "Subtly alters perception to compensate for cataracts and retinal misalignment, among other common disabilities." + list_pos = NIF_CORRECTIVE_GLASS + cost = 200 + a_drain = 0.025 + + activate() + if(..()) + nif.set_flag(NIF_V_CORRECTIVE,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_CORRECTIVE,NIF_FLAGS_VISION) + +/datum/nifsoft/uvblocker + name = "Nictating Membrane" + desc = "A synthetic nictating membrane (aka 'third eyelid') that protects the eyes from UV or hostile atmospheres. Does not protect from photonic stun weapons." + list_pos = NIF_UVFILTER + cost = 450 + a_drain = 0.2 + + activate() + if(..()) + nif.set_flag(NIF_V_UVFILTER,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_UVFILTER,NIF_FLAGS_VISION) + +/datum/nifsoft/flashprot + name = "Responsive Filter" + desc = "Enables a high-speed shielding response to intense light, such as flashes, to block them." + list_pos = NIF_FLASHPROT + cost = 600 + req_one_access = list(access_security) + a_drain = 0.05 + + activate() + if(..()) + nif.set_flag(NIF_V_FLASHPROT,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_FLASHPROT,NIF_FLAGS_VISION) + +//////////////// +// Goggle-alikes +/datum/nifsoft/mesons + name = "Meson Scanner" + desc = "Similar to the worn Optical Meson Scanner Goggles, these allow you to see the base structure and terrain through walls." + list_pos = NIF_MESONS + cost = 1000 + a_drain = 0.1 + tick_flags = NIF_ACTIVETICK + + activate() + if(..()) + nif.deactivate_these(NIF_MATERIAL,NIF_THERMALS,NIF_NIGHTVIS) + nif.set_flag(NIF_V_MESONS,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_MESONS,NIF_FLAGS_VISION) + + life() + if(..()) + var/mob/living/carbon/human/H = nif.human + H.client.screen |= global_hud.meson + H.sight |= SEE_TURFS + +/datum/nifsoft/material + name = "Material Scanner" + desc = "Similar to the worn Optical Material Scanner Goggles, these allow you to see objects through walls." + list_pos = NIF_MATERIAL + cost = 1000 + a_drain = 0.1 + tick_flags = NIF_ACTIVETICK + + activate() + if(..()) + nif.deactivate_these(NIF_MESONS,NIF_THERMALS,NIF_NIGHTVIS) + nif.set_flag(NIF_V_MATERIAL,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_MATERIAL,NIF_FLAGS_VISION) + + life() + if(..()) + nif.human.sight |= SEE_OBJS + +/datum/nifsoft/thermals + name = "Thermal Scanner" + desc = "Similar to the worn Thermal Goggles, these allow you to see heat-emitting creatures through walls." + list_pos = NIF_THERMALS + cost = 1000 + req_one_access = list(access_security) + a_drain = 0.1 + tick_flags = NIF_ACTIVETICK + + activate() + if(..()) + nif.deactivate_these(NIF_MESONS,NIF_MATERIAL,NIF_NIGHTVIS) + nif.set_flag(NIF_V_THERMALS,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_THERMALS,NIF_FLAGS_VISION) + + life() + if(..()) + var/mob/living/carbon/human/H = nif.human + H.sight |= SEE_MOBS + H.client.screen |= global_hud.thermal + H.see_invisible = SEE_INVISIBLE_NOLIGHTING + +/datum/nifsoft/nightvis + name = "Low-Light Amp" + desc = "Similar to the worn Night Vision Goggles, these allow you to see in complete darkness." + list_pos = NIF_NIGHTVIS + cost = 1000 + req_one_access = list(access_security) + a_drain = 0.1 + tick_flags = NIF_ACTIVETICK + + activate() + if(..()) + nif.deactivate_these(NIF_MESONS,NIF_MATERIAL,NIF_THERMALS) + nif.set_flag(NIF_V_NIGHTVIS,NIF_FLAGS_VISION) + + deactivate() + if(..()) + nif.clear_flag(NIF_V_NIGHTVIS,NIF_FLAGS_VISION) + + life() + if(..()) + var/mob/living/carbon/human/H = nif.human + H.see_in_dark += 7 + H.client.screen |= global_hud.nvg + H.see_invisible = SEE_INVISIBLE_NOLIGHTING + diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm new file mode 100644 index 0000000000..4bc83c407f --- /dev/null +++ b/code/modules/nifsoft/software/05_health.dm @@ -0,0 +1,184 @@ +/* +#define NIF_SPAREBREATH 17 +*/ + +/datum/nifsoft/medichines_org + name = "Medichines (Org)" + desc = "An internal swarm of nanites to make sure you stay in good shape and to promote healing, or to preserve you if you are critically injured." + list_pos = NIF_ORGANIC_HEAL + cost = 2500 + p_drain = 0.05 + a_drain = 0.1 //This is messed with manually below. + activates = FALSE //It is automatic in emergencies, not manually controllable. + tick_flags = NIF_ALWAYSTICK + applies_to = NIF_ORGANIC + var/mode = 0 + + //These self-activate on their own, these aren't user-settable to on/off. + activate() + if(..()) + nif.set_flag(NIF_H_ORGREPAIR,NIF_FLAGS_HEALTH) + mode = 1 + + deactivate() + if(..()) + nif.clear_flag(NIF_H_ORGREPAIR,NIF_FLAGS_HEALTH) + a_drain = initial(a_drain) + mode = initial(mode) + nif.human.in_stasis = 0 + + life() + if(..()) + var/mob/living/carbon/human/H = nif.human + var/HP_percent = H.health/H.getMaxHealth() + + //Mode changing state machine + if(HP_percent >= 0.9) + if(mode) + nif.notify("User Status: NORMAL. Medichines deactivating.") + deactivate() + return TRUE + else if(!mode && HP_percent < 0.8) + nif.notify("User Status: INJURED. Commencing medichine routines.",TRUE) + activate() + else if(mode == 1 && HP_percent < 0.2) + nif.notify("User Status: DANGER. Seek medical attention!",TRUE) + mode = 2 + else if(mode == 2 && HP_percent < -0.4) + nif.notify("User Status: CRITICAL. Notifying medical, and starting emergency stasis!",TRUE) + mode = 3 + if(!ishuman(H.loc)) //Not notified in case of vore, for gameplay purposes. + var/turf/T = get_turf(H) + var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) + a.autosay("[H.real_name] has been put in emergency stasis, located at ([T.x],[T.y],[T.z])!", "[H.real_name]'s NIF", "Medical") + qdel(a) + + //Handle the actions in each mode + + //Injured but not critical + if(mode) + H.adjustToxLoss(-0.1 * mode) + H.adjustBruteLoss(-0.1 * mode) + H.adjustFireLoss(-0.1 * mode) + + if(mode >= 2) + nif.use_charge(a_drain) //A second drain if we're in level 2+ + + //Patient critical - emergency stasis + if(mode >= 3) + if(HP_percent <= 0) + H.in_stasis = 3 + if(HP_percent > 0.2) + H.in_stasis = 0 + nif.notify("Ending emergency stasis.",TRUE) + mode = 2 + + return TRUE + +/datum/nifsoft/medichines_syn + name = "Medichines (Syn)" + desc = "A swarm of mechanical repair nanites, able to repair relatively minor damage to synthetic bodies. Large repairs must still be performed manually." + list_pos = NIF_SYNTH_HEAL + cost = 2500 + p_drain = 0.05 + a_drain = 0.00 //This is manually drained below. + activates = FALSE //It is automatic in emergencies, not manually controllable. + tick_flags = NIF_ALWAYSTICK + applies_to = NIF_SYNTHETIC + var/mode = 0 + + //These self-activate on their own, these aren't user-settable to on/off. + activate() + if(..()) + nif.set_flag(NIF_H_SYNTHREPAIR,NIF_FLAGS_HEALTH) + mode = 1 + + deactivate() + if(..()) + nif.clear_flag(NIF_H_SYNTHREPAIR,NIF_FLAGS_HEALTH) + mode = 0 + + life() + if(..()) + //We're good! + if(!nif.human.bad_external_organs.len) + if(mode || active) + nif.notify("User Status: NORMAL. Medichines deactivating.") + deactivate() + return TRUE + + if(!mode && !active) + nif.notify("User Status: DAMAGED. Medichines performing minor repairs.",TRUE) + activate() + + for(var/eo in nif.human.bad_external_organs) + var/obj/item/organ/external/EO = eo + for(var/w in EO.wounds) + var/datum/wound/W = w + if(W.damage <= 5) + W.heal_damage(0.1) + EO.update_damages() + if(EO.update_icon()) + nif.human.UpdateDamageIcon(1) + nif.use_charge(0.1) + return TRUE //Return entirely, we only heal one at a time. + else if(mode == 1) + mode = 2 + nif.notify("Medichines unable to repair all damage. Perform manual repairs.",TRUE) + + return TRUE + +/datum/nifsoft/spare_breath + name = "Respirocytes" + desc = "Nanites simulating red blood cells will filter and recycle oxygen for a short time, preventing suffocation in hostile environments. NOTE: Only capable of supplying OXYGEN." + list_pos = NIF_SPAREBREATH + cost = 650 + p_drain = 0.05 + a_drain = 0.1 + tick_flags = NIF_ALWAYSTICK + applies_to = NIF_ORGANIC + var/filled = 100 //Tracks the internal tank 'refilling', which still uses power + + activate() + if(!(filled > 50)) + nif.notify("Respirocytes not saturated!",TRUE) + return FALSE + if(..()) + nif.set_flag(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH) + nif.notify("Now taking air from reserves.") + + deactivate() + if(..()) + nif.clear_flag(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH) + nif.notify("Now taking air from environment and refilling reserves.") + + life() + if(..()) + if(active) //Supplying air, not recharging it + switch(filled) //Text warnings + if(75) + nif.notify("Respirocytes at 75% saturation.",TRUE) + if(50) + nif.notify("Respirocytes at 50% saturation!",TRUE) + if(25) + nif.notify("Respirocytes at 25% saturation, seek a habitable environment!",TRUE) + if(5) + nif.notify("Respirocytes at 5% saturation! Failure imminent!",TRUE) + + if(filled == 0) //Ran out + deactivate() + else //Drain a little + filled-- + + else //Recharging air, not supplying it + if(filled == 100) + return TRUE + else if(nif.use_charge(0.1) && ++filled == 100) + nif.notify("Respirocytes now fully saturated.") + + proc/resp_breath() + if(!active) return null + var/datum/gas_mixture/breath = new() + breath.adjust_gas("oxygen", 300) + breath.temperature = T20C + return breath diff --git a/code/modules/nifsoft/software/10_combat.dm b/code/modules/nifsoft/software/10_combat.dm new file mode 100644 index 0000000000..64f3ae9a25 --- /dev/null +++ b/code/modules/nifsoft/software/10_combat.dm @@ -0,0 +1,7 @@ +/* +#define NIF_BRUTEARMOR 18 +#define NIF_BURNARMOR 19 +#define NIF_PAINKILLERS 20 +#define NIF_HARDCLAWS 21 +#define NIF_HIDDENLASER 22 +*/ \ No newline at end of file diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm new file mode 100644 index 0000000000..a20e26c3a6 --- /dev/null +++ b/code/modules/nifsoft/software/15_misc.dm @@ -0,0 +1,9 @@ +/* +#define NIF_COMMLINK 23 +#define NIF_SUITSENSORS 24 +#define NIF_APCCHARGE 25 +#define NIF_PRESSURE 26 +#define NIF_HEATSINK 27 +#define NIF_UVFILTER 28 +#define NIF_FLASHPROT 29 +*/ \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 583b56921d..63a1d2ff50 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -546,7 +546,7 @@ This function completely restores a damaged organ to perfect condition. /obj/item/organ/external/proc/need_process() if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_DESTROYED|ORGAN_DEAD|ORGAN_MUTATED)) return 1 - if((brute_dam || burn_dam) && (robotic < ORGAN_ROBOT)) //Robot limbs don't autoheal and thus don't need to process when damaged + if(brute_dam || burn_dam)//VOREStation Edit - But they do for medichines! ---&& (robotic < ORGAN_ROBOT)) //Robot limbs don't autoheal and thus don't need to process when damaged return 1 if(last_dam != brute_dam + burn_dam) // Process when we are fully healed up. last_dam = brute_dam + burn_dam diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi index e434cfb7ac01894ee75a512cc54237a3467628b6..1a256c07b06305fe229aaedbd3d57976a32eac9f 100644 GIT binary patch delta 14085 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 sy5P zeA?}J=FEg`6rz{g!8mF?;aI-b0km2Z{cuDWYHD0fx1h9cR9Km)R{U*!(8OltDPdaN zXlDua#y-6hg!&%p&;~_>N%rmc>?}88G|6|IBWh}6xDImPc_r(rtpYtIpMZqSyADRd zQrjXEb;K7%z7P?H^M77`WpAKA%_oqbq!Lg;0fa?=Z&=>sAuO;b;)d`G&5{^JPqzRm zC)d7g?e>u4>h)9){@q?VBi-u~+b5*ev7@s6Xc-=`^f4cM*=uEClQ{SNDUg~Be$kZ~ z-N;E}enNW*FxUNlIX$enjkVKYn!#JcQ&WK_XESH3WY)|5%*IiwoCKhZ62_LYjy zcQ2nT4DhNp{t1nyGCvVoJ3{TJpsq-1!jB#5dL}qNFq#WgoZkL<@`aV#A`^%jq_068 zkI}gtXsDPXe~O8IG;%2Shs|`~x#999p>g~hu4bFgrI;&&F&i4AN}3vbj)ujmP!s5b zz&)T8KcXKVyZC(Bw*Kdg91wUZAgS$6E1h5`J@sVOF0uNjkG<^Ns%#>5@OHqR_V``( z>!`plJZ5_!(=DZ$C%^bpEs#;9E){(D4-5iNIoK)!iqNP9T6QCmRuw#f_V1)io{r&_ zKeRI{*`5)7aPQmIC2+M{yH;!-|6+4MFY^M8`pY$8fjfpIS>ztsX7)hr${re$?B#@E$^lNa#(F<>LjqvrR5#dt<6TO)x;!*||Ug zd11f<&uvp(s@sZjhJRc4#*T%G(HpTlMSYhz z1i#|d%~OM@c7HI)d5#dF|B7}q}rd4y( z-P)9~(un5z6`j%G;qHM_SoYB- zh(Bst(KI(@wlU>pvm$5UdEemsR3CUfwvA^|FAu8GkDf3O9M8KhAhO9t~6i0B?)p02_ zDXGsm8|;}N8A>%ye)BNP$hUfU3zIk6$5y|8!#KiM98_07vb3}m8yg!)IF@LYUWMn; z>&t049*sDM0G;D58OA;nUidN(xvW>RTsspAsc zGfA7=61Y${tf!}E`i=)2EZof~v~u-NKou4;9v)ksL6%uz&}qz`w0&9x!mAbm=pEm? zm;m0ZtiJFUAqZ!DeZyDR6;=w~b^4@0T|wX7?s-5RJYA+2je3Q5aBxt=F!5#7L$G$j zDC7}v?JN_O^;Ml+X%}@ZlgHx>@&Hg%;|2@FsIEZX20&HF@0C?C+qYpMu{#~8#cGPf zZu7O^Gt$rv(*;BCkRmwukXU4P-1ee)@DZukzg=_}D5c$|F6!*&u2jKgpyKmJUZF#!Et*SLMP JP~H03{{czbwHyEd delta 13672 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 diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi index 7d71132986ffbedefd210283f7fd41a7a4938c21..b6c7cbb8e6c6294aa6a2d7c84a3cb0f334d672d9 100644 GIT binary patch delta 913 zcmV;C18)4+jRe?@1dt?uS9(-fbVOxyV{&P5bZKvH004NLotRB;;xG_~&+sd(_G+qx zkam0E(rvZsf$n9sS7ee&uo^tbF`(|R-va~!iIX>#)kCFcCi7vBUvn>B-hRD*h}XsY zcu%&}Y{Xp59)j`cpi{RNa}iC)qc!P#?T-JHPB{{DahGtG5#5b{N2#`@n2T^c%BS4o6WTBkNX&|REl%b4eEJGQ} z=kcgu-d?*kJ7@JWCG*uAf!R5$dy5jvsw_8_P?kp$tX^qU^4S~E(=q!<-dYa&4Avu^ zmk+Gx$L z+_DpM5e9M^%XUXSB^d6nqyCt)74tu0Z_j^Rrpi=atri#1Zn)6kcDNY$r{AzJvHt($ zLM<06S!?6n0Il#h{6m$yG60KrP>$>}VJ^t_!V8t_zkZR|1UsXs-MwK$mYqEyiJxJt zu&FkN>_ORo{awVr~0E!Lv3l8svqVOuECI>}Pu^lS@@kSukq{fZ- zXu2Ji8Mr_GtVucGIGni2Z=enpJ1Bz53znW^?)T}K3#es|xxn=7REG5d>X-|(BaXQM zi$NyW9Z$<9*tOYOXrv}*7)y(@DQ-t-y{f zpFG2&#R-z}83waH^PsL*wqGkJ%63VY{)`i4F=>@33#+O`SyTx5Z?9?Xc^%03+627C z@cXOeR1FAuxXfQBYufalzDPzgYPa8O%LV8C!>P>(E<>9wRO{Ni0jte{)Rqk<1db?r zVUyZ_GKzu0X4)AleN!m#sgRq)cJcz{T(Mx%6%IaCbyjlb881=XkxtOeuYWZ@j6Lm7 zEc*Mx3E%E)vR0)>pFdycc9DruTbNtRtHO6|A6s3uIO%H1y?Fb06|al;@qgZV)*f&O na%KPkAOJ~3K~#90?45ah6h->~-;-o=UlS&SoCCL<0|7e&DYD1G delta 913 zcmV;C18)4-jRe_Q~tEmz~ z+UH)!>I51M2?zJwPCkIGI#d50&Ok-nYlxiv@>h-|voYlQa31yX*8%rq4BNEJBX;kvr>(J9N`bged4*CpMBb}EJ z2xdcl%*l||35tV%zF%QM7dGT+%-N+Dv&Ot^D21HaP&)Bd#+ENtYY7 z5eyz;>HCYSz2P~L*D`pBubn}1SJIFoPPWQW0g+Wy+R5MQhtyK>7; z%taW;X)N1`dQvc)uOt5$*^2oevA5=!uP3q|2oN=+Q(MTPB9@sBqGsU|gU#7C2M zSY%*-{8^K7z&M<6lixrdD(oN+CNEfcj=7)HF&9wD9CLx`*{KZc3)C?eXhj@z0Vab? zt~;KVO<-5EwV;uloWWptXFMJv1p3xHgG`RSaLMF<@B^1jjtV8qD|R~RSFIJWBg!Yw zvS=YeB0ht`sLyy%*DKqvl@n#Vq)UIqiL#iqN|c3FRiZ2^g#5SHwD!CXWPEJ`-eUOu zRdT8ZxIA3uFOxNGdZ#avk&N2y_u6v7dH-^1GlJ95W((!I_HMv(b0D>4g9(8n6uq!X zZ5f4sfzD>y87h5SDDbI}n_)Y#KrvTXFz5;nK2>#Aa^_htQQQ$u(2TGDG(LDc9!B^ynVci*TwtzKZ9b@*h`^n nB>(^*07*naRCt{1oq2o|Mf(5WlVoyV6D9 Date: Sun, 4 Jun 2017 18:00:16 -0400 Subject: [PATCH 115/261] Communicator QOL Tweak Call/Msg buttons on contacts list --- code/game/objects/items/devices/communicator/communicator.dm | 4 ++-- nano/templates/communicator.tmpl | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 0bfe99bbb7..4fa3e1efcd 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -261,7 +261,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Proc: ui_interact() // Parameters: 4 (standard NanoUI arguments) // Description: Uses a bunch of for loops to turn lists into lists of lists, so they can be displayed in nanoUI, then displays various buttons to the user. -/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/device/communicator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) // this is the data which will be sent to the ui var/data[0] //General nanoUI information var/communicators[0] //List of communicators @@ -356,7 +356,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700) + ui = new(user, src, ui_key, "communicator.tmpl", "Communicator", 475, 700, state = key_state) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window diff --git a/nano/templates/communicator.tmpl b/nano/templates/communicator.tmpl index 58b86a30d7..6157f45d61 100644 --- a/nano/templates/communicator.tmpl +++ b/nano/templates/communicator.tmpl @@ -152,7 +152,10 @@ Used In File(s): code\game\objects\items\devices\communicator\communicator.dm {{:value.name}}