From 3d3f28e09184c506d807157fe84b9d7d2e5fa6da Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Thu, 4 Jan 2018 21:16:33 -0500 Subject: [PATCH 01/43] Fixes white power cables in DM (#34066) --- code/modules/power/cable.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 3ada84d601..d7e64f8b67 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -76,6 +76,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/white cable_color = "white" + color = "#ffffff" // the power cable object /obj/structure/cable/Initialize(mapload, param_color) From 406ccb256ffebcb47ddc91af61c971405f2fa99c Mon Sep 17 00:00:00 2001 From: Cruix Date: Fri, 5 Jan 2018 03:56:10 -0800 Subject: [PATCH 03/43] Fixed PDAs not calling parent in equipped() (#34081) --- code/game/objects/items/devices/PDA/PDA.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index a058ab303d..00385820cf 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -94,6 +94,7 @@ GLOBAL_LIST_EMPTY(PDAs) update_icon() /obj/item/device/pda/equipped(mob/user, slot) + . = ..() if(!equipped) if(user.client) background_color = user.client.prefs.pda_color From e7641dd004bd562663d6481cdf0a42a49467e7d3 Mon Sep 17 00:00:00 2001 From: Cruix Date: Fri, 5 Jan 2018 03:55:52 -0800 Subject: [PATCH 05/43] Made the squeek component not make things squeak so often (#34082) --- code/datums/components/squeek.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/datums/components/squeek.dm b/code/datums/components/squeek.dm index 7b9a7866ca..7a362f0391 100644 --- a/code/datums/components/squeek.dm +++ b/code/datums/components/squeek.dm @@ -24,7 +24,8 @@ if(use_delay_override) use_delay = use_delay_override - RegisterSignal(list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_CROSSED, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) + RegisterSignal(list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) + RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/play_squeak_turf) RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak) RegisterSignal(COMSIG_SHOES_STEP_ACTION, .proc/step_squeak) @@ -42,6 +43,11 @@ else steps++ +/datum/component/squeak/proc/play_squeak_turf() + var/atom/current_parent = parent + if(isturf(current_parent.loc)) + play_squeak() + /datum/component/squeak/proc/use_squeak() if(last_use + use_delay < world.time) last_use = world.time From 53d7dfbb9b92f9a3453e0de232c59a35a541c0d4 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Fri, 5 Jan 2018 07:00:11 -0500 Subject: [PATCH 07/43] Fixes meta toxins lab (#34087) --- _maps/map_files/MetaStation/MetaStation.dmm | 29 ++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 3480f9d6c4..7fa276f5ed 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -62656,18 +62656,16 @@ /turf/open/floor/plating, /area/science/mixing) "czs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "czt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/science/mixing) "czu" = ( @@ -63233,23 +63231,24 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "cAy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, /area/science/mixing) "cAz" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/science/mixing) @@ -80469,13 +80468,13 @@ /turf/open/floor/circuit, /area/science/robotics/mechbay) "dDA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "dDB" = ( @@ -112841,7 +112840,7 @@ cvS cwR crQ cyB -czu +czy cAz cBt cCu From 015c46cbaeb2a0391447a6873f24cadedd818756 Mon Sep 17 00:00:00 2001 From: Cruix Date: Fri, 5 Jan 2018 03:59:28 -0800 Subject: [PATCH 09/43] Removed some superfluous stack code (#34083) --- code/game/machinery/autolathe.dm | 3 --- code/modules/power/cable.dm | 2 -- 2 files changed, 5 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 3d3d929c81..d34c800716 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -201,9 +201,6 @@ var/obj/item/stack/N = new being_built.build_path(A, multiplier) N.update_icon() N.autolathe_crafted(src) - for(var/obj/item/stack/S in (A.contents - N)) - if(istype(S, N.merge_type)) - N.merge(S) else for(var/i=1, i<=multiplier, i++) var/obj/item/new_item = new being_built.build_path(A) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d7e64f8b67..3646a80d45 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -494,8 +494,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai /obj/item/stack/cable_coil/Initialize(mapload, new_amount = null, param_color = null) . = ..() - if(new_amount) // MAXCOIL by default - amount = new_amount var/list/cable_colors = GLOB.cable_colors item_color = param_color || item_color || pick(cable_colors) From 6012a5c6eba849f4ad39ee0a200032b7d6c3309f Mon Sep 17 00:00:00 2001 From: oranges Date: Sat, 6 Jan 2018 00:57:52 +1300 Subject: [PATCH 11/43] Fix bug with smashing bottles on throw (#34077) The passed in variable is a datum, not a mob Corrects the description for another instance of this --- code/modules/food_and_drinks/drinks/drinks.dm | 4 ++-- code/modules/food_and_drinks/drinks/drinks/bottle.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 5eae2b80d8..b65104b192 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -100,10 +100,10 @@ to_chat(user, "You heat [name] with [I]!") ..() -/obj/item/reagent_containers/food/drinks/throw_impact(atom/target, mob/thrower) +/obj/item/reagent_containers/food/drinks/throw_impact(atom/target, datum/thrownthing/throwinfo) . = ..() if(!.) //if the bottle wasn't caught - smash(target, thrower, TRUE) + smash(target, throwinfo.thrower, TRUE) /obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) if(!isGlass) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 005dda29ca..f2ab7ee3a2 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -367,7 +367,7 @@ isGlass = FALSE return -/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,datum/thrownthing/throwdata) var/firestarter = 0 for(var/datum/reagent/R in reagents.reagent_list) for(var/A in accelerants) From 81cdedea5d9446b916f9adff129b461d8a53870d Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 5 Jan 2018 03:56:55 -0800 Subject: [PATCH 13/43] Fix away missions taking 2+ minutes to load (#34084) --- code/modules/mapping/map_template.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 910cc6fe60..dc9bc93547 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -49,8 +49,8 @@ SSair.setup_template_machinery(atmos_machines) /datum/map_template/proc/load_new_z() - var/x = round(world.maxx/2) - var/y = round(world.maxy/2) + var/x = round((world.maxx - width)/2) + var/y = round((world.maxy - height)/2) var/list/bounds = maploader.load_map(file(mappath), x, y) if(!bounds) From a55d2e7ff7e4c7bb40b43e5dd3f51a7b5f2d2ee0 Mon Sep 17 00:00:00 2001 From: Tad Hardesty Date: Fri, 5 Jan 2018 04:02:04 -0800 Subject: [PATCH 15/43] Show the correct coordinates when a pulse rifle prize is found (#34089) --- code/modules/projectiles/guns/energy/pulse.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index bfb5c8fc12..4dbb9e31f7 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -20,7 +20,8 @@ /obj/item/gun/energy/pulse/prize/Initialize() . = ..() GLOB.poi_list += src - var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(src)]" + var/turf/T = get_turf(src) + var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(T)]" message_admins(msg) log_game(msg) From e20cbe5aa7ee0e834a5fd95822dc2de7cbaa6f1d Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 5 Jan 2018 04:04:38 -0800 Subject: [PATCH 17/43] Fixes infernal jaunt causing devils to get stuck if interrupted (#34056) * Fixes infernal jaunt causing devils to get stuck if stunned. * defines because I know a maintainer will yell at me for this. --- code/modules/spells/spell_types/devil.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 733d0a3270..e9b8a458a8 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -118,14 +118,15 @@ revert_cast() return ..() else - user.notransform = 1 + user.notransform = TRUE user.fakefire() to_chat(src, "You begin to phase back into sinful flames.") if(do_mob(user,user,150)) user.infernalphaseout() else to_chat(user, "You must remain still while exiting.") - user.ExtinguishMob() + user.notransform = FALSE + user.fakefireextinguish() start_recharge() return revert_cast() From 464a2820e34869dc3edb471c31408ccb1d17946a Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 5 Jan 2018 06:43:36 -0800 Subject: [PATCH 19/43] Merge pull request #34109 from Niknakflak/Its_not_just_a_boulder_its_a_rock Changes Rock Description to be more descriptive --- code/game/objects/structures/flora.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f5611afcd4..7c99a715cd 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -345,7 +345,7 @@ /obj/structure/flora/rock icon_state = "basalt" - desc = "A volcanic rock." + desc = "A volcanic rock. Pioneers used to ride these babies for miles." icon = 'icons/obj/flora/rocks.dmi' resistance_flags = FIRE_PROOF density = TRUE From 5c64e252881ffc5250cd7706ec0d66224204e7a2 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 5 Jan 2018 07:25:37 -0800 Subject: [PATCH 21/43] [512] Disallow cross-Z examination and manipulation --- code/__DEFINES/is_helpers.dm | 7 +++ code/_onclick/adjacent.dm | 107 +++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index da25d34880..6137e1af32 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -4,7 +4,14 @@ #define islist(L) (istype(L, /list)) +#if DM_VERSION >= 512 +#define in_range(source, user) (get_dist(source, user) <= 1 && (get_step(source, 0)?:z) == (get_step(user, 0)?:z)) +#if DM_VERSION > 512 +#warn Remove this check. +#endif +#else #define in_range(source, user) (get_dist(source, user) <= 1) +#endif #define ismovableatom(A) (istype(A, /atom/movable)) diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index b831a8cbcb..63628bb3cd 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /* Adjacency proc for determining touch range @@ -102,3 +103,109 @@ else if( !border_only ) // dense, not on border, cannot pass over return 0 return 1 +======= +/* + Adjacency proc for determining touch range + + This is mostly to determine if a user can enter a square for the purposes of touching something. + Examples include reaching a square diagonally or reaching something on the other side of a glass window. + + This is calculated by looking for border items, or in the case of clicking diagonally from yourself, dense items. + This proc will NOT notice if you are trying to attack a window on the other side of a dense object in its turf. There is a window helper for that. + + Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you + to check that the mob is not inside of something +*/ +/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused + return 0 + +// Not a sane use of the function and (for now) indicative of an error elsewhere +/area/Adjacent(var/atom/neighbor) + CRASH("Call to /area/Adjacent(), unimplemented proc") + + +/* + Adjacency (to turf): + * If you are in the same turf, always true + * If you are vertically/horizontally adjacent, ensure there are no border objects + * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. + * Passing through in this case ignores anything with the LETPASSTHROW pass flag, such as tables, racks, and morgue trays. +*/ +/turf/Adjacent(atom/neighbor, atom/target = null, atom/movable/mover = null) + var/turf/T0 = get_turf(neighbor) + + if(T0 == src) //same turf + return TRUE + + if(get_dist(src, T0) > 1 || z != T0.z) //too far + return FALSE + + // Non diagonal case + if(T0.x == x || T0.y == y) + // Check for border blockages + return T0.ClickCross(get_dir(T0,src), border_only = 1, target_atom = target, mover = mover) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target, mover = mover) + + // Diagonal case + var/in_dir = get_dir(T0,src) // eg. northwest (1+8) = 9 (00001001) + var/d1 = in_dir&3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001) + var/d2 = in_dir&12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000) + + for(var/d in list(d1,d2)) + if(!T0.ClickCross(d, border_only = 1, target_atom = target, mover = mover)) + continue // could not leave T0 in that direction + + var/turf/T1 = get_step(T0,d) + if(!T1 || T1.density) + continue + if(!T1.ClickCross(get_dir(T1,src), border_only = 0, target_atom = target, mover = mover) || !T1.ClickCross(get_dir(T1,T0), border_only = 0, target_atom = target, mover = mover)) + continue // couldn't enter or couldn't leave T1 + + if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target, mover = mover)) + continue // could not enter src + + return 1 // we don't care about our own density + + return 0 + +/* + Adjacency (to anything else): + * Must be on a turf +*/ +/atom/movable/Adjacent(var/atom/neighbor) + if(neighbor == loc) + return TRUE + if(!isturf(loc)) + return FALSE + if(loc.Adjacent(neighbor,target = neighbor, mover = src)) + return TRUE + return FALSE + +// This is necessary for storage items not on your person. +/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) + if(neighbor == loc) + return 1 + if(isitem(loc)) + if(recurse > 0) + return loc.Adjacent(neighbor,recurse - 1) + return 0 + return ..() + +/* + This checks if you there is uninterrupted airspace between that turf and this one. + This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW. + The border_only flag allows you to not objects (for source and destination squares) +*/ +/turf/proc/ClickCross(target_dir, border_only, target_atom = null, atom/movable/mover = null) + for(var/obj/O in src) + if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density)) + continue + if(O == target_atom || O == mover || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf + continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) + + if( O.flags_1&ON_BORDER_1) // windows are on border, check them first + if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically + return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones + else if( !border_only ) // dense, not on border, cannot pass over + return 0 + return 1 +>>>>>>> 972af61... Merge pull request #32733 from AutomaticFrenzy/patch/adjacency From 505fc95ad04277060f4337c507241939119ae8b2 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 5 Jan 2018 07:27:17 -0800 Subject: [PATCH 22/43] Merge pull request #34034 from deathride58/goonstylecrayons Makes crayons draw at the location you click --- code/game/objects/effects/decals/crayon.dm | 1 + code/game/objects/items/crayons.dm | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 4362957a76..85bd9d9b70 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -4,6 +4,7 @@ icon = 'icons/effects/crayondecal.dmi' icon_state = "rune1" gender = NEUTER + mergeable_decal = FALSE var/do_icon_rotate = TRUE var/rotation = 0 var/paint_colour = "#FFFFFF" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 56bad47963..53ba0bf59a 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -240,7 +240,7 @@ out += a return jointext(out,"") -/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity) +/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params) if(!proximity || !check_allowed_items(target)) return @@ -288,6 +288,14 @@ else graf_rot = 0 + var/list/click_params = params2list(params) + var/clickx + var/clicky + + if(click_params && click_params["icon-x"] && click_params["icon-y"]) + clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + if(!instant) to_chat(user, "You start drawing a [temp] on the [target.name]...") @@ -316,6 +324,8 @@ if(PAINT_NORMAL) var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot) C.add_hiddenprint(user) + C.pixel_x = clickx + C.pixel_y = clicky affected_turfs += target if(PAINT_LARGE_HORIZONTAL) var/turf/left = locate(target.x-1,target.y,target.z) From a1f212a8187e94f4e6c175d4f7f8716b364511eb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:12:30 -0600 Subject: [PATCH 24/43] Automatic changelog generation for PR #4675 [ci skip] --- html/changelogs/AutoChangeLog-pr-4675.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4675.yml diff --git a/html/changelogs/AutoChangeLog-pr-4675.yml b/html/changelogs/AutoChangeLog-pr-4675.yml new file mode 100644 index 0000000000..f50f81c0df --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4675.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "The admin notification for the pulse rifle prize now shows the correct coordinates." From cb02d466461565bd9dc4c837da63be0dc5d52548 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:12:46 -0600 Subject: [PATCH 25/43] Automatic changelog generation for PR #4674 [ci skip] --- html/changelogs/AutoChangeLog-pr-4674.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4674.yml diff --git a/html/changelogs/AutoChangeLog-pr-4674.yml b/html/changelogs/AutoChangeLog-pr-4674.yml new file mode 100644 index 0000000000..ea32a2881c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4674.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "The startup load time of away missions has been drastically reduced." From 4c32fd4e71d572d73763fbda4eb0431dd995de8b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:14:18 -0600 Subject: [PATCH 26/43] Automatic changelog generation for PR #4668 [ci skip] --- html/changelogs/AutoChangeLog-pr-4668.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4668.yml diff --git a/html/changelogs/AutoChangeLog-pr-4668.yml b/html/changelogs/AutoChangeLog-pr-4668.yml new file mode 100644 index 0000000000..919295747f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4668.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Chameleon PDAs now have their chameleon action." From 3a5b2c9b6ecfa7d865979dca554a787115560f19 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:16:56 -0600 Subject: [PATCH 27/43] Automatic changelog generation for PR #4681 [ci skip] --- html/changelogs/AutoChangeLog-pr-4681.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4681.yml diff --git a/html/changelogs/AutoChangeLog-pr-4681.yml b/html/changelogs/AutoChangeLog-pr-4681.yml new file mode 100644 index 0000000000..2e9a4a74a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4681.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Crayons will now draw at the position you click." From 6e4f10449c31029fda2940c10516525e3e9d516c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:17:31 -0600 Subject: [PATCH 28/43] Automatic changelog generation for PR #4676 [ci skip] --- html/changelogs/AutoChangeLog-pr-4676.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4676.yml diff --git a/html/changelogs/AutoChangeLog-pr-4676.yml b/html/changelogs/AutoChangeLog-pr-4676.yml new file mode 100644 index 0000000000..7b2bd49483 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4676.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Devils will no longer be permanently stuck if interrupted while trying to jaunt." + - bugfix: "Devils will now properly clear the fake fire if failing to jaunt." From bd160e46d98c0108f0c226355db8d63f51eea644 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Fri, 5 Jan 2018 17:25:41 -0500 Subject: [PATCH 29/43] Update adjacent.dm --- code/_onclick/adjacent.dm | 107 -------------------------------------- 1 file changed, 107 deletions(-) diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index 63628bb3cd..ddff0b6bd3 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -1,109 +1,3 @@ -<<<<<<< HEAD -/* - Adjacency proc for determining touch range - - This is mostly to determine if a user can enter a square for the purposes of touching something. - Examples include reaching a square diagonally or reaching something on the other side of a glass window. - - This is calculated by looking for border items, or in the case of clicking diagonally from yourself, dense items. - This proc will NOT notice if you are trying to attack a window on the other side of a dense object in its turf. There is a window helper for that. - - Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you - to check that the mob is not inside of something -*/ -/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused - return 0 - -// Not a sane use of the function and (for now) indicative of an error elsewhere -/area/Adjacent(var/atom/neighbor) - CRASH("Call to /area/Adjacent(), unimplemented proc") - - -/* - Adjacency (to turf): - * If you are in the same turf, always true - * If you are vertically/horizontally adjacent, ensure there are no border objects - * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. - * Passing through in this case ignores anything with the LETPASSTHROW pass flag, such as tables, racks, and morgue trays. -*/ -/turf/Adjacent(atom/neighbor, atom/target = null, atom/movable/mover = null) - var/turf/T0 = get_turf(neighbor) - - if(T0 == src) //same turf - return 1 - - if(get_dist(src,T0) > 1) //too far - return 0 - - // Non diagonal case - if(T0.x == x || T0.y == y) - // Check for border blockages - return T0.ClickCross(get_dir(T0,src), border_only = 1, target_atom = target, mover = mover) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target, mover = mover) - - // Diagonal case - var/in_dir = get_dir(T0,src) // eg. northwest (1+8) = 9 (00001001) - var/d1 = in_dir&3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001) - var/d2 = in_dir&12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000) - - for(var/d in list(d1,d2)) - if(!T0.ClickCross(d, border_only = 1, target_atom = target, mover = mover)) - continue // could not leave T0 in that direction - - var/turf/T1 = get_step(T0,d) - if(!T1 || T1.density) - continue - if(!T1.ClickCross(get_dir(T1,src), border_only = 0, target_atom = target, mover = mover) || !T1.ClickCross(get_dir(T1,T0), border_only = 0, target_atom = target, mover = mover)) - continue // couldn't enter or couldn't leave T1 - - if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target, mover = mover)) - continue // could not enter src - - return 1 // we don't care about our own density - - return 0 - -/* - Adjacency (to anything else): - * Must be on a turf -*/ -/atom/movable/Adjacent(var/atom/neighbor) - if(neighbor == loc) - return TRUE - if(!isturf(loc)) - return FALSE - if(loc.Adjacent(neighbor,target = neighbor, mover = src)) - return TRUE - return FALSE - -// This is necessary for storage items not on your person. -/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) - if(neighbor == loc) - return 1 - if(isitem(loc)) - if(recurse > 0) - return loc.Adjacent(neighbor,recurse - 1) - return 0 - return ..() - -/* - This checks if you there is uninterrupted airspace between that turf and this one. - This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW. - The border_only flag allows you to not objects (for source and destination squares) -*/ -/turf/proc/ClickCross(target_dir, border_only, target_atom = null, atom/movable/mover = null) - for(var/obj/O in src) - if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density)) - continue - if(O == target_atom || O == mover || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf - continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) - - if( O.flags_1&ON_BORDER_1) // windows are on border, check them first - if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically - return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones - else if( !border_only ) // dense, not on border, cannot pass over - return 0 - return 1 -======= /* Adjacency proc for determining touch range @@ -208,4 +102,3 @@ else if( !border_only ) // dense, not on border, cannot pass over return 0 return 1 ->>>>>>> 972af61... Merge pull request #32733 from AutomaticFrenzy/patch/adjacency From 0315f5d24419fccabaa23298d9ba431d4b85923a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 16:26:55 -0600 Subject: [PATCH 30/43] Automatic changelog generation for PR #4671 [ci skip] --- html/changelogs/AutoChangeLog-pr-4671.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4671.yml diff --git a/html/changelogs/AutoChangeLog-pr-4671.yml b/html/changelogs/AutoChangeLog-pr-4671.yml new file mode 100644 index 0000000000..3dd0bbb821 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4671.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Meta: The piping in the toxins lab has been rearranged slightly to prevent piping underneath the floor from interfering with the normal setup." From e4c0115d3ae81575b17856efaf1b5f92badab2e6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 5 Jan 2018 19:56:27 -0600 Subject: [PATCH 31/43] Automatic changelog generation for PR #4680 [ci skip] --- html/changelogs/AutoChangeLog-pr-4680.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4680.yml diff --git a/html/changelogs/AutoChangeLog-pr-4680.yml b/html/changelogs/AutoChangeLog-pr-4680.yml new file mode 100644 index 0000000000..d7921bc608 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4680.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Interacting with objects at the same X and Y but a different Z is no longer possible." From fdfa61c1c81411e967471dda515256bdb3f92c8d Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 6 Jan 2018 11:32:25 -0200 Subject: [PATCH 32/43] Merge pull request #34107 from ShizCalev/canister-sprite Fixes relabeled canisters reverting sprites when broken --- code/modules/atmospherics/machinery/portable/canister.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 08b20f07bb..b14c17d875 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -217,7 +217,7 @@ /obj/machinery/portable_atmospherics/canister/update_icon() if(stat & BROKEN) cut_overlays() - icon_state = "[initial(icon_state)]-1" + icon_state = "[icon_state]-1" return var/last_update = update From 0638dabfd270919af216b0e8db987354cc9f01f9 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 6 Jan 2018 14:32:01 +0100 Subject: [PATCH 34/43] Fixes some antags missing from roundend report --- code/datums/antagonists/datum_traitor.dm | 8 ++++++++ code/datums/antagonists/nukeop.dm | 12 ++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/code/datums/antagonists/datum_traitor.dm b/code/datums/antagonists/datum_traitor.dm index 3ccdc7ddfb..de15e9c034 100644 --- a/code/datums/antagonists/datum_traitor.dm +++ b/code/datums/antagonists/datum_traitor.dm @@ -305,11 +305,19 @@ var/TC_uses = 0 var/uplink_true = FALSE var/purchases = "" +<<<<<<< HEAD for(var/datum/component/uplink/H in GLOB.uplinks) if(H && H.owner && H.owner == owner.key) TC_uses += H.spent_telecrystals uplink_true = TRUE purchases += H.purchase_log.generate_render(FALSE) +======= + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key] + if(H) + TC_uses = H.total_spent + uplink_true = TRUE + purchases += H.generate_render(FALSE) +>>>>>>> cb62dc9... Fixes some antags missing from roundend report (#34114) var/objectives_text = "" if(objectives.len)//If the traitor had no objectives, don't need to process this. diff --git a/code/datums/antagonists/nukeop.dm b/code/datums/antagonists/nukeop.dm index 441098aabd..99d273ac97 100644 --- a/code/datums/antagonists/nukeop.dm +++ b/code/datums/antagonists/nukeop.dm @@ -303,14 +303,10 @@ var/TC_uses = 0 for(var/I in members) var/datum/mind/syndicate = I - for(var/U in GLOB.uplinks) - var/datum/component/uplink/H = U - if(H.owner == syndicate.key) - TC_uses += H.purchase_log.total_spent - if(H.purchase_log) - purchases += H.purchase_log.generate_render(show_key = FALSE) - else - stack_trace("WARNING: Nuke Op uplink with no purchase_log Owner: [H.owner]") + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key] + if(H) + TC_uses += H.total_spent + purchases += H.generate_render(show_key = FALSE) text += printplayerlist(members) text += "
" text += "(Syndicates used [TC_uses] TC) [purchases]" From 8f8e16ba123e711f6c89670a3db9abc5b5851d13 Mon Sep 17 00:00:00 2001 From: Jordie Date: Sun, 7 Jan 2018 00:29:55 +1100 Subject: [PATCH 35/43] Adds ban option for team antags (#34116) * adds ban option for team antags * conversion antags ban button --- code/modules/admin/topic.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2d2213eec7..bd104f86ab 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -816,7 +816,9 @@ //Antagonist (Orange) var/isbanned_dept = jobban_isbanned(M, "Syndicate") dat += "" - dat += "" + dat += "" + dat += "Conversion Antagonists" //Traitor if(jobban_isbanned(M, "traitor") || isbanned_dept) @@ -940,6 +942,10 @@ joblist += jobPos if("ghostroles") joblist += list("pAI", "posibrain", "drone", "deathsquad", "lavaland") + if("teamantags") + joblist += list("operative", "revolutionary", "cultist", "servant of Ratvar", "abductor", "alien candidate") + if("convertantags") + joblist += list("revolutionary", "cultist", "servant of Ratvar", "alien candidate") else joblist += href_list["jobban3"] From f36b07371f78287f44a859586924d1d21c1017c3 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 6 Jan 2018 10:23:08 -0600 Subject: [PATCH 37/43] Update datum_traitor.dm --- code/datums/antagonists/datum_traitor.dm | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/code/datums/antagonists/datum_traitor.dm b/code/datums/antagonists/datum_traitor.dm index de15e9c034..a12cf80da7 100644 --- a/code/datums/antagonists/datum_traitor.dm +++ b/code/datums/antagonists/datum_traitor.dm @@ -305,19 +305,11 @@ var/TC_uses = 0 var/uplink_true = FALSE var/purchases = "" -<<<<<<< HEAD - for(var/datum/component/uplink/H in GLOB.uplinks) - if(H && H.owner && H.owner == owner.key) - TC_uses += H.spent_telecrystals - uplink_true = TRUE - purchases += H.purchase_log.generate_render(FALSE) -======= var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key] if(H) TC_uses = H.total_spent uplink_true = TRUE purchases += H.generate_render(FALSE) ->>>>>>> cb62dc9... Fixes some antags missing from roundend report (#34114) var/objectives_text = "" if(objectives.len)//If the traitor had no objectives, don't need to process this. @@ -351,4 +343,4 @@ /datum/antagonist/traitor/roundend_report_footer() return "
The code phrases were: [GLOB.syndicate_code_phrase]
\ - The code responses were: [GLOB.syndicate_code_response]
" \ No newline at end of file + The code responses were: [GLOB.syndicate_code_response]
" From f13426c5af275d054e552b9c5216cedc1d60e48f Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Fri, 5 Jan 2018 17:00:33 -0500 Subject: [PATCH 38/43] many flashes?? --- code/modules/clothing/glasses/_glasses.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 0bfb212e29..d07dde5a17 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -168,7 +168,7 @@ /obj/item/clothing/glasses/sunglasses name = "sunglasses" - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." icon_state = "sun" item_state = "sunglasses" darkness_view = 1 @@ -251,7 +251,7 @@ tint = 3 // to make them blind /obj/item/clothing/glasses/sunglasses/big - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks many flashes." + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks flashes." icon_state = "bigsunglasses" item_state = "bigsunglasses" From c2851e783760fc5bb59482250aeee99d7192230e Mon Sep 17 00:00:00 2001 From: modularized_suicide Date: Fri, 5 Jan 2018 16:51:46 -0500 Subject: [PATCH 40/43] priority:critical --- code/game/objects/items/stacks/wrap.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index baa462e907..19172673af 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -27,6 +27,7 @@ /obj/item/stack/packageWrap name = "package wrapper" + singular_name = "wrapping sheet" desc = "You can use this to wrap items in." icon = 'icons/obj/stack_objects.dmi' icon_state = "deliveryPaper" From d5a54402cfa0b0e39c29680259b21a806ea5b6ee Mon Sep 17 00:00:00 2001 From: Leo Date: Sun, 7 Jan 2018 15:05:52 -0200 Subject: [PATCH 42/43] Merge pull request #34127 from tgstation/Cyberboss-patch-7 Removes the weird timer shennaigans from exp tracking --- code/modules/jobs/job_exp.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 220fa2e9ac..0af03ac739 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -132,7 +132,7 @@ GLOBAL_PROTECT(exp_to_update) for(var/client/L in GLOB.clients) if(L.is_afk()) continue - addtimer(CALLBACK(L,/client/proc/update_exp_list,mins,ann),10) + L.update_exp_list(mins,ann) /datum/controller/subsystem/blackbox/proc/update_exp_db() SSdbcore.MassInsert(format_table_name("role_time"),GLOB.exp_to_update,TRUE)
Antagonist Positions
Antagonist Positions | " + dat += "Team Antagonists