diff --git a/.travis.yml b/.travis.yml index 75d81c06453..cea5f854c91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ env: global: - BASENAME="vorestation" # $BASENAME.dmb, $BASENAME.dme, etc. - BYOND_MAJOR="513" - - BYOND_MINOR="1513" + - BYOND_MINOR="1520" - MACRO_COUNT=4 cache: diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 37f4bff5f9d..fd55905300e 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -74,7 +74,8 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_XENOARCH -20 #define INIT_ORDER_CIRCUIT -21 #define INIT_ORDER_AI -22 -#define INIT_ORDER_GAME_MASTER -24 +#define INIT_ORDER_AI_FAST -23 +#define INIT_ORDER_GAME_MASTER -24 #define INIT_ORDER_TICKER -50 #define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init. diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 17a25448500..119f9d554fa 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -272,17 +272,17 @@ var/list/hearturfs = list() for(var/thing in hear) - if(istype(thing,/obj)) + if(istype(thing, /obj)) //Can't use isobj() because /atom/movable returns true in that, and so lighting overlays would be included objs += thing hearturfs |= get_turf(thing) - else if(istype(thing,/mob)) + if(ismob(thing)) mobs += thing hearturfs |= get_turf(thing) //A list of every mob with a client for(var/mob in player_list) //VOREStation Edit - Trying to fix some vorestation bug. - if(!istype(mob, /mob)) + if(!ismob(mob)) player_list -= mob crash_with("There is a null or non-mob reference inside player_list ([mob]).") continue diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index a0a38bf9d15..2362ff1b3df 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1273,14 +1273,8 @@ var/mob/dview/dview_mob = new if(!center) return - //VOREStation Add - Emergency Backup - if(!dview_mob) - dview_mob = new() - WARNING("dview mob was lost, and had to be recreated!") - //VOREStation Add End - dview_mob.loc = center - + dview_mob.see_invisible = invis_flags . = view(range, dview_mob) diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm index a111b83e434..5ebbb22a2fe 100644 --- a/code/controllers/subsystems/ai.dm +++ b/code/controllers/subsystems/ai.dm @@ -2,8 +2,8 @@ SUBSYSTEM_DEF(ai) name = "AI" init_order = INIT_ORDER_AI priority = FIRE_PRIORITY_AI - wait = 5 // This gets run twice a second, however this is technically two loops in one, with the second loop being run every four iterations. - flags = SS_NO_INIT|SS_TICKER + wait = 2 SECONDS + flags = SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/processing = list() @@ -22,15 +22,11 @@ SUBSYSTEM_DEF(ai) var/list/currentrun = src.currentrun while(currentrun.len) - // var/mob/living/L = currentrun[currentrun.len] var/datum/ai_holder/A = currentrun[currentrun.len] --currentrun.len if(!A || QDELETED(A) || A.busy) // Doesn't exist or won't exist soon or not doing it this tick continue - if(times_fired % 4 == 0 && A.holder.stat != DEAD) - A.handle_strategicals() - if(A.holder.stat != DEAD) // The /TG/ version checks stat twice, presumably in-case processing somehow got the mob killed in that instant. - A.handle_tactics() + A.handle_strategicals() if(MC_TICK_CHECK) return diff --git a/code/controllers/subsystems/aifast.dm b/code/controllers/subsystems/aifast.dm new file mode 100644 index 00000000000..f045a7fd35c --- /dev/null +++ b/code/controllers/subsystems/aifast.dm @@ -0,0 +1,32 @@ +SUBSYSTEM_DEF(aifast) + name = "AI (Fast)" + init_order = INIT_ORDER_AI_FAST + priority = FIRE_PRIORITY_AI + wait = 0.25 SECONDS // Every quarter second + flags = SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/processing = list() + var/list/currentrun = list() + +/datum/controller/subsystem/aifast/stat_entry(msg_prefix) + var/list/msg = list(msg_prefix) + msg += "P:[processing.len]" + ..(msg.Join()) + +/datum/controller/subsystem/aifast/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while(currentrun.len) + var/datum/ai_holder/A = currentrun[currentrun.len] + --currentrun.len + if(!A || QDELETED(A) || A.busy) // Doesn't exist or won't exist soon or not doing it this tick + continue + A.handle_tactics() + + if(MC_TICK_CHECK) + return diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 684505aa57c..65576a52a72 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -98,7 +98,6 @@ var/turf/destturf var/turf/curturf = get_turf(teleatom) - var/area/destarea = get_area(destination) if(precision) var/list/posturfs = circlerangeturfs(destination,precision) destturf = safepick(posturfs) @@ -125,8 +124,6 @@ if(C) C.forceMove(destturf) - destarea.Entered(teleatom) - return 1 /datum/teleport/proc/teleport() diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm index 10ddb9b7b07..1b48efcb9d2 100644 --- a/code/datums/outfits/jobs/cargo.dm +++ b/code/datums/outfits/jobs/cargo.dm @@ -5,6 +5,7 @@ /decl/hierarchy/outfit/job/cargo/qm name = OUTFIT_JOB_NAME("Cargo") uniform = /obj/item/clothing/under/rank/cargo + l_ear = /obj/item/device/radio/headset/headset_qm //VOREStation Add shoes = /obj/item/clothing/shoes/brown glasses = /obj/item/clothing/glasses/sunglasses l_hand = /obj/item/weapon/clipboard diff --git a/code/datums/outfits/outfit_vr.dm b/code/datums/outfits/outfit_vr.dm index 27e5cde50ef..d8a8a58d218 100644 --- a/code/datums/outfits/outfit_vr.dm +++ b/code/datums/outfits/outfit_vr.dm @@ -101,3 +101,76 @@ r_hand = /obj/item/weapon/melee/energy/sword/imperial l_hand = /obj/item/weapon/shield/energy/imperial suit_store = /obj/item/weapon/gun/energy/imperial + +/* +SOUTHERN CROSS OUTFITS +Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead goes in lockers. Keep this in mind if editing. +*/ + + +/decl/hierarchy/outfit/job/explorer2 + name = OUTFIT_JOB_NAME("Explorer") + shoes = /obj/item/clothing/shoes/boots/winter/explorer + uniform = /obj/item/clothing/under/explorer + l_ear = /obj/item/device/radio/headset/explorer + id_slot = slot_wear_id + pda_slot = slot_l_store + pda_type = /obj/item/device/pda/explorer //VORESTation Edit - Better Brown + id_type = /obj/item/weapon/card/id/explorer //VOREStation Edit + id_pda_assignment = "Explorer" + flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL + backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1) + +/decl/hierarchy/outfit/job/explorer2/post_equip(mob/living/carbon/human/H) + ..() + for(var/obj/item/clothing/accessory/permit/gun/planetside/permit in H.back.contents) + permit.set_name(H.real_name) + +/decl/hierarchy/outfit/job/pilot + name = OUTFIT_JOB_NAME("Pilot") + shoes = /obj/item/clothing/shoes/black + uniform = /obj/item/clothing/under/rank/pilot1 + suit = /obj/item/clothing/suit/storage/toggle/bomber/pilot + gloves = /obj/item/clothing/gloves/fingerless + glasses = /obj/item/clothing/glasses/fakesunglasses/aviator + l_ear = /obj/item/device/radio/headset/pilot/alt + id_slot = slot_wear_id + pda_slot = slot_belt + pda_type = /obj/item/device/pda //VOREStation Edit - Civilian + id_pda_assignment = "Pilot" + flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL + +/decl/hierarchy/outfit/job/medical/sar + name = OUTFIT_JOB_NAME("Field Medic") //VOREStation Edit + uniform = /obj/item/clothing/under/utility/blue + //suit = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar //VOREStation Edit + shoes = /obj/item/clothing/shoes/boots/winter/explorer + l_ear = /obj/item/device/radio/headset/sar + l_hand = /obj/item/weapon/storage/firstaid/regular + belt = /obj/item/weapon/storage/belt/medical/emt + pda_slot = slot_l_store + pda_type = /obj/item/device/pda/sar //VOREStation Add + id_pda_assignment = "Field Medic" //VOREStation Edit + flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL + +/decl/hierarchy/outfit/job/pathfinder + name = OUTFIT_JOB_NAME("Pathfinder") + shoes = /obj/item/clothing/shoes/boots/winter/explorer + uniform = /obj/item/clothing/under/explorer //TODO: Uniforms. + l_ear = /obj/item/device/radio/headset/explorer + id_slot = slot_wear_id + pda_slot = slot_l_store + pda_type = /obj/item/device/pda/pathfinder + id_type = /obj/item/weapon/card/id/explorer/head + id_pda_assignment = "Pathfinder" + flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL + backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1) + +/decl/hierarchy/outfit/job/pathfinder/post_equip(mob/living/carbon/human/H) + ..() + for(var/obj/item/clothing/accessory/permit/gun/planetside/permit in H.back.contents) + permit.set_name(H.real_name) + +/decl/hierarchy/outfit/job/assistant/explorer + id_type = /obj/item/weapon/card/id/explorer + flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index c739ffbf852..4b5d8f28a77 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -32,7 +32,7 @@ title = "Security Announcement" announcement_type = "Security Announcement" -/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, zlevel) +/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/zlevel) if(!message) return var/message_title = new_title ? new_title : title @@ -52,11 +52,38 @@ Sound(message_sound, zlevels) Log(message, message_title) -datum/announcement/proc/Message(var/message as text, var/message_title as text, var/list/zlevels) - global_announcer.autosay("[message_title]: [message]", announcer ? announcer : ANNOUNCER_NAME, zlevels) +datum/announcement/proc/Message(message as text, message_title as text, var/list/zlevels) + for(var/mob/M in player_list) + if(!istype(M,/mob/new_player) && !isdeaf(M)) + to_chat(M, "

[title]

") + to_chat(M, "[message]") + if (announcer) + to_chat(M, " -[html_encode(announcer)]") -datum/announcement/minor/Message(var/message as text, var/message_title as text, var/list/zlevels) - global_announcer.autosay(message, announcer ? announcer : ANNOUNCER_NAME, zlevels) +// You'll need to update these to_world usages if you want to make these z-level specific ~Aro +datum/announcement/minor/Message(message as text, message_title as text) + to_world("[message]") + +datum/announcement/priority/Message(message as text, message_title as text) + to_world("

[message_title]

") + to_world("[message]") + if(announcer) + to_world(" -[html_encode(announcer)]") + to_world("
") + +datum/announcement/priority/command/Message(message as text, message_title as text, var/list/zlevels) + var/command + command += "

[command_name()] Update

" + if (message_title) + command += "

[message_title]

