From c48ffa8d638d0d7a066a2852dfc95564add7b8bf Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Sun, 21 Jun 2015 23:27:37 +0200 Subject: [PATCH 001/423] Lighting optimizations + meson fix --- code/__HELPERS/maths.dm | 17 ++---- code/__HELPERS/unsorted.dm | 22 +++++++ code/game/area/Space Station 13 areas.dm | 2 +- code/game/turfs/turf.dm | 8 ++- code/modules/lighting/_lighting_defs.dm | 2 +- code/modules/lighting/light_source.dm | 53 +++++++++-------- code/modules/lighting/lighting_overlay.dm | 70 ++++++++++++++++++++--- code/modules/lighting/lighting_system.dm | 32 ++--------- code/modules/lighting/lighting_turf.dm | 23 ++------ code/modules/mob/living/living_defense.dm | 2 +- code/setup.dm | 4 +- 11 files changed, 142 insertions(+), 93 deletions(-) diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index f148b10ef8d..2b6d6db018f 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -1,15 +1,6 @@ // Macro functions. #define RAND_F(LOW, HIGH) (rand()*(HIGH-LOW) + LOW) -// List of square roots for the numbers 1-100. -var/list/sqrtTable = list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10) - -/proc/Clamp(val, min, max) - return max(min, min(val, max)) - // min is inclusive, max is exclusive /proc/Wrap(val, min, max) var/d = max - min @@ -101,18 +92,18 @@ var/list/sqrtTable = list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, // if they are imaginary. /proc/SolveQuadratic(a, b, c) ASSERT(a) - + . = list() var/discriminant = b*b - 4*a*c var/bottom = 2*a - + // Return if the roots are imaginary. if(discriminant < 0) return - + var/root = sqrt(discriminant) . += (-b + root) / bottom - + // If discriminant == 0, there would be two roots at the same position. if(discriminant != 0) . += (-b - root) / bottom diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 31c885d8868..98e76920e87 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1315,3 +1315,25 @@ var/list/WALLITEMS = list( temp_col = "0[temp_col]" colour += temp_col return colour + +//Version of view() which ignores darkness, because BYOND doesn't have it. +/proc/dview(var/range = world.view, var/center, var/invis_flags = 0) + if(!center) + return + + var/global/mob/dview/DV + if(!DV) + DV = new + + DV.loc = center + + DV.see_in_dark = range + DV.see_invisible = invis_flags + + . = view(range, DV) + DV.loc = null + +/mob/dview + invisibility = 101 + density = 0 + diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 04d7ef41e9e..76cf6f8c027 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -26,7 +26,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = 10 - luminosity = 1 + luminosity = 0 mouse_opacity = 0 var/lightswitch = 1 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 65d90506170..94919b85893 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -33,6 +33,7 @@ var/holy = 0 var/dynamic_lighting = 1 + luminosity = 0 /turf/New() ..() @@ -41,7 +42,10 @@ src.Entered(AM) return turfs |= src - return + + var/area/A = loc + if(!dynamic_lighting || !A.lighting_use_dynamic) + luminosity = 1 /turf/Destroy() turfs -= src @@ -229,6 +233,7 @@ var/old_opacity = opacity var/old_dynamic_lighting = dynamic_lighting var/list/old_affecting_lights = affecting_lights + var/old_lighting_overlay = lighting_overlay //world << "Replacing [src.type] with [N]" @@ -280,6 +285,7 @@ W.levelupdate() . = W + lighting_overlay = old_lighting_overlay affecting_lights = old_affecting_lights if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update) reconsider_lights() diff --git a/code/modules/lighting/_lighting_defs.dm b/code/modules/lighting/_lighting_defs.dm index a913c97e216..57e6cc22d2a 100644 --- a/code/modules/lighting/_lighting_defs.dm +++ b/code/modules/lighting/_lighting_defs.dm @@ -4,7 +4,7 @@ #define LIGHTING_LAMBERTIAN 1 // use lambertian shading for light sources #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_TRANSITIONS 1 // smooth, animated transitions, similar to /tg/station +#define LIGHTING_ROUND_VALUE (1 / 128) //Value used to round lumcounts, values smaller than 1/255 don't matter (if they do, thanks sinking points), greater values will make lighting less precise, but in turn increase performance, VERY SLIGHTLY. -#define LIGHTING_RESOLUTION 1 // resolution of the lighting overlays, powers of 2 only, max of 32 #define LIGHTING_LAYER 10 // drawing layer for lighting overlays #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm index 18972721180..a71550268c1 100644 --- a/code/modules/lighting/light_source.dm +++ b/code/modules/lighting/light_source.dm @@ -60,13 +60,16 @@ if(top_atom != source_atom) if(!top_atom.light_sources) top_atom.light_sources = list() top_atom.light_sources += src - lighting_update_lights += src - needs_update = 1 + + if(!needs_update) + lighting_update_lights += src + needs_update = 1 /datum/light_source/proc/force_update() - needs_update = 1 force_update = 1 - lighting_update_lights += src + if(!needs_update) + lighting_update_lights += src + needs_update = 1 /datum/light_source/proc/check() if(!source_atom || !light_range || !light_power) @@ -113,11 +116,7 @@ /datum/light_source/proc/falloff(atom/movable/lighting_overlay/O) #if LIGHTING_FALLOFF == 1 // circular - #if LIGHTING_RESOLUTION == 1 . = (O.x - source_turf.x)**2 + (O.y - source_turf.y)**2 + LIGHTING_HEIGHT - #else - . = (O.x - source_turf.x + O.xoffset)**2 + (O.y - source_turf.y + O.yoffset)**2 + LIGHTING_HEIGHT - #endif #if LIGHTING_LAMBERTIAN == 1 . = CLAMP01((1 - CLAMP01(sqrt(.) / light_range)) * (1 / (sqrt(. + 1)))) @@ -126,11 +125,7 @@ #endif #elif LIGHTING_FALLOFF == 2 // square - #if LIGHTING_RESOLUTION == 1 . = abs(O.x - source_turf.x) + abs(O.y - source_turf.y) + LIGHTING_HEIGHT - #else - . = abs(O.x - source_turf.x + O.xoffset) + abs(O.y - source_turf.y + O.yoffset) + LIGHTING_HEIGHT - #endif #if LIGHTING_LAMBERTIAN == 1 . = CLAMP01((1 - CLAMP01(. / light_range)) * (1 / (sqrt(.)**2 + ))) @@ -142,26 +137,36 @@ /datum/light_source/proc/apply_lum() applied = 1 if(istype(source_turf)) - for(var/atom/movable/lighting_overlay/O in view(light_range, source_turf)) - var/strength = light_power * falloff(O) + for(var/turf/T in dview(light_range, source_turf, INVISIBILITY_LIGHTING)) + if(T.lighting_overlay) + var/strength = light_power * falloff(T.lighting_overlay) + if(!strength) //Don't add turfs that aren't affected to the affected turfs. + continue - effect_r[O] = lum_r * strength - effect_g[O] = lum_g * strength - effect_b[O] = lum_b * strength + effect_r[T.lighting_overlay] = round(lum_r * strength, LIGHTING_ROUND_VALUE) + effect_g[T.lighting_overlay] = round(lum_g * strength, LIGHTING_ROUND_VALUE) + effect_b[T.lighting_overlay] = round(lum_b * strength, LIGHTING_ROUND_VALUE) + + T.lighting_overlay.update_lumcount( + round(lum_r * strength, LIGHTING_ROUND_VALUE), + round(lum_g * strength, LIGHTING_ROUND_VALUE), + round(lum_b * strength, LIGHTING_ROUND_VALUE) + ) + + if(!T.affecting_lights) + T.affecting_lights = list() - O.update_lumcount(lum_r * strength, lum_g * strength, lum_b * strength) - for(var/turf/T in view(light_range, source_turf)) - if(!T.affecting_lights) T.affecting_lights = list() T.affecting_lights += src effect_turf += T /datum/light_source/proc/remove_lum() applied = 0 - for(var/atom/movable/lighting_overlay/O in effect_r) - O.update_lumcount(-effect_r[O], -effect_g[O], -effect_b[O]) - for(var/turf/T in effect_turf) - if(T.affecting_lights) T.affecting_lights -= src + if(T.affecting_lights) + T.affecting_lights -= src + + if(T.lighting_overlay) + T.lighting_overlay.update_lumcount(-effect_r[T.lighting_overlay], -effect_g[T.lighting_overlay], -effect_b[T.lighting_overlay]) effect_r.Cut() effect_g.Cut() diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm index b75d8aec7f6..47365d6d366 100644 --- a/code/modules/lighting/lighting_overlay.dm +++ b/code/modules/lighting/lighting_overlay.dm @@ -5,6 +5,7 @@ anchored = 1 icon = LIGHTING_ICON + icon_state = "light1" layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING blend_mode = BLEND_MULTIPLY @@ -14,11 +15,6 @@ var/lum_g var/lum_b - #if LIGHTING_RESOLUTION != 1 - var/xoffset - var/yoffset - #endif - var/needs_update /atom/movable/lighting_overlay/New() @@ -26,12 +22,32 @@ verbs.Cut() /atom/movable/lighting_overlay/proc/update_lumcount(delta_r, delta_g, delta_b) + if(!delta_r && !delta_g && !delta_b) //Nothing is being changed all together. + return + + var/should_update = 0 + + if(!needs_update) //If this isn't true, we're already updating anyways. + if(max(lum_r, lum_g, lum_b) < 1) //Any change that could happen WILL change appearance. + should_update = 1 + + else if(max(lum_r + delta_r, lum_g + delta_g, lum_b + delta_b) < 1) //The change would bring us under 1 max lum, again, guaranteed to change appearance. + should_update = 1 + + else //We need to make sure that the colour ratios won't change in this code block. + var/mx1 = max(lum_r, lum_g, lum_b) + var/mx2 = max(lum_r + delta_r, lum_g + delta_g, lum_b + delta_b) + + if(lum_r / mx1 != (lum_r + delta_r) / mx2 || lum_g / mx1 != (lum_g + delta_g) / mx2 || lum_b / mx1 != (lum_b + delta_b) / mx2) //Stuff would change. + should_update = 1 + lum_r += delta_r lum_g += delta_g lum_b += delta_b - needs_update = 1 - lighting_update_overlays += src + if(!needs_update && should_update) + needs_update = 1 + lighting_update_overlays += src /atom/movable/lighting_overlay/proc/update_overlay() var/mx = max(lum_r, lum_g, lum_b) @@ -46,3 +62,43 @@ #else color = rgb(lum_r * 255 * ., lum_g * 255 * ., lum_b * 255 * .) #endif + + var/turf/T = loc + + if(istype(T)) //Incase we're not on a turf, pool ourselves, something happened. + if(color != "#000000") + T.luminosity = 1 + else //No light, set the turf's luminosity to 0 to remove it from view() + #if LIGHTING_TRANSITIONS == 1 + spawn(LIGHTING_INTERVAL - 1) + T.luminosity = 0 + #else + T.luminosity = 0 + #endif + + else + warning("A lighting overlay realised its loc was NOT a turf (actual loc: [loc][loc ? ", " + loc.type : ""]) in update_overlay() and got pooled!") + qdel(src) + +/atom/movable/lighting_overlay/ResetVars() + loc = null + + lum_r = 0 + lum_g = 0 + lum_b = 0 + + color = "#000000" + + needs_update = 0 + +/atom/movable/lighting_overlay/Destroy() + lighting_update_overlays -= src + + var/turf/T = loc + if(istype(T)) + T.lighting_overlay = null + + for(var/datum/light_source/D in T.affecting_lights) //Remove references to us on the light sources affecting us. + D.effect_r -= src + D.effect_g -= src + D.effect_b -= src diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm index 6177c81f8ff..0c84294f35e 100644 --- a/code/modules/lighting/lighting_system.dm +++ b/code/modules/lighting/lighting_system.dm @@ -5,26 +5,15 @@ // duplicates lots of code, but this proc needs to be as fast as possible. /proc/create_lighting_overlays(zlevel = 0) - var/state = "light[LIGHTING_RESOLUTION]" var/area/A if(zlevel == 0) // populate all zlevels for(var/turf/T in world) if(T.dynamic_lighting) A = T.loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 - var/atom/movable/lighting_overlay/O = new(T) - O.icon_state = state - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(T) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - #endif + var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, T) + T.lighting_overlay = O + else for(var/x = 1; x <= world.maxx; x++) for(var/y = 1; y <= world.maxy; y++) @@ -32,16 +21,5 @@ if(T.dynamic_lighting) A = T.loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 - var/atom/movable/lighting_overlay/O = new(T) - O.icon_state = state - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(T) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - #endif + var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, T) + T.lighting_overlay = O diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 266e4b1d791..0a438b047c3 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -1,29 +1,18 @@ /turf var/list/affecting_lights + var/atom/movable/lighting_overlay/lighting_overlay /turf/proc/reconsider_lights() for(var/datum/light_source/L in affecting_lights) L.force_update() /turf/proc/lighting_clear_overlays() - for(var/atom/movable/lighting_overlay/L in src) - L.loc = null + if(lighting_overlay) + qdel(lighting_overlay) /turf/proc/lighting_build_overlays() - if(!locate(/atom/movable/lighting_overlay) in src) - var/state = "light[LIGHTING_RESOLUTION]" + if(!lighting_overlay) var/area/A = loc if(A.lighting_use_dynamic) - #if LIGHTING_RESOLUTION == 1 - var/atom/movable/lighting_overlay/O = new(src) - O.icon_state = state - #else - for(var/i = 0; i < LIGHTING_RESOLUTION; i++) - for(var/j = 0; j < LIGHTING_RESOLUTION; j++) - var/atom/movable/lighting_overlay/O = new(src) - O.pixel_x = i * (32 / LIGHTING_RESOLUTION) - O.pixel_y = j * (32 / LIGHTING_RESOLUTION) - O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5) - O.icon_state = state - #endif + var/atom/movable/lighting_overlay/O = PoolOrNew(/atom/movable/lighting_overlay, src) + lighting_overlay = O diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 32b02350092..97b16ea797d 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -215,7 +215,7 @@ return /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person - fire_stacks = Clamp(fire_stacks + add_fire_stacks, min = FIRE_MIN_STACKS, max = FIRE_MAX_STACKS) + fire_stacks = Clamp(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS) /mob/living/proc/handle_fire() if(fire_stacks < 0) diff --git a/code/setup.dm b/code/setup.dm index ba6762e3c7a..6b2262da98f 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -955,7 +955,9 @@ var/list/be_special_flags = list( #define WALL_CAN_OPEN 1 #define WALL_OPENING 2 -#define CLAMP01(x) max(0, min(1, x)) +#define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x)) + +#define CLAMP01(x) (Clamp(x, 0, 1)) #define DEFAULT_WALL_MATERIAL "steel" #define DEFAULT_TABLE_MATERIAL "plastic" From 7ede629cdefdc102516337d501d87ce78e955440 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 24 Jun 2015 04:20:30 +0930 Subject: [PATCH 002/423] Ported window spawner, tyvm WrongEnd --- baystation12.dme | 1 + .../game/objects/structures/window_spawner.dm | 41 ++++++++++++++++++ icons/obj/structures.dmi | Bin 173898 -> 184723 bytes 3 files changed, 42 insertions(+) create mode 100644 code/game/objects/structures/window_spawner.dm diff --git a/baystation12.dme b/baystation12.dme index abca8d814cd..8a520432047 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -771,6 +771,7 @@ #include "code\game\objects\structures\watercloset.dm" #include "code\game\objects\structures\windoor_assembly.dm" #include "code\game\objects\structures\window.dm" +#include "code\game\objects\structures\window_spawner.dm" #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\crates_lockers\largecrate.dm" diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm new file mode 100644 index 00000000000..b676a27cb22 --- /dev/null +++ b/code/game/objects/structures/window_spawner.dm @@ -0,0 +1,41 @@ +// Ported from Haine and WrongEnd with much gratitude! +/* ._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._. */ +/*-=-=-=-=-=-=-=-=-=-=-=-=-=WHAT-EVER=-=-=-=-=-=-=-=-=-=-=-=-=-*/ +/* '~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~' */ + +/obj/wingrille_spawn + name = "window grille spawner" + icon = 'icons/obj/structures.dmi' + icon_state = "wingrille" + density = 1 + anchored = 1.0 + invisibility = 101 + pressure_resistance = 4*ONE_ATMOSPHERE + var/win_path = /obj/structure/window/basic + +/obj/wingrille_spawn/initialize() + ..() + if(!win_path) + return + if (!locate(/obj/structure/grille) in get_turf(src)) + new /obj/structure/grille(src.loc) + for (var/dir in cardinal) + var/turf/T = get_step(src, dir) + if (!locate(/obj/wingrille_spawn) in T) + var/obj/structure/window/new_win = new win_path(src.loc) + new_win.set_dir(dir) + +/obj/wingrille_spawn/reinforced + name = "reinforced window grille spawner" + icon_state = "r-wingrille" + win_path = /obj/structure/window/reinforced + +/obj/wingrille_spawn/phoron + name = "phoron window grille spawner" + icon_state = "p-wingrille" + win_path = /obj/structure/window/phoronbasic + +/obj/wingrille_spawn/reinforced_phoron + name = "reinforced phoron window grille spawner" + icon_state = "pr-wingrille" + win_path = /obj/structure/window/phoronreinforced diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index d947725e034f941981dbe5f78fb4865963685a83..46cce0dfd56ebbfc6e2ca8ec0b2cc703acd1503a 100644 GIT binary patch delta 18253 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 delta 7342 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 NQB&4ZDpRm}{XZKxZCC&R From 1cb41db9953e3c546adff5eae79d25e1e6d9854a Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 21 Jun 2015 12:32:01 -0400 Subject: [PATCH 003/423] Adds lighting for air alarms and fire alarms --- code/game/machinery/alarm.dm | 42 ++++++++++++++----- code/modules/lighting/lighting_atom.dm | 16 +++++-- .../security levels/security levels.dm | 27 +++--------- 3 files changed, 50 insertions(+), 35 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 457e6b8fdca..2541c1c95be 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -302,22 +302,30 @@ /obj/machinery/alarm/update_icon() if(wiresexposed) icon_state = "alarmx" + set_light(0) return if((stat & (NOPOWER|BROKEN)) || shorted) icon_state = "alarmp" + set_light(0) return var/icon_level = danger_level if (alarm_area.atmosalm) icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow + var/new_color = null switch(icon_level) if (0) icon_state = "alarm0" + new_color = "#03A728" if (1) icon_state = "alarm2" //yes, alarm2 is yellow alarm + new_color = "#EC8B2F" if (2) icon_state = "alarm1" + new_color = "#DA0205" + + set_light(l_range = 2, l_power = 0.5, l_color = new_color) /obj/machinery/alarm/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) @@ -888,8 +896,11 @@ FIRE ALARM var/last_process = 0 var/wiresexposed = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/seclevel /obj/machinery/firealarm/update_icon() + overlays.Cut() + if(wiresexposed) switch(buildstage) if(2) @@ -898,17 +909,28 @@ FIRE ALARM icon_state="fire_b1" if(0) icon_state="fire_b0" - + set_light(0) return if(stat & BROKEN) icon_state = "firex" + set_light(0) else if(stat & NOPOWER) icon_state = "firep" - else if(!src.detecting) - icon_state = "fire1" + set_light(0) else - icon_state = "fire0" + if(!src.detecting) + icon_state = "fire1" + set_light(l_range = 4, l_power = 2, l_color = "#ff0000") + else + icon_state = "fire0" + switch(seclevel) + if("green") set_light(l_range = 2, l_power = 0.5, l_color = "#00ff00") + if("blue") set_light(l_range = 2, l_power = 0.5, l_color = "#1024A9") + if("red") set_light(l_range = 4, l_power = 2, l_color = "#ff0000") + if("delta") set_light(l_range = 4, l_power = 2, l_color = "#FF6633") + + src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]") /obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) if(src.detecting) @@ -1120,14 +1142,14 @@ FIRE ALARM pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 +/obj/machinery/firealarm/proc/set_security_level(var/newlevel) + if(seclevel != newlevel) + seclevel = newlevel + update_icon() + /obj/machinery/firealarm/initialize() if(z in config.contact_levels) - if(security_level) - src.overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]") - else - src.overlays += image('icons/obj/monitors.dmi', "overlay_green") - - update_icon() + set_security_level(security_level? get_security_level() : "green") /* FIRE ALARM CIRCUIT diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 92500ecc1d9..6db8d67feb2 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -7,11 +7,19 @@ var/list/light_sources /atom/proc/set_light(l_range, l_power, l_color) - if(l_power != null) light_power = l_power - if(l_range != null) light_range = l_range - if(l_color != null) light_color = l_color + . = 0 //make it less costly if nothing's changed - update_light() + if(l_power != null && l_power != light_power) + light_power = l_power + . = 1 + if(l_range != null && l_range != light_range) + light_range = l_range + . = 1 + if(l_color != null && l_color != light_color) + light_color = l_color + . = 1 + + if(.) update_light() /atom/proc/update_light() if(!light_power || !light_range) diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 1892af891ed..4b73c0dd28d 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -25,46 +25,31 @@ if(SEC_LEVEL_GREEN) security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green") security_level = SEC_LEVEL_GREEN - for(var/obj/machinery/firealarm/FA in machines) - if(FA.z in config.contact_levels) - FA.overlays = list() - FA.overlays += image('icons/obj/monitors.dmi', "overlay_green") if(SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE) security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue") else security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue") security_level = SEC_LEVEL_BLUE - for(var/obj/machinery/firealarm/FA in machines) - if(FA.z in config.contact_levels) - FA.overlays = list() - FA.overlays += image('icons/obj/monitors.dmi', "overlay_blue") if(SEC_LEVEL_RED) if(security_level < SEC_LEVEL_RED) security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Code red!") else security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") security_level = SEC_LEVEL_RED - /* - At the time of commit, setting status displays didn't work properly var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world) if(CC) CC.post_status("alert", "redalert")*/ - - for(var/obj/machinery/firealarm/FA in machines) - if(FA.z in config.contact_levels) - FA.overlays = list() - FA.overlays += image('icons/obj/monitors.dmi', "overlay_red") - if(SEC_LEVEL_DELTA) security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg') security_level = SEC_LEVEL_DELTA - for(var/obj/machinery/firealarm/FA in machines) - if(FA.z in config.contact_levels) - FA.overlays = list() - FA.overlays += image('icons/obj/monitors.dmi', "overlay_delta") - else - return + + var/newlevel = get_security_level() + for(var/obj/machinery/firealarm/FA in machines) + if(FA.z in config.contact_levels) + FA.set_security_level(newlevel) + /proc/get_security_level() switch(security_level) From 93884c6a3e81d4211742fff6406fcff5bf3c6135 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 25 Jun 2015 23:03:52 +0930 Subject: [PATCH 004/423] Spawners are now obj/effect, can be used post-roundstart, and use pooling. --- .../game/objects/structures/window_spawner.dm | 59 +++++++++++++++---- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index b676a27cb22..116d1ca454f 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -3,39 +3,78 @@ /*-=-=-=-=-=-=-=-=-=-=-=-=-=WHAT-EVER=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* '~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~' */ -/obj/wingrille_spawn +/obj/effect/wingrille_spawn name = "window grille spawner" icon = 'icons/obj/structures.dmi' icon_state = "wingrille" density = 1 anchored = 1.0 - invisibility = 101 pressure_resistance = 4*ONE_ATMOSPHERE var/win_path = /obj/structure/window/basic + var/activated -/obj/wingrille_spawn/initialize() +/obj/effect/wingrille_spawn/attack_hand() + attack_generic() + +/obj/effect/wingrille_spawn/attack_ghost() + attack_generic() + +/obj/effect/wingrille_spawn/attack_generic() + activate() + +/obj/effect/wingrille_spawn/initialize() ..() if(!win_path) return + if(ticker && ticker.current_state < GAME_STATE_PLAYING) + activate() + +/obj/effect/wingrille_spawn/proc/activate() + if(activated) return if (!locate(/obj/structure/grille) in get_turf(src)) - new /obj/structure/grille(src.loc) + var/obj/structure/grille/G = PoolOrNew(/obj/structure/grille, src.loc) + handle_grille_spawn(G) + var/list/neighbours = list() for (var/dir in cardinal) var/turf/T = get_step(src, dir) - if (!locate(/obj/wingrille_spawn) in T) - var/obj/structure/window/new_win = new win_path(src.loc) - new_win.set_dir(dir) + var/obj/effect/wingrille_spawn/other = locate(/obj/effect/wingrille_spawn) in T + if(!other) + var/found_connection + if(locate(/obj/structure/grille) in T) + for(var/obj/structure/window/W in T) + if(W.type == win_path && W.dir == get_dir(T,src)) + found_connection = 1 + qdel(W) + if(!found_connection) + var/obj/structure/window/new_win = PoolOrNew(win_path, src.loc) + new_win.set_dir(dir) + handle_window_spawn(new_win) + else + neighbours |= other + activated = 1 + for(var/obj/effect/wingrille_spawn/other in neighbours) + if(!other.activated) other.activate() + qdel(src) -/obj/wingrille_spawn/reinforced +// Currently unused, could be useful for POLARIZED WINDOWS, HUH PSIGAMMA. +/obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W) + return + +// Currently unused, could be useful for pre-wired electrified windows. +/obj/effect/wingrille_spawn/proc/handle_grille_spawn(var/obj/structure/grille/G) + return + +/obj/effect/wingrille_spawn/reinforced name = "reinforced window grille spawner" icon_state = "r-wingrille" win_path = /obj/structure/window/reinforced -/obj/wingrille_spawn/phoron +/obj/effect/wingrille_spawn/phoron name = "phoron window grille spawner" icon_state = "p-wingrille" win_path = /obj/structure/window/phoronbasic -/obj/wingrille_spawn/reinforced_phoron +/obj/effect/wingrille_spawn/reinforced_phoron name = "reinforced phoron window grille spawner" icon_state = "pr-wingrille" win_path = /obj/structure/window/phoronreinforced From a036e8d47ebbb4515689c30af7c4a50f2755acac Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 25 Jun 2015 16:09:04 +0200 Subject: [PATCH 005/423] Adds support for polarized windows. --- code/game/objects/structures/window_spawner.dm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm index 116d1ca454f..e6c2d06001a 100644 --- a/code/game/objects/structures/window_spawner.dm +++ b/code/game/objects/structures/window_spawner.dm @@ -56,7 +56,6 @@ if(!other.activated) other.activate() qdel(src) -// Currently unused, could be useful for POLARIZED WINDOWS, HUH PSIGAMMA. /obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W) return @@ -78,3 +77,13 @@ name = "reinforced phoron window grille spawner" icon_state = "pr-wingrille" win_path = /obj/structure/window/phoronreinforced + +/obj/effect/wingrille_spawn/reinforced/polarized + name = "polarized window grille spawner" + color = "#444444" + win_path = /obj/structure/window/reinforced/polarized + var/id + +/obj/effect/wingrille_spawn/reinforced/polarized/handle_window_spawn(var/obj/structure/window/reinforced/polarized/P) + if(id) + P.id = id From b0ff071c664d75b095ad25d9d893dd0bb8b8670c Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 27 Jun 2015 19:01:11 +0200 Subject: [PATCH 006/423] Enforces Crescent area restrictions. Installs several blast door, controlled by the central Crescent checkpoint, to enforce access restriction to the Thunderdome, shuttle, and post-security check areas. --- maps/exodus-2.dmm | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm index 173ca58f978..e3272909194 100644 --- a/maps/exodus-2.dmm +++ b/maps/exodus-2.dmm @@ -1302,7 +1302,7 @@ "zb" = (/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 = "dark"},/area/tdome) "zc" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "zd" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) -"ze" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"ze" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/obj/machinery/door/blast/regular{id = "crescent_vip_shuttle"; name = "Crescent VIP Shuttle"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) "zf" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control) "zg" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) "zh" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom) @@ -1321,7 +1321,7 @@ "zu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/control) "zv" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/control) "zw" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/control) -"zx" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"zx" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell"; opacity = 1; req_access_txt = "101"},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "zy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/control) "zz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space) "zA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) @@ -1442,7 +1442,7 @@ "BL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "BM" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "BN" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/ferry) -"BO" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) +"BO" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "BP" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/control) "BQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) "BR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) @@ -1594,7 +1594,7 @@ "EH" = (/turf/unsimulated/wall,/area/tdome) "EI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "EJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) -"EK" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"EK" = (/obj/machinery/door_control{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24},/obj/machinery/door_control{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24},/obj/machinery/door_control{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "EL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "EM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "EN" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor{icon_state = "carpet13-5"; dir = 4},/area/holodeck/source_courtroom) @@ -1665,7 +1665,7 @@ "Ga" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Gb" = (/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Gc" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) -"Gd" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) +"Gd" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "Ge" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Gf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "Gg" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) @@ -1975,6 +1975,8 @@ "LY" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "LZ" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "Ma" = (/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{icon_state = "floor6"},/area/syndicate_station/start) +"Mb" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"Mc" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "MA" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space) "MP" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "MQ" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) @@ -2182,12 +2184,12 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutwxvbwyoNwzwAwBoNtZoNvNvKtZtZwEoNwmvMtvwFwGwGwGwHwGwItvwJwJwJtvufufwKwLwMwNwOwPwQwRwSwLwTufuftxwUwUwUwUwUtxtxuOtxtxtxuOtxtxuNuNuNuNuNvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNyQtZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhLgoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLWyaoNoNoNoNoNyboNycwmydyeyWygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywObtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiEKyqwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLWyaoNoNoNoNoNyboNycwmydyeyWygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypxStxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywObtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNxewmydyfLXygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzitZtZtZtZtZtZoNxetZtZwqwqwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZLfoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZxazkoNyXzmzmoNznznoNoNoNoNyhyINbzpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxtxaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZLfoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzxtxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZxazkoNyXzmzmoNznznoNoNoNoNyhyINbzpzqzryhzsztztzszuzvufzwtxtxtxBOtxtxtxaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNzAzBzBzAaMaMaMyhyIzCzDzEzDyhzszFzFzszGzHufzwtxzIwTufwKzJtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNzOzOzNzNzPaMyhyIyIyIyIyIyhzsztztzszQzHufzwtxueufufufvVtxaMaMaMaMaMaMaMaMaMaMaMaMzRzSNaNaNazTzUaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaAbAcAcAdAdzNzPyhyhyhyhyhyhyhzszszszsAezHufzwtxAfuxAfAhAftxaMaMaMaMaMaMaMaMaMaMaMzRAiNiNjNkNlNmAlzUaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2198,7 +2200,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYAZBaBbBcBcBcBcBcAHBdxCBeufufBfvVxCBdyuaMaMaMaMaMaMaMaMAtADCrAtMSMTMUAtBuADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBlBmBnBlBmBmBoBpBqBmBrBsAYAWAWBtBcBcBcBcBcAHBdwrBeufufufvVwrBdyuyuyuyuyuyuaMaMaMACADCrCCMQMRMPCCBuADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBlByBzBABBBCBCBCBCBCBCBDBEAYAWAWBbBcBcBcBcBcAHBdwrBeufufufBFwrBdBGBGBGBGBGyuaMaMzRAiADCrDfMQBwMPDfBuADAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBIBJBKBJBLBJBJBJBJBJBJBJBMAWAWAWAHAHAHAHBNBOAHBdwrBeufufufBPBQvmBRBRBRBRBRBRBRBSAtBgADCrAlACBvACAiBuADBgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBIBJBKBJBLBJBJBJBJBJBJBJBMAWAWAWAHAHAHAHBNzeAHBdwrBeufufufBPBQvmBRBRBRBRBRBRBRBSAtBgADCrAlACBvACAiBuADBgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBWBXBYBZBBCaCaCaCaCaCaCbCcAYAWAWAHCdCeCfCgCgAHChCiCjufufufufCkClClMZClClCmCnCoCnCpADADADMYMXADADMYADADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBWBmCsBWBmBmBoBpBqBmCtBsAYAWAWAHCuCvCwCgCgCxCyCzufufufufufCkClClClClClCmCABRBSAtMVADCrCCBuADCrCCBuADMWAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYAWAWAHCECFCGCgCgCxCyCzufufufufCHCIBRCJClClCKCLyuaMaMCCBuADCrCMBuADCrCMBuADCrCCaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM @@ -2210,13 +2212,13 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHDgDgDLDgDMDsDiDNDODlCPDmDPDQDlCPDGDRDSDSDSDSDSCNDTDTDTNDDVDVDWDXDXCNBGBGBGBGyuaMaMAtNENFAtNHNIEaNKNJAtNLNGAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHEcDgDgEdDgDsDiEeEfDlCPDmEgEhDlCPDGDSDSDSDSDSDSCNEiEjEjElDVDVDVDXDXCNyuyuyuyuyuaMaMAtNXNYAtNWNVEaEaNUAtNTNSAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHNODgDgDgDgEoDaCPCPCPCPCPCPCPCPCPDGDSDSEpEqErEsCNEtDVDVDVEwExDVDVEyCNaMaMaMaMaMaMaMEAEBEBAtNQEaNREbNPAtEBEBBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHDgECNuDrEDEEEFEGEGEGEHEHEHEIEJEKELEMEHEHEHCNCNCNNvDVDVEwEPEQExERESCNaMaMaMaMaMaMaMETEVEVBVDYDZEaNtNsEAEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHDgECNuDrEDEEEFEGEGEGEHEHEHEIEJMbELEMEHEHEHCNCNCNNvDVDVEwEPEQExERESCNaMaMaMaMaMaMaMETEVEVBVDYDZEaNtNsEAEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHDgDgDgEDEXEYEZEZEZEZEHFaFbFcFdFeFfFgFbFaEHCNCNCNCNCNCNNrFiNqFkERESCNaMaMaMaMaMaMaMaMaMaMETATEUEUEUATEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHFlDgEDEXEYEYEZEZEZEZEHFbFmFnFdFeFfFnFoFbEHFpFqFrFsFtCNDVFhFkDVDVEwFuaMaMaMaMaMaMaMaMaMaMaMETEVEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHDgEDEXEYEYEYEZEZEZEZEHFvFbFvFdFeFfFvFbFvEHFwDVDVDVDVFxDVDVDVDVDVFyFzaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHEDEXEYEYEYEYEYEYEYEYEHFAFbFbFdFeFfFbFbFBEHFCFDFEFFFGCNDVDVDVDVDVFHFIaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHAHAHAHAHAHAHAHAHAHAHAHEHFJFKFKFdFeFfFLFLFMEHFNFOFPFQFRCNFSFTFUFVFWFXCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM -aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeFeFeFeFeFeFeFeFeFeFeEHEHFYEHEHFeEHEHFYEHEHEHEHEHEHEHCNCNCNCNCNCNCNCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM +aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeFeFeFeFeFeFeFeFeFeFeEHEHMcEHEHFeEHEHMcEHEHEHEHEHEHEHCNCNCNCNCNCNCNCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHEHEHEHFZEHEHEHFeFeFeFeFeFeEHFeEHFeFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHEHEHEHEHEHEHEHGdEHEHEHEHEHEHEHEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHGeGfGgGfGhGiGiGiGiGiGhGiGhGiGjEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM From 6c8d5903e585f4f8d61efcc57401942b968fc9c3 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 27 Jun 2015 19:05:37 +0200 Subject: [PATCH 007/423] Changelog entries. --- .../PsiOmegaDelta-CrescentRestrictions.yml | 5 +++ html/changelogs/example.yml | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 html/changelogs/PsiOmegaDelta-CrescentRestrictions.yml create mode 100644 html/changelogs/example.yml diff --git a/html/changelogs/PsiOmegaDelta-CrescentRestrictions.yml b/html/changelogs/PsiOmegaDelta-CrescentRestrictions.yml new file mode 100644 index 00000000000..7cec02cdbec --- /dev/null +++ b/html/changelogs/PsiOmegaDelta-CrescentRestrictions.yml @@ -0,0 +1,5 @@ +author: PsiOmegaDelta +delete-after: True + +changes: + - maptweak: "Non-general areas on Crescent are now protected by blast doors to enforce area restrictions. Admins can operate these from the central checkpoint." diff --git a/html/changelogs/example.yml b/html/changelogs/example.yml new file mode 100644 index 00000000000..c34ccdd0a08 --- /dev/null +++ b/html/changelogs/example.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: N3X15 + +# 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 changelog editing system that should cause fewer conflicts and more accurate timestamps." + - rscdel: "Killed innocent kittens." From cecf48ce2434e74049e4e6a3559e62cf22aa654b Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 27 Jun 2015 19:06:58 +0200 Subject: [PATCH 008/423] Enforces the continued existence of example.yml. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1c6b3ecedce..ee7b92770c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,5 +20,6 @@ script: - shopt -s globstar - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - - ( md5sum -c - <<< "0af969f671fba6cf9696c78cd175a14a *baystation12.int") + - md5sum -c - <<< "0af969f671fba6cf9696c78cd175a14a *baystation12.int" + - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" - DreamMaker baystation12.dme From 9d57473eff191f6e56463e66a75a26e6f10ccbbe Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sun, 28 Jun 2015 01:34:57 +0100 Subject: [PATCH 009/423] changes time to never go higher than 23:59 --- code/__HELPERS/time.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index c90a935b6df..8d37b47f0af 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -8,7 +8,7 @@ var/roundstart_hour = 0 //Returns the world time in english proc/worldtime2text(time = world.time) if(!roundstart_hour) roundstart_hour = pick(2,7,12,17) - return "[round(time / 36000)+roundstart_hour]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" + return "[(round(time / 36000)+roundstart_hour) % 24]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" proc/worlddate2text() return num2text((text2num(time2text(world.timeofday, "YYYY"))+544)) + "-" + time2text(world.timeofday, "MM-DD") From c7ff5eebe36bdd984b6993a39c4449526e33d540 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 27 Jun 2015 22:32:00 -0400 Subject: [PATCH 010/423] Updates hats to use item_state_slots where necessary. --- code/__defines/items_clothing.dm | 5 +- .../crates_lockers/closets/secure/security.dm | 12 ++-- code/modules/clothing/head/collectable.dm | 26 ++++----- code/modules/clothing/head/hardhat.dm | 5 -- code/modules/clothing/head/helmet.dm | 33 +++-------- code/modules/clothing/head/jobs.dm | 55 +++++++++++++------ code/modules/clothing/head/misc.dm | 52 +++++++----------- code/modules/clothing/head/misc_special.dm | 30 +++++----- code/modules/clothing/head/soft_caps.dm | 5 +- code/modules/clothing/under/jobs/security.dm | 18 ------ .../mob/living/carbon/human/update_icons.dm | 24 +++++--- 11 files changed, 122 insertions(+), 143 deletions(-) diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index 7a461cedf6c..103cccf8335 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -97,10 +97,11 @@ // Inventory slot strings. // since numbers cannot be used as associative list keys. -#define slot_back_str "back" +#define slot_back_str "slot_back" #define slot_l_hand_str "slot_l_hand" #define slot_r_hand_str "slot_r_hand" -#define slot_w_uniform_str "w_uniform" +#define slot_w_uniform_str "slot_w_uniform" +#define slot_head_str "slot_head" // Bitflags for clothing parts. #define HEAD 1 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 f0c96695dcb..61d20f9de5b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -16,7 +16,7 @@ new /obj/item/weapon/storage/backpack/satchel_cap(src) new /obj/item/clothing/suit/captunic(src) new /obj/item/clothing/suit/captunic/capjacket(src) - new /obj/item/clothing/head/helmet/cap(src) + new /obj/item/clothing/head/caphat/cap(src) new /obj/item/clothing/under/rank/captain(src) new /obj/item/clothing/suit/storage/vest(src) new /obj/item/weapon/cartridge/captain(src) @@ -28,7 +28,7 @@ new /obj/item/clothing/suit/armor/captain(src) new /obj/item/weapon/melee/telebaton(src) new /obj/item/clothing/under/dress/dress_cap(src) - new /obj/item/clothing/head/helmet/formalcaptain(src) + new /obj/item/clothing/head/caphat/formal(src) new /obj/item/clothing/under/captainformal(src) return @@ -82,7 +82,7 @@ new /obj/item/clothing/shoes/leather(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src) - new /obj/item/clothing/head/helmet/hop(src) + new /obj/item/clothing/head/caphat/hop(src) return @@ -103,13 +103,13 @@ new /obj/item/weapon/storage/backpack/security(src) else new /obj/item/weapon/storage/backpack/satchel_sec(src) - new /obj/item/clothing/head/helmet/HoS(src) + new /obj/item/clothing/head/HoS(src) new /obj/item/clothing/suit/storage/vest/hos(src) new /obj/item/clothing/under/rank/head_of_security/jensen(src) new /obj/item/clothing/under/rank/head_of_security/corp(src) new /obj/item/clothing/suit/armor/hos/jensen(src) new /obj/item/clothing/suit/armor/hos(src) - new /obj/item/clothing/head/helmet/HoS/dermal(src) + new /obj/item/clothing/head/HoS/dermal(src) new /obj/item/weapon/cartridge/hos(src) new /obj/item/device/radio/headset/heads/hos(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) @@ -148,7 +148,7 @@ new /obj/item/clothing/under/rank/warden(src) new /obj/item/clothing/under/rank/warden/corp(src) new /obj/item/clothing/suit/armor/vest/warden(src) - new /obj/item/clothing/head/helmet/warden(src) + new /obj/item/clothing/head/warden(src) new /obj/item/weapon/cartridge/security(src) new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/clothing/glasses/sunglasses/sechud(src) diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index bf20b3e9528..6ea43fa0fad 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -26,8 +26,7 @@ /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" - icon_state = "hats" - item_state = "chefhat" + icon_state = "chefhat" /obj/item/clothing/head/collectable/paper name = "collectable paper hat" @@ -39,14 +38,20 @@ name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" - item_state = "that" + item_state_slots = list( + slot_l_hand_str = "that", + slot_r_hand_str = "that", + ) body_parts_covered = 0 /obj/item/clothing/head/collectable/captain name = "collectable captain's hat" desc = "A Collectable Hat that'll make you look just like a real comdom!" icon_state = "captain" - item_state = "caphat" + item_state_slots = list( + slot_l_hand_str = "caphat", + slot_r_hand_str = "caphat", + ) body_parts_covered = 0 /obj/item/clothing/head/collectable/police @@ -65,40 +70,38 @@ name = "collectable welding helmet" desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" - item_state = "welding" body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/slime name = "collectable slime hat" desc = "Just like a real Brain Slug!" icon_state = "headslime" - item_state = "headslime" /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A Collectible farmer's Flat Cap!" icon_state = "flat_cap" - item_state = "detective" + item_state_slots = list( + slot_l_hand_str = "detective", + slot_r_hand_str = "detective", + ) /obj/item/clothing/head/collectable/pirate name = "collectable pirate hat" desc = "You'd make a great Dread Syndie Roberts!" icon_state = "pirate" - item_state = "pirate" body_parts_covered = 0 /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels.....a bit too realistic." icon_state = "kitty" - item_state = "kitty" body_parts_covered = 0 /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" - item_state = "bunny" body_parts_covered = 0 /obj/item/clothing/head/collectable/wizard @@ -110,7 +113,6 @@ name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!" icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" body_parts_covered = 0 /obj/item/clothing/head/collectable/HoS @@ -123,10 +125,8 @@ name = "collectable Thunderdome helmet" desc = "Go Red! I mean Green! I mean Red! No Green!" icon_state = "thunderdome" - item_state = "thunderdome" /obj/item/clothing/head/collectable/swat name = "collectable SWAT helmet" desc = "Now you can be in the Deathsquad too!" icon_state = "swat" - item_state = "swat" \ No newline at end of file diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 16a6adda677..a98d747bfd4 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -2,7 +2,6 @@ name = "hard hat" desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" brightness_on = 4 //luminosity when on light_overlay = "hardhat_light" armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20) @@ -11,11 +10,9 @@ /obj/item/clothing/head/hardhat/orange icon_state = "hardhat0_orange" - item_state = "hardhat0_orange" /obj/item/clothing/head/hardhat/red icon_state = "hardhat0_red" - item_state = "hardhat0_red" name = "firefighter helmet" flags = STOPPRESSUREDAMAGE heat_protection = HEAD @@ -23,11 +20,9 @@ /obj/item/clothing/head/hardhat/white icon_state = "hardhat0_white" - item_state = "hardhat0_white" flags = STOPPRESSUREDAMAGE heat_protection = HEAD max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" - item_state = "hardhat0_dblue" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index eec6c828d86..c0290c0d7ee 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -2,8 +2,8 @@ name = "helmet" desc = "Standard Security gear. Protects the head from impacts." icon_state = "helmet" - flags = HEADCOVERSEYES | THICKMATERIAL item_state = "helmet" + flags = HEADCOVERSEYES | THICKMATERIAL armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD @@ -13,32 +13,11 @@ siemens_coefficient = 0.7 w_class = 3 -/obj/item/clothing/head/helmet/warden - name = "warden's hat" - desc = "It's a special helmet issued to the Warden of a securiy force. Protects the head from impacts." - icon_state = "policehelm" - flags_inv = 0 - body_parts_covered = 0 - -/obj/item/clothing/head/helmet/hop - name = "crew resource's hat" - desc = "A stylish hat that both protects you from enraged former-crewmembers and gives you a false sense of authority." - icon_state = "hopcap" - flags_inv = 0 - body_parts_covered = 0 - -/obj/item/clothing/head/helmet/formalcaptain - name = "parade hat" - desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." - icon_state = "officercap" - flags_inv = 0 - body_parts_covered = 0 - /obj/item/clothing/head/helmet/riot name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "riot" - item_state = "helmet" + item_state_slots = list(slot_head_str = "riot") flags = HEADCOVERSEYES armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0) flags_inv = HIDEEARS @@ -80,7 +59,7 @@ name = "tactical helmet" desc = "An armored helmet capable of being fitted with a multitude of attachments." icon_state = "swathelm" - item_state = "helmet" + item_state_slots = list(slot_head_str = "swathelm") flags = HEADCOVERSEYES sprite_sheets = list( "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', @@ -108,6 +87,7 @@ name = "emergency response team helmet" desc = "An in-atmosphere helmet worn by members of the NanoTrasen Emergency Response Team. Protects the head from impacts." icon_state = "erthelmet_cmd" + item_state_slots = list(slot_head_str = "erthelmet_cmd") item_state = "syndicate-helm-green" armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) @@ -121,15 +101,18 @@ name = "emergency response team security helmet" desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights." icon_state = "erthelmet_sec" + item_state_slots = list(slot_head_str = "erthelmet_sec") //Engineer /obj/item/clothing/head/helmet/ert/engineer name = "emergency response team engineer helmet" desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights." icon_state = "erthelmet_eng" + item_state_slots = list(slot_head_str = "erthelmet_eng") //Medical /obj/item/clothing/head/helmet/ert/medical name = "emergency response team medical helmet" desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights." - icon_state = "erthelmet_med" \ No newline at end of file + icon_state = "erthelmet_med" + item_state_slots = list(slot_head_str = "erthelmet_med") diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index ae2873e8f46..c4c7302bed3 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -4,29 +4,33 @@ name = "chef's hat" desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." icon_state = "chefhat" - item_state = "chefhat" - desc = "The commander in chef's head wear." - siemens_coefficient = 0.9 -//Captain: This probably shouldn't be space-worthy +//Captain /obj/item/clothing/head/caphat name = "captain's hat" icon_state = "captain" desc = "It's good being the king." - item_state = "caphat" - siemens_coefficient = 0.9 + item_state_slots = list( + slot_l_hand_str = "caphat", + slot_r_hand_str = "caphat", + ) + body_parts_covered = 0 -//Captain: This probably shouldn't be space-worthy -/obj/item/clothing/head/helmet/cap +/obj/item/clothing/head/caphat/cap name = "captain's cap" desc = "You fear to wear it for the negligence it brings." icon_state = "capcap" - flags_inv = 0 - body_parts_covered = 0 - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE - siemens_coefficient = 0.9 - body_parts_covered = 0 + +/obj/item/clothing/head/caphat/formal + name = "parade hat" + desc = "No one in a commanding position should be without a perfect, white hat of ultimate authority." + icon_state = "officercap" + +//HOP +/obj/item/clothing/head/caphat/hop + name = "crew resource's hat" + desc = "A stylish hat that both protects you from enraged former-crewmembers and gives you a false sense of authority." + icon_state = "hopcap" //Chaplain /obj/item/clothing/head/chaplain_hood @@ -34,7 +38,6 @@ desc = "It's hood that covers the head. It keeps you warm during the space winters." icon_state = "chaplain_hood" flags = HEADCOVERSEYES|BLOCKHAIR - siemens_coefficient = 0.9 body_parts_covered = HEAD|EYES //Chaplain @@ -43,17 +46,35 @@ desc = "Maximum piety in this star system." icon_state = "nun_hood" flags = HEADCOVERSEYES|BLOCKHAIR - siemens_coefficient = 0.9 + body_parts_covered = HEAD //Mime /obj/item/clothing/head/beret name = "beret" desc = "A beret, an artists favorite headwear." icon_state = "beret" - siemens_coefficient = 0.9 body_parts_covered = 0 //Security +/obj/item/clothing/head/HoS + name = "Head of Security Hat" + desc = "The hat of the Head of Security. For showing the officers who's in charge." + icon_state = "hoscap" + body_parts_covered = 0 + siemens_coefficient = 0.8 + +/obj/item/clothing/head/HoS/dermal + name = "Dermal Armour Patch" + desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." + icon_state = "dermal" + siemens_coefficient = 0.6 + +/obj/item/clothing/head/warden + name = "warden's hat" + desc = "It's a special helmet issued to the Warden of a securiy force." + icon_state = "policehelm" + body_parts_covered = 0 + /obj/item/clothing/head/beret/sec name = "security beret" desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 7b13c10b4b0..3d9455b9dff 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -4,7 +4,6 @@ name = "\improper CentComm. hat" icon_state = "centcom" desc = "It's good to be emperor." - item_state = "centhat" siemens_coefficient = 0.9 body_parts_covered = 0 @@ -12,7 +11,6 @@ name = "hair flower pin" icon_state = "hairflower" desc = "Smells nice." - item_state = "hairflower" slot_flags = SLOT_HEAD | SLOT_EARS body_parts_covered = 0 @@ -20,13 +18,15 @@ name = "powdered wig" desc = "A powdered wig." icon_state = "pwig" - item_state = "pwig" /obj/item/clothing/head/that name = "top-hat" desc = "It's an amish looking hat." icon_state = "tophat" - item_state = "that" + item_state_slots = list( + slot_l_hand_str = "that", + slot_r_hand_str = "that", + ) siemens_coefficient = 0.9 body_parts_covered = 0 @@ -67,7 +67,6 @@ /obj/item/clothing/head/syndicatefake name = "red space-helmet replica" icon_state = "syndicate" - item_state = "syndicate" desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!" flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE @@ -79,7 +78,6 @@ desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?" icon_state = "cueball" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR - item_state="cueball" flags_inv = 0 body_parts_covered = HEAD|FACE|EYES @@ -87,7 +85,6 @@ name = "green bandana" desc = "It's a green bandana with some fine nanotech lining." icon_state = "greenbandana" - item_state = "greenbandana" flags_inv = 0 body_parts_covered = 0 @@ -95,7 +92,6 @@ name = "cardborg helmet" desc = "A helmet made out of a box." icon_state = "cardborg_h" - item_state = "cardborg_h" flags = HEADCOVERSEYES | HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE body_parts_covered = HEAD|FACE|EYES @@ -104,24 +100,19 @@ name = "justice hat" desc = "fight for what's righteous!" icon_state = "justicered" - item_state = "justicered" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR /obj/item/clothing/head/justice/blue icon_state = "justiceblue" - item_state = "justiceblue" /obj/item/clothing/head/justice/yellow icon_state = "justiceyellow" - item_state = "justiceyellow" /obj/item/clothing/head/justice/green icon_state = "justicegreen" - item_state = "justicegreen" /obj/item/clothing/head/justice/pink icon_state = "justicepink" - item_state = "justicepink" /obj/item/clothing/head/rabbitears name = "rabbit ears" @@ -133,34 +124,33 @@ name = "flat cap" desc = "A working man's cap." icon_state = "flat_cap" - item_state = "detective" + item_state_slots = list( + slot_l_hand_str = "detective", + slot_r_hand_str = "detective", + ) siemens_coefficient = 0.9 /obj/item/clothing/head/pirate name = "pirate hat" desc = "Yarr." icon_state = "pirate" - item_state = "pirate" body_parts_covered = 0 /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." icon_state = "hgpiratecap" - item_state = "hgpiratecap" body_parts_covered = 0 /obj/item/clothing/head/bandana name = "pirate bandana" desc = "Yarr." icon_state = "bandana" - item_state = "bandana" /obj/item/clothing/head/bowler name = "bowler-hat" desc = "Gentleman, elite aboard!" icon_state = "bowler" - item_state = "bowler" body_parts_covered = 0 //stylish bs12 hats @@ -168,38 +158,32 @@ /obj/item/clothing/head/bowlerhat name = "bowler hat" icon_state = "bowler_hat" - item_state = "bowler_hat" desc = "For the gentleman of distinction." body_parts_covered = 0 /obj/item/clothing/head/beaverhat name = "beaver hat" icon_state = "beaver_hat" - item_state = "beaver_hat" desc = "Soft felt makes this hat both comfortable and elegant." /obj/item/clothing/head/boaterhat name = "boater hat" icon_state = "boater_hat" - item_state = "boater_hat" desc = "The ultimate in summer fashion." /obj/item/clothing/head/fedora - name = "\improper fedora" + name = "fedora" icon_state = "fedora" - item_state = "fedora" desc = "A sharp, stylish hat." /obj/item/clothing/head/feathertrilby - name = "\improper feather trilby" + name = "feather trilby" icon_state = "feather_trilby" - item_state = "feather_trilby" desc = "A sharp, stylish hat with a feather." /obj/item/clothing/head/fez - name = "\improper fez" + name = "fez" icon_state = "fez" - item_state = "fez" desc = "You should wear a fez. Fezzes are cool." //end bs12 hats @@ -208,7 +192,6 @@ name = "witch costume wig" desc = "Eeeee~heheheheheheh!" icon_state = "witch" - item_state = "witch" flags = BLOCKHAIR siemens_coefficient = 2.0 @@ -216,7 +199,10 @@ name = "chicken suit head" desc = "Bkaw!" icon_state = "chickenhead" - item_state = "chickensuit" + item_state_slots = list( + slot_l_hand_str = "chickensuit", + slot_r_hand_str = "chickensuit", + ) flags = BLOCKHAIR siemens_coefficient = 0.7 body_parts_covered = HEAD|FACE|EYES @@ -225,14 +211,16 @@ name = "bear pelt hat" desc = "Fuzzy." icon_state = "bearpelt" - item_state = "bearpelt" flags = BLOCKHAIR siemens_coefficient = 0.7 /obj/item/clothing/head/xenos name = "xenos helmet" icon_state = "xenos" - item_state = "xenos_helm" + item_state_slots = list( + slot_l_hand_str = "xenos_helm", + slot_r_hand_str = "xenos_helm", + ) desc = "A helmet made out of chitinous alien hide." flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE @@ -243,7 +231,6 @@ name = "natural philosopher's wig" desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!" icon_state = "philosopher_wig" - item_state = "philosopher_wig" flags = BLOCKHAIR siemens_coefficient = 2.0 //why is it so conductive?! body_parts_covered = 0 @@ -252,5 +239,4 @@ name = "orange bandana" desc = "An orange piece of cloth, worn on the head." icon_state = "orange_bandana" - item_state = "orange_bandana" body_parts_covered = 0 diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index e7e3981b99a..1ffe0f352e8 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -15,11 +15,14 @@ name = "welding helmet" desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." icon_state = "welding" + item_state_slots = list( + slot_l_hand_str = "welding", + slot_r_hand_str = "welding", + ) flags = HEADCOVERSEYES | HEADCOVERSMOUTH - item_state = "welding" matter = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000) var/up = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 30, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) body_parts_covered = HEAD|FACE|EYES action_button_name = "Flip Welding Mask" @@ -62,12 +65,13 @@ name = "cake-hat" desc = "It's tasty looking!" icon_state = "cake0" + item_state_slots = list( + slot_l_hand_str = "cakehat0", + slot_r_hand_str = "cakehat0", + ) flags = HEADCOVERSEYES - var/onfire = 0.0 - var/status = 0 - var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage - var/processing = 0 //I dont think this is used anywhere. - body_parts_covered = EYES + var/onfire = 0 + body_parts_covered = HEAD|EYES /obj/item/clothing/head/cakehat/process() if(!onfire) @@ -84,17 +88,20 @@ location.hotspot_expose(700, 1) /obj/item/clothing/head/cakehat/attack_self(mob/user as mob) - if(status > 1) return src.onfire = !( src.onfire ) if (src.onfire) src.force = 3 src.damtype = "fire" src.icon_state = "cake1" + src.item_state_slots[slot_l_hand_str] = "cakehat1" + src.item_state_slots[slot_r_hand_str] = "cakehat1" processing_objects.Add(src) else src.force = null src.damtype = "brute" src.icon_state = "cake0" + src.item_state_slots[slot_l_hand_str] = "cakehat0" + src.item_state_slots[slot_r_hand_str] = "cakehat0" return @@ -105,17 +112,14 @@ name = "ushanka" desc = "Perfect for winter in Siberia, da?" icon_state = "ushankadown" - item_state = "ushankadown" flags_inv = HIDEEARS /obj/item/clothing/head/ushanka/attack_self(mob/user as mob) if(src.icon_state == "ushankadown") src.icon_state = "ushankaup" - src.item_state = "ushankaup" user << "You raise the ear flaps on the ushanka." else src.icon_state = "ushankadown" - src.item_state = "ushankadown" user << "You lower the ear flaps on the ushanka." /* @@ -125,7 +129,6 @@ name = "carved pumpkin" desc = "A jack o' lantern! Believed to ward off evil spirits." icon_state = "hardhat0_pumpkin"//Could stand to be renamed - item_state = "hardhat0_pumpkin" flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE body_parts_covered = HEAD|EYES @@ -152,10 +155,9 @@ var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner") ears.Blend(earbit, ICON_OVERLAY) - /obj/item/clothing/head/richard name = "chicken mask" desc = "You can hear the distant sounds of rhythmic electronica." icon_state = "richard" body_parts_covered = HEAD|FACE - flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR \ No newline at end of file + flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index d41a4598a43..f92fb0ca761 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -3,7 +3,10 @@ desc = "It's a peaked cap in a tasteless yellow color." icon_state = "cargosoft" flags = HEADCOVERSEYES - item_state = "helmet" + item_state_slots = list( + slot_l_hand_str = "helmet", //probably a placeholder + slot_r_hand_str = "helmet", + ) var/flipped = 0 siemens_coefficient = 0.9 body_parts_covered = 0 diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 003e8ba0488..14f687543a0 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -124,16 +124,6 @@ //item_state = "hos_corporate" worn_state = "hos_corporate" -/obj/item/clothing/head/helmet/HoS - name = "Head of Security Hat" - desc = "The hat of the Head of Security. For showing the officers who's in charge." - icon_state = "hoscap" - flags = HEADCOVERSEYES - armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) - flags_inv = HIDEEARS - body_parts_covered = 0 - siemens_coefficient = 0.8 - /obj/item/clothing/suit/armor/hos name = "armored coat" desc = "A greatcoat enhanced with a special alloy for some protection and style." @@ -144,14 +134,6 @@ flags_inv = HIDEJUMPSUIT siemens_coefficient = 0.6 - -/obj/item/clothing/head/helmet/HoS/dermal - name = "Dermal Armour Patch" - desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." - icon_state = "dermal" - item_state = "dermal" - siemens_coefficient = 0.6 - //Jensen cosplay gear /obj/item/clothing/under/rank/head_of_security/jensen desc = "You never asked for anything that stylish." diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f3fcff7108f..45c646a6ffc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -638,19 +638,25 @@ var/global/list/damage_icon_parts = list() head.screen_loc = ui_head //TODO //Determine the icon to use - var/t_icon = INV_HEAD_DEF_ICON + var/t_icon if(head.icon_override) t_icon = head.icon_override else if(head.sprite_sheets && head.sprite_sheets[species.name]) - t_icon = head.sprite_sheets[species.name] - + t_icon = head.sprite_sheets[species.name] + else if(head.item_icons && (slot_head_str in head.item_icons)) + t_icon = head.item_icons[slot_head_str] + else + t_icon = INV_HEAD_DEF_ICON + //Determine the state to use - var/t_state = head.icon_state - if(istype(head, /obj/item/weapon/paper)) - /* I don't like this, but bandaid to fix half the hats in the game - being completely broken without re-breaking paper hats */ - t_state = "paper" - + var/t_state + if(head.item_state_slots && head.item_state_slots[slot_head_str]) + t_state = head.item_state_slots[slot_head_str] + else if(head.item_state) + t_state = head.item_state + else + t_state = head.icon_state + //Create the image var/image/standing = image(icon = t_icon, icon_state = t_state) From 309dff6aba10989b5b5d1319638bb6ff00378c5e Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 27 Jun 2015 23:53:11 -0400 Subject: [PATCH 011/423] One less object verb --- code/__defines/items_clothing.dm | 1 + code/modules/clothing/head/soft_caps.dm | 30 +++++++++++-------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index 103cccf8335..8e403c2e06e 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -97,6 +97,7 @@ // Inventory slot strings. // since numbers cannot be used as associative list keys. +//icon_back, icon_l_hand, etc would be much better names for these... #define slot_back_str "slot_back" #define slot_l_hand_str "slot_l_hand" #define slot_r_hand_str "slot_r_hand" diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index f92fb0ca761..5cb23c58ea7 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -11,24 +11,20 @@ siemens_coefficient = 0.9 body_parts_covered = 0 - dropped() - src.icon_state = initial(icon_state) - src.flipped=0 - ..() +/obj/item/clothing/head/soft/dropped() + src.icon_state = initial(icon_state) + src.flipped=0 + ..() - verb/flip() - set category = "Object" - set name = "Flip cap" - set src in usr - if(usr.canmove && !usr.stat && !usr.restrained()) - src.flipped = !src.flipped - if(src.flipped) - icon_state = "[icon_state]_flipped" - usr << "You flip the hat backwards." - else - src.icon_state = initial(icon_state) - usr << "You flip the hat back in normal position." - update_clothing_icon() //so our mob-overlays update +/obj/item/clothing/head/soft/attack_self(mob/user) + src.flipped = !src.flipped + if(src.flipped) + icon_state = "[icon_state]_flipped" + user << "You flip the hat backwards." + else + src.icon_state = initial(icon_state) + user << "You flip the hat back in normal position." + update_clothing_icon() //so our mob-overlays update /obj/item/clothing/head/soft/red name = "red cap" From 263f721f3e85d227f05887edd2e92f563e8eb7db Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 28 Jun 2015 01:50:05 -0400 Subject: [PATCH 012/423] Updates more hats Also moves hat inhands to separate dmi. --- code/game/gamemodes/cult/cult_items.dm | 3 --- code/modules/clothing/chameleon.dm | 1 - code/modules/clothing/clothing.dm | 4 +++ code/modules/clothing/head/collectable.dm | 12 ++++++--- code/modules/clothing/head/helmet.dm | 20 ++++++-------- code/modules/clothing/head/jobs.dm | 20 +------------- code/modules/clothing/head/misc.dm | 25 +++++++++++++----- code/modules/clothing/head/misc_special.dm | 13 +++------ code/modules/clothing/spacesuits/alien.dm | 2 -- code/modules/clothing/spacesuits/captain.dm | 2 +- .../clothing/spacesuits/miscellaneous.dm | 9 +++++-- .../modules/clothing/spacesuits/spacesuits.dm | 5 +++- code/modules/clothing/spacesuits/syndi.dm | 10 +++---- .../clothing/spacesuits/void/station.dm | 25 ++++++++++++++---- code/modules/clothing/spacesuits/void/void.dm | 1 - .../clothing/spacesuits/void/wizard.dm | 5 +++- code/modules/clothing/suits/bio.dm | 4 +++ code/modules/clothing/suits/utility.dm | 2 -- code/modules/clothing/suits/wiz_robe.dm | 16 +++++++++++ code/modules/clothing/under/jobs/security.dm | 23 ++++++++++++++++ icons/mob/items/lefthand.dmi | Bin 116821 -> 111862 bytes icons/mob/items/lefthand_hats.dmi | Bin 0 -> 4554 bytes icons/mob/items/righthand.dmi | Bin 116263 -> 112904 bytes icons/mob/items/righthand_hats.dmi | Bin 0 -> 5112 bytes 24 files changed, 128 insertions(+), 74 deletions(-) create mode 100644 icons/mob/items/lefthand_hats.dmi create mode 100644 icons/mob/items/righthand_hats.dmi diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 4ae82684020..1dfa1c37eb8 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -48,7 +48,6 @@ /obj/item/clothing/head/culthood/magus name = "magus helm" icon_state = "magus" - item_state = "magus" desc = "A helm worn by the followers of Nar-Sie." flags_inv = HIDEFACE flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR @@ -56,7 +55,6 @@ /obj/item/clothing/head/culthood/alt icon_state = "cult_hoodalt" - item_state = "cult_hoodalt" /obj/item/clothing/suit/cultrobes name = "cult robes" @@ -88,7 +86,6 @@ name = "cult helmet" desc = "A space worthy helmet used by the followers of Nar-Sie" icon_state = "cult_helmet" - item_state = "cult_helmet" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 40851e16167..fe4eecb1f53 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -75,7 +75,6 @@ /obj/item/clothing/head/chameleon name = "grey cap" icon_state = "greysoft" - item_state = "greysoft" desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside." origin_tech = list(TECH_ILLEGAL = 3) body_parts_covered = 0 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 7fa6bd788b2..8ec49ecd5f1 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -241,6 +241,10 @@ BLIND // can't see anything /obj/item/clothing/head name = "head" icon = 'icons/obj/clothing/hats.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_hats.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_hats.dmi', + ) body_parts_covered = HEAD slot_flags = SLOT_HEAD w_class = 2.0 diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 6ea43fa0fad..bc6c993351a 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -21,27 +21,30 @@ name = "collectable xenomorph helmet!" desc = "Hiss hiss hiss!" icon_state = "xenom" + item_state_slots = list( + slot_l_hand_str = "xenos_helm", + slot_r_hand_str = "xenos_helm", + ) body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare Chef's Hat meant for hat collectors!" icon_state = "chefhat" + item_state = "chefhat" /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians." icon_state = "paper" + item_state = "paper" body_parts_covered = 0 /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." icon_state = "tophat" - item_state_slots = list( - slot_l_hand_str = "that", - slot_r_hand_str = "that", - ) + item_state = "tophat" body_parts_covered = 0 /obj/item/clothing/head/collectable/captain @@ -70,6 +73,7 @@ name = "collectable welding helmet" desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!" icon_state = "welding" + item_state = "welding" body_parts_covered = HEAD|FACE|EYES /obj/item/clothing/head/collectable/slime diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index c0290c0d7ee..18a0e5fcbf0 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -2,7 +2,10 @@ name = "helmet" desc = "Standard Security gear. Protects the head from impacts." icon_state = "helmet" - item_state = "helmet" + item_state_slots = list( + slot_l_hand_str = "helmet", + slot_r_hand_str = "helmet", + ) flags = HEADCOVERSEYES | THICKMATERIAL armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES @@ -17,7 +20,6 @@ name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "riot" - item_state_slots = list(slot_head_str = "riot") flags = HEADCOVERSEYES armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0) flags_inv = HIDEEARS @@ -28,7 +30,6 @@ desc = "They're often used by highly trained Swat Members." icon_state = "swat" flags = HEADCOVERSEYES - item_state = "swat" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD @@ -40,7 +41,6 @@ desc = "'Let the battle commence!'" icon_state = "thunderdome" flags = HEADCOVERSEYES - item_state = "thunderdome" armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -51,7 +51,6 @@ desc = "Ave, Imperator, morituri te salutant." icon_state = "gladiator" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR - item_state = "gladiator" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES siemens_coefficient = 1 @@ -59,7 +58,6 @@ name = "tactical helmet" desc = "An armored helmet capable of being fitted with a multitude of attachments." icon_state = "swathelm" - item_state_slots = list(slot_head_str = "swathelm") flags = HEADCOVERSEYES sprite_sheets = list( "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', @@ -75,7 +73,6 @@ desc = "A helmet with optical and cranial augments coupled to it." icon_state = "v62" flags = HEADCOVERSEYES - item_state = "v62" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD @@ -87,8 +84,10 @@ name = "emergency response team helmet" desc = "An in-atmosphere helmet worn by members of the NanoTrasen Emergency Response Team. Protects the head from impacts." icon_state = "erthelmet_cmd" - item_state_slots = list(slot_head_str = "erthelmet_cmd") - item_state = "syndicate-helm-green" + item_state_slots = list( + slot_l_hand_str = "syndicate-helm-green", + slot_r_hand_str = "syndicate-helm-green", + ) armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) //Commander @@ -101,18 +100,15 @@ name = "emergency response team security helmet" desc = "An in-atmosphere helmet worn by security members of the NanoTrasen Emergency Response Team. Has red highlights." icon_state = "erthelmet_sec" - item_state_slots = list(slot_head_str = "erthelmet_sec") //Engineer /obj/item/clothing/head/helmet/ert/engineer name = "emergency response team engineer helmet" desc = "An in-atmosphere helmet worn by engineering members of the NanoTrasen Emergency Response Team. Has orange highlights." icon_state = "erthelmet_eng" - item_state_slots = list(slot_head_str = "erthelmet_eng") //Medical /obj/item/clothing/head/helmet/ert/medical name = "emergency response team medical helmet" desc = "A set of armor worn by medical members of the NanoTrasen Emergency Response Team. Has red and white highlights." icon_state = "erthelmet_med" - item_state_slots = list(slot_head_str = "erthelmet_med") diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index c4c7302bed3..7543df6bb14 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -4,6 +4,7 @@ name = "chef's hat" desc = "It's a hat used by chefs to keep hair out of your food. Judging by the food in the mess, they don't work." icon_state = "chefhat" + item_state = "chefhat" //Captain /obj/item/clothing/head/caphat @@ -56,25 +57,6 @@ body_parts_covered = 0 //Security -/obj/item/clothing/head/HoS - name = "Head of Security Hat" - desc = "The hat of the Head of Security. For showing the officers who's in charge." - icon_state = "hoscap" - body_parts_covered = 0 - siemens_coefficient = 0.8 - -/obj/item/clothing/head/HoS/dermal - name = "Dermal Armour Patch" - desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." - icon_state = "dermal" - siemens_coefficient = 0.6 - -/obj/item/clothing/head/warden - name = "warden's hat" - desc = "It's a special helmet issued to the Warden of a securiy force." - icon_state = "policehelm" - body_parts_covered = 0 - /obj/item/clothing/head/beret/sec name = "security beret" desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 3d9455b9dff..281a341f268 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -3,6 +3,10 @@ /obj/item/clothing/head/centhat name = "\improper CentComm. hat" icon_state = "centcom" + item_state_slots = list( + slot_l_hand_str = "centhat", + slot_r_hand_str = "centhat", + ) desc = "It's good to be emperor." siemens_coefficient = 0.9 body_parts_covered = 0 @@ -18,15 +22,13 @@ name = "powdered wig" desc = "A powdered wig." icon_state = "pwig" + item_state = "pwig" /obj/item/clothing/head/that name = "top-hat" desc = "It's an amish looking hat." icon_state = "tophat" - item_state_slots = list( - slot_l_hand_str = "that", - slot_r_hand_str = "that", - ) + item_state = "tophat" siemens_coefficient = 0.9 body_parts_covered = 0 @@ -66,6 +68,10 @@ /obj/item/clothing/head/syndicatefake name = "red space-helmet replica" + item_state_slots = list( + slot_l_hand_str = "syndicate-helm-black-red", + slot_r_hand_str = "syndicate-helm-black-red", + ) icon_state = "syndicate" desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!" flags = BLOCKHAIR @@ -77,6 +83,7 @@ name = "cueball helmet" desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?" icon_state = "cueball" + item_state = "cueball" flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR flags_inv = 0 body_parts_covered = HEAD|FACE|EYES @@ -85,6 +92,7 @@ name = "green bandana" desc = "It's a green bandana with some fine nanotech lining." icon_state = "greenbandana" + item_state = "greenbandana" flags_inv = 0 body_parts_covered = 0 @@ -92,6 +100,7 @@ name = "cardborg helmet" desc = "A helmet made out of a box." icon_state = "cardborg_h" + item_state = "cardborg_h" flags = HEADCOVERSEYES | HEADCOVERSMOUTH flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE body_parts_covered = HEAD|FACE|EYES @@ -125,8 +134,8 @@ desc = "A working man's cap." icon_state = "flat_cap" item_state_slots = list( - slot_l_hand_str = "detective", - slot_r_hand_str = "detective", + slot_l_hand_str = "det_hat", + slot_r_hand_str = "det_hat", ) siemens_coefficient = 0.9 @@ -231,6 +240,10 @@ name = "natural philosopher's wig" desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!" icon_state = "philosopher_wig" + item_state_slots = list( + slot_l_hand_str = "pwig", + slot_r_hand_str = "pwig", + ) flags = BLOCKHAIR siemens_coefficient = 2.0 //why is it so conductive?! body_parts_covered = 0 diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 1ffe0f352e8..462f61aeb4b 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -22,7 +22,7 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH matter = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000) var/up = 0 - armor = list(melee = 30, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) body_parts_covered = HEAD|FACE|EYES action_button_name = "Flip Welding Mask" @@ -65,10 +65,7 @@ name = "cake-hat" desc = "It's tasty looking!" icon_state = "cake0" - item_state_slots = list( - slot_l_hand_str = "cakehat0", - slot_r_hand_str = "cakehat0", - ) + item_state = "cake0" flags = HEADCOVERSEYES var/onfire = 0 body_parts_covered = HEAD|EYES @@ -93,15 +90,13 @@ src.force = 3 src.damtype = "fire" src.icon_state = "cake1" - src.item_state_slots[slot_l_hand_str] = "cakehat1" - src.item_state_slots[slot_r_hand_str] = "cakehat1" + src.item_state = "cake1" processing_objects.Add(src) else src.force = null src.damtype = "brute" src.icon_state = "cake0" - src.item_state_slots[slot_l_hand_str] = "cakehat0" - src.item_state_slots[slot_r_hand_str] = "cakehat0" + src.item_state = "cake0" return diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 9b4eb86b985..d42df195e4b 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -8,11 +8,9 @@ /obj/item/clothing/head/helmet/space/skrell/white icon_state = "skrell_helmet_white" - item_state = "skrell_helmet_white" /obj/item/clothing/head/helmet/space/skrell/black icon_state = "skrell_helmet_black" - item_state = "skrell_helmet_black" /obj/item/clothing/suit/space/skrell name = "Skrellian voidsuit" diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm index 68a7ea51d92..0e79b36d64f 100644 --- a/code/modules/clothing/spacesuits/captain.dm +++ b/code/modules/clothing/spacesuits/captain.dm @@ -2,7 +2,7 @@ /obj/item/clothing/head/helmet/space/capspace name = "space helmet" icon_state = "capspace" - item_state = "capspacehelmet" + item_state = "capspace" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE flags_inv = HIDEFACE diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 7aec6068b01..27b8c126429 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -2,7 +2,7 @@ /obj/item/clothing/head/helmet/space/capspace name = "space helmet" icon_state = "capspace" - item_state = "capspacehelmet" + item_state = "capspace" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." flags_inv = HIDEFACE permeability_coefficient = 0.01 @@ -32,11 +32,15 @@ name = "deathsquad helmet" desc = "That's not red paint. That's real blood." icon_state = "deathsquad" - item_state = "deathsquad" + item_state_slots = list( + slot_l_hand_str = "syndicate-helm-black-red", + slot_r_hand_str = "syndicate-helm-black-red", + ) armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60) flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL siemens_coefficient = 0.6 +//how is this a space helmet? /obj/item/clothing/head/helmet/space/deathsquad/beret name = "officer's beret" desc = "An armored beret commonly used by special operations officers." @@ -50,6 +54,7 @@ name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" + item_state = "santahat" flags = HEADCOVERSEYES | BLOCKHAIR | STOPPRESSUREDAMAGE body_parts_covered = HEAD diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 78ecc731de4..c09721e7f34 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -7,7 +7,10 @@ icon_state = "space" desc = "A special helmet designed for work in a hazardous, low-pressure environment." flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT - item_state = "space" + item_state_slots = list( + slot_l_hand_str = "s_helmet", + slot_r_hand_str = "s_helmet", + ) permeability_coefficient = 0.01 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 5cb1d8446e5..0262c5489c1 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -2,7 +2,7 @@ /obj/item/clothing/head/helmet/space/syndicate name = "red space helmet" icon_state = "syndicate" - item_state = "space_helmet_syndicate" + item_state = "syndicate" desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing." armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.6 @@ -107,7 +107,7 @@ /obj/item/clothing/head/helmet/space/syndicate/black/med name = "black medical space helmet" icon_state = "syndicate-helm-black-med" - item_state = "syndicate-helm-black" + item_state_slots = list(slot_head_str = "syndicate-black-med") /obj/item/clothing/suit/space/syndicate/black/med name = "black medical space suit" @@ -119,7 +119,7 @@ /obj/item/clothing/head/helmet/space/syndicate/black/orange name = "black and orange space helmet" icon_state = "syndicate-helm-black-orange" - item_state = "syndicate-helm-black" + item_state_slots = list(slot_head_str = "syndicate-helm-black-orange") /obj/item/clothing/suit/space/syndicate/black/orange name = "black and orange space suit" @@ -142,9 +142,9 @@ /obj/item/clothing/head/helmet/space/syndicate/black/engie name = "black engineering space helmet" icon_state = "syndicate-helm-black-engie" - item_state = "syndicate-helm-black" + item_state_slots = list(slot_head_str = "syndicate-helm-black-engie") /obj/item/clothing/suit/space/syndicate/black/engie name = "black engineering space suit" icon_state = "syndicate-black-engie" - item_state = "syndicate-black" \ No newline at end of file + item_state = "syndicate-black" diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index b7477e2f0e9..f8e6f03611a 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -4,7 +4,10 @@ name = "engineering voidsuit helmet" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "rig0-engineering" - item_state = "eng_helm" + item_state_slots = list( + slot_l_hand_str = "eng_helm", + slot_r_hand_str = "eng_helm", + ) armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80) /obj/item/clothing/suit/space/void/engineering @@ -21,7 +24,10 @@ name = "mining voidsuit helmet" desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating." icon_state = "rig0-mining" - item_state = "mining_helm" + item_state_slots = list( + slot_l_hand_str = "mining_helm", + slot_r_hand_str = "mining_helm", + ) armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20) light_overlay = "helmet_light_dual" @@ -37,7 +43,10 @@ name = "medical voidsuit helmet" desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding." icon_state = "rig0-medical" - item_state = "medical_helm" + item_state_slots = list( + slot_l_hand_str = "medical_helm", + slot_r_hand_str = "medical_helm", + ) armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50) /obj/item/clothing/suit/space/void/medical @@ -53,7 +62,10 @@ name = "security voidsuit helmet" desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." icon_state = "rig0-sec" - item_state = "sec_helm" + item_state_slots = list( + slot_l_hand_str = "sec_helm", + slot_r_hand_str = "sec_helm", + ) armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10) siemens_coefficient = 0.7 light_overlay = "helmet_light_dual" @@ -72,7 +84,10 @@ desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding." name = "atmospherics voidsuit helmet" icon_state = "rig0-atmos" - item_state = "atmos_helm" + item_state_slots = list( + slot_l_hand_str = "atmos_helm", + slot_r_hand_str = "atmos_helm", + ) armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50) max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE light_overlay = "helmet_light_dual" diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index aef27243492..294cac24c7a 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -3,7 +3,6 @@ name = "void helmet" desc = "A high-tech dark red space suit helmet. Used for AI satellite maintenance." icon_state = "void" - item_state = "void" heat_protection = HEAD armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) diff --git a/code/modules/clothing/spacesuits/void/wizard.dm b/code/modules/clothing/spacesuits/void/wizard.dm index 2fc0c76dbde..846d0466eb6 100644 --- a/code/modules/clothing/spacesuits/void/wizard.dm +++ b/code/modules/clothing/spacesuits/void/wizard.dm @@ -3,7 +3,10 @@ name = "gem-encrusted voidsuit helmet" desc = "A bizarre gem-encrusted helmet that radiates magical energies." icon_state = "rig0-wiz" - item_state = "wiz_helm" + item_state_slots = list( + slot_l_hand_str = "wiz_helm", + slot_r_hand_str = "wiz_helm", + ) unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.7 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 037eb6833e0..bbeb7335e3f 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -2,6 +2,10 @@ /obj/item/clothing/head/bio_hood name = "bio hood" icon_state = "bio" + item_state_slots = list( + slot_l_hand_str = "bio_hood", + slot_r_hand_str = "bio_hood", + ) desc = "A hood that protects the head and face from biological comtaminants." permeability_coefficient = 0.01 flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index c0cdd91ecdc..37008da464f 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -72,12 +72,10 @@ /obj/item/clothing/head/bomb_hood/security icon_state = "bombsuitsec" - item_state = "bombsuitsec" body_parts_covered = HEAD /obj/item/clothing/suit/bomb_suit/security icon_state = "bombsuitsec" - item_state = "bombsuitsec" allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 69e51093f9d..361bce66aa4 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -2,6 +2,10 @@ name = "wizard hat" desc = "Strange-looking hat-wear that most certainly belongs to a real magic user." icon_state = "wizard" + item_state_slots = list( + slot_l_hand_str = "wizhat", + slot_r_hand_str = "wizhat", + ) //Not given any special protective value since the magic robes are full-body protection --NEO siemens_coefficient = 0.8 body_parts_covered = 0 @@ -30,6 +34,10 @@ desc = "A mysterious helmet that hums with an unearthly power" icon_state = "magus" item_state = "magus" + item_state_slots = list( + slot_l_hand_str = "helmet", + slot_r_hand_str = "helmet", + ) siemens_coefficient = 0.8 body_parts_covered = HEAD|FACE|EYES @@ -37,12 +45,20 @@ name = "psychic amplifier" desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot." icon_state = "amp" + item_state_slots = list( + slot_l_hand_str = "helmet", + slot_r_hand_str = "helmet", + ) siemens_coefficient = 0.8 /obj/item/clothing/head/wizard/cap name = "Gentlemans Cap" desc = "A checkered gray flat cap woven together with the rarest of threads." icon_state = "gentcap" + item_state_slots = list( + slot_l_hand_str = "det_hat", + slot_r_hand_str = "det_hat", + ) siemens_coefficient = 0.8 /obj/item/clothing/suit/wizrobe diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 14f687543a0..b92bebc9e92 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -17,6 +17,12 @@ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 +/obj/item/clothing/head/warden + name = "warden's hat" + desc = "It's a special helmet issued to the Warden of a securiy force." + icon_state = "policehelm" + body_parts_covered = 0 + /obj/item/clothing/under/rank/security name = "security officer's jumpsuit" desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for robust protection." @@ -98,6 +104,10 @@ name = "hat" desc = "Someone who wears this will look very smart." icon_state = "detective" + item_state_slots = list( + slot_l_hand_str = "det_hat", + slot_r_hand_str = "det_hat", + ) allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 @@ -124,6 +134,19 @@ //item_state = "hos_corporate" worn_state = "hos_corporate" +/obj/item/clothing/head/HoS + name = "Head of Security Hat" + desc = "The hat of the Head of Security. For showing the officers who's in charge." + icon_state = "hoscap" + body_parts_covered = 0 + siemens_coefficient = 0.8 + +/obj/item/clothing/head/HoS/dermal + name = "Dermal Armour Patch" + desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head." + icon_state = "dermal" + siemens_coefficient = 0.6 + /obj/item/clothing/suit/armor/hos name = "armored coat" desc = "A greatcoat enhanced with a special alloy for some protection and style." diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index e6fbfdc9e4ce1a331694155cf842647ee6cd505d..aaac106c0caf51d1406f6b4e69062ac957f24d69 100644 GIT binary patch literal 111862 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