" + + command += "
[message]
" + command += "
" + for(var/mob/M in player_list) + if(zlevels && !(get_z(M) in zlevels)) + continue + if(!istype(M,/mob/new_player) && !isdeaf(M)) + to_chat(M, command) datum/announcement/priority/Message(var/message as text, var/message_title as text, var/list/zlevels) global_announcer.autosay("[message_title]: [message]", announcer ? announcer : ANNOUNCER_NAME, zlevels) diff --git a/code/game/area/areas_vr.dm b/code/game/area/areas_vr.dm index 6c4948fd4fb..5396c46e601 100644 --- a/code/game/area/areas_vr.dm +++ b/code/game/area/areas_vr.dm @@ -4,10 +4,10 @@ /area/Entered(var/atom/movable/AM, oldLoc) . = ..() - if(enter_message && ismob(AM)) + if(enter_message && isliving(AM)) to_chat(AM, enter_message) /area/Exited(var/atom/movable/AM, newLoc) . = ..() - if(exit_message && ismob(AM)) + if(exit_message && isliving(AM)) to_chat(AM, exit_message) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 4323cb974f9..b711274be62 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -7,7 +7,6 @@ var/moving_diagonally var/move_speed = 10 var/l_move_time = 1 - var/m_flag = 1 var/throwing = 0 var/thrower var/turf/throw_source = null @@ -65,71 +64,80 @@ return ..() //////////////////////////////////////// -// Here's where we rewrite how byond handles movement except slightly different -// To be removed on step_ conversion -// All this work to prevent a second bump -/atom/movable/Move(atom/newloc, direct=0) - . = FALSE - if(!newloc || newloc == loc) - return - - if(!direct) - direct = get_dir(src, newloc) - set_dir(direct) - - if(!loc.Exit(src, newloc)) - return - - if(!newloc.Enter(src, src.loc)) - return - - if(!check_multi_tile_move_density_dir(direct, locs)) // We're big, and we can't move that way. - return - - // Past this is the point of no return - if(!locs || locs.len <= 1) // We're not a multi-tile object. - var/atom/oldloc = loc - var/area/oldarea = get_area(oldloc) - var/area/newarea = get_area(newloc) - loc = newloc - . = TRUE - oldloc.Exited(src, newloc) - if(oldarea != newarea) - oldarea.Exited(src, newloc) - - for(var/i in oldloc) - if(i == src) // Multi tile objects - continue - var/atom/movable/thing = i - thing.Uncrossed(src) - - newloc.Entered(src, oldloc) - if(oldarea != newarea) - newarea.Entered(src, oldloc) - - for(var/i in loc) - if(i == src) // Multi tile objects - continue - var/atom/movable/thing = i - thing.Crossed(src) - - else if(newloc) // We're a multi-tile object. - . = doMove(newloc) - -// -//////////////////////////////////////// - /atom/movable/Move(atom/newloc, direct = 0) + // Didn't pass enough info if(!loc || !newloc) return FALSE + + // Store this early before we might move, it's used several places var/atom/oldloc = loc + // If we're not moving to the same spot (why? does that even happen?) if(loc != newloc) if(!direct) direct = get_dir(oldloc, newloc) - if (!(direct & (direct - 1))) //Cardinal move - . = ..() - else //Diagonal move, split it into cardinal moves + if (IS_CARDINAL(direct)) //Cardinal move + // Track our failure if any in this value + . = TRUE + + // Face the direction of movement + set_dir(direct) + + // Check to make sure we can leave + if(!loc.Exit(src, newloc)) + . = FALSE + + // Check to make sure we can enter, if we haven't already failed + if(. && !newloc.Enter(src, src.loc)) + . = FALSE + + // Check to make sure if we're multi-tile we can move, if we haven't already failed + if(. && !check_multi_tile_move_density_dir(direct, locs)) + . = FALSE + + // Definitely moving if you enter this, no failures so far + if(. && locs.len <= 1) // We're not a multi-tile object. + var/area/oldarea = get_area(oldloc) + var/area/newarea = get_area(newloc) + var/old_z = get_z(oldloc) + var/dest_z = get_z(newloc) + + // Do The Move + loc = newloc + . = TRUE + + // So objects can be informed of z-level changes + if (old_z != dest_z) + onTransitZ(old_z, dest_z) + + // We don't call parent so we are calling this for byond + oldloc.Exited(src, newloc) + if(oldarea != newarea) + oldarea.Exited(src, newloc) + + // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself + for(var/i in oldloc) + var/atom/movable/thing = i + // We don't call parent so we are calling this for byond + thing.Uncrossed(src) + + // We don't call parent so we are calling this for byond + newloc.Entered(src, oldloc) + if(oldarea != newarea) + newarea.Entered(src, oldloc) + + // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself + for(var/i in loc) + var/atom/movable/thing = i + // We don't call parent so we are calling this for byond + thing.Crossed(src) + + // We're a multi-tile object (multiple locs) + else if(. && newloc) + . = doMove(newloc) + + //Diagonal move, split it into cardinal moves + else moving_diagonally = FIRST_DIAG_STEP var/first_step_dir // The `&& moving_diagonally` checks are so that a forceMove taking @@ -174,32 +182,32 @@ first_step_dir = WEST moving_diagonally = SECOND_DIAG_STEP . = step(src, SOUTH) - if(moving_diagonally == SECOND_DIAG_STEP) - if(!.) - set_dir(first_step_dir) - //else if (!inertia_moving) - // inertia_next_move = world.time + inertia_move_delay - // newtonian_move(direct) + // If we failed, turn to face the direction of the first step at least + if(!. && moving_diagonally == SECOND_DIAG_STEP) + set_dir(first_step_dir) + // Done, regardless! moving_diagonally = 0 + // We return because step above will call Move() and we don't want to do shenanigans back in here again return - if(!loc || (loc == oldloc && oldloc != newloc)) + else if(!loc || (loc == oldloc)) last_move = 0 return + // If we moved, call Moved() on ourselves if(.) - Moved(oldloc, direct) + Moved(oldloc, direct, FALSE) - //Polaris stuff + // Update timers/cooldown stuff move_speed = world.time - l_move_time l_move_time = world.time - m_flag = 1 - //End + last_move = direct // The direction you last moved + // set_dir(direct) //Don't think this is necessary - last_move = direct - set_dir(direct) - if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc,direct)) //movement failed due to buckled mob(s) - return FALSE + // Handle any buckled mobs on this movable + if(has_buckled_mobs()) + handle_buckled_mob_movement(oldloc,direct) + //VOREStation Add else if(. && riding_datum) riding_datum.handle_vehicle_layer() @@ -207,19 +215,12 @@ //VOREStation Add End //Called after a successful Move(). By this point, we've already moved -/atom/movable/proc/Moved(atom/OldLoc, Dir, Forced = FALSE) - //if (!inertia_moving) - // inertia_next_move = world.time + inertia_move_delay - // newtonian_move(Dir) - //if (length(client_mobs_in_contents)) - // update_parallax_contents() - +/atom/movable/proc/Moved(atom/old_loc, direction, forced = FALSE) return TRUE // Make sure you know what you're doing if you call this, this is intended to only be called by byond directly. // You probably want CanPass() /atom/movable/Cross(atom/movable/AM) - . = TRUE return CanPass(AM, loc) /atom/movable/CanPass(atom/movable/mover, turf/target) @@ -261,56 +262,87 @@ return doMove(null) /atom/movable/proc/doMove(atom/destination) - . = FALSE + var/atom/oldloc = loc + var/area/old_area = get_area(oldloc) + var/same_loc = oldloc == destination + if(destination) - var/atom/oldloc = loc - var/same_loc = oldloc == destination - var/area/old_area = get_area(oldloc) var/area/destarea = get_area(destination) + // Do The Move + last_move = 0 loc = destination + + // Unset this in case it was set in some other proc. We're no longer moving diagonally for sure. moving_diagonally = 0 + // We are moving to a different loc if(!same_loc) + // Not moving out of nullspace if(oldloc) oldloc.Exited(src, destination) + // If it's not the same area, Exited() it if(old_area && old_area != destarea) old_area.Exited(src, destination) - for(var/atom/movable/AM in oldloc) + + // Uncross everything where we left + for(var/i in oldloc) + var/atom/movable/AM = i + if(AM == src) + continue AM.Uncrossed(src) + + // Information about turf and z-levels for source and dest collected var/turf/oldturf = get_turf(oldloc) var/turf/destturf = get_turf(destination) var/old_z = (oldturf ? oldturf.z : null) var/dest_z = (destturf ? destturf.z : null) + + // So objects can be informed of z-level changes if (old_z != dest_z) onTransitZ(old_z, dest_z) + + // Destination atom Entered destination.Entered(src, oldloc) + + // Entered() the new area if it's not the same area if(destarea && old_area != destarea) destarea.Entered(src, oldloc) - for(var/atom/movable/AM in destination) + // We ignore ourselves because if we're multi-tile we might be in both old and new locs + for(var/i in destination) + var/atom/movable/AM = i if(AM == src) continue AM.Crossed(src, oldloc) + // Call our thingy to inform everyone we moved + Moved(oldloc, NONE, TRUE) + // Break pulling if we are too far to pull now. if(pulledby && (pulledby.z != src.z || get_dist(pulledby, src) > 1)) pulledby.stop_pulling() - Moved(oldloc, NONE, TRUE) - . = TRUE + // We moved + return TRUE //If no destination, move the atom into nullspace (don't do this unless you know what you're doing) - else - . = TRUE - if (loc) - var/atom/oldloc = loc - var/area/old_area = get_area(oldloc) - oldloc.Exited(src, null) - if(old_area) - old_area.Exited(src, null) + else if(oldloc) loc = null + // Uncross everything where we left (no multitile safety like above because we are definitely not still there) + for(var/i in oldloc) + var/atom/movable/AM = i + AM.Uncrossed(src) + + // Exited() our loc and area + oldloc.Exited(src, null) + if(old_area) + old_area.Exited(src, null) + + // We moved + return TRUE + /atom/movable/proc/onTransitZ(old_z,new_z) GLOB.z_moved_event.raise_event(src, old_z, new_z) for(var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 020ab54f0ec..0b0b8d014c7 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -138,14 +138,13 @@ . = ..() //process movement... - if(.)//.. if did move, ram the turf we get in - var/turf/T = get_turf(loc) - ram_turf(T) +/obj/effect/meteor/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + var/turf/T = get_turf(loc) + ram_turf(T) - if(prob(10) && !istype(T, /turf/space))//randomly takes a 'hit' from ramming - get_hit() - - return . + if(prob(10) && !istype(T, /turf/space)) //randomly takes a 'hit' from ramming + get_hit() /obj/effect/meteor/Destroy() walk(src,0) //this cancels the walk_towards() proc diff --git a/code/game/jobs/job/captain_vr.dm b/code/game/jobs/job/captain_vr.dm index ea9f8ebed9b..f08a1b4079d 100644 --- a/code/game/jobs/job/captain_vr.dm +++ b/code/game/jobs/job/captain_vr.dm @@ -5,6 +5,8 @@ /datum/job/hop disallow_jobhop = TRUE pto_type = PTO_CIVILIAN + departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CIVILIAN) + departments_managed = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_PLANET) alt_titles = list("Crew Resources Officer" = /datum/alt_title/cro, "Deputy Director" = /datum/alt_title/deputy_director) diff --git a/maps/southern_cross/southern_cross_jobs_vr.dm b/code/game/jobs/job/exploration_vr.dm similarity index 82% rename from maps/southern_cross/southern_cross_jobs_vr.dm rename to code/game/jobs/job/exploration_vr.dm index ca117281896..987041de613 100644 --- a/maps/southern_cross/southern_cross_jobs_vr.dm +++ b/code/game/jobs/job/exploration_vr.dm @@ -39,16 +39,16 @@ var/const/SAR =(1<<14) faction = "Station" total_positions = 1 spawn_positions = 1 - supervisors = "the research director" + supervisors = "the Head of Personnel" selection_color = "#d6d05c" - economic_modifier = 7 + economic_modifier = 8 minimal_player_age = 7 pto_type = PTO_EXPLORATION - access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_research, access_gateway) - minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_research, access_gateway) + access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway) + minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway) outfit_type = /decl/hierarchy/outfit/job/pathfinder - job_description = " The Pathfinder's job is to lead and manage expeditions, and is the primary authority on all off-station expeditions." + job_description = "The Pathfinder's job is to lead and manage expeditions, and is the primary authority on all off-station expeditions." /datum/alt_title/pathfinder title = "Pathfinder" @@ -59,9 +59,9 @@ var/const/SAR =(1<<14) departments = list(DEPARTMENT_PLANET) department_flag = MEDSCI faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the pathfinder and the head of personnel" + total_positions = 4 + spawn_positions = 4 + supervisors = "the Pathfinder and the Head of Personnel" selection_color = "#999440" economic_modifier = 5 minimal_player_age = 3 @@ -82,12 +82,12 @@ var/const/SAR =(1<<14) faction = "Station" total_positions = 3 spawn_positions = 3 - supervisors = "the pathfinder and the research director" + supervisors = "the Pathfinder and the Head of Personnel" selection_color = "#999440" economic_modifier = 6 pto_type = PTO_EXPLORATION - access = list(access_explorer, access_research) - minimal_access = list(access_explorer, access_research) + access = list(access_explorer, access_external_airlocks, access_eva) + minimal_access = list(access_explorer, access_external_airlocks, access_eva) outfit_type = /decl/hierarchy/outfit/job/explorer2 job_description = "An Explorer searches for interesting things, and returns them to the station." @@ -97,12 +97,12 @@ var/const/SAR =(1<<14) /datum/job/sar title = "Field Medic" flag = SAR - departments = list(DEPARTMENT_PLANET) + departments = list(DEPARTMENT_PLANET, DEPARTMENT_MEDICAL) department_flag = MEDSCI faction = "Station" total_positions = 2 spawn_positions = 2 - supervisors = "the pathfinder and the chief medical officer" + supervisors = "the Pathfinder and the Chief Medical Officer" selection_color = "#999440" economic_modifier = 6 minimal_player_age = 3 diff --git a/code/game/jobs/job/science_vr.dm b/code/game/jobs/job/science_vr.dm index 007a8625fb8..367eb5dd8a0 100644 --- a/code/game/jobs/job/science_vr.dm +++ b/code/game/jobs/job/science_vr.dm @@ -5,11 +5,11 @@ access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network) + access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network) minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, - access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network) + access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network) /datum/job/scientist spawn_positions = 5 diff --git a/code/game/jobs/job/security_vr.dm b/code/game/jobs/job/security_vr.dm index e969dcff564..9e55d807b0c 100644 --- a/code/game/jobs/job/security_vr.dm +++ b/code/game/jobs/job/security_vr.dm @@ -5,11 +5,11 @@ access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_external_airlocks) minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_external_airlocks) /datum/job/warden pto_type = PTO_SECURITY diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index aa6316033c0..c8991f79e8d 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -13,9 +13,9 @@ cable.amount = 100 ..() -/obj/machinery/cablelayer/Move(new_turf,M_Dir) - ..() - layCable(new_turf,M_Dir) +/obj/machinery/cablelayer/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + layCable(loc,direction) /obj/machinery/cablelayer/attack_hand(mob/user as mob) if(!cable&&!on) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index ec0366547f4..453e528befe 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -4,7 +4,7 @@ /obj/machinery/organ_printer name = "organ printer" desc = "It's a machine that prints organs." - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/surgery_vr.dmi' //VOREStation Edit icon_state = "bioprinter" anchored = 1 @@ -69,11 +69,13 @@ return ..() /obj/machinery/organ_printer/update_icon() - overlays.Cut() + //VOREStation Edit + cut_overlays() if(panel_open) - overlays += "bioprinter_panel_open" + add_overlay("bioprinter_panel_open") if(printing) - overlays += "bioprinter_working" + add_overlay("bioprinter_working") + //VOREStation Edit End /obj/machinery/organ_printer/New() ..() diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 10eb6bda85c..fe0a9c8a628 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -119,6 +119,12 @@ check_eye(user) return 1 +/obj/machinery/computer/security/relaymove(mob/user,direct) + var/turf/T = get_turf(current_camera) + for(var/i; i < 10; i++) + T = get_step(T, direct) + jump_on_click(user, T) + //Camera control: moving. /obj/machinery/computer/security/proc/jump_on_click(var/mob/user,var/A) if(user.machine != src) @@ -185,22 +191,15 @@ update_use_power(USE_POWER_IDLE) //Camera control: mouse. +/* Oh my god /atom/DblClick() ..() if(istype(usr.machine,/obj/machinery/computer/security)) var/obj/machinery/computer/security/console = usr.machine console.jump_on_click(usr,src) -//Camera control: arrow keys. -/mob/Move(n,direct) - if(istype(machine,/obj/machinery/computer/security)) - var/obj/machinery/computer/security/console = machine - var/turf/T = get_turf(console.current_camera) - for(var/i;i<10;i++) - T = get_step(T,direct) - console.jump_on_click(src,T) - return - return ..(n,direct) +*/ +//Camera control: arrow keys. /obj/machinery/computer/security/telescreen name = "Telescreen" desc = "Used for watching an empty arena." diff --git a/code/game/machinery/computer/shutoff_monitor.dm b/code/game/machinery/computer/shutoff_monitor.dm index aed7bd25b9b..e2413c5e211 100644 --- a/code/game/machinery/computer/shutoff_monitor.dm +++ b/code/game/machinery/computer/shutoff_monitor.dm @@ -5,66 +5,27 @@ icon_screen = "power:0" light_color = "#a97faa" circuit = /obj/item/weapon/circuitboard/shutoff_monitor + var/datum/nano_module/shutoff_monitor/monitor -/obj/machinery/computer/shutoff_monitor/attack_hand(var/mob/user) +/obj/machinery/computer/shutoff_monitor/New() + ..() + monitor = new(src) + +/obj/machinery/computer/shutoff_monitor/Destroy() + qdel(monitor) + monitor = null + ..() + +/obj/machinery/computer/shutoff_monitor/attack_hand(var/mob/user as mob) ..() ui_interact(user) -/obj/machinery/computer/shutoff_monitor/attack_robot(var/mob/user) // Borgs and AI will want to see this too - ..() - ui_interact(user) - -/obj/machinery/computer/shutoff_monitor/attack_ai(var/mob/user) - ui_interact(user) - -/obj/machinery/computer/shutoff_monitor/ui_interact(mob/user, ui_key = "shutoff_monitor", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null) - var/data[0] - data["valves"] = list() - for(var/obj/machinery/atmospherics/valve/shutoff/S in GLOB.shutoff_valves) - data["valves"][++data["valves"].len] = list("name" = S.name, "enable" = S.close_on_leaks, "open" = S.open, "x" = S.x, "y" = S.y, "z" = S.z, "ref" = "\ref[S]") - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "shutoff_monitor.tmpl", "Automated Shutoff Valve Monitor", 625, 700, state = key_state) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every 20 Master Controller tick - ui.set_auto_update(20) // Longer term to reduce the rate of data collection and processing - -/obj/machinery/computer/shutoff_monitor/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["toggle_enable"]) - var/obj/machinery/atmospherics/valve/shutoff/S = locate(href_list["toggle_enable"]) - - // Invalid ref - if(!istype(S)) - return 0 - - S.close_on_leaks = !S.close_on_leaks - - if(href_list["toggle_open"]) - var/obj/machinery/atmospherics/valve/shutoff/S = locate(href_list["toggle_open"]) - - // Invalid ref - if(!istype(S)) - return 0 - - if(S.open) - S.close() - else - S.open() - - return - +/obj/machinery/computer/shutoff_monitor/ui_interact(mob/user, ui_key = "shutoff_monitor", var/datum/nanoui/ui = null, var/force_open = 1) + monitor.ui_interact(user, ui_key, ui, force_open) /obj/machinery/computer/shutoff_monitor/update_icon() ..() if(!(stat & (NOPOWER|BROKEN))) add_overlay("ai-fixer-empty") + else + cut_overlay("ai-fixer-empty") \ No newline at end of file diff --git a/code/game/machinery/computer/timeclock_vr.dm b/code/game/machinery/computer/timeclock_vr.dm index ad118c74d7f..42e78683ec5 100644 --- a/code/game/machinery/computer/timeclock_vr.dm +++ b/code/game/machinery/computer/timeclock_vr.dm @@ -209,8 +209,9 @@ /obj/machinery/computer/timeclock/proc/checkCardCooldown() if(!card) return FALSE - if((world.time - card.last_job_switch) < 15 MINUTES) - to_chat(usr, "You need to wait at least 15 minutes after last duty switch.") + var/time_left = 10 MINUTES - (world.time - card.last_job_switch) + if(time_left > 0) + to_chat(usr, "You need to wait another [round((time_left/10)/60, 1)] minute\s before you can switch.") return FALSE return TRUE @@ -270,4 +271,4 @@ /obj/machinery/computer/timeclock/premade/west dir = 4 - pixel_x = -26 \ No newline at end of file + pixel_x = -26 diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index bf60a7dc1cf..49a1b6fc26b 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -490,8 +490,7 @@ else source.thermal_conductivity = initial(source.thermal_conductivity) -/obj/machinery/door/Move(new_loc, new_dir) - //update_nearby_tiles() +/obj/machinery/door/Moved(atom/old_loc, direction, forced = FALSE) . = ..() if(width > 1) if(dir in list(EAST, WEST)) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index 608e02b9a08..f05419cb6d0 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -16,7 +16,7 @@ QDEL_NULL(filler2) return ..() -/obj/machinery/door/airlock/multi_tile/Move() +/obj/machinery/door/airlock/multi_tile/Moved(atom/old_loc, direction, forced = FALSE) . = ..() SetBounds() diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index e7f39ade5f7..2b25b445c98 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -12,8 +12,8 @@ T = new/obj/item/stack/tile/floor(src) ..() -/obj/machinery/floorlayer/Move(new_turf,M_Dir) - ..() +/obj/machinery/floorlayer/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() if(on) if(mode["dismantle"]) @@ -26,7 +26,7 @@ CollectTiles(old_turf) - old_turf = new_turf + old_turf = loc /obj/machinery/floorlayer/attack_hand(mob/user as mob) on=!on diff --git a/code/game/machinery/machinery_power.dm b/code/game/machinery/machinery_power.dm index a052ee01ceb..aa3d301e530 100644 --- a/code/game/machinery/machinery_power.dm +++ b/code/game/machinery/machinery_power.dm @@ -88,23 +88,13 @@ // Registering moved_event observers for all machines is too expensive. Instead we do it ourselves. // 99% of machines are always on a turf anyway, very few need recursive move handling. -/obj/machinery/Move() - var/old_loc = loc - if((. = ..())) - update_power_on_move(src, old_loc, loc) - if(ismovable(loc)) // Register for recursive movement (if the thing we're inside moves) - GLOB.moved_event.register(loc, src, .proc/update_power_on_move) - if(ismovable(old_loc)) // Unregister recursive movement. - GLOB.moved_event.unregister(old_loc, src, .proc/update_power_on_move) - -/obj/machinery/forceMove(atom/destination) - var/old_loc = loc - if((. = ..())) - update_power_on_move(src, old_loc, loc) - if(ismovable(loc)) // Register for recursive movement (if the thing we're inside moves) - GLOB.moved_event.register(loc, src, .proc/update_power_on_move) - if(ismovable(old_loc)) // Unregister recursive movement. - GLOB.moved_event.unregister(old_loc, src, .proc/update_power_on_move) +/obj/machinery/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + update_power_on_move(src, old_loc, loc) + if(ismovable(loc)) // Register for recursive movement (if the thing we're inside moves) + GLOB.moved_event.register(loc, src, .proc/update_power_on_move) + if(ismovable(old_loc)) // Unregister recursive movement. + GLOB.moved_event.unregister(old_loc, src, .proc/update_power_on_move) /obj/machinery/proc/update_power_on_move(atom/movable/mover, atom/old_loc, atom/new_loc) var/area/old_area = get_area(old_loc) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 13b1dc1bb75..f5f25320800 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -132,12 +132,6 @@ Buildable meters src.set_dir(turn(src.dir, 270)) fixdir() -// If you want to disable pipe dir changing when pulled, uncomment this -// /obj/item/pipe/Move() -// var/old_dir = dir -// . = ..() -// set_dir(old_dir) //pipes changing direction when moved is just annoying and buggy - // Don't let pulling a pipe straighten it out. /obj/item/pipe/binary/bendable/Move() var/old_bent = !IS_CARDINAL(dir) diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 366a351d6b2..fa58f6a3fc1 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -42,15 +42,15 @@ ..() // Whenever we move, if enabled try and lay pipe -/obj/machinery/pipelayer/Move(new_turf,M_Dir) - ..() +/obj/machinery/pipelayer/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() if(on && a_dis) dismantleFloor(old_turf) - layPipe(old_turf, M_Dir, old_dir) + layPipe(old_turf, direction, old_dir) - old_turf = new_turf - old_dir = turn(M_Dir, 180) + old_turf = loc + old_dir = turn(direction, 180) /obj/machinery/pipelayer/attack_hand(mob/user as mob) if(..()) diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 1b9d89dc00f..9977e765e9f 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -1,7 +1,7 @@ /obj/machinery/seed_extractor name = "seed extractor" desc = "Extracts and bags seeds from produce." - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "sextractor" density = 1 anchored = 1 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 9a9ec692783..165df282987 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -88,7 +88,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["compression"], signal.data["level"], signal.frequency, signal.data["verb"], forced_radios) - /** #### - Simple Broadcast - #### **/ if(signal.data["type"] == SIGNAL_SIMPLE) @@ -346,7 +345,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/data, var/compression, var/list/level, var/freq, var/verbage = "says", var/list/forced_radios) - /* ###### Prepare the radio connection ###### */ var/display_freq = freq diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index ac6e56cee34..1d765375be6 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -352,11 +352,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() circuit = /obj/item/weapon/circuitboard/telecomms/hub long_range_link = 1 netspeed = 40 - var/list/telecomms_map /obj/machinery/telecomms/hub/Initialize() . = ..() - LAZYINITLIST(telecomms_map) component_parts = list() component_parts += new /obj/item/weapon/stock_parts/subspace/sub_filter(src) component_parts += new /obj/item/weapon/stock_parts/subspace/sub_filter(src) @@ -365,20 +363,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() component_parts += new /obj/item/stack/cable_coil(src, 2) RefreshParts() -/obj/machinery/telecomms/hub/process() - . = ..() - telecomms_map.Cut() - - if(!on) - return - - for(var/M in links) - if(istype(M,/obj/machinery/telecomms/receiver) || istype(M,/obj/machinery/telecomms/relay)) - var/obj/machinery/telecomms/R = M - if(!R.on) - continue - telecomms_map |= R.listening_level - /obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(is_freq_listening(signal)) if(istype(machine_from, /obj/machinery/telecomms/receiver)) @@ -751,17 +735,10 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() return FALSE //Items don't have a Z when inside an object or mob - var/turf/src_turf = get_turf(A) - var/turf/dst_turf = get_turf(B) + var/turf/src_z = get_z(A) + var/turf/dst_z = get_z(B) //Nullspace, probably. - if(!src_turf || !dst_turf) - return FALSE - - var/src_z = src_turf.z - var/dst_z = dst_turf.z - - //Mysterious! if(!src_z || !dst_z) return FALSE @@ -769,11 +746,4 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list() if(ad_hoc && src_z == dst_z) return TRUE - //Let's look at hubs and see what we got. - var/can_comm = FALSE - for(var/obj/machinery/telecomms/hub/H in telecomms_list) - if((src_z in H.telecomms_map) && (dst_z in H.telecomms_map)) - can_comm = TRUE - break - - return can_comm + return src_z in using_map.get_map_levels(dst_z) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1e4f4dc8ae6..78b22a13e04 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -382,11 +382,9 @@ //////// Movement procs //////// ////////////////////////////////// -/obj/mecha/Move() +/obj/mecha/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - MoveAction() - return + MoveAction() /obj/mecha/proc/MoveAction() //Allows mech equipment to do an action once the mech moves if(!equipment.len) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index cc1e327478b..7d1319ab85c 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -176,19 +176,15 @@ add_fingerprint(user) return M -/atom/movable/proc/handle_buckled_mob_movement(newloc,direct) - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A -// if(!L.Move(newloc, direct)) - if(!L.forceMove(newloc, direct)) - loc = L.loc - last_move = L.last_move - L.inertia_dir = last_move - return FALSE - else - L.set_dir(dir) - return TRUE +/atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct) + for(var/A in buckled_mobs) + var/mob/living/L = A + L.forceMove(loc, direct) + L.last_move = last_move + L.inertia_dir = last_move + + if(!buckle_dir) + L.set_dir(dir) /atom/movable/proc/can_buckle_check(mob/living/M, forced = FALSE) if(!buckled_mobs) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 00896e71073..b872f9b3d3b 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -113,12 +113,11 @@ steam.start() -- spawns the effect T.hotspot_expose(1000,100) return ..() -/obj/effect/effect/sparks/Move() - ..() - var/turf/T = src.loc - if (istype(T, /turf)) +/obj/effect/effect/sparks/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(isturf(loc)) + var/turf/T = loc T.hotspot_expose(1000,100) - return /datum/effect/effect/system/spark_spread var/total_sparks = 0 // To stop it being spammed and lagging! @@ -225,8 +224,8 @@ steam.start() -- spawns the effect time_to_live = 600 //var/list/projectiles -/obj/effect/effect/smoke/bad/Move() - ..() +/obj/effect/effect/smoke/bad/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() for(var/mob/living/L in get_turf(src)) affect(L) @@ -281,8 +280,8 @@ steam.start() -- spawns the effect STOP_PROCESSING(SSobj, src) return ..() -/obj/effect/effect/smoke/elemental/Move() - ..() +/obj/effect/effect/smoke/elemental/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() for(var/mob/living/L in range(1, src)) affect(L) diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index 63b2a09c240..12a1e920201 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -12,10 +12,6 @@ qdel(src) return -/obj/effect/expl_particles/Move() - ..() - return - /datum/effect/system/expl_particles var/number = 10 var/turf/location diff --git a/code/game/objects/items/devices/radio/encryptionkey_vr.dm b/code/game/objects/items/devices/radio/encryptionkey_vr.dm index 5be1effb355..1f6110d16aa 100644 --- a/code/game/objects/items/devices/radio/encryptionkey_vr.dm +++ b/code/game/objects/items/devices/radio/encryptionkey_vr.dm @@ -17,10 +17,38 @@ /obj/item/device/encryptionkey/heads/rd name = "research director's encryption key" icon_state = "rd_cypherkey" - channels = list("Command" = 1, "Science" = 1, "Explorer" = 1) + channels = list("Command" = 1, "Science" = 1) /obj/item/device/encryptionkey/ert channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1, "Explorer" = 1) /obj/item/device/encryptionkey/omni //Literally only for the admin intercoms channels = list("Mercenary" = 1, "Raider" = 1, "Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1, "Explorer" = 1) + +/obj/item/device/encryptionkey/pathfinder + name = "pathfinder's encryption key" + icon_state = "com_cypherkey" + channels = list("Command" = 1, "Explorer" = 1) + +/obj/item/device/encryptionkey/qm + name = "quartermaster's encryption key" + icon_state = "qm_cypherkey" + channels = list("Command" = 1, "Supply" = 1) + +/obj/item/device/encryptionkey/pilot + name = "pilot's encryption key" + icon_state = "cypherkey" + channels = list("Explorer" = 1) + +/obj/item/device/encryptionkey/explorer + name = "explorer's encryption key" + icon_state = "rob_cypherkey" + channels = list("Explorer" = 1) + +/obj/item/device/encryptionkey/sar + name = "fm's encryption key" + icon_state = "med_cypherkey" + channels = list("Medical" = 1, "Explorer" = 1) + +/obj/item/device/encryptionkey/talon + channels = list("Talon" = 1) diff --git a/code/game/objects/items/devices/radio/headset_vr.dm b/code/game/objects/items/devices/radio/headset_vr.dm index 14398d9f59d..9204c81dd17 100644 --- a/code/game/objects/items/devices/radio/headset_vr.dm +++ b/code/game/objects/items/devices/radio/headset_vr.dm @@ -48,4 +48,83 @@ M.mob_radio.forceMove(M.loc) M.mob_radio = null return - ..() \ No newline at end of file + ..() + +/obj/item/device/radio/headset/headset_cargo + desc = "A headset used by the QM's slaves." + +/obj/item/device/radio/headset/headset_cargo/alt + desc = "A bowman headset used by the QM's slaves." + +/obj/item/device/radio/headset/headset_qm + name = "qm radio headset" + desc = "A headset used by the QM." + icon_state = "cargo_headset" + ks2type = /obj/item/device/encryptionkey/qm + +/obj/item/device/radio/headset/headset_qm/alt + name = "qm bowman headset" + desc = "A bowman headset used by the QM." + icon_state = "cargo_headset_alt" + +/obj/item/device/radio/headset/pathfinder + name = "pathfinder's headset" + desc = "Headset used by pathfinders for exploring. Access to the explorer and command channels." + icon_state = "exp_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/pathfinder + +/obj/item/device/radio/headset/pathfinder/alt + name = "pathfinder's bowman headset" + desc = "Bowman headset used by pathfinders for exploring. Access to the explorer and command channels." + icon_state = "exp_headset_alt" + +/obj/item/device/radio/headset/pilot + name = "pilot's headset" + desc = "A headset used by pilots, has access to the explorer channel." + icon_state = "pilot_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/pilot + +/obj/item/device/radio/headset/pilot/alt + name = "pilot's bowman headset" + desc = "A bowman headset used by pilots, has access to the explorer channel." + icon_state = "pilot_headset_alt" + +/obj/item/device/radio/headset/explorer + name = "explorer's headset" + desc = "Headset used by explorers for exploring. Access to the explorer channel." + icon_state = "exp_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/explorer + +/obj/item/device/radio/headset/explorer/alt + name = "explorer's bowman headset" + desc = "Bowman headset used by explorers for exploring. Access to the explorer channel." + icon_state = "exp_headset_alt" + +/obj/item/device/radio/headset/sar + name = "fm radio headset" + desc = "A headset for field medics." + icon_state = "sar_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/sar + +/obj/item/device/radio/headset/sar/alt + name = "fm radio bowman headset" + desc = "A bowman headset for field medics." + icon_state = "sar_headset_alt" + +/obj/item/device/radio/headset/volunteer + name = "volunteer's headset" + desc = "A headset used by volunteers to expedition teams, has access to the exploration channel." + icon_state = "pilot_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/device/encryptionkey/pilot + +/obj/item/device/radio/headset/talon + name = "talon headset" + desc = "A headset for communication between the crew of the ITV Talon." + adhoc_fallback = TRUE + icon_state = "pilot_headset" + ks2type = /obj/item/device/encryptionkey/talon diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 995b659c198..b3840d313f5 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -11,10 +11,10 @@ var/global/list/default_internal_channels = list( num2text(MED_I_FREQ)=list(access_medical_equip), num2text(SEC_FREQ) = list(access_security), num2text(SEC_I_FREQ)=list(access_security), - num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology, access_explorer), + num2text(SCI_FREQ) = list(access_tox, access_robotics, access_xenobiology), num2text(SUP_FREQ) = list(access_cargo, access_mining_station), num2text(SRV_FREQ) = list(access_janitor, access_library, access_hydroponics, access_bar, access_kitchen), - num2text(EXP_FREQ) = list(access_explorer, access_pilot, access_rd) + num2text(EXP_FREQ) = list(access_explorer, access_pilot) ) var/global/list/default_medbay_channels = list( @@ -287,7 +287,7 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/list/zlevels) //BS12 EDIT var/datum/radio_frequency/connection = null if(channel && channels && channels.len > 0) - if (channel == "department") + if(channel == "department") channel = channels[1] connection = secure_radio_connections[channel] else @@ -304,7 +304,7 @@ var/global/list/default_medbay_channels = list( Broadcast_Message(connection, A, 0, "*garbled automated announcement*", src, message_to_multilingual(message), from, "Automated Announcement", from, "synthesized voice", - 4, 0, zlevels, connection.frequency, "states") + DATA_FAKE, 0, zlevels, connection.frequency, "states") // Interprets the message mode when talking into a radio, possibly returning a connection datum /obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode) @@ -363,8 +363,8 @@ var/global/list/default_medbay_channels = list( if(!istype(message_mode, /datum/radio_frequency)) return FALSE - var/datum/radio_frequency/connection = message_mode var/pos_z = get_z(src) + var/datum/radio_frequency/connection = message_mode //#### Tagging the signal with all appropriate identity values ####// @@ -479,7 +479,6 @@ var/global/list/default_medbay_channels = list( signal.transmission_method = TRANSMISSION_SUBSPACE //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in telecomms_list) R.receive_signal(signal) @@ -494,7 +493,7 @@ var/global/list/default_medbay_channels = list( else if(adhoc_fallback) //Less huzzah, we have to fallback to_chat(loc, "\The [src] pings as it falls back to local radio transmission.") subspace_transmission = FALSE - + else //Oh well return FALSE @@ -536,8 +535,6 @@ var/global/list/default_medbay_channels = list( if(get_dist(src, M) <= canhear_range) talk_into(M, message_pieces, null, verb) - - /obj/item/device/radio/proc/receive_range(freq, level) // check if this radio can receive on the given frequency, and if so, // what the range is in which mobs will hear the radio diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index c3bc83d3b9d..982236f43c3 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -18,12 +18,12 @@ break ..() // delete target - Move() - ..() + Moved(atom/old_loc, direction, forced = FALSE) + . = ..() // After target moves, check for nearby stakes. If associated, move to target for(var/obj/structure/target_stake/M in view(3,src)) if(M.density == 0 && M.pinned_target == src) - M.loc = loc + M.forceMove(loc) // This may seem a little counter-intuitive but I assure you that's for a purpose. // Stakes are the ones that carry targets, yes, but in the stake code we set diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm new file mode 100644 index 00000000000..d353dda8490 --- /dev/null +++ b/code/game/objects/items/uav.dm @@ -0,0 +1,347 @@ +#define UAV_OFF 0 +#define UAV_ON 1 +#define UAV_PAIRING 2 +#define UAV_PACKED 3 + +/obj/item/device/uav + name = "recon skimmer" + desc = "A semi-portable reconisance drone that folds into a backpack-sized carrying case." + icon = 'icons/obj/uav.dmi' + icon_state = "uav" + + var/obj/item/weapon/cell/cell + var/cell_type = null //Can put a starting cell here + + density = 1 //Is dense, but not anchored, so you can swap with it + slowdown = 3 //Heevvee. + + health = 100 + var/power_per_process = 50 // About 6.5 minutes of use on a high-cell (10,000) + var/state = UAV_OFF + + var/datum/effect/effect/system/ion_trail_follow/ion_trail + + var/list/mob/living/masters + + // So you know which is which + var/nickname = "Generic Droan" + + // Radial menu + var/static/image/radial_pickup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pickup") + var/static/image/radial_wrench = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_wrench") + var/static/image/radial_power = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_power") + var/static/image/radial_pair = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pair") + + // Movement cooldown + var/next_move = 0 + + // Idle shutdown time + var/no_masters_time = 0 + +/obj/item/device/uav/loaded + cell_type = /obj/item/weapon/cell/high + +/obj/item/device/uav/Initialize() + . = ..() + + if(!cell && cell_type) + cell = new cell_type + + ion_trail = new /datum/effect/effect/system/ion_trail_follow() + ion_trail.set_up(src) + ion_trail.stop() + +/obj/item/device/uav/Destroy() + qdel_null(cell) + qdel_null(ion_trail) + LAZYCLEARLIST(masters) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/device/uav/attack_hand(var/mob/user) + //Has to be on the ground to work with it properly + if(!isturf(loc)) + return ..() + + var/list/options = list( + "Pick Up" = radial_pickup, + "(Dis)Assemble" = radial_wrench, + "Toggle Power" = radial_power, + "Pairing Mode" = radial_pair) + var/choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) + + switch(choice) + // Can pick up when off or packed + if("Pick Up") + if(state == UAV_OFF || state == UAV_PACKED) + return ..() + else + to_chat(user,"Turn [nickname] off or pack it first!") + return + // Can disasemble or reassemble from packed or off (and this one takes time) + if("(Dis)Assemble") + if(can_transition_to(state == UAV_PACKED ? UAV_OFF : UAV_PACKED, user) && do_after(user, 10 SECONDS, src)) + return toggle_packed(user) + // Can toggle power from on and off + if("Toggle Power") + if(can_transition_to(state == UAV_ON ? UAV_OFF : UAV_ON, user)) + return toggle_power(user) + // Can pair when off + if("Pairing Mode") + if(can_transition_to(state == UAV_PAIRING ? UAV_OFF : UAV_PAIRING, user)) + return toggle_pairing(user) + +/obj/item/device/uav/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/modular_computer) && state == UAV_PAIRING) + var/obj/item/modular_computer/MC = I + LAZYDISTINCTADD(MC.paired_uavs, weakref(src)) + playsound(src, 'sound/machines/buttonbeep.ogg', 50, 1) + visible_message("[user] pairs [I] to [nickname]") + toggle_pairing() + + else if(I.is_screwdriver() && cell) + if(do_after(user, 3 SECONDS, src)) + to_chat(user, "You remove [cell] into [nickname].") + playsound(src, I.usesound, 50, 1) + power_down() + cell.forceMove(get_turf(src)) + cell = null + + else if(istype(I, /obj/item/weapon/cell) && !cell) + if(do_after(user, 3 SECONDS, src)) + to_chat(user, "You insert [I] into [nickname].") + playsound(src, 'sound/items/deconstruct.ogg', 50, 1) + power_down() + cell.forceMove(get_turf(src)) + cell = null + + else if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen)) + var/tmp_label = sanitizeSafe(input(user, "Enter a nickname for [src]", "Nickname", nickname), MAX_NAME_LEN) + if(length(tmp_label) > 50 || length(tmp_label) < 3) + to_chat(user, "The nickname must be between 3 and 50 characters.") + else + to_chat(user, "You scribble your new nickname on the side of [src].") + nickname = tmp_label + desc = initial(desc) + " This one has '[nickname]' scribbled on the side." + else + return ..() + +/obj/item/device/uav/proc/can_transition_to(var/new_state, var/mob/user) + switch(state) //Current one + if(UAV_ON) + if(new_state == UAV_OFF || new_state == UAV_PACKED) + . = TRUE + if(UAV_OFF) + if(new_state == UAV_ON || new_state == UAV_PACKED || new_state == UAV_PAIRING) + . = TRUE + if(UAV_PAIRING) + if(new_state == UAV_OFF) + . = TRUE + if(UAV_PACKED) + if(new_state == UAV_OFF) + . = TRUE + + if(!.) + if(user) + to_chat(user, "You can't do that while [nickname] is in this state.") + return FALSE + +/obj/item/device/uav/update_icon() + cut_overlays() + switch(state) + if(UAV_PAIRING) + add_overlay("[initial(icon_state)]_pairing") + icon_state = "[initial(icon_state)]" + if(UAV_ON) + icon_state = "[initial(icon_state)]_on" + if(UAV_OFF) + icon_state = "[initial(icon_state)]" + if(UAV_PACKED) + icon_state = "[initial(icon_state)]_packed" + +/obj/item/device/uav/process() + if(cell?.use(power_per_process) != power_per_process) + visible_message("[src] sputters and thuds to the ground, inert.") + playsound(src, 'sound/items/drop/metalboots.ogg', 75, 1) + power_down() + health -= initial(health)*0.25 //Lose 25% of your original health + + if(LAZYLEN(masters)) + no_masters_time = 0 + else if(no_masters_time++ > 50) + power_down() + +/obj/item/device/uav/proc/toggle_pairing() + switch(state) + if(UAV_PAIRING) + state = UAV_OFF + update_icon() + return TRUE + if(UAV_OFF) + state = UAV_PAIRING + update_icon() + return TRUE + return FALSE + +/obj/item/device/uav/proc/toggle_power() + switch(state) + if(UAV_OFF) + power_up() + return TRUE + if(UAV_ON) + power_down() + return TRUE + return FALSE + +/obj/item/device/uav/proc/toggle_packed() + if(UAV_ON) + power_down() + switch(state) + if(UAV_OFF) //Packing + state = UAV_PACKED + w_class = ITEMSIZE_LARGE + slowdown = 1 + density = FALSE + update_icon() + return TRUE + if(UAV_PACKED) //Unpacking + state = UAV_OFF + w_class = ITEMSIZE_HUGE + slowdown = 3 + density = TRUE + update_icon() + return TRUE + return FALSE + +/obj/item/device/uav/proc/power_up() + if(state != UAV_OFF || !isturf(loc)) + return + if(cell?.use(power_per_process) != power_per_process) + visible_message("[src] sputters and chugs as it tries, and fails, to power up.") + return + + state = UAV_ON + update_icon() + start_hover() + set_light(4, 4, "#FFFFFF") + START_PROCESSING(SSobj, src) + no_masters_time = 0 + visible_message("[nickname] buzzes and lifts into the air.") + +/obj/item/device/uav/proc/power_down() + if(state != UAV_ON) + return + + state = UAV_OFF + update_icon() + stop_hover() + set_light(0) + LAZYCLEARLIST(masters) + STOP_PROCESSING(SSobj, src) + visible_message("[nickname] gracefully settles onto the ground.") + +//////////////// Helpers +/obj/item/device/uav/get_cell() + return cell + +/obj/item/device/uav/relaymove(var/mob/user, direction, signal = 1) + if(signal && state == UAV_ON && (weakref(user) in masters)) + if(next_move <= world.time) + next_move = world.time + (1 SECOND/signal) + step(src, direction) + return TRUE // Even if we couldn't step, we're taking credit for absorbing the move + return FALSE + +/obj/item/device/uav/proc/get_status_string() + return "[nickname] - [get_x(src)],[get_y(src)],[get_z(src)] - I:[health]/[initial(health)] - C:[cell ? "[cell.charge]/[cell.maxcharge]" : "Not Installed"]" + +/obj/item/device/uav/proc/add_master(var/mob/living/M) + LAZYDISTINCTADD(masters, weakref(M)) + +/obj/item/device/uav/proc/remove_master(var/mob/living/M) + LAZYREMOVE(masters, weakref(M)) + +/obj/item/device/uav/check_eye() + if(state == UAV_ON) + return 0 + else + return -1 + +/obj/item/device/uav/proc/start_hover() + if(!ion_trail.on) //We'll just use this to store if we're floating or not + ion_trail.start() + var/amplitude = 2 //maximum displacement from original position + var/period = 36 //time taken for the mob to go up >> down >> original position, in deciseconds. Should be multiple of 4 + + var/top = old_y + amplitude + var/bottom = old_y - amplitude + var/half_period = period / 2 + var/quarter_period = period / 4 + + animate(src, pixel_y = top, time = quarter_period, easing = SINE_EASING | EASE_OUT, loop = -1) //up + animate(pixel_y = bottom, time = half_period, easing = SINE_EASING, loop = -1) //down + animate(pixel_y = old_y, time = quarter_period, easing = SINE_EASING | EASE_IN, loop = -1) //back + +/obj/item/device/uav/proc/stop_hover() + if(ion_trail.on) + ion_trail.stop() + animate(src, pixel_y = old_y, time = 5, easing = SINE_EASING | EASE_IN) //halt animation + +/obj/item/device/uav/hear_talk(var/mob/M, list/message_pieces, verb) + var/name_used = M.GetVoice() + for(var/wr_master in masters) + var/weakref/wr = wr_master + var/mob/master = wr.resolve() + var/message = master.combine_message(message_pieces, verb, M) + var/rendered = "UAV received: [name_used] [message]" + master.show_message(rendered, 2) + +/obj/item/device/uav/see_emote(var/mob/living/M, text) + for(var/wr_master in masters) + var/weakref/wr = wr_master + var/mob/master = wr.resolve() + var/rendered = "UAV received, [text]" + master.show_message(rendered, 2) + +/obj/item/device/uav/show_message(msg, type, alt, alt_type) + for(var/wr_master in masters) + var/weakref/wr = wr_master + var/mob/master = wr.resolve() + var/rendered = "UAV received, [msg]" + master.show_message(rendered, type) + +/obj/item/device/uav/take_damage(var/damage) + health -= damage + CheckHealth() + return + +/obj/item/device/uav/attack_generic(var/mob/user, var/damage, var/attack_verb) + visible_message("[user] [attack_verb] the [src]!") + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + user.do_attack_animation(src) + health -= damage + CheckHealth() + return + +/obj/item/device/uav/ex_act(severity) + switch(severity) + if(1.0) + die() + if(2.0) + health -= 25 + CheckHealth() + +/obj/item/device/uav/proc/CheckHealth() + if(health <= 0) + die() + +/obj/item/device/uav/proc/die() + visible_message("[src] shorts out and explodes!") + power_down() + var/turf/T = get_turf(src) + qdel(src) + explosion(T, -1, 0, 1, 2) //Not very large + +#undef UAV_OFF +#undef UAV_ON +#undef UAV_PACKED \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 60ea0103b34..bdd81f12a09 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -68,6 +68,11 @@ if(!S || S.robotic < ORGAN_ROBOT || S.open == 3) return ..() + //VOREStation Add - No welding nanoform limbs + if(S.robotic > ORGAN_LIFELIKE) + return ..() + //VOREStation Add End + if(S.organ_tag == BP_HEAD) if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) to_chat(user, "You can't apply [src] through [H.head]!") diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index ff982da2570..e856dd280ed 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -122,18 +122,6 @@ if(!has_buckled_mobs()) qdel(src) -/obj/effect/energy_net/Move() - ..() - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/occupant = A - occupant.buckled = null - occupant.forceMove(src.loc) - occupant.buckled = src - if (occupant && (src.loc != occupant.loc)) - unbuckle_mob(occupant) - qdel(src) - /obj/effect/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/user) user.setClickCooldown(user.get_attack_speed()) visible_message("[user] begins to tear at \the [src]!") diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index a14a62eaa89..2a361f1d46f 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -142,6 +142,7 @@ return /mob/proc/unset_machine() + machine?.remove_visual(src) src.machine = null /mob/proc/set_machine(var/obj/O) diff --git a/maps/southern_cross/structures/closets/misc_vr.dm b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm similarity index 66% rename from maps/southern_cross/structures/closets/misc_vr.dm rename to code/game/objects/structures/crates_lockers/closets/misc_vr.dm index 11ebc922d41..97e27b3aeec 100644 --- a/maps/southern_cross/structures/closets/misc_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm @@ -1,4 +1,42 @@ +//Gun Cabinets + +/obj/structure/closet/secure_closet/guncabinet/sidearm + name = "emergency weapon cabinet" + req_one_access = list(access_armory,access_captain) + + starts_with = list( + /obj/item/weapon/gun/energy/gun = 4) + + +/obj/structure/closet/secure_closet/guncabinet/rifle + name = "rifle cabinet" + req_one_access = list(access_explorer,access_brig) + + starts_with = list( + /obj/item/ammo_magazine/clip/c762/hunter = 9, + /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 2) + +/obj/structure/closet/secure_closet/guncabinet/rifle/Initialize() + if(prob(85)) + starts_with += /obj/item/weapon/gun/projectile/shotgun/pump/rifle + else + starts_with += /obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever + return ..() + +/obj/structure/closet/secure_closet/guncabinet/phase + name = "explorer weapon cabinet" + req_one_access = list(access_explorer,access_brig) + + starts_with = list( + /obj/item/weapon/gun/energy/phasegun = 2, + /obj/item/weapon/gun/energy/phasegun/pistol, + /obj/item/weapon/cell/device/weapon = 2, + /obj/item/clothing/accessory/permit/gun/planetside) + +//Explorer Lockers + /obj/structure/closet/secure_closet/explorer + name = "explorer locker" icon = 'icons/obj/closet_vr.dmi' icon_state = "secureexp1" icon_closed = "secureexp" @@ -6,6 +44,7 @@ icon_opened = "secureexpopen" icon_broken = "secureexpbroken" icon_off = "secureexpoff" + req_access = list(access_explorer) starts_with = list( /obj/item/clothing/under/explorer, @@ -14,6 +53,7 @@ /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/clothing/gloves/black, /obj/item/device/radio/headset/explorer, + /obj/item/device/radio/headset/explorer/alt, /obj/item/device/flashlight, /obj/item/device/gps/explorer, /obj/item/weapon/storage/box/flare, @@ -28,8 +68,25 @@ /obj/item/weapon/reagent_containers/food/snacks/liquidprotein, /obj/item/device/cataloguer) +/obj/structure/closet/secure_closet/explorer/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack + else + starts_with += /obj/item/weapon/storage/backpack/satchel/norm + return ..() + +//SAR Lockers + /obj/structure/closet/secure_closet/sar name = "field medic locker" + desc = "Supplies for a wilderness first responder." + icon_state = "medical1" + icon_closed = "medical" + icon_locked = "medical1" + icon_opened = "medicalopen" + icon_broken = "medicalbroken" + icon_off = "medicaloff" + req_access = list(access_medical_equip) starts_with = list( /obj/item/weapon/storage/backpack/dufflebag/emt, @@ -45,6 +102,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar, /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/device/radio/headset/sar, + /obj/item/device/radio/headset/sar/alt, /obj/item/weapon/cartridge/medical, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen/engi, @@ -64,7 +122,12 @@ /obj/item/bodybag/cryobag, /obj/item/device/cataloguer/compact) +//Pilot Locker + /obj/structure/closet/secure_closet/pilot + name = "pilot locker" + req_access = list(access_pilot) + starts_with = list( /obj/item/weapon/storage/backpack/parachute, /obj/item/weapon/material/knife/tacknife/survival, @@ -76,6 +139,7 @@ /obj/item/clothing/mask/gas/half, /obj/item/clothing/shoes/black, /obj/item/clothing/gloves/fingerless, + /obj/item/device/radio/headset/pilot, /obj/item/device/radio/headset/pilot/alt, /obj/item/device/flashlight, /obj/item/weapon/reagent_containers/food/snacks/liquidfood, @@ -87,6 +151,13 @@ /obj/item/device/gps/explorer, /obj/item/device/cataloguer/compact) +/obj/structure/closet/secure_closet/pilot/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack + else + starts_with += /obj/item/weapon/storage/backpack/satchel/norm + return ..() + /obj/structure/closet/secure_closet/pathfinder name = "pathfinder locker" icon = 'icons/obj/closet_vr.dmi' @@ -104,7 +175,8 @@ /obj/item/clothing/mask/gas/explorer, /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/clothing/gloves/black, - /obj/item/device/radio/headset/explorer, + /obj/item/device/radio/headset/pathfinder, + /obj/item/device/radio/headset/pathfinder/alt, /obj/item/device/flashlight, /obj/item/device/gps/explorer, /obj/item/weapon/storage/box/flare, @@ -128,3 +200,17 @@ else starts_with += /obj/item/weapon/storage/backpack/satchel/norm return ..() + +//Exotic Seeds Crate + +/obj/structure/closet/crate/hydroponics/exotic + name = "exotic seeds crate" + desc = "All you need to destroy that pesky planet." + + starts_with = list( + /obj/item/seeds/random = 6, + /obj/item/seeds/replicapod = 2, + /obj/item/seeds/ambrosiavulgarisseed = 2, + /obj/item/seeds/kudzuseed, + /obj/item/seeds/libertymycelium, + /obj/item/seeds/reishimycelium) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 8429b5abddb..9ab55aa86cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -47,8 +47,8 @@ /obj/item/clothing/under/rank/cargo/jeans, /obj/item/clothing/under/rank/cargo/jeans/female, /obj/item/clothing/shoes/brown, - /obj/item/device/radio/headset/headset_cargo, - /obj/item/device/radio/headset/headset_cargo/alt, + /obj/item/device/radio/headset/headset_qm, //VOREStation Edit, + /obj/item/device/radio/headset/headset_qm/alt, //VOREStation Edit, /obj/item/clothing/gloves/black, /obj/item/clothing/gloves/fingerless, /obj/item/clothing/suit/fire/firefighter, diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index f8ea5d2f77c..e0a94e285b3 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -145,7 +145,7 @@ bound_height = width * world.icon_size update_state() - Move() + Moved(atom/old_loc, direction, forced = FALSE) . = ..() if(dir in list(EAST, WEST)) bound_width = width * world.icon_size diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 93c48fe8a90..cb8fcfe02be 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -230,15 +230,6 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) to_chat(user, "You'll need the keys in one of your hands to drive this [callme].") -/obj/structure/bed/chair/janicart/Move() - ..() - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A - if(L.buckled == src) - L.loc = loc - - /obj/structure/bed/chair/janicart/post_buckle_mob(mob/living/M) update_mob() return ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 1a9d4e7315f..b053e33805f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -286,15 +286,10 @@ held = null -/obj/structure/bed/roller/Move() - ..() +/obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + playsound(src, 'sound/effects/roll.ogg', 100, 1) - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A - - if(L.buckled == src) - L.loc = src.loc /obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob) if(M.buckled == src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 5be1d6d1984..59ea0014d30 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -140,22 +140,24 @@ return ..() -/obj/structure/bed/chair/office/Move() - ..() +/obj/structure/bed/chair/office/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + playsound(src, 'sound/effects/roll.ogg', 100, 1) - if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/occupant = A - occupant.buckled = null - occupant.Move(src.loc) - occupant.buckled = src - if (occupant && (src.loc != occupant.loc)) - if (propelled) - for (var/mob/O in src.loc) - if (O != occupant) - Bump(O) - else - unbuckle_mob() + +/obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction) + for(var/A in buckled_mobs) + var/mob/living/occupant = A + occupant.buckled = null + occupant.Move(src.loc) + occupant.buckled = src + if (occupant && (src.loc != occupant.loc)) + if (propelled) + for (var/mob/O in src.loc) + if (O != occupant) + Bump(O) + else + unbuckle_mob() /obj/structure/bed/chair/office/Bump(atom/A) ..() diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 8a3902fa1d1..639020ba5df 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -91,8 +91,9 @@ create_track() driving = 0 -/obj/structure/bed/chair/wheelchair/Move() - ..() +/obj/structure/bed/chair/wheelchair/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + cut_overlays() playsound(src, 'sound/effects/roll.ogg', 75, 1) if(has_buckled_mobs()) diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 55d8b37d0ff..1e9c091ccb9 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -8,11 +8,11 @@ w_class = ITEMSIZE_HUGE var/obj/item/target/pinned_target // the current pinned target - Move() - ..() + Moved(atom/old_loc, direction, forced = FALSE) + . = ..() // Move the pinned target along with the stake if(pinned_target in view(3, src)) - pinned_target.loc = loc + pinned_target.forceMove(loc) else // Sanity check: if the pinned target can't be found in immediate view pinned_target = null diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d8542d0c96f..f3b6d1e08ed 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -413,7 +413,7 @@ /obj/structure/window/Move() var/ini_dir = dir update_nearby_tiles(need_rebuild=1) - ..() + . = ..() set_dir(ini_dir) update_nearby_tiles(need_rebuild=1) diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index b5272ea9963..dfd7bd87b0a 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -1,6 +1,14 @@ // This is a datum-based artificial intelligence for simple mobs (and possibly others) to use. // The neat thing with having this here instead of on the mob is that it is independant of Life(), and that different mobs // can use a more or less complex AI by giving it a different datum. +#define AI_NO_PROCESS 0 +#define AI_PROCESSING (1<<0) +#define AI_FASTPROCESSING (1<<1) + +#define START_AIPROCESSING(Datum) if (!(Datum.process_flags & AI_PROCESSING)) {Datum.process_flags |= AI_PROCESSING;SSai.processing += Datum} +#define STOP_AIPROCESSING(Datum) Datum.process_flags &= ~AI_PROCESSING;SSai.processing -= Datum +#define START_AIFASTPROCESSING(Datum) if (!(Datum.process_flags & AI_FASTPROCESSING)) {Datum.process_flags |= AI_FASTPROCESSING;SSaifast.processing += Datum} +#define STOP_AIFASTPROCESSING(Datum) Datum.process_flags &= ~AI_FASTPROCESSING;SSaifast.processing -= Datum /mob/living var/datum/ai_holder/ai_holder = null @@ -27,7 +35,20 @@ var/busy = FALSE // If true, the ticker will skip processing this mob until this is false. Good for if you need the // mob to stay still (e.g. delayed attacking). If you need the mob to be inactive for an extended period of time, // consider sleeping the AI instead. - + var/process_flags = 0 // Where we're processing, see flag defines. + var/list/static/fastprocess_stances = list( + STANCE_ALERT, + STANCE_APPROACH, + STANCE_FIGHT, + STANCE_BLINDFIGHT, + STANCE_REPOSITION, + STANCE_MOVE, + STANCE_FOLLOW, + STANCE_FLEE + ) + var/list/static/noprocess_stances = list( + STANCE_SLEEP + ) /datum/ai_holder/hostile @@ -40,16 +61,34 @@ /datum/ai_holder/New(var/new_holder) ASSERT(new_holder) holder = new_holder - SSai.processing += src home_turf = get_turf(holder) + manage_processing(AI_PROCESSING) + GLOB.stat_set_event.register(holder, src, .proc/holder_stat_change) ..() /datum/ai_holder/Destroy() holder = null - SSai.processing -= src // We might've already been asleep and removed, but byond won't care if we do this again and it saves a conditional. + manage_processing(AI_NO_PROCESS) home_turf = null return ..() +/datum/ai_holder/proc/manage_processing(var/desired) + if(desired & AI_PROCESSING) + START_AIPROCESSING(src) + else + STOP_AIPROCESSING(src) + + if(desired & AI_FASTPROCESSING) + START_AIFASTPROCESSING(src) + else + STOP_AIFASTPROCESSING(src) + +/datum/ai_holder/proc/holder_stat_change(var/mob, old_stat, new_stat) + if(old_stat >= DEAD && new_stat <= DEAD) //Revived + manage_processing(AI_PROCESSING) + else if(old_stat <= DEAD && new_stat >= DEAD) //Killed + manage_processing(AI_NO_PROCESS) + /datum/ai_holder/proc/update_stance_hud() var/image/stanceimage = holder.grab_hud(LIFE_HUD) stanceimage.icon_state = "ais_[stance]" @@ -78,7 +117,6 @@ return forget_everything() // If we ever wake up, its really unlikely that our current memory will be of use. set_stance(STANCE_SLEEP) - SSai.processing -= src update_paused_hud() // Reverses the above proc. @@ -89,7 +127,6 @@ if(!should_wake()) return set_stance(STANCE_IDLE) - SSai.processing += src update_paused_hud() /datum/ai_holder/proc/should_wake() @@ -122,12 +159,23 @@ // For setting the stance WITHOUT processing it /datum/ai_holder/proc/set_stance(var/new_stance) + if(stance == new_stance) + ai_log("set_stance() : Ignoring change stance to same stance request.", AI_LOG_INFO) + return + ai_log("set_stance() : Setting stance from [stance] to [new_stance].", AI_LOG_INFO) stance = new_stance if(stance_coloring) // For debugging or really weird mobs. stance_color() update_stance_hud() + if(new_stance in fastprocess_stances) //Becoming fast + manage_processing(AI_PROCESSING|AI_FASTPROCESSING) + else if(new_stance in noprocess_stances) + manage_processing(AI_NO_PROCESS) //Becoming off + else + manage_processing(AI_PROCESSING) //Becoming slow + // This is called every half a second. /datum/ai_holder/proc/handle_stance_tactical() ai_log("========= Fast Process Beginning ==========", AI_LOG_TRACE) // This is to make it easier visually to disinguish between 'blocks' of what a tick did. @@ -167,19 +215,6 @@ return switch(stance) - if(STANCE_IDLE) - if(should_go_home()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE) - go_home() - - else if(should_follow_leader()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE) - set_stance(STANCE_FOLLOW) - - else if(should_wander()) - ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE) - handle_wander_movement() - if(STANCE_ALERT) ai_log("handle_stance_tactical() : STANCE_ALERT, going to threaten_target().", AI_LOG_TRACE) threaten_target() @@ -241,9 +276,23 @@ if(STANCE_IDLE) if(speak_chance) // In the long loop since otherwise it wont shut up. handle_idle_speaking() + if(hostile) ai_log("handle_stance_strategical() : STANCE_IDLE, going to find_target().", AI_LOG_TRACE) find_target() + + if(should_go_home()) + ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE) + go_home() + + else if(should_follow_leader()) + ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE) + set_stance(STANCE_FOLLOW) + + else if(should_wander()) + ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE) + handle_wander_movement() + if(STANCE_APPROACH) if(target) ai_log("handle_stance_strategical() : STANCE_APPROACH, going to calculate_path([target]).", AI_LOG_TRACE) @@ -291,4 +340,7 @@ // 'Taunts' the AI into attacking the taunter. /mob/living/proc/taunt(atom/movable/taunter, force_target_switch = FALSE) if(ai_holder) - ai_holder.receive_taunt(taunter, force_target_switch) \ No newline at end of file + ai_holder.receive_taunt(taunter, force_target_switch) + +#undef AI_PROCESSING +#undef AI_FASTPROCESSING \ No newline at end of file diff --git a/code/modules/ai/ai_holder_disabled.dm b/code/modules/ai/ai_holder_disabled.dm index dc3717fe181..d68e2ecf5d3 100644 --- a/code/modules/ai/ai_holder_disabled.dm +++ b/code/modules/ai/ai_holder_disabled.dm @@ -6,7 +6,7 @@ // If our holder is able to do anything. /datum/ai_holder/proc/can_act() if(!holder) // Holder missing. - SSai.processing -= src + manage_processing(AI_NO_PROCESS) return FALSE if(holder.stat) // Dead or unconscious. ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE) diff --git a/code/modules/ai/ai_holder_follow.dm b/code/modules/ai/ai_holder_follow.dm index 1e7bb0875dc..45d0d1e7a01 100644 --- a/code/modules/ai/ai_holder_follow.dm +++ b/code/modules/ai/ai_holder_follow.dm @@ -57,7 +57,7 @@ ai_log("lose_follow() : Exited.", AI_LOG_DEBUG) /datum/ai_holder/proc/should_follow_leader() - if(!leader) + if(!leader || target) return FALSE if(follow_until_time && world.time > follow_until_time) lose_follow() diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm index eb465dec5d2..3f9eb1b6857 100644 --- a/code/modules/ai/ai_holder_movement.dm +++ b/code/modules/ai/ai_holder_movement.dm @@ -43,6 +43,8 @@ ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE) /datum/ai_holder/proc/should_go_home() + if(stance != STANCE_IDLE) + return FALSE if(!returns_home || !home_turf) return FALSE if(get_dist(holder, home_turf) > max_home_distance) @@ -139,7 +141,7 @@ return MOVEMENT_ON_COOLDOWN /datum/ai_holder/proc/should_wander() - return wander && !leader + return (stance == STANCE_IDLE) && wander && !leader // Wanders randomly in cardinal directions. /datum/ai_holder/proc/handle_wander_movement() diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index f33906c6622..cacfcf56de3 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -25,8 +25,8 @@ // Step 1, find out what we can see. /datum/ai_holder/proc/list_targets() - . = hearers(vision_range, holder) - holder // Remove ourselves to prevent suicidal decisions. ~ SRC is the ai_holder. - . -= dview_mob // Not the dview mob either, nerd. + . = ohearers(vision_range, holder) + . -= dview_mob // Not the dview mob! var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/blob)) @@ -43,13 +43,8 @@ if(!has_targets_list) possible_targets = list_targets() for(var/possible_target in possible_targets) - var/atom/A = possible_target - if(found(A)) // In case people want to override this. - . = list(A) - break - if(can_attack(A)) // Can we attack it? - . += A - continue + if(can_attack(possible_target)) // Can we attack it? + . += possible_target var/new_target = pick_target(.) give_target(new_target) @@ -57,7 +52,7 @@ // Step 3, pick among the possible, attackable targets. /datum/ai_holder/proc/pick_target(list/targets) - if(target != null) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets. + if(target) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets. targets = target_filter_distance(targets) else targets = target_filter_closest(targets) @@ -88,32 +83,31 @@ // Filters return one or more 'preferred' targets. -// This one is for closest targets. +// This one is for targets closer than our current one. /datum/ai_holder/proc/target_filter_distance(list/targets) + var/target_dist = get_dist(holder, target) + var/list/better_targets = list() for(var/possible_target in targets) var/atom/A = possible_target - var/target_dist = get_dist(holder, target) var/possible_target_distance = get_dist(holder, A) - if(target_dist < possible_target_distance) - targets -= A - return targets + if(possible_target_distance < target_dist) + better_targets += A + return better_targets +// Returns the closest target and anything tied with it for distance /datum/ai_holder/proc/target_filter_closest(list/targets) - var/lowest_distance = -1 - var/list/sorted_targets = list() + var/lowest_distance = 1e6 //fakely far + var/list/closest_targets = list() for(var/possible_target in targets) var/atom/A = possible_target var/current_distance = get_dist(holder, A) - if(lowest_distance == -1) + if(current_distance < lowest_distance) + closest_targets.Cut() lowest_distance = current_distance - sorted_targets += A - else if(current_distance < lowest_distance) - targets.Cut() - lowest_distance = current_distance - sorted_targets += A + closest_targets += A else if(current_distance == lowest_distance) - sorted_targets += A - return sorted_targets + closest_targets += A + return closest_targets /datum/ai_holder/proc/can_attack(atom/movable/the_target, var/vision_required = TRUE) if(!can_see_target(the_target) && vision_required) @@ -163,11 +157,6 @@ return TRUE // return FALSE -// Override this for special targeting criteria. -// If it returns true, the mob will always select it as the target. -/datum/ai_holder/proc/found(atom/movable/the_target) - return FALSE - // 'Soft' loss of target. They may still exist, we still have some info about them maybe. /datum/ai_holder/proc/lose_target() ai_log("lose_target() : Entering.", AI_LOG_TRACE) diff --git a/code/modules/ai/ai_holder_targeting_vr.dm b/code/modules/ai/ai_holder_targeting_vr.dm new file mode 100644 index 00000000000..4c7ef854038 --- /dev/null +++ b/code/modules/ai/ai_holder_targeting_vr.dm @@ -0,0 +1,5 @@ +/datum/ai_holder/can_see_target(atom/movable/the_target, view_range = vision_range) + if(the_target && isbelly(the_target.loc)) + return FALSE + + return ..() diff --git a/code/modules/alarm/atmosphere_alarm.dm b/code/modules/alarm/atmosphere_alarm.dm index f19044a6b75..be97493afd4 100644 --- a/code/modules/alarm/atmosphere_alarm.dm +++ b/code/modules/alarm/atmosphere_alarm.dm @@ -5,7 +5,7 @@ var/list/major_alarms = new() var/list/map_levels = using_map.get_map_levels(z) for(var/datum/alarm/A in visible_alarms()) - if(z && (z && !(A.origin?.z in map_levels))) + if(z && !(A.origin?.z in map_levels)) continue if(A.max_severity() > 1) major_alarms.Add(A) @@ -15,7 +15,7 @@ var/list/minor_alarms = new() var/list/map_levels = using_map.get_map_levels(z) for(var/datum/alarm/A in visible_alarms()) - if(z && (z && !(A.origin?.z in map_levels))) + if(z && !(A.origin?.z in map_levels)) continue if(A.max_severity() == 1) minor_alarms.Add(A) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 3806bd60ba7..75b335154e1 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -84,8 +84,8 @@ if(a_right) a_right.on_found(finder) -/obj/item/device/assembly_holder/Move() - ..() +/obj/item/device/assembly_holder/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() if(a_left && a_right) a_left.holder_movement() a_right.holder_movement() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 2f10a91fdab..b34b2c0c118 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -79,8 +79,11 @@ /obj/item/device/assembly/infra/Move() var/t = dir - ..() + . = ..() set_dir(t) + +/obj/item/device/assembly/infra/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() QDEL_LIST_NULL(i_beams) /obj/item/device/assembly/infra/holder_movement() diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index a93bda48099..c439163fc22 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -88,8 +88,8 @@ var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc grenade.primed(scanning) -/obj/item/device/assembly/prox_sensor/Move() - ..() +/obj/item/device/assembly/prox_sensor/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() sense() /obj/item/device/assembly/prox_sensor/interact(mob/user as mob)//TODO: Change this to the wires thingy diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index 1e8b1cf17ca..efb2379fb0c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -1,5 +1,15 @@ // Collars +/datum/gear/choker //A colorable choker + display_name = "choker (colorable, tagless)" + path = /obj/item/clothing/accessory/choker + slot = slot_tie + sort_category = "Accessories" + +/datum/gear/choker/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) + /datum/gear/collar display_name = "collar, silver" path = /obj/item/clothing/accessory/collar/silver diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index 27f553827ca..eecea216a84 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -1,6 +1,7 @@ // Note for newly added fluff items: Ckeys should not contain any spaces, underscores or capitalizations, // or else the item will not be usable. // Example: Someone whose username is "Master Pred_Man" should be written as "masterpredman" instead +// Note: Do not use characters such as # in the display_name. It will cause the item to be unable to be selected. /datum/gear/fluff path = /obj/item @@ -804,11 +805,18 @@ /datum/gear/fluff/nthasd_modkit //Converts a Security suit's sprite path = /obj/item/device/modkit_conversion/hasd - display_name = "NT-HASD #556's Modkit" + display_name = "NT-HASD 556's Modkit" ckeywhitelist = list("silencedmp5a5") character_name = list("NT-HASD #556") allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective") +/datum/gear/fluff/serdykov_modkit //Also converts a Security suit's sprite + path = /obj/item/device/modkit_conversion/fluff/serdykit + display_name = "Serdykov Antoz's Modkit" + ckeywhitelist = list("silencedmp5a5") + character_name = list("Serdykov Antoz") + allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective") + /datum/gear/fluff/tasy_clownuniform path = /obj/item/clothing/under/sexyclown display_name = "Tasy's Clown Uniform" diff --git a/code/modules/clothing/under/accessories/accessory_vr.dm b/code/modules/clothing/under/accessories/accessory_vr.dm index 6926e68f8a7..2d8086b2b33 100644 --- a/code/modules/clothing/under/accessories/accessory_vr.dm +++ b/code/modules/clothing/under/accessories/accessory_vr.dm @@ -2,6 +2,29 @@ // Collars and such like that // +/obj/item/clothing/accessory/choker //A colorable, tagless choker + name = "plain choker" + slot_flags = SLOT_TIE | SLOT_OCLOTHING + desc = "A simple, plain choker. Or maybe it's a collar? Use in-hand to customize it." + icon = 'icons/obj/clothing/ties_vr.dmi' + icon_override = 'icons/mob/ties_vr.dmi' + icon_state = "choker_cst" + item_state = "choker_cst" + overlay_state = "choker_cst" + var/customized = 0 + +/obj/item/clothing/accessory/choker/attack_self(mob/user as mob) + if(!customized) + var/design = input(user,"Descriptor?","Pick descriptor","") in list("plain","simple","ornate","elegant","opulent") + var/material = input(user,"Material?","Pick material","") in list("leather","velvet","lace","fabric","latex","plastic","metal","chain","silver","gold","platinum","steel","bead","ruby","sapphire","emerald","diamond") + var/type = input(user,"Type?","Pick type","") in list("choker","collar","necklace") + name = "[design] [material] [type]" + desc = "A [type], made of [material]. It's rather [design]." + customized = 1 + to_chat(usr,"[src] has now been customized.") + else + to_chat(usr,"[src] has already been customized!") + /obj/item/clothing/accessory/collar slot_flags = SLOT_TIE | SLOT_OCLOTHING icon = 'icons/obj/clothing/ties_vr.dmi' diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm index d215ab3dac0..61b50dca5fa 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/code/modules/hydroponics/beekeeping/beehive.dm @@ -158,7 +158,7 @@ /obj/machinery/honey_extractor name = "honey extractor" desc = "A machine used to turn honeycombs on the frame into honey and wax." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "centrifuge" var/processing = 0 diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index affddf1168e..442fb7da2e6 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -33,7 +33,7 @@ new /obj/item/weapon/disk/botany(src) /obj/machinery/botany - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "hydrotray3" density = 1 anchored = 1 diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index d5bab164827..9db72c75d81 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -1,6 +1,6 @@ /obj/machinery/portable_atmospherics/hydroponics name = "hydroponics tray" - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "hydrotray3" density = 1 anchored = 1 diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 8700a65c6ec..39894b13947 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -65,20 +65,19 @@ T.reconsider_lights() return ..() -/atom/movable/Move() - var/turf/old_loc = loc +/atom/movable/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(loc != old_loc) - for(var/datum/light_source/L in light_sources) - L.source_atom.update_light() + for(var/datum/light_source/L in light_sources) + L.source_atom.update_light() - var/turf/new_loc = loc - if(istype(old_loc) && opacity) - old_loc.reconsider_lights() + var/turf/new_turf = loc + var/turf/old_turf = old_loc + if(istype(old_turf) && opacity) + old_turf.reconsider_lights() - if(istype(new_loc) && opacity) - new_loc.reconsider_lights() + if(istype(new_turf) && opacity) + new_turf.reconsider_lights() /atom/proc/set_opacity(new_opacity) if(new_opacity == opacity) diff --git a/code/modules/media/media_machinery.dm b/code/modules/media/media_machinery.dm index 02d4d9698d9..728cffd234e 100644 --- a/code/modules/media/media_machinery.dm +++ b/code/modules/media/media_machinery.dm @@ -54,13 +54,14 @@ master_area = null /obj/machinery/media/Move() - ..() + disconnect_media_source() + . = ..() if(anchored) update_music() /obj/machinery/media/forceMove(var/atom/destination) disconnect_media_source() - ..() + . = ..() if(anchored) update_music() diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm index 916b1c57f3e..7003c2b832c 100644 --- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm @@ -10,37 +10,38 @@ icon_vend = "exploration-vend" //VOREStation Add //VOREStation Edit Start - Heavily modified list prize_list = list( - new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1), + new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1), new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10), new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30), new /datum/data/mining_equipment("GPS Device", /obj/item/device/gps/explorer, 10), - new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10), + new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 10), new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 10), new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15), new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 20), new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90), new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75), new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30), - new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 300), - new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 125), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon",/obj/item/fulton_core, 300), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack",/obj/item/extraction_pack, 125), new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 20), - new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 50), + new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 50), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50), new /datum/data/mining_equipment("Trauma Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/trauma, 25), new /datum/data/mining_equipment("Burn Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/burn, 25), new /datum/data/mining_equipment("Oxy Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/oxy, 25), new /datum/data/mining_equipment("Detox Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/detox, 25), - new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 50), - new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 50), - new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50), + new /datum/data/mining_equipment("Injector (L) - Glucose", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose,50), + new /datum/data/mining_equipment("Injector (L) - Panacea", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity,50), + new /datum/data/mining_equipment("Injector (L) - Trauma", /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute,50), new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50), new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100), new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 100), new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120), + new /datum/data/mining_equipment("UAV - Recon Skimmer", /obj/item/device/uav, 400), new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 100), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 250), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310), - new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 300), + new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/gun/magnetic/matfed, 300), new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 40), new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 50), new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 10), @@ -50,7 +51,7 @@ new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50), new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 100), new /datum/data/mining_equipment("Durasteel Fishing Rod", /obj/item/weapon/material/fishing_rod/modern/strong, 750), - new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000) + new /datum/data/mining_equipment("Bar Shelter Capsule", /obj/item/device/survivalcapsule/luxurybar, 1000) ) //VOREStation Edit End diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index fb2af265273..e20d3740c9e 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -377,10 +377,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp following = null return ..() -/mob/Move() +/mob/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - update_following() + update_following() /mob/Life() // to catch teleports etc which directly set loc diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index 5c21c6784da..c0b4adf0f61 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -6,30 +6,28 @@ // This might be laggy, comment it out if there are problems. /mob/living/silicon/var/updating = 0 -/mob/living/silicon/robot/Move() - var/oldLoc = src.loc +/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(provides_camera_vision()) - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(oldLoc != src.loc) - cameranet.updatePortableCamera(src.camera) - updating = 0 + if(!provides_camera_vision()) + return + if(!updating) + updating = 1 + spawn(BORG_CAMERA_BUFFER) + if(old_loc != src.loc) + cameranet.updatePortableCamera(src.camera) + updating = 0 -/mob/living/silicon/AI/Move() - var/oldLoc = src.loc +/mob/living/silicon/ai/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(provides_camera_vision()) - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(oldLoc != src.loc) - cameranet.updateVisibility(oldLoc, 0) - cameranet.updateVisibility(loc, 0) - updating = 0 + if(!provides_camera_vision()) + return + if(!updating) + updating = 1 + spawn(BORG_CAMERA_BUFFER) + if(old_loc != src.loc) + cameranet.updateVisibility(old_loc, 0) + cameranet.updateVisibility(loc, 0) + updating = 0 #undef BORG_CAMERA_BUFFER diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index 1dd520e7f1d..8008916220c 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -4,18 +4,17 @@ /mob/living/var/updating_cult_vision = 0 -/mob/living/Move() - var/oldLoc = src.loc +/mob/living/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(cultnet.provides_vision(src)) - if(!updating_cult_vision) - updating_cult_vision = 1 - spawn(CULT_UPDATE_BUFFER) - if(oldLoc != src.loc) - cultnet.updateVisibility(oldLoc, 0) - cultnet.updateVisibility(loc, 0) - updating_cult_vision = 0 + if(!cultnet.provides_vision(src)) + return + if(!updating_cult_vision) + updating_cult_vision = 1 + spawn(CULT_UPDATE_BUFFER) + if(old_loc != src.loc) + cultnet.updateVisibility(old_loc, 0) + cultnet.updateVisibility(loc, 0) + updating_cult_vision = 0 #undef CULT_UPDATE_BUFFER diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index ff08be434a0..1a8c2df7358 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -81,7 +81,7 @@ return if(sleeping || stat == UNCONSCIOUS) - hear_sleep(message) + hear_sleep(multilingual_to_message(message_pieces)) return FALSE if(italics) @@ -168,7 +168,7 @@ var/message = combine_message(message_pieces, verb, speaker, always_stars = hard_to_hear, radio = TRUE) if(sleeping || stat == UNCONSCIOUS) //If unconscious or sleeping - hear_sleep(message) + hear_sleep(multilingual_to_message(message_pieces)) return var/speaker_name = handle_speaker_name(speaker, vname, hard_to_hear) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ddfca59db9f..894885fe5eb 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -33,20 +33,20 @@ touching.clear_reagents() ..() -/mob/living/carbon/Move(NewLoc, direct) +/* VOREStation Edit - Duplicated in our code +/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(src.nutrition && src.stat != 2) + if(src.nutrition && src.stat != 2) + src.nutrition -= DEFAULT_HUNGER_FACTOR/10 + if(src.m_intent == "run") src.nutrition -= DEFAULT_HUNGER_FACTOR/10 - if(src.m_intent == "run") - src.nutrition -= DEFAULT_HUNGER_FACTOR/10 - if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) - src.bodytemperature += 2 + if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) + src.bodytemperature += 2 + + // Moving around increases germ_level faster + if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) + germ_level++ - // Moving around increases germ_level faster - if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) - germ_level++ -/* VOREStation Removal - Needless duplicate feature /mob/living/carbon/relaymove(var/mob/living/user, direction) if((user in src.stomach_contents) && istype(user)) if(user.last_special <= world.time) diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 9e906f35cc1..d8b85cc12ee 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -51,7 +51,7 @@ message = "lets out a bark." m_type = 2 playsound(loc, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises) - if ("his") + if ("hiss") message = "lets out a hiss." m_type = 2 playsound(loc, 'sound/voice/hiss.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 642eaa2c4f8..7756829bf17 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -418,7 +418,7 @@ BITSET(hud_updateflag, WANTED_HUD) if(istype(usr,/mob/living/carbon/human)) var/mob/living/carbon/human/U = usr - U.handle_regular_hud_updates() + U.handle_hud_list() if(istype(usr,/mob/living/silicon/robot)) var/mob/living/silicon/robot/U = usr U.handle_regular_hud_updates() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4f5b7542691..50156c808fe 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -58,8 +58,8 @@ ..() - if(life_tick%30==15) - hud_updateflag = 1022 + if(life_tick % 30) + hud_updateflag = (1 << TOTAL_HUDS) - 1 voice = GetVoice() @@ -91,7 +91,7 @@ else if(stat == DEAD && !stasis) handle_defib_timer() - if(!handle_some_updates()) + if(skip_some_updates()) return //We go ahead and process them 5 times for HUD images and other stuff though. //Update our name based on whether our face is obscured/disfigured @@ -99,10 +99,10 @@ pulse = handle_pulse() -/mob/living/carbon/human/proc/handle_some_updates() +/mob/living/carbon/human/proc/skip_some_updates() if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle - return 0 - return 1 + return 1 + return 0 /mob/living/carbon/human/breathe() if(!inStasisNow()) @@ -951,7 +951,7 @@ //DO NOT CALL handle_statuses() from this proc, it's called from living/Life() as long as this returns a true value. /mob/living/carbon/human/handle_regular_status_updates() - if(!handle_some_updates()) + if(skip_some_updates()) return 0 if(status_flags & GODMODE) return 0 @@ -1292,8 +1292,11 @@ else bodytemp.icon_state = "temp0" - if(blinded) overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else clear_fullscreens() + if(blinded) + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + + else if(!machine) + clear_fullscreens() if(disabilities & NEARSIGHTED) //this looks meh but saves a lot of memory by not requiring to add var/prescription if(glasses) //to every /obj/item @@ -1395,11 +1398,12 @@ if(machine) var/viewflags = machine.check_eye(src) - machine.apply_visual(src) if(viewflags < 0) reset_view(null, 0) else if(viewflags && !looking_elsewhere) sight |= viewflags + else + machine.apply_visual(src) else if(eyeobj) if(eyeobj.owner != src) diff --git a/code/modules/mob/living/carbon/human/life_vr.dm b/code/modules/mob/living/carbon/human/life_vr.dm index 6c15daedf19..8120e504d91 100644 --- a/code/modules/mob/living/carbon/human/life_vr.dm +++ b/code/modules/mob/living/carbon/human/life_vr.dm @@ -58,22 +58,21 @@ nif.life() //Overriding carbon move proc that forces default hunger factor -/mob/living/carbon/Move(NewLoc, direct) +/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(src.nutrition && src.stat != 2) - if(ishuman(src)) - var/mob/living/carbon/human/M = src - if(M.stat != 2 && M.nutrition > 0) + if(src.nutrition && src.stat != 2) + if(ishuman(src)) + var/mob/living/carbon/human/M = src + if(M.stat != 2 && M.nutrition > 0) + M.nutrition -= M.species.hunger_factor/10 + if(M.m_intent == "run") M.nutrition -= M.species.hunger_factor/10 - if(M.m_intent == "run") - M.nutrition -= M.species.hunger_factor/10 - if(M.nutrition < 0) - M.nutrition = 0 - else + if(M.nutrition < 0) + M.nutrition = 0 + else + src.nutrition -= DEFAULT_HUNGER_FACTOR/10 + if(src.m_intent == "run") src.nutrition -= DEFAULT_HUNGER_FACTOR/10 - if(src.m_intent == "run") - src.nutrition -= DEFAULT_HUNGER_FACTOR/10 - // Moving around increases germ_level faster - if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) - germ_level++ \ No newline at end of file + // Moving around increases germ_level faster + if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) + germ_level++ \ No newline at end of file diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 1e66f654788..b1c90185730 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -173,13 +173,11 @@ if(ear_damage < 100) adjustEarDamage(-0.05,-1) -//this handles hud updates. Calls update_vision() and handle_hud_icons() /mob/living/handle_regular_hud_updates() if(!client) return 0 ..() - handle_vision() handle_darksight() handle_hud_icons() diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 858741988e1..b83b7bfee92 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -33,52 +33,52 @@ if (cell_use_power(A.active_usage)) return ..() -/mob/living/silicon/robot/Move(a, b, flag) - +/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(module) - if(module.type == /obj/item/weapon/robot_module/robot/janitor) - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - if (istype(tile, /turf/simulated)) - var/turf/simulated/S = tile - S.dirt = 0 - for(var/A in tile) - if(istype(A, /obj/effect)) - if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay)) - qdel(A) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - if(cleaned_human.head) - cleaned_human.head.clean_blood() - cleaned_human.update_inv_head(0) - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) - cleaned_human.clean_blood(1) - cleaned_human << "[src] cleans your face!" + if(!module) + return - if((module_state_1 && istype(module_state_1, /obj/item/weapon/storage/bag/ore)) || (module_state_2 && istype(module_state_2, /obj/item/weapon/storage/bag/ore)) || (module_state_3 && istype(module_state_3, /obj/item/weapon/storage/bag/ore))) //Borgs and drones can use their mining bags ~automagically~ if they're deployed in a slot. Only mining bags, as they're optimized for mass use. - var/obj/item/weapon/storage/bag/ore/B = null - if(istype(module_state_1, /obj/item/weapon/storage/bag/ore)) //First orebag has priority, if they for some reason have multiple. - B = module_state_1 - else if(istype(module_state_2, /obj/item/weapon/storage/bag/ore)) - B = module_state_2 - else if(istype(module_state_3, /obj/item/weapon/storage/bag/ore)) - B = module_state_3 - var/turf/tile = loc - if(isturf(tile)) - B.gather_all(tile, src, 1) //Shhh, unless the bag fills, don't spam the borg's chat with stuff that's going on every time they move! - return + //Borgs and drones can use their mining bags ~automagically~ if they're deployed in a slot. Only mining bags, as they're optimized for mass use. + if(istype(module_state_1, /obj/item/weapon/storage/bag/ore) || istype(module_state_2, /obj/item/weapon/storage/bag/ore) || istype(module_state_3, /obj/item/weapon/storage/bag/ore)) + var/obj/item/weapon/storage/bag/ore/B = null + if(istype(module_state_1, /obj/item/weapon/storage/bag/ore)) //First orebag has priority, if they for some reason have multiple. + B = module_state_1 + else if(istype(module_state_2, /obj/item/weapon/storage/bag/ore)) + B = module_state_2 + else if(istype(module_state_3, /obj/item/weapon/storage/bag/ore)) + B = module_state_3 + var/turf/tile = loc + if(isturf(tile)) + B.gather_all(tile, src, 1) //Shhh, unless the bag fills, don't spam the borg's chat with stuff that's going on every time they move! + + if(istype(module, /obj/item/weapon/robot_module/robot/janitor) && isturf(loc)) + var/turf/tile = loc + tile.clean_blood() + if (istype(tile, /turf/simulated)) + var/turf/simulated/S = tile + S.dirt = 0 + for(var/A in tile) + if(istype(A, /obj/effect)) + if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay)) + qdel(A) + else if(istype(A, /obj/item)) + var/obj/item/cleaned_item = A + cleaned_item.clean_blood() + else if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/cleaned_human = A + if(cleaned_human.lying) + if(cleaned_human.head) + cleaned_human.head.clean_blood() + cleaned_human.update_inv_head(0) + if(cleaned_human.wear_suit) + cleaned_human.wear_suit.clean_blood() + cleaned_human.update_inv_wear_suit(0) + else if(cleaned_human.w_uniform) + cleaned_human.w_uniform.clean_blood() + cleaned_human.update_inv_w_uniform(0) + if(cleaned_human.shoes) + cleaned_human.shoes.clean_blood() + cleaned_human.update_inv_shoes(0) + cleaned_human.clean_blood(1) + cleaned_human << "[src] cleans your face!" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index edf40411000..840026946f5 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -109,39 +109,35 @@ icon_state = "[module_sprites[icontype]]-wreck" add_overlay("wreck-overlay") -/mob/living/silicon/robot/Move(a, b, flag) +/mob/living/silicon/robot/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(scrubbing) - var/datum/matter_synth/water = water_res - if(water && water.energy >= 1) - var/turf/tile = loc - if(isturf(tile)) - water.use_charge(1) - tile.clean_blood() - if(istype(tile, /turf/simulated)) - var/turf/simulated/T = tile - T.dirt = 0 - for(var/A in tile) - if(istype(A,/obj/effect/rune) || istype(A,/obj/effect/decal/cleanable) || istype(A,/obj/effect/overlay)) - qdel(A) - else if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - if(cleaned_human.head) - cleaned_human.head.clean_blood() - cleaned_human.update_inv_head(0) - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) - cleaned_human.clean_blood(1) - to_chat(cleaned_human, "[src] cleans your face!") - return + if(scrubbing && isturf(loc) && water_res?.energy >= 1) + var/turf/tile = loc + water_res.use_charge(1) + tile.clean_blood() + if(istype(tile, /turf/simulated)) + var/turf/simulated/T = tile + T.dirt = 0 + for(var/A in tile) + if(istype(A,/obj/effect/rune) || istype(A,/obj/effect/decal/cleanable) || istype(A,/obj/effect/overlay)) + qdel(A) + else if(istype(A, /mob/living/carbon/human)) + var/mob/living/carbon/human/cleaned_human = A + if(cleaned_human.lying) + if(cleaned_human.head) + cleaned_human.head.clean_blood() + cleaned_human.update_inv_head(0) + if(cleaned_human.wear_suit) + cleaned_human.wear_suit.clean_blood() + cleaned_human.update_inv_wear_suit(0) + else if(cleaned_human.w_uniform) + cleaned_human.w_uniform.clean_blood() + cleaned_human.update_inv_w_uniform(0) + if(cleaned_human.shoes) + cleaned_human.shoes.clean_blood() + cleaned_human.update_inv_shoes(0) + cleaned_human.clean_blood(1) + to_chat(cleaned_human, "[src] cleans your face!") /mob/living/silicon/robot/proc/vr_sprite_check() if(wideborg == TRUE) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm index 7ff82a81603..1e7991d6a26 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm @@ -54,8 +54,8 @@ var/step = get_step_to(src, food, 0) Move(step) -/mob/living/simple_mob/animal/goat/Move() - ..() +/mob/living/simple_mob/animal/goat/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() if(!stat) for(var/obj/effect/plant/SV in loc) SV.die_off(1) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index b2e913bfb24..2019859f3fc 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -256,14 +256,10 @@ for(var/possible_target in possible_targets) var/atom/A = possible_target - if(found(A)) - . = list(A) - break if(istype(A, /mob/living) && !can_pick_mobs) continue if(can_attack(A)) // Can we attack it? . += A - continue for(var/obj/item/I in .) last_search = world.time diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm index 9fbb2926bb3..b2ff320b522 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm @@ -196,29 +196,15 @@ next = null ..() -/mob/living/simple_mob/animal/space/space_worm/Move() - var/attachementNextPosition = loc +/mob/living/simple_mob/animal/space/space_worm/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(previous) - if(previous.z != z) - previous.z_transitioning = TRUE - else - previous.z_transitioning = FALSE - previous.forceMove(attachementNextPosition) // None of this 'ripped in half by an airlock' business. - update_icon() - -/mob/living/simple_mob/animal/space/space_worm/forceMove() - var/attachementNextPosition = loc - . = ..() - if(.) - if(previous) - if(previous.z != z) - previous.z_transitioning = TRUE - else - previous.z_transitioning = FALSE - previous.forceMove(attachementNextPosition) // None of this 'ripped in half by an airlock' business. x 2 - update_icon() + if(previous) + if(previous.z != z) + previous.z_transitioning = TRUE + else + previous.z_transitioning = FALSE + previous.forceMove(old_loc) // None of this 'ripped in half by an airlock' business. + update_icon() /mob/living/simple_mob/animal/space/space_worm/head/Bump(atom/obstacle) if(open_maw && !stat && obstacle != previous) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 0e4a326cab6..d2fe2ecbd9c 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -110,8 +110,8 @@ /client/Move(n, direct) - if(!mob) - return // Moved here to avoid nullrefs below + //if(!mob) // Clients cannot have a null mob, as enforced by byond + // return // Moved here to avoid nullrefs below if(mob.control_object) Move_object(direct) @@ -166,8 +166,11 @@ if(!mob.canmove) return - //if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV)) - // if(!mob.Process_Spacemove(0)) return 0 + //Relaymove could handle it + if(mob.machine) + var/result = mob.machine.relaymove(mob, direct) + if(result) + return result if(!mob.lastarea) mob.lastarea = get_area(mob.loc) @@ -218,10 +221,6 @@ return return mob.buckled.relaymove(mob,direct) - if(istype(mob.machine, /obj/machinery)) - if(mob.machine.relaymove(mob,direct)) - return - if(mob.pulledby || mob.buckled) // Wheelchair driving! if(istype(mob.loc, /turf/space)) return // No wheelchair driving in space @@ -366,17 +365,7 @@ anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir) mob.forceMove(get_step(mob, direct)) mob.dir = direct - // Crossed is always a bit iffy - for(var/obj/S in mob.loc) - if(istype(S,/obj/effect/step_trigger) || istype(S,/obj/effect/beam)) - S.Crossed(mob) - var/area/A = get_area_master(mob) - if(A) - A.Entered(mob) - if(isturf(mob.loc)) - var/turf/T = mob.loc - T.Entered(mob) mob.Post_Incorpmove() return 1 @@ -468,16 +457,11 @@ /mob/proc/update_gravity() return -/* -// The real Move() proc is above, but touching that massive block just to put this in isn't worth it. -/mob/Move(var/newloc, var/direct) - . = ..(newloc, direct) - if(.) - post_move(newloc, direct) -*/ + // Called when a mob successfully moves. // Would've been an /atom/movable proc but it caused issues. /mob/Moved(atom/oldloc) + . = ..() for(var/obj/O in contents) O.on_loc_moved(oldloc) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 8677e8f8804..e98522ac003 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -377,7 +377,7 @@ var/turf/T = join_props["turf"] var/join_message = join_props["msg"] - var/announce_channel = join_props["channel"] || "Common" // VOREStation Add + var/announce_channel = join_props["channel"] || "Common" if(!T || !join_message) return 0 diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 2848468da8c..db15e841cad 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -255,6 +255,18 @@ else return ..() +/obj/item/modular_computer/apply_visual(var/mob/user) + if(active_program) + return active_program.apply_visual(user) + +/obj/item/modular_computer/remove_visual(var/mob/user) + if(active_program) + return active_program.remove_visual(user) + +/obj/item/modular_computer/relaymove(var/mob/user, direction) + if(active_program) + return active_program.relaymove(user, direction) + /obj/item/modular_computer/proc/set_autorun(program) if(!hard_drive) return diff --git a/code/modules/modular_computers/computers/subtypes/preset_console.dm b/code/modules/modular_computers/computers/subtypes/preset_console.dm index 5670c37522c..03e86c53380 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_console.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_console.dm @@ -15,6 +15,7 @@ hard_drive.store_file(new/datum/computer_file/program/atmos_control()) hard_drive.store_file(new/datum/computer_file/program/rcon_console()) hard_drive.store_file(new/datum/computer_file/program/camera_monitor()) + hard_drive.store_file(new/datum/computer_file/program/shutoff_monitor()) // Medical /obj/item/modular_computer/console/preset/medical/install_default_programs() diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 895b73b5fa5..ef7eece062f 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -203,8 +203,12 @@ /datum/computer_file/program/apply_visual(mob/M) if(NM) - NM.apply_visual(M) + return NM.apply_visual(M) /datum/computer_file/program/remove_visual(mob/M) if(NM) - NM.remove_visual(M) + return NM.remove_visual(M) + +/datum/computer_file/program/proc/relaymove(var/mob/M, direction) + if(NM) + return NM.relaymove(M, direction) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm new file mode 100644 index 00000000000..c46bb9c6676 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm @@ -0,0 +1,63 @@ +/datum/computer_file/program/shutoff_monitor + filename = "shutoffmonitor" + filedesc = "Shutoff Valve Monitoring" + nanomodule_path = /datum/nano_module/shutoff_monitor + program_icon_state = "atmos_control" + program_key_state = "atmos_key" + program_menu_icon = "wrench" + extended_desc = "This program allows for remote monitoring and control of emergency shutoff valves." + required_access = access_engine + requires_ntnet = 1 + network_destination = "shutoff valve control computer" + size = 5 + var/has_alert = 0 + +/datum/nano_module/shutoff_monitor + name = "Shutoff Valve Monitoring" + +/datum/nano_module/shutoff_monitor/Topic(ref, href_list) + if(..()) + return 1 + + if(href_list["toggle_enable"]) + var/obj/machinery/atmospherics/valve/shutoff/S = locate(href_list["toggle_enable"]) + if(!istype(S)) + return 0 + S.close_on_leaks = !S.close_on_leaks + return 1 + + if(href_list["toggle_open"]) + var/obj/machinery/atmospherics/valve/shutoff/S = locate(href_list["toggle_open"]) + if(!istype(S)) + return 0 + if(S.open) + S.close() + else + S.open() + return 1 + +/datum/nano_module/shutoff_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) + var/list/data = host.initial_data() + var/list/valves = list() + + for(var/obj/machinery/atmospherics/valve/shutoff/S in GLOB.shutoff_valves) + valves.Add(list(list( + "name" = S.name, + "enabled" = S.close_on_leaks, + "open" = S.open, + "x" = S.x, + "y" = S.y, + "z" = S.z, + "ref" = "\ref[S]" + ))) + + data["valves"] = valves + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "shutoff_monitor.tmpl", "Shutoff Valve Monitoring", 627, 700, state = state) + if(host.update_layout()) // This is necessary to ensure the status bar remains updated along with rest of the UI. + ui.auto_update_layout = 1 + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/uav.dm b/code/modules/modular_computers/file_system/programs/generic/uav.dm new file mode 100644 index 00000000000..8e4909ab048 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/generic/uav.dm @@ -0,0 +1,266 @@ +/obj/item/modular_computer + var/list/paired_uavs //Weakrefs, don't worry about it! + +/datum/computer_file/program/uav + filename = "rigger" + filedesc = "UAV Control" + nanomodule_path = /datum/nano_module/uav + program_icon_state = "comm_monitor" + program_key_state = "generic_key" + program_menu_icon = "link" + extended_desc = "This program allows remote control of certain drones, but only when paired with this device." + size = 12 + available_on_ntnet = 1 + //requires_ntnet = 1 + +/datum/nano_module/uav + name = "UAV Control program" + var/obj/item/device/uav/current_uav = null //The UAV we're watching + var/signal_strength = 0 //Our last signal strength report (cached for a few seconds) + var/signal_test_counter = 0 //How long until next signal strength check + var/list/viewers //Who's viewing a UAV through us + var/adhoc_range = 30 //How far we can operate on a UAV without NTnet + +/datum/nano_module/uav/Destroy() + if(LAZYLEN(viewers)) + for(var/weakref/W in viewers) + var/M = W.resolve() + if(M) + unlook(M) + . = ..() + +/datum/nano_module/uav/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = default_state) + var/list/data = host.initial_data() + + if(current_uav) + if(QDELETED(current_uav)) + set_current(null) + else if(signal_test_counter-- <= 0) + signal_strength = get_signal_to(current_uav) + if(!signal_strength) + set_current(null) + else // Don't reset counter until we find a UAV that's actually in range we can stay connected to + signal_test_counter = 20 + + data["current_uav"] = null + if(current_uav) + data["current_uav"] = list("status" = current_uav.get_status_string(), "power" = current_uav.state == 1 ? 1 : null) + data["signal_strength"] = signal_strength ? signal_strength >= 2 ? "High" : "Low" : "None" + data["in_use"] = LAZYLEN(viewers) + + var/list/paired_map = list() + var/obj/item/modular_computer/mc_host = nano_host() + if(istype(mc_host)) + for(var/puav in mc_host.paired_uavs) + var/weakref/wr = puav + var/obj/item/device/uav/U = wr.resolve() + paired_map[++paired_map.len] = list("name" = "[U ? U.nickname : "!!Missing!!"]", "uavref" = "\ref[U]") + + data["paired_uavs"] = paired_map + + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "mod_uav.tmpl", "UAV Control", 600, 500, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/datum/nano_module/uav/Topic(var/href, var/href_list = list(), var/datum/topic_state/state) + if((. = ..())) + return + state = state || DefaultTopicState() || global.default_state + if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) + CouldUseTopic(usr) + return OnTopic(usr, href_list, state) + CouldNotUseTopic(usr) + return TRUE + +/datum/nano_module/uav/proc/OnTopic(var/mob/user, var/list/href_list) + if(href_list["switch_uav"]) + var/obj/item/device/uav/U = locate(href_list["switch_uav"]) //This is a \ref to the UAV itself + if(!istype(U)) + to_chat(usr,"Something is blocking the connection to that UAV. In-person investigation is required.") + return TOPIC_NOACTION + + if(!get_signal_to(U)) + to_chat(usr,"The screen freezes for a moment, before returning to the UAV selection menu. It's not able to connect to that UAV.") + return TOPIC_NOACTION + + set_current(U) + return TOPIC_REFRESH + + if(href_list["del_uav"]) + var/refstring = href_list["del_uav"] //This is a \ref to the UAV itself + var/obj/item/modular_computer/mc_host = nano_host() + //This is so we can really scrape up any weakrefs that can't resolve + for(var/weakref/wr in mc_host.paired_uavs) + if(wr.ref == refstring) + if(current_uav?.weakref == wr) + set_current(null) + LAZYREMOVE(mc_host.paired_uavs, wr) + + else if(href_list["view_uav"]) + if(!current_uav) + return TOPIC_NOACTION + + if(current_uav.check_eye(user) < 0) + to_chat(usr,"The screen freezes for a moment, before returning to the UAV selection menu. It's not able to connect to that UAV.") + else + viewing_uav(user) ? unlook(user) : look(user) + return TOPIC_NOACTION + + else if(href_list["power_uav"]) + if(!current_uav) + return TOPIC_NOACTION + else if(current_uav.toggle_power()) + //Clean up viewers faster + if(LAZYLEN(viewers)) + for(var/weakref/W in viewers) + var/M = W.resolve() + if(M) + unlook(M) + return TOPIC_REFRESH + +/datum/nano_module/uav/proc/DefaultTopicState() + return global.default_state + +/datum/nano_module/uav/proc/CouldNotUseTopic(mob/user) + . = ..() + unlook(user) + +/datum/nano_module/uav/proc/CouldUseTopic(mob/user) + . = ..() + if(viewing_uav(user)) + look(user) + +/datum/nano_module/uav/proc/set_current(var/obj/item/device/uav/U) + if(current_uav == U) + return + + signal_strength = 0 + current_uav = U + + if(LAZYLEN(viewers)) + for(var/weakref/W in viewers) + var/M = W.resolve() + if(M) + if(current_uav) + to_chat(M, "You're disconnected from the UAV's camera!") + unlook(M) + else + look(M) + +//// +//// Finding signal strength between us and the UAV +//// +/datum/nano_module/uav/proc/get_signal_to(var/atom/movable/AM) + // Following roughly the ntnet signal levels + // 0 is none + // 1 is weak + // 2 is strong + var/obj/item/modular_computer/host = nano_host() //Better not add this to anything other than modular computers. + if(!istype(host)) + return + var/our_signal = host.get_ntnet_status() //1 low, 2 good, 3 wired, 0 none + var/their_z = get_z(AM) + + //If we have no NTnet connection don't bother getting theirs + if(!our_signal) + if(get_z(host) == their_z && (get_dist(host, AM) < adhoc_range)) + return 1 //We can connect (with weak signal) in same z without ntnet, within 30 turfs + else + return 0 + + var/list/zlevels_in_range = using_map.get_map_levels(their_z, FALSE) + var/list/zlevels_in_long_range = using_map.get_map_levels(their_z, TRUE) - zlevels_in_range + var/their_signal = 0 + for(var/relay in ntnet_global.relays) + var/obj/machinery/ntnet_relay/R = relay + if(!R.operable()) + continue + if(R.z == their_z) + their_signal = 2 + break + if(R.z in zlevels_in_range) + their_signal = 2 + break + if(R.z in zlevels_in_long_range) + their_signal = 1 + break + + if(!their_signal) //They have no NTnet at all + if(get_z(host) == their_z && (get_dist(host, AM) < adhoc_range)) + return 1 //We can connect (with weak signal) in same z without ntnet, within 30 turfs + else + return 0 + else + return max(our_signal, their_signal) + +//// +//// UAV viewer handling +//// +/datum/nano_module/uav/proc/viewing_uav(mob/user) + return (weakref(user) in viewers) + +/datum/nano_module/uav/proc/look(var/mob/user) + if(issilicon(user)) //Too complicated for me to want to mess with at the moment + to_chat(user, "Regulations prevent you from controlling several corporeal forms at the same time!") + return + + if(!current_uav) + return + + user.set_machine(nano_host()) + user.reset_view(current_uav) + current_uav.add_master(user) + LAZYDISTINCTADD(viewers, weakref(user)) + +/datum/nano_module/uav/proc/unlook(var/mob/user) + user.unset_machine() + user.reset_view() + if(current_uav) + current_uav.remove_master(user) + LAZYREMOVE(viewers, weakref(user)) + +/datum/nano_module/uav/check_eye(var/mob/user) + if(get_dist(user, nano_host()) > 1 || user.blinded || !current_uav) + unlook(user) + return -1 + + var/viewflag = current_uav.check_eye(user) + if (viewflag < 0) //camera doesn't work + unlook(user) + return -1 + + return viewflag + +//// +//// Relaying movements to the UAV +//// +/datum/nano_module/uav/relaymove(var/mob/user, direction) + if(current_uav) + return current_uav.relaymove(user, direction, signal_strength) + +//// +//// The effects when looking through a UAV +//// +/datum/nano_module/uav/apply_visual(var/mob/M) + if(!M.client) + return + if(weakref(M) in viewers) + M.overlay_fullscreen("fishbed",/obj/screen/fullscreen/fishbed) + M.overlay_fullscreen("scanlines",/obj/screen/fullscreen/scanline) + + if(signal_strength <= 1) + M.overlay_fullscreen("whitenoise",/obj/screen/fullscreen/noise) + else + M.clear_fullscreen("whitenoise", 0) + else + remove_visual(M) + +/datum/nano_module/uav/remove_visual(mob/M) + if(!M.client) + return + M.clear_fullscreen("fishbed",0) + M.clear_fullscreen("scanlines",0) + M.clear_fullscreen("whitenoise",0) diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index 2b259519265..894173ec724 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -46,7 +46,7 @@ to_chat(user, "The crew monitor doesn't seem like it'll work here.") if(program) program.kill_program() - else if(ui) + if(ui) ui.close() return diff --git a/code/modules/modular_computers/file_system/programs/ships/navigation.dm b/code/modules/modular_computers/file_system/programs/ships/navigation.dm index dbe7aed5def..88db90598bc 100644 --- a/code/modules/modular_computers/file_system/programs/ships/navigation.dm +++ b/code/modules/modular_computers/file_system/programs/ships/navigation.dm @@ -4,7 +4,7 @@ nanomodule_path = /datum/nano_module/program/ship/nav program_icon_state = "helm" program_key_state = "generic_key" - program_menu_icon = "search" + program_menu_icon = "pin-s" extended_desc = "Displays a ship's location in the sector." required_access = null requires_ntnet = 1 diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 2f382e0f4d8..1447c5008e4 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -39,6 +39,27 @@ var/global/ntnet_card_uid = 1 icon_state = "netcard_advanced" hardware_size = 1 +/obj/item/weapon/computer_hardware/network_card/quantum + name = "quantum NTNet network card" + desc = "A network card that can connect to NTnet from anywhere, using quantum entanglement." + long_range = 1 + origin_tech = list(TECH_DATA = 6, TECH_ENGINEERING = 7) + power_usage = 200 // Infinite range but higher power usage. + icon_state = "netcard_advanced" + hardware_size = 1 + +/obj/item/weapon/computer_hardware/network_card/quantum/get_signal(var/specific_action = 0) + if(!holder2) + return 0 + + if(!enabled) + return 0 + + if(!check_functionality() || !ntnet_global || is_banned()) + return 0 + + return 2 + /obj/item/weapon/computer_hardware/network_card/wired name = "wired NTNet network card" desc = "An advanced network card for usage with standard NTNet frequencies. This one also supports wired connection." @@ -82,7 +103,8 @@ var/global/ntnet_card_uid = 1 var/holderz = get_z(holder2) if(!holderz) //no reception in nullspace return 0 - var/list/zlevels_in_range = using_map.get_map_levels(holderz, long_range) + var/list/zlevels_in_range = using_map.get_map_levels(holderz, FALSE) + var/list/zlevels_in_long_range = using_map.get_map_levels(holderz, TRUE) - zlevels_in_range var/best = 0 for(var/relay in ntnet_global.relays) var/obj/machinery/ntnet_relay/R = relay @@ -91,11 +113,16 @@ var/global/ntnet_card_uid = 1 continue //We're on the same z if(R.z == holderz) - best = 2 + best = 2 //Every network card gets high signal on the same z as the relay break // No point in going further //Not on the same z but within range anyway if(R.z in zlevels_in_range) - best = 1 + best = long_range ? 2 : 1 //High-power network cards get good signal further away + break + //Only in long range + if(long_range && (R.z in zlevels_in_long_range)) + best = 1 //High-power network cards can get low signal even at long range + break return best return 0 // No computer! diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm index 540dfddada6..949f9a7a943 100644 --- a/code/modules/multiz/zshadow.dm +++ b/code/modules/multiz/zshadow.dm @@ -61,7 +61,7 @@ if(shadow) shadow.sync_icon(src) -/mob/living/Move() +/mob/living/Moved() . = ..() check_shadow() diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm index 90c213da1c5..75c38c9ed36 100644 --- a/code/modules/nano/modules/nano_module.dm +++ b/code/modules/nano/modules/nano_module.dm @@ -62,3 +62,6 @@ /datum/proc/update_layout() return FALSE + +/datum/nano_module/proc/relaymove(var/mob/user, direction) + return FALSE diff --git a/code/modules/overmap/disperser/disperser_charge.dm b/code/modules/overmap/disperser/disperser_charge.dm index 22026086d5e..b09557ebd1a 100644 --- a/code/modules/overmap/disperser/disperser_charge.dm +++ b/code/modules/overmap/disperser/disperser_charge.dm @@ -15,13 +15,13 @@ ) // make a screeching noise to drive people mad -/obj/structure/ship_munition/disperser_charge/Move(atom/newloc, direct = 0) - if((. = ..()) && prob(50)) +/obj/structure/ship_munition/disperser_charge/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(prob(50)) var/turf/T = get_turf(src) if(!isspace(T) && !istype(T, /turf/simulated/floor/carpet)) playsound(T, pick(move_sounds), 50, 1) - /obj/structure/ship_munition/disperser_charge/fire name = "FR1-ENFER charge" color = "#b95a00" diff --git a/code/modules/overmap/events/overmap_event.dm b/code/modules/overmap/events/overmap_event.dm index 9add25a5c1b..ff1b4ae105f 100644 --- a/code/modules/overmap/events/overmap_event.dm +++ b/code/modules/overmap/events/overmap_event.dm @@ -19,19 +19,10 @@ icon_state = pick(event_icon_states) GLOB.overmap_event_handler.update_hazards(loc) -/obj/effect/overmap/event/Move() - var/turf/old_loc = loc +/obj/effect/overmap/event/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - GLOB.overmap_event_handler.update_hazards(old_loc) - GLOB.overmap_event_handler.update_hazards(loc) - -/obj/effect/overmap/event/forceMove(atom/destination) - var/old_loc = loc - . = ..() - if(.) - GLOB.overmap_event_handler.update_hazards(old_loc) - GLOB.overmap_event_handler.update_hazards(loc) + GLOB.overmap_event_handler.update_hazards(old_loc) + GLOB.overmap_event_handler.update_hazards(loc) /obj/effect/overmap/event/Destroy()//takes a look at this one as well, make sure everything is A-OK var/turf/T = loc diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ab535081b63..fbb632e0401 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -556,6 +556,11 @@ obj/structure/cable/proc/cableColor(var/colorC) if(!S || S.robotic < ORGAN_ROBOT || S.open == 3) return ..() + //VOREStation Add - No welding nanoform limbs + if(S.robotic > ORGAN_LIFELIKE) + return ..() + //VOREStation Add End + if(S.organ_tag == BP_HEAD) if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space)) to_chat(user, "You can't apply [src] through [H.head]!") diff --git a/code/modules/power/gravitygenerator_vr.dm b/code/modules/power/gravitygenerator_vr.dm index 5cf222c24ad..9f5dd799f46 100644 --- a/code/modules/power/gravitygenerator_vr.dm +++ b/code/modules/power/gravitygenerator_vr.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) return "off" // You aren't allowed to move. -/obj/machinery/gravity_generator/Move() +/obj/machinery/gravity_generator/Moved(atom/old_loc, direction, forced = FALSE) . = ..() qdel(src) @@ -88,13 +88,14 @@ GLOBAL_LIST_EMPTY(gravity_generators) // // Generator which spawns with the station. // +/obj/machinery/gravity_generator/main/station + use_power = USE_POWER_ACTIVE + current_overlay = "activated" /obj/machinery/gravity_generator/main/station/Initialize() . = ..() setup_parts() - middle.add_overlay("activated") - current_overlay = "activated" - update_use_power(USE_POWER_ACTIVE) + middle.add_overlay("activated") // // Generator an admin can spawn @@ -122,7 +123,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) var/charge_count = 100 var/current_overlay = null var/broken_state = 0 - var/setting = 1 //Gravity value when on var/list/levels = list() var/list/areas = list() @@ -290,19 +290,32 @@ GLOBAL_LIST_EMPTY(gravity_generators) else if(breaker) new_state = TRUE - charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation. + // Charging state FSM + switch(charging_state) + if(POWER_UP) + if(!new_state) // Can start spin down during spin up + charging_state = POWER_DOWN + if(POWER_DOWN) + if(new_state) // Can start spin up during spin down + charging_state = POWER_UP + if(POWER_IDLE) + if(!new_state && use_power == USE_POWER_ACTIVE) // Can start spin down during running + charging_state = POWER_DOWN + else if(new_state && use_power == USE_POWER_IDLE) // Can start spin up during stopped + charging_state = POWER_UP + investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", "gravity") update_icon() // Set the state of the gravity. /obj/machinery/gravity_generator/main/proc/set_state(new_state) charging_state = POWER_IDLE - on = new_state - update_use_power(on ? USE_POWER_ACTIVE : USE_POWER_IDLE) + update_use_power(new_state ? USE_POWER_ACTIVE : USE_POWER_IDLE) + // Sound the alert if gravity was just enabled or disabled. var/alert = FALSE if(SSticker.IsRoundInProgress()) - if(on) // If we turned on and the game is live. + if(new_state) // If we turned on and the game is live. if(gravity_in_level() == FALSE) alert = TRUE investigate_log("was brought online and is now producing gravity for this level.", "gravity") @@ -314,9 +327,10 @@ GLOBAL_LIST_EMPTY(gravity_generators) message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_JMP(src)]") update_list() - update_gravity(on) + update_gravity(new_state) update_icon() src.updateUsrDialog() + if(alert) shake_everyone() @@ -408,7 +422,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) for(var/z in levels) if(!GLOB.gravity_generators["[z]"]) GLOB.gravity_generators["[z]"] = list() - if(on) + if(use_power == USE_POWER_ACTIVE) GLOB.gravity_generators["[z]"] |= src else GLOB.gravity_generators["[z]"] -= src @@ -416,6 +430,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) /obj/machinery/gravity_generator/main/proc/update_areas() areas.Cut() for(var/area/A) + if(istype(A, /area/shuttle)) + continue //Skip shuttle areas if(A.z in levels) areas += A diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index f5481afd4cc..7b36dd7347a 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -135,9 +135,9 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return -/obj/structure/particle_accelerator/Move() - ..() - if(master && master.active) +/obj/structure/particle_accelerator/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() + if(master?.active) master.toggle_power() log_game("PACCEL([x],[y],[z]) Was moved while active and turned off.") investigate_log("was moved whilst active; it powered down.","singulo") diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm index 6ac366b58ad..b7aab78f0df 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm @@ -20,14 +20,6 @@ icon_state = "ml3m_cmo" -/obj/item/weapon/gun/projectile/cell_loaded/medical/staff - name = "cell-loaded staff" - desc = "A modified version of the ML-3 Medigun that takes advantage of internal micro-reactor technology to recharge its cells on the field, allowing for prolonged use without needing to stop and charge or replace the cells." - description_fluff = "The 'healrod' allows one to customize their loadout in the field, or before deploying, to allow emergency response personnel to deliver a variety of ranged healing options over an extended period of time, thanks to its internal minireactor." - description_antag = "" - origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_BIO = 5) - allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical) - icon_state = "healrod" // The Magazine // diff --git a/code/modules/projectiles/guns/energy/gunsword_vr.dm b/code/modules/projectiles/guns/energy/gunsword_vr.dm index f6bb1a30263..b6d5f054f9d 100644 --- a/code/modules/projectiles/guns/energy/gunsword_vr.dm +++ b/code/modules/projectiles/guns/energy/gunsword_vr.dm @@ -7,13 +7,13 @@ icon_override = 'icons/vore/custom_guns_vr.dmi' item_state = null - item_icons = null + item_icons = list(slot_r_hand_str = 'icons/vore/custom_guns_vr.dmi', slot_l_hand_str = 'icons/vore/custom_guns_vr.dmi') + item_state_slots = list(slot_r_hand_str = "gbuster_r", slot_l_hand_str = "gbuster_l") w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 4) - slot_flags = null projectile_type = /obj/item/projectile/beam/stun - fire_sound = 'sound/weapons/gauss_shoot.ogg' + fire_sound = 'sound/weapons/mandalorian.ogg' charge_meter = 1 cell_type = /obj/item/weapon/cell/device/weapon/gunsword @@ -22,7 +22,7 @@ firemodes = list( list(mode_name="stun", charge_cost=240,projectile_type=/obj/item/projectile/beam/stun, modifystate="gbuster", fire_sound='sound/weapons/Taser.ogg'), - list(mode_name="lethal", charge_cost=480,projectile_type=/obj/item/projectile/beam, modifystate="gbuster", fire_sound='sound/weapons/gauss_shoot.ogg'), + list(mode_name="lethal", charge_cost=480,projectile_type=/obj/item/projectile/beam/imperial, modifystate="gbuster", fire_sound='sound/weapons/gauss_shoot.ogg'), ) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3ed65642296..47e9c5f6d63 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -338,14 +338,13 @@ START_PROCESSING(SSprojectiles, src) pixel_move(1, FALSE) //move it now! -/obj/item/projectile/Move(atom/newloc, dir = NONE) +/obj/item/projectile/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - if(.) - if(temporary_unstoppable_movement) - temporary_unstoppable_movement = FALSE - DISABLE_BITFIELD(movement_type, UNSTOPPABLE) - if(fired && can_hit_target(original, permutated, TRUE)) - Bump(original) + if(temporary_unstoppable_movement) + temporary_unstoppable_movement = FALSE + DISABLE_BITFIELD(movement_type, UNSTOPPABLE) + if(fired && can_hit_target(original, permutated, TRUE)) + Bump(original) /obj/item/projectile/proc/after_z_change(atom/olcloc, atom/newloc) diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 125de3db6c5..7316c42179a 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -1030,3 +1030,12 @@ req_tech = list(TECH_MATERIAL = 7, TECH_ENGINEERING = 5, TECH_MAGNET = 5, TECH_POWER = 6, TECH_ILLEGAL = 3, TECH_BLUESPACE = 4, TECH_ARCANE = 2, TECH_PRECURSOR = 3) materials = list(MAT_DURASTEEL = 5000, MAT_GRAPHITE = 3000, MAT_MORPHIUM = 1500, MAT_OSMIUM = 1500, MAT_PHORON = 1750, MAT_VERDANTIUM = 3000, MAT_SUPERMATTER = 2000) build_path = /obj/item/rig_module/teleporter + +/datum/design/item/mechfab/uav/basic + name = "UAV - Recon Skimmer" + id = "recon_skimmer" + build_path = /obj/item/device/uav + time = 20 + req_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 5, TECH_PHORON = 3, TECH_MAGNET = 4, TECH_POWER = 6) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 6000, "silver" = 4000) + \ No newline at end of file diff --git a/code/modules/vchat/vchat_db.dm b/code/modules/vchat/vchat_db.dm index 0dc7e7982de..3fc0833aca0 100644 --- a/code/modules/vchat/vchat_db.dm +++ b/code/modules/vchat/vchat_db.dm @@ -103,7 +103,7 @@ GLOBAL_DATUM(vchatdb, /database) var/list/messagedef = list( "INSERT INTO messages (ckey,worldtime,message) VALUES (?, ?, ?)", ckey, - world.time, + world.time || 0, message) return vchat_exec_update(messagedef) diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm index 99adccf4597..657d4976f42 100644 --- a/code/modules/vehicles/quad.dm +++ b/code/modules/vehicles/quad.dm @@ -45,19 +45,18 @@ icon_state = "quad_keys" w_class = ITEMSIZE_TINY -/obj/vehicle/train/engine/quadbike/Move(var/turf/destination) - var/turf/T = get_turf(src) - ..() //Move it move it, so we can test it test it. - if(T != get_turf(src) && !istype(destination, T.type)) //Did we move at all, and are we changing turf types? - if(istype(destination, /turf/simulated/floor/water)) +/obj/vehicle/train/engine/quadbike/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() //Move it move it, so we can test it test it. + if(!istype(loc, old_loc.type) && !istype(old_loc, loc.type)) //Did we move at all, and are we changing turf types? + if(istype(loc, /turf/simulated/floor/water)) speed_mod = outdoors_speed_mod * 4 //It kind of floats due to its tires, but it is slow. - else if(istype(destination, /turf/simulated/floor/outdoors/rocks)) + else if(istype(loc, /turf/simulated/floor/outdoors/rocks)) speed_mod = initial(speed_mod) //Rocks are good, rocks are solid. - else if(istype(destination, /turf/simulated/floor/outdoors/dirt) || istype(destination, /turf/simulated/floor/outdoors/grass)) + else if(istype(loc, /turf/simulated/floor/outdoors/dirt) || istype(loc, /turf/simulated/floor/outdoors/grass)) speed_mod = outdoors_speed_mod //Dirt and grass are the outdoors bench mark. - else if(istype(destination, /turf/simulated/floor/outdoors/mud)) + else if(istype(loc, /turf/simulated/floor/outdoors/mud)) speed_mod = outdoors_speed_mod * 1.5 //Gets us roughly 1. Mud may be fun, but it's not the best. - else if(istype(destination, /turf/simulated/floor/outdoors/snow)) + else if(istype(loc, /turf/simulated/floor/outdoors/snow)) speed_mod = outdoors_speed_mod * 1.7 //Roughly a 1.25. Snow is coarse and wet and gets everywhere, especially your electric motors. else speed_mod = initial(speed_mod) @@ -193,8 +192,8 @@ ..() update_icon() -/obj/vehicle/train/trolley/trailer/Move() - ..() +/obj/vehicle/train/trolley/trailer/Moved(atom/old_loc, direction, forced = FALSE) + . = ..() if(lead) switch(dir) //Due to being a Big Boy sprite, it has to have special pixel shifting to look 'normal'. if(1) diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 24d24b11798..67fc0735a3b 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -29,14 +29,11 @@ /obj/vehicle/train/Move() var/old_loc = get_turf(src) - if(..()) + if((. = ..())) if(tow) tow.Move(old_loc) - return 1 - else - if(lead) - unattach() - return 0 + else if(lead) + unattach() /obj/vehicle/train/Bump(atom/Obstacle) if(!istype(Obstacle, /atom/movable)) diff --git a/code/modules/virus2/analyser.dm b/code/modules/virus2/analyser.dm index e7f5dd64e33..b45dba31ed0 100644 --- a/code/modules/virus2/analyser.dm +++ b/code/modules/virus2/analyser.dm @@ -1,7 +1,7 @@ /obj/machinery/disease2/diseaseanalyser name = "disease analyser" desc = "Analyzes diseases to find out information about them!" - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "analyser" anchored = 1 density = 1 diff --git a/code/modules/virus2/centrifuge.dm b/code/modules/virus2/centrifuge.dm index 433a26977bd..fddfb044412 100644 --- a/code/modules/virus2/centrifuge.dm +++ b/code/modules/virus2/centrifuge.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/centrifuge name = "isolation centrifuge" desc = "Used to separate things with different weight. Spin 'em round, round, right round." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "centrifuge" var/curing var/isolating diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm index 3ebe688c781..15638718a4d 100644 --- a/code/modules/virus2/dishincubator.dm +++ b/code/modules/virus2/dishincubator.dm @@ -3,7 +3,7 @@ desc = "Encourages the growth of diseases. This model comes with a dispenser system and a small radiation generator." density = 1 anchored = 1 - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "incubator" var/obj/item/weapon/virusdish/dish var/obj/item/weapon/reagent_containers/glass/beaker = null diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index d22b379ee14..2a6d39d230c 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -8,7 +8,7 @@ desc = "Used to isolate and identify diseases, allowing for comparison with a remote database." density = 1 anchored = 1 - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "isolator" var/isolating = 0 var/state = HOME diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 9503eaa1e5f..3efdcbd8a80 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -276,6 +276,7 @@ name = "Deer dual-color (Taur)" icon_state = "deer_s" extra_overlay = "deer_markings" + suit_sprites = 'icons/mob/taursuits_deer_vr.dmi' msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -387,6 +388,7 @@ /datum/sprite_accessory/tail/taur/slug name = "Slug (Taur)" icon_state = "slug_s" + suit_sprites = 'icons/mob/taursuits_slug_vr.dmi' msg_owner_help_walk = "You carefully slither around %prey." msg_prey_help_walk = "%owner's huge tail slithers past beside you!" @@ -429,6 +431,7 @@ name = "Otie (Taur)" icon_state = "otie_s" extra_overlay = "otie_markings" + suit_sprites = 'icons/mob/taursuits_otie_vr.dmi' /datum/sprite_accessory/tail/taur/alraune/alraune_2c name = "Alraune (dual color)" diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 5c48e5ea22b..11ce8988f0f 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -201,6 +201,17 @@ var/taste if(can_taste && (taste = M.get_taste_message(FALSE))) to_chat(owner, "[M] tastes of [taste].") + //Stop AI processing in bellies + if(M.ai_holder) + M.ai_holder.go_sleep() + +// Called whenever an atom leaves this belly +/obj/belly/Exited(atom/movable/thing, atom/OldLoc) + . = ..() + if(isliving(thing) && !isbelly(thing.loc)) + var/mob/living/L = thing + if((L.stat != DEAD) && L.ai_holder) + L.ai_holder.go_wake() // Release all contents of this belly into the owning mob's location. // If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in. diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 69dd7e6ceca..6c2c2596ceb 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -36,27 +36,27 @@ var/from_suit = /obj/item/clothing/suit/space/void var/to_helmet = /obj/item/clothing/head/cardborg var/to_suit = /obj/item/clothing/suit/cardborg - + //conversion costs. refunds all parts by default, but can be tweaked per-kit var/from_helmet_cost = 1 var/from_suit_cost = 2 var/to_helmet_cost = -1 var/to_suit_cost = -2 - + var/owner_ckey = null //ckey of the kit owner as a string var/skip_content_check = FALSE //can we skip the contents check? we generally shouldn't, but this is necessary for rigs/coats with hoods/etc. var/transfer_contents = FALSE //should we transfer the contents across before deleting? we generally shouldn't, esp. in the case of rigs/coats with hoods/etc. note this does nothing if skip is FALSE. var/can_repair = FALSE //can we be used to repair damaged voidsuits when converting them? var/can_revert = TRUE //can we revert items, or is it a one-way trip? var/delete_on_empty = FALSE //do we self-delete when emptied? - + //Conversion proc /obj/item/device/modkit_conversion/afterattack(obj/O, mob/user as mob) var/cost var/to_type var/keycheck - - if(isturf(O)) //silently fail if you click on a turf. shouldn't work anyway because turfs aren't objects but if I don't do this it spits runtimes. + + if(isturf(O)) //silently fail if you click on a turf. shouldn't work anyway because turfs aren't objects but if I don't do this it spits runtimes. return if(istype(O,/obj/item/clothing/suit/space/void/) && !can_repair) //check if we're a voidsuit and if we're allowed to repair var/obj/item/clothing/suit/space/void/SS = O @@ -104,13 +104,13 @@ playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) var/obj/N = new to_type(O.loc) user.visible_message("[user] opens \the [src] and modifies \the [O] into \the [N].","You open \the [src] and modify \the [O] into \the [N].") - + //crude, but transfer prints and fibers to avoid forensics abuse, same as the bloody/gooey check above N.fingerprints = O.fingerprints N.fingerprintshidden = O.fingerprintshidden N.fingerprintslast = O.fingerprintslast N.suit_fibers = O.suit_fibers - + //transfer logic could technically be made more thorough and handle stuff like helmet/boots/tank vars for suits, but in those cases you should be removing the items first anyway if(skip_content_check && transfer_contents) N.contents = O.contents @@ -133,7 +133,7 @@ var/obj/item/weapon/gun/energy/NO = N NO.contents = list() NO.cell_type = null - + qdel(O) parts -= cost if(!parts && delete_on_empty) @@ -439,8 +439,8 @@ //SilencedMP5A5:Serdykov Antoz /obj/item/clothing/suit/armor/vest/wolftaur/serdy //SilencedMP5A5's specialty armor suit. - name = "KSS-8 security armor" - desc = "A set of armor made from pieces of many other armors. There are two orange holobadges on it, one on the chestplate, one on the steel flank plates. The holobadges appear to be russian in origin. 'Kosmicheskaya Stantsiya-8' is printed in faded white letters on one side, along the spine. It smells strongly of dog." + name = "custom security cuirass" + desc = "An armored vest that protects against some damage. It appears to be created for a wolfhound. The name 'Serdykov L. Antoz' is written on a tag inside one of the haunchplates." species_restricted = null //Species restricted since all it cares about is a taur half icon = 'icons/mob/taursuits_wolf_vr.dmi' icon_state = "serdy_armor" @@ -454,16 +454,27 @@ to_chat(H, "You need to have a wolf-taur half to wear this.") return 0 -/obj/item/clothing/head/helmet/serdy //SilencedMP5A5's specialty helmet. Uncomment if/when they make their custom item app and are accepted. - name = "KSS-8 security helmet" - desc = "desc = An old production model steel-ceramic lined helmet with a white stripe and a custom orange holographic visor. It has ear holes, and smells of dog. It's been heavily modified, and fitted with a metal mask to protect the jaw." +/obj/item/clothing/head/serdyhelmet //SilencedMP5A5's specialty helmet. + name = "custom security helmet" + desc = "An old production model steel-ceramic lined helmet with a white stripe and a custom orange holographic visor. It has ear holes, and smells of dog." icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "serdyhelm" - + valid_accessory_slots = (ACCESSORY_SLOT_HELM_C) + restricted_accessory_slots = (ACCESSORY_SLOT_HELM_C) + flags = THICKMATERIAL + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) icon_override = 'icons/vore/custom_clothes_vr.dmi' item_state = "serdyhelm_mob" + cold_protection = HEAD + min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HEAD + max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + siemens_coefficient = 0.7 + w_class = ITEMSIZE_NORMAL + ear_protection = 1 + drop_sound = 'sound/items/drop/helm.ogg' + -/* //SilencedMP5A5:Serdykov Antoz /obj/item/device/modkit_conversion/fluff/serdykit name = "Serdykov's armor modification kit" @@ -474,9 +485,9 @@ from_helmet = /obj/item/clothing/head/helmet from_suit = /obj/item/clothing/suit/armor/vest/wolftaur - to_helmet = /obj/item/clothing/head/helmet/serdy + to_helmet = /obj/item/clothing/head/serdyhelmet to_suit = /obj/item/clothing/suit/armor/vest/wolftaur/serdy -*/ + //Cameron653: Diana Kuznetsova /obj/item/clothing/suit/fluff/purp_robes diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 840c2096c50..7ecf912cfb1 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -336,8 +336,8 @@ secondary_effect.ToggleActivate(0) return -/obj/machinery/artifact/Move() - ..() +/obj/machinery/artifact/Moved() + . = ..() if(my_effect) my_effect.UpdateMove() if(secondary_effect) diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index a3e69c4e7ec..500b1a9970c 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -1,7 +1,7 @@ /obj/machinery/artifact_analyser name = "Anomaly Analyser" desc = "Studies the emissions of anomalous materials to discover their uses." - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "isolator" anchored = 1 density = 1 diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index 8222eaa1f09..d4c843bbb7e 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -1,6 +1,6 @@ /obj/machinery/artifact_harvester name = "Exotic Particle Harvester" - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "incubator" //incubator_on anchored = 1 density = 1 diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index 5cb5d32479e..c5e5c029fd7 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -3,7 +3,7 @@ desc = "A specialised, complex scanner for gleaning information on all manner of small things." anchored = 1 density = 1 - icon = 'icons/obj/virology.dmi' + icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit icon_state = "analyser" use_power = USE_POWER_IDLE diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index d0b368335dc..761a2a98d41 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -115,7 +115,7 @@ /obj/machinery/xenobio/extractor name = "biological product destructive analyzer" - icon = 'icons/obj/hydroponics_machines.dmi' + icon = 'icons/obj/hydroponics_machines_vr.dmi' //VOREStation Edit icon_state = "traitcopier" circuit = /obj/item/weapon/circuitboard/bioproddestanalyzer diff --git a/html/changelogs/atlantiscze-valveprogram.yml b/html/changelogs/atlantiscze-valveprogram.yml new file mode 100644 index 00000000000..3d288c05be3 --- /dev/null +++ b/html/changelogs/atlantiscze-valveprogram.yml @@ -0,0 +1,5 @@ +author: atlantiscze +delete-after: True + +changes: + - rscadd: "Shutoff valve monitoring is now also available as a modular computer program. Its UI has also been cleaned up a little." \ No newline at end of file diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 99f3f4fd4c9..5555d0e1ade 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/radial.dmi b/icons/mob/radial.dmi index da1f69840c6..883ea38caeb 100644 Binary files a/icons/mob/radial.dmi and b/icons/mob/radial.dmi differ diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi index fb3361dafd8..d10902a6ffb 100644 Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ diff --git a/icons/mob/taursuits_cow_vr.dmi b/icons/mob/taursuits_cow_vr.dmi index eef5bd698c4..ce592d5edb9 100644 Binary files a/icons/mob/taursuits_cow_vr.dmi and b/icons/mob/taursuits_cow_vr.dmi differ diff --git a/icons/mob/taursuits_deer_vr.dmi b/icons/mob/taursuits_deer_vr.dmi new file mode 100644 index 00000000000..6c53a6f4d09 Binary files /dev/null and b/icons/mob/taursuits_deer_vr.dmi differ diff --git a/icons/mob/taursuits_drake_vr.dmi b/icons/mob/taursuits_drake_vr.dmi index c8be86ed976..ca0db57532f 100644 Binary files a/icons/mob/taursuits_drake_vr.dmi and b/icons/mob/taursuits_drake_vr.dmi differ diff --git a/icons/mob/taursuits_feline_vr.dmi b/icons/mob/taursuits_feline_vr.dmi index e180d1dad27..1d4c597e02d 100644 Binary files a/icons/mob/taursuits_feline_vr.dmi and b/icons/mob/taursuits_feline_vr.dmi differ diff --git a/icons/mob/taursuits_horse_vr.dmi b/icons/mob/taursuits_horse_vr.dmi index 8dc33f31184..4162463c69b 100644 Binary files a/icons/mob/taursuits_horse_vr.dmi and b/icons/mob/taursuits_horse_vr.dmi differ diff --git a/icons/mob/taursuits_lizard_vr.dmi b/icons/mob/taursuits_lizard_vr.dmi index 2971beb8635..a6b9858f177 100644 Binary files a/icons/mob/taursuits_lizard_vr.dmi and b/icons/mob/taursuits_lizard_vr.dmi differ diff --git a/icons/mob/taursuits_naga_vr.dmi b/icons/mob/taursuits_naga_vr.dmi index ef00466c27b..375081158f8 100644 Binary files a/icons/mob/taursuits_naga_vr.dmi and b/icons/mob/taursuits_naga_vr.dmi differ diff --git a/icons/mob/taursuits_otie_vr.dmi b/icons/mob/taursuits_otie_vr.dmi new file mode 100644 index 00000000000..06e083854ea Binary files /dev/null and b/icons/mob/taursuits_otie_vr.dmi differ diff --git a/icons/mob/taursuits_slug_vr.dmi b/icons/mob/taursuits_slug_vr.dmi new file mode 100644 index 00000000000..98692375f3f Binary files /dev/null and b/icons/mob/taursuits_slug_vr.dmi differ diff --git a/icons/mob/taursuits_wolf_vr.dmi b/icons/mob/taursuits_wolf_vr.dmi index 94422849f84..0f638ea6d38 100644 Binary files a/icons/mob/taursuits_wolf_vr.dmi and b/icons/mob/taursuits_wolf_vr.dmi differ diff --git a/icons/mob/ties_vr.dmi b/icons/mob/ties_vr.dmi index e9651101126..7e06a43e112 100644 Binary files a/icons/mob/ties_vr.dmi and b/icons/mob/ties_vr.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index d3b06e056b7..fd203ada3fc 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/icons/obj/clothing/ties_vr.dmi b/icons/obj/clothing/ties_vr.dmi index fc13c4f683f..9df871aedc4 100644 Binary files a/icons/obj/clothing/ties_vr.dmi and b/icons/obj/clothing/ties_vr.dmi differ diff --git a/icons/obj/hydroponics_machines_vr.dmi b/icons/obj/hydroponics_machines_vr.dmi new file mode 100644 index 00000000000..2a7ba26031e Binary files /dev/null and b/icons/obj/hydroponics_machines_vr.dmi differ diff --git a/icons/obj/objects_vr.dmi b/icons/obj/objects_vr.dmi index e8485b3638a..1160e025ded 100644 Binary files a/icons/obj/objects_vr.dmi and b/icons/obj/objects_vr.dmi differ diff --git a/icons/obj/surgery_vr.dmi b/icons/obj/surgery_vr.dmi index 9b0f9b8aed8..7984e374c8d 100644 Binary files a/icons/obj/surgery_vr.dmi and b/icons/obj/surgery_vr.dmi differ diff --git a/icons/obj/uav.dmi b/icons/obj/uav.dmi new file mode 100644 index 00000000000..daae9a03da8 Binary files /dev/null and b/icons/obj/uav.dmi differ diff --git a/icons/obj/virology_vr.dmi b/icons/obj/virology_vr.dmi new file mode 100644 index 00000000000..224c4c90148 Binary files /dev/null and b/icons/obj/virology_vr.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index c1a3bf53832..0a20d366ccf 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_guns_vr.dmi b/icons/vore/custom_guns_vr.dmi index 2bf97bc70e6..4e1a4cc79f0 100644 Binary files a/icons/vore/custom_guns_vr.dmi and b/icons/vore/custom_guns_vr.dmi differ diff --git a/icons/vore/custom_items_left_hand_vr.dmi b/icons/vore/custom_items_left_hand_vr.dmi index 02f783cd8de..1ee6c0a336c 100644 Binary files a/icons/vore/custom_items_left_hand_vr.dmi and b/icons/vore/custom_items_left_hand_vr.dmi differ diff --git a/icons/vore/custom_items_right_hand_vr.dmi b/icons/vore/custom_items_right_hand_vr.dmi index 27264584abe..a6e419e2ede 100644 Binary files a/icons/vore/custom_items_right_hand_vr.dmi and b/icons/vore/custom_items_right_hand_vr.dmi differ diff --git a/icons/vore/custom_onmob_vr.dmi b/icons/vore/custom_onmob_vr.dmi index 81c3efd0480..1dbfb6d011b 100644 Binary files a/icons/vore/custom_onmob_vr.dmi and b/icons/vore/custom_onmob_vr.dmi differ diff --git a/maps/southern_cross/items/encryptionkey_vr.dm b/maps/southern_cross/items/encryptionkey_vr.dm deleted file mode 100644 index fe1032c09b6..00000000000 --- a/maps/southern_cross/items/encryptionkey_vr.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/device/encryptionkey/pilot - icon_state = "cypherkey" - channels = list("Explorer" = 1) - -/obj/item/device/encryptionkey/explorer - channels = list("Science" = 1, "Explorer" = 1) - -/obj/item/device/encryptionkey/talon - channels = list("Talon" = 1) diff --git a/maps/southern_cross/items/headset_vr.dm b/maps/southern_cross/items/headset_vr.dm deleted file mode 100644 index 8b6f7b1e97d..00000000000 --- a/maps/southern_cross/items/headset_vr.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/item/device/radio/headset/pilot - desc = "A headset used by pilots, has access to the explorer channel." - -/obj/item/device/radio/headset/pilot/alt - desc = "A bowman headset used by pilots, has access to the explorer channel." - -/obj/item/device/radio/headset/explorer - desc = "Headset used by explorers for exploring. Access to explorer and science channels." - -/obj/item/device/radio/headset/explorer/alt - desc = "Bowman headset used by explorers for exploring. Access to explorer and science channels." - -/obj/item/device/radio/headset/sar - name = "fm radio headset" - desc = "A headset for field medics." - -/obj/item/device/radio/headset/sar/alt - name = "fm radio bowman headset" - desc = "A bowman headset for field medics." - -/obj/item/device/radio/headset/volunteer - name = "volunteer's headset" - desc = "A headset used by volunteers to expedition teams, has access to the exploration channel." - icon_state = "pilot_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/device/encryptionkey/pilot - -/obj/item/device/radio/headset/talon - name = "talon headset" - desc = "A headset for communication between the crew of the ITV Talon." - adhoc_fallback = TRUE - icon_state = "pilot_headset" - ks2type = /obj/item/device/encryptionkey/talon diff --git a/maps/southern_cross/job/outfits_vr.dm b/maps/southern_cross/job/outfits_vr.dm deleted file mode 100644 index e2976fb10cf..00000000000 --- a/maps/southern_cross/job/outfits_vr.dm +++ /dev/null @@ -1,21 +0,0 @@ -/decl/hierarchy/outfit/job/pathfinder - name = OUTFIT_JOB_NAME("Pathfinder") - shoes = /obj/item/clothing/shoes/boots/winter/explorer - uniform = /obj/item/clothing/under/explorer //TODO: Uniforms. - l_ear = /obj/item/device/radio/headset/explorer - id_slot = slot_wear_id - pda_slot = slot_l_store - pda_type = /obj/item/device/pda/pathfinder - id_type = /obj/item/weapon/card/id/explorer/head - id_pda_assignment = "Pathfinder" - flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL - backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1) - -/decl/hierarchy/outfit/job/pathfinder/post_equip(mob/living/carbon/human/H) - ..() - for(var/obj/item/clothing/accessory/permit/gun/planetside/permit in H.back.contents) - permit.set_name(H.real_name) - -/decl/hierarchy/outfit/job/assistant/explorer - id_type = /obj/item/weapon/card/id/explorer - flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL diff --git a/maps/tether/submaps/om_ships/aro.dmm b/maps/tether/submaps/om_ships/aro.dmm index 65903eee224..5322661bb8c 100644 --- a/maps/tether/submaps/om_ships/aro.dmm +++ b/maps/tether/submaps/om_ships/aro.dmm @@ -2937,7 +2937,7 @@ dir = 1 }, /obj/structure/table/rack/shelf/steel, -/obj/item/mecha_parts/mecha_equipment/omni_shield/fighter64, +/obj/item/mecha_parts/mecha_equipment/omni_shield, /turf/simulated/floor/tiled/techfloor, /area/ship/aro/midshipshangars) "fU" = ( diff --git a/maps/tether/submaps/om_ships/shelter_6.dm b/maps/tether/submaps/om_ships/shelter_6.dm index d11afa04d34..f65d2491dd0 100644 --- a/maps/tether/submaps/om_ships/shelter_6.dm +++ b/maps/tether/submaps/om_ships/shelter_6.dm @@ -20,7 +20,7 @@ // The shuttle's 'shuttle' computer /obj/machinery/computer/shuttle_control/explore/tabiranth name = "short jump console" - shuttle_tag = "XN-29 Prototype Shuttle" + shuttle_tag = "NDV Tabiranth" req_one_access = list(access_cent_general) // A shuttle lateloader landmark diff --git a/maps/tether/submaps/om_ships/shelter_6.dmm b/maps/tether/submaps/om_ships/shelter_6.dmm index f43e4e6724a..e8f951444f0 100644 --- a/maps/tether/submaps/om_ships/shelter_6.dmm +++ b/maps/tether/submaps/om_ships/shelter_6.dmm @@ -1450,6 +1450,8 @@ dir = 5 }, /obj/structure/closet/secure_closet/wall{ + anchored = 1; + density = 0; pixel_x = 32; req_access = list(101) }, diff --git a/maps/tether/submaps/space/pois/ship_med_crashed.dmm b/maps/tether/submaps/space/pois/ship_med_crashed.dmm index 203f3b63e5f..b0ae668a84e 100644 --- a/maps/tether/submaps/space/pois/ship_med_crashed.dmm +++ b/maps/tether/submaps/space/pois/ship_med_crashed.dmm @@ -47,6 +47,9 @@ /area/tether_away/debrisfield/explored) "l" = ( /obj/effect/decal/cleanable/dirt, +/mob/living/bot/medbot{ + name = "Dr. Crusty" + }, /turf/simulated/shuttle/plating/airless, /area/tether_away/debrisfield/explored) "m" = ( @@ -124,12 +127,6 @@ /obj/machinery/suit_cycler/medical, /turf/simulated/shuttle/floor/airless, /area/tether_away/debrisfield/explored) -"B" = ( -/mob/living/bot/medbot{ - name = "Dr. Crusty" - }, -/turf/simulated/shuttle/floor/airless, -/area/tether_away/debrisfield/explored) "C" = ( /obj/effect/decal/cleanable/dirt, /obj/random/firstaid, @@ -178,6 +175,10 @@ "M" = ( /turf/simulated/shuttle/wall/hard_corner, /area/tether_away/debrisfield/explored) +"Q" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/shuttle/wall, +/area/tether_away/debrisfield/explored) (1,1,1) = {" a @@ -496,7 +497,7 @@ c h l C -H +Q s n I @@ -581,7 +582,7 @@ a a a e -B +f f f c diff --git a/maps/tether/submaps/tether_misc.dmm b/maps/tether/submaps/tether_misc.dmm index d8cd179f852..3eb493c3e50 100644 --- a/maps/tether/submaps/tether_misc.dmm +++ b/maps/tether/submaps/tether_misc.dmm @@ -729,20 +729,6 @@ }, /turf/simulated/floor/holofloor/carpet, /area/holodeck/source_courtroom) -"cd" = ( -/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 = 4; - teleport_z_offset = 4 - }, -/turf/space, -/turf/space/transit/north, -/area/space) "ce" = ( /obj/effect/step_trigger/teleporter/planetary_fall/virgo3b, /turf/space/transit/south, @@ -2205,6 +2191,20 @@ "Az" = ( /turf/unsimulated/beach/coastline, /area/beach) +"Bd" = ( +/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 = 4; + teleport_z_offset = 4 + }, +/turf/space, +/turf/space/transit/north, +/area/space) "Bw" = ( /turf/unsimulated/beach/water, /area/beach) @@ -5014,47 +5014,47 @@ Gq Gq Gq Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -5156,47 +5156,47 @@ Ax JW JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -5298,47 +5298,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -5440,47 +5440,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -5582,47 +5582,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -5724,47 +5724,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Uw +Ux +Uw +Ux +Ux +Ux +Ux +Ux +Ux +Uw +Ux +Ux +Uw +ae +ae +ae +ae +ae +SX +SY +SX +SY +SY +SY +SY +SY +SY +SX +SY +SY +SX +ae +ae +ae +ae +ae ap ap Xl @@ -5866,47 +5866,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Ux +Uz +Uw +UG +UK +UM +UQ +US +US +Uw +UH +UW +Ux +ae +ae +ae +ae +ae +SY +SZ +SX +Tk +Tp +Tq +Tu +Ty +Ty +SX +Tl +TC +SY +ae +ae +ae +ae +ae ap ap Xl @@ -6008,47 +6008,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Ux +UA +UF +UH +UA +UN +UA +UA +UH +UF +UH +UX +Ux +ae +ae +ae +ae +ae +SY +Ta +Td +Tl +Ta +Tr +Ta +Ta +Tl +Td +Tl +TD +SY +ae +ae +ae +ae +ae ap ap Xl @@ -6150,47 +6150,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Ux +UC +Uw +UI +UA +UA +UA +UA +UU +Uw +UH +UY +Ux +ae +ae +ae +ae +ae +SY +Tb +SX +Tm +Ta +Ta +Ta +Ta +TA +SX +Tl +TE +SY +ae +ae +ae +ae +ae ap ap Xl @@ -6292,47 +6292,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Ux +UD +Ux +UJ +UH +UP +UR +UT +UV +Ux +UH +UZ +Ux +ae +ae +ae +ae +ae +SY +Tc +SY +To +Tl +Tt +Tx +Tz +TB +SY +Tl +TH +SY +ae +ae +ae +ae +ae ap ap Xl @@ -6434,47 +6434,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +Uw +Ux +Uw +Ux +Ux +Ux +Ux +Ux +Ux +Uw +Ux +Ux +Uw +ae +ae +ae +ae +ae +SX +SY +SX +SY +SY +SY +SY +SY +SY +SX +SY +SY +SX +ae +ae +ae +ae +ae ap ap Xl @@ -6576,47 +6576,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -6718,47 +6718,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -6860,47 +6860,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -7002,47 +7002,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -7144,47 +7144,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -7286,47 +7286,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -7428,47 +7428,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TK +TM +TK +TM +TM +TM +TM +TM +TM +TK +TM +TM +TK +ae +ae +ae +ae +ae +Sm +Sn +Sm +Sn +Sn +Sn +Sn +Sn +Sn +Sm +Sn +Sn +Sm +ae +ae +ae +ae +ae ap ap Xl @@ -7570,47 +7570,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TM +TN +TK +TT +TX +Ua +Ud +Ug +Ug +TK +TU +Uk +TM +ae +ae +ae +ae +ae +Sn +So +Sm +Su +SA +SB +SE +SK +SK +Sm +Sw +SQ +Sn +ae +ae +ae +ae +ae ap ap Xl @@ -7712,47 +7712,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TM +TP +TS +TU +TP +Ub +TP +TP +TU +TS +TU +Ul +TM +ae +ae +ae +ae +ae +Sn +Sp +Ss +Sw +Sp +SC +Sp +Sp +Sw +Ss +Sw +SR +Sn +ae +ae +ae +ae +ae ap ap Xl @@ -7854,47 +7854,47 @@ Az Bw JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TM +TQ +TK +TV +TP +TP +TP +TP +Ui +TK +TU +Um +TM +ae +ae +ae +ae +ae +Sn +Sq +Sm +Sx +Sp +Sp +Sp +Sp +SO +Sm +Sw +SS +Sn +ae +ae +ae +ae +ae ap ap Xl @@ -7996,47 +7996,47 @@ Ax JW JW Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TM +TR +TM +TW +TU +Uc +Uf +Uh +Uj +TM +TU +Uo +TM +ae +ae +ae +ae +ae +Sn +Sr +Sn +Sz +Sw +SD +SF +SN +SP +Sn +Sw +ST +Sn +ae +ae +ae +ae +ae ap ap Xl @@ -8138,47 +8138,47 @@ Gq Gq Gq Gq -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +TK +TM +TK +TM +TM +TM +TM +TM +TM +TK +TM +TM +TK +ae +ae +ae +ae +ae +Sm +Sn +Sm +Sn +Sn +Sn +Sn +Sn +Sn +Sm +Sn +Sn +Sm +ae +ae +ae +ae +ae ap ap Xl @@ -8280,47 +8280,47 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -8422,47 +8422,47 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap Xl @@ -8564,47 +8564,47 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -8706,47 +8706,47 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -8848,47 +8848,47 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -9305,30 +9305,30 @@ ap ap ap ap -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -Jz -cd -cd -cd -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap Xl OY @@ -9447,30 +9447,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap Xl OY @@ -9589,30 +9589,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap Xl OY @@ -9731,30 +9731,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap Xl Xl @@ -9842,19 +9842,6 @@ ap ap ap ap -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu ap ap ap @@ -9873,30 +9860,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -JL -JL -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -9984,19 +9984,6 @@ ap ap ap ap -Vu -Ru -Ru -xM -Ru -Ru -Ru -Ru -xM -Ru -Ru -Ru -Vu ap ap ap @@ -10015,30 +10002,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -JL -JL -jf -jf -jf -jf -JL -JL -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10126,19 +10126,6 @@ ap ap ap ap -Vu -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Vu ap ap ap @@ -10157,30 +10144,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -JL -jf -jf -Hf -jf -jf -jf -JL -JL -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10268,19 +10268,6 @@ ap ap ap ap -Vu -YE -Ru -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Ru -Zi -Vu ap ap ap @@ -10299,30 +10286,43 @@ ap ap ap ap -Jz -jf -jf -JL -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -jf -JL -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10410,19 +10410,6 @@ ap ap ap ap -Vu -Ru -Ru -Vu -VW -wj -wj -wj -BK -Vu -Ru -Ru -Vu ap ap ap @@ -10441,30 +10428,43 @@ ap ap ap ap -Jz -jf -jf -JL -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10552,19 +10552,6 @@ ap ap ap ap -Vu -Ru -Ru -Vu -sl -cj -Dk -Dk -Dk -yK -Ru -Ru -Vu ap ap ap @@ -10583,30 +10570,43 @@ ap ap ap ap -Jz -jf -jf -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10694,19 +10694,6 @@ ap ap ap ap -Vu -Ru -Ru -Vu -sl -Lg -tC -tC -tC -ym -Ru -Ru -Vu ap ap ap @@ -10725,30 +10712,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -JL -jf -jf -jf -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10836,19 +10836,6 @@ ap ap ap ap -Vu -Ru -Ru -Vu -DF -JZ -JZ -JZ -qz -Vu -Ru -Ru -Vu ap ap ap @@ -10867,30 +10854,43 @@ ap ap ap ap -Jz -jf -jf -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -10978,19 +10978,6 @@ ap ap ap ap -Vu -YE -Ru -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Ru -Zi -Vu ap ap ap @@ -11009,30 +10996,43 @@ ap ap ap ap -Jz -jf -jf -JL -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11120,19 +11120,6 @@ ap ap ap ap -Vu -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Ru -Vu ap ap ap @@ -11151,30 +11138,43 @@ ap ap ap ap -Jz -jf -jf -JL -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -jf -JL -JL -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11262,19 +11262,6 @@ ap ap ap ap -Vu -Ru -Ru -MK -Ru -Ru -Ru -Ru -MK -Ru -Ru -Ru -Vu ap ap ap @@ -11293,30 +11280,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -JL -jf -jf -jf -jf -jf -jf -JL -JL -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11404,19 +11404,6 @@ ap ap ap ap -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu -Vu ap ap ap @@ -11435,30 +11422,43 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -JL -JL -jf -jf -jf -jf -JL -JL -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11577,30 +11577,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -JL -JL -JL -JL -JL -JL -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11719,30 +11719,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -11861,30 +11861,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -12003,30 +12003,30 @@ ap ap ap ap -Jz -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -jf -Gs -Gs -Gs -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -12145,30 +12145,30 @@ ap ap ap ap -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd -cd +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap ap ap @@ -12429,29 +12429,29 @@ ap ap ap ap -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO iO @@ -12571,29 +12571,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -12713,29 +12713,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -12855,29 +12855,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -12997,29 +12997,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13139,29 +13139,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13281,29 +13281,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13423,29 +13423,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13565,29 +13565,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cg -cg -cg -cg -cg -cg -cg -cg -cg -cg -cf -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13707,29 +13707,29 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -cf -cf -cf -cf -cf -cf -cg -cg -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13802,44 +13802,6 @@ ap ap ap ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -13849,29 +13811,67 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -13944,44 +13944,6 @@ ap ap ap ap -ae -Vu -Vu -Vu -Vu -Vu -Vu -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -13991,29 +13953,67 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -cf -cf -cf -cf -cf -cf -ch -cg -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -14086,44 +14086,6 @@ ap ap ap ap -ae -Vu -Ru -wn -Cy -eS -Vu -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14133,29 +14095,67 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -14228,44 +14228,6 @@ ap ap ap ap -ae -Vu -Vu -Vu -Cy -gU -Vu -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14275,29 +14237,67 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cf -cf -cf -cf -cf -cf -cf -cf -cf -cg -cg -cf -cf -cf -ce +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap ap iO El @@ -14370,44 +14370,6 @@ ap ap ap ap -ae -Vu -Vu -Vu -Cy -eS -Vu -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14417,30 +14379,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cg -cg -cg -cg -cg -cg -cg -cg -cg -cg -cg -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Jz +Bd +Bd +Bd +Bd iO El El @@ -14512,44 +14512,6 @@ ap ap ap ap -ae -Vu -kn -Ru -Cy -eS -Vu -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14559,30 +14521,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -14654,44 +14654,6 @@ ap ap ap ap -ae -Vu -Vu -Vu -Vu -Vu -Vu -ae -ae -ae -ae -af -dZ -dZ -dZ -dZ -dZ -Rh -dZ -dZ -dZ -dZ -dZ -dZ -Rh -dZ -dZ -dZ -dZ -dZ -af -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14701,30 +14663,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -14796,44 +14796,6 @@ ap ap ap ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ai -Al -Al -XE -Sl -Al -Al -XE -Al -Al -Al -Al -XE -Al -Al -Sl -XE -Al -Al -SG -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14843,30 +14805,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -14938,44 +14938,6 @@ ap ap ap ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ai -ET -ET -OR -Pe -Pe -Ri -OR -Pe -Rs -Rt -Pe -OR -Ri -RA -RA -OR -ET -ET -SG -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -14985,30 +14947,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +JL +JL +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15080,44 +15080,6 @@ ap ap ap ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -zK -Fp -OR -Pg -Rd -Rg -QW -Rk -Re -Rg -QX -Rw -Ry -QW -Rg -RD -Pg -OR -Fp -zK -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -15127,30 +15089,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +JL +JL +jf +jf +jf +jf +JL +JL +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15222,44 +15222,6 @@ ap ap ap ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ai -ET -Pe -Qa -Re -Rg -QW -QX -Rm -Rg -QX -Re -Rg -QW -QW -QW -RF -Pe -ET -SG -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -15269,30 +15231,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +JL +jf +jf +Hf +jf +jf +jf +JL +JL +jf +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15364,44 +15364,6 @@ ap ap ap ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ai -ET -Pe -QW -QW -QW -QW -QW -QW -QW -QW -QW -QW -QW -QX -QX -Rg -Pe -ET -SG -ae -ae -ae -ae -ae -ae -ae ap ap ap @@ -15411,30 +15373,68 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +JL +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +jf +JL +JL +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15496,47 +15496,47 @@ dG eT dG fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ai -ET -Pe -QW -QW -QW -QW -QW -QW -QW -QW -QW -QW -QW -QX -QX -RG -Pe -ET -SG +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ae ae ae @@ -15553,30 +15553,30 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce -ap +Jz +jf +jf +JL +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15638,47 +15638,47 @@ dG dG dG fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ai -ET -Pe -QX -Re -Rg -QW -QX -Re -Rg -QX -Re -Rg -QW -QW -QW -QW -Pe -ET -SG +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ae ae ae @@ -15695,30 +15695,30 @@ ap ap ap ap -ce -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -cf -ce -ap +Jz +jf +jf +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +Gs +Gs +Gs +Bd iO El El @@ -15780,6 +15780,1616 @@ dG eJ dG fZ +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +JL +jf +jf +jf +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +iO +"} +(79,1,1) = {" +as +aM +be +bq +an +bS +bS +an +cQ +be +aM +dA +dG +dG +dG +ep +dG +dG +ed +dG +dG +fG +fZ +ae +Vu +Vu +Vu +Vu +Vu +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +iO +"} +(80,1,1) = {" +as +aM +bf +bp +an +bS +bS +an +cP +bf +aM +dA +dG +dG +dG +dG +dG +dG +dG +fG +dG +dG +fZ +ae +Vu +Ru +wn +Cy +eS +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +JL +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +iO +"} +(81,1,1) = {" +as +aN +be +ag +bB +bB +bB +bB +at +be +aN +dA +dG +ed +dG +dG +dG +dG +eJ +dG +eT +dG +fZ +ae +Vu +Vu +Vu +Cy +gU +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +JL +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +jf +JL +JL +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +iO +"} +(82,1,1) = {" +as +aM +bf +bB +bB +ao +aA +bB +bB +bf +aM +dA +dG +dG +dG +dG +dG +dG +dG +dG +dG +dG +fZ +ae +Vu +Vu +Vu +Cy +eS +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +af +dZ +dZ +dZ +dZ +dZ +Rh +dZ +dZ +dZ +dZ +dZ +dZ +Rh +dZ +dZ +dZ +dZ +dZ +af +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +JL +jf +jf +jf +jf +jf +jf +JL +JL +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +iO +"} +(83,1,1) = {" +as +aN +be +bB +ao +ax +aB +aA +bB +bf +aN +dA +dG +dG +ep +dG +eT +dG +dG +dG +eJ +dG +fZ +ae +Vu +kn +Ru +Cy +eS +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +Al +Al +XE +Sl +Al +Al +XE +Al +Al +Al +Al +XE +Al +Al +Sl +XE +Al +Al +SG +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +JL +JL +jf +jf +jf +jf +JL +JL +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +iO +"} +(84,1,1) = {" +as +aM +bf +bB +at +bU +bU +ag +bB +be +aM +dA +dG +dG +dG +dG +dG +dG +ed +dG +dG +fG +fZ +ae +Vu +Vu +Vu +Vu +Vu +Vu +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +ET +OR +Pe +Pe +Ri +OR +Pe +Rs +Rt +Pe +OR +Ri +RA +RA +OR +ET +ET +SG +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +JL +JL +JL +JL +JL +JL +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +El +jQ +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +iO +"} +(85,1,1) = {" +ar +aL +aL +aL +aL +aL +aL +aL +aL +aL +aL +ar +aL +aL +aL +aL +aL +aL +aL +aL +aL +aL +ar +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +zK +Fp +OR +Pg +Rd +Rg +QW +Rk +Re +Rg +QX +Rw +Ry +QW +Rg +RD +Pg +OR +Fp +zK +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +iO +"} +(86,1,1) = {" +as +aO +bg +bg +bG +bV +bV +bV +bV +bV +dq +dA +dI +dH +dH +eL +eL +eL +eL +eL +eL +eL +fZ +ae +ap +ap +ap +ap +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +Pe +Qa +Re +Rg +QW +QX +Rm +Rg +QX +Re +Rg +QW +QW +QW +RF +Pe +ET +SG +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +iO +"} +(87,1,1) = {" +as +aP +bg +bg +bG +bV +bV +bV +bV +bV +bV +dA +dH +dH +dH +eK +eK +eK +eK +eK +eK +eK +fZ +ae +ap +ap +ap +ap +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +Pe +QW +QW +QW +QW +QW +QW +QW +QW +QW +QW +QW +QX +QX +Rg +Pe +ET +SG +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Jz +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +jf +Gs +Gs +Gs +Bd +iO +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +Pi +El +El +El +El +El +El +iO +"} +(88,1,1) = {" +as +aP +bg +bg +bG +bW +ct +ct +ct +dj +bV +dA +dH +dH +dH +eK +eV +fn +fn +fn +fO +eK +fZ +ae +ap +ap +ap +ap +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +Pe +QW +QW +QW +QW +QW +QW +QW +QW +QW +QW +QW +QX +QX +RG +Pe +ET +SG +ae +ae +ae +ae +ae +ae +ae +ap +ap +ap +ap +ap +ap +ap +ap +ap +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +Bd +iO +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +iO +"} +(89,1,1) = {" +as +aP +bg +bg +bG +bX +cu +cu +cu +dk +bV +dA +dH +ee +eq +eK +eW +fo +fo +fo +fP +eK +fZ +ae +ap +ap +ap +ap +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +Pe +QX +Re +Rg +QW +QX +Re +Rg +QX +Re +Rg +QW +QW +QW +QW +Pe +ET +SG +ae +ae +ae +ae +ae +ae +ae ap ap ap @@ -15790,6 +17400,100 @@ ap ap ap ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +iO +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +El +Pi +El +El +El +El +El +El +El +iO +"} +(90,1,1) = {" +as +aP +bg +bg +bG +bX +cu +cu +cu +dk +bV +dA +dH +ef +eq +eK +eW +fo +fo +fo +fP +eK +fZ +ae +ap +ap +ap +ap +ap +ap +ae +ae +ae ae ae ae @@ -15868,1710 +17572,6 @@ El El El El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -iO -"} -(79,1,1) = {" -as -aM -be -bq -an -bS -bS -an -cQ -be -aM -dA -dG -dG -dG -ep -dG -dG -ed -dG -dG -fG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ai -ET -ET -OR -Pe -Pe -Rj -OR -Pe -Rt -Rt -Pe -OR -Rj -RA -RA -OR -ET -ET -SG -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -iO -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -iO -"} -(80,1,1) = {" -as -aM -bf -bp -an -bS -bS -an -cP -bf -aM -dA -dG -dG -dG -dG -dG -dG -dG -fG -dG -dG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ai -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -Rc -SG -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -ap -iO -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -iO -"} -(81,1,1) = {" -as -aN -be -ag -bB -bB -bB -bB -at -be -aN -dA -dG -ed -dG -dG -dG -dG -eJ -dG -eT -dG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -Vg -Vg -Vg -Vl -Vh -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Jx -Zt -aj -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -iO -"} -(82,1,1) = {" -as -aM -bf -bB -bB -ao -aA -bB -bB -bf -aM -dA -dG -dG -dG -dG -dG -dG -dG -dG -dG -dG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -Vg -Nr -Th -JR -Nq -Nq -Nq -Nq -Nq -Nq -Yx -Nq -Nq -Nq -Nq -Yx -Nq -Nq -Nq -Nq -Nq -Nq -dZ -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -iO -"} -(83,1,1) = {" -as -aN -be -bB -ao -ax -aB -aA -bB -bf -aN -dA -dG -dG -ep -dG -eT -dG -dG -dG -eJ -dG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -Vg -SW -Ti -Rq -Nq -Nq -Nq -Nq -Nq -Nq -wd -dZ -TY -Vv -dZ -dZ -Nq -Nq -Nq -Nq -Nq -Nq -dZ -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -iO -"} -(84,1,1) = {" -as -aM -bf -bB -at -bU -bU -ag -bB -be -aM -dA -dG -dG -dG -dG -dG -dG -ed -dG -dG -fG -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -Vg -Tf -Tj -Rv -QY -Pf -XH -SH -SH -QY -TI -Rr -SV -SV -Rr -TI -QY -SH -SH -XH -Pf -QY -dZ -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -El -jQ -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -iO -"} -(85,1,1) = {" -ar -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ar -aL -aL -aL -aL -aL -aL -aL -aL -aL -aL -ar -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -wy -Vg -Vg -Vg -Vg -TI -TI -TI -TI -TI -TI -dZ -Ru -Ru -Ru -Ru -dZ -dZ -dZ -dZ -dZ -dZ -dZ -dZ -VI -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -ML -ML -ML -ML -ML -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -iO -"} -(86,1,1) = {" -as -aO -bg -bg -bG -bV -bV -bV -bV -bV -dq -dA -dI -dH -dH -eL -eL -eL -eL -eL -eL -eL -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -yA -Ga -xe -wl -TZ -Vi -Vi -Vi -VJ -Vi -VS -Vu -YE -Ru -Ru -Wt -WE -Xs -XC -Zp -VI -Yr -Zw -YI -VI -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -iO -"} -(87,1,1) = {" -as -aP -bg -bg -bG -bV -bV -bV -bV -bV -bV -dA -dH -dH -dH -eK -eK -eK -eK -eK -eK -eK -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -rE -Ga -Iq -wl -Up -Vj -Vj -Vj -Vj -Vj -VU -Vu -Ru -Ru -Ru -Wv -WJ -Xv -XD -XD -VI -Ys -XD -YJ -VI -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -Pi -El -El -El -El -El -El -iO -"} -(88,1,1) = {" -as -aP -bg -bg -bG -bW -ct -ct -ct -dj -bV -dA -dH -dH -dH -eK -eV -fn -fn -fn -fO -eK -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -HQ -Ga -Ga -wl -Up -Vj -Vj -Vj -Vj -Vj -VU -Vu -Ru -Ru -Ru -Wv -WK -Xw -XD -XD -VI -Yu -XD -YJ -VI -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -iO -"} -(89,1,1) = {" -as -aP -bg -bg -bG -bX -cu -cu -cu -dk -bV -dA -dH -ee -eq -eK -eW -fo -fo -fo -fP -eK -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -pb -Ga -ME -wl -Uu -Vj -Vj -Vm -Vj -Vj -XU -Vu -Ru -Ru -Ru -Wt -WE -Xx -Zk -XV -Yl -Zs -Yy -XD -VI -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -El -Pi -El -El -El -El -El -El -El -iO -"} -(90,1,1) = {" -as -aP -bg -bg -bG -bX -cu -cu -cu -dk -bV -dA -dH -ef -eq -eK -eW -fo -fo -fo -fP -eK -fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -wy -kr -Ga -Cw -wl -Up -Vj -Vj -Vm -Vj -Vj -VU -Vu -Ru -Ru -Zi -VI -VI -VI -VI -VI -VI -VI -VI -Yl -VI -Xi -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap -ap -ap -ap -ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI -ap -iO -El -El -El -El -El -El Pi Pi El @@ -17626,10 +17626,7 @@ fo fP eK fZ -ap -ap -ap -ap +ae ap ap ap @@ -17642,33 +17639,36 @@ ae ae ae ae -wy -Ct -Ga -kh -wl -Ur -Vm -Vj -Vj -Vj -Vj -VU -Vu -Ru -Ru -Ru -VM -VQ -WN -VZ -VQ -VQ -WH -ZD -WW -Xe -Xi +ae +ae +ae +ae +ae +ae +ae +ae +ai +ET +ET +OR +Pe +Pe +Rj +OR +Pe +Rt +Rt +Pe +OR +Rj +RA +RA +OR +ET +ET +SG +ae +ae ae ae ae @@ -17683,29 +17683,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -17768,49 +17768,49 @@ fo fP eK fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap ae ae ae ae ae ae -wy -wy -wy -wy -wl -Up -Vj -Vj -Vj -Vj -Vj -VU -TJ -Ru -Ru -Ru -WB -VR -Wb -Wl -Wz -VQ -WH -WO -WW -Xf -Xi +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ai +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +Rc +SG +ae +ae ae ae ae @@ -17825,29 +17825,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -17910,16 +17910,47 @@ fo fP eK fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +ae +ae +ae +ae +ae +Vg +Vg +Vg +Vl +Vh +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Jx +Zt +aj ae ae ae @@ -17927,37 +17958,6 @@ ae ae ae ae -ae -ae -ae -wl -Up -Vj -Vj -Vj -Vj -Vj -VU -Vw -Ru -Ru -Ru -VK -VR -Wc -Wm -Wz -VQ -WH -WP -WW -Xg -Xi -ae -ae -ae -ae -ae ap ap ap @@ -17967,29 +17967,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -18052,49 +18052,49 @@ fH fQ eK fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Up -Vj -Vj -Vj -Vj -Vj -VU Vu -YE Ru Ru -VL -VQ -Wd -Wd -VQ -VQ -WH -WQ -WW -Xh -Xi +xM +Ru +Ru +Ru +Ru +xM +Ru +Ru +Ru +Vu +ae +ae +ae +ae +ae +Vg +Nr +Th +JR +Nq +Nq +Nq +Nq +Nq +Nq +Yx +Nq +Nq +Nq +Nq +Yx +Nq +Nq +Nq +Nq +Nq +Nq +dZ +ae +ae ae ae ae @@ -18109,29 +18109,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -18194,49 +18194,49 @@ eK eK eK fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Up -Vj -Vm -Vj -VN -Vj -VU Vu Ru Ru Ru -WB -VQ -VQ -VQ -VQ -VQ -WH -WR -WW -Zh -Xi +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Vu +ae +ae +ae +ae +ae +Vg +SW +Ti +Rq +Nq +Nq +Nq +Nq +Nq +Nq +wd +dZ +TY +Vv +dZ +dZ +Nq +Nq +Nq +Nq +Nq +Nq +dZ +ae +ae ae ae ae @@ -18251,29 +18251,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -18336,49 +18336,49 @@ aL aL aL ar -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Uu -Vj -Vj -Vj -Vj -Vj -Yt +Vu +YE +Ru +Vu +Vu +Vu +Vu +Vu +Vu Vu Ru -Ru -Ru -WB -VQ -VZ -VZ -VQ -VQ -WH -WV -WW -WW -Xi +Zi +Vu +ae +ae +ae +ae +ae +Vg +Tf +Tj +Rv +QY +Pf +XH +SH +SH +QY +TI +Rr +SV +SV +Rr +TI +QY +SH +SH +XH +Pf +QY +dZ +ae +ae ae ae ae @@ -18393,29 +18393,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -18478,49 +18478,49 @@ fz fz fS fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Up -Vj -Vj -Vj -Vm -Vj -VU Vu Ru Ru +Vu +VW +wj +wj +wj +BK +Vu Ru -WB -VR -We -Wo -Wz -VQ -VQ -VQ -ZE -VM -Xi +Ru +Vu +ae +ae +ae +wy +wy +Vg +Vg +Vg +Vg +TI +TI +TI +TI +TI +TI +dZ +Ru +Ru +Ru +Ru +dZ +dZ +dZ +dZ +dZ +dZ +dZ +dZ +VI +ae ae ae ae @@ -18535,29 +18535,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -ML -zb -qn -pF -qn -tD -ML -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap iO El @@ -18620,48 +18620,48 @@ ei ei fJ fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Us -Vn -Vj -Vj -Vm -VO -VP Vu Ru Ru -Zi -WB -VR -Wk -Wu -Wz -VQ -VQ -VQ -WZ -VM +Vu +sl +cj +Dk +Dk +Dk +yK +Ru +Ru +Vu +ae +ae +ae +wy +yA +Ga +xe +wl +TZ +Vi +Vi +Vi +VJ +Vi +VS +Vu +YE +Ru +Ru +Wt +WE +Xs +XC +Zp +VI +Yr +Zw +YI +VI ae ae ae @@ -18677,29 +18677,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -ML -zb -zb -tD -tD -qn -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cf +cf +cf +cf +ce ap iO El @@ -18762,48 +18762,48 @@ fJ fz fS fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae +Vu +Ru +Ru +Vu +sl +Lg +tC +tC +tC +ym +Ru +Ru +Vu ae ae ae +wy +rE +Ga +Iq wl -Ut -Us -Vs -VB -Vs -VP -Ut +Up +Vj +Vj +Vj +Vj +Vj +VU Vu Ru Ru Ru -VK -VQ -Wd -Wd -VQ -VZ -VZ -VQ -Xa -VM +Wv +WJ +Xv +XD +XD +VI +Ys +XD +YJ +VI ae ae ae @@ -18819,29 +18819,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +cf +cf +cf +cf +cf +cf +cg +cg +cf +cf +cf +ce ap iO El @@ -18904,48 +18904,48 @@ fJ ei fT fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae +Vu +Ru +Ru +Vu +DF +JZ +JZ +JZ +qz +Vu +Ru +Ru +Vu ae ae ae +wy +HQ +Ga +Ga wl -wl -Vo -Vo -Vo -Vo -Vo -wl +Up +Vj +Vj +Vj +Vj +Vj +VU Vu Ru Ru Ru -VL -VQ -VQ -VQ -VR -WA -WI -Wz -Xb -VM +Wv +WK +Xw +XD +XD +VI +Yu +XD +YJ +VI ae ae ae @@ -18961,29 +18961,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +ce ap iO iO @@ -19046,48 +19046,48 @@ fJ fA fU fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae +Vu +YE +Ru +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Ru +Zi +Vu ae ae ae +wy +pb +Ga +ME wl -TZ -Vi -Vi -Vi -Vi -Vi -VX +Uu +Vj +Vj +Vm +Vj +Vj +XU Vu Ru Ru Ru -WB -VQ -VQ -VQ -VR -WF -WL -Wz -Xc -VM +Wt +WE +Xx +Zk +XV +Yl +Zs +Yy +XD +VI ae ae ae @@ -19103,29 +19103,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +cf +cf +cf +cf +cf +cf +ch +cg +cf +cf +cf +ce ap ap ap @@ -19188,49 +19188,49 @@ ei ei fJ fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae +Vu +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Ru +Vu ae ae ae +wy +kr +Ga +Cw wl -Va -Vp -Ut -Ut -Ut -Ut +Up +Vj +Vj +Vm +Vj +Vj VU Vu -YE Ru Ru -VM -VY -ZC -VQ -VQ -Wd -Wd -ZC -Xd -VM -ae +Zi +VI +VI +VI +VI +VI +VI +VI +VI +Yl +VI +Xi ae ae ae @@ -19245,29 +19245,29 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI +ce +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +ce ap Jz Jz @@ -19330,53 +19330,49 @@ fA fA fU fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae +Vu +Ru +Ru +MK +Ru +Ru +Ru +Ru +MK +Ru +Ru +Ru +Vu ae ae ae +wy +Ct +Ga +kh wl -Up -Vq -Ut -Vr -Vr -Ut +Ur +Vm +Vj +Vj +Vj +Vj VU Vu Ru Ru Ru VM -VM -VM -VM -VM -VM -VM -VM -VM -VM -VM -ae -ae -ae -ae +VQ +WN +VZ +VQ +VQ +WH +ZD +WW +Xe +Xi ae ae ae @@ -19387,29 +19383,33 @@ ap ap ap ap -oI -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -qn -oI +ap +ap +ap +ap +ce +cf +cf +cf +cf +cf +cf +cg +cf +cf +cf +cf +cf +cf +cf +cf +cf +cg +cg +cf +cf +cf +ce ap Jz jf @@ -19472,53 +19472,49 @@ bh aG aG fZ -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -wl -Uu -Ut -Vt -Ut -Ut -Ut -XU Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +Vu +ae +ae +ae +wy +wy +wy +wy +wl +Up +Vj +Vj +Vj +Vj +Vj +VU +TJ Ru Ru Ru -Vd -WS -WS -Zl -XX -Ym -Vd -YB -YK -YP -Vd -ae -ae -ae -ae +WB +VR +Wb +Wl +Wz +VQ +WH +WO +WW +Xf +Xi ae ae ae @@ -19529,29 +19525,33 @@ ap ap ap ap -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI -oI +ap +ap +ap +ap +ce +cf +cf +cf +cf +cf +cf +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cg +cf +cf +cf +cf +ce ap Jz jf @@ -19636,31 +19636,27 @@ ae ae wl Up -Ut -Ut -Ut -Ut -VD +Vj +Vj +Vj +Vj +Vj VU -Vu +Vw Ru Ru Ru -WC -WT -WS -XJ -XZ -WS -Vd -YC -YL -YP -Vd -ae -ae -ae -ae +VK +VR +Wc +Wm +Wz +VQ +WH +WP +WW +Xg +Xi ae ae ae @@ -19675,25 +19671,29 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -19778,31 +19778,27 @@ ae ae wl Up -Ut -Vr -Ut -Ut -Ut -Wh +Vj +Vj +Vj +Vj +Vj +VU Vu +YE Ru Ru -Zi -Ve -WS -WS -XK -Ya -WS -Vd -YD -YM -XN -Vd -ae -ae -ae -ae +VL +VQ +Wd +Wd +VQ +VQ +WH +WQ +WW +Xh +Xi ae ae ae @@ -19817,25 +19813,29 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -19920,31 +19920,27 @@ ae ae wl Up -Ut -Ut -Ut -Ut -Ut +Vj +Vm +Vj +VN +Vj VU -TJ +Vu Ru Ru Ru -Xk -WS -WS -XM -XZ -WS -Vd -YC -YN -YQ -Vd -ae -ae -ae -ae +WB +VQ +VQ +VQ +VQ +VQ +WH +WR +WW +Zh +Xi ae ae ae @@ -19959,25 +19955,29 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20061,32 +20061,28 @@ ae ae ae wl -Up -Vr -Ut -Ut -Ut -Ut -VU -Vw +Uu +Vj +Vj +Vj +Vj +Vj +Yt +Vu Ru Ru Ru -Xm -WS -WS -XN -Yb -Zq -Vd -Zx -XZ -YT -Vd -ae -ae -ae -ae +WB +VQ +VZ +VZ +VQ +VQ +WH +WV +WW +WW +Xi ae ae ae @@ -20101,25 +20097,29 @@ ap ap ap ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20204,47 +20204,27 @@ ae ae wl Up -Ut -Ut -VD -Ut -Vr -VV +Vj +Vj +Vj +Vm +Vj +VU Vu Ru Ru Ru -Xn -WS -WS -WS -WS -WS -Vd -XN -WS -YU -Vd -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +WB +VR +We +Wo +Wz +VQ +VQ +VQ +ZE +VM +Xi ae ae ae @@ -20259,9 +20239,29 @@ ap ap ap ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20345,47 +20345,27 @@ ae ae ae wl -Up -Ut -Ut -Ut -Ut -Ut -VU +Us +Vn +Vj +Vj +Vm +VO +VP Vu -YE Ru Ru -WC -WT -WS -WS -WS -WS -Vd -Vd -Yw -Vd -Vd -Vd -Vd -Vd -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +Zi +WB +VR +Wk +Wu +Wz +VQ +VQ +VQ +WZ +VM ae ae ae @@ -20401,9 +20381,29 @@ ap ap ap ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20487,47 +20487,27 @@ ae ae ae wl -Uu Ut -Vr +Us +Vs +VB +Vs +VP Ut -Ut -Ut -XU Vu Ru Ru Ru -WC -WT -WS -WS -WS -WS -Vd -Ym -WS -WS -WS -WS -Zf -Vd -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +VK +VQ +Wd +Wd +VQ +VZ +VZ +VQ +Xa +VM ae ae ae @@ -20543,9 +20523,29 @@ ap ap ap ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20629,47 +20629,27 @@ ae ae ae wl -Up -Ut -Ut -Ut -Ut -VD -VU +wl +Vo +Vo +Vo +Vo +Vo +wl Vu Ru Ru Ru -WC -WT -WS -WS -WS -WS -Yv -WS -WS -WS -YY -WS -WS -Vd -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +VL +VQ +VQ +VQ +VR +WA +WI +Wz +Xb +VM ae ae ae @@ -20685,9 +20665,29 @@ ap ap ap ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20771,47 +20771,27 @@ ae ae ae wl -Us -Vn -Ut -VE -Ut -VO -VP +TZ +Vi +Vi +Vi +Vi +Vi +VX Vu Ru Ru Ru -Vd -WS -WS -Zn -WS -WS -WS -WS -WS -WS -YZ -WS -Zq -Vd -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +WB +VQ +VQ +VQ +VR +WF +WL +Wz +Xc +VM ae ae ae @@ -20827,9 +20807,29 @@ ap ap ap ap -ap -ap -ap +ce +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +cf +ce ap Jz jf @@ -20913,56 +20913,33 @@ ae ae ae wl +Va +Vp Ut -Us -Vs -VF -Vs -VP Ut +Ut +Ut +VU Vu +YE Ru Ru -Zi -Vd -Vd -Vd -Vd -Vd -Vd -Vd -YF -WS -WS -WS -WS -WS -Vd +VM +VY +ZC +VQ +VQ +Wd +Wd +ZC +Xd +VM ae ae ae ae ae ae -TK -TM -TK -TM -TM -TM -TM -TM -TM -TK -TM -TM -TK -ae -ae -ae -ap -ap -ap ap ap ap @@ -20972,6 +20949,29 @@ ap ap ap ap +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce +ce ap Jz jf @@ -21055,52 +21055,34 @@ ae ae ae wl -wl -Vo -Vo -Vo -Vo -Vo -wl +Up +Vq +Ut +Vr +Vr +Ut +VU Vu Ru Ru Ru -Vd -WU -Xy -XP -Yc -Yc -Vd -Zy -WS -WS -WS -WS -WS -Vd +VM +VM +VM +VM +VM +VM +VM +VM +VM +VM +VM ae ae ae ae ae ae -TM -TN -TK -TT -TX -Ua -Ud -Ug -Ug -TK -TU -Uk -TM -ae -ae ae ap ap @@ -21115,6 +21097,24 @@ ap ap ap ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap Jz jf jf @@ -21196,31 +21196,28 @@ ae ae ae ae -Vk -Vk -Vk -Vk -Vk -Vk -Vk -Vk -Uv +wl +Uu +Ut +Vt +Ut +Ut +Ut +XU +Vu Ru Ru Ru Vd -Xj -Xz -XQ -Yh -Yc +WS +WS +Zl +XX +Ym Vd -YH -WS -WS -Zb -WS -WS +YB +YK +YP Vd ae ae @@ -21228,21 +21225,6 @@ ae ae ae ae -TM -TP -TS -TU -TP -Ub -TP -TP -TU -TS -TU -Ul -TM -ae -ae ae ap ap @@ -21251,11 +21233,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI ap Jz jf @@ -21338,31 +21338,28 @@ ae ae ae ae -Vk -Vc -Vz -Vc -Vc -Vz -Vc -Wi -YR +wl +Up +Ut +Ut +Ut +Ut +VD +VU +Vu Ru Ru Ru +WC +WT +WS +XJ +XZ +WS Vd -Zj -XA -XR -Yj -Zr -Yg -WS -WS -WS -Zc -WS -WS +YC +YL +YP Vd ae ae @@ -21370,21 +21367,6 @@ ae ae ae ae -TM -TQ -TK -TV -TP -TP -TP -TP -Ui -TK -TU -Um -TM -ae -ae ae ap ap @@ -21393,11 +21375,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -21480,31 +21480,28 @@ ae ae ae ae -Vk -Vc -Vc -Vc -Vc -Vc -Vc -Vk -UE -Ru +wl +Up +Ut +Vr +Ut +Ut +Ut +Wh +Vu Ru Ru +Zi +Ve +WS +WS +XK +Ya +WS Vd -Xr -XB -YW -YW -YW -Yw -WS -WS -WS -WS -WS -Zq +YD +YM +XN Vd ae ae @@ -21512,21 +21509,6 @@ ae ae ae ae -TM -TR -TM -TW -TU -Uc -Uf -Uh -Uj -TM -TU -Uo -TM -ae -ae ae ap ap @@ -21535,11 +21517,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -21622,31 +21622,28 @@ ae ae ae ae -Vk -Vf -Vk -Vy -Vk -Vy -Vg -Vg -Vg -Wq -Ws -Ws -Vg -Vg -Vg +wl +Up +Ut +Ut +Ut +Ut +Ut +VU +TJ +Ru +Ru +Ru +Xk WS WS +XM +XZ WS Vd -WS -WS -WS -WS -WS -WS +YC +YN +YQ Vd ae ae @@ -21654,21 +21651,6 @@ ae ae ae ae -TK -TM -TK -TM -TM -TM -TM -TM -TM -TK -TM -TM -TK -ae -ae ae ap ap @@ -21677,11 +21659,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -21764,31 +21764,28 @@ ae ae ae ae -Vk -Vb -Vk -Xp -Vk -Xp -Vg -Wj -Wp -Ti -YG -Ti -Wp -Wj -Vg -XS -Yk -Yo +wl +Up +Vr +Ut +Ut +Ut +Ut +VU +Vw +Ru +Ru +Ru +Xm +WS +WS +XN +Yb +Zq Vd -Zz -YO -YV -Zd -Ze -Zg +Zx +XZ +YT Vd ae ae @@ -21797,26 +21794,6 @@ ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap ap ap ap @@ -21824,6 +21801,29 @@ ap ap ap ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -21906,31 +21906,28 @@ ae ae ae ae -Vk -Vk -Vk -Vk -Vk -Vk -Vg -Vg -Vg -Wp -Vg -Wp -Vg -Vg -Vg -Vd -Vd -Vd -Vd -Vd -Vd -Vd -Vd -Vd +wl +Up +Ut +Ut +VD +Ut +Vr +VV +Vu +Ru +Ru +Ru +Xn +WS +WS +WS +WS +WS Vd +XN +WS +YU Vd ae ae @@ -21939,26 +21936,6 @@ ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ap -ap -ap -ap -ap ap ap ap @@ -21966,6 +21943,29 @@ ap ap ap ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +ML +ML +ML +ML +ML +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22048,50 +22048,32 @@ ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -Vg -Wj -Vg -Wj -Vg -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +Up +Ut +Ut +Ut +Ut +Ut +VU +Vu +YE +Ru +Ru +WC +WT +WS +WS +WS +WS +Vd +Vd +Yw +Vd +Vd +Vd +Vd +Vd ae ae ae @@ -22103,11 +22085,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22182,58 +22182,40 @@ hz hK hP fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -Vg -Vg -Vg -Vg -Vg -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +Uu +Ut +Vr +Ut +Ut +Ut +XU +Vu +Ru +Ru +Ru +WC +WT +WS +WS +WS +WS +Vd +Ym +WS +WS +WS +WS +Zf +Vd ae ae ae @@ -22245,11 +22227,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22324,58 +22324,40 @@ hA hL hQ fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +Up +Ut +Ut +Ut +Ut +VD +VU +Vu +Ru +Ru +Ru +WC +WT +WS +WS +WS +WS +Yv +WS +WS +WS +YY +WS +WS +Vd ae ae ae @@ -22387,11 +22369,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22466,58 +22466,40 @@ hx hx hx fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +Us +Vn +Ut +VE +Ut +VO +VP +Vu +Ru +Ru +Ru +Vd +WS +WS +Zn +WS +WS +WS +WS +WS +WS +YZ +WS +Zq +Vd ae ae ae @@ -22529,11 +22511,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22608,58 +22608,40 @@ aL aL aL ar +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +Ut +Us +Vs +VF +Vs +VP +Ut +Vu +Ru +Ru +Zi +Vd +Vd +Vd +Vd +Vd +Vd +Vd +YF +WS +WS +WS +WS +WS +Vd ae ae ae @@ -22671,11 +22653,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22750,58 +22750,40 @@ hB hD hD fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +wl +wl +Vo +Vo +Vo +Vo +Vo +wl +Vu +Ru +Ru +Ru +Vd +WU +Xy +XP +Yc +Yc +Vd +Zy +WS +WS +WS +WS +WS +Vd ae ae ae @@ -22813,11 +22795,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -22892,58 +22892,40 @@ hC hC hC fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +Vk +Vk +Vk +Vk +Vk +Vk +Vk +Vk +Uv +Ru +Ru +Ru +Vd +Xj +Xz +XQ +Yh +Yc +Vd +YH +WS +WS +Zb +WS +WS +Vd ae ae ae @@ -22955,11 +22937,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23034,58 +23034,40 @@ hD hD hD fZ +ap +ap ae ae ae ae ae ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +Vk +Vc +Vz +Vc +Vc +Vz +Vc +Wi +YR +Ru +Ru +Ru +Vd +Zj +XA +XR +Yj +Zr +Yg +WS +WS +WS +Zc +WS +WS +Vd ae ae ae @@ -23097,11 +23079,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23176,59 +23176,41 @@ hD hD hD fZ -ae -ae -ae -Uw -Ux -Uw -Ux -Ux -Ux -Ux -Ux -Ux -Uw -Ux -Ux -Uw -ae -ae -ae -ae -ae -Sm -Sn -Sm -Sn -Sn -Sn -Sn -Sn -Sn -Sm -Sn -Sn -Sm +ap +ap ae ae ae ae ae ae -SX -SY -SX -SY -SY -SY -SY -SY -SY -SX -SY -SY -SX +Vk +Vc +Vc +Vc +Vc +Vc +Vc +Vk +UE +Ru +Ru +Ru +Vd +Xr +XB +YW +YW +YW +Yw +WS +WS +WS +WS +WS +Zq +Vd +ae ae ae ae @@ -23239,11 +23221,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23318,59 +23318,41 @@ hE hE hE fZ -ae -ae -ae -Ux -Uz -Uw -UG -UK -UM -UQ -US -US -Uw -UH -UW -Ux -ae -ae -ae -ae -ae -Sn -So -Sm -Su -SA -SB -SE -SK -SK -Sm -Sw -SQ -Sn +ap +ap ae ae ae ae ae ae -SY -SZ -SX -Tk -Tp -Tq -Tu -Ty -Ty -SX -Tl -TC -SY +Vk +Vf +Vk +Vy +Vk +Vy +Vg +Vg +Vg +Wq +Ws +Ws +Vg +Vg +Vg +WS +WS +WS +Vd +WS +WS +WS +WS +WS +WS +Vd +ae ae ae ae @@ -23381,11 +23363,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23460,59 +23460,41 @@ hD hD hR fZ -ae -ae -ae -Ux -UA -UF -UH -UA -UN -UA -UA -UH -UF -UH -UX -Ux -ae -ae -ae -ae -ae -Sn -Sp -Ss -Sw -Sp -SC -Sp -Sp -Sw -Ss -Sw -SR -Sn +ap +ap ae ae ae ae ae ae -SY -Ta -Td -Tl -Ta -Tr -Ta -Ta -Tl -Td -Tl -TD -SY +Vk +Vb +Vk +Xp +Vk +Xp +Vg +Wj +Wp +Ti +YG +Ti +Wp +Wj +Vg +XS +Yk +Yo +Vd +Zz +YO +YV +Zd +Ze +Zg +Vd +ae ae ae ae @@ -23523,11 +23505,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23602,59 +23602,41 @@ aL aL aL ar -ae -ae -ae -Ux -UC -Uw -UI -UA -UA -UA -UA -UU -Uw -UH -UY -Ux -ae -ae -ae -ae -ae -Sn -Sq -Sm -Sx -Sp -Sp -Sp -Sp -SO -Sm -Sw -SS -Sn +ap +ap ae ae ae ae ae ae -SY -Tb -SX -Tm -Ta -Ta -Ta -Ta -TA -SX -Tl -TE -SY +Vk +Vk +Vk +Vk +Vk +Vk +Vg +Vg +Vg +Wp +Vg +Wp +Vg +Vg +Vg +Vd +Vd +Vd +Vd +Vd +Vd +Vd +Vd +Vd +Vd +Vd +ae ae ae ae @@ -23665,11 +23647,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +ML +zb +qn +pF +qn +tD +ML +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23744,59 +23744,41 @@ hF hF hF fZ -ae -ae -ae -Ux -UD -Ux -UJ -UH -UP -UR -UT -UV -Ux -UH -UZ -Ux -ae -ae -ae -ae -ae -Sn -Sr -Sn -Sz -Sw -SD -SF -SN -SP -Sn -Sw -ST -Sn +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +Vg +Wj +Vg +Wj +Vg +ae +ae +ae +ae +ae +ae +ae +ae ae ae ae ae ae ae -SY -Tc -SY -To -Tl -Tt -Tx -Tz -TB -SY -Tl -TH -SY ae ae ae @@ -23807,11 +23789,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +ML +zb +zb +tD +tD +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -23886,59 +23886,41 @@ hF hF hF fZ -ae -ae -ae -Uw -Ux -Uw -Ux -Ux -Ux -Ux -Ux -Ux -Uw -Ux -Ux -Uw -ae -ae -ae -ae -ae -Sm -Sn -Sm -Sn -Sn -Sn -Sn -Sn -Sn -Sm -Sn -Sn -Sm +ap +ap +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +Vg +Vg +Vg +Vg +Vg +ae +ae +ae +ae +ae +ae +ae +ae ae ae ae ae ae ae -SX -SY -SX -SY -SY -SY -SY -SY -SY -SX -SY -SY -SX ae ae ae @@ -23949,11 +23931,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -24028,26 +24028,8 @@ hF hF hF fZ -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +ap +ap ae ae ae @@ -24091,11 +24073,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -24170,26 +24170,8 @@ hF hF hF fZ -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +ap +ap ae ae ae @@ -24233,11 +24215,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -24312,26 +24312,8 @@ hF hF hF fZ -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +ap +ap ae ae ae @@ -24375,11 +24357,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -24454,26 +24454,8 @@ hF hF hF fZ -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +ap +ap ae ae ae @@ -24517,11 +24499,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +oI ap Jz jf @@ -24596,26 +24596,8 @@ bb bb bb ar -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae +ap +ap ae ae ae @@ -24659,11 +24641,29 @@ ap ap ap ap -ap -ap -ap -ap -ap +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI +oI ap Jz Jz diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index f9bfc7dd653..ba1c1625cef 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -4270,9 +4270,6 @@ /turf/simulated/floor/tiled, /area/hallway/lower/first_west) "ahH" = ( -/obj/machinery/chemical_analyzer{ - dir = 4 - }, /obj/effect/floor_decal/borderfloor{ dir = 8 }, diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index e2d00d1157e..85e01af8050 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -243,7 +243,7 @@ /obj/machinery/alarm{ pixel_y = 22 }, -/turf/simulated/floor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aaC" = ( /obj/machinery/oxygen_pump/anesthetic, @@ -416,7 +416,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/turf/simulated/floor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aaQ" = ( /obj/effect/floor_decal/borderfloorwhite{ @@ -844,7 +844,7 @@ /obj/structure/cable{ icon_state = "0-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "abH" = ( /obj/effect/decal/cleanable/dirt, @@ -996,7 +996,7 @@ /area/maintenance/lower/north) "acc" = ( /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "acd" = ( /obj/machinery/computer/prisoner{ @@ -1164,7 +1164,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "act" = ( /obj/effect/decal/cleanable/dirt, @@ -1210,16 +1210,16 @@ "acx" = ( /obj/structure/catwalk, /obj/random/junk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "acy" = ( /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "acz" = ( /obj/structure/catwalk, /obj/machinery/light/small, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "acA" = ( /obj/machinery/door/airlock/maintenance/common, @@ -1261,7 +1261,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "acH" = ( /obj/effect/decal/cleanable/dirt, @@ -1335,7 +1335,7 @@ /obj/machinery/status_display{ pixel_y = 30 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "acT" = ( /obj/machinery/camera/network/medbay, @@ -1390,7 +1390,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "ada" = ( /obj/structure/catwalk, @@ -1403,7 +1403,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/supply{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adb" = ( /obj/effect/decal/cleanable/dirt, @@ -1472,7 +1472,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adg" = ( /obj/structure/catwalk, @@ -1488,7 +1488,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adh" = ( /obj/structure/catwalk, @@ -1501,7 +1501,7 @@ d2 = 8; icon_state = "0-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adi" = ( /obj/structure/catwalk, @@ -1580,7 +1580,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adr" = ( /obj/structure/railing{ @@ -1607,7 +1607,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adu" = ( /turf/simulated/wall, @@ -1697,7 +1697,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adF" = ( /obj/structure/catwalk, @@ -1715,7 +1715,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adG" = ( /obj/structure/railing{ @@ -1730,7 +1730,7 @@ dir = 4; icon_state = "pipe-c" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adI" = ( /obj/structure/catwalk, @@ -1743,14 +1743,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adJ" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adK" = ( /obj/structure/catwalk, @@ -1760,14 +1760,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "adL" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "adM" = ( /obj/structure/catwalk, @@ -1775,7 +1775,7 @@ dir = 4 }, /obj/random/junk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "adN" = ( /obj/structure/catwalk, @@ -1788,7 +1788,7 @@ /obj/random/maintenance/clean, /obj/random/maintenance/cargo, /obj/random/drinkbottle, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "adO" = ( /obj/structure/catwalk, @@ -1832,19 +1832,19 @@ /obj/structure/catwalk, /obj/effect/floor_decal/rust, /obj/random/junk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adV" = ( /obj/structure/catwalk, /obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adW" = ( /obj/structure/catwalk, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adX" = ( /obj/structure/catwalk, @@ -1862,7 +1862,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "adY" = ( /turf/simulated/wall, @@ -1878,7 +1878,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aea" = ( /obj/structure/catwalk, @@ -1891,7 +1891,7 @@ /obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aeb" = ( /obj/structure/catwalk, @@ -1905,7 +1905,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aec" = ( /obj/structure/catwalk, @@ -1918,7 +1918,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aed" = ( /obj/structure/catwalk, @@ -1931,16 +1931,16 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aee" = ( /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aef" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aeg" = ( /obj/structure/disposalpipe/segment{ @@ -1991,7 +1991,7 @@ dir = 4; icon_state = "pipe-c" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aek" = ( /obj/structure/catwalk, @@ -1999,14 +1999,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "ael" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aem" = ( /obj/structure/catwalk, @@ -2014,7 +2014,7 @@ dir = 2; icon_state = "pipe-c" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aen" = ( /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ @@ -2051,12 +2051,12 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aes" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aet" = ( /obj/structure/railing{ @@ -2092,7 +2092,7 @@ "aew" = ( /obj/effect/floor_decal/rust, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aex" = ( /obj/structure/catwalk, @@ -2102,12 +2102,12 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aey" = ( /obj/structure/catwalk, /obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aez" = ( /obj/structure/railing{ @@ -2244,7 +2244,7 @@ dir = 1 }, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aeQ" = ( /obj/structure/catwalk, @@ -2256,14 +2256,14 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aeR" = ( /obj/structure/catwalk, /obj/effect/floor_decal/techfloor/orange{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "aeS" = ( /obj/structure/railing{ @@ -2649,10 +2649,6 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/bar) -"afw" = ( -/obj/structure/catwalk, -/turf/simulated/open, -/area/maintenance/lower/bar) "afx" = ( /obj/structure/catwalk, /obj/structure/cable{ @@ -2660,7 +2656,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/open, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "afy" = ( /obj/structure/railing{ @@ -2785,7 +2781,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/structure/disposalpipe/down, -/turf/simulated/open, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "afO" = ( /obj/structure/railing{ @@ -2961,7 +2957,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/structure/disposalpipe/segment, -/turf/simulated/open, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "agd" = ( /obj/effect/floor_decal/techfloor{ @@ -3056,7 +3052,7 @@ "ago" = ( /obj/effect/floor_decal/techfloor/orange, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "agp" = ( /obj/structure/catwalk, @@ -3067,12 +3063,12 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "agq" = ( /obj/structure/catwalk, /obj/effect/floor_decal/techfloor/orange, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "agr" = ( /obj/structure/railing{ @@ -3156,17 +3152,7 @@ /obj/structure/catwalk, /obj/structure/ladder/up, /obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/lower/bar) -"agD" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "agE" = ( /obj/structure/railing{ @@ -3312,10 +3298,6 @@ /obj/structure/catwalk, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/bar) -"agX" = ( -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techmaint, -/area/maintenance/lower/bar) "agY" = ( /obj/structure/sign/department/chapel, /turf/simulated/wall, @@ -3394,15 +3376,6 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/storage) -"ahj" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/bar) "ahk" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ @@ -3410,7 +3383,7 @@ icon_state = "pipe-c" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "ahl" = ( /obj/structure/catwalk, @@ -3424,7 +3397,7 @@ /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/tool, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "ahm" = ( /obj/effect/floor_decal/rust, @@ -5718,7 +5691,7 @@ dir = 8; icon_state = "pipe-c" }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "alM" = ( /obj/effect/floor_decal/industrial/warning{ @@ -5953,7 +5926,7 @@ "amc" = ( /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/plating, /area/maintenance/lower/bar) "amd" = ( /obj/machinery/door/firedoor/glass, @@ -10706,14 +10679,14 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "auQ" = ( /obj/structure/catwalk, /obj/effect/floor_decal/corner_techfloor_grid{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "auR" = ( /obj/structure/railing{ @@ -10943,7 +10916,7 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "avj" = ( /obj/machinery/light_switch{ @@ -11015,11 +10988,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/south) -"avp" = ( -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "avq" = ( /obj/structure/disposalpipe/segment, @@ -11446,7 +11415,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "avZ" = ( /obj/structure/railing{ @@ -11533,7 +11502,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "awg" = ( /obj/effect/decal/cleanable/dirt, @@ -11550,7 +11519,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "awh" = ( /obj/effect/decal/cleanable/dirt, @@ -11566,7 +11535,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "awi" = ( /obj/machinery/door/firedoor/glass, @@ -11911,12 +11880,12 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "awO" = ( /obj/structure/catwalk, /obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "awP" = ( /obj/structure/railing{ @@ -11943,7 +11912,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "awR" = ( /obj/effect/decal/cleanable/dirt, @@ -12387,11 +12356,6 @@ "axB" = ( /turf/simulated/wall, /area/janitor) -"axC" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/south) "axD" = ( /obj/structure/railing{ dir = 8 @@ -12445,7 +12409,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "axJ" = ( /obj/effect/decal/cleanable/dirt, @@ -12892,7 +12856,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "ayp" = ( /obj/structure/catwalk, @@ -12903,7 +12867,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "ayq" = ( /obj/structure/catwalk, @@ -12919,7 +12883,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "ayr" = ( /obj/structure/railing{ @@ -13265,7 +13229,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "ayY" = ( /obj/structure/catwalk, @@ -13275,7 +13239,7 @@ icon_state = "4-8"; pixel_x = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "ayZ" = ( /obj/structure/catwalk, @@ -13286,14 +13250,14 @@ icon_state = "4-8"; pixel_x = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aza" = ( /obj/structure/catwalk, /obj/structure/cable{ icon_state = "1-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "azb" = ( /obj/effect/floor_decal/techfloor/corner{ @@ -14049,7 +14013,7 @@ icon_state = "1-2"; pixel_y = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "azR" = ( /obj/structure/railing{ @@ -15699,7 +15663,7 @@ }, /obj/random/junk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aCQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15710,7 +15674,7 @@ }, /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aCR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15723,7 +15687,7 @@ /obj/effect/floor_decal/techfloor, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aCS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15735,7 +15699,7 @@ /obj/structure/catwalk, /obj/effect/floor_decal/techfloor, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aCT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15756,17 +15720,7 @@ }, /obj/structure/catwalk, /obj/effect/floor_decal/techfloor, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/asmaint2) -"aCV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aCW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15969,7 +15923,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aDo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15984,7 +15938,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aDp" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -16003,7 +15957,7 @@ /obj/effect/floor_decal/techfloor{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "aDq" = ( /obj/structure/railing{ @@ -16208,7 +16162,7 @@ pixel_x = 0; pixel_y = 26 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aDR" = ( /obj/machinery/door/airlock/maintenance/common, @@ -16345,11 +16299,11 @@ pixel_y = 0 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aEh" = ( /obj/random/trash_pile, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aEi" = ( /obj/machinery/door/firedoor/glass, @@ -16568,7 +16522,7 @@ pixel_y = 0 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aEL" = ( /obj/structure/cable/green{ @@ -16771,7 +16725,7 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aFk" = ( /obj/structure/catwalk, @@ -16786,7 +16740,7 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aFl" = ( /obj/effect/floor_decal/rust, @@ -17023,14 +16977,14 @@ "aFQ" = ( /obj/structure/catwalk, /obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aFR" = ( /obj/structure/catwalk, /obj/machinery/alarm{ pixel_y = 22 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aFS" = ( /obj/effect/floor_decal/rust, @@ -17071,32 +17025,23 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/lower/atmos) -"aFY" = ( -/obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/atmos) "aFZ" = ( /obj/effect/floor_decal/techfloor, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/atmos) -"aGa" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/atmos) "aGb" = ( /obj/effect/floor_decal/techfloor, /obj/structure/catwalk, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/atmos) "aGc" = ( /obj/effect/floor_decal/techfloor, /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/atmos) "aGd" = ( /obj/effect/floor_decal/techfloor{ @@ -17104,7 +17049,7 @@ }, /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/atmos) "aGe" = ( /obj/structure/railing{ @@ -17212,7 +17157,7 @@ /obj/structure/catwalk, /obj/random/junk, /obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/atmos) "aGr" = ( /obj/effect/floor_decal/techfloor{ @@ -17234,7 +17179,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGt" = ( /obj/structure/railing{ @@ -17279,7 +17224,7 @@ d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGx" = ( /obj/machinery/light/small{ @@ -17324,7 +17269,7 @@ /obj/structure/railing{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGC" = ( /obj/machinery/atmospherics/pipe/simple/visible/supply{ @@ -17337,7 +17282,7 @@ dir = 1 }, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGD" = ( /obj/structure/railing, @@ -17353,7 +17298,7 @@ /obj/structure/railing{ dir = 8 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGE" = ( /obj/structure/railing, @@ -17366,7 +17311,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGF" = ( /obj/structure/railing, @@ -17382,7 +17327,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGG" = ( /obj/structure/railing, @@ -17401,7 +17346,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGH" = ( /obj/structure/railing, @@ -17417,7 +17362,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGI" = ( /obj/structure/railing, @@ -17436,7 +17381,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGJ" = ( /obj/structure/railing{ @@ -17457,7 +17402,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGK" = ( /obj/structure/catwalk, @@ -17475,7 +17420,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGL" = ( /obj/structure/catwalk, @@ -17490,7 +17435,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGM" = ( /obj/structure/catwalk, @@ -17506,7 +17451,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGN" = ( /obj/machinery/door/morgue{ @@ -17555,7 +17500,7 @@ d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGR" = ( /obj/structure/catwalk, @@ -17570,7 +17515,7 @@ d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aGS" = ( /obj/machinery/light_switch{ @@ -17662,14 +17607,14 @@ /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aHb" = ( /obj/structure/catwalk, /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aHc" = ( /turf/simulated/wall/r_wall, @@ -17760,7 +17705,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aHo" = ( /obj/structure/sign/department/telecoms, @@ -17966,7 +17911,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aHL" = ( /obj/structure/cable{ @@ -18126,7 +18071,7 @@ mat_efficiency = 0.9; name = "Legitimate Prosthetics Fabricator"; res_max_amount = 150000; - speed = 0.2 + speed = 0.2; req_access = list() }, /turf/simulated/floor/plating, @@ -18174,7 +18119,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/random/junk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aIm" = ( /obj/machinery/power/breakerbox/activated{ @@ -18419,7 +18364,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aIM" = ( /turf/simulated/wall, @@ -18636,7 +18581,7 @@ /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/clean, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aJj" = ( /obj/structure/sign/department/telecoms, @@ -18919,7 +18864,7 @@ "aJM" = ( /obj/structure/catwalk, /obj/effect/floor_decal/techfloor/corner, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aJN" = ( /obj/structure/catwalk, @@ -18932,7 +18877,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aJO" = ( /obj/machinery/door/airlock/highsecurity{ @@ -19442,7 +19387,7 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aKE" = ( /obj/structure/railing{ @@ -19451,7 +19396,7 @@ /obj/effect/floor_decal/techfloor{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aKF" = ( /obj/structure/sign/securearea, @@ -21754,7 +21699,7 @@ dir = 8; pixel_y = 0 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "aOV" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -23368,7 +23313,7 @@ /obj/structure/sign/warning/high_voltage{ pixel_y = 32 }, -/turf/simulated/floor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRn" = ( /obj/structure/catwalk, @@ -23380,7 +23325,7 @@ d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRo" = ( /obj/structure/cable/green{ @@ -23410,7 +23355,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRq" = ( /obj/machinery/light/small, @@ -23420,7 +23365,7 @@ icon_state = "4-8" }, /obj/structure/catwalk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRr" = ( /obj/structure/cable/green{ @@ -23890,7 +23835,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRX" = ( /obj/structure/cable{ @@ -23902,7 +23847,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aRY" = ( /obj/structure/railing{ @@ -24590,9 +24535,9 @@ /area/tether/surfacebase/medical/lowerhall) "aTd" = ( /obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aTe" = ( /obj/structure/catwalk, @@ -24600,16 +24545,16 @@ icon_state = "bulb1"; dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aTf" = ( /obj/structure/catwalk, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/atmospherics/pipe/manifold/visible/supply, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aTg" = ( /obj/structure/catwalk, @@ -24619,7 +24564,7 @@ /obj/machinery/alarm{ pixel_y = 22 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/mining) "aTh" = ( /obj/effect/floor_decal/rust, @@ -26264,7 +26209,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aVu" = ( /obj/machinery/power/sensor{ @@ -26350,7 +26295,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aVB" = ( /obj/structure/catwalk, @@ -26366,7 +26311,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/north) "aVC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28918,7 +28863,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 30 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "baa" = ( /obj/structure/catwalk, @@ -28937,7 +28882,7 @@ /obj/machinery/alarm{ pixel_y = 22 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bac" = ( /obj/structure/catwalk, @@ -28956,7 +28901,7 @@ /obj/machinery/status_display{ pixel_y = 30 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bad" = ( /obj/structure/catwalk, @@ -28972,7 +28917,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bae" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ @@ -29010,7 +28955,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bag" = ( /obj/item/device/radio/intercom{ @@ -29054,7 +28999,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "baj" = ( /obj/effect/floor_decal/corner_techfloor_grid{ @@ -29084,7 +29029,7 @@ /obj/random/maintenance/clean, /obj/random/maintenance/clean, /obj/random/maintenance/cargo, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bam" = ( /obj/effect/floor_decal/corner_techfloor_grid{ @@ -29097,7 +29042,7 @@ "ban" = ( /obj/structure/catwalk, /obj/random/junk, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/plating, /area/maintenance/lower/south) "bao" = ( /obj/machinery/door/airlock/maintenance/common, @@ -29399,6 +29344,20 @@ /obj/random/cutout, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/north) +"fYA" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4; + pixel_y = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/lower/mining) "kaa" = ( /obj/random/cutout, /turf/simulated/floor, @@ -38010,7 +37969,7 @@ axK axK axK aCv -aCV +aCT aBV aDH aDS @@ -40009,7 +39968,7 @@ aES aFb azl aEn -aFY +aEp aEQ aEQ aGX @@ -40435,7 +40394,7 @@ aES aFb azl aFK -aGa +aEQ aGo aDS boO @@ -40719,7 +40678,7 @@ aES aFb azl aFM -aGa +aEQ aGq aDS aGY @@ -40861,7 +40820,7 @@ aES aFb azl aFM -aGa +aEQ aFZ aGj aEo @@ -41003,7 +40962,7 @@ aES aFb azl aFN -aGa +aEQ aGr aDS aGZ @@ -41290,12 +41249,12 @@ aFO aGc aDS aGB -avp -avp -avp -avp -avp -avp +aDN +aDN +aDN +aDN +aDN +aDN aJM aKD arZ @@ -41574,7 +41533,7 @@ aDS aDS aDS aGD -avp +aDN arZ arZ arZ @@ -41716,7 +41675,7 @@ aac aac arZ aGE -avp +aDN arZ aac aac @@ -41858,7 +41817,7 @@ aac aac arZ aGE -avp +aDN arZ aac aac @@ -42000,7 +41959,7 @@ aac aac arZ aGF -avp +aDN arZ aac aac @@ -42142,7 +42101,7 @@ aac aac arZ aGG -avp +aDN aHo aHr aHr @@ -42426,7 +42385,7 @@ aac aac arZ aGI -avp +aDN aHq aHM aIn @@ -42503,7 +42462,7 @@ aSR aSr aSr acy -adf +fYA adr aaG aaG @@ -42568,7 +42527,7 @@ aac aac arZ aGJ -avp +aDN aHr aHN aIo @@ -42710,7 +42669,7 @@ aac aac arZ aGK -avp +aDN aHr aHV aIp @@ -43133,7 +43092,7 @@ arZ arZ arZ aFQ -avp +aDN aGs aGM arZ @@ -43274,7 +43233,7 @@ aDM aDM aDN aEs -avp +aDN aGe aGt aZC @@ -43558,7 +43517,7 @@ arZ arZ arZ arZ -avp +aDN aGf aGu aGO @@ -43700,7 +43659,7 @@ aac aac aac arZ -avp +aDN aGg aGv aGP @@ -43842,8 +43801,8 @@ aac aac aac arZ -avp -avp +aDN +aDN aGw aGQ arZ @@ -44099,10 +44058,10 @@ aYd avi arZ aFR -avp -avp -axC -axC +aDN +aDN +aDM +aDM arZ avk avW @@ -44240,16 +44199,16 @@ aRa aYd bac arZ -avp +aDN ban -avp -avp -axC +aDN +aDN +aDM arZ avl avW avW -axC +aDM ayo ayX aOT @@ -44383,9 +44342,9 @@ aYd bad arZ bal -avp -avp -avp +aDN +aDN +aDN arZ arZ avm @@ -44394,19 +44353,19 @@ awM axD ayp ayY -avp -avp +aDN +aDN aug -avp +aDN arZ arZ arZ arZ aDQ aEh -axC +aDM aEK -avp +aDN aFk azQ azQ @@ -44497,9 +44456,9 @@ adL aec aew aeP -afw -afw -afw +aee +aee +aee ago agC adu @@ -44643,10 +44602,10 @@ afx afN agc agp -agD -agD +agc +agc alL -ahj +afx ahA ahS aic @@ -44781,12 +44740,12 @@ adL aee aey aeR -afw -afw -afw +aee +aee +aee agq -agX -agX +aee +aee amc ahk ahB @@ -44806,20 +44765,20 @@ aZG aro aro aYd -avp -avp -avp -avp -avp -avp +aDN +aDN +aDN +aDN +aDN +aDN aug auQ -avp -avp +aDN +aDN awO -avp -avp -avp +aDN +aDN +aDN azT aAJ arZ diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 938995c9b24..a6148c79379 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -23111,7 +23111,7 @@ /obj/machinery/door/airlock/research{ name = "Xenobiology Equipment Storage"; req_access = list(); - req_one_access = list(47,55) + req_one_access = list(55) }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -25270,7 +25270,7 @@ /obj/machinery/door/airlock/research{ name = "Xenobiology Office"; req_access = list(); - req_one_access = list(47,55) + req_one_access = list(55) }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -25641,7 +25641,7 @@ /obj/machinery/door/airlock/research{ name = "Xenobiology Office"; req_access = list(); - req_one_access = list(47,55) + req_one_access = list(55) }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/steel, @@ -25872,7 +25872,7 @@ /obj/machinery/door/airlock/research{ name = "Xenobiology Autopsy Room"; req_access = list(); - req_one_access = list(47,55) + req_one_access = list(55) }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -26070,7 +26070,7 @@ /obj/machinery/door/airlock/research{ name = "Xenobiology Autopsy Room"; req_access = list(); - req_one_access = list(47,55) + req_one_access = list(55) }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/steel, diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index be5e661e85f..82e8d15d441 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -19644,7 +19644,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 5 }, -/obj/machinery/mineral/equipment_vendor/survey, +/obj/machinery/chemical_analyzer, /turf/simulated/floor/tiled, /area/tether/exploration/crew) "Ei" = ( diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm index d08d9a8871e..8235e79065e 100644 --- a/maps/tether/tether-07-station3.dmm +++ b/maps/tether/tether-07-station3.dmm @@ -204,11 +204,7 @@ /turf/simulated/floor/tiled/dark, /area/security/range) "aav" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable/green{ @@ -216,16 +212,15 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/command{ - id_tag = "HoSdoor"; - name = "Head of Security"; - req_access = list(58) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/obj/machinery/door/airlock/glass_security, +/turf/simulated/floor/tiled, +/area/security/hallway) "aaw" = ( /obj/effect/floor_decal/borderfloor{ dir = 1; @@ -1891,9 +1886,13 @@ /turf/simulated/floor/tiled, /area/security/hallwayaux) "acZ" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled, +/area/security/hallway) "ada" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -3244,13 +3243,6 @@ /area/security/hallway) "aff" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/cable/green{ @@ -3258,8 +3250,27 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/security/hallway) "afg" = ( /obj/structure/cable/cyan{ d1 = 1; @@ -3410,10 +3421,6 @@ /obj/structure/cable/green, /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) -"afs" = ( -/obj/structure/flora/pottedplant/stoutbush, -/turf/simulated/floor/tiled, -/area/security/hallway) "aft" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -7785,23 +7792,13 @@ /turf/simulated/floor, /area/crew_quarters/heads/hos) "ama" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized/full{ - id = "hos_office" - }, -/turf/simulated/floor, -/area/security/breakroom) +/obj/machinery/door/airlock/glass_security, +/turf/simulated/floor/tiled, +/area/security/hallway) "amb" = ( /obj/structure/grille, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced/polarized/full{ - id = "hos_office" - }, +/obj/structure/window/reinforced/full, /turf/simulated/floor, /area/security/forensics) "amc" = ( @@ -8169,32 +8166,6 @@ /obj/structure/closet/wardrobe/red, /turf/simulated/floor/tiled/dark, /area/security/security_lockerroom) -"amE" = ( -/obj/structure/grille, -/obj/structure/cable/green, -/obj/structure/cable/green{ - icon_state = "0-8" - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - icon_state = "0-4" - }, -/obj/structure/window/reinforced/polarized/full{ - id = "hos_office" - }, -/turf/simulated/floor, -/area/security/forensics) -"amF" = ( -/obj/structure/grille, -/obj/structure/cable/green{ - icon_state = "0-8" - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/window/reinforced/polarized/full{ - id = "hos_office" - }, -/turf/simulated/floor, -/area/security/forensics) "amG" = ( /obj/structure/window/reinforced{ dir = 4 @@ -8271,14 +8242,6 @@ }, /turf/simulated/floor, /area/lawoffice) -"amK" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/red/border, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/red/bordercorner2, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/security/hallway) "amL" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/red/border, @@ -9102,13 +9065,9 @@ /turf/simulated/floor/tiled/dark, /area/lawoffice) "aoa" = ( -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) @@ -9676,24 +9635,35 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) "apa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/security/hallway) "apb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -9709,6 +9679,25 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/hallway) "apc" = ( @@ -10114,13 +10103,6 @@ }, /turf/simulated/floor/tiled/white, /area/security/forensics) -"apC" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) "apD" = ( /obj/effect/floor_decal/borderfloor{ dir = 1; @@ -28277,13 +28259,13 @@ /turf/simulated/floor/tiled, /area/quartermaster/storage) "aSz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled, +/area/security/hallway) "aSA" = ( /obj/machinery/door/airlock/maintenance/cargo{ name = "Belter Shuttle Access"; @@ -28813,6 +28795,11 @@ dir = 1 }, /obj/machinery/mineral/equipment_vendor, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22; + pixel_y = 0 + }, /turf/simulated/floor/tiled, /area/quartermaster/belterdock/refinery) "aTC" = ( @@ -29165,19 +29152,26 @@ /turf/simulated/floor/tiled, /area/shuttle/excursion/general) "aUn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/wood, -/area/crew_quarters/heads/hos) +/turf/simulated/floor/tiled, +/area/security/hallway) "aUo" = ( /obj/structure/cable/green{ d1 = 4; @@ -29752,9 +29746,12 @@ /turf/simulated/floor/tiled, /area/shuttle/excursion/general) "aVx" = ( -/obj/machinery/camera/network/cargo, +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -32 + }, /turf/simulated/floor/tiled, -/area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) +/area/quartermaster/belterdock/gear) "aVy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -30029,13 +30026,14 @@ /turf/simulated/floor/tiled, /area/quartermaster/belterdock/refinery) "aWf" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28; +/obj/structure/closet/emcloset, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; pixel_y = 0 }, /turf/simulated/floor/tiled, -/area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) +/area/quartermaster/belterdock/refinery) "aWg" = ( /turf/simulated/floor/tiled, /area/shuttle/excursion/general) @@ -30124,6 +30122,7 @@ /turf/simulated/wall/rshull, /area/shuttle/excursion/cargo) "aWt" = ( +/obj/machinery/mineral/equipment_vendor/survey, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion/cargo) "aWu" = ( @@ -31290,11 +31289,7 @@ /turf/simulated/floor/tiled, /area/quartermaster/belterdock/refinery) "aYJ" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22; - pixel_y = 0 - }, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled, /area/quartermaster/belterdock/refinery) "aYK" = ( @@ -31449,14 +31444,9 @@ pixel_x = -28; pixel_y = 0 }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -25 - }, -/obj/structure/closet/emcloset, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled, -/area/quartermaster/belterdock/refinery) +/area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) "aZa" = ( /obj/machinery/door/airlock/hatch{ req_one_access = newlist() @@ -31779,9 +31769,6 @@ /obj/effect/map_helper/airlock/sensor/ext_sensor, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion/cargo) -"aZF" = ( -/turf/simulated/mineral/vacuum, -/area/crew_quarters/heads/hos) "aZG" = ( /obj/machinery/computer/shuttle_control/explore/excursion{ dir = 1; @@ -31958,14 +31945,8 @@ /turf/simulated/wall/r_wall, /area/security/security_lockerroom) "aZZ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - icon_state = "intact-scrubbers"; - dir = 5 - }, +/obj/machinery/camera/network/cargo, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) "baa" = ( @@ -32025,14 +32006,15 @@ "bah" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, /obj/structure/cable/green{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 + }, /turf/simulated/floor/tiled, /area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) "bai" = ( @@ -32072,12 +32054,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 2 + }, /turf/simulated/floor/tiled, /area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar) "bao" = ( @@ -32331,16 +32313,863 @@ /turf/simulated/floor/tiled/asteroid_steel/airless, /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/mining_outpost/shuttle) +"boY" = ( +/obj/machinery/door/airlock/glass_external, +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/obj/effect/map_helper/airlock/door/int_door, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/general) +"bpl" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"bvH" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"bDn" = ( +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ + dir = 1 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 4; + frequency = 1380; + id_tag = "securiship_docker"; + pixel_x = -28 + }, +/obj/effect/map_helper/airlock/atmos/pump_out_internal, +/obj/machinery/airlock_sensor{ + pixel_y = 28 + }, +/obj/effect/map_helper/airlock/sensor/chamber_sensor, +/obj/effect/shuttle_landmark{ + base_area = /area/space; + base_turf = /turf/space; + docking_controller = "securiship_bay"; + landmark_tag = "tether_securiship_dock"; + name = "Securiship Dock" + }, +/obj/effect/overmap/visitable/ship/landable/securiship, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/general) +"cwr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/rack/shelf, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"cNP" = ( +/obj/machinery/computer/ship/helm{ + req_one_access = list(67,58) + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"deE" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/cyan{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"doX" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/bed/chair/bay/chair/padded/beige{ + icon_state = "bay_chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"dSk" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 1 + }, +/obj/machinery/camera/network/security, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/security/hallway) +"ebj" = ( +/obj/machinery/door/airlock/glass_external, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/map_helper/airlock/door/simple, +/turf/simulated/floor/tiled, +/area/security/hallway) +"exP" = ( +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"ePT" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"eZd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 2; + icon_state = "pdoor0"; + id = "securiship blast"; + name = "Shuttle Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/shuttle/securiship/general) +"eZt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/table/rack/shelf, +/obj/machinery/alarm{ + breach_detection = 0; + dir = 8; + icon_state = "alarm0"; + pixel_x = 25; + rcon_setting = 3; + report_danger_level = 0 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"fxI" = ( +/obj/item/device/radio/intercom{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/filingcabinet, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"fGQ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/bed/chair/bay/chair, +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"gjM" = ( +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux, +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/obj/machinery/light/small{ + dir = 8; + pixel_x = 0 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/general) +"gkR" = ( +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact-fuel"; + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"gxX" = ( +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + alarms_hidden = 1; + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"gBp" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/bed/chair/bay/chair{ + icon_state = "bay_chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"gJa" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/engines) +"gSE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact-fuel"; + dir = 10 + }, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) "gUi" = ( /obj/effect/decal/cleanable/dirt, /obj/random/cutout, /turf/simulated/floor, /area/maintenance/station/ai) +"hoF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + icon_state = "map-fuel"; + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"hyn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact-fuel"; + dir = 6 + }, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) +"hEY" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"ifk" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/security/hallway) +"isz" = ( +/turf/simulated/wall/rshull, +/area/shuttle/securiship/general) +"iUO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"jjJ" = ( +/obj/machinery/power/terminal{ + icon_state = "term"; + dir = 1 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/table/standard, +/obj/item/weapon/tank/phoron, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"jnQ" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"jrx" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/fuel_port{ + dir = 1 + }, +/turf/simulated/floor/tiled/monofloor{ + dir = 1 + }, +/area/shuttle/securiship/engines) +"jxg" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/command{ + id_tag = "HoSdoor"; + name = "Head of Security"; + req_access = list(58) + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"jHa" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"klB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact-fuel"; + dir = 5 + }, +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"kqS" = ( +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + icon_state = "intact-aux"; + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"kAs" = ( +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"lmZ" = ( +/obj/machinery/door/airlock/glass_external, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/map_helper/airlock/door/ext_door, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/general) +"lFr" = ( +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/engines) +"lMN" = ( +/obj/structure/grille, +/obj/structure/cable/green, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "hos_office" + }, +/turf/simulated/floor, +/area/crew_quarters/heads/hos) +"mxs" = ( +/obj/effect/floor_decal/industrial/warning/full, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ + dir = 8 + }, +/obj/effect/map_helper/airlock/atmos/pump_out_external, +/turf/simulated/floor/airless, +/area/shuttle/securiship/general) +"mLa" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/security/hallway) +"nig" = ( +/obj/effect/floor_decal/techfloor, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"nin" = ( +/obj/structure/bed/chair/bay/chair{ + icon_state = "bay_chair_preview"; + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"nqE" = ( +/obj/machinery/computer/ship/sensors{ + icon_state = "computer"; + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"ntp" = ( +/obj/machinery/computer/ship/engines{ + icon_state = "computer"; + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"nym" = ( +/obj/machinery/computer/shuttle_control/explore/securiship{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"okJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + icon_state = "intact-fuel"; + dir = 8 + }, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) +"oEa" = ( +/obj/structure/bed/chair/bay/chair/padded/beige{ + icon_state = "bay_chair_preview"; + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"oGF" = ( +/obj/machinery/door/airlock/glass_external, +/obj/effect/map_helper/airlock/door/simple, +/turf/simulated/floor/tiled, +/area/security/hallway) +"oHo" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 8; + name = "west bump"; + pixel_x = -28 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"oJa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + icon_state = "intact-aux"; + dir = 6 + }, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/general) +"plY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + icon_state = "map-fuel"; + dir = 1 + }, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) +"pYS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 2; + icon_state = "pdoor0"; + id = "securiship blast"; + name = "Shuttle Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/shuttle/securiship/general) +"qwY" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/bed/chair/bay/chair/padded/beige, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"qDa" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/machinery/atmospherics/portables_connector/aux, +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"rfZ" = ( +/obj/machinery/door/airlock/glass_external, +/obj/effect/map_helper/airlock/door/ext_door, +/obj/machinery/airlock_sensor/airlock_exterior/shuttle{ + dir = 4; + pixel_x = 0; + pixel_y = -28 + }, +/obj/effect/map_helper/airlock/sensor/ext_sensor, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/general) +"rgV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"rhI" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"rlz" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/heads/hos) +"rBj" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "securiship blast"; + name = "Shuttle Blast Doors"; + opacity = 0 + }, +/turf/simulated/floor/plating, +/area/shuttle/securiship/cockpit) +"rFu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + icon_state = "intact-aux"; + dir = 8 + }, +/obj/machinery/airlock_sensor{ + pixel_y = 28 + }, +/obj/effect/map_helper/airlock/sensor/int_sensor, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"rIa" = ( +/obj/structure/cable/green{ + icon_state = "1-2"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"rUg" = ( +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"sio" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"sYy" = ( +/obj/machinery/atmospherics/portables_connector/fuel{ + icon_state = "map_connector-fuel"; + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/effect/floor_decal/industrial/outline/red, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) +"tqy" = ( +/obj/structure/grille, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/window/reinforced/polarized/full{ + id = "hos_office" + }, +/turf/simulated/floor, +/area/crew_quarters/heads/hos) +"trD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/general) +"uzs" = ( +/obj/machinery/shipsensors{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/airless, +/area/shuttle/securiship/cockpit) +"vlw" = ( +/obj/machinery/door/window/brigdoor/eastleft, +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"vqZ" = ( +/turf/simulated/wall/rshull, +/area/shuttle/securiship/cockpit) +"vsJ" = ( +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"vyd" = ( +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/binary/pump/fuel, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/engines) "vFD" = ( /obj/structure/catwalk, /obj/random/cutout, /turf/simulated/floor, /area/maintenance/station/sec_upper) +"wIZ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"wRu" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/structure/bed/chair/bay/chair/padded/beige{ + icon_state = "bay_chair_preview"; + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + dir = 2; + id = "securiship blast"; + name = "Shuttle Blast Doors"; + pixel_x = -28; + pixel_y = 28; + req_access = list(67) + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/securiship/cockpit) +"xaA" = ( +/obj/structure/grille, +/obj/structure/cable/green, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "hos_office" + }, +/turf/simulated/floor, +/area/crew_quarters/heads/hos) +"xeo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) +"xmG" = ( +/obj/structure/grille, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/window/reinforced/polarized/full{ + id = "hos_office" + }, +/turf/simulated/floor, +/area/crew_quarters/heads/hos) +"xny" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/airless, +/area/shuttle/securiship/engines) +"xou" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/bed/chair/bay/chair, +/turf/simulated/floor/tiled/dark, +/area/shuttle/securiship/general) +"xqB" = ( +/turf/simulated/wall/rshull, +/area/shuttle/securiship/engines) +"yau" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/aux{ + icon_state = "intact-aux"; + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/securiship/general) +"ygj" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner2{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + dir = 2; + frequency = 1380; + id_tag = "securiship_bay"; + pixel_x = -22; + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/security/hallway) (1,1,1) = {" aaa @@ -34527,19 +35356,19 @@ aaa aaa aaa aaa +aad +aad +aae +aot +aad +aad +aae +aad +aad +aad aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad aaa aaa aaa @@ -34666,25 +35495,25 @@ aaa aaa aaa aaa +aad aaa aaa aaa aaa +aae aaa aaa aaa +aae aaa aaa +aae +aae +aae +aad aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad aaa aaa aaa @@ -34808,25 +35637,25 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae +aae aaa aaa aaa @@ -34950,6 +35779,8 @@ aaa aaa aaa aaa +aad +aae aaa aaa aaa @@ -34966,10 +35797,8 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +aae +aad aaa aaa aaa @@ -35093,25 +35922,25 @@ aaa aaa aaa aaa +aae aaa +uzs +vqZ +vqZ +vqZ +isz +pYS +pYS +isz +isz +xqB +xqB +xqB +xqB +xqB aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae +aad aaa aaa aaa @@ -35233,27 +36062,27 @@ aaa aaa aaa aaa +aad aaa +aae aaa +vqZ +vqZ +ntp +oHo +doX +oEa +fGQ +vsJ +nin +xqB +ePT +jjJ +hyn +xny aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae +aad aaa aaa aaa @@ -35375,27 +36204,27 @@ aaa aaa aaa aaa +aad +aae +aae aaa +rBj +cNP +wRu +nig +kAs +kAs +xou +vlw +gBp +xqB +gxX +bpl +plY +xny aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae +aad aaa aaa aaa @@ -35517,27 +36346,27 @@ aaa aaa aaa aaa +aad aaa +aae aaa +rBj +bvH +nqE +wIZ +jHa +rhI +qwY +jHa +jHa +gJa +sio +jrx +okJ +xqB aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae +aad aaa aaa aaa @@ -35661,24 +36490,24 @@ aaa aaa aaa aaa +aae aaa +isz +qDa +rUg +deE +hEY +yau +kAs +exP +rIa +lFr +gkR +vyd +xeo +xqB aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae aaa aaa aaa @@ -35803,27 +36632,27 @@ aad aaa agm aaa -aad -aad aae -aot -aad -aad +aaa +isz +isz +isz +isz +isz +rFu +kAs +cwr +oEa +xqB +hoF +klB +plY +xny +aaa aae aad aad aad -aae -aad -aad -aad -aae -aad -aad -aad -aae -aad -aad aad aae aad @@ -35945,27 +36774,27 @@ aae aaa aae aaa +aae aaa +oJa +trD +bDn +gjM +boY +kqS +rIa +eZt +nym +xqB +sYy +sYy +gSE +xny aaa aae aaa aaa aaa -aae -aaa -aaa -aaa -aae -aaa -aaa -aaa -aae -aaa -aaa -aaa -aae -aaa -aaa aaa aae aaa @@ -36088,22 +36917,22 @@ aae aae aae aae -aae -aae -aae -aae -aae -aYW -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae +aaa +mxs +isz +lmZ +rfZ +isz +eZd +eZd +isz +eZd +xqB +xqB +xqB +xqB +xqB +aaa aae aae aae @@ -36220,10 +37049,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aZF +aab aje aje aje @@ -36235,6 +37061,9 @@ aje aje alj alZ +aje +ebj +oGF aqc aqv ard @@ -36243,7 +37072,7 @@ asL atG auF aaa -aae +aaa aaa aaa aaa @@ -36361,11 +37190,8 @@ aab aaa aaa aaa -aaa -aaa -aaa aab -aZF +aab aje aLS aWH @@ -36377,6 +37203,9 @@ anW aTO aoW aZM +tqy +ygj +atY amb aqw are @@ -36385,7 +37214,7 @@ afO atH auG avs -aae +aaa aaa aJW axv @@ -36505,9 +37334,6 @@ aab aab aab aab -aab -aab -aZF aje aUi aiS @@ -36519,7 +37345,10 @@ anX aTW aoX aSc -amE +lMN +mLa +apG +amb aqx arf asb @@ -36527,7 +37356,7 @@ asM atI auI avs -aae +aaa aaa axv axw @@ -36647,9 +37476,6 @@ aab aab aab aab -aab -aab -aZF aje aje aje @@ -36661,7 +37487,10 @@ aRq aYC akv aSP -amF +xmG +mLa +apG +amb aqy arg asc @@ -36792,9 +37621,6 @@ aab aab aab aab -aab -aab -aab aje aVK ajM @@ -36803,6 +37629,9 @@ aeG aov aoZ afr +aje +dSk +ifk aqc amG arh @@ -36934,15 +37763,15 @@ aao aao aao aab -aab -aab -aab aje aYV ajM aTD aeH aow +rlz +rgV +jxg aUn acZ amb @@ -37076,18 +37905,18 @@ aao aao aao aab -aab -aab -aab aje ahd aWN aet aYx aWh +jnQ +iUO +xaA apa aSz -amE +amb aqA arj ase @@ -37218,18 +38047,18 @@ aju aju aao aab -aab -aab -aab aje akI aUy akO -aoa +fxI aox +amy +aoa +xmG aff -apC -amF +atT +amb aqB ark asf @@ -37512,7 +38341,7 @@ anH aob amh apb -afs +atY aqe aqD arm @@ -37654,7 +38483,7 @@ anI aoc afd apc -anN +apG aqe aqE arm @@ -37796,7 +38625,7 @@ anJ aeK amh amj -amK +ifk afH aqF arn @@ -42025,9 +42854,9 @@ aaa aaa aaa aaa -aed -agg -agg +aaa +aaa +aaa aaU aaU aaU @@ -46916,7 +47745,7 @@ aMN aTv aVr aWQ -aVr +aVx aMN avt avt @@ -47201,11 +48030,11 @@ aTB aVC aXn aWI -aYJ -aYZ -aVc aWf -aZZ +aYJ +aVc +aYZ +aZS bai baO bau @@ -47488,7 +48317,7 @@ aWI aYP aZf aVc -aVx +aZZ ban bai bax diff --git a/maps/tether/tether-08-mining.dmm b/maps/tether/tether-08-mining.dmm index 7289bdc33d6..572560d98df 100644 --- a/maps/tether/tether-08-mining.dmm +++ b/maps/tether/tether-08-mining.dmm @@ -27,6 +27,9 @@ /area/outpost/mining_main/hangar) "ah" = ( /obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "ai" = ( @@ -39,8 +42,9 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "ak" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) @@ -52,7 +56,11 @@ /turf/simulated/wall/r_wall, /area/outpost/mining_main/hangar) "an" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, @@ -77,8 +85,8 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "ar" = ( -/obj/effect/floor_decal/industrial/warning{ - icon_state = "warning"; +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/tiled, @@ -91,14 +99,18 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "at" = ( -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "au" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) @@ -115,24 +127,17 @@ /area/outpost/mining_main/maintenance) "aw" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "ax" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + icon_state = "warning"; + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "ay" = ( @@ -159,15 +164,11 @@ /area/mine/explored) "aC" = ( /obj/effect/floor_decal/industrial/warning/corner{ - icon_state = "warningcorner"; - dir = 1 + dir = 4 }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 - }, -/obj/structure/cable/green{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) @@ -251,8 +252,12 @@ /turf/simulated/floor/virgo3b, /area/mine/explored) "aK" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "aL" = ( @@ -473,29 +478,25 @@ /turf/simulated/floor/plating, /area/outpost/mining_main/maintenance) "bg" = ( -/obj/machinery/alarm{ - alarm_id = null; - breach_detection = 0; - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/brown/bordercorner2{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "bh" = ( -/obj/machinery/status_display{ - pixel_x = 32 +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, /obj/structure/cable/green{ - icon_state = "1-2" + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) @@ -626,11 +627,21 @@ /turf/simulated/floor/plating, /area/outpost/mining_main/maintenance) "bv" = ( -/obj/machinery/door/airlock/glass_mining, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "bw" = ( /obj/structure/cable{ @@ -817,53 +828,38 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/secondary_gear_storage) "bP" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/machinery/light, +/obj/effect/floor_decal/industrial/warning/corner{ + icon_state = "warningcorner"; + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/outpost/mining_main/hangar) "bQ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 12; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/bordercorner2{ - dir = 1 - }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled, -/area/outpost/mining_main/secondary_gear_storage) +/area/outpost/mining_main/hangar) "bR" = ( -/obj/structure/cable/green{ - icon_state = "1-8" - }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/light, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled, -/area/outpost/mining_main/secondary_gear_storage) +/area/outpost/mining_main/hangar) "bS" = ( /obj/structure/window/reinforced/full, /obj/structure/window/reinforced{ @@ -893,11 +889,13 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/secondary_gear_storage) "bV" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/outpost/mining_main/secondary_gear_storage) +/area/outpost/mining_main/hangar) "bW" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/brown/border, @@ -1115,9 +1113,6 @@ icon_state = "alarm0"; pixel_y = -22 }, -/obj/structure/cable/green{ - icon_state = "1-4" - }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/brown/border, /obj/effect/floor_decal/borderfloor/corner2{ @@ -1126,14 +1121,22 @@ /obj/effect/floor_decal/corner/brown/bordercorner2{ dir = 9 }, -/turf/simulated/floor/tiled, -/area/outpost/mining_main/secondary_gear_storage) -"cy" = ( -/obj/structure/cable/green{ - icon_state = "2-8" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/outpost/mining_main/secondary_gear_storage) +/area/outpost/mining_main/hangar) +"cy" = ( +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/hangar) "cz" = ( /obj/effect/floor_decal/industrial/warning/dust{ dir = 8 @@ -1150,8 +1153,10 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel_grid, -/area/outpost/mining_main/secondary_gear_storage) +/area/outpost/mining_main/hangar) "cC" = ( /obj/structure/table/steel, /obj/item/weapon/tool/screwdriver, @@ -1187,11 +1192,47 @@ /turf/simulated/floor/tiled, /area/outpost/mining_main/break_room) "cE" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 12; + pixel_y = 24 + }, /obj/structure/cable/green{ - icon_state = "1-2" + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, /turf/simulated/floor/tiled, -/area/outpost/mining_main/break_room) +/area/outpost/mining_main/secondary_gear_storage) "cF" = ( /obj/effect/floor_decal/steeldecal/steel_decals7, /obj/effect/floor_decal/steeldecal/steel_decals7{ @@ -1241,22 +1282,18 @@ /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/outpost/mining_main/drill_equipment) "cI" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable/green{ icon_state = "1-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/outpost/mining_main/break_room) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) "cJ" = ( /obj/structure/cable/green{ d1 = 2; @@ -1415,6 +1452,116 @@ /obj/machinery/light, /turf/simulated/floor/tiled, /area/outpost/mining_main/secondary_gear_storage) +"cU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"cV" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"cW" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"cX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"cY" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"cZ" = ( +/obj/machinery/alarm{ + alarm_id = null; + breach_detection = 0; + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + icon_state = "intact-scrubbers"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"da" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/secondary_gear_storage) +"db" = ( +/obj/machinery/door/airlock/glass_mining, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outpost/mining_main/secondary_gear_storage) +"dc" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/break_room) +"dd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/outpost/mining_main/break_room) "di" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -2860,12 +3007,12 @@ ab ab ag ah -an -an -an -an -an -at +aw +aw +aw +aw +aw +aC aD ag ab @@ -3001,13 +3148,13 @@ ab ab ab ag -ai +ak aq aq aq aq aq -au +aK aE ag ab @@ -3143,14 +3290,14 @@ ab ab ab ag -ai +ak aq aq aq aq aq -au aK +bQ ag ab ab @@ -3285,14 +3432,14 @@ ab ab ab ag -as +an aq aq aq aq aq -au -bP +aK +bR ag ab ab @@ -3427,14 +3574,14 @@ ab ab ab ag -ai +ar aq aq aq aq aq -au -aK +bg +bV ag ab cu @@ -3575,7 +3722,7 @@ aq aq aq aq -au +aK aX ag ab @@ -3717,7 +3864,7 @@ aq aq aq aq -au +aK aY ag ab @@ -3859,7 +4006,7 @@ aq aq aq aq -au +aK aY ag bG @@ -4001,7 +4148,7 @@ aq aq aq aq -au +aK cw ag bO @@ -4143,13 +4290,13 @@ aq aq aq aq -aw +bh aZ ag cS +cU bU -bU -bU +cX cT cA aI @@ -4279,20 +4426,20 @@ ab ab ab ag -ai +at aq aq ao aq aq -ax -bg -ag -bQ -bV -bV -bV +bv cx +ag +cE +cV +cW +cY +cZ bG cD aW @@ -4421,23 +4568,23 @@ ab ab ab ag -ak -ar -ar -ar -ar -ar -aC -bh -bv -bR +au +ax +ax +ax +ax +ax +bP +cy +cB +cI bX ce co -cy -cB -cE -cI +da +db +dc +dd bW hK Ma diff --git a/maps/tether/tether_areas.dm b/maps/tether/tether_areas.dm index 2e9c8e11d4e..9c595e82e11 100644 --- a/maps/tether/tether_areas.dm +++ b/maps/tether/tether_areas.dm @@ -1085,6 +1085,19 @@ /area/shuttle/medivac/engines name = "\improper Medivac Engines" +/area/shuttle/securiship + requires_power = 1 + icon_state = "shuttle2" + +/area/shuttle/securiship/general + name = "\improper Securiship" + +/area/shuttle/securiship/cockpit + name = "\improper Securiship Cockpit" + +/area/shuttle/securiship/engines + name = "\improper Securiship Engines" + //TFF 5/4/20 - Mining Ops move // Asteroid Mining belter and Mining Outpost shuttles and refinery/gear areas /area/quartermaster/belterdock diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 8d5ad08d249..be5f14b42f5 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -259,4 +259,30 @@ /obj/machinery/computer/shuttle_control/explore/medivac name = "short jump console" shuttle_tag = "Medivac Shuttle" - req_one_access = list(access_pilot) + req_one_access = list(access_cmo, access_pilot) + +//////////////////////////////////////// +//////// Securiship ///////////// +//////////////////////////////////////// +/datum/shuttle/autodock/overmap/securiship + name = "Securiship Shuttle" + warmup_time = 0 + current_location = "tether_securiship_dock" + docking_controller_tag = "securiship_docker" + shuttle_area = list(/area/shuttle/securiship/cockpit, /area/shuttle/securiship/general, /area/shuttle/securiship/engines) + fuel_consumption = 1 + move_direction = NORTH + +// The 'ship' of the excursion shuttle +/obj/effect/overmap/visitable/ship/landable/securiship + name = "Securiship Shuttle" + desc = "A security transport ship." + vessel_mass = 3000 + vessel_size = SHIP_SIZE_SMALL + shuttle = "Securiship Shuttle" + fore_dir = EAST + +/obj/machinery/computer/shuttle_control/explore/securiship + name = "short jump console" + shuttle_tag = "Securiship Shuttle" + req_one_access = list(access_pilot, access_hos) diff --git a/nano/templates/mod_uav.tmpl b/nano/templates/mod_uav.tmpl new file mode 100644 index 00000000000..94498ec1098 --- /dev/null +++ b/nano/templates/mod_uav.tmpl @@ -0,0 +1,53 @@ +
+
+
UAV:
+
+ {{if data.current_uav}} + {{:data.current_uav.status}} + {{else}} + [Not Connected] + {{/if}} +
+
+ +
+
Signal:
+
+ {{if data.current_uav}} + {{:data.signal_strength}} + {{else}} + [Not Connected] + {{/if}} +
+
+ +
+
Power:
+
+ {{if data.current_uav}} + {{:helper.link(data.current_uav.power ? 'Online' : 'Offline', data.current_uav.power ? 'check' : 'close', {'power_uav' : 1}, null, data.current_uav.power ? 'linkOn' : 'redButton')}} + {{else}} + [Not Connected] + {{/if}} +
+
+ +
+
Camera:
+
+ {{if data.current_uav}} + {{:helper.link(data.current_uav.power ? 'Available' : 'Unavailable', data.current_uav.power ? 'check' : 'close', {'view_uav' : 1}, null, data.in_use ? 'linkOn' : null)}} + {{else}} + [Not Connected] + {{/if}} +
+
+
+
+
Paired UAVs:
+
+{{for data.paired_uavs}} +
+ {{:helper.link(value.name, '', {'switch_uav' : value.uavref})}}{{:helper.link('', 'close', {'del_uav' : value.uavref}, null, 'redButton')}} +
+{{/for}} diff --git a/nano/templates/shutoff_monitor.tmpl b/nano/templates/shutoff_monitor.tmpl index 1b6cb6fe151..2597a1b6f5d 100644 --- a/nano/templates/shutoff_monitor.tmpl +++ b/nano/templates/shutoff_monitor.tmpl @@ -1,18 +1,13 @@

Automated Shutoff Valve Monitoring Console


+ +
NamePositionOpenModeActions {{for data.valves}} -
-
- {{:value.name}} -
-
- - {{:helper.link(value.open ? 'Open' : 'Closed', 'alert', {'toggle_open' : value.ref})}} - {{:helper.link(value.enable ? 'Enabled' : 'Disabled', 'alert', {'toggle_enable' : value.ref})}} - - - Coordinates: ({{:value.x}}, {{:value.y}}, {{:value.z}}) - -
-
-{{/for}} \ No newline at end of file +
{{:value.name}} + {{:value.x}}, {{:value.y}}, {{:value.z}} + {{:value.open ? 'Yes' : 'No'}} + {{:value.enabled ? 'Auto' : 'Manual'}} + {{:helper.link(value.open ? 'Close' : 'Open', null, {'toggle_open' : value.ref}, value.enabled ? 'disabled' : null)}} + {{:helper.link(value.enabled ? 'Manual' : 'Auto', null, {'toggle_enable' : value.ref})}} +{{/for}} +
\ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index ea0545624f5..662c43c1aa2 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -225,6 +225,7 @@ #include "code\controllers\verbs.dm" #include "code\controllers\observer_listener\atom\observer.dm" #include "code\controllers\subsystems\ai.dm" +#include "code\controllers\subsystems\aifast.dm" #include "code\controllers\subsystems\air.dm" #include "code\controllers\subsystems\airflow.dm" #include "code\controllers\subsystems\alarm.dm" @@ -723,6 +724,7 @@ #include "code\game\jobs\job\department_vr.dm" #include "code\game\jobs\job\engineering.dm" #include "code\game\jobs\job\engineering_vr.dm" +#include "code\game\jobs\job\exploration_vr.dm" #include "code\game\jobs\job\job.dm" #include "code\game\jobs\job\job_vr.dm" #include "code\game\jobs\job\medical.dm" @@ -1067,6 +1069,7 @@ #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\trash_material.dm" #include "code\game\objects\items\trash_vr.dm" +#include "code\game\objects\items\uav.dm" #include "code\game\objects\items\devices\advnifrepair.dm" #include "code\game\objects\items\devices\ai_detector.dm" #include "code\game\objects\items\devices\aicard.dm" @@ -1390,6 +1393,7 @@ #include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" #include "code\game\objects\structures\crates_lockers\closets\l3closet_vr.dm" #include "code\game\objects\structures\crates_lockers\closets\malfunction.dm" +#include "code\game\objects\structures\crates_lockers\closets\misc_vr.dm" #include "code\game\objects\structures\crates_lockers\closets\statue.dm" #include "code\game\objects\structures\crates_lockers\closets\syndicate.dm" #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" @@ -1615,12 +1619,13 @@ #include "code\modules\ai\ai_holder_movement.dm" #include "code\modules\ai\ai_holder_pathfinding.dm" #include "code\modules\ai\ai_holder_targeting.dm" +#include "code\modules\ai\ai_holder_targeting_vr.dm" #include "code\modules\ai\interfaces.dm" #include "code\modules\ai\say_list.dm" -#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm" -#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai_vr.dm" -#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai.dm" -#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai_vr.dm" +#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai.dm" +#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai_vr.dm" +#include "code\modules\ai\aI_holder_subtypes\slime_xenobio_ai.dm" +#include "code\modules\ai\aI_holder_subtypes\slime_xenobio_ai_vr.dm" #include "code\modules\alarm\alarm.dm" #include "code\modules\alarm\alarm_handler.dm" #include "code\modules\alarm\atmosphere_alarm.dm" @@ -2789,6 +2794,7 @@ #include "code\modules\modular_computers\file_system\programs\engineering\atmos_control.dm" #include "code\modules\modular_computers\file_system\programs\engineering\power_monitor.dm" #include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\shutoff_monitor.dm" #include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm" #include "code\modules\modular_computers\file_system\programs\generic\camera.dm" #include "code\modules\modular_computers\file_system\programs\generic\configurator.dm" @@ -2799,6 +2805,7 @@ #include "code\modules\modular_computers\file_system\programs\generic\ntdownloader.dm" #include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm" +#include "code\modules\modular_computers\file_system\programs\generic\uav.dm" #include "code\modules\modular_computers\file_system\programs\generic\wordprocessor.dm" #include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm" #include "code\modules\modular_computers\file_system\programs\research\email_administration.dm" @@ -3542,21 +3549,12 @@ #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\RandomZLevels\blackmarketpackers.dm" -#include "maps\southern_cross\southern_cross_jobs_vr.dm" -#include "maps\southern_cross\items\encryptionkey_sc.dm" -#include "maps\southern_cross\items\encryptionkey_vr.dm" -#include "maps\southern_cross\items\headset_sc.dm" -#include "maps\southern_cross\items\headset_vr.dm" #include "maps\southern_cross\items\clothing\sc_accessory.dm" #include "maps\southern_cross\items\clothing\sc_suit.dm" #include "maps\southern_cross\items\clothing\sc_under.dm" -#include "maps\southern_cross\job\outfits.dm" -#include "maps\southern_cross\job\outfits_vr.dm" #include "maps\southern_cross\loadout\loadout_head.dm" #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" -#include "maps\southern_cross\structures\closets\misc.dm" -#include "maps\southern_cross\structures\closets\misc_vr.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm"